intermediate

Множественное число

Используйте ICU-style plural rules и локализованную структуру сообщений, чтобы count, gender, cases и грамматика были верны во всех языках.

Правила множественного числа зависят от языка: в английском one/other; в русском one/few/many; в арабском больше категорий. ICU MessageFormat и FormatJS обрабатывают `{count, plural, ...}` вместо `if (n === 1)` в коде приложения.

					{count, plural,
  =0 {No messages}
  one {# message}
  few {# messages}
  many {# messages}
  other {# messages}
}
				

| Антипаттерн | Почему ломается | |-------------|-----------------| | `count + " items"` | Порядок слов и грамматика различаются | | Английские правила везде | Славянские и арабские нуждаются в ветках | | Разбитое предложение по ключам | Переводчик не может переставить слова |

Держите целые предложения в одном message id; передавайте count, имена и gender, если грамматика требует согласования.

На интервью: категории plural в CLDR; i18next vs FormatJS; извлечение сообщений для переводчиков; plural + select в одном сообщении.

Типовые ошибки: склейка subject и object отдельно; нет ветки `=0`; не тестируют `21` (one) vs `22` (few) в русском; plural в JSX вместо каталога.

Компромисс — сложность workflow переводчиков против грамматически верного UI в каждой локали.

Чеклист:

  • Одно сообщение на целое предложение.
  • ICU plural/select в каталогах.
  • Тест 0, 1, 2, 5, 21 в целевых локалях.
  • Без string math в компонентах.