【问题标题】:How to extend the I18n.translate method in rails?如何在 Rails 中扩展 I18n.translate 方法?
【发布时间】:2011-07-15 11:07:50
【问题描述】:

现在,如果我的应用中有一些代码,例如

<%= t :test %>

并且没有可用于 :test 的翻译我认为我得到了类似的东西:

<span class="translation_missing" title="translation missing: en.test">Test</span>

我想补充的是,即使是现有的翻译也包括一个类似的跨度,所以如果翻译存在,我想得到类似的东西:

<span class="translation_existing" title="translation existing: en.test">Translated string</span>

注意跨度中不同的类名。并且字符串应该被真正翻译。

如何通过覆盖 translate 方法来实现此结果?

提前谢谢你

格纳诺

【问题讨论】:

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


    【解决方案1】:

    "t" 是一个视图助手: http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-i-t

    查看其源代码并创建自己的源代码很容易,您还可以通过在 ApplicationHelper 中重新定义它来覆盖帮助器。

    但是恕我直言,您不应该重新定义它,而是使用不同的名称创建您自己的。在很多情况下,如果您插入额外的 HTML 标记,您会想在部分视图中使用“t”帮助程序(即:我在页面部分使用“t”帮助程序来翻译标题、元标记等)...

    【讨论】:

      【解决方案2】:

      我创建了一个覆盖“t”方法的助手,它只是“翻译”的快捷方式:

      def t(*a)           # I don't care what params go in
        key = a.first     # just want to override behaviour based on the key
      
        #if my overrides contain the key
        if value = @i18n_overrides["#{I18n.locale}.#{key}"] 
          return value # return the overrided value
        end
      
        translate(*a) # otherwise letting i18n do its thing
      end
      

      更干净的方法是这些,但它们对我不起作用:

      尝试使用别名,但意识到 ttranslate 在类主体执行时该范围内不存在。

      尝试调用ActionView::Helpers::TranslationHelper.translate 而不是只调用translate,但这也不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        • 2016-02-13
        • 2013-10-24
        • 2012-03-10
        • 1970-01-01
        相关资源
        最近更新 更多