Переопределить стандартное множественное число для имени модели в rails3

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

Sheet.model_name.human.pluralize # => Belegs

добавить меня в конце "е" вместо "с"

Sheet.model_name.human.pluralize # => Belege

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

3 ответа

Решение

Прежде всего, вам необходимо прекратить использование .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

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

В config/initializers/inflections.rb

делать:

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

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

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

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

Sheet.model_name.human(count: :many)
Другие вопросы по тегам