当一个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. Mysql分组求和&LIMIT

    分组求和mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY na ...

  2. Coreldraw软件反盗版提示x8有优惠活动 cdr x8提示盗版怎么办?

    CorelDRAW X8装不上,我的悲伤有这么大,或者比这还大一点...♥♥♥如果你遇到这样的断了网,卸了装,装了卸,然后再安装的...╮(-_-)╭这样的保存和另存为都点不了,不敢关电脑的亦或是这样 ...

  3. Java接口和Java抽象类的认识

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  4. eoLinker GoKu Gateway 开源版 V2.1发布,加入UI管理系统等

    GoKu API Gateway 是eoLinker旗下的开源版接口网关,支持OpenAPI与微服务管理,支持私有云部署,实现API转发.请求参数转换.数据校验等功能,提供图形化界面管理,能够快速管理 ...

  5. python基础1 格式化输出

    转载自:https://www.cnblogs.com/fat39/p/7159881.html %用法 1.整数输出 %o —— oct 八进制%d —— dec 十进制%x —— hex 十六进制 ...

  6. dd命令测试IO

    在实际环境中,测试IO写性能 首先需要实时监测磁盘的IO sar -d interval count 同时对磁盘进行IO压力写 time dd if=/dev/zero of=baa.img bs=1 ...

  7. flask-sqlalchemy 配置 mysql (转载的文章)

    一.当然是把必备的包给安装上才行: Flask-SQLAlchemy pip install flask-sqlalchemy MySQL windows下64位压缩包的安装方式可以参考: http: ...

  8. php7 使用imagick 的坑

    imagick是一个PHP的扩展,用ImageMagick提供的API来进行图片的创建与修改,不过这些操作已经包装到扩展imagick中去了,最终调用的是ImageMagick提供的API. Imag ...

  9. 用hadoop实现SimRank++算法(1)----权值转移矩阵的计算

    本文主要针对广告检索领域的查询重写应用,依据查询-广告点击二部图,在MapReduce框架上实现SimRank++算法.关于SimRank++算法的背景和原理请參看前一篇文章<基于MapRedu ...

  10. POJ 题目3020 Antenna Placement(二分图)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7011   Accepted: 3478 ...