解決的問(wèn)題:
解決不同國(guó)家語(yǔ)言顯示特性股淡,如單復(fù)數(shù)身隐、貨幣、數(shù)字唯灵、時(shí)間贾铝、時(shí)區(qū)等。
前后端耦合低埠帕,讓服務(wù)端專注于數(shù)據(jù)的本身垢揩。
提供給翻譯團(tuán)隊(duì)待翻譯語(yǔ)言包格式簡(jiǎn)單、可讀性強(qiáng)敛瓷、規(guī)范叁巨。
方案原理:
服務(wù)端返回頁(yè)面數(shù)據(jù)和當(dāng)前國(guó)家字段,如zh-cn, en-us等呐籽,前端根據(jù)該字段加載當(dāng)前國(guó)家的語(yǔ)言規(guī)則文件锋勺。
前端調(diào)用ro.js中$Le.getLangKeyC函數(shù),傳入JS語(yǔ)言包(json格式)對(duì)應(yīng)的文案key狡蝶,傳入服務(wù)端返回的數(shù)據(jù)庶橱,就可解析成符合當(dāng)前國(guó)家語(yǔ)言特性的文案結(jié)果,例如
時(shí)間:
服務(wù)端返回?cái)?shù)據(jù) | 中文 | 美國(guó)英語(yǔ) | 英國(guó)英語(yǔ) |
---|---|---|---|
{ time: 1474815683 } | 2016年9月25日 | Sep 12, 2016 | 12 Sep 2016 |
貨幣顯示:
服務(wù)端返回?cái)?shù)據(jù) | 人民幣 | 美元 | 歐元 |
---|---|---|---|
{curreny: 1337} | ¥1,337.00 | $1,337.00 | €1,337.00 |
單復(fù)數(shù):
服務(wù)端返回?cái)?shù)據(jù) | 中文 | 英語(yǔ) |
---|---|---|
{count: 1} | 我有1個(gè)蘋(píng)果 | I have 1 apple |
{count: 10} | 我有10個(gè)蘋(píng)果 | I have 10 apples |
數(shù)字:
服務(wù)端返回?cái)?shù)據(jù) | 中文 | 美國(guó)英語(yǔ) | 德語(yǔ) |
---|---|---|---|
{number: 3.14} | 3.14 | 3.14 | 3,14 |
方案依賴:
- 該方案依賴推特的twitter-cldr-js贪惹,twitter-cldr-js是基于CLDR(Common Locale Data Repository)開(kāi)發(fā)苏章,CLDR集成了世界上不同國(guó)家語(yǔ)言特性規(guī)則,各大公司均已采用CLDR(Google, Apple, Microsoft, IBM等)奏瞬。
基于該方案各團(tuán)隊(duì)協(xié)作核心流程:
1:服務(wù)端:
服務(wù)端向頁(yè)面注入當(dāng)前國(guó)家字段枫绅,如zh-cn, en-US等。
2:前端:
前端只需加載當(dāng)前國(guó)家語(yǔ)言包硼端,語(yǔ)言規(guī)則并淋,根據(jù)業(yè)務(wù)數(shù)據(jù)調(diào)用ro.js中$Le.getLangKeyC函數(shù)($Le.getLangKeyC是基于twitter-cldr-js API的再次封裝,更加簡(jiǎn)化)珍昨。
3:本地化翻譯團(tuán)隊(duì):
本地化翻譯團(tuán)隊(duì)只需依CLDR規(guī)范來(lái)翻譯字段县耽。例如單復(fù)數(shù)翻譯:“我有10個(gè)蘋(píng)果”:
前端提供的JS語(yǔ)言包:lang_zh-cn.js
var lang = {
"apple_other": "我有{plural-count}個(gè)蘋(píng)果订咸。"
}
翻譯團(tuán)隊(duì)返回的語(yǔ)言包(依據(jù)CLDR規(guī)范):lang_en-us.js
var lang = {
"apple_one": "I have {plural-count} apple."
"apple_other": "I have {plural-count} apples."
}