Skip to main content

CLDR pravila množine: provjerite i18n množinske kategorije u svim jezicima

Engleski ima 2 množinska oblika, arapski 6, a ruski 4. Ako Vaša i18n konfiguracija podržava samo 'one' i 'other', aplikacija neće ispravno raditi na većini jezika. Ovaj vodič objašnjava CLDR pravila množine i njihovu provjeru.

1

Što su CLDR pravila množine?

Unicode CLDR (Common Locale Data Repository) definira šest množinskih kategorija: zero, one, two, few, many i other. Svaki jezik upotrebljava njihov podskup prema određenim brojčanim pravilima. Engleski upotrebljava one (točno 1) i other (sve ostalo). Većina jezika složenija je, a pogrešni množinski oblici stvaraju gramatički neispravan tekst zbog kojeg aplikacija djeluje neprofesionalno.

The plural problem
// English has 2 plural forms: one, other
// "1 item" vs "2 items"

// But many languages have more:
// Arabic: 6 forms (zero, one, two, few, many, other)
// Polish: 3 forms (one, few, other)
// Japanese: 1 form (other)
// Czech: 3 forms (one, few, other)

// If you only provide "one" and "other",
// Arabic and Polish users see broken text.
Kategorija 'other' obavezna je u svakom jeziku. Služi kao pričuvna kategorija kada se nijedna druga ne podudara. Definirate li samo 'one' i 'other', engleski će raditi ispravno, ali više od 60% svjetskih jezika neće.
2

Šest množinskih kategorija

CLDR definira točno šest množinskih kategorija. Ne upotrebljava svaki jezik svih šest: engleski ima samo dvije, a arapski svih šest. Vaše i18n datoteke moraju sadržavati kategorije potrebne svakom ciljnom jeziku, inače će korisnici vidjeti rušenja, sirove ključeve ili gramatički netočan tekst.

CLDR plural categories
// CLDR defines 6 plural categories:
// zero  - 0 items (Arabic, Latvian)
// one   - 1 item (most languages)
// two   - 2 items (Arabic, Welsh)
// few   - 2-4 items (Polish, Czech, Russian)
// many  - 5-19 items (Arabic, Polish, Russian)
// other - everything else (required for ALL languages)

// Examples by language:
// English:  one, other                    (2 forms)
// French:   one, many, other              (3 forms)
// Arabic:   zero, one, two, few, many, other  (6 forms)
// Japanese: other                         (1 form)
// Polish:   one, few, many, other         (4 forms)
// Russian:  one, few, many, other         (4 forms)
3

Množinske kategorije po jezicima

Brzi pregled množinskih kategorija potrebnih u često podržavanim ciljnim jezicima. Upotrijebite ga pri definiranju množinskih oblika u datotekama prijevoda.

Common mistakes
// MISTAKE 1: Only providing "one" and "other"
// en.json
{
  "items_one": "{{count}} item",
  "items_other": "{{count}} items"
}
// This breaks for Arabic (missing zero, two, few, many)

// MISTAKE 2: Hardcoded plural logic
// WRONG:
const text = count === 1 ? "1 item" : `${count} items`
// This fails for languages where "1" isn't the only "one" form

// MISTAKE 3: Missing "other" category
// "other" is REQUIRED for every language
// Without it, some numbers show raw keys

// MISTAKE 4: Translating plural RULES instead of text
// The CLDR rules (one, few, many) are universal
// Only the TEXT after each rule should be translated
4

Automatizirana provjera množine

i18n-validate provjerava definira li svaki množinski ključ u datotekama prijevoda sve CLDR kategorije potrebne ciljnom jeziku. Ako ruska datoteka sadrži samo oblike 'one' i 'other', alat će kategorije 'few' i 'many' koje nedostaju označiti kao pogreške. Pokrenite ga u CI-ju kako biste probleme s množinom otkrili prije korisnika.

Terminal
# Validate plural forms match CLDR requirements
npx i18n-validate --check-plurals \
  --source locales/en.json \
  --targets 'locales/*.json'

# Output:
# locales/ar.json:
#   items: missing plural forms: zero, two, few, many
#   Expected: zero, one, two, few, many, other
#   Found: one, other
#
# locales/pl.json:
#   items: missing plural forms: few, many
#   Expected: one, few, many, other
#   Found: one, other

# Fix: Add all required forms for each language
# See https://unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html
5

ICU MessageFormat za množinske oblike

Preporučeni način definiranja množinskih prijevoda jest ICU MessageFormat. Upotrebljava jedan tekst s ugrađenim pravilima množine: {count, plural, one {# item} other {# items}'}. ICU podržavaju react-intl, vue-i18n, Angular Transloco, Flutter i većina suvremenih i18n radnih okvira.

ICU plural messages
// ICU MessageFormat handles plurals correctly
// It uses CLDR rules internally

// en.json
{
  "items": "{count, plural, one {# item} other {# items}}"
}

// ar.json
{
  "items": "{count, plural, zero {لا عناصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}}"
}

// pl.json
{
  "items": "{count, plural, one {# element} few {# elementy} many {# elementów} other {# elementu}}"
}

// ICU also handles ordinals:
{
  "ranking": "{pos, selectordinal, one {#st} two {#nd} few {#rd} other {#th}}"
}
Terminal
# Validate ICU message syntax
npx i18n-validate --check-icu \
  --source locales/en.json \
  --targets 'locales/*.json'

# Catches:
# - Missing plural categories for the target language
# - Syntax errors in ICU messages
# - Mismatched variable names
# - Missing "other" (always required)
Simbol # u formatu ICU MessageFormat zamjenjuje se oblikovanim brojem. U množinskim oblicima upotrijebite # umjesto izravno upisanog naziva varijable. Primjerice, napišite '# item / # items' umjesto ponavljanja varijable broja.

Isprobajte i18n Agent odmah

Povucite datoteku za prijevod ovdje

JSON, YAML, PO, XML, CSV, Markdown, Properties

ili kliknite za odabir

Ciljni jezici

Registracija nije potrebnaProcjena odmah

Česta pitanja o CLDR pravilima množine