php - 如何通过语言环境字符串获取日历类型

标签 php calendar internationalization locale

如您所知,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/

相关文章:

java - 时间与日期与日历java

java - 从 Android 上的 Google 日历获取 Activity

java - Android get Day of week from date 为一周中的同一天返回不同的值

php - Laravel 5.2 Eloquent 地在同一 id 上保存自动增量 pgsql 异常

php - 在火柴臂中使用闭合

php - Yii 框架中错误的返回 url

java - 典型的java i18n流程——将资源文件发送给翻译公司进行翻译

php - 更改不同页面的标题 Logo

winforms - 禁用数字替换

typescript 中的 Angular 2 和 i18n