Использовать HTML внутри файла перевода Rails - PullRequest
38 голосов
/ 02 сентября 2010

У меня есть несколько переводов в моем приложении на Rails (config / locale / [en | de] .yml), и я использую его в своих представлениях с <%=t "teasers.welcome" %>.Пример:

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."

В Rails 2.3.8 это работает просто отлично, с Rails 3 HTML экранируется и переводится в &lt; ... Как я могу предотвратить эту форму этого перевода и использоватьмои файлы перевода как в Rails 2.3.8?

Ответы [ 2 ]

91 голосов
/ 02 сентября 2010

Кроме использования raw, существует другой недокументированный (но официальный) способ сделать это.Все ключи, заканчивающиеся на _html, автоматически отображаются без экранирования.

Переименуйте ключ с

teasers:
    welcome: "<strong>Welcome</strong> to the Website ..."

на

teasers:
    welcome_html: "<strong>Welcome</strong> to the Website ..."
38 голосов
/ 02 сентября 2010

Полагаю, это потому что

<%= t("blah") %>

в рельсах 2.x теперь эквивалентно

<%=h t("blah") %>

при использовании рельсов 3.

Из примечания к выпуску s:

Переключение на по умолчанию переключение XSS для рельсов.

Чтобы это исправитьснова из примечаний к выпуску:

Вам больше не нужно вызывать h (string) для выхода из вывода HTML, он включен по умолчанию во всех шаблонах представления.Если вам нужна неэкранированная строка, вызовите raw (string).

Поэтому просто замените

<%= t("blah") %>

на

<%= raw t("blah") %>
...