private static bool TryLoadLocaleFromFile(FileInfo archiveFile, CultureInfo culture, out ModLocale locale) { using (var archive = ZipFile.OpenRead(archiveFile.FullName)) { string localeDir = "/locale/" + culture.TwoLetterISOLanguageName; var streamList = new List <Stream>(); foreach (var entry in archive.Entries) { if (entry.FullName.Contains(localeDir) && (entry.FullName.Count(c => c == '/') == 3) && entry.Name.EndsWith(".cfg")) { var stream = entry.Open(); streamList.Add(stream); } } if (streamList.Count == 0) { locale = null; return(false); } else { try { locale = new ModLocale(culture, streamList); return(true); } finally { streamList?.ForEach(stream => stream?.Close()); } } } }
private bool TryLoadLocale(CultureInfo culture, out ModLocale locale) { if (isFile) { return(TryLoadLocaleFromFile((FileInfo)file, culture, out locale)); } else { return(TryLoadLocaleFromDirectory((DirectoryInfo)file, culture, out locale)); } }
private ModLocale GetDefaultLocale() { if (locales.TryGetValue(DefaultLocaleString, out var storedValue)) { return(storedValue); } else { var culture = new CultureInfo(DefaultLocaleString); if (!TryLoadLocale(culture, out var locale)) { locale = new ModLocale(culture); } locales.Add(culture.TwoLetterISOLanguageName, locale); return(locale); } }
private static bool TryLoadLocaleFromDirectory(DirectoryInfo directory, CultureInfo culture, out ModLocale locale) { var localeParentDir = new DirectoryInfo(Path.Combine(directory.FullName, "locale")); var localeDir = localeParentDir.EnumerateDirectories().FirstOrDefault(dir => dir.Name.StartsWith(culture.TwoLetterISOLanguageName)); if (localeDir == null) { locale = null; return(false); } var files = localeDir.EnumerateFiles("*.cfg"); if (files.Any()) { locale = new ModLocale(culture, files); return(true); } else { locale = null; return(false); } }