前言:
以前对语言代码很模糊, 最常见的也就是 zh-CN.
今天在看 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation 的时候, 就想弄清楚语言代码究竟怎样才是标准的, 就查了些资料, 顺便分享. 前辈请指教.
对于 IT 从业者来说, RFC 5646 是首先要看的. 依据的具体代码要看 ISO 639.
如果想直接点的话, 看这个 (RFC 5646 根据 ISO 639 生成的) 列表:
http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
RFC 5646
https://tools.ietf.org/html/rfc5646
被分类为 目前的最佳惯例(Best Current Practice), 而不是标准.
ISO 639
http://www.iso.org/iso/home/standards/language_codes.htm
目前共分为五部分(曾经有过第六部分, 已被废弃).
许多扩展语言(extlang)都要直接使用. 比如之前我们用 zh-cmn
表示中文普通话, 现在使用 cmn
替代.
语言如果有 script 则需要加上, 比如 Hans
是 zh
的 script. (script 的首字母大写)
但 RFC 5646 4.1.2 也说了 zh-HK
这种用法仍然是有效的.
三段式是最为详细的代码, 比如 语言(language)-子语言(script)-地区(region)
.
根据实际情况去选代码, 并不能说也特殊越好, 也不能说越兼容越好.
比如一篇文章是用中文简体书写, 内容的语境也是大陆的事情, 那么就使用 zh-Hans-CN
. 如果一个社区服务各种华裔, 那么使用 zh
也是合适的.
粤语使用 yue
即可. 吴语使用 wuu
即可.
简体汉字, zh-Hans
. 繁体汉字, zh-Hant
. 台湾正体, zh-Hant-TW
.
可以通过没有被 Deprecated 的 Type: redundant 找到常见的语言代码.
什么是 macrolanguage:
https://en.wikipedia.org/wiki/ISO_639_macrolanguage https://zh.wikipedia.org/wiki/ISO_639-3#.E5.A4.A7.E8.AA.9E.E8.A8.80_.28Macrolanguages.29
language-subtag-registry 例子:
Type: language
Subtag: zh
Description: Chinese
Added: 2005-10-16
Scope: macrolanguage