获取Chrome当前语言环境

21

我正在使用这个API确定浏览器的当前语言环境:

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

在IE中返回"fr-FR",但在Chrome中只返回"fr"(其他语言环境类似)。

是否有其他API也可以在Chrome中返回"fr-FR"

我们依赖此功能来加载相应的区域文件。


只是作为一个提示,如果你计划依靠这些信息来确定用户的本地设置,我不建议这样做。大多数用户从未更改过此设置,因此它可能会找到默认值en-US - emerson.marini
请在此帖子上回答:https://dev59.com/j3NA5IYBdhLWcg3wPLL- - Mudaser Ali
这个回答解决了你的问题吗?在浏览器中确定用户区域设置的最佳方法 - Penny Liu
2个回答

23

更新:

截至2021年9月,Chrome对Intl库的支持已经相当广泛。

function getClientLocale() {
  if (typeof Intl !== 'undefined') {
    try {
      return Intl.NumberFormat().resolvedOptions().locale;
    } catch (err) {
      console.error("Cannot get locale from Intl")
    }
  }
}
否则,您可以返回到window.navigator对象: Firefox和Chrome在navigator对象上有一个languages数组。通常,该数组中的第一个元素是用户选择的区域设置(通常继承自操作系统设置)。
var language;
if (window.navigator.languages) {
    language = window.navigator.languages[0];
} else {
    language = window.navigator.userLanguage || window.navigator.language;
}

对于我在Chrome浏览器中的navigator.languages数组为["en-GB", "en-US", "en"],而navigator.language = "en-US",虽然略有区别但是很重要。


5
这个问题不仅仅是关于获取语言,而是关于获取区域设置。区域设置包含比语言更多的信息(最重要的是日期时间和数字格式设置)。 - exhuma
@exhuma,也许是这样,但显然OP问的是locale字符串。 - Eliran Malka
@exhuma,你不需要传递整个区域设置包。只需传递区域设置ID,通常是Unicode格式的(例如en-GB)。请参阅W3文档:https://www.w3.org/TR/ltli/#locale和MDN的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale。要使用它,您可以将该ID传递给不同对象的`.toLocaleString()`方法,例如`Date`。 - Aidin
其他 Intl 构造函数也可以使用,例如 Intl.DateTimeFormat().resolvedOptions().localeIntl.Collator().resolvedOptions().locale - mrienstra
1
在澳大利亚,getClientLocale() 返回 'en-US'。而 navigator.version 返回 'en-AU'。 - nevf
在同一台机器上,在Chrome浏览器中,getClientLocale()返回'en-US',而在Firefox浏览器中返回'en-CA'。 - undefined

5
在最新版本的Chrome浏览器中,
var language = window.navigator.userLanguage || window.navigator.language; 返回 'fr-FR'。
如果您仍然遇到相同的问题,请尝试 var language = navigator.language;

1
这将严格返回用户语言,但不是他们的区域设置。例如,我有一个浏览器设置,其中所有上述内容都返回de-DE,而Intl.DateTimeFormat().resolvedOptions().locale返回en-US。所以,很抱歉,但这个答案对OP的问题没有帮助。 - Philzen

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