I18n и расстояние_от_времени_в_словах_до_сейчас

Я пытаюсь сделать так, чтобы Distance_of_time_in_words_to_now работало более элегантно с i18n.

Проблема в том, что в английском можно сказать «менее минуты назад», а в японском «1分以内前» не работает. Этого перевода «назад» не должно быть в принципе, но оно должно быть через одну минуту (без пробела между символами).

Прямо сейчас я генерирую этот текст с помощью <%= "#{distance_of_time_in_words_to_now(message.created_at)} #{t(:ago, scope: 'datetime.distance_in_words')}" %>, но это неверно для разных языков, поэтому я думаю либо написать свой собственный вспомогательный метод для поддержки этой небольшой проблемы с i18n.

Однако прежде чем я это сделаю, мне интересно, есть ли уже что-то подобное в Rails 4?

Одна из причин, по которой я не хочу писать свой собственный, заключается в том, что у меня проблемы с часовыми поясами и диапазонами:

from_time = Time.zone.now
to_time = t1 + 30
range = t1..t2
range.include? Time.zone.now

возвращает ~/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.0/lib/active_support/time_with_zone.rb:368: warning: Time#succ is obsolete; use time + 1

Поэтому я считаю, что я должен делать это неправильно. Кто-нибудь знает, встроено ли это где-то в Rails 4, а если нет, есть ли какие-нибудь советы о том, как справиться с временным диапазоном?


person DaniG2k    schedule 11.09.2013    source источник
comment
Что касается последнего пункта, используйте .cover?.   -  person Mike Campbell    schedule 12.09.2013


Ответы (1)


Я решил свою проблему с помощью следующего кода, но я думаю, что было бы неплохо, чтобы i18n поддерживал его по умолчанию.

def i18n_distance_of_time_in_words_to_now_with_ago(from_time, include_seconds_or_options = {}) 
  ago = t(:ago, scope: 'datetime.distance_in_words')
  langs = [:ja]
  if langs.include? I18n.locale 
    if(from_time..from_time+60).cover? Time.zone.now
      distance_of_time_in_words_to_now(from_time, include_seconds_or_options)
    else
      space = false
    end
  else
    space = true
  end
  "#{distance_of_time_in_words_to_now(from_time, include_seconds_or_options)}#{space ? ' ' : ''}#{ago}"
end
person DaniG2k    schedule 12.09.2013