158 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Markdown
		
	
	
| ## 本地化
 | ||
| 支持多种本地化机制,分别处理不同的场合,它们可以同时使用。
 | ||
| ### 静态文本值本地化
 | ||
| 对于需要本地化的文本值,在配置导出时既已完成本地化的转化,适用于不同地区打不同包或者不同配置的情形。通过以下几个方面来实现静态文本值本地化:
 | ||
| - 使用 text 类型标识需要本地化的字符串。 text类型由两个字段构成, key和value。
 | ||
| - 使用本地化映射表提供text到其他语言的映射
 | ||
| - 未完成本地化的text单独输出到一个文件,方便得知哪些文本值未完成本地化映射
 | ||
| 
 | ||
| #### 需要本地化的示例表
 | ||
| 
 | ||
| <table border="1">
 | ||
| <tr align="center">
 | ||
|   <td>##</td>
 | ||
|   <td>id</td>
 | ||
|   <td colspan="2">name</td>
 | ||
|   <td>desc</td>
 | ||
|   <td>count</td>
 | ||
| </tr>
 | ||
| <tr align="center">
 | ||
|   <td>##type</td>
 | ||
|   <td>int</td>
 | ||
|   <td colspan="2">text</td>
 | ||
|   <td>string</td>
 | ||
|   <td>int</td>
 | ||
| </tr>
 | ||
| <tr align="center">
 | ||
|   <td/>
 | ||
|   <td>1</td>
 | ||
|   <td>/demo/key1</td><td>苹果</td>
 | ||
|   <td>这是一个苹果</td>
 | ||
|   <td>100</td>
 | ||
| </tr>
 | ||
| <tr align="center">
 | ||
|   <td/>
 | ||
|   <td>2</td>
 | ||
|   <td>/demo/key2</td><td>香蕉</td>
 | ||
|   <td>这是香蕉</td>
 | ||
|   <td>100</td>
 | ||
| </tr>
 | ||
| <tr align="center">
 | ||
|   <td/>
 | ||
|   <td>3</td>
 | ||
|   <td>/demo/key3</td><td>西瓜</td>
 | ||
|   <td>这是西瓜</td>
 | ||
|   <td>100</td>
 | ||
| </tr>
 | ||
| </table>
 | ||
| 
 | ||
| #### 文本值映射文件
 | ||
| 
 | ||
| 
 | ||
| | ## | key | origin_text | text_tw | text_en |
 | ||
| | - | - | - | - | - |
 | ||
| |##type|string|string|string|string|
 | ||
| |##|本地化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 |
 | ||
| |-| - | - | - | - |
 | ||
| |##type| string| string| string| string|
 | ||
| |##|本地化key| 原始值 | 繁体值 | 英文 |
 | ||
| ||/demo/key1|苹果|苹果|apple|
 | ||
| ||/demo/key2|香蕉|香蕉|banana|
 | ||
| 
 | ||
| 假设想切换到en,配置表的表名为 l10n.TbTextMapper,示例c#版本地化映射函数如下:
 | ||
| ```c#
 | ||
| string TextMapper(string key, string originText) 
 | ||
| {
 | ||
|     return tables.TbTextMapper.GetOrDefault(key)?.TextEn ?? originText;
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 多分支 数据
 | ||
| 支持 main + patches的数据模式。在主版本数据基础上,提供一个补丁数据,合并处理后生成最终目标数据。适合制作海外有细节配置不同的多地区配置,不需要
 | ||
| 复制出主版本数据,接着在上面修改出最终数据。极大优化了制作本地化配置的工作流。
 | ||
| 
 | ||
| 
 | ||
| ### 时间本地化
 | ||
| datetime类型数据在指定了本地化时区后,会根据目标时区,生成相应时刻的UTC时间,方便程序使用.
 | ||
| 
 | ||
| 通过Luban.Client的参数来指定时区:
 | ||
| 
 | ||
|   -t,--l10n_timezone <timezone>   
 | ||
| 
 | ||
| 该时区为linux下的时区名,例如: -t "Asia/Shanghai"  指定目标时区为 亚洲上海(也即北京时间)
 |