我如何使用;“最佳匹配”;JavaScript中的语言环境? 到目前为止,我对这个问题的理解是:

我如何使用;“最佳匹配”;JavaScript中的语言环境? 到目前为止,我对这个问题的理解是:,javascript,localization,internationalization,Javascript,Localization,Internationalization,我在读一本书,上面写着: 去掉所有Unicode扩展后,locales参数被解释为来自应用程序的优先请求。运行时将其与可用的区域设置进行比较,并选择可用的最佳区域设置。存在两种匹配算法:“查找”匹配器遵循BCP 47中指定的查找算法;“最佳匹配”匹配器使运行时提供的区域设置至少比查找算法的结果更适合请求。如果应用程序不提供locales参数,或者运行时没有与请求匹配的区域设置,则使用运行时的默认区域设置。可以使用options参数的属性选择匹配器(请参见下文) 当我读到这篇文章时,我似乎可以用同

我在读一本书,上面写着:

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

当我读到这篇文章时,我似乎可以用同样的方式使用“查找”和“最佳拟合”,有时会得到不同的结果

然而 我可以做到:

new Intl.DateTimeFormat('lookup', options).format(date)
但不是:

new Intl.DateTimeFormat('best fit', options).format(date)
我使用的是最新版本的Firefox(Ubuntu上为65.0.1 64位),据我所知,Firefox在这个问题上没有任何漏洞,但当我使用
“最佳匹配”
时,我得到了一个范围错误

剩余问题: 我应该能够将
'best fit'
作为locale参数,还是只能将其作为
选项
参数中的
localeMatcher
使用?如果我只能在
选项中使用
'best fit'
,那么如果存在
选项
时需要
区域设置
,我应该指定什么作为
区域设置


还是我应该在Bugzilla开一张票

在第一个示例中,一个字符串被传递到
Intl.DateTimeFormat
,因此它似乎可以工作。但它所做的只是不将字符串识别为有效的区域设置,然后使用默认值

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

您误解了API文档。这:

locales参数必须是包含BCP 47语言的字符串 标记,或此类语言标记的数组。如果locales参数不是 如果提供或未定义,则使用运行时的默认区域设置

明确指出第一个参数应该是字符串或(字符串数组),它是/是区域设置标识符

那么这个,

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

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

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

在第一个示例中,一个字符串被传递到
Intl.DateTimeFormat
,因此它似乎可以工作。但它所做的只是不将字符串识别为有效的区域设置,然后使用默认值

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

您误解了API文档。这:

locales参数必须是包含BCP 47语言的字符串 标记,或此类语言标记的数组。如果locales参数不是 如果提供或未定义,则使用运行时的默认区域设置

明确指出第一个参数应该是字符串或(字符串数组),它是/是区域设置标识符

那么这个,

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

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

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

参考:剩下的问题你错过了这部分吗?locales参数必须是包含BCP 47语言标记的字符串,或者是此类语言标记的数组。如果未提供或未定义locales参数,则使用运行时的默认区域设置。此:
new Intl.DateTimeFormat([],{localeMatcher:“best fit”})。format(date)
在FF 65.0中运行良好。1@RandyCasburn哦,天哪,谢谢。我应该仔细看看。所以我猜“查找”是一个语言标签?很好。国际化是一个棘手的话题。no-lookup只是一个满足格式要求的字符串。但是找不到,所以返回默认值。参考:剩下的问题您是否错过了这一部分?locales参数必须是包含BCP 47语言标记的字符串,或者是此类语言标记的数组。如果未提供或未定义locales参数,则使用运行时的默认区域设置。此:
new Intl.DateTimeFormat([],{localeMatcher:“best fit”})。format(date)
在FF 65.0中运行良好。1@RandyCasburn哦,天哪,谢谢。我应该仔细看看。所以我猜“查找”是一个语言标签?很好。国际化是一个棘手的话题。no-lookup只是一个满足格式要求的字符串。但找不到,因此返回默认值。