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

时间:2011-05-30 16:56:49

标签: ruby-on-rails localization pluralize

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

Sheet.model_name.human.pluralize # => Belegs

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

Sheet.model_name.human.pluralize # => Belege

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

3 个答案:

答案 0 :(得分:53)

首先,您需要停止使用.pluralize。它使用Inflector(主要用于Rails内部,例如为模型Sheet猜测表名 - >表)。

Sheet.model_name.human # => "Beleg"
"Beleg".pluralize # => "Belegs"

您应该使用:count选项。

Sheet.model_name.human(:count => 2) # => "Belege"

这要求您修改了de.yml

de:

  ...

  activerecord:

    ...

    models:
      sheet:
        one: Beleg
        other: Belege

答案 1 :(得分:13)

您可以通过以下方式覆盖复数:

config/initializers/inflections.rb

做的:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'Beleg', 'Belege'
end

答案 2 :(得分:1)

如果您不喜欢明确的计数(例如2),您可以使用:many,例如

Sheet.model_name.human(count => :many)

或没有哈希火箭(对于Ruby> = 1.9):

Sheet.model_name.human(count: :many)