WPF中利用DynamicResource动态资源和资源字典实现软件中英文切换

在一个项目中,有时候会遇到不同国家或地区的软件用户,这样就需要对软件UI界面进行语言翻译,我们可以利用DynamicResource和资源字典来实现这一需求。我们可以将不同的语言字典封装到一个项目中,然后其它项目再引用即可。
第一步,创建语言字典项目:WpfLanguage
在这里插入图片描述
在这个项目中,新建一个Resource目录,在目录中再创建两个语言包文件,分别是en-US.xaml和zh-CN.xaml
两个文件的内容大致如下
zh-CN.xaml
在这里插入图片描述
en-US.xaml
在这里插入图片描述
可以看到其中的key键都是相同的,只是不同文件对应的值不同。这样我们在UI中只需要引用这个key键的内容即可。

第二步,创建新的项目,在app.xaml.cs中按不同的情况引用不同的资源字典文件。
需要注意的是,要提前将WpfLanguage项目引入到新项目中。
在这里插入图片描述
然后就可以在app.xaml.cs中做具体的语言包的引用
在这里插入图片描述
图中的CultureName可以从配置文件中导入,当CultureName=zh-CN时,就表示使用zh-CN.xaml字典,当CultureName=en-US,表示使用en-US.xaml字典。

补充:如何设置默认的语言包,请看下图!
我们在app.xaml中,利用ResourceDictionary.MergedDictionaries引用默认的语言包
在这里插入图片描述
至于使用?那就简单了
在这里插入图片描述
在任何需要显示string的地方,绑定为DynamicResource类型即可,后面写上具体的Key键名字。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 WPF 界面内容的中英文切换功能,可以通过以下步骤实现: 1. 在工程创建一个资源文件(.resx),用于存储中英文的字符串资源。 2. 在资源文件添加中英文的字符串资源。例如,添加一个 Name 字符串资源,分别对应文和英文的名称。 3. 在 WPF 界面,使用 Binding 绑定字符串资源。例如,使用 {x:Static} 绑定 Name 字符串资源,如下所示: ```xml <TextBlock Text="{x:Static properties:Resources.Name}" /> ``` 其,properties 表示资源文件的命名空间,Resources 表示资源文件名称。 4. 在代码,通过修改资源文件的语言属性,实现中英文切换。例如,使用以下代码切换文: ```csharp Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN"); ``` 使用以下代码切换到英文: ```csharp Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); ``` 切换语言后,需要刷新界面,让界面重新加载资源文件的字符串资源,使用以下代码刷新界面: ```csharp InitializeComponent(); this.DataContext = this; ``` 其,this.DataContext = this; 表示重新绑定数据上下文。 完整代码示例: MainWindow.xaml: ```xml <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:properties="clr-namespace:WpfApp1.Properties" Title="MainWindow" Height="350" Width="525"> <Grid> <StackPanel> <TextBlock Text="{x:Static properties:Resources.Name}" /> <TextBlock Text="{x:Static properties:Resources.Description}" /> <Button Content="{x:Static properties:Resources.Button}" /> </StackPanel> </Grid> </Window> ``` MainWindow.xaml.cs: ```csharp using System.Globalization; using System.Threading; namespace WpfApp1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = this; } private void SwitchLanguage_Click(object sender, RoutedEventArgs e) { if (Thread.CurrentThread.CurrentUICulture.Name == "zh-CN") { Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); } else { Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN"); } InitializeComponent(); this.DataContext = this; } } } ``` 注意:为了让资源文件的字符串资源在代码能够被访问到,需要在资源文件的属性设置将 Access Modifier 属性设置为 Public。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值