переопределить стандартное множественное число для имени модели в rails3 - PullRequest
27 голосов
/ 30 мая 2011

моя локаль: де, и мне нравится получать это:

Sheet.model_name.human.pluralize # => Belegs

чтобы добавить трейлинг "e" вместо "s"

Sheet.model_name.human.pluralize # => Belege

только для листового класса. Могу ли я добавить его как-нибудь в мой config / locales / models / de.yml?

Ответы [ 3 ]

53 голосов
/ 30 мая 2011

Прежде всего, вам необходимо прекратить использование .pluralize.Он использует Inflector (который в основном используется для внутренних компонентов Rails, например, угадывает имена таблиц для модели Sheet -> 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
13 голосов
/ 30 мая 2011

Вы можете переопределить множественное число следующим образом:

В config/initializers/inflections.rb

сделать:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'Beleg', 'Belege'
end
1 голос
/ 27 марта 2015

Если вам не нравится явное число (например, 2), вы можете использовать :many например

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

или без хэш-ракеты (для Ruby> = 1,9):

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