2010-09-02 5 views
27

Ho alcune traduzioni nella mia applicazione Rails (config/locale/[en | de] .yml) e la utilizzo nelle mie visualizzazioni con <%=t "teasers.welcome" %>. Esempio:Utilizzare HTML all'interno di un file di traduzione di Rails

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

in Rails 2.3.8 questo funziona bene, con Rails 3, il codice HTML è fuggito e tradotto in &lt; ... Come posso impedire questa forma questa traduzione e usare l'HTML nei miei file di traduzione come in Rails 2.3.8?

risposta

36

Suppongo che sia perché facendo

<%= t("blah") %> 

in Rails 2.x, ora è l'equivalente di fare

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

quando si utilizza rotaie 3.

Dal release note s:

Interruttore a XSS on-by-default che sfugge a per le rotaie.

Per risolvere il problema, e ancora una volta dalle note di rilascio:

Non è più necessario chiamare h (stringa) per sfuggire output HTML, si è attivata per default in tutti i modelli di vista . Se lo standard desidera la stringa senza caratteri di escape, chiama raw (stringa).

Quindi, basta sostituire

<%= t("blah") %> 

da

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

Grazie mille per questa risposta! – Fu86

+11

Il modo convenzionale è usare le chiavi che terminano con '_html'. –

+1

Fare attenzione se si aggiungono dati dinamici alle traduzioni come usando '<% = raw t" welcome ", nome: user.name%>'. Se l'utente imposta il valore 'name' su qualche javascript, stai avendo un attacco XSS. – Yoko

70

Altro che usare raw, c'è un altro modo non documentato (ma ufficiale) di farlo. Tutte le chiavi che terminano con _html vengono visualizzate automaticamente senza caratteri di escape.

rinominare la chiave da

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

a

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

fico, non lo sapevo! – marcgg

+7

In realtà è documentato, è qui http://guides.rubyonrails.org/i18n.html#using-safe-html-translations – ramontiveros