Пример #1
0
        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());
                    }
                }
            }
        }
Пример #2
0
 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));
     }
 }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
            }
        }