Rails distance_of_time_in_words возвращает "en, about_x_hours" - PullRequest
7 голосов
/ 24 октября 2010

У меня странная проблема, надеюсь, кто-то знает, в чем проблема ...

Использование 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 ]

9 голосов
/ 24 октября 2010

Это возвращает строку для перевода через 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

Скажите, пожалуйста, работает ли это ...

3 голосов
/ 28 октября 2010

Так что я наконец-то получил его на работу !!Надеюсь, это поможет любому, у кого может быть такая же проблема ...

В целом половина того, что Лихтамберг впервые сказал, была правильной.En.yml должен был выглядеть следующим образом:

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

Обратите внимание, что x_minutes не соответствует datetime и что он имеет one и other.Кроме того, I18n.l не требуется, поскольку I18n уже реализован в методе distance_of_time_in_words.

Итак, с вышеописанным (плюс все остальные шаблоны about_x_hours, x_days и т. Д., Которые вы можете найти в файле, включенном в Lichtamberg), просто выполните:

time_ago_in_words(3.minutes.ago)

И ... вуаля!

0 голосов
/ 15 января 2011

Бесстыдно сорвал time_ago_in_words => "через {{count}} дней."?

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}.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...