Localizely logo
  • Home
  • Getting started
  • How it works
  • Pricing
  • FAQ
Sign up

I18n questions · ICU message format

Why does my ICU plural translation show the wrong form? 

Almost always because a branch name was read as a number. one, few and many are CLDR categories whose meaning depends on the language, and a category without a branch silently falls back to other. The usual causes, in order of frequency:

  1. one is not "exactly 1". In English it covers only 1, but in French it also covers 0, and in Russian it covers 1, 21, 31 and 101 but not 11. A Russian branch one {You have one new message} is therefore shown for 21 messages too, because the category describes the grammatical form of the noun, not the quantity. For a sentence about exactly one, use the exact match =1, which is checked before the categories in every language.

  2. The source language's categories were copied. English needs one and other; Polish needs one, few, many and other. A Polish translation that keeps the English structure, {n, plural, one {# plik} other {# plików}}, prints 2 plików instead of 2 pliki, because few is missing and 2 falls back to other. Translators must use the categories of their own language, listed per language on the language plural rules page.

  3. other is missing. ICU refuses to parse a plural or select without it, so the whole message fails rather than a single form (ICU4J throws IllegalArgumentException: Missing 'other' keyword in plural pattern).

  4. zero was used for 0. zero is a real category only in a few languages, such as Arabic and Latvian. In English it is never selected, so zero {No items} is dead text and 0 prints 0 items. Use =0 for a special case at zero.

  5. The formatter's locale is wrong. The plural rules and the formatting of # come from the locale the message is formatted with, not from the text of the translation. A Russian message formatted with an English MessageFormat applies English rules, so 5 lands in other and prints 5 файла instead of 5 файлов, and # is grouped the English way (1,000).

A translation tool with plural validation catches the second and third causes before release. Localizely's QA checks, for example, flag a plural translation that is missing one of the forms its language requires. To see which branch a value selects, paste the message and pick the language in the ICU message editor.

Published Oct 9, 2026 · Markdown version

Related ICU message format questions:

ICU message format guide:

Read the quick guide to ICU message format
Localizely logo
About
Free tools
Boring stuff
  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • Compare
Newsletter
Copyrights 2026 © Localizely