很多网站中,都会对html标签设置一个lang属性,用来指定网页采用的语言类型。英文网站中,这个值通常是en,即,而在中文网站中,这个值就变得光怪陆离了。在以前,最常见的两个设置方式是和,那么,这究竟是怎么一回事呢?

知乎上有一个针对这个问题进行过细致讨论的页面:网页头部的声明应该是用 lang=”zh” 还是 lang=”zh-cn”?。本文将根据这个问题的各个答案进行一个综合整理,记录HTML中这些有意思的东西。

HTML标签的lang属性

HTML标签的lang属性将指定对应元素内容的语言。The lang attribute (in no namespace) specifies the primary language for the element’s contents and for any of the element’s attributes that contain text. Its value must be a valid BCP 47 language tag, or the empty string. Setting the attribute to the empty string indicates that the primary language is unknown.

大多数情况下,直接对html标签指定lang属性,表示当前文档显示的语言。

1

以上代码意味着该网页的内容显示文本为阿拉伯语。

在一些HTML4/XHTML的页面中,则有使用这样的方式进行指定的:

1

2

en定义语言为英语

zh-CN定义语言为中文

也有一些多语言的页面会对指定元素的lang属性进行设置,如:

指定该p标签的语言为德语1

Ich bin der brennende Komet

指定lang属性的益处协助搜索引擎

协助语音合成

协助选择符号异体字用于高品质的印刷

协助选择一套引号

协助解决连字符、绑定和空格

协助进行拼写检查和语法检查

语言文字标签书写顺序

规定语言标签按以下形式排列:language-extlang-script-region-variant-extension-privateuse

该顺序由RFC 5646也就是BCP 47指定

language 语言种类

extlang 扩展语言

script 书写格式

region 国家和地区

variant 变体

extension 扩展

privateuse 私有

所有语言标签都是大小写无关的,但是通常约定language标签全部小写,region标签全部大写,script标签只有首字母大写。不同标签之间用连字号-连接。

复杂的汉语体系

汉语演进到当今的情形,已经变得十分繁杂,有简体、繁体、各地方言,不同地区的不同汉语也不尽相同,比如东南亚的新加坡、马来西亚等地的汉语,在使用上与其他地方有一定的差异性。在中国,各地方言体系更加繁杂,如普通话、吴语、闽南语、粤语、客家话等。

在2007年公布的ISO标准中,指定了汉语为一个宏语言(macrolanguage),也可以叫做大语种。以下表格列出了13个主要的语种:

释义

说明

cmn

普通话

北方话、国语

wuu

吴语

江浙话、上海话

czh

徽语

徽州话、严州话、吴语-徽严片

hak

客家语

yue

粤语

广东话

nan

闽南语

福建话、台语

cpx

莆仙话

莆田话、兴化语

cdo

闽东语

mnp

闽北语

zco

闽中语

gan

赣语

江西话

hsn

湘语

湖南话

cjy

晋语

山西话、陕北话

看一看BCP 47的解释:For example, the macro language Chinese (‘zh’) encompasses a number of languages. For compatibility reasons, each of these languages has both a primary and extended language subtag in the registry. A few selected examples of these include Gan Chinese (‘gan’), Cantonese Chinese (‘yue’), and Mandarin Chinese (‘cmn’). Each is encompassed by the macro language ‘zh’ (Chinese). Therefore, they each have the prefix “zh” in their registry records. Thus, Gan Chinese is represented with tags beginning “zh-gan” or “gan”, Cantonese with tags beginning either “yue” or “zh-yue”, and Mandarin Chinese with “zh-cmn” or “cmn”. The language subtag ‘zh’ can still be used without an extended language subtag to label a resource as some unspecified variety of Chinese, while the primary language subtag (‘gan’, ‘yue’, ‘cmn’) is preferred to using the extended language form (“zh-gan”, “zh-yue”, “zh-cmn”).

大意为汉语这个语系太大了,包含了许多语种,为了兼容性与精确性,将之分为一些不同的小语种。所以就出现了形如 zh-gan/gan、zh-yue/yue、zh-cmn/cmn这样的标记方法。推荐使用后者,即不带zh-的。

到底用哪一个?

既然汉语语种如此之多,在实际运用中我们到底应该怎么处理呢?

之前提到的知乎上的问题:网页头部的声明应该是用 lang=”zh” 还是 lang=”zh-cn”?,里面的大部分回答者都表示题主提到的两种方式已经不赞成被继续使用了。

根据IANA的语言标准注册记录language-subtag-registry,诸如zh-Hans, zh-Hans-CN, zh-cmn, zh-cmn-Hans, zh-cmn-Hant, zh-wuu, zh-yue, zh-gan这些都已经变成了Deprecated状态了。

然而,为了照顾兼容性,很多网页依旧保留了这样的方式。

在BCF 47的文档中,并没有提出形如lang="zh"、lang="zh-CN"、lang="zh-cmn-Hans"这类表述方式不符合要求。如大名鼎鼎的维基百科,知乎平台,更有如今已经被墙的科技巨头的谷歌中文站点,其网页的语言类型使用的都是lang="zh-CN"。

关于被废弃(deprecated)的写法,BCP 47里面也做了相应的介绍:Many of these registered tags were made redundant by the advent of either RFC 4646 or this document. A redundant tag is a grandfathered registration whose individual subtags appear with the same semantic meaning in the registry. For example, the tag “zh-Hant” (Traditional Chinese) can now be composed from the subtags ‘zh’ (Chinese) and ‘Hant’ (Han script traditional variant). These redundant tags are maintained in the registry as records of type ‘redundant’, mostly as a matter of historical curiosity.

大致意思是因为zh和Hans已经被收录了,再来一个zh-Hans就显得有点多余(redundant)了;然而真正使用lang="zh-Hans"也是没有什么问题的。

以下列举一下所谓的符合规范的写法:

cms-Hans: 简体普通话,用规范汉子写下来,如“它是一个刮胡刀”,为了兼容,可以使用zh-cmn-Hans。

yue-Hans:粤语用规范汉字写下来,比如“佢系一个须刨嚟嘅”,没必要为兼容而使用zh-yue-Hans,因为看得懂zh-CN的人,看不懂这些字。

yue-Hant:粤语用國字写下来,比如“佢係一個鬚刨嚟嘅”。

lzh-Hans:文言文用规范汉字写下来,比如“驴不胜怒,蹄之”。

lzh-Hant:文言文用國字写下来,比如“驢不勝怒,蹄之”。

以上示例摘自知乎作者杨周的回答。

突然想起了一句诗词(内心思想还真是天马行空呐):本是同根生,相煎何太急。

曹植七步诗

总结

针对这个问题,我忍不住翻越了大量的资料,到头来发现自己更加懵懂了。之前我设计网页的时候已经习惯了采用和了;但是现在更多时候是不指定lang属性。

前端是个纷杂的世界,具体需要采用哪一种值,只要不是太令人费解,都是可以接受的。

有的时候为了照顾兼容性,不得不舍弃了新特性,想想也真是人在江湖,身不由己。有些问题有时候也是一个历史遗留问题,是没有良好的解决办法的,总不能直接全部推倒重来吧。然而社会在往前走,科技也在逐渐更新换代,比如最新的CSS选择器草案里面,已经把之前不起眼的:lang选择器加入了关于BCP 47的高级匹配算法支持。

本文到此结束,以下有诸多资料,诸君自行阅读。

参考资料

html语言中关于文字标记有哪些,HTML的lang标记相关推荐

  1. HTML语言中代表网页标题的标签是,html标题标记 在html中,标题标签一共有几级?

    html文件添加标题使用什么标记 html是静态网页主要的标记如下: 注释标记 在此标记内的内容网页是不显示的 HTML的标题的代码是什么? html中标题的代码是 新建html文档,在html文档中 ...

  2. C语言中设置文字颜色

    记得刚接触C语言时,上机运行代码输出结果每次都是黑色的控制台白色的文字..... 就像下面这样.视觉体验极差,十分的不美观.感觉很low. 这就引发了我的思考,输出结果必须是黑框白字吗? 显然不是这样 ...

  3. C语言中输入一组正整数,以-1作为结束标记,统计输入正整数的个数,并计算其平均值。

    今天在做一道编程题时遇到这样一种输入方式:不知道输入个数为多少,苦思之下终于想出将scanf放入循环之内的方式. 雕虫小技不足挂齿. 请笑纳: 题目要求 输入一组正整数,以-1作为结束标记,统计输入正 ...

  4. c语言无符号字符型5是什么,C语言中无符号型别是什么意思啊?

    C语言中无符号型别是什么意思啊?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言中无符号型别是什么意思啊? 无符号 ...

  5. 在html语言中的换行标记是指,南开20春学期(1709、1803、1809、1903、1909、2003)《电子商务网页制作》在线作业题目【标准答案】...

    20春学期(1709.1803.1809.1903.1909.2003)<电子商务网页制作>在线作业 试卷总分:100  得分:100 一.单选题 (共 20 道试题,共 40 分) 1. ...

  6. 路由器web网页管理界面goahead和Lighttpd、jQuery(JavaScript(js)众多框架中的比较老的一个)、超文本标记语言html

    一.路由器web网页管理界面goahead 1.开源的轻量级WEB Server很多,比如GoAhead.Shttpd.Thttpd.Lighttpd.BOA.mathopd.minihttpd.ap ...

  7. c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...

    目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...

  8. html语言中的转行标记是6,网页设计与制作模拟试题

    全国2004年7月高等教育自学考试网页设计与制作试题 网页设计与制作模拟试题 一. 单项选择题(每空1分,共10分) 1.目前在Internet上应用最为广泛的服务是( ). A.FTP服务 B.WW ...

  9. java中用流提取文档中的文字,语言实现从word文档中提取文本

    word中提取中文 打开Word,CTRL+F打开"查找替换"对话框. 点击下方的"查找替换"对话框的"高级"按钮. 点击"特殊字 ...

最新文章

  1. Python学习笔记:Day4 编写Model
  2. makefile的选项CFLAGS和LDFLAGS
  3. 高级 Java 必须突破的 10 个知识点
  4. java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型
  5. nextcloud php 版本,Nextcloud版本升级教程
  6. Java并发/多线程教程——1
  7. mysql geometry 维度_使用MySQL的geometry类型处理经纬度距离问题的方法
  8. [Python] L1-041 寻找250-PAT团体程序设计天梯赛GPLT
  9. 【OpenCV学习笔记】【函数学习】五(颜色空间转换cvCvtColor()函数)
  10. Java思维导图(3)
  11. ym——Android从零开始(27)(山寨版微信-下)(新)
  12. 怎么查EI论文的检索号
  13. 百度APP移动研发平台及DevOps实践
  14. Vba Excel 自动分级
  15. L1-022 奇偶分家(c)
  16. 使用tensorboard出现:“couldn‘t build proto file into descriptor pool!”的解决方法
  17. 08:Calling Extraterrestrial Intelligence AgainMOOC程序设计算法基础期末第八题
  18. 阴阳师服务器维护2月20,阴阳师2月19日更新维护公告 大妖试炼超鬼王来袭
  19. AutoCAD 2020 简体中文版 珊瑚版
  20. 【安卓源码】简单了解PSI

热门文章

  1. 基于stm32智能立体停车库项目
  2. Countering the Influence of Essay Length in Neural Essay Scoring学习
  3. Python实现简单的验证码处理,解决访问频繁老弹出验证码的烦恼
  4. cad-家装平面图(一)
  5. 人工智能-车牌识别停车场管理系统
  6. c语言三个杠的等号是什么,数学 3个横杠的等号表示什么意思?
  7. 11、软件工程基知识
  8. 2023最新Fiora二次元的Web多人在线网络聊天系统源码/UI漂亮/很有意思
  9. NXP的S32K144如何移植FreeRTOS?
  10. c#如何上传大文件到服务器,asp.net(C#)中上传大文件的几中常见应用方法