Exemple #1
0
        /// <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;
        }
Exemple #2
0
        /// <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);
        }