2012-06-27 13 views
6

Sto usando i18n nei miei template mailer .text.haml e voglio avere una stringa in en.yml che abbia una nuova riga ma t() li sfugge sempre anche se uso html_safe o suffisso il nome della chiave con _html.Rails 3 i18n come * not * escape newlines

C'è un modo per farlo ??

p3_html: > 
    You love monkeys: 
    \n- You look like one 
    \n- Your smell like one 
    \n- Your account has been flagged 

Nel mio modello html.haml:

!= t('emails.post.twitter_forbidden.p3_html').html_safe 

Non importa quale sia il \ n siamo scampati. Non posso usare% br o qualsiasi altra cosa perché questi sono modelli di testo. So che potrei dividerlo in 4 stringhe i18n, ma sarebbe davvero triste.

BTW, ho controllato ed è in uscita i18n, non haml.

risposta

8

Si potrebbe fare qualcosa di simile:

t('emails.post.twitter_forbidden.p3_html').html_safe.gsub("\n", '<br/>')

Per quanto ne so, questo è l'unico modo.

Modifica

In realtà, dopo qualche scavo, ho trovato il simple_format aiutante.

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

+1

Io in realtà vogliono la \ n, I sto solo ricevendo \ n. La tua risposta funzionerà ancora. – eagspoo

+0

Ah, okay. Mi scuso - ho frainteso. Lascerò la mia risposta come-è per tutte le altre persone che potrebbero trovarlo. –

+3

Una piccola correzione, dovrebbe essere 't ('emails.post.twitter_forbidden.p3_html'). Gsub (" \ n ", '
') .html_safe' –

0

I18n appena usa YAML e YAML può avere array. :-)

Quindi vorrei esplorare utilizzando un'opzione come questa.

Nel file YAML avresti una chiave denominata p3_html

# http://en.wikipedia.org/wiki/YAML#Lists_of_associative_arrays 
p3_html: 
- some text 
- some more text 
- some more more text 

E poi nella vista Haml avresti questo codice HAML:

= t('p3_html').each do |x| 
    %p= x 

O in una sola riga, se si preferisci

= t('p3_html').each {|x| haml_tag :p, x } 

Ricorda anche se lo sposti in un helper probabilmente dovrai utilizzare il haml_conc ad aiutante di fronte alla tua variabile rubino. Non sono sicuro.

Dovrai inoltre regolare la denominazione relativa/assoluta della variabile yaml di traduzione t ('p3_html') alla denominazione dell'app.

Spero che questo aiuti!

3

Coppia di opzioni qui: Come accennato in precedenza, simple_format aiuterà. formato di file vostra yml in questo modo:

p3_html: | 
     Some text: 
     - Point 1 
     - Point 2 
     - Point 3 

e quindi utilizzare

=simple_format t(:p3_html) 

Questo vi darà qualcosa di simile

<p>Some text 
     <br> 
     - Point 1 
     <br> 
     - Point 2 
     <br> 
     - Point 3 
    </p> 

Oppure, se si desidera che ogni linea di un nuovo paragrafo:

p3_html: | 
     Some text: 

     - Point 1 

     - Point 2 

     - Point 3 

Che dovrebbe darvi questa:

<p>Some text</p> 
    <p>- Point 1</p> 
    <p>- Point 2</p> 
    <p>- Point 3</p> 

o qualcosa di simile è più flessibile

<% t(:p3_html).each_line do |line| %> 
     <li>= |line|</li> 
    <% end %> 

vi permette di mettere in formattazione diversa:

<li>- Point 1</li> 
    <li>- Point 2</li> 
    <li>- Point 3</li> 

Altra opzione è quella di utilizzare un array in yaml:

 p3_html: 
     - Some text: 
     - - Point 1 
     - - Point 2 
     - - Point 3 

    <% t(:p3_html).each do |line| %> 
     <p>= |line|</p> 
    <% end %> 

Forse più pulito, anche se penso che giocherà allegramente con le virgole, e il vantaggio della versione precedente è che puoi passare da un formato all'altro senza bisogno di modificare il tuo yaml

0

Ho finito solo utilizzando i tag nei file di localizzazione in questo modo:

a: 
    b: "Some <br /> thing" 

E poi all'interno del modello li faccio .html_safe:

<%= t('a.b').html_safe %>