Подтвердить что ты не робот

Rails: как i18n массива строк?

У меня возникли проблемы с использованием 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 TaskEnums::OCTAVE_BANDS не делает то, что мне нужно).

Кто-нибудь знает, как я могу перевести массив OCTAVE_BANDS, чтобы переводы отображались в раскрывающемся списке? Кажется, что это должна быть общая проблема, поэтому я предполагаю (и надеюсь!), Что есть простое решение... может ли кто-нибудь предложить, как это сделать?

Большое спасибо,

Д.

4b9b3361

Ответ 1

Используйте 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"]

Ответ 2

Ответ jdoe работал у меня! Я использовал это в поле ввода формы.

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