
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.
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.
// 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.Š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 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)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.
// 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 translatedSamodejno 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.
# 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.htmlICU 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 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}}"
}# 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)Preizkusite i18n Agent zdaj
Spustite prevajalsko datoteko sem
JSON, YAML, PO, XML, CSV, Markdown, Properties
ali kliknite za izbiro
Ciljni jeziki