PHP+CMS+网站 · 2019年12月5号 0

html lang=zh-CN 中文标准写法与HTML标准定义

HTML5标准定义:
lang作为HTML标签的全局属性,可以帮助定义元素的语言。该属性包含一个“语言标签”,格式为“识别语言的标签(BCP47) ”中定义的格式。

<html lang=”en”> 向搜索引擎表示该页面是html语言,并且语言为英文网站,其”lang”的意思就是“language”,语言的意思,而“en”即表示english 你的页面如果是中文页面,可将其改为 <html lang=”zh”> zh即表示中文.【zh为宏表达方式,没有准确性。应该按BCP47标准表达方式】
其一:主要是给搜索引擎看的,搜索引擎不会去判断该站点是中文站还是英文站,所以这句话就是让搜索引擎知道,你的站点是中文站,对html页面本身不会有影响。

其二:主要是发送给服务器的页头等信息保函语言元素。如果不匹配会将导致服务器解析异常。

BCP47规定了主语言与子语言表达方式:
宏语言 「zh」中文包含多种语言。出于兼容性的原因,这些语言每一个在「注册表」中都有一个主要语言子标签和一个方言子标签。其中几个例子包含赣语「gan」、粤语「yue」和普通话「cmn」,这些都包含于宏语言 「zh」中文之中,所以它们在「注册表」中都有前缀『zh』。因此赣语的标签以『zh-gan』或『gan』开头、粤语的以『zh-yue』或『yue』开头、普通话的以『zh-cmn』或『cmn』开头。即便不使用方言子标签,「zh」仍然可以用来标记一些未指定种类的中文。

优先选择主要语言标签「gan」「yue」「cmn」替代方言形式的「zh-gan」「zh-yue」「zh-cmn」。

本段摘抄于【https://zhuanlan.zhihu.com/p/29305702】 译者注:此段从兼容性和语言学角度均存在争议。但是在2009年已经废弃cmn表示。

<html lang=”zh-“> 中文标准写法:

1、简体中文国语页面:html lang=zh-cmn-Hans  2005年加入标准,2009年废弃。新标准为:cmn-Hans
2、繁体中文国语页面:html lang=zh-cmn-Hant   2005年加入标准,2009年废弃。新标准为:cmn-Hant
。。。。。。

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

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

CSDN的写法依旧是:<html lang=”zh-CN”>

百度、新浪、网易等均为加入此标签。

标准最新版本:
zh-Hans-CN 去表示:中国大陆的简体中文=中华人民共和国的简体中文==Mandarin Chinese (Simplified)==PRC Mainland Chinese in simplified。当然:如果考虑到其他的兼容性,其实也还是可以暂时继续使用:zh-CN的写法的。


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

单一的 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,表示简体中文书写的普通话/国语。一般而言没有必要加地区代码,除非要表示地区特异性,一般是词汇不一样(比如维基百科的大陆简体和新马简体)。

所以回答题主,两种都不对。

如何标记的例子:

1. 简体中文页面:html lang=zh-cmn-Hans
2. 繁体中文页面:html lang=zh-cmn-Hant
3. 英语页面:html lang=en

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

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