2012-09-09 9 views
10

Tengo problemas para usar I18n.translate para traducir una matriz.Rieles: ¿cómo hacer una serie de cadenas?

Específicamente, tengo esta matriz,

module TaskEnums 
    OCTAVE_BANDS = [:hz63, :hz125, :hz250, :hz500, :hz1000, :hz2000, :hz4000, :hz8000, :hz16000] 
end 

y tengo la siguiente traducción en un archivo YAML.

en: 
    TaskEnums: 
    OCTAVE_BANDS: 
     hz63: "63 Hz" 
     hz125: "125 Hz" 
     hz250: "250 Hz" 
     hz500: "500 Hz" 
     hz1000: "1000 Hz" 
     hz2000: "2000 Hz" 
     hz4000: "4000 Hz" 
     hz8000: "8000 Hz" 
     hz16000: "16000 Hz" 

En mi opinión, me gustaría mostrar un menú desplegable que permita a los usuarios seleccionar una frecuencia.

<%= form_for(@task) do |f| %> 
    <%= f.select :frequency, TaskEnums::OCTAVE_BANDS %> 
<% end %> 

Sé que puedo traducir símbolos individuales con t :symbol, pero no parece que esta forma de trabajo con matrices (por ejemplo t TaskEnums::OCTAVE_BANDS no hace lo que necesito).

¿Alguien sabe cómo puedo traducir la matriz OCTAVE_BANDS, de modo que las traducciones aparezcan en el menú desplegable? Parece que debe ser un problema común, así que supongo (¡y espero!) Que hay una solución simple ... ¿alguien puede sugerir cómo hacerlo?

Muchas gracias,

D. opción

Respuesta

17

Uso scope para su llamada: I18n.t respuesta

t TaskEnums::OCTAVE_BANDS, scope: 'TaskEnums.OCTAVE_BANDS' 
# => ["63 Hz", "125 Hz", "250 Hz", "500 Hz", "1000 Hz", "2000 Hz", "4000 Hz", "8000 Hz", "16000 Hz"] 
+1

Genial, gracias! Para el registro, descubrí que necesitaba incluir paréntesis para que esto funcione en la vista, p. 't (TaskEnums :: OCTAVE_BANDS, scope: 'TaskEnums.OCTAVE_BANDS')', pero supongo que eso es obvio para los Rubyistas más experimentados. Muy apreciado. :) –

2

de jperez trabajaron para mí! Lo usé en un campo de entrada de formulario.

f.input :state, as: :radio, collection: t(Model.states.map(&:name), scope: 'attributes.states')

Cuestiones relacionadas