定义
HTML的 lang 属性表示语言代码,用于网页或部分网页的语言。
根据W3C推荐标准,应该通过<html>标签中的 lang 属性对每张页面的主要语言进行声明。
<html lang=“en”> … </html>
在XHTML中,采用如下方式在<html>标签中对语言进行声明:
<html xmlns=“http://www.w3.org/1999/xhtml” lang=“en” xml:lang=“en”> … </html>
lang语言标签的排列方式
目前,最新的语言标签标记法的国际标准是 IETF 的 BCP 47(Best Current Practice),也就是 RFC 5646 取代了之前的 RFC 4646,3066和1766,名称《Tags for Identifying Languages》。lang属性的取值遵循 BCP 47 — Tags for Identifying Languages 。
RFC 5646 规定语言标签按如下方式排列:
language—extlang—script—region—variant—extension—privateuse
- language:这部分就是ISO 639 规定的主代码,比如中文是 zh。
- script:表示变体,比如简体汉字是 zh-Hans,繁体汉字是 zh-Hant。
- region:表示语言使用的地理区域。比如zh-Hans-CN就是中国大陆使用的简体中文。
- variant:表示方言。
- extension-privateus:表示扩展用途和私有标识。
所有语言标签都是大小写无关的,但是按照惯例,language标签小写,region标签大写,script标签首字母大写。不同标签之间用连字号—链接。
RFC 5646 定义了HTML中必须使用的语言代码。语言代码包括一个主代码和一系列子代码,主代码必须使用,子代码可以不使用。格式为:主代码,主代码-子代码,主代码-子代码-子代码,……。
2个字母的主语言标签与 ISO 639 一致,不允许使用标准意外的其他值。所有标签都可以在IANA registry 查询,获取更多信息可以阅读 Choosing a language tab 。
备注:ISO 639是数个由国际标准化组织(ISO)为各语言所订定的语言代码。此标准还在持续更新。
浏览器支持:所有浏览器均支持lang属性。
实例说明
单一的zh和zh-CN均属于废弃用法。
备注:zh — 中文 cmn — 普通话 Han — 汉字 Hans — 简体中文 Hans — 繁体中文
实例:
zh-cmn 普通话
zh-cmn-Hans 简体中文
zh-cmn-Hant 繁体中文
zh-cmn-Hant-HK 香港地区使用的繁体中文
zh-cmn-Hans-CN 大陆地区使用的简体中文
zh-hak 客家话
zh-yue 粤语
zh-yue-Hant-HK 香港地区使用的粤语,繁体中文
需要加地区的代码情况一般比较少,除非为了强调不同地区汉语使用差异。比如:
<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) 的写法。
/*此随笔内容根据网上内容整理而成,非原创。如有侵权,表示歉意,请告知于我。*/
参考内容:
[1] HTML语言代码参考手册
[2] 网页头部的声明应该是用lang=“zh”还是lang=“zh-cn”?
可参考外文链接:
[1] Language information and text direction
[2] Understanding the New Language Tags
[3] Language tags in HTML and XML