如何在JavaScript中使用“最适合”的语言环境?

时间:2019-03-10 16:33:25

标签: javascript localization internationalization

到目前为止,我对问题的理解:

我正在阅读this MDN document,其中说:

  

除去所有Unicode扩展名后,locales参数被解释为来自应用程序的优先请求。运行时将其与可用的语言环境进行比较,并选择最佳的可用语言环境。存在两种匹配算法:“查找”匹配器遵循BCP 47中指定的查找算法; “最佳匹配”匹配器使运行时提供的语言环境比Lookup算法的结果至少(但可能更多)适合于请求。如果应用程序不提供语言环境参数,或者运行时没有与请求匹配的语言环境,则使用运行时的默认语言环境。可以使用options参数的属性选择匹配器(见下文)。

当我阅读本文时,似乎可以以相同的方式使用“查找”和“最适合”,有时会得到不同的结果。

但是

我可以做到:

new Intl.DateTimeFormat('lookup', options).format(date)

但不是:

new Intl.DateTimeFormat('best fit', options).format(date)

我使用的是最新版本的Firefox(在Ubuntu上为65.0.1 64位),并且就我所知,Firefox在此问题上没有任何未解决的错误,但是当我使用Firefox时会遇到RangeError 'best fit'

剩余问题:

我应该能够将'best fit'用作语言环境参数,还是只能将其用作localeMatcher参数中的options?如果我只能在'best fit'内使用options,那么当存在locale时需要locale时,我应该将options指定为什么?

还是应该只在Bugzilla中打开票证?

1 个答案:

答案 0 :(得分:1)

在您的第一个示例中,字符串被传递到Intl.DateTimeFormat,因此它会出现正常工作。但是,它所做的只是将字符串识别为有效的语言环境,然后使用默认语言。

第二个示例不起作用,因为该字符串未按照BCP 47进行格式化。

您误解了API文档。这个:

  

locales参数必须是使用BCP 47语言的字符串   标签或此类语言标签的数组。如果locales参数不是   提供或未定义,则使用运行时的默认语言环境。

清楚地表明第一个参数应该是一个字符串或(一个字符串数组),它是语言环境标识符。

然后这个:

  

options参数必须是具有不同属性的对象   在构造函数和函数之间。

因此您对的呼叫应如下所示:

new Intl.DateTimeFormat([],{localeMatcher: "best fit"}).format(date)