如何在Ruby类/模块命名空间中翻译模型?

时间:2011-10-07 21:29:23

标签: ruby-on-rails model localization namespaces internationalization

我有一个型号产品::汽车。我该如何翻译其属性?

我已经尝试过这个:

activerecord: 
  models:
    products:
      car: "Автомобиль"
  attributes:
    products:
      car:
        owner: "Владелец"

而且:

activerecord: 
  models:
    products_car: "Автомобиль"
  attributes:
    products_car:
      owner: "Владелец"

但如果我尝试使用Products :: Car.model_name.human,它仍然会说“Car”。我的其他翻译工作得很好,语言设置为:ru。

2 个答案:

答案 0 :(得分:102)

我检查了'model_name.human'源代码并找到'i18n_key'方法。我试过这个:

irb(main):006:0> Products::Car.model_name.i18n_key
=> :"products/car"

然后我将我的yml文件更改为:

activerecord:    
  models:
    products/car: "Автомобиль"   
  attributes:
    products/car:
      owner: "Владелец"

它有效!

编辑:

有待进一步参考:i18n_keyActiveModel::Name https://github.com/rails/rails/blob/375a4143cf5caeb6159b338be824903edfd62836/activemodel/lib/active_model/naming.rb#L147

的初始值设定项中设置

它只是基于

MyClass.name.underscore

答案 1 :(得分:0)

从rails 3.2.12开始,它似乎被转换回来了:

activerecord: 
  models:
    products:
      car: "Автомобиль"
  attributes:
    products:
      car:
        owner: "Владелец"

products/car: "Автомобиль"不再有效了