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); } }
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); } }