在rails3中覆盖model-name的默认复数形式

toy*_*toy 27 localization ruby-on-rails pluralize

我的语言环境是:de和我喜欢这个:

Sheet.model_name.human.pluralize # => Belegs
Run Code Online (Sandbox Code Playgroud)

给我添加一个尾随"e"而不是"s"

Sheet.model_name.human.pluralize # => Belege
Run Code Online (Sandbox Code Playgroud)

仅适用于Sheet-class.我可以在config/locales/models/de.yml中以某种方式添加它吗?

Mar*_*rth 53

首先,你需要停止使用.pluralize.它使用Inflector(主要用于Rails内部,例如猜模型表的工作表名称 - >工作表).

Sheet.model_name.human # => "Beleg"
"Beleg".pluralize # => "Belegs"
Run Code Online (Sandbox Code Playgroud)

你应该做的是使用该:count选项.

Sheet.model_name.human(:count => 2) # => "Belege"
Run Code Online (Sandbox Code Playgroud)

这要求您修改de.yml了以下内容:

de:

  ...

  activerecord:

    ...

    models:
      sheet:
        one: Beleg
        other: Belege
Run Code Online (Sandbox Code Playgroud)

  • @Shawn实际上你可以使用`100000`或任何你想要的东西.使用`:count =>"foo"`也会查找`other`翻译.当前的实现只检查`:如果count == 0`和`count == 1则为零?:one :: other`.这是[完整代码](https://github.com/svenfuchs/i18n/blob/v0.6.0/lib/i18n/backend/base.rb#L132). (3认同)
  • 语言环境文件中的模型名称应该是单数,而不是复数("表",而不是"表"). (2认同)

bru*_*077 13

您可以这样覆盖复数:

config/initializers/inflections.rb

做:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'Beleg', 'Belege'
end
Run Code Online (Sandbox Code Playgroud)