WPF实现多语言切换
WPF实现多语言切换完整指南
一、基础实现方案
1. 资源文件准备
首先创建不同语言的资源文件:
Resources/
├── Strings.resx // 默认语言(英语)
├── Strings.zh-CN.resx // 简体中文
└── Strings.ja-JP.resx // 日语
Strings.resx (默认英语):
<data name="WelcomeMessage" xml:space="preserve"><value>Welcome to our application!</value>
</data>
<data name="Exit" xml:space="preserve"><value>Exit</value>
</data>
Strings.zh-CN.resx (简体中文):
<data name="WelcomeMessage" xml:space="preserve"><value>欢迎使用我们的应用程序!</value>
</data>
<data name="Exit" xml:space="preserve"><value>退出</value>
</data>
2. 创建资源管理类
// LocalizationManager.cs
using System.Globalization;
using System.Threading;
using System.Windows;public class LocalizationManager
{private static readonly CultureInfo _defaultCulture = new CultureInfo("en-US");public static void Initialize(){// 设置默认语言SetLanguage(_defaultCulture);}public static void SetLanguage(CultureInfo culture){if (culture == null)throw new ArgumentNullException(nameof(culture));Thread.CurrentThread.CurrentUICulture = culture;Thread.CurrentThread.CurrentCulture = culture;// 更新所有已加载的资源字典var mergedDictionaries = Application.Current.Resources.MergedDictionaries;var resourceDict = mergedDictionaries.FirstOrDefault(d => d.Source != null && d.Source.OriginalString.Contains("Resources/Strings."));if (resourceDict != null){mergedDictionaries.Remove(resourceDict);}// 添加新的语言资源var newResourceDict = new ResourceDictionary{Source = new Uri($"/YourAssemblyName;component/Resources/Strings.{culture.Name}.xaml", UriKind.Relative)};mergedDictionaries.Insert(0, newResourceDict);// 更新界面foreach (Window window in Application.Current.Windows){var context = window.DataContext as INotifyPropertyChanged;if (context != null){context.OnPropertyChanged(string.Empty); // 触发所有绑定重新评估}}}public s