当一个App需要推出多语言版本时,就需要使用到【全球化与本地化】服务。

原理过程

资源文件中包含了所有的控件信息,通过导出这些控件信息,修改其对应的相关属性(比如TextBlock的Text属性)的字符串,即可实现多语言版本。在资源文件中,控件通过x:uid进行标示。

  1. 设置默认的本地化区域。比如zh-CN or en-US,取决于具体的App语言版本。
  2. 为所有的控件自动添加x:uid,并检查x:uid的唯一性。
  3. 重新生成工程。在bin/下可以看到特征语言版本的*.resource.dll。比如en-US/*.resource.dll。 (*为工程名字)
  4. 从*.resource.dll中提取出所有的控件列表。提取可是为*.csv。
  5. 手动编辑*.csv,将其中的可翻译属性翻译为目标语言。.csv可以使用excel类工具打开。
  6. 使用本地化后的*.csv生成特定语言的资源文件dll.比如保存为zh-CN/*.resource。
  7. 修改操作系统的区域或者自行设定属性,改变App当前的区域(cultrue)信息。

WPF国际化的步骤如下:

1. 在*.csproj中增加语言/本地化信息,在重新生成工程之后,在bin目录下会有en-US的目录,里面包含en-US的本地化资源信息 en-US*.resources.dll。

  在*p.csproj文件里的<PropertyGroup>下添加<UICulture>en-US</UICulture>。

  在AssemblyInfo.cs 中开启

 [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

重新生成项目。

2. 添加和检查uid。

  为XAML自动添加UID  msbuild /t:updateuid HelloApp.csproj

  若要验证您没有缺少或重复的 UID,请运行 checkuid:msbuild /t:checkuid HelloApp.csproj

3.提取、修改并重新生成资源文件(dll)

  工具:可以使用微软的非生产工具 LocBaml.exe ,或者其他可视化工具。比如 Visual LocBaml。

  提取:LocBaml.exe /parse en-US/HelloApp.resources.dll /out:Hello.csv

  生成:LocBaml.exe /generate en-US/HelloApp.resources.dll /trans:Hello.csv /out:.\ /cul:zh-CN

4. 自行改变程序运行cultrue.

  修改操作系统语言/区域。

  或者通过参数在App动态设置区域。(需要重启App) 

var lan = HelloApp.Properties.Settings.Default["Language"] as string;
var cultrue = new CultureInfo(lan);
CurrentThread.CurrentCulture = cultrue;
CurrentThread.CurrentUICulture = cultrue;

还有其他几种可以动态改变语言环境的方式,但以上方法有几种好处:

  • 源程序基本不用关心多语言。比如基于.xaml 的dynamic绑定, XMAL的dynamic绑定或者resource 的(k,v)都在开发层面限制了可翻译的语言种类。
  • 翻译可以在程序开发完成后进行。
  • UI确定后,可以外包给翻译团队,并行进行。

还有....

  这只作了简单的文字翻译,还包括使用习惯、格式化特性等,许多有意思的内容。资源(Resource)中的字符串翻译可以看看http://www.cnblogs.com/jjseen/p/5315722.html

参考:

如何:对应用程序本地化, https://msdn.microsoft.com/zh-cn/library/ms746621.aspx

WPF全球化与本地化的更多相关文章

  1. WPF全球化与本地化 (二)

    Visual Baml Visual Locbaml is a free and open-source software to simplify the task of WPF applicatio ...

  2. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  3. Asp.Net Core 混合全球化与本地化支持

    前言 最近的新型冠状病毒流行让很多人主动在家隔离,希望疫情能快点消退.武汉加油,中国必胜! Asp.Net Core 提供了内置的网站国际化(全球化与本地化)支持,微软还内置了基于 resx 资源字符 ...

  4. ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】

    2020/02/03, ASP.NET Core 3.1, VS2019, ResXManager 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[13-扩展之支持全球化 ...

  5. WPF页面 全球化和本地化

    传统的 新建.resx类型的文件中,然后利用ResourceManager来得到相应资源并根据当地的CultureInfo来给界面文本赋值. WPF 新建一个文件夹 Language 新建2个资源字典 ...

  6. ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)

    ASP.NET 2.0及以上的开发平台,为全球化本地化应用程序提供了工具,而且实现起来非常简单.以下内容是使用c#,按照帮助一步步做的,将为初学者提供详细的实现步骤. 一 几个必要概念 (一) 支持全 ...

  7. mysql之全球化和本地化:字符集、校对集、中文编码问题

    本文内容: 什么是字符集?什么是校对集? 查看字符集和校对集 设置字符集和校对集 mysql中的中文数据问题 首发日期:2018-04-19 什么是字符集?什么是校对集? 字符集是字母和符号的集合,每 ...

  8. DotNETCore 学习笔记 全球化和本地化

    Globalization and localization ********************************************************************* ...

  9. [WPF]本地化入门

    1. 前言 WPF的本地化是个很常见的功能,我做过的WPF程序大部分都实现了本地化(不管最终有没有用到).通常本地化有以下几点需求: 在程序启动时根据CultureInfo.CurrentUICult ...

随机推荐

  1. Spring Boot 整合mybatis时遇到的mapper接口不能注入的问题

    现实情况是这样的,因为在练习spring boot整合mybatis,所以自己新建了个项目做测试,可是在idea里面mapper接口注入报错,后来百度查询了下,把idea的注入等级设置为了warnin ...

  2. 【sqli-labs】 less30 GET- Blind -Impidence mismatch -Having a WAF in front of web application (GET型基于盲注的带有WAF注入)

    这次是双引号的,WAF绕过方法不变 http://192.168.136.128/sqli-labs-master/Less-30/login.php?id=1&id=2" and ...

  3. webstorm for mac

    mac上使用webstrom,破解的方法 参见博客:Webstorm 破解2016.1 for mac 上面的说明有点问题,博主的写的有点问题.应该是1.先打开到注册页面:2.再关闭webstrom; ...

  4. 【转】VMWare vCenter 6.0安装配置

    版权声明: 专注于"GIS+"前沿技术的研究与交流,将云计算技术.大数据技术.容器技术.物联网与GIS进行深度融合,探讨"GIS+"技术和行业解决方案:文章允许 ...

  5. 如何解决windows docker共享目录不支持符号链接(do not support symlinks)?

    windows使用docker toolbox,搭建前端开发环境时,在共享目录使用npm安装前端依赖时,发现报错,无法使用符号连接. 这里有一个帖子专门讨论这个问题,感兴趣可以看一下: https:/ ...

  6. 洛谷P1579 哥德巴赫猜想(升级版)【水题+素数】

    1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为 ...

  7. CentOS7 笔记 (一) .NETCore

    安装系统CentOS,虚拟机好麻烦,直接在阿里云开了一个6个月免费的ECS. 熟悉Linux 基本命令 登录,exit,vi ,vim,vi保存关闭,w,ls,mkdir,df,ip addr,修改系 ...

  8. GitLab权限介绍

    访问权限 - Visibility Level 这个是在建立项目时就需要选定的,主要用于决定哪些人可以访问此项目,包含3种 Private - 私有,只有属于该项目成员才有原先查看 Internal ...

  9. POJ 1129 Channel Allocation DFS 回溯

    Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15546   Accepted: 78 ...

  10. IDEA入门级使用教程

    原文链接:https://blog.csdn.net/qq_31655965/article/details/52788374 最智能的IDE IDEA相对于eclipse来说最大的优点就是它比ecl ...