我使用Draper gem来装饰我的模型。在这里,我有非常经典的设置:
# app/decorators/subject_decorator.rb
class SubjectDecorator < ApplicationDecorator
decorates :subject
def edit_link
h.link_to(h.t('.edit'), '#')
end
end
我使用i18n进行国际化。但当我运行时,我得到:
Cannot use t(".edit") shortcut because path is not available
所以我想知道以前是否有人这样做过?它应该非常直接。
答案 0 :(得分:7)
问题是你无法利用装饰器中的lazy lookup因为它们没有任何上下文来确定视图文件级别(索引,显示,编辑等)。所以开箱即用你只需拼出像t('subjects.show.edit')
或其他任何东西。
这就是我为了让它有点适合我而做的事情。
class ApplicationDecorator < Draper::Base
def translate(key, options={})
if key.to_s[0] == '.'
key = model_class.to_s.downcase.pluralize + key
end
I18n.translate(key, options)
end
alias :t :translate
end
这不会为您提供完整的subjects.show.edit
参考,您只需获得subjects.edit
但对我来说似乎总比没有好。
答案 1 :(得分:6)
在您的代码中,您必须使用:
I18n.t('mylabelkey')
试一试......它应该可行
答案 2 :(得分:2)
您所要做的就是将它添加到装饰器类的顶部......
include Draper::LazyHelpers
...它处理许多最常见的帮助方法,包括i18n的东西。你也可以放弃写所有这些&#34; h&#34;&#34;在你的布料课上。