如您所知,ICU 支持以下日历:
Japanese
Buddhist
Chinese
Persian
Indian
Islamic
Hebrew
Indian
Coptic
Ethiopic
然而,IntlDateFormatter
仅将公历格式的日期转换为区域设置,不会自动转换日历,但可以将日历发送给它,并且它可以解决问题。问题是我必须为每个语言环境手动找出日历系统。
如何从语言环境字符串中获取日历类型。例如发送 fa_IR
我需要得到“波斯语”,所以将它发送到 IntleDateFormatter 以生成该语言环境的数据字符串。
最佳答案
简而言之;你不能。为什么?
让我们看看这两个对象是什么:
IntlDateFormatter
是为执行各种区域设置感知操作而构建的国际化扩展的一部分。这些操作包括日期格式化程序和区域设置感知日历。
Locale class
是用于获取语言、文化或区域特定行为的标识符。
尽管它们是同一扩展的一部分,但它们是正交的,如所述here .这意味着您无法从另一个中确定一个。 ICU 项目提供的用户指南进一步证明了这一说法。
... At present, all locales default to a Gregorian calendar, except for the compatibility locales th_TH_TRADITIONAL and ja_JP_TRADITIONAL. If the "calendar" keyword is supplied, this value will override the default for that locale.
Source: User guide ICU project
正如引文所述,任何语言环境都默认为公历,除非提供了“calendar”关键字。他们无法从自动提供的语言环境中获取日历。
您的问题的解决方案很可能是您自己构建一个包装器。互联网上有一些软件包可以帮助您解决这个问题,但它离您真正想要的还差得很远。如果您需要保存日期,请将其保存为时间戳并以用户所需的格式显示,后者是您可以自由实现某些帐户设置或类似内容的情况。
我在寻求答案时找到灵感的一个模块是 GlobalizeJS .有一个开放的open issue这描绘了一幅有趣的画面,说明做对是多么困难。以阿拉伯联合酋长国 (AE) 为例,他们有五个日历偏好;公历、伊斯兰 Um al-Qura、伊斯兰、伊斯兰民用和伊斯兰表格。我会让用户确定他们喜欢哪个日历,这样对他们来说最有用。
祝你好运!
关于php - 如何通过语言环境字符串获取日历类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46870430/