Why Slavic Languages Need More Than One Plural Category
9 min read · updated August 11, 2026
English needs two forms: 1 file, 2 files. Russian needs three for whole numbers and Polish needs three that are drawn differently. The ranges look arbitrary until you know that they are not about quantity at all — they are the fossilised remains of a case ending.
The sequence, in two languages
Take one noun in each language and count. Russian рубль (rouble), Polish złoty:
RUSSIAN POLISH 1 рубль (one) 1 złoty (one) 2 рубля (few) 2 złote (few) 3 рубля (few) 3 złote (few) 4 рубля (few) 4 złote (few) 5 рублей (many) 5 złotych (many) 11 рублей (many) 11 złotych (many) 12 рублей (many) 12 złotych (many) 21 рубль (one) 21 złotych (many) ← the divergence 22 рубля (few) 22 złote (few) 25 рублей (many) 25 złotych (many) 101 рубль (one) 101 złotych (many) 112 рублей (many) 112 złotych (many)
Three distinct forms of the noun, selected by a rule about the last one or two digits of the number. A system that stores one singular and one plural has no slot for the third form, and a system that picks between them with n === 1 ? singular : plural is wrong from n = 2 onwards.
Two values are missing from that table and both are worth adding to any fixture set. Zero takes the same form as five — 0 рублей, 0 złotych — which is not obvious if you expect zero to pattern with the plural of a two-form language. And a number written with a decimal part takes a fourth form again: 1,5 рубля, 1,5 złotego, the genitive singular, regardless of the digits. That fourth form is why both languages are listed with four categories rather than three, and it is the one a hand-written implementation almost always omits, because integer test data never reaches it.
Where the categories came from
The forms are not plurals. They are cases, and the numeral governs them.
Proto-Slavic had three numbers: singular, dual and plural. The dual was used for exactly two of something, and it was the required form after the numeral two. When the dual collapsed in most of the family — Slovene and Sorbian kept it — its endings did not vanish. They were reanalysed as the form you use after 2, and then extended to 3 and 4 by analogy. In modern Russian, the form after 2, 3 and 4 is formally the genitive singular (рубля), and it is a coincidence of history rather than a statement about quantity.
From 5 upwards a different construction applies: the numeral behaves like a quantity noun and takes the genitive plural, which is why Russian has пять рублей and Polish pięć złotych. So the three “plural categories” of a Slavic language are really three different syntactic environments: nominative-ish after 1, genitive-singular after 2–4, genitive-plural after 5+. The same machinery explains why the noun also changes when the whole phrase is in an oblique case; that is a wider problem covered in Russian case agreement in generated text.
The category names are labels, not meanings
Unicode’s CLDR names these categories one, few, many and other, and the names mislead everyone once. They are arbitrary identifiers for “the set of numbers that take form A”, chosen because they are mnemonic in some languages, and they carry no semantics. In Polish, the category called many includes 0, 5, 12 and 19; the category called one contains exactly the number 1 and nothing else. In Russian, one contains 1, 21, 31, 101 and 1001.
The corollary matters for anyone wiring up a message format: you cannot infer the rule from the name, and you cannot reuse a language’s category set for its neighbour. The rules are data. They live in the CLDR supplemental data and are browsable in Unicode’s language plural rules chart.
Where Russian and Polish disagree
Look again at 21. Russian treats it as one — the noun goes back to the nominative singular, двадцать один рубль. Polish treats 21 as many — dwadzieścia jeden złotych, genitive plural.
The reason is that the two languages resolved the agreement of compound numerals differently. Russian lets the final element of the numeral govern the noun, so anything ending in one (except 11) behaves like 1, and anything ending in 2–4 (except 12–14) behaves like 2. Polish agrees with Russian on the 2–4 part — 22 złote, 34 złote — but not on the 1 part: only the bare numeral 1 triggers the singular, and every compound ending in 1 takes the genitive plural.
That single difference is why a translation memory keyed on Russian cannot be reused for Polish, and why an application that got Russian plurals right by hand will still be wrong in Polish at 21, 31, 41 and every hundred-and-one. Ukrainian follows the Russian pattern here; Czech and Slovak follow the 2–4 split but treat fractional values separately, giving them a fourth category that Polish uses too. The exact boundaries for Polish, with the two things CLDR does not encode, are in Polish plural forms for 1, 2–4 and 5+.
What this means for generated text
Two different problems, and they need different fixes.
- Model-generated prose usually gets these right in running text, because the numeral and the noun are adjacent and the pattern is overwhelmingly attested. It gets them wrong when the number is large, unusual, or written as digits in a context that would normally be spelled out — and wrong in a way that is grammatical-looking and easy to miss on review.
- Template interpolation is where it becomes systematic. A string like
Найдено {n} файловis correct for 5 and wrong for 1, 2, 3, 4, 21, 22 and so on. If a model wrote your localisation file from an English source with two forms, it produced two forms, and no amount of later prompting fixes a data structure that has no third slot. This is the case for using the ICU plural syntax rather than a string with a placeholder — see ICU MessageFormat plural rules.
The practical rule when asking a model for Slavic strings: never ask for a translation of a sentence with a number in it. Ask for the plural forms of the noun phrase in the required cases, then assemble. The model is good at morphology it can see and bad at deciding, three layers of abstraction away, that your template needs a form it was never asked for.