2010-09-02 13 views
27

Tengo algunas traducciones en mi aplicación Rails (config/locale/[en | de] .yml) y la uso en mis vistas con <%=t "teasers.welcome" %>. Ejemplo:Usar HTML dentro de un archivo de traducción de Rails

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

en Rails 2.3.8 esto funciona muy bien, con Rails 3, el HTML se escapó y traducido a &lt; ... ¿Cómo puedo prevenir esta forma esta traducción y usar HTML en mis archivos de traducción como en Rails 2.3.8?

Respuesta

36

supongo que es porque haciendo

<%= t("blah") %> 

en los carriles 2.x, ahora es el equivalente de hacer

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

cuando se está utilizando rieles 3.

Desde el release note s:

Cambiar a XSS por defecto escapando por raíles.

Para solucionar esto, y una vez más de las notas de la versión:

Ya no es necesario llamar h (cadena) para escapar de salida HTML, que está activada de forma defecto en todas las plantillas de vista . Si quiere la cadena sin escindir, llame al sin procesar (cadena).

Así que basta con sustituir

<%= t("blah") %> 

por

<%= raw t("blah") %> 
+0

Muchas gracias por esta respuesta! – Fu86

+11

La forma de convención es usar claves que terminan en '_html'. –

+1

Tenga cuidado si agrega datos dinámicos a las traducciones como usar '<% = raw t" welcome ", name: user.name%>'. Si el usuario establece el valor 'name' en algunos javascript, tendrá un ataque XSS. – Yoko

70

Aparte del uso de raw, hay una otra manera no documentada (pero oficial) para hacerlo. Todas las claves que terminan en _html se vuelven automáticamente sin escindir.

Cambiar el nombre de la clave de

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

a

teasers: 
    welcome_html: "<strong>Welcome</strong> to the Website ..." 
+0

genial, ¡no sabía de esto! – marcgg

+7

En realidad está documentado, está aquí http://guides.rubyonrails.org/i18n.html#using-safe-html-translations – ramontiveros

Cuestiones relacionadas