Utiliser HTML dans un fichier de traduction Rails

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

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 en &lt;... Comment puis-je empêcher cette forme de traduction et utiliser HTML dans Mes fichiers de traduction comme dans Rails 2.3.8?

31
demandé sur Fu86 2010-09-02 14:05:48

2 réponses

Je suppose que c'est parce que faire

<%= t("blah") %>

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

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

Lorsque vous utilisez rails 3.

De la note de version s:

Passe à l'échappement XSS activé par défaut pour les rails.

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

Vous n'avez plus besoin d'appeler h(string) pour échapper à la sortie HTML, il est activé par par défaut dans tous les modèles de vue. Si vous vous voulez la chaîne non échappée, appeler raw(chaîne de caractères).

Il suffit donc de remplacer

<%= t("blah") %>

Par

<%= raw t("blah") %>
37
répondu marcgg 2010-09-02 10:10:24

Autre que l'utilisation de raw, Il existe un autre moyen non documenté (mais officiel) de le faire. Toutes les clés se terminant par _html sont automatiquement rendues non échappées.

Renommez la clé de

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

À

teasers:
    welcome_html: "<strong>Welcome</strong> to the Website ..."
79
répondu Simone Carletti 2010-09-02 13:02:13