我知道这看起来微不足道,但我要说在Ruby on Rails中
document.expire_in = 7.days
如何打印到期消息的人类可读版本?
"Document will expire in #{document.expire_in}"
=> Document will expire in 7 days
可能适用于I18n.t
或I18n.l
唯一可行的方法是
7.days.inspect => " 7天"
这是唯一的方法吗?
我正在查看ActiveSupport::Duratio n并且没有看到答案
THX
答案 0 :(得分:3)
这不能回答您的具体问题,但在我看来,您最好设置过期的日期时间,然后利用distance_of_time_in_words。
如果你总是简单地说7天,为什么不把它写成硬编码的字符串?
答案 1 :(得分:2)
因此Rails中没有内置的解决方案。我决定和
一起去7.days.inspect => "7 days"
以及稍后,当项目将被翻译时,我将ActiveSupport::Duration
扩展一些有意义的内容,以便翻译这些内容
但我建议看看罗伯特对这个问题的评论。我同意在数据库中保持价值的解决方案,例如:" 7天"并从那里做的东西。喜欢翻译单位价值
document = Document.new
document.expire_in = "7 days"
document.translated_day
文档模型(或装饰器)中的
class Document < ActiveRecord::Base
#....
def translated_day
timeline = expire_in.split(' ')
"#{timeline.first} #{I18n.t("timeline.${timeline.last}")}"
end
#..
end
#config/locales/svk.yml
svk:
timeline:
days: "dni"
答案 2 :(得分:1)
下面是一个示例,展示了使用ActiveSupport::Duration#parts
duration.parts.map { |unit, n| I18n.t unit, count: n, scope: 'duration' }.to_sentence
可以与以下本地化版本配合使用:
en:
duration:
years:
one: "%{count} year"
other: "%{count} years"
months:
one: "%{count} month"
other: "%{count} months"
weeks:
one: "%{count} week"
other: "%{count} weeks"
days:
one: "%{count} day"
other: "%{count} days"
hours:
one: "%{count} hour"
other: "%{count} hours"
minutes:
one: "%{count} minute"
other: "%{count} minutes"
seconds:
one: "%{count} second"
other: "%{count} seconds"