override default pluralize for model-name in rails3

前端 未结 3 2201
被撕碎了的回忆
被撕碎了的回忆 2020-12-05 04:54

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\"

<
相关标签:
3条回答
  • 2020-12-05 05:08

    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)
    
    0 讨论(0)
  • 2020-12-05 05:15

    You can override pluralizations this way:

    In config/initializers/inflections.rb

    do:

    ActiveSupport::Inflector.inflections do |inflect|
      inflect.irregular 'Beleg', 'Belege'
    end
    
    0 讨论(0)
  • 2020-12-05 05:31

    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
    
    0 讨论(0)
提交回复
热议问题