Make ActiveSupport::Inflector locale aware and multilingual #7197

merged 1 commit into from Jul 31, 2012
Commits on Jul 31, 2012
  1. Make ActiveSupport::Inflector locale aware and multilingual

    David Celis
    David Celis committed Jul 29, 2012
    The Inflector is currently not very supportive of internationalized
    websites. If a user wants to singularize and/or pluralize words based on
    any locale other than English, they must define each case in locale
    files. Rather than create large locale files with mappings between
    singular and plural words, why not allow the Inflector to accept a
    This patch makes ActiveSupport::Inflector locale aware and uses `:en`` unless
    otherwise specified. Users will still be provided a list of English (:en)
    inflections, but they may additionally define inflection rules for other
    locales. Each list is kept separately and permanently. There is no reason to
    limit users to one list of inflections:
        ActiveSupport::Inflector.inflections(:es) do |inflect|
          inflect.plural(/$/, 's')
          inflect.plural(/([^aeéiou])$/i, '\1es')
          inflect.plural(/([aeiou]s)$/i, '\1')
          inflect.plural(/z$/i, 'ces')
          inflect.plural(/á([sn])$/i, 'a\1es')
          inflect.plural(/é([sn])$/i, 'e\1es')
          inflect.plural(/í([sn])$/i, 'i\1es')
          inflect.plural(/ó([sn])$/i, 'o\1es')
          inflect.plural(/ú([sn])$/i, 'u\1es')
          inflect.singular(/s$/, '')
          inflect.singular(/es$/, '')
          inflect.irregular('el', 'los')
        'ley'.pluralize(:es)   # => "leyes"
        'ley'.pluralize(:en)   # => "leys"
        'avión'.pluralize(:es) # => "aviones"
        'avión'.pluralize(:en) # => "avións"
    A multilingual Inflector should be of use to anybody that is tasked with
    internationalizing their Rails application.
    Signed-off-by: David Celis <>