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

3.1 KiB
Raw Blame History

nav_order parent
41 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)

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