I18N
App.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="Languages" value="en-US.xaml"/> </appSettings> </configuration>
App.xaml.cs
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); //第一种方式就是用配置文件 配置 string appLang = ConfigurationManager.AppSettings.Get("Languages"); App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(appLang, UriKind.RelativeOrAbsolute) }); //第二种方式 就是获取当前系统的语言 string lang = System.Globalization.CultureInfo.InstalledUICulture.Name.ToString(CultureInfo.InvariantCulture); switch (lang) { case "zh-CN": App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("zh-CN.xaml", UriKind.RelativeOrAbsolute) }); break; case "en-US": App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("en-US.xaml", UriKind.RelativeOrAbsolute) }); break; default: App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("en-US.xaml", UriKind.RelativeOrAbsolute) }); break; } }
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="Window1Title">Window</sys:String> <sys:String x:Key="UserLog">UserLogin</sys:String> <sys:String x:Key="UserCode">UserCode</sys:String> <sys:String x:Key="UserName">UserPwd</sys:String> <sys:String x:Key="BtnLoginOk">Login</sys:String> <sys:String x:Key="BtnLoginCancel">Cancel</sys:String> <sys:String x:Key="BtnzhCN">Chinese</sys:String> <sys:String x:Key="BtnenUS">English</sys:String> </ResourceDictionary>
zh-CN.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="Window1Title">窗体</sys:String> <sys:String x:Key="UserLog">用户登录</sys:String> <sys:String x:Key="UserCode">用户名</sys:String> <sys:String x:Key="UserName">密码</sys:String> <sys:String x:Key="BtnLoginOk">登录</sys:String> <sys:String x:Key="BtnLoginCancel">取消</sys:String> <sys:String x:Key="BtnzhCN">中文</sys:String> <sys:String x:Key="BtnenUS">英文</sys:String> </ResourceDictionary>
MainWindow.xaml
<Window x:Class="I18N.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="{DynamicResource Window1Title}"> <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <GroupBox Header="{DynamicResource UserLog}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="45*" /> <RowDefinition Height="48*" /> <RowDefinition Height="58*" /> <RowDefinition Height="100*" /> </Grid.RowDefinitions> <TextBlock Grid.Row="1" Margin="36,22,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Text="{DynamicResource UserCode}" TextWrapping="Wrap" /> <TextBlock Grid.Row="2" Margin="36,23,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Text="{DynamicResource UserName}" TextWrapping="Wrap" /> <TextBox Grid.Row="1" Width="120" Height="23" Margin="125,22,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap" /> <TextBox Grid.Row="2" Width="120" Height="23" Margin="125,23,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap" /> <Button Grid.Row="3" Width="75" Margin="78,29,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Content="{DynamicResource BtnLoginOk}" /> <Button Grid.Row="3" Width="75" Margin="192,29,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Content="{DynamicResource BtnLoginCancel}" /> <Button Name="btnenUS" Width="75" Margin="301,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btnenUS_Click" Content="{DynamicResource BtnenUS}" /> <Button Name="btnzhCN" Width="75" Margin="221,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btnzhCN_Click" Content="{DynamicResource BtnzhCN}" /> </Grid> </GroupBox> </Grid> </Window>
MainWindow.xaml.cs
using System; using System.Windows; namespace I18N { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnzhCN_Click(object sender, RoutedEventArgs e) { App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("zh-CN.xaml", UriKind.RelativeOrAbsolute) }); } private void btnenUS_Click(object sender, RoutedEventArgs e) { App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("en-US.xaml", UriKind.RelativeOrAbsolute) }); } } }