2012-09-09 13 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

使用あなたのI18n.tコールのためのscopeオプション:

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、scope: 'TaskEnums.OCTAVE_BANDS')'だが、それはもっと経験豊富なRubyistsにとっては明白だと思う。とても有難い。 :) –

2

jdoeのの答えは私のために働きました!これをフォームの入力フィールドに使用しました。

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

関連する問題