Rails 3: Использование HTML в переводах формы i18n - PullRequest
10 голосов
/ 07 декабря 2010

Я использую автоматический помощник по меткам форм для создания меток форм и их перевода через поддержку 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 %>

Ответы [ 3 ]

15 голосов
/ 07 декабря 2010

Способ сделать обычный ключ автоматически безопасным html в rails3 состоит в добавлении _html или .html к имени ключа. Например. NAME_HTML. Это работает только через метод translate / t в представлении, т.е. не через I18n.t Это все равно не сработает, хотя стандартный помощник по форме не пробует эту версию ключа.

Создание собственного конструктора форм - это путь, который предлагается. Вы также можете сделать

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

Если это происходит только в нескольких местах.

12 голосов
/ 07 декабря 2010

Не знаю, каков ваш настоящий помощник, но вы могли бы легко использовать 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

На самом деле, если вы определите свой собственный конструктор форм, он легко переопределит метод метки, чтобы автоматически генерировать его текст.

0 голосов
/ 10 августа 2012

Другой вариант заключается в следующем:

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