Rails:如何i18n字符串数组?

dB'*_*dB' 10 ruby-on-rails internationalization

我在使用I18n.translate翻译数组时遇到了麻烦.

具体来说,我有这个阵列,

module TaskEnums
  OCTAVE_BANDS = [:hz63, :hz125, :hz250, :hz500, :hz1000, :hz2000, :hz4000, :hz8000, :hz16000]
end
Run Code Online (Sandbox Code Playgroud)

我在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"
Run Code Online (Sandbox Code Playgroud)

在我看来,我想显示一个允许用户选择频率的下拉菜单.

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

我知道我可以翻译单个符号t :symbol,但这种方法似乎不适用于数组(例如t TaskEnums::OCTAVE_BANDS,不做我需要的).

有谁知道我如何翻译OCTAVE_BANDS数组,以便翻译出现在下拉列表中?这似乎一定是一个常见的问题,所以我假设(并希望!)有一个简单的解决方案......任何人都可以建议如何完成它?

非常感谢,

D.

jdo*_*doe 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"]
Run Code Online (Sandbox Code Playgroud)