public string GetValue(string Key, string fallback = null) { string v = null; v = RawData.FindValue(Key); if (v is null) { v = fallback; } return(v); }
/// <summary> /// Init language dictionary with given culture information string (e.g.: en-US). /// </summary> /// <param name="CultureInfo"></param> public static void Initialize(string CultureInfo) { Assembly assembly = typeof(Language).Assembly; DirectoryInfo location = new DirectoryInfo(Path.Combine(new FileInfo(assembly.Location).DirectoryName, "Locales", CultureInfo.ToUpper())); DirectoryInfo location_en = new DirectoryInfo(Path.Combine(new FileInfo(assembly.Location).DirectoryName, "Locales", "EN-US")); if (!location.Exists) { location = new DirectoryInfo(Path.Combine(new FileInfo(assembly.Location).DirectoryName, "Locales", "EN-US")); } if (!location.Exists) { Trace.WriteLine("Cannot find applicable language files."); return; } LanguageStrings.Clear(); //Load english first. foreach (var item in location_en.EnumerateFiles()) { INILikeData keyValuePairs = INILikeData.LoadFromWR(new FileWR(item)); string Namespace = keyValuePairs.FindValue("Namespace"); foreach (var ID in keyValuePairs) { if (ID.Key != "Namespace") { var Key = $"{Namespace}.{ID.Key}"; if (LanguageStrings.ContainsKey(Key)) { LanguageStrings[Key] = ID.Value; } else { LanguageStrings.Add(Key, ID.Value); } } } keyValuePairs.Dispose(); } //Then load target language. if (location.FullName != location_en.FullName) { foreach (var item in location.EnumerateFiles()) { INILikeData keyValuePairs = INILikeData.LoadFromWR(new FileWR(item)); string Namespace = keyValuePairs.FindValue("Namespace"); foreach (var ID in keyValuePairs) { if (ID.Key != "Namespace") { var Key = $"{Namespace}.{ID.Key}"; if (LanguageStrings.ContainsKey(Key)) { LanguageStrings[Key] = ID.Value; } else { LanguageStrings.Add(Key, ID.Value); } } } keyValuePairs.Dispose(); } } }