xinchanghao / one-day-in-the-future

有朝一日,起飞...
2 stars 1 forks source link

html头部的lang声明应该是用 lang="zh" 还是 lang="zh-cn" #27

Open xinchanghao opened 4 years ago

xinchanghao commented 4 years ago

打开页面的时候,chrome提醒要不要翻译,明明页面是中文......所以,需要了解下lang属性。

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

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

如何标记的例子:

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

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

菠萝鳳梨其实是同一种水果。只是大陆和台湾称谓不同,且新马一带的称谓也是不同的,称之为黄梨

作者:贺师俊 链接:https://www.zhihu.com/question/20797118/answer/16809331