Ruby on Rails:如何翻译select标签的选项?

时间:2014-09-09 19:46:40

标签: ruby-on-rails

我在一个编辑用户表单中创建了一个select元素:

t.select :identification_type, User.identification_type_hash

哈希是

{ :type_1 => 1, :type_2 => 2, ... }

我需要本地化类型名称。但我没有找到将翻译添加到语言环境目录中的yml文件的正确方法。

我试过了

en_US:
  type_1: Translationg of type 1
  type_2: Translationg of type 1

  active_record:
    attributes:
      identification_type:
        type_1: Translationg of type 1
        type_2: Translationg of type 1

  identification_type:
    type_1: Translationg of type 1
    type_2: Translationg of type 1

上面没有人工作。 (虽然其他东西的翻译仍然有效。) 我在ROR文件中找不到解决方案。

那么本地化这些哈希值的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

您需要自己翻译密钥,但这很容易。假设您有以下语言环境文件:

en_US:
  identification_type:
    type_1: Translationg of type 1
    type_2: Translationg of type 1

然后,您的select标记可能如下所示:

t.select(:identification_type, 
  User.identification_type_hash.map { |k,v| [t(k, scope: :identification_type), v] })

当然,对于视图来说这看起来很复杂,因此您可以将此代码移动到视图助手:

module ApplicationHelper
  def user_identification_type_options
    User.identification_type_hash.map do |k,v| 
      [t(k, scope: :identification_type), v]
    end
  end
end

因此,您的select标记如下所示:

t.select(:identification_type, user_identification_type_options)

答案 1 :(得分:0)

在您创建identification_type_hash的地方添加翻译。

您可以通过I18n.t()访问Rails中的任何位置的翻译功能。 Documentation