/// <summary> /// Get resources from set of resx files. /// Resources are groupped in bundles for each set of resx-files with same base name (like messages.resx, messages.en.resx, message.ru.resx) /// </summary> public static IDictionary<string, ResourceBundle> GetResources(IList<string> inputFiles, ConverterLogger logger) { var fileBundles = new Dictionary<string, ResourceFileBundle>(); foreach (var filePath in inputFiles) { string fileName = Path.GetFileName(filePath); string fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName); bool isBaseFile; int idx = fileNameWithoutExt.IndexOf(".", StringComparison.InvariantCulture); // All files with the same base name form a bundle string baseName = fileNameWithoutExt; CultureInfo culture = null; ResourceFileBundle bundle; if (idx == -1) { isBaseFile = true; } else { // file name contains "." - it can culture name or something else string suffix = fileNameWithoutExt.Substring(idx + 1); culture = getCulture(suffix); if (culture != null) { // the file is a culture-specific resource file isBaseFile = false; baseName = fileNameWithoutExt.Substring(0, idx); } else { isBaseFile = true; } } if (String.IsNullOrEmpty(baseName)) { throw new Exception("Could not extract baseName from the file name: '" + fileName + "'"); } if (!fileBundles.TryGetValue(baseName, out bundle)) { bundle = new ResourceFileBundle(); fileBundles[baseName] = bundle; } if (isBaseFile) { bundle.BaseName = baseName; bundle.BaseFile = filePath; } else { bundle.AddCultureFile(culture, filePath); } } var bundles = new Dictionary<string, ResourceBundle>(); // read values from resx files grouped in bundles foreach (ResourceFileBundle fileBundle in fileBundles.Values) { if (String.IsNullOrEmpty(fileBundle.BaseFile) || String.IsNullOrEmpty(fileBundle.BaseName)) { string locFiles = null; if (fileBundle.CultureFiles.Count > 0) { locFiles = string.Join(", ", fileBundle.CultureFiles.Select(p => p.Value)); } logger.AddMsg(Severity.Error, "Ignoring localized resources without base resx-file {0}", locFiles != null ? ": " + locFiles : ""); continue; } var bundle = new ResourceBundle(fileBundle.BaseName); bundle.AddResources(null, getKeyValuePairsFromResxFile(fileBundle.BaseFile)); foreach (KeyValuePair<CultureInfo, string> pair in fileBundle.CultureFiles) { var values = getKeyValuePairsFromResxFile(pair.Value); bundle.AddResources(pair.Key, values); } bundles[fileBundle.BaseName] = bundle; } return bundles; }
/// <summary> /// Get resources from set of resx files. /// Resources are groupped in bundles for each set of resx-files with same base name (like messages.resx, messages.en.resx, message.ru.resx) /// </summary> public static IDictionary <string, ResourceBundle> GetResources(IList <string> inputFiles, ConverterLogger logger) { var fileBundles = new Dictionary <string, ResourceFileBundle>(); foreach (var filePath in inputFiles) { string fileName = Path.GetFileName(filePath); string fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName); bool isBaseFile; int idx = fileNameWithoutExt.IndexOf(".", StringComparison.InvariantCulture); // All files with the same base name form a bundle string baseName = fileNameWithoutExt; CultureInfo culture = null; ResourceFileBundle bundle; if (idx == -1) { isBaseFile = true; } else { // file name contains "." - it can culture name or something else string suffix = fileNameWithoutExt.Substring(idx + 1); culture = getCulture(suffix); if (culture != null) { // the file is a culture-specific resource file isBaseFile = false; baseName = fileNameWithoutExt.Substring(0, idx); } else { isBaseFile = true; } } if (String.IsNullOrEmpty(baseName)) { throw new Exception("Could not extract baseName from the file name: '" + fileName + "'"); } if (!fileBundles.TryGetValue(baseName, out bundle)) { bundle = new ResourceFileBundle(); fileBundles[baseName] = bundle; } if (isBaseFile) { bundle.BaseName = baseName; bundle.BaseFile = filePath; } else { bundle.AddCultureFile(culture, filePath); } } var bundles = new Dictionary <string, ResourceBundle>(); // read values from resx files grouped in bundles foreach (ResourceFileBundle fileBundle in fileBundles.Values) { if (String.IsNullOrEmpty(fileBundle.BaseFile) || String.IsNullOrEmpty(fileBundle.BaseName)) { string locFiles = null; if (fileBundle.CultureFiles.Count > 0) { locFiles = string.Join(", ", fileBundle.CultureFiles.Select(p => p.Value)); } logger.AddMsg(Severity.Error, "Ignoring localized resources without base resx-file {0}", locFiles != null ? ": " + locFiles : ""); continue; } var bundle = new ResourceBundle(fileBundle.BaseName); bundle.AddResources(null, getKeyValuePairsFromResxFile(fileBundle.BaseFile)); foreach (KeyValuePair <CultureInfo, string> pair in fileBundle.CultureFiles) { var values = getKeyValuePairsFromResxFile(pair.Value); bundle.AddResources(pair.Key, values); } bundles[fileBundle.BaseName] = bundle; } return(bundles); }