开发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条街。  

预览效果:

UWP App国际化的两种实现的更多相关文章

  1. Android Studio的两种模式及签名配置

    我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式. debug模式 debug模式使用一个默认的debug.keystore进行签名. 这个默认签名 ...

  2. Vue学习之--------el与data的两种写法、MVVM模型、数据代理(2022/7/5)

    文章目录 1.el与data的两种写法 1.1.基础知识 1.2.代码实例 1.3.页面效果 2.MVVM模型 2.1. 基础知识 2.2 .代码实例 2.3.页面效果 3.数据代理 3.1. 基础知 ...

  3. Android APP 两种用程序拨号的方式

    想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在 ...

  4. UWP开发中两种网络图片缓存方法

    通常情况下,我们的程序需要从服务器读取图片,但如果需要不止一次读取某一张图片的话,就需要做本地缓存了,这样既为用户省一点流量,又能显得你的APP很快. 假如你已经知道了某一张图片的地址,那么第一件事就 ...

  5. 基于 Flutter 以两种方式实现App主题切换

    概述 App主题切换已经成为了一种流行的用户体验,丰富了应用整体UI视觉效果.例如,白天夜间模式切换.实现该功能的思想其实不难,就是将涉及主题的资源文件进行全局替换更新.说到这里,我想你肯定能联想到一 ...

  6. 详解 UWP (通用 Windows 平台) 中的两种 HttpClient API

    UWP (通用 Windows 平台) 应用开发者在构建通过 HTTP 与 Web 服务或服务器断点交互的应用时,有多种 API 可以选择.要在一个托管 UWP 应用中实现 HTTP 客户端角色,最常 ...

  7. qml-main.cpp中的两种启动Qt Quick App模式

     现有两种启动Qt Quick App 模式: QQmlApplicationEngine搭配Window. QQuickView搭配Item.  qt默认使用第一种方法. QQmlApplicati ...

  8. mui 获取本地APP本版号的两种方式

    第一种 mui.plusReady(function () { mui.getJSON("manifest.json", null, function (data) { vum = ...

  9. Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)

    在给Android添加新的驱动后,app要如何使用呢? 正常的使用一个设备,需要getService.但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务. 第一种: ...

随机推荐

  1. LeetCode 第98题--验证二叉搜索树

    1. 题目 2.题目分析与思路 3.代码 1. 题目 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数.节点的右子树只包含大于当 ...

  2. Qt Installer Framework翻译(3-1)

    初始化安装 下图说明了安装应用程序的默认工作流程: 本节使用在macOS上运行的Your Application Installer示例来说明默认工作流程.安装程序具有本地化外观,并可感知每个受支持的 ...

  3. 根据指定路由生成URL |Generating a URL from a Specific Route | 在视图中生成输出URL|高级路由特性

    后面Length=5 是怎么出现的?

  4. BZOJ 1152 歌唱王国

    题目传送门 分析: 这道题很神仙,我们给出低配版解法和高配版解法2333 低配版: 首先知道这样一个公式...(证明去高配版) 当一个字符串S其中S [ 1 , i ] = S [ n - i + 1 ...

  5. 3d动态文字的绘制

    在这里介绍一种3D文字的一种动态效果,可以说这是一种伪3D创建的一种3D的视觉效果 简单的讲解一下:大家或多或少都会听说过素描这种绘画手法,其实这种手法就是巧妙的利用了.阴影给人们带来的立体的视觉冲击 ...

  6. es6的promise用法详解

    es6的promise用法详解 promise 原理 promise是es6的异步编程解决方案, 是es6封装好的对象: 一个promise有三种状态:Pending(进行中).Resolved(已完 ...

  7. Web自动化测试项目(七)日志

    一.日志作用 调试程序 了解系统程序运行的情况,是否正常 系统程序运行故障分析与问题定位 用来做用户行为分析和数据统计 二.为项目添加日志 └── utils ├── log_utils.py └── ...

  8. SpringBoot 的不同

    这些在写前端页面的时候,ssm框架中,在页面做出修改之后,保存一下,重新刷新一下浏览器页面就发生了更新 但是sprigBoot中好像不一样,好像是需要对页面进行重新编译一下,浏览器页面才会发生变化 ( ...

  9. Nginx进阶

    常见的web架构 LAMP - Linux +Apache +MySQL + PHP LNMP - Linux +Nginx + Mysql + PHP RHEL开源  Linux系统  RHEL C ...

  10. SVM(1)模式识别课堂笔记

    引言:当两类样本线性可分时,针对我们之前学习的感知机而言,存在多个超平面能将数据分开,这里要讨论什么样的分类面最好的问题.为此,我们形式化的定义了最优分类超平面,他有两点特征:1.能将训练样本没有错误 ...