2012-09-09 16 views
10

Diziyi çevirmek için I18n.translate'u kullanırken sorun yaşıyorum.Raylar: bir dizi diziyi nasıl i18n?

Özellikle, bu dizi,

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

var ve bir YAML dosyasında aşağıdaki çevirisini var. Bence

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" 

, Kullanıcıların bir frekansı seçmenize olanak tanıyan bir açılır menü görüntülemek istiyorum.

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

ben t :symbol ile bireysel semboller çevirebilir biliyorum, ama bu yaklaşım (örneğin t TaskEnums::OCTAVE_BANDS ihtiyacım olanı yapmaz) diziler ile çalışmak görünmüyor.

OCTAVE_BANDS dizisini nasıl çevirebileceğimi bilen var mı, böylece çeviriler açılır menüde görünecek mi? Bu ortak bir sorun olmalı gibi gözüküyor, bu yüzden basit bir çözümün var olduğunu (ve umarım) ... kimsenin nasıl yapılmasını önerebileceğini varsayalım. senin I18n.t çağrı için

Çok teşekkürler,

D.

cevap

17

Kullanım scope seçenek:

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

Harika, teşekkürler! Kayıt için, bu çalışmayı görüşte yapmak için parantez eklemem gerektiğini buldum. t (TaskEnums :: OCTAVE_BANDS, kapsam: 'TaskEnums.OCTAVE_BANDS'), ama daha deneyimli Rubyistler için açık olduğunu düşünüyorum. Çok takdir edildi. :) –

2

jdoe cevabı benim için çalıştı! Bunu bir form giriş alanında kullandım.

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