【问题标题】:Rails I18n _html suffix rule and translate helper called from a controllerRails I18n _html 后缀规则和从控制器调用的翻译助手
【发布时间】:2013-06-28 23:49:06
【问题描述】:

根据 ruby​​ docstranslate(或t)助手委托给I18n#translate,但还执行几个附加功能,其中包括:有后缀_html"。

我希望它应该在视图和控制器中同样工作,但根据我的经验,它不会:t(:hello_html) 在视图中确实可以正常工作(将翻译标记为 html_safe),但它没有标记从控制器调用时,结果是安全的 html。

要重现该问题,您可以将 hello_html: '<i>Hello world</i>' 添加到您的 locales/en.ymlflash.now[:notice] = t(:hello_html) 到任何控制器的任何方便操作中。对我来说,这导致在 Flash 消息区域中出现转义的 html 标记,这对我来说是一个意外的结果。

我的问题是:

  1. 还有其他人经历过或能够重现此问题吗?
  2. 它是什么:rails 错误、功能或只是我的项目独特的“奇怪”?
  3. 有什么简单的方法可以解决这个问题吗?

(在轨道 3.2.11 和 3.2.13 中测试)

【问题讨论】:

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


    【解决方案1】:

    鉴于重载的.t 方法在ActionView::Helpers::TranslationHelper 中定义,您认为控制器无法使用此功能是正确的。我认为这可能是一个疏忽,而不是一个实际的错误。

    在我看来,有两种方法可以在你的项目中解决这个问题:

    1. 在您的控制器中调用.html_safe(这在快速测试中对我有用)。

      flash[:notice] = t(:hello_html).html_safe

    2. 将翻译密钥作为 flash 消息而不是实际消息发送:

      控制器:

      flash[:translate_notice] = :hello_html

      查看:

      %div= t flash[:translate_notice]

    当然,如果您需要通过插值 YMMV,后一个选项可能会有点混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2011-06-10
      相关资源
      最近更新 更多