2010-09-02 12 views
27

Mam kilka tłumaczeń w mojej aplikacji Rails (config/locale/[en | de] .yml) i używam go w moich widokach z <%=t "teasers.welcome" %>. Przykład:Użyj HTML wewnątrz pliku tłumaczenia Railsów

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

w Rails 2.3.8 to działa dobrze, z Rails 3, HTML jest uciec i po przeliczeniu na &lt; ... W jaki sposób można zapobiec tego formularza to tłumaczenie i używać HTML w moich plikach tłumaczeniowych jak w Railsach 2.3.8?

Odpowiedz

36

Przypuszczam, że to dlatego, że robi

<%= t("blah") %> 

w Rails 2.x, teraz jest odpowiednikiem robi

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

gdy używasz szyny 3.

Z release note s:

Przełącznik do domyślnego XSS uciekającego dla szyn.

Aby rozwiązać ten problem, i po raz kolejny z release notes:

Już nie trzeba zadzwonić h (string) uciec wyjście HTML jest przez domyślne w widoku szablonów . Jeśli chcesz uzyskać ciąg znaków bez znaków, zadzwoń na raw (ciąg).

Więc po prostu zastąpić

<%= t("blah") %> 

przez

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

dziękuję za odpowiedź! – Fu86

+11

Konwencja polega na użyciu klawiszy kończących się na '_html'. –

+1

Zachowaj ostrożność, dodając dane dynamiczne do tłumaczeń, np. Używając '<% = raw t" welcome ", name: user.name%>'. Jeśli użytkownik ustawi wartość 'name' w niektórych javascriptach, atak XSS. – Yoko

70

Inny niż przy użyciu raw, nie ma innego nieudokumentowane (ale oficjalna) sposób to zrobić. Wszystkie klucze kończące się _html są automatycznie renderowane bez zmiany znaczenia.

Zmiana nazwy klucza z

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

do

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

fajne, nie wiedziałem o tym! – marcgg

+7

Właściwie jest to udokumentowane, jest tutaj http://guides.rubyonrails.org/i18n.html#using-safe-html-translations – ramontiveros

Powiązane problemy