分类
代码

一文搞懂语言标签(zh-CN 与 zh-Hans 是什么关系)

先给出标题中问题的答案:zh-CN=中文(中国),zh-Hans=简体中文。

  • 当要强调 在中国使用的 中文时,用 zh-CN, 区别于 zh-SG=中文(新加坡) / zh-HK =中文(香港)/ zh-MO =中文(澳门)/ zh-TW=中文(中国台湾)。
  • 当只需要区别简繁体时,可以仅用 zh-Hans 与 zh-Hant 表示。Hans 是汉语简体的含义:汉的拼音 Han + 简体(Simplified),Hant 中的 t 则是繁体(Traditional)的意思。
  • 当然,需要更进一步区别时,也可以同时附加 书写格式+地区 表示:zh-Hans-CN=简体中文(中国),zh-Hans-SG=简体中文(新加坡)。

这里我们已经引入了语言、书写格式、地区的区别。实际上,一种语言可以用 BCP 47 (RFC 5646) 规范中的 语言标签 来表示,通常语言标签形式是:language-extlang-script-region-variant-extension-privateuse,用这个格式甚至可以表示出「用拼音拼写的普通话(zh-cmn-Latn-pinyin)」、「简体字书写的文言文(zh-lzh-Hans)」、「在香港地区使用的繁体字书写的粤语(zh-yue-Hant-HK)」等各种情况。下面我们来简要看下语言标签及各个 子标签 的含义。

语言标签的格式

languageextlangscriptregionvariantextensionprivateuse

完整的 ABNF 定义(扩展巴斯科范式)摘抄如下:

Language-Tag  = langtag             ; 普通语言标记
               / privateuse          ; 或 私有标记
               / grandfathered       ; 或 兼容性标记 英文 grandfathered tags 「祖传的标记」

langtag       = language             ; 必须的语言标记
                 ["-" script]        ; 可选的书写格式
                 ["-" region]        ; 可选的区域
                 *("-" variant)      ; 0个或多个变体
                 *("-" extension)    ; 0个或多个扩展
                 ["-" privateuse]    ; 可选的私有标记

 language      = 2*3ALPHA            ; 最短 ISO 639 代码(中文 zh/zho 应使用 zh)
                 ["-" extlang]       ; 有时后接扩展语言标记
               / 4ALPHA              ; 或4个字母保留以后使用
               / 5*8ALPHA            ; 或已注册的5-8个字母的语言子标签
                                     ;(如已过时的规范 RFC-4646 中的 xiang=湘语)

 extlang       = 3ALPHA              ; 3 个字母的 ISO 639 代码
                 *2("-" 3ALPHA)      ; 永久保留

 script        = 4ALPHA              ; ISO 15924 中的代码

 region        = 2ALPHA              ; ISO 3166-1 中的代码
               / 3DIGIT              ; UN M.49 中的代码

 variant       = 5*8alphanum         ; 5-8位 IANA 注册的变体
               / (DIGIT 3alphanum)

 extension     = singleton 1*("-" (2*8alphanum))
                                     ; 单个字符,"x" 保留为私有使用

 singleton     = DIGIT               ; 0 - 9
               / %x41-57             ; A - W
               / %x59-5A             ; Y - Z
               / %x61-77             ; a - w
               / %x79-7A             ; y - z

 privateuse    = "x" 1*("-" (1*8alphanum))

 grandfathered = irregular           ; non-redundant tags registered
               / regular             ; during the RFC 3066 era

 irregular     = "en-GB-oed"         ; irregular tags do not match
               / "i-ami"             ; the 'langtag' production and
               / "i-bnn"             ; would not otherwise be
               / "i-default"         ; considered 'well-formed'
               / "i-enochian"        ; These tags are all valid,
               / "i-hak"             ; but most are deprecated
               / "i-klingon"         ; in favor of more modern
               / "i-lux"             ; subtags or subtag
               / "i-mingo"           ; combination
               / "i-navajo"
               / "i-pwn"
               / "i-tao"
               / "i-tay"
               / "i-tsu"
               / "sgn-BE-FR"
               / "sgn-BE-NL"
               / "sgn-CH-DE"

 regular       = "art-lojban"        ; these tags match the 'langtag'
               / "cel-gaulish"       ; production, but their subtags
               / "no-bok"            ; are not extended language
               / "no-nyn"            ; or variant subtags: their meaning
               / "zh-guoyu"          ; is defined by their registration
               / "zh-hakka"          ; and all of these are deprecated
               / "zh-min"            ; in favor of a more modern
               / "zh-min-nan"        ; subtag or sequence of subtags
               / "zh-xiang"

 alphanum      = (ALPHA / DIGIT)     ; letters and numbers

每个子标签的取值枚举可以在 IANA 注册管理机构查询

language: 主要语言

2 或 3 字母表示,通常约定用小写。示例:

  • zh=汉语 Chinese
  • en=英语 English
  • za=状(族)语 Zhuang
  • zgm=状语南部方言民话 Minz Zhuang
  • hak=客家语 Hakka Chinese
  • cmn=普通话 Mandarin Chinese

我们发现,普通话其实也是汉语的一种,所以汉语又被称为 宏语言(macrolanguage),而用 扩展语言 来细分其中的不同语言。

2 个字母的一般和 ISO 639 二字码是相同的,三字码是额外在 IANA 中登记注册的。IANA 网站可以查到以下条目,表示中文是宏语言,普通话是中文的一种。

Type: language
Subtag: zh
Description: Chinese
Added: 2005-10-16
Scope: macrolanguage

Type: language
Subtag: cmn
Description: Mandarin Chinese
Added: 2009-07-29
Macrolanguage: zh

extlang: 扩展语言

3个小写字母表示。示例:

  • cmn=普通话 Mandarin Chinese
  • yue=粤语 Cantonese
  • hak=客家话 Hakka Chinese
  • zxx=没有语言内容(如用在网页中 audio 标签引用《忐忑》,其中的 lang 属性可以不写,或可以标为 zxx)
Type: extlang
Subtag: cmn
Description: Mandarin Chinese
Added: 2009-07-29
Preferred-Value: cmn
Prefix: zh
Macrolanguage: zh

Type: language
Subtag: zxx
Description: No linguistic content
Description: Not applicable
Added: 2006-03-08
Scope: special

在可能的情况下不需要主要语言前缀,直接用扩展语言开头即可。如 cmn 就是 zh-cmn 的意思;如果需要主要语言开头,cmn 只能以 zh 为前缀,不存在 en-cmn 英语普通话(条目 cmn 中指明了 Prefix: zh)。但为了兼容性,实际上个人还是倾向于加上主要语言前缀,毕竟 zh-cmn 至少还能匹配到 zh , 而 cmn 是 2009 年才登记为语言子标签的。

script: 书写格式

4个字母且首字母大写表示。如

  • Hans=简体汉字
  • Hant=繁体汉字
  • Latn=拉丁字母
  • Cyrl=西里尔字母
  • Zxxx=不是书面内容
  • Zyyy=不确定
  • Zzzz=未编码的
Type: script
Subtag: Hans
Description: Han (Simplified variant)
Added: 2005-10-16

Type: script
Subtag: Hant
Description: Han (Traditional variant)
Added: 2005-10-16

仅当有必要时才使用 script 子标签,如通常西班牙语就是用拉丁字母写,因此一般不需要指明 es-Latn 直接用 es 即可。
具体示例:zh-Hans=简体中文,az-Latn=阿塞拜疆语-拉丁字母书写的(而不是阿拉伯文书写的)

region: 区域

2个大写字母(ISO-3166区域代码)或3位数字(UN M.49区域代码)表示。示例

  • CN=中国大陆
  • HK=中国香港
  • TW=中国台湾
  • GB=英国
  • US=美国
  • 001=全世界
  • 005=南美
  • 030=东亚
  • 419=拉丁美洲
Type: region
Subtag: CN
Description: China
Added: 2005-10-16

Type: region
Subtag: TW
Description: Taiwan, Province of China
Added: 2005-10-16

仅当有必要时才使用区域子标签,如:要强调 在意大利使用的 意大利语时才用 it-IT,否则直接用 it 即可)
具体示例:es-005=南美西班牙语,zh-Hant-HK=香港使用的繁体中文。

variant: 方言/变体

用于指示语言、脚本、区域组合不能涵盖的方言或变体,在语言/书写格式/区域之后,但其之前可以没有书写格式/区域。示例:

  • pinyin=拼音(前缀应为 zh-Latn=汉语-拉丁字母 ,bo-Lantn=藏语-拉丁字母)
  • jyutping=粤拼(前缀应为 yue)
Type: variant
Subtag: pinyin
Description: Pinyin romanization
Added: 2008-10-14
Prefix: zh-Latn
Prefix: bo-Latn

Type: variant
Subtag: jyutping
Description: Jyutping Cantonese Romanization
Added: 2010-10-23
Prefix: yue
Comments: Jyutping romanization of Cantonese

Extension-privateuse:扩展名和专用子标签

这部分用得较少,笔者也没有深入理解。扩展名是单个字母并紧跟专用子标签。
扩展名 x 是保留为私人使用的,u 是 Unicode 联盟注册的扩展名。
如 de-DE-u-co-phonebk=德语且使用电话薄的排序顺序(co=Collation)

一些用法

<p lang="zh-cmn-Hans">
<b lang="zh-cmn-Hans-CN">菠萝</b>
和<b lang="zh-cmn-Hant-TW">鳳梨</b>
其实是同一种水果。
只是大陆和台湾称谓不同,
且新马一带的称谓也是不同的,
称之为<b lang="zh-cmn-Hans-SG">黄梨</b>。
</p>

作者:贺师俊
链接:https://www.zhihu.com/question/20797118/answer/16809331
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
“你” “我们” 用 cmn-Hans 普通话 (简体)
“侬” “啊啦” 用 wuu-Hans 吴语 (简体)
“你” “我哋” 用 yue-Hans 粤语 (简体)

“消息” “黄梨” “自行车” 用 cmn-Hans-SG 普通话 (简体, 新加坡)
“消息” “菠萝” “自行车” 用 cmn-Hans-CN 普通话 (简体, 中国大陆)
“消息” “菠蘿” “自行車” 用 cmn-Hant-CN 普通话 (繁体, 中国大陆)
“訊息” “菠蘿” “單車”   用 cmn-Hant-HK 普通话 (繁体, 香港)
“訊息” “鳳梨” “腳踏車” 用 cmn-Hant-TW 普通话 (繁体, 台湾)

“analyse” “color” “elevator” 用 en-US 英语 (美国)
“analyze” “colour” “lift”    用 en-GB 英语 (英国)

作者:荒原守望者
链接:https://www.zhihu.com/question/20797118/answer/63480740
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
<p lang="zh-CN">骨</p>
<p lang="zh-HK">骨</p>
<p lang="zh-TW">骨</p>
网页默认使用的字体不一样,字型会有差异:第一行的「骨」字上方朝左、下方作两横,第二行上方朝右、下方作两横,第三行上方朝右、下方作「点挑」

<style>.upper { text-transform: uppercase; }</style>
<p class="upper" lang="en-US">shipping</p> 英文中 i 的大写 I 上没有点
<p class="upper" lang="tr">shipping</p> 这里土耳其文 i 的大写 I 上也会有点

<textarea lang="en-GB">center centre</textarea>拼写检查说第一个单词需要改正
<textarea lang="en-US">center centre</textarea>拼写检查建议改正第二个单词

作者:三日月 綾香
链接:https://www.zhihu.com/question/20797118/answer/1045722170
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

建议到引用的链接原文查看效果,原回答有截图

参考资料


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

[/鼓掌] [/难过] [/调皮] [/白眼] [/疑问] [/流泪] [/流汗] [/撇嘴] [/抠鼻] [/惊讶] [/微笑] [/得意] [/大兵] [/坏笑] [/呲牙] [/吓到] [/可爱] [/发怒] [/发呆] [/偷笑] [/亲亲]