威尼斯正规官网 2
威尼斯正规官网

威尼斯正规官网:MySql 全球化和本地化

据美国《底特律新闻》12月28日消息,对于汽车的生产和销售,汽车行业已做到思维全球化和行动全球化,零件供应商、汽车制造商和特许经销商之间几乎“无缝衔接”。

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

威尼斯正规官网 1

数据库表被用来存储和检索数据。不同的语言和字符集需要以不同
的方式存储和检索。因此,MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。

威尼斯正规官网 2

原理及过程

  1. Visual Baml

几个重要术语:

然而,一旦车出现问题,需要召回时,全球合作瞬间瓦解。原因是,目前关于汽车何种情况下需要召回,召回时应怎样通知车主等问题,国际上仍没有明确的规定。

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

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

  • 字符集为字母和符号的集合
  • 编码为某个字符集成员的内部表示
  • 校对为规定字符如何比较的指令

六年前,本田公司因驾驶席安全气囊开始在美国召回汽车。召回车辆采用的安全气囊是日本汽车零件制造商高田公司在乔治亚州工厂生产的,该工厂现已关闭。这些安全气囊的充气泵爆炸后会崩裂金属碎片,危机乘员安全。然而直到今年,有问题的安全气囊导致马来西亚一名司机死亡,本田公司才在欧洲和亚洲大量召回汽车。这些汽车的安全气囊是同时期在乔治亚州工厂生产的。

  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)信息。

  2. Visual Baml读取并翻译

使用字符集和校对顺序

1、查看所支持的字符集完整列表show character set;

2、查看所支持校对的完整列表show collation;

3、通常系统管理在安装时定义一个默认的字符集和校对。为确定默认的字符集和校对,可以使用一下语句:

show variables like 'character%';

show variables like 'collation%';

4、创建示例

//可单独为每个字段设置字符集和校对

create table mytalbe
(
   column1   int,
   column2   varchar(10),
   column3   varchar(10) character set latin1 collate latin1_general_ci
) default character set hebrew
  collate hebrew_general_ci;

5、临时区分大小写

如果需要用于创建表是不同的校对顺序排序特定的select语句,可以在select语句自身中进行:

select * from customers
order by lastname, firstname collate latin1_general_cs;

参考书籍:

  • MySQL必知必会

美国安全战略集团主席、同时也是汽车安全倡导者Sean
Kane表示:“我们曾经也见到过类似事件。同样的问题车辆在某些地区正面临召回,但在其他地区问题仍未得到解决。这种情况应当避免。”

 

    使用Visual Baml新建工程。在新建Visual
Baml工程之前,应先设置好C#工程的回退语言以及默认区域。如果通过强行改变线程culture,也需要设置到当前语言默认区域。否则Visual
Baml会检测到错误的待翻译文本。\*

政府部门是安全监督部门,但是规章制度却各不相同,加上国家之间缺乏合作,使得汽车制造商有极大权力决定在何时何地对问题车辆进行维修。尽管联合国就促使各国达成一致的安全标准做出了长期的努力,但仍然收效甚微。

WPF国际化的步骤如下:

[assembly: NeutralResourcesLanguage("zh-cn", UltimateResourceFallbackLocation.Satellite)]  

在欧洲和日本,汽车上市前都会经过严格检查;在美国,汽车制造商自行担保,且汽车上市后才会得到检查;在墨西哥和印度,政府对于上市车辆根本没有规定安全标准。

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

     3. 翻译中间文件

同样,在处理问题上,各国表现也有所不同。在美国,制造商需要在发现问题后五天内曝光其安全隐患,即使这一问题尚未确定。而在哥伦比亚等国家,制造商必须先想出合适的解决方案后才能宣布召回汽车。

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

    这是使用工具(Visual
Baml)获得的好处,可以使用其导出中间翻译结果。通过Visual
Baml自己的编号规则进行统计,并过滤了不可翻译的部分——比如不可翻译的项(位置等)、不可翻译的条目。当然这也有缺点,如果在更改了原始了位置布局\*\*,则Visual
Baml需要使用新的exe更新工程,再次产生Assemblies。

汽车选购网站TrueCar.com的总裁、现代汽车前美国首席执行官John
Krafcik表示,即便是关于安全隐患的定义,也存在着一些分歧。

  在AssemblyInfo.cs 中开启

  4. 目标语言附属程序集

据悉,日本汽车零件制造商高田公司在全球20个国家有56家工厂,为全球22%的车辆提供安全气囊。有专家指出,正是汽车生产和销售的全球化,使得汽车安全方面大打折扣。

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

           使用Visual Baml导出,放在运行目录。比如bin/debug/zh-chs/。

重新生成项目。

  5. 使用Resgen.exe

  1. 添加和检查uid。

    在工程中,更改资源文件的属性,将“复制到输出目录”设置为“如果较新则复制”或者“始终复制”,就能在输出目录查看到*.resx的资源文件。

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

//从*.resx到key=value的文本文件
resgen *.resx *.txt

//从*.txt到*.resx,并指定语言为C#,Class访问性为Public
resgen *.txt *.resx /str:C#,MyResource.Properties /publicClass

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

   不确定是否可以用AI.exe直接嵌入编译后的*.resx到DLL。

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

 

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

*Visual
Baml并不十分智能。如果在工程中存在同名的Page,而Page中存在相同类型与UID的控件,即使他们处在不同的目录下,也会产生混淆。

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

**如果项目之初没有考虑到翻译后的长度变化,即使考虑到,也可能需要对控件位置进行调整。Visual
Baml需要更新(Retrieve)才能获取新的位置信息,其翻译中间文件只有字符信息。

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

    

  1. 自行改变程序运行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)中的字符串翻译可以看看

参考:

如何:对应用程序本地化,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章