示例#1
0
        static Localization()
        {
            var assembly = typeof(Startup).Assembly;

            var langNamespace = typeof(Localization).Namespace;
            var langResources = assembly.GetManifestResourceNames()
                                .Where(n => n.StartsWith(langNamespace));

            foreach (var langResource in langResources)
            {
                // filename without extension
                var culture = new CultureInfo(Path.GetFileNameWithoutExtension(langResource).Split('.').Last());

                // load json as dictionary
                var dict = new LocalizationDictionary(culture);

                using (var stream = assembly.GetManifestResourceStream(langResource))
                    using (var reader = new StreamReader(stream))
                        using (var jsonReader = new JsonTextReader(reader))
                            dict.AddDefinition(JObject.Load(jsonReader));

                var localization = new Localization(culture, dict);

                _localizations[localization.Culture.Name.ToLowerInvariant()]        = localization;
                _localizations[localization.Culture.EnglishName.ToLowerInvariant()] = localization;
            }

            // default localization is English
            if (_localizations.TryGetValue(_defaultCulture, out var en))
            {
                Default = en;

                // set other localizations to fall back to English
                foreach (var localization in _localizations.Values.Where(l => l.Culture.Name != _defaultCulture))
                {
                    localization.Dictionary.AddFallback(Default.Dictionary);
                }
            }
            else
            {
                throw new FileNotFoundException($"Default localization culture '{_defaultCulture}' was not found,");
            }
        }
示例#2
0
 Localization(CultureInfo culture,
              LocalizationDictionary dict)
 {
     Culture    = culture;
     Dictionary = dict;
 }
示例#3
0
 public void AddFallback(LocalizationDictionary dict) => _fallbacks.Add(dict);