【问题标题】:Rails: how to i18n an array of strings?Rails:如何 i18n 字符串数组?
【发布时间】:2012-09-09 17:25:24
【问题描述】:

我在使用 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 数组,以便翻译出现在下拉列表中?这似乎一定是一个常见问题,所以我假设(并希望!)有一个简单的解决方案......有人可以建议如何完成它吗?

非常感谢,

D.

【问题讨论】:

    标签: ruby-on-rails internationalization


    【解决方案1】:

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

    【讨论】:

    • 太好了,谢谢!作为记录,我发现我需要包含括号才能在视图中进行这项工作,例如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')
    

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2021-03-24
      • 2021-12-13
      相关资源
      最近更新 更多