跳到主要内容
版本:Next

本地化

支持多种本地化机制,它们可以同时使用。

特性

支持以下几类本地化:

  • 时间本地化。即将配置中的datetime类型数据,按照指定地区转换为UTC秒数
  • text类型。专用的表达本地化字符串key的类型,可以校验key的有效性
  • 静态本地化。导出时将本地化key字符串转换为对应的实际语言值,避免运行时再转换的麻烦
  • 字段变体。为字段的每个本地化目标配置一个变体字段,导出时只导出指定变体的数据

基础概念

ITextProvider

提示

如果未提供 -x l10n.textProviderFile=xxx参数,会自动禁用text有效性检查及静态本地化。

ITextProvider用于提供有效的text映射表,这样TextValidator可以检查本地化key的有效性。使用-x l10n.provider=xxx指定你使用ITextProvider, default对应DefaultTextProvider。你也可以实现自己的TextProvider。

DefaultTextProvider

使用 -x l10n.textFile.path=xxx 指定本地化key-value的文件。DefaultTextProvider使用builtin DataLoader读取本地化文件内数据。 DefaultTextProvider假定表格式如下:


<bean name="TextInfo">
<var name="{key}" type="string"/>
<var name="{language1}" type="string"/>
<var name="{language2}" type="string"/>
...
</bean>
<table name="TbTextInfo" value="TextInfo" input="xxx"/>

{key}{languege_xxx}为自定义值,例如 {key}取 key, {language_x}zhen之类。

如果只作text校验,可以不需要{langauge_xx}之类的字段,luban只使用{key}字段校验key的有效性。

本地化数据文件可以是excel格式,也可以是json、xml之类的格式,只要它符合luban的builtin DataLoader的格式标准(见excel格式非excel格式文档)即可。 当使用json格式时,由于不可能在一个json文件中只放一个text数据,实践中会让json文件中包含text列表,可以用复合数据文件格式(见非excel格式) 填。以下为示例json格式的本地化文本表,通过-x l10.textFile.path=*@your_text_file.json 指定读入text列表。

危险

本地化字符串文件为json之类的格式时,由于一个文件中包含多个本地化数据,本地化文件前一定要加上*@,例如*@your_text_file.json,否则加载出错!

text

时间本地化

datetime类型数据会根据目标时区,输出相应时刻的UTC秒数,方便程序使用。默认使用的时区为本地时区,可以通过命令行 参数 --timeZone-t来指定目标时区。

该时区为linux或win下的时区名,例如: -t "Asia/Shanghai" 或者 -t "China Standard Time" 指定目标时区为 亚洲上海(也即北京时间)

text类型

由于本地化需求的广泛性,特地提供text类型支持对应需求。text是一个特殊的语法糖,并不是一个独立的类型。它等价string#text=1,即包含text=1 tag的string 类型。

text语义上对应本地化字符串的key,Luban在数据校验器中会检查这个key的有效性。

必须设置指定l10n.providerl10n.textFile.pathl10n.textFile.keyFieldName这几个参数才会开启text校验。示例如下:

  -x l10n.provider=default ^
-x "l10n.textFile.path=*@D:\workspace2\luban_examples\DataTables\Datas\l10n\texts.json" ^
-x l10n.textFile.keyFieldName=key

静态本地化

静态本地化会在导出过程中将text类型由key转换为实际的文本值,适用于已经固定确定本地化语言的场合。使用者不需要再由key转换为实际的文档,使用较为方便。

必须设置了l10n.providerl10n.textFile.pathl10n.textFile.keyFieldNamel10n.textFile.languageFieldNamel10n.convertTextKeyToValue 这几个参数才会开启静态本地化,示例如下:

  -x l10n.provider=default ^
-x "l10n.textFile.path=*@D:\workspace2\luban_examples\DataTables\Datas\l10n\texts.json" ^
-x l10n.textFile.keyFieldName=key ^
-x l10n.textFile.languageFieldName=zh ^
-x l10n.convertTextKeyToValue=1

字段变体

详见字段变体

收集配置表中所有text的列表

有时候你想收集配置中所有的本地化text的key,DataTarget text-list 正用于此目的。text-list会收集配置表中出现的所有text数据,按从小到大排序后,输出文件。 通过l10n.textListFile选项指定输出文件,详细见命令行工具文档。

一个示例命令如下:

dotnet Luban.dll -t all -d text-list ^
--conf D:\workspace2\luban_examples\DataTables\luban.conf ^
--validationFailAsError ^
-x outputDataDir=D:\workspace2\luban_examples\Projects\GenerateDatas\text ^
-x l10n.textListFile=texts.txt