SoftwareQuality/jabref/docs/decisions/0041-use-one-form-for-singular-and-plural.md
Artem Semenovykh 415abbc47b import jabref
2024-11-16 11:43:42 +01:00

96 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
nav_order: 41
parent: Decision Records
---
<!-- we need to disable MD025, because we use the different heading "ADR Template" in the homepage (see above) than it is foreseen in the template -->
<!-- markdownlint-disable-next-line MD025 -->
# 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)
<!-- markdownlint-disable-file MD004 -->