【问题标题】:Parse localized DateTime before save to database in ruby or rails在保存到 ruby​​ 或 rails 中的数据库之前解析本地化的 DateTime
【发布时间】:2012-12-08 07:32:21
【问题描述】:

是否可以使用本机将本地化的 DateTime 字符串解析回正确的 DateTime Ruby 或 Rails 方法?

我在 i18n 中查看了我期望的位置,因为它包含格式和语言环境,但我找不到它。

我有一个字符串:"za 18 mei 18:05",它是荷兰语 (:nl),在英语中它是 "Sa 18 May 6:15PM"。日期格式是:"%a %d %b %H:%M"。我希望字符串解析回2012-05-08T18:12:00+01:00

有没有一种可能的方法可以从中获取 DateTime ?我有一个用于荷兰语翻译的大型语言环境文件,我无法想象我不能使用它来将格式解析回 db 格式

【问题讨论】:

  • 等等,你的语言环境是 :nl 吗?当你这样做时会发生什么:Date.today.strftime '%a %d %b %H:%M'?

标签: ruby-on-rails ruby datetime internationalization


【解决方案1】:

您需要稍微处理一下日期字符串,因为它们不是英文的。

试试这个:

nl = "vri 18 mei 18:05"
dt = DateTime.strptime(nl.gsub(/vri|mei/, 'vri' => 'Fri', 'mei' => 'May'), "%a %d %b %H:%S")

这是在将字符串发送到strptime 之前如何用“Sat”替换“za”和用“May”替换“mei”的示例方法。您可能需要想出一种更优雅的方法来替换原始字符串(例如编写帮助程序)。

使用delocalize gem

或者,也许你可以试试 gem delocalize:

I18n.locale = :nl
Delocalize::LocalizedDateTimeParser.parse("Vri 18 mei 18:02", DateTime)

确保您的config/locales 文件夹中有正确的“nl.yml”。 您可以从这里获取:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nl.yml

【讨论】:

  • 没有办法用 i18n 做到这一点吗?它包含使用的格式和翻译。我已经使用它从 DateTime 获取本地化日期,我只想将本地化版本转换回 DateTime。
【解决方案2】:

您还可以查看https://github.com/carlosantoniodasilva/i18n_alchemy,它以类似的方式进行离域化,但它的范围仅限于模型,因此它不会与视图类混淆。

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2011-06-10
    相关资源
    最近更新 更多