HTML lang属性小记

由 Kurococ Liu 发布

IANA 语言子标签注册表

lang属性的取值应该遵循 BCP 47 - Tags for Identifying Languages

单一的 zh 和 zh-CN 均属于废弃用法。

问题主要在于,zh 现在不是语言code了,而是macrolang,能作为语言code的是cmn(国语)、yue(粤语)、wuu(吴语)等。我通常建议写成 zh-cmn 而不是光写 cmn,主要是考虑兼容性(至少可匹配 zh),有不少软件和框架还没有据此更新。

zh-CN 的问题还在于,其实多数情况下标记的是简体中文,但是不恰当的使用了地区,这导致同样用简体中文的 zh-SG(新加坡)等无法匹配。更典型的是 zh-TW 和 zh-HK。所以其实应该使用 zh-Hans / zh-Hant 来表示简体和繁体。那么完整的写法就是 zh-cmn-Hans,表示简体中文书写的普通话/国语。一般而言没有必要加地区代码,除非要表示地区特异性,一般是词汇不一样(比如维基百科的大陆简体和新马简体)。

如何标记的例子:

简体中文页面:html lang=zh-cmn-Hans

繁体中文页面:html lang=zh-cmn-Hant

英语页面:html lang=en

回来》的音频,以国语演唱:audio lang=zh-cmn
海阔天空》的音频,以粤语演唱:audio lang=yue
进来白相相》的音频,以沪语演唱:audio lang=wuu
注意上述因为都是音频,所以不应加上 Hans/Hant 标记。

最终信仰》的音频,双语演唱,因此audio不需要标记lang(如果一定需要标记可以用 lang=mul),但是每个段落的歌词可以分别用 p lang=en 和 p lang=zh-cmn 标记(根据简体或是繁体可用 zh-cmn-Hans 或 zh-cmn-Hant)。
《忐忑》的音频,没有歌词,因此不需要标记lang(如果一定需要标记可用 audio lang=zxx)。

需要加地区代码的情况一般比较少,除非为了强调不同地区汉语使用差异。比如:

<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>

当然,由于历史原因,有时候不得不继续使用zh-CN。比如中文维基百科,沿用了传统的zh-CN/zh-HK/zh-SG/zh-TW(按照标准应该使用 zh-cmn-Hans-CN、zh-cmn-Hant-HK、zh-cmn-Hans-SG、zh-cmn-Hant-TW)。这时候,合理的软件行为,是将 zh-CN 等转化为 zh-cmn-Hans(即转化为最常见的误用所对应的实际标准写法)。

实际上,各相关标准,也存在一定的滞后。例如CSS的:lang选择器,不支持选择仅仅简体/繁体中文(而不管是cmn或是yue或是min等汉语方言)。理想情况是CSS3对:lang选择器的语法进行升级,即BCP 47中的高级匹配算法,支持 :lang(*-Hans)这样的写法。

更新:Selectors Level 4 已经加入了对BCP 47高级匹配算法的支持,即支持 :lang(*-Hans) 的写法。

更多中文标记:

标识符 参考名称 状态
zho 中文 Active
cdo 闽东语 Active
cjy 晋语 Active
cmn 普通话或國語 Active
cpx 莆仙语 Active
czh 徽语 Active
czo 闽中语 Active
gan 赣语 Active
hak 客家话 Active
hsn 湘语 Active
lzh 文言文 Active
mnp 闽北语 Active
nan 闽南语 Active
wuu 吴语 Active
yue 粤语 Active
cnp Northern Ping Chinese Active
csp Southern Ping Chinese Active

规则如下:

language  -  extlang       -  script  -  region  -  variant  -  extension  -  privateuse
主语言    -  扩展语言(方言)  -  书写文字 -  区域    -  变体     -  扩展       -  私有

中文子标签一览

language

  • zh 中国字或中国话

extlang

  • cdo 闽东语
  • cjy 晋语
  • cmn 普通话或國語
  • cpx 莆仙语
  • czh 徽语
  • czo 闽中语
  • gan 赣语
  • hak 客家话
  • hsn 湘语
  • mnp 闽北语
  • nan 闽南语
  • wuu 吴语
  • yue 粤语
  • lzh 文言文

script

  • Hans 简体汉字
  • Hant 繁体汉字

region

  • CN CHINA 中国
  • HK HONG KONG 香港
  • TW Taiwan 台湾
  • SG Singapore 新加坡

文字例子

  • 圆珠笔 zh-Hans-CN
  • 原子筆 zh-Hant-TW
  • 它是一个刮胡刀 zh-Hans-CN
  • 佢系一个须刨嚟嘅 yue-Hans
  • 佢係一個鬚刨嚟嘅 yue-Hant
  • 驴不胜怒,蹄之 zh-lzh-Hans
  • 驢不勝怒,蹄之 zh-lzh-Hant
  • 驴发怒踢他了 zh-Hans-CN

语言标签解释

  • zh-Hans 简体中文(个人推荐)
  • zh-Hans-CN 以简体中文书写的中国大陆用词
  • zh-Hans-HK 以简体中文书写的香港地区用词
  • zh-Hant 繁體中文
  • zh-Hant-HK 以繁體中文書寫的香港地區用詞
  • zh-Hant-TW 以繁體中文書寫的台灣地區用詞
  • yue 粤语发音
  • cmn 普通话或國語发音
  • yue-Hans 以简体中文书写的粤语用词
  • zh-yue-Hans 以简体中文书写的粤语用词(个人推荐)
  • yue-Hant 以繁體中文書寫的粵語用詞
  • cmn-Hans 以简体中文书写的普通话用词
  • zh-cmn-Hans 以简体中文书写的普通话用词(个人推荐)
  • cmn-Hans-CN 以简体中文书写的中国大陆普通话用词
  • cmn-Hant-HK 以繁體中文書寫的香港地区普通話用詞
  • cmn-Hant-TW 以繁體中文書寫的台湾地区國語用詞

其他栗子

<link rel="alternate" hreflang="ja" lang="ja" href="https://hoge.com/"><!--日本語-->
<link rel="alternate" hreflang="en" lang="en" href="https://hoge.com/en/"><!--英語-->
<link rel="alternate" hreflang="zh-cmn-Hans" lang="zh-cmn-Hans" href="https://hoge.com/zh-cn/"><!--中国語(簡体)-->
<link rel="alternate" hreflang="zh-cmn-Hant" lang="zh-cmn-Hant" href="https://hoge.com/zh-tw/"><!--中国語(繁体)-->
<link rel="alternate" hreflang="ko" lang="ko" href="https://hoge.com/ko/"><!--韓国語-->
<link rel="alternate" hreflang="fr" lang="fr" href="https://hoge.com/fr/"><!--フランス語-->
//言語ごとにfont-familyを指定するmixin
@mixin font_style {
  [lang=ja] & {
    color: darkred;
  }
  [lang=en] & {
    color: darkcyan;
  }
  [lang=zh-cmn-Hans] & {
    color: darkgreen;
  }
  [lang=zh-cmn-Hant] & {
    color: darkorange;
  }
  [lang=ko] & {
    color: darkviolet;
  }
  [lang=fr] & {
    color: darkslategray;
  }
}

font-familyやline-height 言语ごとのCSSo指定します。

参考链接 贺师俊 ISO 639-3 ISO 639 639 Identifier Documentation: zho 多言語サイトで使うlang属性、lang属性を使ったCSS指定 HTML lang 没你想的那么简单


暂无评论

发表评论