• D
    Make ActiveSupport::Inflector locale aware and multilingual · 7db0b073
    David Celis 提交于
    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
    locale?
    
    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')
        end
    
        '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: NDavid Celis <david@davidcelis.com>
    7db0b073
inflections.rb 8.0 KB