Переопределить стандартное множественное число для имени модели в 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)