2012-09-09 57 views
10

我在使用I18n.translate來轉換數組時遇到問題。Rails:如何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數組,以便翻譯出現在下拉列表中?這似乎是一個常見問題,所以我認爲(並希望!)有一個簡單的解決方案......任何人都可以建議如何完成它?

非常感謝,

D.

回答

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

太好了,謝謝!爲了記錄,我發現我需要在視圖中包含括號才能完成這項工作,例如't(TaskEnums :: OCTAVE_BANDS,範圍:'TaskEnums.OCTAVE_BANDS')',但我想這對更有經驗的Ruby專家來說是顯而易見的。非常感激。 :) –

2

JDOE的回答爲我工作!我在表單輸入字段中使用了它。

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