日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JS魔法堂:不完全國際化&本地化手冊之理論篇

前言

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了天全免費(fèi)建站歡迎大家使用!

最近加入到新項(xiàng)目組負(fù)責(zé)前端技術(shù)預(yù)研和選型,其中涉及到一個(gè)熟悉又陌生的需求——國際化&本地化。熟悉的是之前的項(xiàng)目也玩過,陌生的是之前的實(shí)現(xiàn)僅僅停留在"有"的階段而已。趁著這個(gè)機(jī)會(huì)好好學(xué)習(xí)整理一下,為后面的技術(shù)選型做準(zhǔn)備。?本篇將闡述國際化和本地化的概念,以及其中一個(gè)很重要的概念——Language tag(也叫Language code 或 Culture)。

何為國際化?

國際化我認(rèn)為就是應(yīng)用支持多語言和文化習(xí)俗(數(shù)字、貨幣、日期和字符比較算法等),而本地化則是應(yīng)用能識(shí)別用戶所屬文化習(xí)俗自動(dòng)適配至相應(yīng)的語言文化版本。?過去常常以為國際化就是字符串的替換——如"你好!"替換為"What's up, man!",其實(shí)具體是分為以下5方面:

1.字符串替換

?如"你好!"替換為"What's up, man!".

2.數(shù)字表示方式

?如1200.01,英語表示方式為1,200.01,而法語則為1 200,01,德語則為1.200,01.

3.貨幣表示方式

?如人民幣¥1,200.01,美元表示方式為$1,200.01,而英語的歐元?jiǎng)t為€1,200.01,德語的歐元?jiǎng)t為1.200,01 €.

注意: 這里沒有還沒算上匯率呢.

1.日期表示方式

?如2016年9月15日,英語表示方式為9/15/2016, 而法語為15/9/2016, 德語為15.9.2016.

2.字符比較算法

?如?和z比較時(shí),英語、德語中均是?排在z前面,而在瑞典語中則是z排在?前面.

本地化的關(guān)鍵 —— Language Tag

既然要自動(dòng)適配至用戶所屬的語言文化版本,那么總得有個(gè)根據(jù)才能識(shí)別吧?我想大家應(yīng)該對zh-CN和en等不陌生吧,而它們正是我們所需的根據(jù)了!在我們使用已有i18n庫實(shí)現(xiàn)國際化/本地化時(shí),必定會(huì)寫下以下文檔

 
 
  1.   "en": { "name": "Enter Name" }, 
  2.   "zh-CN": { "name": "輸入姓名" } 

但除了en和zh-CN還有其他鍵嗎?它們的組成規(guī)則又是如何的呢?下面我們來稍微深入的了解這些Language Tag吧!

語法規(guī)則

注意以下采用ABNF語言描述(ABNF的語法請參考語法規(guī)范:BNF與ABNF)

 
 
  1. Language-Tag = langtag 
  2.              / privateuse 
  3.              / grandfathered 
  4.  
  5. langtag = language 
  6.           ["-" script] 
  7.           ["-" region] 
  8.           *("-" variant) 
  9.           *("-" extension) 
  10.           ["-" privateuse] 

可以看到Language-Tag分為langtag,privateuse 和 grandfatherd三個(gè)子類,下面我們先了解一般情況用不上的兩個(gè)吧!

privateuse

標(biāo)簽的意思不由subtag registry定義,而是由使用的團(tuán)隊(duì)間私自定義、維護(hù)和使用。

格式:

 
 
  1. privateuse = "x" 1*("-" (1*8alphanum)) 

示例:x-zh-CN是privateuse,其意思不一定與languagezh-CN一致。

注意: 只作為小集團(tuán)內(nèi)部用可以,決不能大范圍適用。

grandfathered

用于向后兼容。由于RFC 4646前的標(biāo)簽無法完全匹配當(dāng)前registry的標(biāo)簽語法和意思,因此通過grandfathered來提供向后兼容的特性。

語法:

 
 
  1. grandfathered = irregular 
  2.               / regualr 
  3. irregular = "en-GB-oed"         ; irregular tags do not match 
  4.           / "i-ami"             ; the 'langtag' production and 
  5.           / "i-bnn"             ; would not otherwise be 
  6.           / "i-default"         ; considered 'well-formed' 
  7.           / "i-enochian"        ; These tags are all valid, 
  8.           / "i-hak"             ; but most are deprecated 
  9.           / "i-klingon"         ; in favor of more modern 
  10.           / "i-lux"             ; subtags or subtag 
  11.           / "i-mingo"   
  12.           / "i-navajo" 
  13.           / "i-pwn" 
  14.           / "i-tao" 
  15.           / "i-tay" 
  16.           / "i-tsu" 
  17.           / "sgn-BE-FR" 
  18.           / "sgn-BE-NL" 
  19.           / "sgn-CH-DE" 
  20. regular = "art-lojban"        ; these tags match the 'langtag' 
  21.         / "cel-gaulish"       ; production, but their subtags 
  22.         / "no-bok"            ; are not extended language 
  23.         / "no-nyn"            ; or variant subtags: their meaning 
  24.         / "zh-guoyu"          ; is defined by their registration 
  25.         / "zh-hakka"          ; and all of these are deprecated 
  26.         / "zh-min"            ; in favor of a more modern 
  27.         / "zh-min-nan"        ; subtag or sequence of subtags 
  28.         / "zh-xiang" 

注意: 幾乎所有g(shù)randfarthered標(biāo)簽均可被當(dāng)前registry的標(biāo)簽及其組合作替代(像i-tao可以被tao代替),因此如無意外請使用現(xiàn)行的標(biāo)簽吧。

下面就到了我們的重頭戲langtag了,首先我們看看langtag下的第一個(gè)subtag——language.

Primary language subtag

像en這種就是Primary language subtag,用于標(biāo)識(shí)資源所對應(yīng)的語言。

語法:

 
 
  1. language = 2*3ALPAH 
  2.            ["-" extlang] 
  3.          / 4ALPHA 
  4.          / 5*8ALPHA 
  5. extlang = 3ALPHA 
  6.           *2("-" 3ALPHA) 

看到language有三種形式,其中讓我比較好奇的是第一種2*3ALPHA ["-" extlang]。這種形式中前面的2*3ALPHA稱為macrolanguage,用于標(biāo)明資源對應(yīng)一種語言的匯總,而具體的某一種語言/方言則通過extlang指定。而包含extlang部分的language也被稱為encompassed language.

如zh-cmn和zh-yue就是encompassed language,其中zh是macrolanguage,而cmn和yue則是extlang。

這里有個(gè)很有趣的事情是,我們認(rèn)為普通話和廣東話等都是漢語的方言,但西方卻認(rèn)為普通話、廣東話根本就不屬于一種語言,因此像zh-cmn和zh-yue在規(guī)范中被設(shè)置為redundant,建議直接使用cmn和yue等。不過由于歷史原因,我們還是使用zh-CN代表cmn-CN。

另外現(xiàn)在可以作為macrolanguage的就只有7個(gè)標(biāo)簽(ar,kok,ms,sw,uz,zh和sgn)

另外幾個(gè)和cmn類似的subtags如下

 
 
  1. cmn 普通話(官話、國語) 
  2. wuu 吳語(江浙話、上海話) 
  3. czh 徽語(徽州話、嚴(yán)州話、吳語-徽嚴(yán)片) 
  4. hak 客家語 
  5. yue 粵語(廣東話) 
  6. nan 閩南語(福建話、臺(tái)語) 
  7. cpx 莆仙話(莆田話、興化語) 
  8. cdo 閩東語 
  9. mnp 閩北語 
  10. zco 閩中語 
  11. gan 贛語(江西話) 
  12. hsn 湘語(湖南話) 
  13. cjy 晉語(山西話、陜北話) 

注意: 一般采用全小寫

Script subtag

用于指定字跡或文字系統(tǒng)資源所屬的語言和方言等。?語法:

 
 
  1. script = 4ALPHA 

注意: 一般采用首字母大寫,后續(xù)字母全小寫

Region subtag

指定與國家、地域?qū)?yīng)的語言/方言文化。?語法:

 
 
  1. region = 2ALPHA 
  2.        / 3DIGIT 

注意: 一般采用全大寫

Variant subtag

指定其他subtag又無法提供的額外信息?語法:

 
 
  1. variant = 5*8alphanum 
  2.  
  3. / (DIGIT 3alphanum) 

示例:de-CH-1996其中1996是variant subtag,整體意思是在Switzerland使用的自1996改良過的德語。

Extension subtag

提供一種機(jī)制讓我們?nèi)U(kuò)展langtag?語法:

 
 
  1. extension = singleton 1*("-" (2*8alphanum)) 
  2. singleton = DIGIT 
  3.           / %x41-57 
  4.           / %x59-5A 
  5.           / %x61-77 
  6.           / %x79-7A 

現(xiàn)在僅支持u作為sigleton的值。

示例:de-DE-u-co-phonebk表示采用電話本核對的方式對內(nèi)容進(jìn)行排序等操作。

更多關(guān)于language-tag的信息請參考BCP 47

如何選擇Language Tag

硬著頭皮啃下這么多規(guī)范的內(nèi)容,但我還不知道如何組合合適的language-tag呢:(其實(shí)選擇和組合的原則就只有一條

在足以區(qū)別當(dāng)前上下文中其他language-tag的前提下,保持language-tag足夠地短小精干

示例1:下文普通話、粵語并存

 
 
  1.  
  2. 小陳說:"老大爺,東方廣場怎么走???" 
  3. 老大爺回答道:"你講咩也?。课衣犨砻鬣?。" 
  4.  

示例2:下文含大陸人講英語、香港人講普通話和美國人說英語

 
 
  1.  
  2. 小陳說:"Hi, where are you come from?" 
  3. 李先生說:"你的英文跟我的普通話一樣普通啊,哈哈!" 
  4. Simon說:"Hey, what's up!" 
  5.  

那現(xiàn)在引出另一個(gè)問題,那就是我們怎么知道各個(gè)subtag具體定義了哪些值呢?

具體都定義在IANA Language Subtag Registry中了。

假如覺得查找起來還是不方便,那么就使用Language Subtag Lookup tool吧!

另外若不清楚各國各地區(qū)所使用的語言或方言時(shí),可通過Ethnologue查看,直接點(diǎn)擊地圖上的區(qū)域即可獲取相應(yīng)的subtag信息。

總結(jié)

現(xiàn)在我們已經(jīng)對國際化和本地化有了更全面的理解,也對Language tag有了更深入的認(rèn)識(shí),現(xiàn)在是不是迫不及待想挽起袖子擼代碼呢?敬請期待下篇《JS魔法堂:不完全國際化&本地化手冊 之 實(shí)戰(zhàn)篇》

尊重原創(chuàng),轉(zhuǎn)載請注明來自: http://www.cnblogs.com/fsjohn... ^_^肥仔John


網(wǎng)頁題目:JS魔法堂:不完全國際化&本地化手冊之理論篇
文章網(wǎng)址:http://www.5511xx.com/article/cohejoj.html