为了确定当前的语言环境,我找到了不同的方法:
Accept-Language
)navigator.language
process.env
另一方面,ECMAScript国际化API将locales
构造函数的Intl
参数定义为可选:
如果未提供
locales
参数或未定义参数,则运行时的 使用默认语言环境。
因此,似乎应该有一种独立于浏览器和操作系统的方式来获取“运行时的默认语言环境”。
与运行时的默认语言环境相比,是否有更直接的方法
new Intl.NumberFormat().resolvedOptions().locale
?
问题How/Where does JavaScript detect the default locale?有所不同,因为它要求检测默认语言环境(在浏览器主机中)的实现。与此相反,我的问题不是关于实现,而是关于标准API是否存在。
答案 0 :(得分:4)
我不知道有更直接的方法,但正如您已经指出的那样,
new Intl.NumberFormat().resolvedOptions().locale
是一个解决方案
DefaultLocale
是一个抽象操作,将来可能会也可能不会实现。
因此,我认为将这个 function
填充为:
if (typeof DefaultLocale === "undefined") {
function DefaultLocale() {
return new Intl.NumberFormat().resolvedOptions().locale;
}
}
因此,您的代码将合理地假设存在并调用此 function
。在未来的某个时候,当以标准方式实现此 function
时,您将能够通过从上方移除块来进行清理。
答案 1 :(得分:1)
仅将其添加为选项,似乎并不比来自 Lajos 的 shim 好多少,因为我猜需要一个请求并解释 q(请参阅下面的 MDN 摘录)。
如果您可以获取请求的标头,大多数浏览器都会注入:
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 :
<块引用>语言标记(有时称为“区域设置标识符”)。这包括一个 2-3 个字母的基本语言标签 表示语言,可选后跟附加子标签 以“-”分隔。最常见的额外信息是国家或地区 地区变体(如“en-US”或“fr-CA”)或字母类型 使用(如'sr-Latn')。其他变体,如正字法类型 ('de-DE-1996') 通常不用于此标头的上下文中。
任何语言; “*”用作通配符。
;q= (q-factor weighting) 任何按偏好顺序排列的值,使用称为权重的相对质量值表示。
根据我的理解,如果有的话,应该优先考虑最高的权重(q 值)