加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 覆盖rails translation helper

发布时间:2020-12-16 23:30:29 所属栏目:百科 来源:网络整理
导读:我希望I18n.translate()或I18n.t()使用特定的语言环境,但不是I18n.locale. 我不想每次都使用I18n.t(:my_key,locale :: my_locale),所以如果我可以覆盖函数本身就会很棒. 我试着把它放在一个新的帮手中: # my_helper.rbmodule MyHelper def translate(key,o
我希望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

这适用于像t(‘word’)这样的“硬键”,但没有找到像t(‘.title’)这样的“动态键”的正确路径,它应该使用我的部分路径,即de. users.form.title.

谢谢你的帮助!

解决方法

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

> I18n.translate,来自I18n宝石和
> ActionView::Helpers::TranslationHelper#translate,来自Rails

I18n.translate不执行“懒惰查找”(即将查找键限定为当前的部分,如果它以点开头),这是您期望的.这是ActionView :: Helpers :: TranslationHelper#translate的一个特性,以及some others.

你的方法重写了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

就个人而言,我宁愿每次在没有覆盖的视图中使用t(:my_key,或者最多只有一个单独的辅助方法来包装对ActionView :: Helpers :: TranslationHelper#translate的调用使用强制特定区域设置的额外业务逻辑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读