混合语言页面应该使用什么<html lang="">属性值?

57

我通常使用这个:<html lang="en">

然而,我正在开发一个网站,该网站将使用两种语言,并且有时会在同一句话或标题中混合使用它们。

在这种情况下,上述代码应该如何编写?我可以使用<html lang="lang1 lang2">吗?

3个回答

79
据我从阅读HTML5规范中了解到,lang属性应为有效的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>

+1,BCP 47语言标签是什么鬼?它类似于Posix区域设置(lang_ISOCC)吗? - Alix Axel
4
BCP代表“最佳现行实践”,而BCP 47轨道是互联网工程任务组(IETF)概述其IETF语言标签的地方。您可以在此处阅读更多信息:http://en.wikipedia.org/wiki/IETF_language_tag - Jamie Dixon
6
FYI - 您提供的 w3.org 链接已经失效。我尝试找到替代品,但未能成功... 希望他们能遵循自己的建议,不要破坏他们的URI。 - Zach Lysobey
4
新链接:http://www.w3.org/TR/html5/dom.html#the-lang-and-xml:lang-attributes 它可能发生了变化,因为这是一份工作草案。@Zach L - Александр Фишер
你说得对。此外,在BCP47中提到了一系列语言(https://tools.ietf.org/html/bcp47#section-4.3),但它被定义为“多个语言标签的关联”。 - Adam
一个部分只能用一种语言的假设是不正确的。请参见https://en.wikipedia.org/wiki/Code-switching,“混合语言”是真实存在的。 - Kalabasa

8
据我了解,您可以使用<html lang="mul">来表示多种语言。请从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的支持效果不佳。

2
尽管mul的存在可能不仅对机器人产生负面影响,还可能对辅助技术产生负面影响。想象一下屏幕阅读器软件试图提供正确发音的语音时,mul可能会被处理为空值?! - Volker E.
是的,但是对于混合语言的内容,还可以使用哪些标签?如果您将多种语言的内容标记为其中一种语言,这也无法帮助辅助技术...我认为,希望如果您有混合语言的内容,您也会将其翻译成干净的“单一语言版本”,并将rel =“alternate” hreflang =“”指向它。 - user11448
最好的选择是不要这样做!使用文档中的主要语言作为根语言属性值,并在必要时进行覆盖。无论如何,您都必须使用适当的值来封装任何特定的语言部分。 - Volker E.

3

2020年4月,我提供最新的W3C(W3.org)指导意见...

首先,不,您不能使用<html lang="lang1 lang2">,因为它将无法正确验证。这是在html标签的语言属性中有多种语言(英语和斯瓦希里语)时,通过W3的Nu Html Checker进行验证的结果。这个错误会在有或没有逗号的情况下出现:

错误:元素html的属性lang的值en fr有误:语言子标记en swh不是有效的语言子标记。

<html lang="en swh">↩</html>

以下是基于W3C的最新内容在HTML中声明语言,如果您想要声明多种语言的混合语言网页的语言:

快速回答

始终在 html 标签上使用语言属性来声明页面中文本的默认语言。当页面包含其他语言的内容时,将语言属性添加到包围该内容的元素。

对于作为 HTML 服务的页面,请使用 lang 属性,对于作为 XML 服务的页面,请使用 xml:lang 属性。对于 XHTML 1.x 和 HTML5 混合文档,请同时使用两者。

使用 IANA语言子标记注册表 中的语言标记。您可以使用非官方的语言子标记查找器工具查找子标记。

使用嵌套元素来处理不同语言的内容和属性值位于同一元素上的情况。

如果元素内容和属性值位于不同的语言怎么办?

在下面这张来自W3C网站的图片中,链接文本使用目标页面的语言(西班牙语)以目标页面的语言("Español")显示,但相关的title属性包含了当前页面语言(英语中的"Spanish")的提示:

enter image description here

上述内容的标记应如下所示,其中元素继承了元素的默认设置:
<span title="Spanish"><a lang="es" href="qa-html-language-declarations.es">Español</a></span>

如果没有元素可以设置属性,怎么办?

如果您想指定一些内容的语言,但是周围没有标记,请在内容周围使用spandiv等元素。以下是一个示例:

<p>You'd say that in Chinese as <span lang="zh-Hans">中国科学院文献情报中心</span>.</p>

如何为多种受众语言指定元数据?

让服务器在HTTP Content-Language头中发送信息。如果您的目标受众使用多种语言,HTTP头允许您使用逗号分隔的语言列表。

以下是声明资源为英语、印地语和旁遮普语混合的HTTP头示例:

Content-Language: en, hi, pa

请注意,如果您的页面是从硬盘、磁盘或其他非服务器位置访问的,则此方法无效。目前还没有广泛认可的在页面内使用此类元数据的方式。
过去,许多人使用带有http-equiv属性设置为Content-Languagemeta元素。由于这种元素长期存在混淆和不一致的实现,HTML5规范使其在HTML中不符合规范,因此您不应再使用它。
请参阅以下链接以了解详细信息:

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