i18n в SPA — рабочий стек
Локализация SPA — это не «переведём строки». Это даты, числа, валюты, плюрализация, RTL, SEO. Что взять.
Локализация веб-приложения — это не «переведём кнопки». Это:
- Тексты UI (кнопки, лейблы, ошибки).
- Контент (статьи, описания товаров).
- Даты, времена в локальном формате.
- Числа, валюты, единицы измерения.
- Плюрализация (1 файл / 2 файла / 5 файлов).
- RTL — для арабского, иврита.
- SEO — отдельные URL для языков, hreflang.
Стек, который работает:
- react-i18next или next-intl — для UI-строк.
- Intl API (встроенный в браузеры) — для дат, чисел, валют. Не таскать moment.js, он deprecated.
- ICU MessageFormat — для плюрализации и сложных подстановок.
- Контентные переводы — отдельная база/CMS, не в JS-бандле.
Что обычно ломается:
- Хардкоды строк прямо в JSX. Стартуют без i18n, потом мигрировать сложно.
- Неправильная плюрализация — английские правила (1/many) применяют к русскому, а у нас 1/few/many.
- SEO — ошибочные hreflang, дубли индекса.
- Все переводы в одном огромном JSON, который грузится целиком на каждой странице.