JavaScript 的标准 API 来获取运行时的默认语言环境?
JavaScript's standard API to get the runtime's default locale?
为了确定当前的语言环境,我找到了不同的方法:
- 在浏览器中,大多数人建议查看 HTTP headers (
Accept-Language
)
- 有人建议咨询
navigator.language
- 在后端(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.
的存在
我不知道有更直接的方法,但正如您已经指出的那样,
new Intl.NumberFormat().resolvedOptions().locale
是一个解
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)
为了确定当前的语言环境,我找到了不同的方法:
- 在浏览器中,大多数人建议查看 HTTP headers (
Accept-Language
) - 有人建议咨询
navigator.language
- 在后端(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.
的存在我不知道有更直接的方法,但正如您已经指出的那样,
new Intl.NumberFormat().resolvedOptions().locale
是一个解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)