--- nav_order: 41 parent: Decision Records --- # Use one language string for pluralization localization ## Context and Problem Statement For user-facing messages, sometimes, it needs to be counted: E.g., 1 entry updated, 2 entries updated, etc. In some languages, there is not only "one" and "more than one", but other forms: * zero → “لم نزرع أي شجرة حتى الآن” * one → “لقد زرعنا شجرة ١ حتى الآن” * two → “لقد زرعنا شجرتين ٢ حتى الآن” * few → “لقد زرعنا ٣ شجرات حتى الآن” * many → “لقد زرعنا ١١ شجرة حتى الآن” * other → “لقد زرعنا ١٠٠ شجرة حتى الآن” (Example is from [Pluralization: A Guide to Localizing Plurals](https://phrase.com/blog/posts/pluralization/)) How to localize pluralization? ## Decision Drivers * Good English language * Good localization to other languages ## Considered Options * Use one language string for pluralization (no explicit pluralization) * Use singular and plural * Handling of multiple forms ## Decision Outcome Chosen option: "Use one form only (no explicit pluralization)", because it is the most easiest to handle in the code. ## Pros and Cons of the Options ### Use one language string for pluralization (no explicit pluralization) Example: - `Imported 0 entry(s)` - `Imported 1 entry(s)` - `Imported 12 entry(s)` There are sub alternatives here: * `Imported %0 entry(ies)`. * `Number of entries imported: %0` (always use "other" plural form) These arguments are for the general case of using a single text for all kinds of numbers: * Good, because easy to handle in the code * Bad, because reads strange in English UI ### Use singular and plural Example: - `Imported 0 entries` - `Imported 1 entry` - `Imported 12 entries` * Good, because reads well in English * Bad, because all localizations need to take an `if` check for the count * Bad, because Arabic not localized properly ### Handling of multiple forms Example: - `Imported 0 entries` - `Imported 1 entry` - `Imported 12 entries` Code: `Localization.lang("Imported %0 entries", "Imported %0 entry.", "Imported %0 entries.", "Imported %0 entries.", "Imported %0 entries.", "Imported %0 entries.", count)` * Good, because reads well in English * Bad, because sophisticated localization handling is required * Bad, because no Java library for handling pluralization is known * Bad, because Arabic not localized properly ## More Information - [Language Plural Rules](https://www.unicode.org/cldr/charts/43/supplemental/language_plural_rules.html) - [Unicode CLDR Project's Plural Rules](https://cldr.unicode.org/index/cldr-spec/plural-rules) - [Implementation in Mozilla Firefox](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules) - [SX discussion on plural forms](https://english.stackexchange.com/a/90283/66058)