override default pluralize for model-name in rails

2019-01-13 18:25发布

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 ?

3条回答
手持菜刀,她持情操
2楼-- · 2019-01-13 18:33

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
查看更多
我想做一个坏孩纸
3楼-- · 2019-01-13 18:53

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)
查看更多
地球回转人心会变
4楼-- · 2019-01-13 18:56

You can override pluralizations this way:

In config/initializers/inflections.rb

do:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'Beleg', 'Belege'
end
查看更多
登录 后发表回答