WPF全球化与本地化
当一个App需要推出多语言版本时,就需要使用到【全球化与本地化】服务。
原理及过程
资源文件中包含了所有的控件信息,通过导出这些控件信息,修改其对应的相关属性(比如TextBlock的Text属性)的字符串,即可实现多语言版本。在资源文件中,控件通过x:uid进行标示。
- 设置默认的本地化区域。比如zh-CN or en-US,取决于具体的App语言版本。
- 为所有的控件自动添加x:uid,并检查x:uid的唯一性。
- 重新生成工程。在bin/下可以看到特征语言版本的*.resource.dll。比如en-US/*.resource.dll。 (*为工程名字)
- 从*.resource.dll中提取出所有的控件列表。提取可是为*.csv。
- 手动编辑*.csv,将其中的可翻译属性翻译为目标语言。.csv可以使用excel类工具打开。
- 使用本地化后的*.csv生成特定语言的资源文件dll.比如保存为zh-CN/*.resource。
- 修改操作系统的区域或者自行设定属性,改变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全球化与本地化的更多相关文章
- WPF全球化与本地化 (二)
Visual Baml Visual Locbaml is a free and open-source software to simplify the task of WPF applicatio ...
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- Asp.Net Core 混合全球化与本地化支持
前言 最近的新型冠状病毒流行让很多人主动在家隔离,希望疫情能快点消退.武汉加油,中国必胜! Asp.Net Core 提供了内置的网站国际化(全球化与本地化)支持,微软还内置了基于 resx 资源字符 ...
- ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】
2020/02/03, ASP.NET Core 3.1, VS2019, ResXManager 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[13-扩展之支持全球化 ...
- WPF页面 全球化和本地化
传统的 新建.resx类型的文件中,然后利用ResourceManager来得到相应资源并根据当地的CultureInfo来给界面文本赋值. WPF 新建一个文件夹 Language 新建2个资源字典 ...
- ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)
ASP.NET 2.0及以上的开发平台,为全球化本地化应用程序提供了工具,而且实现起来非常简单.以下内容是使用c#,按照帮助一步步做的,将为初学者提供详细的实现步骤. 一 几个必要概念 (一) 支持全 ...
- mysql之全球化和本地化:字符集、校对集、中文编码问题
本文内容: 什么是字符集?什么是校对集? 查看字符集和校对集 设置字符集和校对集 mysql中的中文数据问题 首发日期:2018-04-19 什么是字符集?什么是校对集? 字符集是字母和符号的集合,每 ...
- DotNETCore 学习笔记 全球化和本地化
Globalization and localization ********************************************************************* ...
- [WPF]本地化入门
1. 前言 WPF的本地化是个很常见的功能,我做过的WPF程序大部分都实现了本地化(不管最终有没有用到).通常本地化有以下几点需求: 在程序启动时根据CultureInfo.CurrentUICult ...
随机推荐
- excel 处理方法
//.方法一:采用OleDB读取EXCEL文件: //打开excel 返回指定表中的所有数据 public DataSet ExcelToDS(string Path) { string strCon ...
- jq 跨域请求
//使用getJSON <script type="text/javascript"> $(function () { $("#btn2").cli ...
- CorelDRAW记事本写实图标的制作流程
本篇教程用CorelDRAW快速制作记事本写实图标,在制作的过程中主要使用了位图填充和金属材质的实现,加之一些常用工具的用法处理,最后将对象剪裁至图文框就好了,现在跟小编一起来看看详细的操作吧! 使用 ...
- Python中字典的相关操作
1. Python类似于Java中的哈希表,只是两种语言表示的方式是不一样的,Python中的字典定义如下: 在Python中是一种可变的容器模型,它是通过一组键(key)值(value)对组成,这种 ...
- 爬取某网站景区列表并保存为csv文件
网址:http://www.halehuo.com/jingqu.html 经过查看可以发现,该景区页面没有分页,不停的往下拉,页面会进行刷新显示后面的景区信息 通过使用浏览器调试器,发现该网站使用的 ...
- 爬虫系列(五) re的基本使用
1.简介 究竟什么是正则表达式 (Regular Expression) 呢?可以用下面的一句话简单概括: 正则表达式是一组特殊的 字符序列,由一些事先定义好的字符以及这些字符的组合形成,常常用于 匹 ...
- mysql中的高级查询语句
此随笔用到的数据全是来自 关于mysql中表关系的一些理解(一对一,一对多,多对多) 提及的 学院表,学生表,学生详情表,选课表,课程表 单标查询:(查看学生表的学生名单) select st ...
- BZOJ 2150 cogs 1861 [国家集训队2011]部落战争
题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把 ...
- Linux查看 kennel , 物理CPU个数、核数、逻辑CPU个数
other article on my list: 查看进程 https://i.cnblogs.com/PostDone.aspx?postid=9231604&actiontip=%E4% ...
- 0929误删除innodb ibdata数据文件
今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了.不知道怎么解决.当时我也不知道怎么办.后来查阅相关资料.终找到解决方法.其实恢复也挺简单 ...