WPF 实现语言切换

源码下载:LanguageStyle.zip
第一步:创建language文件夹,并创建文件(zh-cn.xaml、en-us.xaml)

| zh-cn.xaml | en-us.xaml |
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="确认">confirm</sys:String>
<sys:String x:Key="取消">cancel</sys:String>
<sys:String x:Key="删除">delete</sys:String>
<sys:String x:Key="警告">warning</sys:String>
<sys:String x:Key="提醒">info</sys:String>
<sys:String x:Key="成功">success</sys:String>
</ResourceDictionary>
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="确认">确认</sys:String>
<sys:String x:Key="取消">取消</sys:String>
<sys:String x:Key="删除">删除</sys:String>
<sys:String x:Key="警告">警告</sys:String>
<sys:String x:Key="提醒">提醒</sys:String>
<sys:String x:Key="成功">成功</sys:String>
</ResourceDictionary>
|
第二步:修改配置文件(App.config)
<appSettings> <add key="language" value="en-us"/> </appSettings>
第三步:App启动资源文件
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 获取配置
if(ConfigurationManager.AppSettings["language"] != null)
{
if(!String.IsNullOrEmpty(ConfigurationManager.AppSettings["language"]))
{
var requestedLanguage = String.Format("pack://application:,,,/;component/language/{0}.xaml", ConfigurationManager.AppSettings["language"]);
var resource = Application.Current.Resources.MergedDictionaries.FirstOrDefault(rd => rd.Source != null && rd.Source.OriginalString.ToLower().Contains("language"));
if(resource == null)
{
ResourceDictionary resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new Uri(requestedLanguage, UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
}
}
}
}
protected override void OnExit(ExitEventArgs e)
{
// 在这里处理应用程序退出逻辑
base.OnExit(e);
}
}
第四步:选择并保存默认语言
public void SetLanguage(string language = "zh-cn")
{
if (string.IsNullOrEmpty(language)) language = "zh-cn";
// 获取当前语言
var resourceDictionary = Application.Current.Resources.MergedDictionaries.FirstOrDefault(rd => rd.Source != null
&& rd.Source.OriginalString.ToLower().Contains("language"));
if (resourceDictionary != null)
{
//移除语言
Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
//添加语言
string requestedLanguage = $"pack://application:,,,/;component/language/{language}.xaml";
resourceDictionary.Source = new Uri(requestedLanguage, UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
// 保存配置
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["language"].Value = language;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
MessageBox.Show("保存成功");
}
}

浙公网安备 33010602011771号