“lang” 属性和 <meta http-equiv="Content-Language" content="en-US"> 标签有什么区别?

23
我想知道使用"lang"属性的意义以及它与使用meta标签"Content-Language"有何不同?
考虑以下代码:
<html lang="en">
    <head>
        <meta http-equiv="Content-Language" content="en-US">
    </head>...

我的假设是浏览器读取meta标签的值,但DOM关心的是“lang”属性。这是否正确?我是否不知道任何细微差别?

3个回答

19

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

Content-Language HTTP头指定所针对的受众语言。这与实际编写文档的语言不同。例如,法语课程的一部分可能包含用法语编写的页面,但Content-Language将是en,因为它是针对学习法语的英语人士而编写的。

来自规范

Content-Language实体标头字段描述封闭实体的预期受众的自然语言。请注意,这可能与实体正文中使用的所有语言不等同。

Meta HTTP-equiv是贫民版的HTTP标头。它具有真正HTTP标头的全部含义,但缺少尊重(和支持)。

作为经验法则,Content-Language对搜索引擎更感兴趣,而lang属性对屏幕阅读器更感兴趣。


有趣的是,我刚刚发现 http-equiv 用于 content-language 的浏览器支持比正确的 HTTP 标头更好!只有 Firefox 做得对:http://artdent.homelinux.net/~josh/language.html - Josh Lee
我认为这应该算作Firefox的一个bug。它不应该将Content-Language视为指定文档语言的标志。 - Quentin
根据HTML4(和5),应该如此。 - Josh Lee
我只能在处理空白字符方面找到相关的参考,但它确实暗示了应该使用Content-Language来确定文档语言。这是规范中那些不清楚且含糊矛盾的部分之一,可能会引起问题。不过很容易避免——始终使用lang属性,问题就解决了。 - Quentin

13

4
它们的含义相同——设置相关内容的语言,但是lang属性优先级更高。请参阅8.1.2 Inheritance of language codes。它们处理不同的用例——lang属性可以在单个元素上设置<i lang=la>exempla gratis</i>,而Content-Language头可以由服务器全局配置,适用于整个文档集。
您的示例展示了设置html元素语言的两种等效方式,但是由于lang属性具有优先权,值将为"en"而不是"en-US"

尽管两个回答都很有帮助,但我认为这个答案最简洁明了,所以我将授予它绿色复选标记。感谢jleedev和David Dorward两位! - mariachimike
它们的意思不同,Quentin的回答解释了它们之间的区别。 - Dmitry Pashkevich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接