2010-09-02 3 views
27

J'ai quelques traductions dans mon application Rails (config/locale/[en | de] .yml) et je l'utilise dans mes vues avec <%=t "teasers.welcome" %>. Exemple:Utiliser le HTML dans un fichier de traduction Rails

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

Dans Rails 2.3.8 cela fonctionne très bien, avec Rails 3, le code HTML est échappé et traduit à &lt; ... Comment puis-je empêcher cette forme cette traduction et utiliser HTML dans mes fichiers de traduction comme dans Rails 2.3.8?

Répondre

36

Je suppose que c'est parce que faire

<%= t("blah") %> 

dans des rails 2.x, est maintenant l'équivalent de faire

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

lorsque vous utilisez des rails 3.

De l'release note s:

Commutateur à XSS sur-par-défaut s'échappant pour les rails.

Pour résoudre ce problème, et encore une fois des notes de version:

Vous ne devez appeler h (string) pour échapper à la sortie HTML, il est par par défaut dans tous les modèles de vue . Si vous voulez la chaîne non échappée, appelez brut (chaîne).

Alors il suffit de remplacer

<%= t("blah") %> 

par

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

Merci beaucoup pour cette réponse! – Fu86

+11

La manière conventionnelle est d'utiliser les touches se terminant par _html. –

+1

Faites attention si vous ajoutez des données dynamiques aux traductions en utilisant '<% ​​= raw t" welcome ", nom: user.name%>'. Si l'utilisateur définit la valeur 'name' sur un javascript, vous rencontrez une attaque XSS. – Yoko

70

autres que l'utilisation raw, il y a une autre façon de le faire sans papier (mais officiel) ainsi. Toutes les clés se terminant par _html sont automatiquement désactivées.

Renommer la clé de

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

à

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

cool, je ne savais pas à ce sujet! – marcgg

+7

En fait, il est documenté, est ici http://guides.rubyonrails.org/i18n.html#using-safe-html-translations – ramontiveros

Questions connexes