天天看點

語言識别及标簽tag定義:RFC 5646中文簡述

   RFC5646是關于語言識别的請求評議文檔,在開發國際化應用時離不開語言資訊的處理,比如drupal多語言處理,語言資訊識别以語言标簽來指定:

   語言标簽用以指明資訊對象的語言資訊,如方言、區域、書寫變體等等,資訊對象不僅僅是文本,還有音視訊等等内容,在人類使用的計算機系統中語言标簽被廣泛使用,如浏覽器可以發送首選語言參數資訊。

   由the Internet Assigned Numbers Authority (IANA)依據RFC 5646來管理語言标簽的注冊和維護,指明人類溝通的自然語言或人工語言,不指程式語言,如php、java等,語言标簽具備語義性,除注冊的公有标簽外,提供了私有使用的機制。

語言标簽文法:

   語言标簽tag由一個或多個子标簽Subtag組成的US-ASCII字元序列構成,以連字元“-”分割,第一個子标簽是主語言子标簽Primary Language Subtag,隻能有兩個或三個字元,四個字元的保留為功能使用,5-8個字元的為特權标簽,注冊來形式化主語言子标簽和未來擴充;一個字元的首标簽有特殊含義,如X表明語言标簽為私用;在主語言标簽之後,各個子标簽進一步細化或縮小整個語言标簽的範圍,子标簽由字母或數字構成,所有子标簽不得超過8個字元(但語言标簽字元總長度未給予限制),空格不被允許,大小寫沒關系;根據位置、長短和内容,子标簽有不同的類型,通常的格式如下:

首語言标簽-擴充語言标簽extlang-腳本标簽script-區域标簽region-變體标簽Variant (0個或多個)-擴充标簽Extension(0個或多個)-私有标簽Private(以字母X開頭,如en-x-US)

其中許多标簽名由IANA注冊維護,通常來自于ISO标準檔案,有些标簽名為自定義,如私有标簽

舉例如下:

zh-cmn-Hans-CN 表示:漢語(首語言标簽)-國語(擴充語言标簽)-簡體中文(腳本标簽)-中國(使用區域)

zh-yue-HK 表示:漢語(首語言标簽)-粵語(擴充語言标簽)-香港(使用區域)

除首語言标簽外其他标簽均為可選,如簡體中文通常記為:zh-hans

詳細的格式描述請看RFC 5646 ,該描述使用了擴充巴克斯範式ABNF,那是類似正規表達式一樣的表達工具,關于該巴克斯範式請見RFC5234,或搜尋關鍵詞:ABNF,本文附加了一份ABNF的簡短中文說明,見附加資料

RFC5646文檔位址:

http://www.rfc-editor.org/rfc/rfc5646.txt 

W3C語言标簽應用:

https://www.w3.org/International/articles/language-tags/

我是雲客,【雲遊天下,做客四方】,微信号:php-world,原創内容,歡迎轉載,但須注明出處,讨論請加qq群203286137

附加資料:

以下列出ABNF的中文規則說明:

ABNF

  RFC2234 定義了擴充的巴科斯範式(ABNF)。近年來在Internet的定義中 ABNF 被廣泛使用。ABNF 做了更多的改進。擴充巴科斯-瑙爾範式(ABNF)基于了巴科斯-瑙爾範式(BNF),但由它自己的文法和推導規則構成。這種元語言的發起原則是描述作為通信協定(雙向規範)的語言的形式系統。它建檔于 RFC 4234 中通常充當 IETF 通信協定的定義語言。

  ABNF 規定是一組推導規則,寫為:

規則 = 定義 ; 注釋 CR LF      

  這裡的規則是大小寫敏感的非終止符,定義由定義這個規則的符号序列,一個文檔注釋組成,并結束于回車換行。

  規則名字是大小寫不敏感的: 

<rulename>

<Rulename>

<RULENAME>

 和 

<rUlENamE>

 都提及同一個規則。規則名字由開始于一個字母的字母、數字和連字元組成。不要求用尖括号(“

<

”, “

>

”) (如 BNF 那樣)包圍規則名字。但是它們可以用來界定規則名字,比如在冗文中識别出規則名字的時候。ABNF 使用 7-位 ASCII 編碼,在 8-位域中把高位置零。

  終結符由一個或多個數值字元指定。數值字元可以指定為跟随着基數(b = 二進制, d = 十進制, x = 十六進制)的一個百分号“

%

”,随後是這個數值,或數值的串聯(用“

.

” 來訓示)。例如回車可以指定為十進制的 

%d13

 或十六進制的 

%x0D

。回車換行可以指定為 

%d13.10

  文字正文通過使用包圍在引号(

"

)中字元串來指定。這些字元串是大小寫不敏感的,使用的字元集是 US-ASCII。是以字元串“abc”将比對“abc”, “Abc”, “aBc”, “abC”, “ABc”, “AbC”, “aBC” 和 “ABC”。對于大小寫敏感比對,必須定義明确的字元: 要比對 “aBc” 定義将是 

%d97 %d66 %d99

  操作符

  空白被用來分隔定義的各個元素: 要使空格被識别為分割符則必須明确的包含它。

  串聯

規則1 規則2         

  規則可以通過列出一序列的規則名字來定義。

  要比對字元串“aba”可以使用下列規則:

fu = %x61; a
bar = %x62; b
mumble = fu bar fu      

  選擇

規則1 / 規則2        

  規則可以通過用反斜杠(“

/

”)分隔的多選一規則來定義。

  要接受規則 <fu> 或規則 <bar> 可構造如下規則:

fubar = fu / bar          

  遞增選擇

規則1 =/ 規則2        

  可以通過使用在規則名字和定義之間的“

=/

”來向一個規則增加補充選擇。

  規則

ruleset = alt1 / alt2 / alt3 / alt4 / alt5      

  等價于

ruleset = alt1 / alt2
ruleset =/ alt3
ruleset =/ alt4 / alt5      

  值範圍

%c##-##           

  數值範圍可以通過使用連字元(“

-

”)來指定。

  規則

OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"      

  等價于

OCTAL = %x30-37      

  序列分組

(規則1 規則2)        

  元素可以放置在圓括号中來組合定義中的規則。

  要比對“elem fubar snafu”或“elem tarfu snafu”可以構造下列規則:

group = elem (fubar / tarfu) snafu      

  要比對“elem fubar”或“tarfu snafu”可以構造下列規則:

group = elem fubar / tarfu snafu
group = (elem fubar) / (tarfu snafu)      

  可變重複

n*n規則           

  要訓示一個元素的重複可以使用形式 

<a>*<b> 元素

。可選的 

<a>

 給出要包括的元素的最小數目,預設為 0。可選的 

<b>

 給出要包括的元素的最大數目,預設為無窮。

  對零或多個元素使用 

*元素

,對一或多個元素使用 

1*元素

,對二或三個元素使用 

2*3元素

  特定重複

  

n規則             

  要訓示明确數目的元素可使用形式 

<a> 元素

,它等價于 

<a>*<a>元素

  使用 

2DIGIT

 得到兩個數字,使用 

3DIGIT

 得到三個數字。(DIGIT 在下面的核心規則中定義)。

  可選序列

[規則]              

  要訓示可選元素下列構造是等價的:

[fubar snafu]
*1(fubar snafu)
0*1(fubar snafu)      

  注釋

; 注釋             

  分号(“

;

”)開始一個注釋并持續到此行的結束。

  操作符優先級

  上述操作符有從最緊綁定(binding)到最松綁定的給定優先級:

  1. 字元串,名字形成(formation)
  2. 注釋
  3. 值範圍
  4. 重複
  5. 分組,可選
  6. 串聯
  7. 選擇

  與串聯一起使用選擇操作符可以造成混淆,建議使用分組來做明确串聯分組。

  核心規則

  核心規則定義于 ABNF 标準中。

規則 形式定義 意義
ALPHA %x41-5A / %x61-7A 大寫和小寫 ASCII 字母 (A-Z a-z)
DIGIT %x30-39 數字 (0-9)
HEXDIG DIGIT / "A" / "B" / "C" / "D" / "E" / "F" 十六進制數字 (0-9 A-F a-f)
DQUOTE %x22 雙引号
SP %x20 空格
HTAB %x09 水準tab
WSP SP / HTAB 空格和水準tab
LWSP *(WSP / CRLF WSP) 線性空白(晚于換行)
VCHAR %x21-7E 可見(列印)字元
CHAR %x01-7F 任何 7-位 US-ASCII 字元,不包括 NUL
OCTET %x00-FF 8 位資料
CTL %x00-1F / %x7F 控制字元
CR %x0D 回車
LF %x0A 換行
CRLF CR LF 網際網路标準換行
BIT "0" / "1"

繼續閱讀