Skip to main content

Množinska pravila CLDR: preverjanje kategorij množine pri internacionalizaciji v različnih jezikih

Angleščina ima 2 množinski obliki. Arabščina jih ima 6. Ruščina jih ima 4. Če Vaša nastavitev i18n obravnava samo kategoriji 'one' in 'other', Vaša aplikacija v večini jezikov ne deluje pravilno. V tem vodniku so pojasnjena množinska pravila CLDR in postopek njihovega preverjanja.

1

Kaj so množinska pravila CLDR?

Unicode CLDR (Common Locale Data Repository) določa šest kategorij množine: zero, one, two, few, many in other. Vsak jezik uporablja podmnožico teh kategorij s posebnimi številskimi pravili. Angleščina uporablja one (natanko 1) in other (vse drugo). Toda večina jezikov je bolj zapletena — napačne množinske oblike povzročijo slovnično nepravilno besedilo, zaradi katerega Vaša aplikacija deluje nestrokovno.

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' je obvezna za vsak jezik. Uporabi se kot nadomestna možnost, kadar se ne ujema nobena druga kategorija. Če določite samo 'one' in 'other', bo rešitev pravilna v angleščini, vendar ne bo delovala v več kot 60 % svetovnih jezikov.
2

Šest kategorij množine

CLDR določa natanko šest kategorij množine. Vsi jeziki ne uporabljajo vseh šestih — angleščina uporablja samo dve, arabščina pa vseh šest. Vaše datoteke i18n morajo določati kategorije, ki jih zahteva posamezni ciljni jezik, sicer uporabniki vidijo zrušitve, neobdelane ključe ali slovnično nepravilno besedilo.

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

Kategorije množine po jezikih

Hiter pregled kategorij množine, ki jih zahtevajo pogosti ciljni jeziki. Uporabite ga pri določanju množinskih oblik v svojih prevodnih datotekah.

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

Samodejno preverjanje množine

Orodje i18n-validate preveri, ali vsak množinski ključ v Vaših prevodnih datotekah določa vse kategorije CLDR, ki jih zahteva ciljni jezik. Če Vaša ruska datoteka vsebuje samo obliki 'one' in 'other', orodje manjkajoči kategoriji 'few' in 'many' označi kot napaki. Zaženite ga v okolju CI, da odkrijete težave z množino, preden dosežejo uporabnike.

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žino

Za določanje množinskih prevodov priporočamo ICU MessageFormat. Uporablja en sam niz z vdelanimi množinskimi pravili: {count, plural, one {# element} other {# elementov}'}. ICU podpirajo react-intl, vue-i18n, Angular Transloco, Flutter in večina sodobnih ogrodij za i18n.

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 # v zapisu ICU MessageFormat se nadomesti z oblikovanim številom. V množinskih oblikah uporabite #, namesto da bi ime spremenljivke zapisali neposredno. Napišite na primer '# element / # elementov', namesto da bi izrecno ponavljali spremenljivko s številom.

Preizkusite i18n Agent zdaj

Spustite prevajalsko datoteko sem

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

ali kliknite za izbiro

Ciljni jeziki

Registracija ni potrebnaTakojšnja ocena

Pogosta vprašanja o množinskih pravilih CLDR