UWP 实现App多语言为所欲为切换
为所欲为,嗯
话不多说,先看效果吧(事先说明,我的方法不是最好的,但是我用着最有效。)
【吐槽一下博客园上传的图片,我的App敲鸡漂亮滴,自带亚克力效果,怎么图片上传上来这么多的噪点啊。】
【 商店地址传送门:https://www.microsoft.com/store/apps/9n19jm5g8mz4】




按我的方法做有一个缺点:不能立马显示新的语言,需要重启App。网上别人也是这样的。
===============================================================================
其实很简单
① 给每一个控件设置 x:Uid
比如一个Textbox x:Uid=“textbox_language”
然后我们在解决方案里面找到“Strings”文件夹,打开“en-us”文件夹,添加一行textbox_language.Text,它的值是“Language”。
在Strings下面新建"zh-cn"文件夹,添加一行textbox_language.Text,它的值是“语言”。
更多的语言代码请参考 https://msdn.microsoft.com/en-us/library/ms533052(v=vs.85).aspx
② 本地存储一下所选择的语言

切换语言总得有个下拉框来承载这些语言吧,建议显示的格式为 “代码 语言名称”,中间有个空格的。这样有好处,一会你就知道了。
private void comboBoxLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string temp = comboBoxLanguage.SelectedItem.ToString();
string[] tempArr = temp.Split(' ');
ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] = tempArr[];
}
③ 在App.cs中读取
大体意思就是本都有这个CurrentLanguage设置,就读取出来。当然会存在Auto的情况,那么需要一个类获取当前系统的语言。如果不存在设置,之前我默认是英文了,现在也改成Auto那样。
if (ApplicationData.Current.LocalSettings.Values["CurrentLanguage"] != null)
{
strCurrentLanguage = ApplicationData.Current.LocalSettings.Values["CurrentLanguage"].ToString();
if (strCurrentLanguage == "auto")
{
ApplicationLanguages.PrimaryLanguageOverride = LanguageHelper.GetCurLanguage();
}
else
ApplicationLanguages.PrimaryLanguageOverride = strCurrentLanguage;
}
else
{
ApplicationLanguages.PrimaryLanguageOverride = strCurrentLanguage = LanguageHelper.GetCurLanguage();
//ApplicationLanguages.PrimaryLanguageOverride = strCurrentLanguage = "en-us";
}
InitializeComponent();
④ LanguageHelper类写的一般,就是刚才提到的
public static string GetCurLanguage()
{
var languages = GlobalizationPreferences.Languages;
if (languages.Count > )
{
List<string> lLang = new List<string>();
lLang.Add("zh-cn、zh、zh-Hans、zh-hans-cn、zh-sg、zh-hans-sg");
lLang.Add("zh-hk、zh-Hant、zh-mo、zh-tw、zh-hant-hk、zh-hant-mo、zh-hant-tw");
lLang.Add("de、de-at、de-ch、de-de、de-lu、de-li");
lLang.Add("en-us、en、en-au、en-ca、en-gb、en-ie、en-in、en-nz、en-sg、en-za、en-bz、en-hk、en-id、en-jm、en-kz、en-mt、en-my、en-ph、en-pk、en-tt、en-vn、en-zw、en-053、en-021、en-029、en-011、en-018、en-014");
lLang.Add("es、es-cl、es-co、es-es、es-mx、es-ar、es-bo、es-cr、es-do、es-ec、es-gt、es-hn、es-ni、es-pa、es-pe、es-pr、es-py、es-sv、es-us、es-uy、es-ve、es-019、es-419");
lLang.Add("fr、fr-be、fr-ca、fr-ch、fr-fr、fr-lu、fr-015、fr-cd、fr-ci、fr-cm、fr-ht、fr-ma、fr-mc、fr-ml、fr-re、frc-latn、frp-latn、fr-155、fr-029、fr-021、fr-011");
lLang.Add("hi、hi-in");
lLang.Add("it、it-it、it-ch");
lLang.Add("ja、ja-jp");
lLang.Add("pt、pt-pt、pt-br");
lLang.Add("ru、ru-ru");
for (int i = ; i < lLang.Count; i++)
{
if (lLang[i].ToLower().Contains(languages[].ToLower()))
{
string temp = lLang[i].ToLower();
string[] tempArr = temp.Split('、'); return tempArr[];
}
else
return "en-us";
}
}
return "en-us";
}
如你所见,我之前叫你存储那个代码,在这里就可以比对。当然lLang里面的语言code也必须是标准的。
⑤ 善后工作
上面基本上也就完成了多语言了。
但是你需要在进入设置前,读取并设置combobox 的值,这样才算完整的。代码就不贴了。
UWP 实现App多语言为所欲为切换的更多相关文章
- Android app内语言环境切换
逻辑很简单: 1 app内所有activity继承自BaseActivity或BaseActivity派生出来的子类,BaseActivity中维护了一个静态的 app Activity访问栈,在创 ...
- iOS开发——iOS国际化 APP内语言切换
最近一个一直在迭代的老项目收到一份新的开发需求,项目需要做国际化适配,简体中文+英文.由于项目中采用了storyboard和纯代码两种布局方式,所以国际化也要同时实现.上网查了些资料,实现了更改系统语 ...
- 在xcode上把你的app多语言国际化(NSLocalizedString)
1.到project->info->localizations 下面的加号,添加你需要的语言 千万不要删除 base 否虽然我不知道有什么用,我是删了整个storyboard没了,很 ...
- 【原创】DESTOON做中英双语言(多语言)切换版本具体详解
第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...
- iOS-生成国际化包-配置App多语言支持
标签: ios国际化 ios多语言支持 xcode多语言支持 xcode生成多语言 国际化 it 分类: 功能知识 如果你的App需要支持多国语言.那么,就应该为你的App应用添加“国际化”支 ...
- struts2实现选择i18n语言选择切换
[新手学习记录,仅供参考!] 1.项目准备 首先当然是我们得创建一个struts2的web项目,并且已经实现了一个简单的功能. 以下通过登录功能来举例说明. 2.指定全局国际化资源文件 在struts ...
- vue实现对语言的切换,结合vue-il8n。
1.安装vue-i18n: npm install vue-i18n 如果npm长时间无反应,或安装失败,可以换成淘宝镜像安装: cnpm install vue-i18n 2.在main.js中引用 ...
- Android应用内部实现多语言,一键切换语言,国际化适配
1.首先提供多语言对应的string值 如en对应英语, fr对应法语 两个文件中包含同样的key, 对应不同的语言的value 2.java代码相应用户切换语言动作 private static v ...
随机推荐
- linux云服务器常用设置
前面的话 由于在云服务器上配置自己的网站,将Linux里的常用设置记录如下 更改shell 默认地, ubuntu系统默认的shell是dash,但更常用的shell是bash 通过下面命令可以将da ...
- 读书笔记-你不知道的JS上-this
关于this 与静态词法作用域不用,this的指向动态绑定,在函数执行期间才能确定.感觉有点像C++的多态? var a = 1; var obj = { a: 2, fn: function() { ...
- 如何在Pypi上发表自己的Python库
背景 最近兴趣使然写了几个Python库,也发布到了Pypi上,虽然没什么人下载,但自己在其他机器上用着也会很方便.这里我向大家介绍一下如何在Pypi上发表自己的Python库. 准备 注册账号 很显 ...
- 一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务
这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来. 本访问层需要通过Nuget安装EntityFramework Core,不过个人认为EF 6同样可以使用. 搭配数据库,最好是 ...
- Task及Mvc的异步控制器 使用探索
微软的Task已经出来很久了,一直没有去研究,以为就是和Thread差不多的东西.直到最近看到了Task的使用介绍,发现比Thread的语法要精炼多了,于是便在项目中用上了. 结果就出问题了,数据库连 ...
- SElinux用户管理操作
查看当前用户上下文 id -Z 查看登陆的用户和其对应的SELinux用户 semanage login -l 改变用户和SELinux的对应关系 semanage login -a选项能改变,-s用 ...
- 如何自学Python?
关于如何自学Python,我也是有话说的.来看看? Python具有丰富和强大的类库,常被称为胶水语言.而且语法简洁而清晰,功能强大且简单易学,因而得到了广泛应用和支持.它特别适合专家使用,也非常适 ...
- 前后端分手大师——MVVM 模式
之前对 MVVM 模式一直只是模模糊糊的认识,正所谓没有实践就没有发言权,通过这两年对 Vue 框架的深入学习和项目实践,终于可以装B了有了拨开云雾见月明的感觉. 简而言之 Model–View–Vi ...
- JAVA的继承,构造函数,窗体
import java.awt.*; import javax.swing.*; import javax.swing.JFrame; import java.awt.event.WindowList ...
- [转载] redis-cluster研究和使用
转载自http://hot66hot.iteye.com/blog/2050676 最近研究redis-cluster,正好搭建了一个环境,遇到了很多坑,系统的总结下,等到redis3 release ...