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,"); } }
Localization(CultureInfo culture, LocalizationDictionary dict) { Culture = culture; Dictionary = dict; }
public void AddFallback(LocalizationDictionary dict) => _fallbacks.Add(dict);