WPF 中英文切换操作记录

前言

本人博客内容一般为记录工作或学习中遇到的问题,踩过的坑或者是常用的工具使用说明。记录是为了以后方便查找,内容可能存在瑕疵,请见谅。

内容

  1. 在WPF项目工程下,新建中文和英文的资源词典文件。不一定是根目录下,可以按照自己的开发习惯创建文件夹存放,只要清楚路径就好。
  2. 选择中文内容的资源词典,先引用String所在地程序集System
     xmlns:s="clr-namespace:System;assembly=mscorlib"
    再根据自己实际需求编写键值,如图。(注意:英文的资源词典的key值一定要和中文的对应,这样才能通过Key值去绑定切换中英文
  3. 将中文的资源词典添加到App.xaml.我这里是默认显示中文,所以添加中文,如果默认显示英文或则其他语言可以按需更改
  4. 将UI界面上所有需要切换显示中英文的内容,动态绑定资源词典的key值,如
     <TextBlock
         x:Name="tb_CopyRight"
         Margin="20,0,0,5"
         Text="{DynamicResource 你的资源词典Key值}"
         Visibility="Visible" />

  5. 在把所有要切换的显示内容完成动态绑定后,可以尝试通过加载不同的资源词典用来调整界面显示。
  6. 应用内切换语言显示,只需将需要转变显示的资源词典替换掉当前的资源词典即可,界面因为是动态绑定,会即时切换,其代码示例如下
      void RefreshLanguage()
      {
          string chineseLang = "zh-cn";
          string englishLang = "en-us";
          var currentLang = Application.Current.FindResource("Language").ToString();
    
          if (currentLang == chineseLang)
          {
              if (ZGMessageBox.ShowQuestion("是否切换语言为英文?") == ZGDialogResult.Yes)
              {
                  string english = "pack://application:,,,/Lang/Lang-en-us.xaml";
                  Application.Current.Resources.MergedDictionaries[2].Source = new Uri(english);
                  Comm.IniHelper.SetAppConfigValueString(Comm.IniHelper.SysConfig,
                      Comm.IniHelper.SysLanguage, ( (int)SysLanguage.English ).ToString());
                  ReFreshViewModel();
              }
          }
    
          if (currentLang == englishLang)
          {
              if (ZGMessageBox.ShowQuestion("Whether to change the language to Chinese?") == ZGDialogResult.Yes)
              {
                  string chinese = "pack://application:,,,/Lang/Lang-zh-cn.xaml";
                  Application.Current.Resources.MergedDictionaries[2].Source = new Uri(chinese);
                  Comm.IniHelper.SetAppConfigValueString(Comm.IniHelper.SysConfig,
         Comm.IniHelper.SysLanguage, ( (int)SysLanguage.Chinese ).ToString());
                  ReFreshViewModel();
              }
          }
      }
  7. 以上步骤就是完成WPF中英文切换的全部内容了。

建议

  • 不管软件有无提资源本地化需求,建议都使用资源词典动态绑定,避免未来需求增加,工作量剧增
  • 中译英,如果是自己机翻的话,可以使用AI将中文词典一次性翻译,贼快
  • 设计界面采用了TextBlock,记得将TextWrapping 属性设置为wrap,避免内容过长被截断
  • 设计界面尽量不要使用画布(Canvas)布局,因其采用坐标定位,通常更改起来牵一发动全身,十分耗费精力
  • 如果是ViewModel需要通过绑定显示的内容,可以通过方法Application.Current.FindResource("Key值").ToString()实现动态绑定
  • 如果动态绑定有Grid控件时,普通的Header动态绑定可能存在失效的情况,那是因为WPF的视觉树的原因,可以参考一下方法
     <DataGridTextColumn Width="1.4*" Binding="{Binding LocationName}">
         <DataGridTextColumn.HeaderTemplate>
             <DataTemplate>
                 <TextBlock Text="{DynamicResource 名称}" />
             </DataTemplate>
         </DataGridTextColumn.HeaderTemplate>
     </DataGridTextColumn>

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值