示例#1
0
        private void FindResx(string rootDirectory, string currentDirectory)
        {
            var displayFolder = string.Empty;

            if (currentDirectory.StartsWith(rootDirectory, StringComparison.InvariantCultureIgnoreCase))
            {
                displayFolder = currentDirectory.Substring(rootDirectory.Length);
            }

            displayFolder = displayFolder.TrimStart('\\', '/');

            var files = Directory.GetFiles(currentDirectory, "*.resx");

            foreach (var filename in files)
            {
                var filenameNoExt = Path.GetFileNameWithoutExtension(filename);
                if (string.IsNullOrEmpty(filenameNoExt))
                {
                    continue;
                }

                // Try to get the language code
                var potentialLanguageCode = Path.GetExtension(filenameNoExt).TrimStart('.');

                var culture = SupportedCultureCache.FirstOrDefault(
                    info => info.Name.Equals(potentialLanguageCode, StringComparison.InvariantCultureIgnoreCase));

                if (culture != null)
                {
                    // Get rid of the language code to get the base filename
                    filenameNoExt = Path.GetFileNameWithoutExtension(filenameNoExt);
                }

                ResourceHolder resourceHolder;
                var            key = (displayFolder + "\\" + filenameNoExt).ToLower();
                if (!_resourceStore.TryGetValue(key, out resourceHolder))
                {
                    resourceHolder = new ResourceHolder
                    {
                        Id            = filenameNoExt,
                        DisplayFolder = displayFolder
                    };

                    var dir = Path.GetDirectoryName(filename);
                    Debug.Assert(dir != null, "dir != null");
                    resourceHolder.Filename = Path.Combine(dir, filenameNoExt + ".resx");

                    _resourceStore.Add(key, resourceHolder);
                }

                if (culture != null)
                {
                    if (resourceHolder.Languages.ContainsKey(culture.Name.ToLower()))
                    {
                        throw new InvalidDataException(string.Format(Localization.Error_DuplicateResx, filename));
                    }

                    resourceHolder.Languages.Add(culture.Name.ToLower(), new LanguageHolder(culture.Name, filename));
                }
            }

            var subfolders = Directory.GetDirectories(currentDirectory);

            foreach (var subfolder in subfolders)
            {
                FindResx(rootDirectory, subfolder);
            }
        }
示例#2
0
        private void FindResx(string rootDirectory, string currentDirectory)
        {
            var displayFolder = string.Empty;

            if (currentDirectory.StartsWith(rootDirectory, StringComparison.InvariantCultureIgnoreCase))
            {
                displayFolder = currentDirectory.Substring(rootDirectory.Length);
            }
            if (displayFolder.StartsWith("\\"))
            {
                displayFolder = displayFolder.Remove(0, 1);
            }

            var files = Directory.GetFiles(currentDirectory, "*.resx");

            foreach (var filename in files)
            {
                var filenameNoExt = Path.GetFileNameWithoutExtension(filename);
                if (string.IsNullOrEmpty(filenameNoExt))
                {
                    continue;
                }

                // Try to get the language code
                var potentialLanguageCode = Path.GetExtension(filenameNoExt).Replace(".", string.Empty);

                string languageCode = null;

                // Full language code: xx-yy Short language code: xx
                if ((potentialLanguageCode.Length == 5 && potentialLanguageCode[2] == '-') ||
                    potentialLanguageCode.Length == 2)
                {
                    languageCode = potentialLanguageCode;

                    // Get rid of the language code to get the base filename
                    filenameNoExt = Path.GetFileNameWithoutExtension(filenameNoExt);
                }

                ResourceHolder resourceHolder;
                var            key = (displayFolder + "\\" + filenameNoExt).ToLower();
                if (!_resourceStore.TryGetValue(key, out resourceHolder))
                {
                    resourceHolder = new ResourceHolder
                    {
                        Id            = filenameNoExt,
                        DisplayFolder = displayFolder
                    };

                    if (string.IsNullOrEmpty(languageCode))
                    {
                        resourceHolder.Filename = filename;
                    }

                    _resourceStore.Add(key, resourceHolder);
                }

                if (string.IsNullOrEmpty(languageCode))
                {
                    // This is the main file
                    resourceHolder.Filename = filename;
                }
                else
                {
                    if (resourceHolder.Languages.ContainsKey(languageCode.ToLower()))
                    {
                        throw new InvalidDataException(string.Format(Localization.Error_DuplicateResx, filename));
                    }

                    resourceHolder.Languages.Add(languageCode.ToLower(), new LanguageHolder(languageCode, filename));
                }
            }

            var subfolders = Directory.GetDirectories(currentDirectory);

            foreach (var subfolder in subfolders)
            {
                FindResx(rootDirectory, subfolder);
            }
        }