1. 在WPF中国际化使用的是 .xaml文件的格式

如图:Resource Dictionary (WPF)

2. 创建默认的语言文件和其他语言文件

这里以英语为默认语言,新建一个 Resource Dictionary (WPF)文件,并命名为DefaultLanguage.xaml,内容如下:

  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:sys="clr-namespace:System;assembly=mscorlib"><!--这行新增加的-->
  4. <sys:String x:Key="OK">
  5. OK
  6. </sys:String>
  7. <sys:String x:Key="Cancel">
  8. Cancel
  9. </sys:String>
  10. </ResourceDictionary>

   默认语言文件的 BuildAction要设置为 Page,如图:

为了便于管理,一般将所有的语言文件都放在一个目录下,这里创建lang目录,

然后在创建另一个语言文件,这里是中文,命名为 zh_CN.xaml,内容如下:

  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:sys="clr-namespace:System;assembly=mscorlib">
  4. <sys:String x:Key="OK">
  5. 确定
  6. </sys:String>
  7.  
  8. <sys:String x:Key="Cancel">
  9. 取消
  10. </sys:String>
  11. </ResourceDictionary>

其他非默认语言的设置应该如下:

BuildAction设置为:Content ;CopyToOutputDirectory设置为:Copy if newer (先这样做吧,原因未清)

3.在App.xaml中配置默认语言:

  1. <Application x:Class="LanTest.App"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. StartupUri="MainWindow.xaml">
  5. <Application.Resources>
  6. <ResourceDictionary><!--这个节点就是配置默认语言的-->
  7. <ResourceDictionary.MergedDictionaries>
  8. <ResourceDictionary Source="lang\DefaultLanguage.xaml"/>
  9. </ResourceDictionary.MergedDictionaries>
  10. </ResourceDictionary>
  11. </Application.Resources>
  12. </Application>

4.实际使用(敲代码了) 

4.1. 界面效果如下:

4.2. 界面的.xaml代码

  1. <Window x:Class="LanTest.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title="MainWindow" Height="" Width="">
  5. <Grid>
  6. <!--这里的{DynamicResource OK}就是动态调用 资源中的key为OK的内容-->
  7. <Button Content="{DynamicResource OK}" HorizontalAlignment="Left" Margin="134,161,0,0" VerticalAlignment="Top" Width="" Height=""/>
  8. <Button Content="{DynamicResource Cancel}" HorizontalAlignment="Left" Margin="278,161,0,0" VerticalAlignment="Top" Width="" Height=""/>
  9. <Button Content="Button" HorizontalAlignment="Left" Margin="287,59,0,0" VerticalAlignment="Top" Width="" Click="Button_Click" Loaded="Button_Loaded"/>
  10. <ComboBox Name="cbLang" HorizontalAlignment="Left" Margin="118,59,0,0" VerticalAlignment="Top" Width="">
  11. </ComboBox>
  12.  
  13. </Grid>
  14. </Window>

4.3. 后台逻辑代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using System.Windows.Data;
  10. using System.Windows.Documents;
  11. using System.Windows.Input;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Imaging;
  14. using System.Windows.Navigation;
  15. using System.Windows.Shapes;
  16.  
  17. namespace LanTest
  18. {
  19. /// <summary>
  20. /// Interaction logic for MainWindow.xaml
  21. /// </summary>
  22. public partial class MainWindow : Window
  23. {
  24. public MainWindow()
  25. {
  26. InitializeComponent();
  27. }
  28.  
  29. //定义ComboBox选项的类,存放Name和Value
  30. public class CategoryInfo
  31. {
  32. public string Name
  33. {
  34. get;
  35. set;
  36. }
  37. public string Value
  38. {
  39. get;
  40. set;
  41. }
  42.  
  43. }
  44.  
  45. //切换语言
  46. private void btnChangeLang_Click(object sender, RoutedEventArgs e)
  47. {
  48. object selectedName = cbLang.SelectedValue;
  49. if (selectedName != null)
  50. {
  51. string langName = selectedName.ToString();
  52. //英语的语言文件名为:DefaultLanguage,所有这里要转换一下
  53. if (langName == "en_US")
  54. langName = "DefaultLanguage";
  55. //根据本地语言来进行本地化,不过这里上不到
  56. //CultureInfo currentCultureInfo = CultureInfo.CurrentCulture;
  57.  
  58. ResourceDictionary langRd = null;
  59. try
  60. {
  61. //根据名字载入语言文件
  62. langRd = Application.LoadComponent(new Uri(@"lang\" + langName + ".xaml", UriKind.Relative)) as ResourceDictionary;
  63. }
  64. catch(Exception e2)
  65. {
  66. MessageBox.Show(e2.Message);
  67. }
  68.  
  69. if (langRd != null)
  70. {
  71. //如果已使用其他语言,先清空
  72. if (this.Resources.MergedDictionaries.Count > )
  73. {
  74. this.Resources.MergedDictionaries.Clear();
  75. }
  76. this.Resources.MergedDictionaries.Add(langRd);
  77. }
  78. }
  79. else
  80. MessageBox.Show("Please selected one Language first.");
  81. }
  82.  
  83. //控件载入时,为ComboBox赋值
  84. private void cbLang_Loaded(object sender, RoutedEventArgs e)
  85. {
  86. List<CategoryInfo> categoryList = new List<CategoryInfo>();
  87. categoryList.Add(new CategoryInfo() { Name = "English", Value = "en_US" });
  88. categoryList.Add(new CategoryInfo() { Name = "中文", Value = "zh_CN" });
  89.  
  90. cbLang.ItemsSource = categoryList;//绑定数据,真正的赋值
  91. cbLang.DisplayMemberPath = "Name";//指定显示的内容
  92. cbLang.SelectedValuePath = "Value";//指定选中后的能够获取到的内容
  93. }
  94. }
  95. }

WPF实现无刷新动态切换多语言(国际化)的更多相关文章

  1. 只需要4步就可以将asp.net mvc变成SPA(单页面)应用,实现无刷新页面切换!

    SENNA.js Senna.js是一个超快速的单页面应用程序引擎,轻松构建基于Web的现代应用程序,只有大约8KB的JavaScript而没有任何依赖性.还提供非常酷炫的动画效果.想要详细了解的朋友 ...

  2. 使用ajax技术无刷新动态调用股票信息

    新浪的财金频道一直感觉做得很好.但由于最近网速慢的缘故,查看股票信息时网页老是打不开.这几天一直在研究ajax,于是用jquery自己做了一个自动读取新浪股票实时数据的页面. <html> ...

  3. php+ajax实现无刷新动态加载数据技术

    我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术 ...

  4. 使用 pjax 实现无刷新切换页面

    一.目的 1.当打开链接的时候,页面是淡入显示,并且页面顶部会显示加载进度条,页面显示完成时,进度条加载满并且消失. 2.点击页面上的 a 标签时,显示加载进度条,并且当前页面淡出消失,当前页面淡出消 ...

  5. WPF案例 (六) 动态切换UI布局

    原文:WPF案例 (六) 动态切换UI布局 这个Wpf示例对同一个界面支持以ListView或者CardView的布局方式呈现界面,使用控件ItemsControl绑定数据源,使用DataTempla ...

  6. jQuery实现无刷新切换主题皮肤功能

    主题皮肤切换功能在很多网站和系统中应用,用户可以根据此功能设置自己喜欢的主题颜色风格,增强了用户体验.本文将围绕如何使用jQuery实现点击无刷新切换主题皮肤功能. 查看演示DEMO:https:// ...

  7. 仿联想商城laravel实战---5、无刷新的增删改查(动态页面更新的三种方式(html))

    仿联想商城laravel实战---5.无刷新的增删改查(动态页面更新的三种方式(html)) 一.总结 一句话总结: 直接js增加删除修改html 控制器直接返回处理好的页面 用双向绑定插件比如vue ...

  8. Bootstrap Paginator分页插件+ajax 实现动态无刷新分页

    之前做分页想过做淘宝的那个,但是因为是后台要求不高,就Bootstrap Paginator插件感觉还蛮容易上手,所以就选了它. Bootstrap Paginator分页插件下载地址: Downlo ...

  9. WPF(MVVM) 利用资源字典实现中英文动态切换

    1.首先新建两个字典文件en-us.xaml.zh-cn.xaml.定义中英文的字符串在这里面. 2.将两个资源字典添加到App.xaml中,这里注意下,因为两个字典中有同样字符,如果没有动态更改,默 ...

随机推荐

  1. Transaction And Lock--解决死锁/锁的几种有效方式

    修改资源访问顺序,使多个事务对资源的访问方式一致优化查询SELECT,使得S锁能尽早释放均可能将更新和删除语句放到事务末端(使得X锁占用时间最小)避免事务执行期间暂停或等待外部输入将较大事务拆分成多个 ...

  2. robot中使用evaluate转化数据格式

    如果你使用robot却没有用过evaluate,那你将永远禁锢在框架中. json对象格式入参可以使用字典格式直接传入,但最近有一个接口测试的入参是一个json数组,在传参时总是提示请求参数不合法, ...

  3. js拼接字符串传值,子窗口传值

    避免下次再去查资料,记录一下 1.拼接字符串传值 "UpdateState?ids=" + subStr+"&remark="+reValue) 目标页 ...

  4. LightOJ 1234 Harmonic Number(打表 + 技巧)

    http://lightoj.com/volume_showproblem.php?problem=1234 Harmonic Number Time Limit:3000MS     Memory ...

  5. Windows上编译libjpeg

    通常libjpeg可以使用如下命令行生成Visual Studio 2010的项目文件: nmake /f makefile.vc setup-v10 但可惜我们使用的是Visual Studio 2 ...

  6. leetcode 39 组合总和 JAVA

    题目: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制 ...

  7. day9学python 类+异常处理+初识socket

    类+异常处理+初识socket 类的特点: 1.封装-同其他语言 2.继承 py2 经典类深度优先 新式类类名(object)广度优先py3 都是广度优先 3.多态-python本身无多态 可用方法调 ...

  8. ZJOI round1游记

    Day 0 到镇海报道了 大佬们太多了--话说镇海的晚饭还真好吃啊-- 听说某人要咱去找bwh--不过咱和他也不是很熟啊--还是算了吧--(才不是因为嫌麻烦懒得去呢) 晚上吃完晚饭之后在镇海校园里参观 ...

  9. AHOI2005航线规划 bzoj1969(LCT缩点)

    题目描述 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系——一个巨大的由千百万星球构成的Samuel星系. 星际空间站的Samuel II巨型计算 ...

  10. 2,ThreadGroup 概念以及用法

    当一个任务需要多个子线程去处理业务,这时候不希望这些子线程杂乱无章, 就需要把这些线程统一管理起来,这时候线程组就产生了. ThreadGroup  常用方法讲解 activeCount()   返回 ...