我正试图让i18n更加优雅地使用distance_of_time_in_words_to_now。
问题是,在英语中,可以说“不到一分钟前”,但在日语中,“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中的某个地方内置过,或者如果没有,是否有关于处理时间范围的好方法的任何提示?
答案 0 :(得分: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