一文搞懂语言标签(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)」等各种情况。下面我们来简要看下语言标签及各个 子标签 的含义。

语言标签的格式

language-extlang-script-region-variant-extension-privateuse

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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 网站可以查到以下条目,表示中文是宏语言,普通话是中文的一种。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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=未编码的
1
2
3
4
5
6
7
8
9
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=拉丁美洲
1
2
3
4
5
6
7
8
9
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)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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)

一些用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<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>

作者:贺师俊
链接:<a href="https://www.zhihu.com/question/20797118/answer/16809331" rel="nofollow">https://www.zhihu.com/question/20797118/answer/16809331</a>
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
“你” “我们” 用 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 英语 (英国)

作者:荒原守望者
链接:<a href="https://www.zhihu.com/question/20797118/answer/63480740" rel="nofollow">https://www.zhihu.com/question/20797118/answer/63480740</a>
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<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>拼写检查建议改正第二个单词

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

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

参考资料

Reader Echoes

1 comment

  • #1553Hant-380
    友情提醒,是「壮族」不是「状族」

表情

评论提交后需经审核才会显示。