如何将日期间隔格式化为文本(国际化)
假设我有一个 DateInterval,例如“P10DT1H53S”,并且我想将其格式化为人类可读的字符串,例如:
10 days, 1 hour and 53 seconds
现在,如果您只打算使用英语,那么这相当容易。但我正在寻找一种干净且国际化的方法来做到这一点,即使用 gettext。
不幸的是, gettext 一次只能处理一个复数,而不是多个(年、日、小时等),所以我无法使用 ngettext 来实现我想要的。而且复数因语言的不同而有很大差异,因此它并不像在需要时迭代并添加“s”那么简单。另外,我必须将其作为一个整体来构建,因为我不确定每种语言都会使用逗号分隔日期、小时……(用一个“和”而不是最后一个逗号)。
Let's say I have a DateInterval, like "P10DT1H53S", and I want to format it to a human-readable string, like :
10 days, 1 hour and 53 seconds
Now, this is fairly easy if you only plan to do it for English. But I am looking for a clean and internationalized way to do that, using gettext.
Unfortunately, gettext only handles one plural at a time, not multiple (years, days, hours etc.), so I cannot use ngettext to achieve what I want. And plurals differ with languages greatly, so it's not as simple as iterating and adding "s" where needed. Also, I must build it as a whole, because I'm not sure every language would separate the days, hours, … using commas (with one "and" instead of the last comma).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最新国际化数据的最佳存储库是 CLDR 项目,由 Unicode 联盟。特定于区域设置的复数规则是数据集的一部分。
存储库数据以一组 XML 文件形式提供。有一些用于操作数据的工具,包括生成 POSIX 兼容的语言环境文件的代码。
我不确定您需要做多少工作才能在 PHP 中使用数据(不是我的专长),但从长远来看,这可能是值得的。
The best repository for up-to-date internationalization data is the CLDR project, hosted by the Unicode Consortium. Locale-specific pluralization rules are part of the data set.
The repository data is available in a bunch of XML files. There are a few tools for manipulating the data, including code to generate POSIX-compatible locale files.
I'm not sure how much work you'd need to do to use the data in PHP (not my speciality), but it would probably be worth it in the long run.
您可以多次调用 gettext,而不是只调用一次。这应该绕过复数限制。
You can use multiple calls to gettext instead of doing it only in one. This should bypass the plural restriction.