覆盖rails transper helper

Rai*_*ana 6 locale overriding ruby-on-rails rails-i18n ruby-on-rails-4

我想要I18n.translate()I18n.t()使用特定的语言环境,但不是I18n.locale.我不想I18n.t(:my_key, locale: :my_locale)每次都使用,所以如果我可以覆盖函数本身就会很棒.

我试着把它放在一个新的帮手中:

# my_helper.rb
module MyHelper
  def translate(key, options = {})
    options[:locale] = MY_LOCALE
    I18n.translate key, options
  end
  alias :t :translate
end
Run Code Online (Sandbox Code Playgroud)

这适用于"硬键" t('word'),但没有找到"动态键"的正确路径t('.title'),这应该使用我的部分路径,即de.users.form.title.

谢谢你的帮助!

Pau*_*nti 8

似乎在以下功能之间存在一些混淆:

I18n.translate不执行"懒惰查找"(即将查找键的范围限定为当前的部分,如果它以点开头),这是您期望的.这是一个特点ActionView::Helpers::TranslationHelper#translate,伴随着一些人.

你的方法是重写ActionView::Helpers::TranslationHelper#translate,没有调用super延迟加载.所以,如果你想继续覆盖这个方法,我想你可能想要:

# my_helper.rb
module MyHelper
  def translate(key, options = {})
    # If you don't want to ignore options[:locale] if it's passed in,
    # change to options[:locale] ||= MY_LOCALE
    options[:locale] = MY_LOCALE 
    super(key, options)
  end
  alias :t :translate
end
Run Code Online (Sandbox Code Playgroud)

就个人而言,我宁愿t(:my_key, locale: :my_locale)每次都在我的视图中使用而没有覆盖,或者最多只有一个单独的帮助器方法,它包含一个ActionView::Helpers::TranslationHelper#translate强制特定语言环境的额外业务逻辑的调用.