Learn more about the default plural types per language and how to set up custom plurals.
Plural rules are a critical component of software localization. They define the grammatical form used for nouns based on the corresponding numerical value in the source text. This ensures that translated messages accurately reflect the correct pluralization for each target language.
Plural Rule Categories
Zero: Used when the numerical value is zero (e.g., Arabic).
One: Used when the numerical value is one (e.g., “You have 1 new message”).
Two: Used specifically for the number two in some languages (e.g., Arabic, Hebrew, Welsh,…).
Few: Used for a small number greater than one (e.g., Polish, Czech, Ukrainian…).
Many: Used for a large numbers (eg. Polish, Arabic, Hebrew, Irish,…).
Other: The default category used for all other numerical values (e.g., “You have 5 unread emails”).
Different languages support different set of plural categories. By implementing plural rules, you can avoid awkward or grammatically incorrect translations when dealing with quantities. This enhances the user experience by presenting natural-sounding messages regardless of the target language.
Localazy default setup follows all integer plural types from the CLDR plural rules.
Using custom plurals (e.g. for decimals)
Localazy omits decimal-only plural variants defined in the standard by design because many i18n libraries don’t pass decimal numbers to the plural selector at all, and instead fallback to integer values.
gettext, for example, runs a pure integer formula, so any decimal you pass in gets floored before the category is resolved. Older versions of i18next had the same issue up until v21.
However, if your library expects decimal-specific plural types, you can set it up in the Developer Console.
Languages with omitted decimal plural types
Below is a table of languages that might need your attention, depending on the i18n library you are using.
Language
Code
Omitted category
Example
Belarusian
be
other
з 0,1 кнігі (0.1 books)
Czech
cs
many
1,5 dne (1.5 days)
Lithuanian
lt
many
0,1 obuolio (0.1 apples)
Manx
gv
many
1.5 dy hunnagyn (1.5 units)
Polish
pl
other
1,5 miesiąca (1.5 months)
Russian
ru
other
из 1,5 книги за 1,5 дня (1.5 books for 1.5 days)
Slovak
sk
many
1,5 dňa (1.5 days)
Ukrainian
uk
other
1,5 дня (1.5 days)
Custom plural definition
You can adjust the plural for any language in the Developer Console.
2 to 4, 22 to 24, 32 to 34, 42 to 44, 52 to 54, 62, 102, 1002, …
other
0, 5 to 19, 100, 1000, 10000, 100000, 1000000, …
ss: Swati
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
ssy: Saho
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
st: Southern Sotho
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
sv: Swedish
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
sw: Swahili
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
syr: Syriac
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
ta: Tamil
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
te: Telugu
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
teo: Teso
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
th: Thai
Type
Sample
other
0 to 15, 100, 1000, 10000, 100000, 1000000, …
ti: Tigrinya
Type
Sample
one
0, 1
other
2 to 17, 100, 1000, 10000, 100000, 1000000, …
tig: Tigre
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
tk: Turkmen
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
tl: Filipino
Type
Sample
one
0 to 3, 5, 7, 8, 10 to 13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, …
other
4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, …
tn: Tswana
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
to: Tongan
Type
Sample
other
0 to 15, 100, 1000, 10000, 100000, 1000000, …
tr: Turkish
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
ts: Tsonga
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
tzm: Central Atlas Tamazight
Type
Sample
one
0, 1, 11 to 24
other
2 to 10, 100 to 106, 1000, 10000, 100000, 1000000, …
ug: Uyghur
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
uk: Ukrainian
Type
Sample
one
1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …
few
2 to 4, 22 to 24, 32 to 34, 42 to 44, 52 to 54, 62, 102, 1002, …
many
0, 5 to 19, 100, 1000, 10000, 100000, 1000000, …
ur: Urdu
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
uz: Uzbek
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
ve: Venda
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
vi: Vietnamese
Type
Sample
other
0 to 15, 100, 1000, 10000, 100000, 1000000, …
vo: Volapük
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
vun: Vunjo
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
wa: Walloon
Type
Sample
one
0, 1
other
2 to 17, 100, 1000, 10000, 100000, 1000000, …
wae: Walser
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
wo: Wolof
Type
Sample
other
0 to 15, 100, 1000, 10000, 100000, 1000000, …
xh: Xhosa
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
xog: Soga
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
yi: Yiddish
Type
Sample
one
1
other
0, 2 to 16, 100, 1000, 10000, 100000, 1000000, …
yo: Yoruba
Type
Sample
other
0 to 15, 100, 1000, 10000, 100000, 1000000, …
yue: Cantonese
Type
Sample
other
0 to 15, 100, 1000, 10000, 100000, 1000000, …
zh: Chinese
Type
Sample
other
0 to 15, 100, 1000, 10000, 100000, 1000000, …
zu: Zulu
Type
Sample
one
0, 1
other
2 to 17, 100, 1000, 10000, 100000, 1000000, …
FAQs
How does Localazy's validation system prevent plural-related errors in my application?
The system automatically checks that all required plural forms have been provided for each language and ensures that variables and placeholders are consistently used across all plural variants — preventing runtime crashes due to missing placeholders.
For example, if a translator completes the “one” form but forgets the “other” form for a language, Localazy will flag this as incomplete.
This proactive validation approach means your applications will display correct plural forms across all languages.
Why can't I just use simple if/else logic for handling singular and plural forms in my app?
While it might seem straightforward to code singular and plural forms with a simple if/else statement in English, this approach quickly falls apart when dealing with other languages. Different languages have drastically different rules for plurals - English only differentiates between one and many, but languages like Czech and Polish require different forms for 1, 2-4, and 5+ items, while Arabic has six different plural forms depending on the count.
Even seemingly simple cases get complex quickly. Russian changes forms based on the last digit of the number, except when the second-to-last digit is 1. These complexities mean that hardcoding plural logic creates a maintenance nightmare with nested conditions that break easily when adding new languages.
Building and maintaining these linguistic rules yourself essentially requires becoming an expert in dozens of language grammars rather than focusing on your core product. When expanding to new markets, you’d need to rewrite parts of your app for each language’s plural system, potentially delaying your international launches. Using a proper localization system that handles these rules automatically is both faster and more reliable.
Last updated: 17/03/2025
Was this article helpful?
Please help us with improving our documentation. We appreciate all your feedback.