1

distance_of_time_in_words_to_now を i18n でもう少しエレガントに動作させようとしています。

問題は、英語では「less than a minutes ago」と言っても問題ありませんが、日本語では「1 分以内 前」が機能しないことです。その「前」の翻訳は基本的にそこにあるべきではありませんが、1 分後にはあるはずです (文字間にスペースはありません)。

現在、そのテキストを生成していますが<%= "#{distance_of_time_in_words_to_now(message.created_at)} #{t(:ago, scope: 'datetime.distance_in_words')}" %>、これは異なるロケールでは正しくないため、このわずかな i18n の問題をサポートする独自のヘルパー メソッドを作成することを考えています。

ただし、そうする前に、Rails 4 にこのようなものが既に含まれているのではないかと考えています。

私が自分自身を書きたがらない理由の 1 つは、タイム ゾーンと範囲に問題があるためです。

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のどこかにすでに組み込まれているかどうか、またはそうでない場合は、時間範囲に対処するためのヒントはありますか?

4

1 に答える 1

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
于 2013-09-12T11:15:08.480 に答える