为所欲为,嗯

话不多说,先看效果吧(事先说明,我的方法不是最好的,但是我用着最有效。)

【吐槽一下博客园上传的图片,我的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 的值,这样才算完整的。代码就不贴了。

最新文章

  1. Ajax入门(三)
  2. Majority Element II
  3. Extjs-Ext.Ajax.request设置超时
  4. [转] 擎天哥as3教程系列第二回——性能优化
  5. 用 CSS 做轮播图
  6. JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面
  7. Session和Cookie深度剖析
  8. ABAP SAPGUI_PROGRESS_INDICATOR 显示数据处理进度
  9. mysql主从同步报错
  10. oracle日期的处理
  11. AIX缩小逻辑卷报错chfs: 0506-964
  12. dubbo+zookeeper+jsp+springmvc+spring+mybatis+mysql+maven完整示例
  13. jenkins创建pipeline
  14. requests+正则表达式爬取ip
  15. lambda 怎么传递ref参数
  16. js生成自定义随机数方法
  17. 二、xadmin----简单使用
  18. Confluence 6 在 Apache 或者系统级别阻止垃圾
  19. 每天进步一点点——mysql——mysqlbinlog
  20. mysql 8.0 Druid连接时调用getServerCharset报空指针异常解决方法

热门文章

  1. java自动化-juint框架简述
  2. win7旗舰版安装IIS
  3. ZOJ 3777-Problem Arrangement(状压DP)
  4. python利用django实现简单的登录和注册,并利用session实现了链接数据库
  5. Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(1)
  6. spring返回@ResponseBody报406
  7. no suitable driver found for jdbc:mysql//localhost:3306/..
  8. 29.使用register_chrdev_region()系列来注册字符设备
  9. CentOS6.8系统下,ecipse下进行编辑操作,意外退出
  10. [转载] Bitmap的秘密