问题
my locale is :de and I like to get this:
Sheet.model_name.human.pluralize # => Belegs
to add me a trailing "e" instead of "s"
Sheet.model_name.human.pluralize # => Belege
just for the Sheet-class. Can I add it somehow in my config/locales/models/de.yml ?
回答1:
First of all, you need to stop using .pluralize
. It uses the Inflector (which is mainly used for Rails internals, e.g. guessing table names for model Sheet -> sheets).
Sheet.model_name.human # => "Beleg"
"Beleg".pluralize # => "Belegs"
What you should do is to use the :count
option.
Sheet.model_name.human(:count => 2) # => "Belege"
This requires that you have modified your de.yml
as such:
de:
...
activerecord:
...
models:
sheet:
one: Beleg
other: Belege
回答2:
You can override pluralizations this way:
In config/initializers/inflections.rb
do:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'Beleg', 'Belege'
end
回答3:
If you don't like explicit count number (like 2) you could use :many
e.g.
Sheet.model_name.human(count => :many)
or without hash rocket (for Ruby >= 1.9):
Sheet.model_name.human(count: :many)
来源:https://stackoverflow.com/questions/6178900/override-default-pluralize-for-model-name-in-rails3