Home/Guides/Plural rules
Guide

Plural rules by language, and why two forms is not enough

“1 file” and “5 files” is the whole problem in English, so English developers build for two cases. Polish needs four and Arabic needs six, and a file that ships two of them is not slightly wrong — it is wrong for most numbers.

What the categories mean

They are grammatical buckets, not amounts. “few” in Polish covers 2, 3 and 4 — and also 22, 23 and 24, but not 12, 13 or 14.

one

The singular form. In Russian and Polish this covers 21, 31 and 101 as well as 1.

few

Polish and Czech: numbers ending 2–4, excluding the teens. Romanian uses it for 0 and 2–19.

many

Slavic languages use it for the rest. French, Spanish, Italian and Portuguese use it only for large numbers.

The names come from Unicode CLDR, which is what every i18n library ultimately reads — i18next, ICU MessageFormat, gettext, Android and Flutter included. Getting them right is not a nicety; it is the difference between a sentence and a bug your Polish users see every day.

The table

CLDR cardinal plural categories, by language. A tick means your translation file needs a value for that form.
LanguagezeroonetwofewmanyotherForms
Arabic ar✓✓✓✓✓✓6
Chinese zh·····✓1
Czech cs·✓·✓✓✓4
Dutch nl·✓···✓2
English en·✓···✓2
French fr·✓··✓✓3
German de·✓···✓2
Italian it·✓··✓✓3
Japanese ja·····✓1
Korean ko·····✓1
Polish pl·✓·✓✓✓4
Portuguese pt·✓··✓✓3
Romanian ro·✓·✓·✓3
Russian ru·✓·✓✓✓4
Spanish es·✓··✓✓3
Turkish tr·✓···✓2
Ukrainian uk·✓·✓✓✓4

What goes wrong in practice

  1. 1The file is written for EnglishTwo keys, item.one and item.other. Polish inherits the shape and silently loses few and many.
  2. 2The translator cannot add what is not thereMost tools show a translator the forms the source file had, so the missing forms are invisible to the one person who would notice.
  3. 3It ships, and reads as brokenA Polish speaker sees the wrong ending on most numbers. It does not crash, so nobody files a bug — they just trust the product less.

locoloop holds the forms per language rather than per file: enable Polish and the editor shows four cells, and GET /status reports the forms a language is still missing by name. How each file format carries plurals →

Check your own file against this table

Import it and the editor will show you which forms are missing, by language. Free while you are evaluating.

Start freeLog inBook a demo