Rails distance_of_time_in_words返回“en,about_x_hours”

时间:2010-10-24 03:40:16

标签: ruby-on-rails ruby time actionview

我遇到了一个奇怪的问题,希望有人知道问题是什么......

使用distance_of_time_in_words(以及因此time_ago_in_words)不返回实际时间距离。相反,它返回的内容如“en,about_x_hours”或“en,x_minutes”。

模式是正确的,如:

time_ago_in_words(50.minutes.ago) => "en, about_x_hours"
time_ago_in_words(3.minutes.ago) => "en, x_minutes"

但是,为什么它在显示“x”而不是实际数字,“_”而不是空格,以及“en”,在所有这些的开头?!

3 个答案:

答案 0 :(得分:9)

通过I18n-gem返回一个字符串进行翻译....尝试以下内容:

# I18n.localize(string)
I18n.l time_ago_in_words(3.minutes.ago)

中添加(如果不存在)
# config/locales/en.yml
en:
  datetime:
    distance_in_words:
      ...
      less_than_x_minutes:
        one: "less than a minute"
        other: "less than %{count} minutes"
      x_minutes:
        one: "1 minute"
        other: "%{count} minutes"
      about_x_hours:
        one: "about 1 hour"
        other: "about %{count} hours"
      ....

请确保在您的en.yml中包含以下(可能是自定义的)数据:

http://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml

请告诉我它是否有效..

答案 1 :(得分:3)

所以我终于开始工作了!!希望这有助于任何可能遇到同样问题的人......

基本上Lichtamberg首先说的一半是正确的。 en.yml必须如下:

en:
  x_minutes:
    one:   "1 minute"
    other: "%{count} minutes"

请注意,x_minutes不在datetime下,而是oneother。此外,由于I18n已在I18n.l方法中实现,因此不需要distance_of_time_in_words

所以使用上面的内容(加上你可以在Lichtamberg文件中找到的所有其他about_x_hours,x_days等模式),只需这样做:

time_ago_in_words(3.minutes.ago)

而且......瞧!

答案 2 :(得分:0)

无耻地扯掉time_ago_in_words => "in {{count}} days."?

Rails在帮助程序中使用了一些弃用的语法,然后在最新的Ruby版本中删除了。如果您使用的是Heroku,请尝试告诉您的生产实例使用Rails 2.3.9。否则你也可以尝试降级Ruby。

请参阅更改日志:http://weblog.rubyonrails.org/2010/9/4/ruby-on-rails-2-3-9-released

Changes i18n named-interpolation syntax from the deprecated Hello {{name}} to the 1.9-native Hello %{name}.