我正在使用date.toLocaleDateString(locale)
方法来获取用户的日期格式。我在服务器端获取用户的语言环境,同时使用Accept-Language标头和地理编码的IP地址(即使您不在美国,浏览器似乎默认为en-US)。但是toLocaleDateString()似乎不能识别所有语言环境,即,如果您执行date.toLocaleDateString('en-IE')
,则将获得美国日期格式,而不是欧洲日期格式。 Intl.Collator.supportedLocalesOf('en-IE', {localeMatcher: 'lookup'})
没有帮助。有浏览器支持的语言环境列表吗?
顺便说一句,我已经在OSX的Chrome和Firefox上尝试过上述操作。
是,您可以获得受支持的语言环境。
我不确定为什么Intl.Collator.supportedLocalesOf()对您不起作用,但是Intl.DateTimeFormat.supportedLocalesOf()在我的浏览器中有效,并且'DateTimeFormat'可能是查找Date.toLocaleDateString( )将支持。
const locales = ['en-IE', 'de-ID', 'en-CA'];
const options = { localeMatcher: 'lookup' };
const slo = Intl.DateTimeFormat.supportedLocalesOf( locales, options );
console.log( `Supported locales = ${slo}.` );
if (slo.length !== locales.length)
console.error( 'Some of my locales are not supported!' );
现在已经过了几年,所以除非您的语言环境比您的情况更晦涩,否则您可能再也不会在浏览器中出现此类问题(IE11除外)。>
尽管我发布了这个答案,因为对于Node来说,这仍然是一个很大的问题。在v13之前,Node的官方内部版本仅支持“ en-US”(请参见v13 changelog中的“内部”项目要点)。这咬住了我,我想它会咬住其他人。
并且要特别注意的是,语言环境支持的包含是依赖于构建的,因此,尽管从官方v13版本开始包含该语言,但语言环境数据实际上是相当大的,因此其他语言(例如Lambda或FaaS等FaaS产品Firebase函数)可能会对权衡做出不同的决定。因此,像往常一样,最好使用此功能进行测试,而不是检查您的Node版本。