переопределение множественного числа по умолчанию для имени модели в rails3


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

Sheet.model_name.human.pluralize # => Belegs

Чтобы добавить мне букву "е" вместо "s"

Sheet.model_name.human.pluralize # => Belege

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

3 27

3 ответа:

Прежде всего, вам нужно прекратить использовать .pluralize. Он использует Флектор (который в основном используется для внутренних рельсов, например, угадывание имен таблиц для модели листа - > листов).

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

Do:

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)