在对网站进行编码并设置日期格式时,我想使用用户在浏览器中设置的语言环境。
例如,如果用户将自己在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似乎都表明它们应该返回相同的值:
返回代表用户首选语言的字符串
要使用浏览器的默认语言环境,请忽略此参数或传递未定义的内容。
这两个调用是否都应返回用户在其浏览器设置中配置的语言环境?
答案 0 :(得分:1)
我也看到了这一点,并做了一些测试。
在Windows上出现的Chrome 85提供了两种不同的方法来设置其语言:
navigator.languages
。Intl.DateTimeFormat().resolvedOptions().locale
。我明白了:
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
反映了操作系统语言设置。不知道其他操作系统是否也是这种情况。