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/(页面存档备份,存于互联网档案馆)