IETF语言标签

互聯網工程任務組定義的縮寫語言代碼

语言标签语言代码的缩写表示,例如en表示英语,pt-BR表示巴西葡萄牙语。由互联网工程任务组(IETF)的“BCP英语Best Current Practice 47”文档系列定义。现在标准化为RFC 5646(引用了相关的RFC 5645)与RFC 4647,IANA语言子标签登记[1][2][3][4]使用的各成分来自ISO 639ISO 15924ISO 3166-1以及UN M.49

这种语言标签用于许多现代的计算标准,包括IETF的互联网协议如HTTP[5][6]XML[7]以及PNG[8]SGMLUnicodeANSI以及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

与其他国际标准的关系

虽然源自ISOUN的标准,但并不是严格遵循。特别是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-hakzh-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,允许在通用当地数据储存库中嵌入了宽属性,表示很多区域设置数据集。

例如:

Windows操作系统的使用

Windows Vista及以后版本,采用RFC 4646作为locale标签,字符串最大长度85,包含了结尾的零字符。

只有语言子标签,称为中立locale(neutral locale)。加上地区子标签,称为specific locale。格式为<language>-<Script>-<REGION>,例如"uz-Latn-UZ"表示乌兹别克斯坦的使用拉丁字母的乌兹别克语。

排序规则应写为<language>-<Script>-<REGION>_<sort order>

参见

参考文献

  1. ^ 存档副本. [2017-11-21]. (原始内容存档于2013-06-20). 
  2. ^ Language subtag lookup app:. r12a.github.io. [28 July 2015]. (原始内容存档于2015-07-31). 
  3. ^ 存档副本. [2017-11-21]. (原始内容存档于2013-06-26). 
  4. ^ IANA — Protocol Registries. iana.org. [28 July 2015]. (原始内容存档于2017-11-10). 
  5. ^ RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. ietf.org. [28 July 2015]. (原始内容存档于2017-05-25). 
  6. ^ Language information and text direction. w3.org. [28 July 2015]. (原始内容存档于2008-09-04). 
  7. ^ Extensible Markup Language (XML) 1.0 (Fifth Edition). w3.org. [28 July 2015]. (原始内容存档于2009-04-01). 
  8. ^ Portable Network Graphics (PNG) Specification (Second Edition). w3.org. [28 July 2015]. (原始内容存档于2018-06-18). 
  9. ^ Language Tag Registry Update charter. [2017-11-21]. (原始内容存档于2007-02-10). 
  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). 
  11. ^ 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). 
  12. ^ 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). 

外部链接