Unicode 区域设置标识符可以采用不同的格式en-us
、en_US
和 来书写enUS
,每种格式的官方名称是什么?
经过搜索,我发现该格式en-us
叫做BCP47格式,但是其他格式呢?
答案1
en-us
是 BCP47 语言标签,它可以有其他子标签、脚本和 -t- 或 -u- 扩展名,例如th-TH-u-ca-buddhist-nu-thai
。BCP47 和 -t- 和 -u- 扩展名用于Unicode 区域设置标识符. Microsoft 文档将其称为比较语言环境 ID。
en_US
是 POSIX 区域设置标识符。格式为[language[_territory][.codeset][@modifier]]
,因此更复杂的示例为th_TH.UTF-8@calendar=buddhist
。可以包含多个修饰符,修饰符之间用分号分隔。
例如,在 ICU4C 和 ICU4J 中,您会发现同时使用了基于 BCP47 的标识符和 POSIX 标识符。
我不确定是否有使用 的标准enUS
,但我可能错了。我通常将其视为语言环境对象变量的命名约定。您还可以看到微软对语言(地域)字符串和数字语言环境标识符的使用,微软将其称为Windows 语言代码标识符 (LCID)或者文化标识符,尽管现代版本的 Windows 已经采用了基于 BCP 47 的区域设置标识符。
答案2
en-us
仅在某种意义上被称为BCP47
这是使用标签和子标签指定命名约定的标准的名称。
您可以在维基百科文章中找到详细信息 IETF 语言标签。
总而言之,en-us
是一个语言标签,由两个子标签组成:
en
是主要语言子标签,基于多项 ISO 标准us
是区域子标签,在本例中是国家代码(但也可以是地理区域代码)。
请注意,这BCP47
只是关于子标签、主要子标签和次要子标签格式的通用格式。它指出了子标签存在多种标准,但并未强加任何标准。它不规定大写或小写字母或分隔符(此处以破折号和下划线为主)。
开发人员可以自由地从任何一项或多项已知标准中选择子标签,或者发挥创造力。BCP47
只要符合所述框架,他所做的一切都会得到称呼。(我不确定有多少开发人员知道这些标准的存在。)