2010-12-14 29 views
17

我想知道使用“lang”属性的意义以及与使用meta“Content-Language”标签有什么不同?lang属性和<meta http-equiv =“Content-Language”content =“en-US”>标签有什么区别?

考虑下面的代码:

<html lang="en"> 
    <head> 
     <meta http-equiv="Content-Language" content="en-US"> 
    </head>... 

我的假设是,浏览器读取meta标签的价值,但DOM关注的是“lang”属性。它是否正确?有没有我不知道的细微差别?

回答

13

lang属性(在HTML元素上)指定文档的语言(除非用可以更改文档某一部分语言的另一个lang属性进行覆盖)。

Content-Language HTTP标头指定目标受众的语言。这与文档实际写入的语言不同。例如,法语语言课程的一部分可能包含用法语书写的页面,但Content-Language应为,因为它旨在用于英语人员的学习法语。

the spec

内容语言实体头字段描述目标观众的封闭实体的自然语言(S)。请注意,这可能不等同于实体主体内使用的所有语言。

Meta HTTP-equiv是穷人的HTTP头。它具有真正HTTP标头的所有含义,但不太尊重(和支持)。作为一个经验法则,内容语言对搜索引擎更感兴趣,lang属性对屏幕阅读器更感兴趣。

+0

奇怪的是,我刚刚发现内容语言的http-equiv拥有比正确的HTTP头更多*浏览器支持!只有Firefox得到这个权利:http://artdent.homelinux.net/~josh/language.html – 2010-12-14 06:58:25

+0

我想我会把它作为Firefox中的一个错误。它不应该采用Content-Language来指定文档语言。 – Quentin 2010-12-14 07:01:21

+0

根据HTML4(和5),它应该。 – 2010-12-14 07:03:12

3

它们的含义相同 - 设置相关内容的语言 - 但lang属性具有更高的优先级。见8.1.2 Inheritance of language codes。他们处理不同的使用情况 - lang属性可以在单个元素上设置为<i lang=la>exempla gratis</i>,而服务器可以全局配置Content-Language头以应用于整组文档。

你的示例展示了两种等价的方式来设置html元素的语言,但是由于lang属性优先,值将是"en"而不是"en-US"

+0

即使这两个答案都很有帮助,我认为这个答案是最简洁的,所以我会用绿色的选中标记来奖励这个答案。感谢jleedev和David Dorward! – mariachimike 2010-12-14 08:54:56

+0

他们不是这个意思,Quentin的答案解释了区别 – 2013-09-27 09:02:51

相关问题