2010-10-21 13 views
6

Je crée des fichiers locaux pour l'internationalisation dans une application de rails, et une URL que je veux traduis avec des étiquettes inclus, par exemplei18n sur Ruby on Rails, < and > sera remplacé par > ; < ; lorsqu'ils ne sont pas destinés

html. erb

<% = t (foo.bar.xxxx)%>

fichier yml

foo: bar: xxxx: "XXXX"

résultat

& lt; a href = "/info/index.html" & gt; xxxx </a & gt;

qui brise mes liens. Je n'ai pas de h sur la partie ruby, donc ça ne devrait pas marcher? Ou devrais-je ne pas avoir de balises html dans le fichier yml?

Version 3.0.1 Rails est Version 1.8.7 Ruby est P249

Répondre

28

Vos clés HTML YAML doivent avoir un suffixe _html:

foo: 
    bar: 
    xxxx_html: "<strong>Some HTML Here</strong>" 

Faire ce Rails marquera la chaîne a html_safe et rendra le HTML au lieu de le convertir en &gt; et &lt;.

Vous devez également le référencer avec le nom complet de la clé, Rails ne voit pas automatiquement le suffixe _html lorsque vous appelez xxxx.

<%= t 'foo.bar.xxxx_html' %> 
+0

cela a fonctionné à merveille, le préfixe est très pratique pour l'identification aussi, merci. – Saifis

+0

merci, cela fonctionne très bien – aashish

+0

fonctionne encore! Merci – shicholas

2

Rails empêche les attaques par injection en empêchant les données de modèle d'être affiché comme balisage réelle. La fonction brute empêche cette conversion.

Est-ce que

<%= raw t(foo.bar.xxxx) %> 

travail?

+0

Cela a fonctionné aussi bien que l'autre, n'était pas au courant de la méthode brute. Cela pourrait être utile un certain temps, merci pour l'info. – Saifis