国际化

解决的问题:

解决不同国家语言显示特性,如单复数、货币、数字、时间、时区等。
前后端耦合低,让服务端专注于数据的本身。
提供给翻译团队待翻译语言包格式简单、可读性强、规范。

方案原理:

服务端返回页面数据和当前国家字段,如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

方案依赖:

  1. 该方案依赖推特的twitter-cldr-jstwitter-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."
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容