IETF語言標籤
語言標籤是語言代碼的縮寫表示,例如en表示英語,pt-BR表示巴西葡萄牙語。由網際網路工程任務組(IETF)的「BCP 47」文檔系列定義。現在標準化為RFC 5646(引用了相關的RFC 5645)與RFC 4647,IANA語言子標籤登記。[1][2][3][4]使用的各成分來自ISO 639、ISO 15924、ISO 3166-1以及UN M.49。
這種語言標籤用於許多現代的計算標準,包括IETF的網際網路協議如HTTP[5][6]、XML[7]以及PNG[8]、SGML、Unicode、ANSI以及ECMA。Microsoft的Windows作業系統使用它代替過時的LCID,來表示locale。
歷史
IETF語言標籤的最早版本是1995年3月發布的RFC 1766。使用ISO 639的2字母語言代碼,ISO 3166的2字母國家地區代碼,允許登記的標籤攜帶variant或書寫文字子標籤。
2001年1月發布RFC 3066, 使用ISO 639-2的3字母語言代碼。
2006年9月發布RFC 4646 (規範的主體)與RFC 4647 (處理匹配行為)。RFC 4646增加了使用ISO 15924 的4字母書寫文字代碼與UN M.49的3數字地理分區碼。
2009年9月發布RFC 5646,引入了3字符碼的ISO 639-3與639-5作為語言子標籤。[9]
語言標籤的語法
語言標籤由一個或多個子標籤(subtags)組成,用連字號(-)分隔。子標籤只能由基本拉丁字母或數字組成。子標籤出現順序:
- 一個主語言子標籤(primary language subtag),ISO 639-1 (2002)的2字母語言代碼,ISO 639-2 (1998)或ISO 639-3 (2007)或ISO 639-5 (2008)的3字母語言代碼, BCP 47登記的5到8個字母的語言代碼。應保持同樣的大小寫。
- 最多3個可選的extended language subtags,每個由3字母組成。實際上還沒有使用。
- 1個可選的文字子標籤(script subtag),ISO 15924的4字母書寫文字代碼,通常是title case。
- 1個可選的地區子標籤(region subtag),ISO 3166-1 alpha-2的2字母地區代碼(通常大寫),或UN M.49的3數字地理區代碼。
- 可選的variant subtags,每個為5至8個字母,或者4字母後跟1個數字。由IANA登記。
- 可選的extension subtags,每個為單字符(不允許「x」)開始(這稱為singleton),後跟連字符與2至8個字符組成的文本。[10],[11]
- 1個可選的private-use subtag, 每個為x-後跟1至8個字符組成文本。
例外情況是x-前綴開頭的私用語言標籤,向後兼容的grandfathered語言標籤(包括i-前綴與以前登記的老的語言標籤)。
上述未指明的子標籤應該小寫。實際上整個語言標籤是大小寫無關的。
可選的script與region子標籤如果沒有提供可辨識信息,則將被忽略。例如拉丁字母拼寫的西班牙語es-Latn,日本的日語ja-JP。
並不是所有語言區域都有有效的區域子標籤:主語言的國內方言區被登記為variant子標籤。例如,valencia variant子標籤用於加泰隆尼亞語的巴倫西亞語方言。由於該方言幾乎只用於西班牙國內,區域子標籤ES通常忽略。
宏語言(macrolanguage)中的語言代碼或者直接用語言子標籤表示,如普通話cmn;或者用語言-擴展子標籤的組合,如zh-cmn。
手語用擴展子標籤,前綴為sgn。
與其他國際標準的關係
雖然源自ISO或UN的標準,但並不是嚴格遵循。特別是ISO 639, ISO 15924, ISO 3166, UN M.49等標準撤回某些編碼,甚至改變某些編碼所指的時候,RFC 4646規定語言標籤仍然保持最初含義不變。
ISO 639-3 與 ISO 639-1
RFC 4646之前登記的語言標籤現在分為"grandfathered"或"redundant",視其是否滿足目前的語法而定。並且是過時的。現在採用ISO 639-3語言子標籤。例如,nan取代了zh-min-nan表示閩南語;hak取代了i-hak、zh-hakka表示客家話;ase取代了sgn-US表示美國手語。
ISO 639-5 與 ISO 639-2
ISO 639-5使用3字母表示一個語言群中所有的語言。而ISO 639-2使用3字母表示一個語言群中沒有獨立語言標籤的那些語言。例如,ISO 639-2代碼afa表示"Afro-Asiatic (Other)",不包含阿拉伯語。而ISO 639-5中的這個代碼表示"Afro-Asiatic languages",包含亞非語系所有語言。這一變化發生在2009年。[12]
ISO 639-5為了向後兼容ISO 639-2,對於這些老的代碼,定義了grouping type attribute。
BCP 47定義了"Scope"屬性用於語言集子標籤的辨別。但是沒有定義任何inclusive或exclusive屬性,也沒有使用ISO 639-5的grouping type attribute。
ISO 639-5沒有定義哪些語言屬於某個語言集。因此RFC 5646不建議使用語言集,除非是那些非特定的語言集,如"Multiple languages"與 "Undetermined"。
ISO 15924, ISO/IEC 10646 與 Unicode
某些主語言子標籤攜帶了屬性"Suppress-Script",通常某個書寫系統適用於該語言。因此會忽略script子標籤。例如,yi取代了yi-Hebr ,因為意地緒語總是使用希伯來字母書寫。
另一個例子,zh-Hans-SG可被認為等價於zh-Hans,因為新加坡簡體中文與其他簡體中文幾乎一樣。但是,這裡的script子標籤顯然是有意義的。
ISO 3166-1 與 UN M.49
當語言的地區方言有專門的子標籤,這比使用地區子標籤更優。例如,ar-DZ應該被arq代替來表示阿爾及利亞阿拉伯語。
擴展
Extension子標籤(不要與extended語言子標籤混淆)允許附加額外的信息,如locale,calendar,currency。
至2014年1月已經分配了兩種擴展。
Extension T
2012年2月,Unicode Consortium在RFC 6497發布了Extension T用於語言標籤包含信息關於音譯(transliterated),轉寫(transcribed),變換(transformed)。例如,en-t-jp用於從日語翻譯到英語。
Extension U (Unicode Locale)
2010年12月,統一碼聯盟在RFC 6067發布了Extension U,允許在通用當地數據儲存庫中嵌入了寬屬性,表示很多區域設置數據集。
例如:
- ar-u-nu-latn表示阿拉伯語使用阿拉伯數字 (0至9)代替阿拉伯文數字 (٠至٩)
- he-IL-u-ca-hebrew-tz-jeruslm表示以色列的希伯來語,使用希伯來曆,時區信息資料庫中的"Asia/Jerusalem"時區。
Windows作業系統的使用
Windows Vista及以後版本,採用RFC 4646作為locale標籤,字符串最大長度85,包含了結尾的零字符。
只有語言子標籤,稱為中立locale(neutral locale)。加上地區子標籤,稱為specific locale。格式為<language>-<Script>-<REGION>,例如"uz-Latn-UZ"表示烏茲別克斯坦的使用拉丁字母的烏茲別克語。
排序規則應寫為<language>-<Script>-<REGION>_<sort order>
參見
參考文獻
- ^ 存档副本. [2017-11-21]. (原始內容存檔於2013-06-20).
- ^ Language subtag lookup app:. r12a.github.io. [28 July 2015]. (原始內容存檔於2015-07-31).
- ^ 存档副本. [2017-11-21]. (原始內容存檔於2013-06-26).
- ^ IANA — Protocol Registries. iana.org. [28 July 2015]. (原始內容存檔於2017-11-10).
- ^ RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. ietf.org. [28 July 2015]. (原始內容存檔於2017-05-25).
- ^ Language information and text direction. w3.org. [28 July 2015]. (原始內容存檔於2008-09-04).
- ^ Extensible Markup Language (XML) 1.0 (Fifth Edition). w3.org. [28 July 2015]. (原始內容存檔於2009-04-01).
- ^ Portable Network Graphics (PNG) Specification (Second Edition). w3.org. [28 July 2015]. (原始內容存檔於2018-06-18).
- ^ Language Tag Registry Update charter. [2017-11-21]. (原始內容存檔於2007-02-10).
- ^ Addison Phillips, Mark Davis. Tags for Identifying Languages (old draft for the revision of RFC 4646, now obsolete and may disappear soon). IETF WG LTRU. 2008 [2008-06-23]. (原始內容存檔於2019-10-17).
- ^ Doug Ewell. Update to the Language Subtag Registry (old draft for the revision of RFC 4645, now obsolete and may disappear soon) (1MB). IETF WG LTRU. 2008 [2008-06-23]. (原始內容存檔於2019-10-17).
- ^ ISO 639-2 Language Code List - Codes for the representation of names of languages (Library of Congress). loc.gov. [28 July 2015]. (原始內容存檔於2018-09-17).
外部連結
- BCP 47 Language Tags(頁面存檔備份,存於網際網路檔案館) – current specification (contains two RFCs, RFC 5646 and RFC 4647 published separately at different dates, but concatenated in a single document)
- Language Subtag Registry(頁面存檔備份,存於網際網路檔案館) – maintained by IANA
- Language Subtag Registry Search(頁面存檔備份,存於網際網路檔案館) – find subtags and view entries in the Registry
- Language tags in HTML and XML(頁面存檔備份,存於網際網路檔案館) – from the W3C
- http://www.langtag.net/(頁面存檔備份,存於網際網路檔案館)