1

我试图让 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 的某个地方,或者如果没有,任何关于处理时间范围的好方法的提示?

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 回答