如何在Ruby类/模块命名空间中转换模型?

我有一个模型Products :: Car。 如何转换其属性?

我已经尝试过了:

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

还有这个:

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

但是,如果我尝试使用Products :: Car.model_name.human,它仍然显示“ Car”。 我的其他翻译效果很好,并且语言设置为:ru。

2个解决方案
104 votes

我检查了'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
Vizakenjack answered 2020-08-06T20:38:31Z
0 votes

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

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

products/car: "Автомобиль"不再工作

bonyiii answered 2020-08-06T20:38:55Z
translate from https://stackoverflow.com:/questions/7693040/how-to-translate-model-in-ruby-class-module-namespace