Rails 3:在i18n中使用HTML形式帮助翻译

Jer*_*ker 10 ruby-on-rails internationalization html-safe

我正在使用自动表单标签帮助程序来创建我的表单标签并通过i18n支持将它们翻译,但是,我想在标签中包含HTML,而我无法弄清楚如何使HTML安全.

例如:

en:
  helpers:
    label:
      product:
        name: 'Your Product Name <small>Try to be creative</small>'
Run Code Online (Sandbox Code Playgroud)

结束为:

<label for="product_name">Your Product Name &lt;Try to be creative&gt;</label>
Run Code Online (Sandbox Code Playgroud)

但我希望它是:

<label for="product_name">Your Product Name <small>Try to be creative</small></label>
Run Code Online (Sandbox Code Playgroud)

有没有办法让我将翻译指定为html_safe,以便在输出之前不进行编码?

此外,这似乎是HTML设置的最具语义的方式,但如果我完全以错误的方式接近这一点,我愿意接受建议.

谢谢 :)

更新:

<%= form_for @product do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

chr*_*mcg 15

在rails3中自动生成普通密钥html的方法是将_html或.html附加到密钥名称.例如name_html.这只能通过视图中的translate/t方法工作,即不能通过I18n.t这无论如何都不会在这里工作,因为标准表单助手不会尝试该键的版本.

创建自己的表单构建器是建议的方法.你也可以这样做

f.label :name, t('helpers.label.product.name_html')
Run Code Online (Sandbox Code Playgroud)

如果这只发生在几个地方.


Pet*_*ong 12

不知道你的实际助手是怎样的,但你可以html_safe轻松地这样做(前提是你的标签价值不会被其他用户输入).

就像是: t("helpers.label.product.name").html_safe

如果这不起作用,请给出辅助方法的实现,或仅输出结果的行.

======更新======

感谢您更新的代码,现在我知道什么是最好的答案:D

如果你真的想要,我也不知道helpers.label.product.name.

但是我认为还有另一种方式会更好,这就是他所遵循的定义:

en:
  activerecord:
    attributes:
      product:
        labels:
          name: "Your Product Name <small>Try to be creative</small>"
Run Code Online (Sandbox Code Playgroud)

如果您不想构建自己的自定义表单构建器,请使用以下命令:

= f.label :name, Product.human_attribute_name("labels.name").html_safe
Run Code Online (Sandbox Code Playgroud)

实际上,如果您定义自己的表单构建器,则可以轻松地重新定义标签方法以自动生成文本.