如何通过区域设置字符串获取日历类型

时间:2017-10-22 04:15:08

标签: php calendar internationalization locale

如您所知,ICU支持以下日历:

Japanese
Buddhist
Chinese
Persian
Indian
Islamic
Hebrew
Indian
Coptic
Ethiopic

但是IntlDateFormatter只将日历格式的格式转换为语言环境,并且不会自动转换日历,但可以向日历发送日历,它就可以完成。问题是我必须手动为每个区域设置找出日历系统。

如何从区域设置字符串中获取日历类型。例如发送fa_IR我需要获取“波斯语”,因此将其发送到IntleDateFormatter以生成该语言环境的数据字符串。

1 个答案:

答案 0 :(得分:3)

总之;你不能。为什么呢?

让我们来看看两个对象是什么: IntlDateFormatter是为执行各种区域设置感知操作而构建的国际化扩展的一部分。其中包括日期格式化程序和区域设置感知日历。

Locale class是用于获取语言,文化或区域特定行为的标识符。

即使它们是同一扩展的一部分,它们也是如here所描述的那样正交。这意味着你无法确定另一个。 ICU项目提供的用户指南进一步证明了这一说法。

  

...目前,除兼容性区域设置th_TH_TRADITIONAL和ja_JP_TRADITIONAL外,所有区域设置都默认为公历。如果"日历"提供了关键字,此值将覆盖该区域设置的默认值。

Source: User guide ICU project

由于引用声明任何区域设置默认为公历,除非"日历"提供关键字。他们无法从自动提供的语言环境中派生日历。

您的问题的解决方案很可能是在自己构建包装器时发现的。互联网上有一些软件包可以帮助你解决这个问题,但它远不是你想要的。如果您需要保存日期,请将其另存为时间戳并以用户所需的格式显示,后者是您可以自由实施某些帐户设置或类似的任何内容。

我在寻求答案时找到灵感的一个模块是GlobalizeJS。这是一个开放的open issue,描绘了一个有趣的图片,表明它是多么困难。以阿拉伯联合酋长国(AE)为例,他们有五个日历偏好; Gregorian,Islamic Um al-Qura,Islamic,Islamic Civil and Islamic Tabular。我会让用户确定他们喜欢哪个日历,以便它们最适合他们使用。

祝你好运!