BCP 47 語言標記句法淺析

一個語言標記(language tag)是由一個或多個“子標記”(subtag)序列組成的羹与。而子標記就是由字母和數(shù)字字符序列構成的,在一個語言標記中,子標記由連字符(-葱绒,[Unicode] U+002D)隔開绍在。子標記有多種類型门扇,它們是通過長度,在語言標記中所處的位置偿渡,以及內容來區(qū)分的臼寄。

語言標記句法是由 ABNF [RFC5234] 描述的,接下來我將逐步解釋一下語言標記句法的意思:

 Language-Tag  = langtag             ; normal language tags
               / privateuse          ; private use tag
               / grandfathered       ; grandfathered tags
 langtag       = language
                 ["-" script]
                 ["-" region]
                 *("-" variant)
                 *("-" extension)
                 ["-" privateuse]

 language      = 2*3ALPHA            ; shortest ISO 639 code
                 ["-" extlang]       ; sometimes followed by
                                     ; extended language subtags
               / 4ALPHA              ; or reserved for future use
               / 5*8ALPHA            ; or registered language subtag

 extlang       = 3ALPHA              ; selected ISO 639 codes
                 *2("-" 3ALPHA)      ; permanently reserved

 script        = 4ALPHA              ; ISO 15924 code

 region        = 2ALPHA              ; ISO 3166-1 code
               / 3DIGIT              ; UN M.49 code

 variant       = 5*8alphanum         ; registered variants
               / (DIGIT 3alphanum)

 extension     = singleton 1*("-" (2*8alphanum))

                                     ; Single alphanumerics
                                     ; "x" reserved for private use
 singleton     = DIGIT               ; 0 - 9
               / %x41-57             ; A - W
               / %x59-5A             ; Y - Z
               / %x61-77             ; a - w
               / %x79-7A             ; y - z

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

 grandfathered = irregular           ; non-redundant tags registered
               / regular             ; during the RFC 3066 era

 irregular     = "en-GB-oed"         ; irregular tags do not match
               / "i-ami"             ; the 'langtag' production and
               / "i-bnn"             ; would not otherwise be
               / "i-default"         ; considered 'well-formed'
               / "i-enochian"        ; These tags are all valid,
               / "i-hak"             ; but most are deprecated
               / "i-klingon"         ; in favor of more modern
               / "i-lux"             ; subtags or subtag
               / "i-mingo"           ; combination
               / "i-navajo"
               / "i-pwn"
               / "i-tao"
               / "i-tay"
               / "i-tsu"
               / "sgn-BE-FR"
               / "sgn-BE-NL"
               / "sgn-CH-DE"

 regular       = "art-lojban"        ; these tags match the 'langtag'
               / "cel-gaulish"       ; production, but their subtags
               / "no-bok"            ; are not extended language
               / "no-nyn"            ; or variant subtags: their meaning
               / "zh-guoyu"          ; is defined by their registration
               / "zh-hakka"          ; and all of these are deprecated
               / "zh-min"            ; in favor of a more modern
               / "zh-min-nan"        ; subtag or sequence of subtags
               / "zh-xiang"

 alphanum      = (ALPHA / DIGIT)     ; letters and numbers

Language-Tag

 Language-Tag  = langtag             ; normal language tags
               / privateuse          ; private use tag
               / grandfathered       ; grandfathered tags

Language-Tag 是由 langtag溜宽、privateusegrandfathered 三者中的某一個表示的吉拳,其中 langtag 表示標準的語言標記,privateuse 表示私有用途的標記适揉,grandfathered 表示祖父級標記(永遠不會改變)合武。

langtag

 langtag       = language
                 ["-" script]
                 ["-" region]
                 *("-" variant)
                 *("-" extension)
                 ["-" privateuse]

langtag(語言標記)是由一個 language,0 或 1 個 "-" script涡扼,0 或 1 個 "-" region稼跳,0 或無數(shù)個 "-" variant,0 或無數(shù)個 "-" extension吃沪,0 或 1 個 "-" privateuse 構成汤善。

language

 language      = 2*3ALPHA            ; shortest ISO 639 code
                 ["-" extlang]       ; sometimes followed by
                                     ; extended language subtags
               / 4ALPHA              ; or reserved for future use
               / 5*8ALPHA            ; or registered language subtag

language(語言)是由 2*3ALPHA ["-" extlang]4ALPHA5*8ALPHA 表示票彪,第一個是最短的 ISO 639 編碼红淡,有時后面會緊跟擴展的語言子標記;第二個預留給未來使用降铸;第三個是已注冊的語言子標記在旱。

script

 script        = 4ALPHA              ; ISO 15924 code

script(字母系統(tǒng))是由 4 個字母序列表示,值為 ISO 15924 標準中列出的編碼推掸。

region

 region        = 2ALPHA              ; ISO 3166-1 code
               / 3DIGIT              ; UN M.49 code

region(區(qū)域)是由 2 個字母序列(ISO 3166-1 編碼)或 3 個數(shù)字序列(UN M.49 編碼)表示桶蝎。

variant

 variant       = 5*8alphanum         ; registered variants
               / (DIGIT 3alphanum)

variant(變體)是由 5 到 8 個字母數(shù)字序列或 1 個數(shù)字及 3 個字母或數(shù)字序列表示驻仅,這些變體都是經過注冊的。

extension

 extension     = singleton 1*("-" (2*8alphanum))

                                     ; Single alphanumerics
                                     ; "x" reserved for private use
 singleton     = DIGIT               ; 0 - 9
               / %x41-57             ; A - W
               / %x59-5A             ; Y - Z
               / %x61-77             ; a - w
               / %x79-7A             ; y - z

extension(擴展)是由一個數(shù)字或字母(其中 "x" 字母預留給 privateuse)以及 1 個或多個 "-" (2*8alphanum) 表示登渣。

privateuse

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

privateuse 開頭由 "x" 標記噪服,后面追加一個或多個 "-" (1*8alphanum),其中 (1*8alphanum) 表示 1 到 8 個字母數(shù)字組成的序列胜茧。

grandfathered

 grandfathered = irregular           ; non-redundant tags registered
               / regular             ; during the RFC 3066 era

grandfathered 是由 irregularregular 表示粘优。它們都是在 RFC 3066 期間注冊的非重復標記。

irregular

 irregular     = "en-GB-oed"         ; irregular tags do not match
               / "i-ami"             ; the 'langtag' production and
               / "i-bnn"             ; would not otherwise be
               / "i-default"         ; considered 'well-formed'
               / "i-enochian"        ; These tags are all valid,
               / "i-hak"             ; but most are deprecated
               / "i-klingon"         ; in favor of more modern
               / "i-lux"             ; subtags or subtag
               / "i-mingo"           ; combination
               / "i-navajo"
               / "i-pwn"
               / "i-tao"
               / "i-tay"
               / "i-tsu"
               / "sgn-BE-FR"
               / "sgn-BE-NL"
               / "sgn-CH-DE"

irregular(不規(guī)則標記)并不匹配 langtag 的標記規(guī)則呻顽,也因此不被認為是“格式良好”的標記雹顺,這些標記都是合法的,但是為了支持更現(xiàn)代的子標記或子標記組合廊遍,大多數(shù)都已被棄用嬉愧。

regular

 regular       = "art-lojban"        ; these tags match the 'langtag'
               / "cel-gaulish"       ; production, but their subtags
               / "no-bok"            ; are not extended language
               / "no-nyn"            ; or variant subtags: their meaning
               / "zh-guoyu"          ; is defined by their registration
               / "zh-hakka"          ; and all of these are deprecated
               / "zh-min"            ; in favor of a more modern
               / "zh-min-nan"        ; subtag or sequence of subtags
               / "zh-xiang"

regular(規(guī)則標記)能夠匹配 langtag 的標記規(guī)則,但是它們的子標記并不是擴展語言或者是變體子標記:它們的含義是由它們的注冊所定義昧碉,并且為了支持更現(xiàn)代的子標記或子標記序列英染,它們都已經被廢棄了。

參考資料

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末被饿,一起剝皮案震驚了整個濱河市四康,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狭握,老刑警劉巖闪金,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異论颅,居然都是意外死亡哎垦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門恃疯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漏设,“玉大人,你說我怎么就攤上這事今妄≈?冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵盾鳞,是天一觀的道長犬性。 經常有香客問我,道長腾仅,這世上最難降的妖魔是什么乒裆? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮推励,結果婚禮上鹤耍,老公的妹妹穿的比我還像新娘肉迫。我一直安慰自己,他們只是感情好惰蜜,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布昂拂。 她就那樣靜靜地躺著受神,像睡著了一般抛猖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鼻听,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天财著,我揣著相機與錄音,去河邊找鬼撑碴。 笑死撑教,一個胖子當著我的面吹牛,可吹牛的內容都是我干的醉拓。 我是一名探鬼主播伟姐,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亿卤!你這毒婦竟也來了愤兵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤排吴,失蹤者是張志新(化名)和其女友劉穎秆乳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钻哩,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡屹堰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了街氢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扯键。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖珊肃,靈堂內的尸體忽然破棺而出荣刑,到底是詐尸還是另有隱情,我是刑警寧澤近范,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布嘶摊,位于F島的核電站,受9級特大地震影響评矩,放射性物質發(fā)生泄漏叶堆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一斥杜、第九天 我趴在偏房一處隱蔽的房頂上張望虱颗。 院中可真熱鬧沥匈,春花似錦、人聲如沸忘渔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畦粮。三九已至散址,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宣赔,已是汗流浹背预麸。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留儒将,地道東北人吏祸。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像钩蚊,于是被迫代替她去往敵國和親贡翘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容

  • Adding full support for a language touches many different...
    Joe_Gao_89f1閱讀 8,771評論 0 3
  • abandon, desert, forsake, leave, give up abandon :強調永遠或完全...
    sunxiaohang閱讀 2,317評論 0 3
  • 小鹿永遠是個感性高于理性的人砰逻。 平安夜鸣驱,2018考研結束,住在阿姨家睡的很早诱渤。睡前丐巫,也許是釋放了所有,也許是心里盲...
    陽光下_多美好閱讀 176評論 0 0
  • 今天下午去了健身房勺美,跑步6㎞递胧,30分鐘。之前從來沒有跑過這么久赡茸,但我卻不知不覺就做到了缎脾,如果不是電話打斷,可能我還...
    天龍?zhí)枪?/span>閱讀 107評論 0 1
  • 第一章第四節(jié) 為什么夢醒后被遺忘占卧? 我們常常有這樣的經歷遗菠,在夢中我們情緒激烈似生離死別,時間跨度之大似從出生到亙古...
    書青麥閱讀 637評論 0 0