我正在使用date.toLocaleDateString(locale)
方法来获取用户的日期格式。我在服务器端获得用户的区域设置,其中包含Accept-Language标头和地理编码的IP地址(即使您在美国境外,浏览器似乎默认为en-US)。但是toLocaleDateString()似乎并不能识别所有语言环境,即如果你date.toLocaleDateString('en-IE')
,你将获得美国日期格式而不是欧洲格式。 Intl.Collator.supportedLocalesOf('en-IE', {localeMatcher: 'lookup'})
无济于事。是否有浏览器支持的语言环境列表?
BTW我已经在OSX上的Chrome和Firefox上尝试了上述内容。
答案 0 :(得分:0)
我认为您遇到的问题是,supportedLocalesOf()仅检查语言,而不检查语言环境(换句话说,是“语言标记”的开头)。如果您指定了不支持的其他英语语言环境,则日期格式设置功能将默默地返回“ en-us”(与之相反,如果您指定其他语言,则不会引发异常)。 API的这两种怪异之处(把它轻轻地放在imo上)使得可以在不知不觉中向用户输入看起来正确但错误的日期。
问这个问题已经有好几年了(我在回答之前就开始回答-哎呀),并且在浏览器中对语言环境数据的支持现在还不错,但是语言环境数据的更改可能总是会发生。
尽管对Node来说,支持仍然很差-这最近让我很痛苦,我认为它将吸引其他人。在v13之前,Node的官方内部版本仅包含对“ en-US”的支持(请参见v13 changelog中的“内部”项目要点)。
需要特别注意的是,语言环境支持的包含取决于构建,因此,尽管正式版Node build自v13起已包含该语言,但语言环境数据实际上非常大,因此其他语言(例如Lambda等FaaS产品)或Firebase功能)可能会在权衡方面做出不同的决定。因此,通常还是最好使用此功能进行测试,而不是检查您的Node版本。