2012-06-27 12 views
6

Estoy usando i18n en mis plantillas de correo .text.haml y quiero tener una cadena en en.yml que tenga una nueva línea pero t() siempre se está escapando de ellas incluso si uso html_safe o sufijo el nombre de la clave con _html.Rails 3 i18n cómo * no * escapar líneas nuevas

¿Hay alguna manera de hacer esto?

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

En mi plantilla html.haml:

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

No importa lo que el \ n se escapó. No puedo usar% br o cualquier otra cosa porque estas son plantillas de texto. Sé que podría dividir esto en 4 cuerdas i18n, pero sería muy triste.

Por cierto, lo comprobé y es i18n escapándose, no haml.

Respuesta

8

se podría hacer algo como esto:

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

Por lo que yo sé, esta es la única manera.

Editar

realidad, después de algo de investigación, me encontré con el ayudante simple_format.

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

+1

que realmente quieren que el \ n, I me estoy poniendo \\ n Tu respuesta aún funcionará. – eagspoo

+0

Ahh, está bien. Me disculpo, lo malentendí. Dejaré mi respuesta como está para cualquier otra persona que pueda encontrarla. –

+3

Una pequeña corrección, debería ser 't ('emails.post.twitter_forbidden.p3_html'). Gsub (" \ n ", '
') .html_safe' –

0

I18n simplemente utiliza yaml y yaml puede tener matrices. :-)

Así que exploraría usando una opción como esta.

En el archivo yaml habrías una clave llamada p3_html

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

Y a continuación, en su opinión haml usted tendría este código HAML:

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

O en una línea si prefieren

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

también recuerde si se mueve esto en un ayudante es probable que tenga que utilizar el haml_conc en ayudante frente a tu variable Ruby. No estoy seguro.

También tendrá que ajustar la nomenclatura relativa/absoluta de su variable de traducción yam (t '' p3_html ') a la nomenclatura de su aplicación.

Espero que esto ayude!

3

Un par de opciones aquí: Como se mencionó anteriormente, simple_format ayudará. Formato de archivo de su yml así:

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

y luego usar

=simple_format t(:p3_html) 

Esto le dará algo así como

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

O si desea que cada línea de un nuevo párrafo:

p3_html: | 
     Some text: 

     - Point 1 

     - Point 2 

     - Point 3 

que se debe dar a este:

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

o algo como esto es más flexible

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

le permite poner en diferentes formatos:

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

última opción es utilizar una matriz en yaml:

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

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

Posiblemente más limpio, aunque creo que va a jugar muy bien con las comas, y la ventaja de la versión anterior es que puede cambiar entre formatos sin necesidad de modificar su yaml

0

he terminado simplemente el uso de etiquetas en archivos de traducción de la siguiente manera:

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

Y luego dentro de la plantilla que ellos hacen .html_safe:

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