luban/docs/l10n.md

153 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 本地化
支持多种本地化机制,分别处理不同的场合,它们可以同时使用。
### 静态文本值本地化
对于需要本地化的文本值,在配置导出时既已完成本地化的转化,适用于不同地区打不同包或者不同配置的情形。通过以下几个方面来实现静态文本值本地化:
- 使用 text 类型标识需要本地化的字符串。 text类型由两个字段构成, key和value。
- 使用本地化映射表提供text到其他语言的映射
- 未完成本地化的text单独输出到一个文件方便得知哪些文本值未完成本地化映射
#### 需要本地化的示例表
<table border="1">
<tr align="center">
<td>id</td>
<td colspan="2">name</td>
<td>desc</td>
<td>count</td>
</tr>
<tr align="center">
<td>int</td>
<td colspan="2">text</td>
<td>string</td>
<td>int</td>
</tr>
<tr align="center">
<td>1</td>
<td>/demo/key1</td><td>苹果</td>
<td>这是一个苹果</td>
<td>100</td>
</tr>
<tr align="center">
<td>2</td>
<td>/demo/key2</td><td>香蕉</td>
<td>这是香蕉</td>
<td>100</td>
</tr>
<tr align="center">
<td>3</td>
<td>/demo/key3</td><td>西瓜</td>
<td>这是西瓜</td>
<td>100</td>
</tr>
</table>
#### 文本值映射文件
| key | origin_text | text_tw | text_en |
| - | - | - | - |
|本地化key| 原始值 | 繁体值 | 英文 |
|本地化key| 原始值 | 繁体值 | 英文 |
|/demo/key1|苹果|苹果|apple|
|/demo/key2|香蕉|香蕉|banana|
### Luban.Client 命令
有三个参数跟静态文本值本地化相关
- input_l10n_text_files 本地化映射文件
- l10n_text_field_name 映射的目标字段名。因为有可能多个语言都在同一个映射表内(如text_tw和text_en)
- output_l10n_not_translated_text_file 未完成文本值本地化映射的text
以下为一个示例脚本
```bat
%GEN_CLIENT% -h %LUBAN_SERVER_IP% -j cfg --^
-d %DEFINE_FILE%^
--input_data_dir %CONF_ROOT%\Datas ^
--output_code_dir Gen ^
--output_data_dir config_data ^
--gen_types data_json ^
-s all ^
--input_l10n_text_files l10n/cn/TextTable_CN.xlsx ^
--l10n_text_field_name text_en ^
--output_l10n_not_translated_text_file NotLocalized_CN.txt
```
### 示例输出结果
导出json文件内容为
```json
[
{
"id": 1,
"text": {
"key": "/demo/key1",
"text": "apple"
},
"desc": "这是一个苹果",
"count": 100
},
{
"id": 2,
"text": {
"key": "/demo/key2",
"text": "banana"
},
"desc": "这是香蕉",
"count":100
},
{
"id": 3,
"text": {
"key": "/demo/key3",
"text": "西瓜"
},
"desc":"这是西瓜",
"count": 100
}
]
```
示例中 /demo/key3 在本地化映射表中未提供因为output_l10n_not_translated_text_file 指定的未映射本地化文本值列表内容为。
```text
/demo/key3|这是西瓜
```
### 文本值动态本地化
运行时动态切换text类型字段到目标语言程序不需要根据id去本地化映射表里查询简化了使用。注意目前只有bean中text类型字段才支持像list,text之类的暂未支持。通过以下几个方面支持文本值动态本地化
- 标识字段为text类型
- 提供 (string key, string origin_value) => (string target_value) 的本地化映射函数
- 运行时调用 cfg.Tables.TranslateText函数一键切换配置中所有text类型值到目标语言
本地化映射函数实现比较简单,核心在于如何制作文本值本地化映射配置?使用者既可以使用自定义本地化映射表,可以使用普通的 luban配置表来提供 文本值映射配置,如下图:
| key | origin_text | text_tw | text_en |
| - | - | - | - |
| string| string| string| string|
|本地化key| 原始值 | 繁体值 | 英文 |
|/demo/key1|苹果|苹果|apple|
|/demo/key2|香蕉|香蕉|banana|
假设配置表的表名为 l10n.TbTextMapper示例c#版本地化映射函数如下:
```c#
string TextMapper(string key, string originText)
{
return tables.TbTextMapper.GetOrDefault(key) ?? originText;
}
```
### 多分支 数据
支持 main + patches的数据模式。在主版本数据基础上提供一个补丁数据合并处理后生成最终目标数据。适合制作海外有细节配置不同的多地区配置不需要
复制出主版本数据,接着在上面修改出最终数据。极大优化了制作本地化配置的工作流。
### 时间本地化
datetime类型数据在指定了本地化时区后会根据目标时区生成相应时刻的UTC时间方便程序使用.
通过Luban.Client的参数来指定时区
-t,--l10n_timezone <timezone>
该时区为linux下的时区名例如: -t "Asia/Shanghai" 指定目标时区为 亚洲上海(也即北京时间)