如何在Draper gem中使用i18n翻译方法?

时间:2011-10-19 10:28:41

标签: ruby-on-rails ruby-on-rails-3 internationalization decorator

我使用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

所以我想知道以前是否有人这样做过?它应该非常直接。

3 个答案:

答案 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;在你的布料课上。