Ответ
Для интернационализации (i18n) чаще всего использую библиотеки:
- i18next – мощное решение с поддержкой плагинов (кеширование, детектор языка). Пример:
import i18n from 'i18next';
i18n.init({ lng: 'en', resources: { en: { translation: { key: 'value' }}});
- React-Intl (FormatJS) – популярен в React-экосистеме, поддерживает форматирование дат/чисел:
import { IntlProvider, FormattedMessage } from 'react-intl';
<IntlProvider locale="en" messages={messages}>
<FormattedMessage id="greeting" defaultMessage="Hello" />
</IntlProvider>
- LinguiJS – простой API с поддержкой ICU-сообщений и извлечением ключей.
Для небольших проектов можно обойтись JSON-файлами с переводами и контекстом. Важно учитывать:
- Динамическую загрузку переводов
- Плюрализацию (1 cat vs 2 cats)
- Форматирование дат/валют
- RTL-поддержку для арабского/иврита
Ответ 18+ 🔞
Да ты посмотри, какие у нас тут варианты для интернационализации, блядь! Прямо как в магазине — выбирай на вкус, сука.
Ну, первое, что в голову приходит, это i18next, конечно. Штука мощная, как трактор, ёпта. Подключил — и поехали. Там тебе и плагины на любой цвет: кеширование, детектор языка, который сам угадает, на каком наречии твой пользователь матерится. Примерчик, смотри:
import i18n from 'i18next';
i18n.init({ lng: 'en', resources: { en: { translation: { key: 'value' }}}});
Всё, блядь, инициализировал и сидишь, как папа Карло, строки переводишь.
А если ты на Реакте сидишь, как приклеенный, то тебе, возможно, ближе React-Intl (он же FormatJS). Тоже охуенный инструмент, между прочим. Особенно если нужно не просто слова менять, а даты, числа, валюты вот это всё красиво форматировать. Там уже немного по-другому:
import { IntlProvider, FormattedMessage } from 'react-intl';
<IntlProvider locale="en" messages={messages}>
<FormattedMessage id="greeting" defaultMessage="Hello" />
</IntlProvider>
Обернул провайдером — и всё приложение уже умное, полиглот, сука.
Есть ещё LinguiJS — для тех, кому i18next кажется перегруженным, а React-Intl — слишком реактовым. Простой API, сообщения по стандарту ICU, ключи из кода вытаскивает — красота, в общем.
А теперь, слушай сюда, самое главное, что часто забывают эти распиздяи, которые только за библиотеку хватаются. Если проект — маленькая сайтина на коленке, то можешь, блядь, и без этих монстров обойтись! Заведи себе JSON-файлик, накидай туда переводов и таскай их через контекст. И всё, пиши пропало.
Но! Вне зависимости от выбора, ёбаный насос, не забудь про три вещи:
- Плюрализацию. Чтобы правильно писать «1 кот» и «2 кота», а не «2 кот», как идиот.
- Форматирование дат и валют. А то у тебя американец увидит дату в формате «31.12.2024» и с ума сойдет, блядь.
- RTL-поддержку. Для арабского, иврита и прочих языков, где пишут справа налево. А то весь интерфейс съедет, и будет тебе пиздец, а не сайт.
Вот так вот, коротко и по делу, без воды. Выбирай, что душе угодно, и вперёд, переводить на языки мира, сука!