10

自動フォームラベルヘルパーを使用してフォームラベルを作成し、i18nサポートを介して翻訳してもらいますが、ラベルにHTMLを含めたいので、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 %>
4

4 に答える 4

15

rails3で通常のキーを自動的にhtmlセーフにする方法は、キー名に_htmlまたは.htmlを追加することです。例:name_html。これは、ビューのtranslate / tメソッドを介してのみ機能します。つまり、I18n.tを介しては機能しません。ただし、標準のフォームヘルパーはそのバージョンのキーを試行しないため、ここでは機能しません。

独自のフォームビルダーを作成することは、提案どおりに進む方法です。あなたもすることができます

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

これが2、3か所でのみ発生する場合。

于 2010-12-07T10:33:18.997 に答える
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>"

独自のカスタムフォームビルダーを作成したくない場合は、次を使用してください。

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

実際、独自のフォームビルダーを定義する場合は、labelメソッドを簡単に再定義して、テキストを自動的に生成できます。

于 2010-12-07T02:59:00.643 に答える
0

ヘルパーファイルに配置した新しい関数でこれを解決しました。

def labeltext_with_html(model,field)
  I18n.t("helpers.label.#{model}.#{field}").html_safe
end

私はそれをこのように呼びます:

label(my_model, my_field, labeltext_with_html(my_model, my_field))

ユースケースに合わせて変数を調整するだけです。.html_safeユースケースによっては、ラベルタグも必要になる場合があります。

于 2020-12-05T09:44:50.867 に答える
-9

もう1つのオプションは、次のことを行うことです。

    name: '<span>Your Product Name <small>Try to be creative</small></span>'
于 2012-08-09T23:34:20.680 に答える