4

根据 ruby​​ docstranslate(or t) helper 委托I18n#translate但还执行几个附加功能,其中包括:“如果密钥具有后缀,它会将翻译标记为安全 HTML _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 中测试)

4

1 回答 1

4

鉴于重载.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,后一个选项可能会有点混乱。

于 2013-06-29T09:12:30.327 回答