浏览器默认语言环境-Intl.DateTimeFormat与navigator.language

时间:2019-08-26 23:44:57

标签: javascript browser localization locale

在对网站进行编码并设置日期格式时,我想使用用户在浏览器中设置的语言环境。

例如,如果用户将自己在Chrome中的chrome://settings/languages设置自定义为非默认设置,那就是我要使用的值。

但是,当我在这样的浏览器的控制台中运行以下代码时,会得到两个不同的值。

 [window.navigator.language, new Intl.DateTimeFormat().resolvedOptions().locale]
// Array [ "en-AU", "en-US" ]

navigator.language给了我期望的值,但是new Intl.DateTimeFormat().resolvedOptions().locale没有给我。

(对我而言)两个项目的MDN似乎都表明它们应该返回相同的值:

这两个调用是否都应返回用户在其浏览器设置中配置的语言环境?

2 个答案:

答案 0 :(得分:1)

我也看到了这一点,并做了一些测试。

Chrome

在Windows上出现的Chrome 85提供了两种不同的方法来设置其语言:

  1. 按偏好顺序排列的语言列表。这似乎可以驱动navigator.languages
  2. 用于“显示Google Chrome浏览器用户界面”的语言。这似乎可以驱动Intl.DateTimeFormat().resolvedOptions().locale

例如,当我有此设置时: Google Chrome language settings

我明白了:

navigator.languages                            : en-US, en-GB, en
navigator.language                             : en-US
Intl.DateTimeFormat().resolvedOptions().locale : en-GB

请注意,在装有Chrome 85的Mac上,似乎没有这两个单独的设置,而只是可以设置语言顺序(不是用于设置语言以“显示Google Chrome用户界面”的选项)。 / p>

节点

在Node中,我发现Intl.DateTimeFormat().resolvedOptions().locale的值是由操作系统的语言设置驱动的。请注意,我仅在Windows上进行了测试,但是我认为在其他地方也是如此。

关于时区的注释

我看到,对于Intl.DateTimeFormat().resolvedOptions().timeZone,Chrome和Node均使用时区的OS设置(也仅在Windows上进行了测试)。 Chrome在其设置中似乎没有针对时区的自己的设置,所以我想只能使用操作系统配置。

答案 1 :(得分:1)

我使用的是 macOS,发现 Chrome 的 navigator.languages 反映了浏览器语言设置,而 Intl.DateTimeFormat().resolvedOptions().locale 反映了操作系统语言设置。不知道其他操作系统是否也是这种情况。