h1. Rich-pluralization Enrichments (e9s) module for localized pluralization h2. Introduction Rich-pluralization is a module of E9s ("http://github.com/archan937/e9s":http://github.com/archan937/e9s) which provides localized pluralization in combination with i18n. Doing this enables you to only translate words in singular form as the module pluralizes the translation for you. h3. Pluralization As as example, in the Dutch locale you can do the following:
>> "Appendix".pl => "Appendices"Dutch pluralization rules are provided along with Rich-pluralization and has a 86% test coverage out of 54977 words which are provided by "INL (Instituut voor Nederlandse Lexicologie)":http://www.inl.nl. Unfortunately we can't distribute the complete list of nouns due to the closed nature of the database. h3. Inflections Rich-pluralization preserves the casing in the pluralized result:
>> "huis".pl => "huizen" >> "Huis".pl => "Huizen" >> "HUIS".pl => "HUIZEN"*Note*: @I18n.locale@ is @:nl@ h2. Installation h3. Using Rich-pluralization as gem Install the Rich-pluralization gem:
sudo gem install rich_pluralizationAdd rich_pluralization in @environment.rb@ as a gem dependency:
config.gem "rich_pluralization"h3. Using Rich-pluralization as plugin Install the Rich-pluralization plugin:
./script/plugin install git://github.com/archan937/rich_pluralization.gitInstall i18n if you haven't already:
sudo gem install i18nh3. Testing Rich-pluralization out-of-the-box Set the default locale to @:nl@ in @environment.rb@:
config.i18n.default_locale = :nlRun the Rails console:
./script/consoleStart pluralizing in Dutch:
>> "Academicus".pl => "Academici"h2. Usage Just call the @pl@ method on string or symbols to pluralize. *Note*: @I18n.locale@ is @:nl@
>> "brief".pl => "brieven" >> "gebruiker".pl => "gebruikers" >> :museum.pl => "musea" >> "afspraak".pl => "afspraken"h3. String methods Rich-pluralization has enriched the String class with several inflection methods such as @upcase_first@, @cp_case@, @upcase_first!@ and @pluralize!@. Please visit "http://github.com/archan937/rich_pluralization/blob/master/lib/rich/pluralization/core/string/inflections.rb":http://github.com/archan937/rich_pluralization/blob/master/lib/rich/pluralization/core/string/inflections.rb to see all the methods. h3. Adding pluralization rules / inflections Rich-pluralization inflections resembles the inflections of @ActiveSupport::Inflector@. Unfortunately, specifying inflections within @config/initializers/inflections.rb@ influences your Rails application and thus causes great problems. To specify pluralization rules for different locales. You have to use regular expressions and put them in @config/locales/language.yml@. *Note*: specified in @config/locales/nl.yml@
--- nl: e9s: singular: - rule: en$ replacement: "" plural: - rule: ee$ replacement: eeën - rule: heid$ replacement: heden - rule: (c|m|n|t)us$ replacement: \1i - rule: | abc, acme, acne, (a|ë|i|o|u|y)$ replacement: \1's exceptions: (ai|eau|ei|li|lieu|ooi|ou|shampoo|spray|vlo)$ - rule: (blad|kind)$ replacement: \1eren exceptions: (aanrecht|advertentie)blad - rule: (e|em|el|er|erd|aar|aard|um|eur|foon|oor|ier|en|ie|eau|show|festival|é)$ replacement: \1s - rule: | (a|e|o|u)\1([^aeiou])$ replacement: \1\2en - rule: | (aï|alia)(s), ([^aeiou][aeiou])([^aeiou])$ replacement: \1\2\2en exceptions: dal, pad, slot, vat, weg, (blad|dag|dak|engel|gat|weg)$ - rule: f$ replacement: ven - rule: s$ replacement: zen - rule: $ replacement: en irregular: gelid: gelederen uncountable: - geld - informatie - rijstFor a complete example, please open "http://github.com/archan937/rich_pluralization/blob/master/locales/nl.yml":http://github.com/archan937/rich_pluralization/blob/master/locales/nl.yml which contains Dutch inflections. *Note*: The Dutch pluralization are tested on 54977 words provided by "INL (Instituut voor Nederlandse Lexicologie)":http://www.inl.nl. The test coverage is 86% (46366 words passed). h2. Contact me For support, remarks and requests please mail me at "paul.engel@holder.nl":mailto:paul.engel@holder.nl. h2. Credit This Rails gem / plugin depends on: i18n