最近加入到新項(xiàng)目組負(fù)責(zé)前端技術(shù)預(yù)研和選型,其中涉及到一個(gè)熟悉又陌生的需求——國(guó)際化&本地化。熟悉的是之前的項(xiàng)目也玩過(guò),陌生的是之前的實(shí)現(xiàn)僅僅停留在"有"的階段而已。趁著這個(gè)機(jī)會(huì)好好學(xué)習(xí)整理一下,為后面的技術(shù)選型做準(zhǔn)備。
本篇將闡述國(guó)際化和本地化的概念,以及其中一個(gè)很重要的概念——Language tag(也叫Language code 或 Culture)。
國(guó)際化我認(rèn)為就是應(yīng)用支持多語(yǔ)言和文化習(xí)俗(數(shù)字、貨幣、日期和字符比較算法等),而本地化則是應(yīng)用能識(shí)別用戶所屬文化習(xí)俗自動(dòng)適配至相應(yīng)的語(yǔ)言文化版本。
過(guò)去常常以為國(guó)際化就是字符串的替換——如"你好!"替換為"What's up, man!",其實(shí)具體是分為以下5方面:
"你好!"替換為"What's up, man!". 數(shù)字表示方式1200.01,英語(yǔ)表示方式為1,200.01,而法語(yǔ)則為1 200,01,德語(yǔ)則為1.200,01. 貨幣表示方式¥1,200.01,美元表示方式為$1,200.01,而英語(yǔ)的歐元?jiǎng)t為?1,200.01,德語(yǔ)的歐元?jiǎng)t為1.200,01 ?.2016年9月15日,英語(yǔ)表示方式為9/15/2016, 而法語(yǔ)為15/9/2016, 德語(yǔ)為15.9.2016. 字符比較算法
如ä和z比較時(shí),英語(yǔ)、德語(yǔ)中均是ä排在z前面,而在瑞典語(yǔ)中則是z排在ä前面.
既然要自動(dòng)適配至用戶所屬的語(yǔ)言文化版本,那么總得有個(gè)根據(jù)才能識(shí)別吧?我想大家應(yīng)該對(duì)zh-CN和en等不陌生吧,而它們正是我們所需的根據(jù)了!在我們使用已有i18n庫(kù)實(shí)現(xiàn)國(guó)際化/本地化時(shí),必定會(huì)寫下以下文檔
{ "en": { "name": "Enter Name" }, "zh-CN": { "name": "輸入姓名" }} 但除了en和zh-CN還有其他鍵嗎?它們的組成規(guī)則又是如何的呢?下面我們來(lái)稍微深入的了解這些Language Tag吧!
注意以下采用ABNF語(yǔ)言描述(ABNF的語(yǔ)法請(qǐng)參考語(yǔ)法規(guī)范:BNF與ABNF)
Language-Tag = langtag / privateuse / grandfatheredlangtag = language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse]可以看到Language-Tag分為langtag,privateuse 和 grandfatherd三個(gè)子類,下面我們先了解一般情況用不上的兩個(gè)吧!
新聞熱點(diǎn)
疑難解答
圖片精選