Rails distance_of_time_in_words returns "en, about_x_hours"

Steven Ou picture Steven Ou · Oct 24, 2010 · Viewed 7.1k times · Source

I'm having a weird problem, hoping someone knows what the issue is...

Using distance_of_time_in_words (and consequently time_ago_in_words) is not returning the actual time distance. Instead it is returning things like "en, about_x_hours" or "en, x_minutes".

The pattern is correct, as in:

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

But why on earth is it displaying "x" instead of the actual number, "_" instead of spaces, and "en, " at the beginning of all of that?!

Answer

BvuRVKyUVlViVIc7 picture BvuRVKyUVlViVIc7 · Oct 24, 2010

That gives back a string to translate via the I18n-gem.... Try following:

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

And add (if doesnt exist) following in

# 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"
      ....

And be sure to include following (maybe customized) data in your en.yml:

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

Please tell me if it works..