2010-08-18 10 views
25

De acuerdo con ActionView documentation. Cita:Raíles i18n y estructura yml para etiquetas de formulario

El texto de la etiqueta será por defecto el nombre del atributo a menos que una traducción se encuentra en la localidad I18n actual o que especifique explícitamente (mediante views.labels <ModelName> <atributo>..).

Tengo un modelo de "usuario" y un formulario de registro. Aquí hay un fragmento de la parte correspondiente:

<% form_for(@user) do |f| %> 
    ... 
    <p> 
    <%= f.label :username %> 
    <%= f.text_field :username, :class => 'full_width' %> 
    </p> 
    ... 
<% end %> 

Los puntos esconden el código no importante.

Según tengo entendido la documentación, si se facilite la traducción en mi archivo de entorno local, en este caso: DK, mi dk.yml buscando de esta manera:

dk: 
    views: 
     labels: 
      user: 
       username: 
        "blahblah" 

rieles deben traducir el texto de la etiqueta e insertar " blahblah "en lugar de" Nombre de usuario ".

Esto no está sucediendo, así que me he perdido algo. Cualquier ayuda apreciada.

Respuesta

26

Creo que encontré otra solución aquí.

Mi aplicación era la versión 2.3.5. Ahora he cambiado a 2.3.8 y <%= f.label :username %> ahora utiliza la traducción en:

dk: 
    activerecord: 
    attributes: 
     user: 
     username: 

he encontrado la pista en este billete:

https://rails.lighthouseapp.com/projects/8994/tickets/745-form-label-should-use-i18n

+0

¿Qué sucede si quiere tener una etiqueta como 'Ingrese su nombre'? No creo que establecer un atributo en una frase como que esté limpio, probablemente genere algunos problemas en algunos casos específicos.Consulte la respuesta de Voldy para una forma correcta de personalizar una etiqueta de formulario. Incluso puede usar ambos enfoques juntos, pero el enfoque de Voldy anulará este en su formulario, y debería – mizurnix

1

Eso es porque el método label que llama no es el de ActionView::Helpers::FormHelper, pero es en realidad el método de label_tagActionView::Helpers::FormTagHelper. El método form_for está reescribiendo el código en el bloque dado al agregar _tag a los ayudantes de formulario utilizados. ¡Entonces no estás mirando la documentación para el método correcto!

Todavía no he usado ese método, ya que a veces la etiqueta de un campo puede ser diferente de varias formas usando el mismo modelo, así que escribí mi propia ayuda.

+0

Gracias, no sabía eso. Los métodos form_for y label están en la página de documentación 'ActionView :: Helpers :: FormHelper', así que solo asumí que funcionaban juntos así. Cambié mi código a: '<% = label: user,: username%>' Con el mismo archivo yml, pero aún no recibo la traducción. ¿Importa que la llamada 'etiqueta' esté dentro del bloque' form_for'? – rhardih

+1

Para ser sincero, nunca he tenido esa característica para trabajar. Siendo curioso, acabo de mirar el código de Rails y creo que esta es una característica antigua y que la documentación no se ha corregido: 'content = (text.blank?? Nil: text.to_s) || method_name.humanize' en la línea 473 de form_helper.rb –

+0

En ese caso, debe usar el método 't' que especifica el' scope' presente en su archivo de traducción '.yml'. '<% = t: title, scope: [: helpers,: label,: post]%>'. – mariowise

41

En Rails 3.1 que es un poco cambiado

<% form_for @post do |f| %> 
    <%= f.label :title %> 
    <%= f.text_field :title %> 
    <%= f.submit %> 
<% end %> 

en: 
    helpers: 
    label: 
     post: 
     title: 'Customized title' 
+3

Gracias por esto. ¿Hay alguna nota de publicación o algo que pueda ver para conocer más sobre este formato? – astjohn

+1

La descripción de este formato está disponible en la documentación [ActionView :: Helpers :: FormHelper.label] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-isalabel). – simonnordberg

+1

Puedo confirmar que esto también funciona en Rails 4.0. –

Cuestiones relacionadas