我通常使用这个:<html lang="en">
.
但是,我正在开发一个使用两种语言的网站,有时会在同一个句子或标题中将它们混合在一起。
在这种情况下,上面的代码会如何?我可以使用<html lang="lang1 lang2">
吗?
据我通过阅读 HTML5 规范可以看出该lang
属性:
value 必须是有效的 BCP 47 语言标记,或空字符串
来源:http ://www.w3.org/TR/html5/dom.html#the-lang-and-xml:lang-attributes
语言字符串数组的规范中没有提及,我发现的每个示例都使用单个语言字符串。
这是有道理的,因为除非我们正在创建一种新的混合语言,否则给定的部分实际上只能使用一种语言。
由于 lang 属性对所有 HTML 元素都有效,因此您可以将特定语言的代码包装在新标签中以指示其语言。
<html lang="en">
[...]
<body>
<h1>I am a heading <span lang="de-DE">Eine Überschrift</span></h1>
</body>
</html>
据我了解,您应该能够使用<html lang="mul">
来表示Multiple languages。
从 IANA 语言子标签注册表中选择子标签。
来源; https://www.w3.org/TR/2007/NOTE-i18n-html-tech-lang-20070412/#ri20030112.224623362
列表中有一个名为Subtag 的子标签:mul
资料来源:http ://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
但是,我认为您无法准确指定要在 html 元素中混合的语言。但是,正如 Jamie 所写,您可以为页面上的不同元素指定不同的 lang 属性。
ISO 639-3 中确实存在四种特殊语言代码,它们在 IANA 子标签注册表中也有效; https://en.wikipedia.org/wiki/ISO_639-3#Special_codes
但是,我怀疑这是否得到了 Google 等搜索引擎的良好支持。
在 2020 年 4 月添加此答案以提供来自 W3C ( W3.org ) 的最新指南...
首先,不,您不能使用,<html lang="lang1 lang2">
因为它不会正确验证。这是通过W3 的 Nu Html Checkerhtml
在标签的语言属性中使用多种语言(英语和斯瓦希里语)进行验证时的结果。有或没有逗号都会导致此错误:
错误:元素
en fr
属性值错误:语言子标签不是有效的语言子标签。lang
html
en swh
<html lang="en swh">↩</html>
如果你想用一种以上的语言声明多语言网页的语言,下面是基于 W3C在 HTML 中声明语言的最新版本:
快速回答
始终使用
html
标签上的语言属性来声明页面中文本的默认语言。当页面包含另一种语言的内容时,将语言属性添加到围绕该内容的元素。将
lang
属性用于作为 HTML 的页面,将xml:lang
属性 > 用于作为 XML 的页面。对于 XHTML 1.x 和 HTML5 多语言文档,请一起使用。使用IANA 语言子标签注册表中的语言标签。您可以使用 > 非官方语言子标签查找工具查找子标签。
使用嵌套元素来处理不同语言的同一元素上的内容和属性值。
在 W3C 网站的下图中,链接文本使用目标页面的语言(“Español”)显示目标页面的语言(西班牙语),但关联的标题属性包含当前页面语言的提示(英语中的“西班牙语”):
上面的标记应该如下所示,其中span
元素继承了元素的默认en
设置html
:
<span title="Spanish"><a lang="es" href="qa-html-language-declarations.es">Español</a></span>
如果您想指定某些内容的语言,但周围没有标记,请使用诸如span
或div
围绕内容的元素。这是一个例子:
<p>You'd say that in Chinese as <span lang="zh-Hans">中国科学院文献情报中心</span>.</p>
让服务器发送 HTTP Content-Language 标头中的信息。如果您的目标受众会说一种以上的语言,则 HTTP 标头允许您使用以逗号分隔的语言列表。
下面是一个 HTTP 标头示例,它声明资源是英语、印地语和旁遮普语的混合体:
Content-Language: en, hi, pa
请注意,如果您的页面是从硬盘驱动器、磁盘或其他非基于服务器的位置访问的,则此方法无效。目前还没有广泛认可的在页面内使用这种元数据的方法。
过去,许多人使用属性设置为的meta
元素。由于长期以来对该元素的混淆和不一致的实现,HTML5 规范在 HTML 中做出了这种不符合规范的做法,因此您不应再使用它。http-equiv
Content-Language
有关详细信息,请参阅以下链接: