【问题标题】:Rails 3 & i18n: "Object must be a Date, DateTime or Time object" errorRails 3 & i18n:“对象必须是日期、日期时间或时间对象”错误
【发布时间】:2012-05-29 07:42:37
【问题描述】:

我正在尝试翻译我的 Rails 3 应用程序,阅读 http://guides.rubyonrails.org/i18n.html#adding-date-time-formats 的入门书,随后从 https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale(在我的情况下为 de.yml)下载了相应的 yml 文件。

在我的一个观点中,我有这个代码 (some_model#index) ...

<td><%= time_ago_in_words(some_model.created_at) %></td>

...我改变了...

&lt;td&gt;&lt;%=l time_ago_in_words(some_model.created_at) %&gt;&lt;/td&gt;.

不幸的是,这给了我这个错误:

Object must be a Date, DateTime or Time object. "etwa ein Monat" given.

知道为什么会失败吗? created_at 列已通过标准 Rails 脚手架在数据库中创建(数据库是使用 mysql2 gem 的 mysql)。

如果我从代码中删除 time_ago_in_words 助手...

&lt;td&gt;&lt;%=l some_model.created_at %&gt;&lt;/td&gt;.

...翻译有效 - 但现在的日期时间对于我的 &lt;td&gt; 来说当然太长了。

我还尝试复制de.ymldistance_in_words 部分并将其重命名为time_ago_in_words,但这也不起作用。

我是否遗漏了一些明显的东西?

【问题讨论】:

  • Err ...我...有点...困惑:写完最初的帖子后,我最终将相关代码块再次恢复为&lt;td&gt;&lt;%= time_ago_in_words(some_model.created_at) %&gt;&lt;/td&gt;,并希望得到一个在这里回答。如果没有&lt;%=l,翻译会突然起作用。 o_O

标签: ruby-on-rails-3 internationalization


【解决方案1】:

好的,这里有两种不同的方法:

  1. l 方法采用 Date、Time 或 DateTime 对象,并根据您的 I18n 规则返回格式化版本。

  2. time_ago_words 采用相同的参数并使用 I18n 输出格式化字符串。

在您的示例中,您尝试同时使用两者!简而言之,您只需要&lt;%= time_ago_in_words(some_model.created_at) %&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2011-07-14
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多