2010-09-02 2 views
27

Ich habe einige Übersetzungen in meiner Rails-Anwendung (config/locale/[en | de] .yml) und verwende sie in meinen Ansichten mit <%=t "teasers.welcome" %>. Beispiel:HTML in einer Rails-Übersetzungsdatei verwenden

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

In Rails 2.3.8 das funktioniert ganz gut, mit Rails 3 ist der HTML entkommen und übersetzt &lt; ... Wie kann ich verhindern, dass dies diese Übersetzung Form und verwenden HTML in meiner Übersetzung Dateien wie in Schienen 2.3.8?

Antwort

36

Ich nehme an, es ist, weil

<%= t("blah") %> 

in Schienen 2.x tun, jetzt das Äquivalent zu tun, ist

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

wenn Sie Schienen 3.

Vom release note mit s:

Schalter zu standardmäßig XSS, für Schienen zu entkommen.

Um dies zu beheben, und wieder aus den Release Notes:

Sie müssen nicht mehr h (string) zu entkommen HTML-Ausgabe, es ist auf durch Standard in allen Ansichtsvorlagen aufrufen . Wenn Sie die nicht-gesampelte Zeichenfolge wünschen, rufen Sie raw (string) auf.

So ersetzen Sie einfach

<%= t("blah") %> 

von

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

Vielen Dank für diese Antwort! – Fu86

+11

Die Konvention besteht darin, Schlüssel zu verwenden, die mit '_html' enden. –

+1

Seien Sie vorsichtig, wenn Sie den Übersetzungen dynamische Daten hinzufügen, wie zum Beispiel '<% = raw t" welcome ", name: user.name%>'. Wenn der Benutzer den Wert 'name' auf Javascript setzt, wird ein XSS-Angriff ausgeführt. – Yoko

70

Anders als raw verwenden, gibt es eine andere undokumentierte (aber offiziell) Art und Weise, dies zu tun. Alle Schlüssel, die mit _html enden, werden automatisch als Unescaps gerendert.

Benennen Sie den Schlüssel aus

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

zu

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

cool, ich wusste nicht darüber! – marcgg

+7

Eigentlich ist es dokumentiert, ist hier http://guides.rubyonrails.org/i18n.html#using-safe-html-translations – ramontiveros

Verwandte Themen