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 в компонентах.