我想在Rails 3.1.1中的初始化文件中使用I18n.t。
这个问题已经存在于Rails 2(http://stackoverflow.com/questions/3514536/unable-to-use-i18n-t-call-in-an-initializer-file)。据说,随后的版本回答了这个问题。它似乎是Rails 3.1.1中的一个问题。
问题:
我有一个名为dxl的自定义时间格式。 我想将Email.sent_at datetime格式化为:dxl。
解决方案:
可以将格式添加到en.yml(time.formats.dxl)并将其用于:
I18n.localize(email.sent_at, :format => :dxl)
我也想表明时间。我没有看到使用I18n的方法,所以我正在使用:
email.sent_at.utc.to_s(:dxl)
擦:
为支持to_s(format)
,我认为我需要在初始化程序中指定Time::DATE_FORMATS[:dxl]
(例如config / initializers / time_formats.rb)。
我宁愿不复制en.yml和初始化程序中的strftime格式字符串。
不幸的是,看起来I18n在初始化程序中不可用。当我将它添加到config / initializers / time_formats.rb时:
Time::DATE_FORMATS[:dxl] = I18n.translate('time.formats.dxl')
我明白了:
> Time.now.utc.to_s(:dxl)
=> "translation missing: en.time.formats.dxl"
有没有办法确保I18n在初始化程序中已准备就绪(已读取en.yml文件)?
如果我将strftime格式复制/粘贴到初始化程序中,我确实验证了翻译是否正常工作。
感谢。