通过JavaScript获取Chrome浏览器当前活动语言(Chrome 66稳定版)

4
我正在使用Chrome并尝试检测当前所使用的语言。
window.navigator.language返回一种语言。
window.navigator.languages返回在Chrome中添加的所有语言。
在整个互联网上,我被告知window.navigator.language可以找到“活动”语言。然而,这不再是事实。它只返回列表中的第一个语言,例如en-US,但正如您所看到的,不能保证它是活动语言,我怀疑是因为新设计的缘故。我想知道是否有人已经找到了更现代的Chrome的解决方案。
也就是说,根据我的偏好,我没有获得任何区分活动语言的信息。

enter image description here

注:我还向我的服务器发送了一个请求并检查了标题,与上面给出的信息相同。 在这里输入图像说明

accept-language: en-AU,en-GB;q=0.9,en-US;q=0.8,en;q=0.7,es-ES;q=0.6,es;q=0.5

这只是首选语言显示顺序的反映,无法告诉我哪种语言是活动语言,哪种不是。
无论活动浏览器语言是en-GB还是es-ES,相同的标题信息都会以相同的权重给出。

那么你的意思是用于浏览器菜单的语言,对此你为什么关心呢? - Kaiido
请注意,此“显示语言”选项似乎仅适用于Windows用户,在Linux和Mac上它使用系统语言,没有更改选项...(基于https://support.google.com/chrome/answer/173424?hl=en&vid=0-56587123991-1526629005067&visit_id=1-636622258613266368-2151817906&rd=1) - Kaiido
1
触发语言翻译库。恕我直言,我需要某些东西的原因并不重要,对吧? - BenniMcBeno
重要的是因为根据需求我们可以找到替代方案。同时这也能够确定我们是否面临着 XY问题。我仍然不明白为什么您的语言翻译库不能简单地尊重用户的设置。 - Kaiido
1个回答

0

如果你想要将语言放在第一位,那么可以使用以下代码:

 var browserLanguage = navigator.language || navigator.userLanguage; 

在最新版本的Chrome中,这对我有效: 输入图像描述

如果您想要显示的语言,那就是另一回事了:

Javascript可以看到的是HttpRequest头。 例如:

Accept-language httprequest header

您可以看到一个名为Accept-Language的字段,它告诉服务器您想要查看哪些语言。 RFC 7231 5.3.1.

请注意,一些接收者将语言标签列出的顺序视为降序优先级的指示,特别是对于分配相等质量值(没有值与q = 1相同)的标签。但是,不能依赖此行为。为了保持一致性并最大限度地提高互操作性,许多用户代理为每个语言标签分配唯一的质量值,同时按降序列出它们。有关语言优先级列表的其他讨论,请参见[RFC4647]第2.3节。

这意味着浏览器将为每个标签添加权重,然后按降序排序(没有q就是q = 1,所以是最大值)。

因此,您无法看到显示的语言是正常的,因为这些是您个人的浏览器设置。移动设备上的应用程序可以访问浏览器设置,但常规网站无法访问。


嗨JoaVer,进入语言设置,选择列表中不是第一个的语言作为“Google Chrome显示的语言”,然后再次运行它。它只会返回0号索引处的内容。 - BenniMcBeno
感谢您更新您的答案。我之前看过这个标题的示例。我也曾经检查过标题信息,但是我没有提供这个权重。您是如何获取这些信息的?那个快照是从什么上下文中获得的? - BenniMcBeno
这是一个在网上找到的示例,但在Chrome中打开检查器(ctrl+shift+i)==>网络==>然后重新加载页面以便捕获您的请求==>然后单击类型为文档的行,标题将出现在右侧。 - JoaVer

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