我希望I18n.translate()或I18n.t()使用特定的语言环境,但不是I18n.locale.
我不想每次都使用I18n.t(:my_key,locale :: my_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的调用使用强制特定区域设置的额外业务逻辑.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。