开发App,我们都会标配简体中文和英文两种语言。至于你加多少种,取决于你的客户市场。无论如何,英语是必不可少的。

UWP平台里面,微软也提供了一种默认的国际化方案,即修改Resources.resw资源文件,不过这种方案有一个很大的缺点,需要重启App才能生效,这就对客户体验造成了很大的影响。

另一种方案是Github上的一个方案,作者做的很完美了,适配了WPF和UWP平台,可以实现实时切换语言,而不必重启App。

下面就看一下两个方案的实现。

1. 微软自家的修改Resources.resw方案  ——  需要重启生效

微软的方案比较麻烦,不推荐使用。

这里举一个简单的例子。

a. 新建一个页面有一个确定键,一个取消键,一个下拉框选择语言。

注意需要翻译的控件,我都添加了Uid属性,系统就是根据这个找翻译文字的,所以一定要定义好,而且不能重复。

    <StackPanel>
<Button x:Uid="button_ok" Content="OK"/>
<Button x:Uid="button_cancel"
Margin="0 30" Content="Cancel"/>
<ComboBox SelectionChanged="ComboBox_SelectionChanged">
<TextBlock x:Uid="tb_lang_en" Text="English"/>
<TextBlock x:Uid="tb_lang_zh" Text="简体中文"/>
</ComboBox>
</StackPanel>

b. 如果解决方案中没有Strings文件夹,那么新建一个。然后再下面新建对应的语言文件夹。我这里新建了zh-cn,en-us。

每一个下面新建一个资源文件Resources.resw。

然后打开Resources.resw,

编辑控件的对应的属性,比如Button的Content,TextBlock的Text等等,要精确到属性,不然只写一个button,是不可以被识别的。

为了避免Uid出错,可以编辑完一个文件,然后整体复制过去,只用改Value就可以了。

c. 新增选择语言事件,把选择的语言记录到本地存储。

需要用到Windows.Storage.ApplicationData。

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if((sender as ComboBox).SelectedIndex == )
{
Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] = "en-us";
}
else if ((sender as ComboBox).SelectedIndex == )
{
Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] = "zh-cn";
} }

d. 在App.xaml.cs中,设置App的首选语言。

在App初始化this.InitializeComponent();前设置。

        public App()
{
if (Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] != null)
{
string strCurrentLanguage = Windows.Storage.ApplicationData.Current.LocalSettings.Values["CurrentLanguage"].ToString();
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = strCurrentLanguage;
}
else
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "zh-cn"; this.InitializeComponent();
this.Suspending += OnSuspending;
}

这样就算完成了。

打开App后,选择语言,然而并没有什么卵反应。重启一下App,才能看到效果。

你气不气!  

2. Github大神的动态加载方案  ——  实时生效,强烈推荐!!!

项目地址:https://github.com/DaZiYuan/MultiLanguageForXAML.git

里面包含了源代码,还有实例文件,非常非常全面。我就不多举例了。

只需要定义好json文件,然后在代码里面引用即可。

现在非常流行的localise网站支持导出世界通用的json,从翻译到开发,完美对接。

而不像微软的Resw文件,localise不支持,也不会支持。

总之,甩微软的那套方案10086条街。  

预览效果:

最新文章

  1. 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击
  2. &lt;c ss高效开发实战&gt;看完了,Bootstrap学习是关键
  3. Python学习笔记12—类
  4. C++数据结构之Linked Stack(链式栈)
  5. SQLServer错误代码解释
  6. HTML基础(2) 格式标签 文本标签
  7. Fractal_Test
  8. 论i++与++i
  9. js导出成excel
  10. C语言调用lua
  11. Nginx编译参数
  12. 学习使人快乐6--XML
  13. npm缺少css-loader,/style-compiler,stylus-loader问题,npm没有权限无法全局更新问题【已解决】
  14. POJ - 3468 线段树区间修改,区间求和
  15. Arcgis10.3在添加XY数据时出现问题
  16. 结合canvas和jquery.Jcrop.js裁切图像上传图片
  17. python如何进行内存管理的
  18. JavaScript实现链式调用
  19. UVALive 7146 (贪心+少许数据结构基础)2014acm/icpc区域赛上海站
  20. JSP中page,request,session,application四个域对象区别

热门文章

  1. 关于爬虫的日常复习(17)——scrapy系列2
  2. Qt Installer Framework翻译(5-0)
  3. jenkins集成jmeter-进阶篇
  4. 面试系列-面试官:你能给我解释一下javascript中的this吗?
  5. Quantitative Trading with R(一):两个简单的策略
  6. Ubuntu固定多个静态ip
  7. 2019中国大学生程序设计竞赛-女生专场(重现赛)部分题解C-Function(贪心+优先队列) H-clock(模拟)
  8. java web 各个文件夹命名原因
  9. Linux(Centos)安装tomcat并且部署Java Web项目
  10. DWZ框架-- Dialog点击保存后不能自动关闭