using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace MvvmScaffoldFrame48.Language { public static class LanguageManager { public static event EventHandler LanguageChangeEvent; private static int _nowLoadLanguage = 0; public static int NowLoadLanguage { get { return _nowLoadLanguage; } } public static List LanguageList { get { return new List() { "Chinese", "English" }; } } public static void ChangeLanguage(string languageCode) { // 获取现有的非语言资源字典(如样式) var existingNonLanguageDictionaries = Application.Current.Resources.MergedDictionaries .Where(rd => !IsLanguageResourceDictionary(rd)) .ToList(); // 清除现有字典并重新添加 Application.Current.Resources.MergedDictionaries.Clear(); // 先添加语言资源字典 var languageResourceDict = new ResourceDictionary(); switch (languageCode) { case "Chinese": languageResourceDict.Source = new Uri("/Language/String_Chinese.xaml", UriKind.Relative); _nowLoadLanguage = 0; break; case "English": languageResourceDict.Source = new Uri("/Language/String_English.xaml", UriKind.Relative); _nowLoadLanguage = 1; break; } Application.Current.Resources.MergedDictionaries.Add(languageResourceDict); // 再添加其他非语言资源字典(如样式) foreach (var dict in existingNonLanguageDictionaries) { Application.Current.Resources.MergedDictionaries.Add(dict); } OnLanguageChangeEvent(); } // 辅助方法:判断是否为语言资源字典 private static bool IsLanguageResourceDictionary(ResourceDictionary resourceDict) { if (resourceDict.Source == null) return false; var sourcePath = resourceDict.Source.ToString().ToLower(); return sourcePath.Contains("/language/string_") || sourcePath.Contains("\\language\\string_"); } private static void OnLanguageChangeEvent() { LanguageChangeEvent?.Invoke(null, EventArgs.Empty); } } }