Ruby on rails Rails:如何i18n一个字符串数组?

Ruby on rails Rails:如何i18n一个字符串数组?,ruby-on-rails,internationalization,Ruby On Rails,Internationalization,使用I18n.translate转换数组时遇到问题 具体来说,我有这个数组 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"

使用
I18n.translate
转换数组时遇到问题

具体来说,我有这个数组

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 tasknums::OCTAVE_BANDS
不能满足我的需要)

有人知道我如何翻译
倍频带
数组,以便在下拉列表中显示翻译吗?这似乎是一个常见的问题,所以我假设(并希望!)有一个简单的解决方案。。。有人能建议怎么做吗

非常感谢,


D.

为您的
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"]

jdoe的回答对我有用!我在表单输入字段中使用了它

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

太好了,谢谢!作为记录,我发现我需要在视图中包含圆括号,例如,
t(tasknums::OCTAVE_BANDS,scope:'tasknums.OCTAVE_BANDS')
,但我想这对于经验丰富的Ruby专家来说是显而易见的。非常感谢。:)