【问题标题】:How to translate model in Ruby class/module namespace?如何在 Ruby 类/模块命名空间中翻译模型?
【发布时间】:2011-12-03 07:55:12
【问题描述】:

我有一个模型 Products::Car。如何翻译它的属性?

我已经试过了:

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

还有这个:

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

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

【问题讨论】:

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


【解决方案1】:

我检查了“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_key 设置在 ActiveModel::Name https://github.com/rails/rails/blob/375a4143cf5caeb6159b338be824903edfd62836/activemodel/lib/active_model/naming.rb#L147 的初始化程序中

它只是基于

MyClass.name.underscore

【讨论】:

  • 感谢您分享找到此问题的方法。这是一个命名空间之后的单数模型名称让我感到困惑。
  • 十年和三个 Rails 版本之后,这种 yml 语法仍然有效。活动模型 6.1.3.1。在这里。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2012-07-20
    • 2020-07-14
    • 2013-09-06
    相关资源
    最近更新 更多