2010-12-07 44 views
10

我使用自动表单标签助手来创建我的表单标签并通过i18n支持翻译它们,但是,我想在标签中使用HTML,而且我不能弄清楚如何使HTML安全。Rails 3:在i18n窗体帮助器翻译中使用HTML

例如:

en: 
    helpers: 
    label: 
     product: 
     name: 'Your Product Name <small>Try to be creative</small>' 

结束为:

<label for="product_name">Your Product Name &lt;Try to be creative&gt;</label> 

但我希望它是:

<label for="product_name">Your Product Name <small>Try to be creative</small></label> 

有我指定转换的一种方式html_safe,以便它在输出前不被编码?另外,这似乎是要设置HTML的最有语义的方式,但如果我完全以错误的方式处理这些问题,我很乐意提供建议。

谢谢:)

更新时间:

<%= form_for @product do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
<% end %> 

回答

12

不知道你的实际帮助是怎么一回事,但是你可以使用html_safe做到这一点很容易(前提是你的标签的价值将无法输入由其他用户)。

是这样的:t("helpers.label.product.name").html_safe

如果不工作,请给你的你的helper方法,或仅用于输出结果行执行。

====== UPDATED ======

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

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

但还有另一种方式,我认为会更好,这是定义为他以下几点:

en: 
    activerecord: 
    attributes: 
     product: 
     labels: 
      name: "Your Product Name <small>Try to be creative</small>" 

如果你不想建立自己的自定义表单生成器,使用:

= f.label :name, Product.human_attribute_name("labels.name").html_safe 

实际上,如果您定义了自己的表单生成器,那么很容易重新定义标签方法以自动生成它的文本。

+0

我使用的是标准的Rails助手:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i -label – 2010-12-07 03:26:02

14

在rails3中自动生成正常密钥的安全方式是将_html或.html附加到密钥名称。例如。 NAME_HTML。这只能通过视图中的translate/t方法工作,即不能通过I18n.t。这不会在这里工作,尽管标准表单助手不会尝试该版本的密钥。

创建自己的表单构建器是建议的方式。你也可以做

f.label :name, t('helpers.label.product.name_html') 

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

-8

另一种选择是做到以下几点:

name: '<span>Your Product Name <small>Try to be creative</small></span>'