<html lang =“en”>和<html lang =“en-US”>有什么区别?

<html lang="en"><html lang="en-US">什么区别? 还有什么其他的值可以跟随破折号?

据w3.org称: “任何两个字母的子码都被理解为一个[ISO3166]国家代码。” 那么这是否意味着在alpha-2代码下列出的任何值都是可接受的值?

<html lang="en">
<html lang="en-US">

第一个lang标签只指定一个语言代码。 第二个指定一个语言代码,后面跟一个国家代码。

还有什么其他的值可以跟随破折号? 据w3.org称: “任何两个字母的子码都被理解为一个[ISO3166]国家代码。” 那么这是否意味着在alpha-2代码下列出的任何值都是可接受的值?

是的,但是价值可能有或没有任何实际意义。

<html lang="en-US">本质上来说,“这个页面是美式的英语”。 以类似的方式, <html lang="en-GB">意味着“这个页面是英国式的英语风格”。

如果你真的想指定一个无效的组合,你可以。 这并不意味着什么,但根据我的理解, <html lang="en-ES">是有效的。 但是,由于英语在西class牙不常用,因此这种语言/国家的组合不会有太大的作用。

我的意思是这种方式进一步帮助浏览器显示页面?

它并不能帮助浏览器显示页面,但对于search引擎,屏幕阅读器以及其他可能读取并尝试解释页面的内容(除了人类之外)非常有用。

IETF对语言标签的“最佳实践”在BCP 47 (RFC 5646和RFC 4647)中进行了定义。 我build议给予阅读,因为它解释了更多关于语言标签的内容,比你想象的还要多。 🙂

它指的是IANA 语言子 标签和语言标签扩展registry。

您可以使用任何国家/地区代码,但是这并不意味着浏览器或其他软件会识别它,或者因为它而做任何不同的事情。 例如,如果屏幕阅读器只支持英文的美式口音,则可能与“en-US”和“en-GB”相同。 另一个有两种不同声音的软件可以根据国家代码进行调整。

RFC 3066给出了允许值的细节(重点和链接):

所有2个字母的子标签都被解释为来自[ISO 3166]的 ISO 3166 alpha-2国家代码 ,或随后由ISO 3166维护机构或主pipe标准化机构指定,表示该语言版本所涉及的区域。

我将其解释为任何有效的(根据ISO 3166)双字母代码作为子标签是有效的。 RFC继续指出:

具有3至8个字母的第二个子标签的标签可以根据本文件第5章中的规则向IANA注册。

顺便说一句,这看起来像一个错字,因为第3章似乎涉及注册过程,而不是第5章。

对IANAregistry的快速search显示了所有可用的语言子标签的长的列表 。 下面是列表中的一个例子(将用作en-scouse ):

types:变体

Subtag:scouse

说明:Scouse

join:2006-09-18

前缀:en

评论:英语的利普德语方言被称为“Scouse”

各种各样的子标签可用; 一个快速滚动已经显示fr-1694acad (17世纪的法国)。


当涉及到浏览器中显示的文档时,其中一些标签(我会说绝大多数标签)的用处是有限的。 W3C国际化规范简单地陈述:

浏览器和其他应用程序可以使用有关内容语言的信息来向用户交付最适当的信息,或以最适当的方式向用户呈现信息。 正确标记和标记的内容越多,这些应用程序就越有用和普及。

我很努力地find有关浏览器遇到不同语言标记时的行为的详细信息,但是它们很可能会为使用屏幕阅读器的用户提供一些好处,这些用户可以使用标记来确定语言/方言/口音在其中呈现内容。

这应该有所帮助: http : //www.w3.org/International/articles/language-tags/

创build语言标签的黄金法则是保持标签尽可能短。 避免使用区域,脚本或其他子标签,除非添加有用的区分信息。 例如,用日文而不是日文,除非有特别的理由说日本人应该说日语而不是其他地方。

下面的列表显示了可用的各种types的子标签。 我们将通过这些方法来解决这些问题,以及如何在后面的章节中使用它们。

语言extlang脚本区域变波及privateuse

那么,第一个问题很简单。 有很多英文(英文),但是(大部分)只有一个美国英文。 人们会猜测有en-CNen-GBen-AU 。 猜猜甚至可能会有奥地利英语,但是这是更多的是你可以比是的。