如何在 Ruby 类/模块命名空间中翻译模型?
Posted
技术标签:
【中文标题】如何在 Ruby 类/模块命名空间中翻译模型?【英文标题】:How to translate model in Ruby class/module namespace? 【发布时间】: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。
【问题讨论】:
参考这个答案:***.com/questions/2521383/… @HarishShetty 这个答案对这里的命名空间问题没有任何帮助! 【参考方案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: "Автомобиль"
不再工作了
【讨论】:
以上是关于如何在 Ruby 类/模块命名空间中翻译模型?的主要内容,如果未能解决你的问题,请参考以下文章
在控制器中找不到命名空间内的 Ruby on Rails 模型