JavaScript 的标准 API 来获取运行时的默认语言环境?

JavaScript's standard API to get the runtime's default locale?

为了确定当前的语言环境,我找到了不同的方法:

  1. 在浏览器中,大多数人建议查看 HTTP headers (Accept-Language)
  2. 有人建议咨询navigator.language
  3. 在后端(Node.js)和HTTP之外,建议参考(系统依赖)process.env

另一方面,ECMAScript 国际化 API 将每个 Intl 构造函数的 locales 参数定义为可选:

If the locales argument is not provided or is undefined, the runtime's default locale is used.

因此,似乎应该有一种 browser-independent 和 OS 独立的方式来获取“运行时的默认语言环境”。

有没有比

更直接的方法来获取运行时的默认语言环境
new Intl.NumberFormat().resolvedOptions().locale

?


问题 How/Where does JavaScript detect the default locale? 不同,因为它要求 实现 检测默认语言环境(在浏览器主机中)。与此相反,我的问题不是关于实施,而是关于标准 API.

的存在

我不知道有更直接的方法,但正如您已经指出的那样,

  1. new Intl.NumberFormat().resolvedOptions().locale是一个解

  2. DefaultLocale是一个抽象操作,将来可能实现也可能不实现。

因此,我主张将此 function 填充为:

if (typeof DefaultLocale === "undefined") {
    function DefaultLocale() {
        return new Intl.NumberFormat().resolvedOptions().locale;
    }
}

因此,您的代码将合理地假定存在并调用此 function。将来某个时候,当这个 function 以标准方式实现时,您将能够通过从上面删除块来清理。

只是将其添加为一个选项,似乎并不比 Lajos 的 shim 好多少,因为我想人们需要有一个请求并解释 q(请参阅下面的 MDN 摘录)。

如果您可以获取请求的 headers,大多数浏览器会注入:

Accept-Language
    en-US,en;q=0.5

Accept-Language
    en-US,en;q=0.9,ro;q=0.8,en-GB;q=0.7

来自 MDN 文档 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language :

  • A language tag (which is sometimes referred to as a "locale identifier"). This consists of a 2-3 letter base language tag representing the language, optionally followed by additional subtags separated by '-'. The most common extra information is the country or region variant (like 'en-US' or 'fr-CA') or the type of alphabet to use (like 'sr-Latn'). Other variants like the type of orthography ('de-DE-1996') are usually not used in the context of this header.

  • Any language; '*' is used as a wildcard.

  • ;q= (q-factor weighting) Any value placed in an order of preference expressed using a relative quality value called weight.

按照我的理解,如果有的话,应该优先考虑权重最高的 (q-value)