2012-09-09 13 views
10

मुझे किसी सरणी का अनुवाद करने के लिए I18n.translate का उपयोग करने में समस्या आ रही है।रेल: स्ट्रिंग की सरणी i18n कैसे करें?

विशेष रूप से, मैं इस सरणी,

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

मिल गया है और मैं एक 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" 

मेरे विचार में, मैं एक ड्रॉपडाउन मेनू प्रदर्शित करना चाहता हूं जो उपयोगकर्ताओं को आवृत्ति का चयन करने की अनुमति देता है।

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

मैं जानता हूँ कि मैं t :symbol साथ अलग-अलग प्रतीकों अनुवाद कर सकते हैं, लेकिन इस दृष्टिकोण (जैसे t TaskEnums::OCTAVE_BANDS मैं क्या जरूरत नहीं है) सरणियों के साथ काम करने के लिए प्रतीत नहीं होता।

क्या कोई जानता है कि मैं OCTAVE_BANDS सरणी का अनुवाद कैसे कर सकता हूं, ताकि अनुवाद ड्रॉपडाउन में दिखाई दे? ऐसा लगता है कि यह एक आम समस्या होनी चाहिए, इसलिए मुझे लगता है (और उम्मीद है!) कि एक आसान समाधान है ... क्या कोई सुझाव दे सकता है कि इसे कैसे किया जाए?

बहुत धन्यवाद,

डी

उत्तर

17

उपयोग scope विकल्प आपके I18n.t कॉल के लिए:

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

ग्रेट, धन्यवाद! रिकॉर्ड के लिए, मैंने पाया कि मुझे इस काम को देखने के लिए कोष्ठक शामिल करने की आवश्यकता है, उदा। 'टी (टास्कएनम्स :: ओसीटीएवीआईबीएबीएनडीएस, स्कोप: 'टास्क एन्नम्स.ओसीटीएवी_बीएनबीएनएस') ', लेकिन मुझे लगता है कि यह अधिक अनुभवी रूबीस्ट्स के लिए स्पष्ट है। बहुत सराहना की। :) –

2

jdoe का जवाब मेरे लिए काम किया! मैंने इसे एक फॉर्म इनपुट फ़ील्ड पर इस्तेमाल किया।

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

संबंधित मुद्दे