解决的问题:
解决不同国家语言显示特性,如单复数、货币、数字、时间、时区等。
前后端耦合低,让服务端专注于数据的本身。
提供给翻译团队待翻译语言包格式简单、可读性强、规范。
方案原理:
服务端返回页面数据和当前国家字段,如zh-cn, en-us等,前端根据该字段加载当前国家的语言规则文件。
前端调用ro.js中$Le.getLangKeyC函数,传入JS语言包(json格式)对应的文案key,传入服务端返回的数据,就可解析成符合当前国家语言特性的文案结果,例如
时间:
服务端返回数据 | 中文 | 美国英语 | 英国英语 |
---|---|---|---|
{ time: 1474815683 } | 2016年9月25日 | Sep 12, 2016 | 12 Sep 2016 |
货币显示:
服务端返回数据 | 人民币 | 美元 | 欧元 |
---|---|---|---|
{curreny: 1337} | ¥1,337.00 | $1,337.00 | €1,337.00 |
单复数:
服务端返回数据 | 中文 | 英语 |
---|---|---|
{count: 1} | 我有1个苹果 | I have 1 apple |
{count: 10} | 我有10个苹果 | I have 10 apples |
数字:
服务端返回数据 | 中文 | 美国英语 | 德语 |
---|---|---|---|
{number: 3.14} | 3.14 | 3.14 | 3,14 |
方案依赖:
- 该方案依赖推特的twitter-cldr-js,twitter-cldr-js是基于CLDR(Common Locale Data Repository)开发,CLDR集成了世界上不同国家语言特性规则,各大公司均已采用CLDR(Google, Apple, Microsoft, IBM等)。
基于该方案各团队协作核心流程:
1:服务端:
服务端向页面注入当前国家字段,如zh-cn, en-US等。
2:前端:
前端只需加载当前国家语言包,语言规则,根据业务数据调用ro.js中$Le.getLangKeyC函数($Le.getLangKeyC是基于twitter-cldr-js API的再次封装,更加简化)。
3:本地化翻译团队:
本地化翻译团队只需依CLDR规范来翻译字段。例如单复数翻译:“我有10个苹果”:
前端提供的JS语言包:lang_zh-cn.js
var lang = {
"apple_other": "我有{plural-count}个苹果。"
}
翻译团队返回的语言包(依据CLDR规范):lang_en-us.js
var lang = {
"apple_one": "I have {plural-count} apple."
"apple_other": "I have {plural-count} apples."
}