React Academy · Урок

Переключатель языка и отложенная загрузка переводов

Создайте переключатель локали и загружайте наборы переводов по требованию, чтобы уменьшить начальный размер.

Урок 4 из 413 шагов

«Переключатель языка и отложенная загрузка переводов» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Добро пожаловать

В этом уроке Вы создадите компонент переключателя языка и настроите i18next для загрузки пакетов переводов по мере необходимости, уменьшив первоначальный объём JavaScript-кода.

Простой переключатель языка

Вызовите i18n.changeLanguage() при нажатии кнопки, чтобы переключить активный язык. Все компоненты, использующие useTranslation, автоматически перерисуются на новом языке.
function LanguageSwitcher() {
  const { i18n } = useTranslation();
  return (
    <div>
      {['en', 'tr', 'fr'].map(lng => (
        <button
          key={lng}
          onClick={() => i18n.changeLanguage(lng)}
          style={{ fontWeight: i18n.language === lng ? 'bold' : 'normal' }}
        >
          {lng.toUpperCase()}
        </button>
      ))}
    </div>
  );
}

Сохранение выбранного языка

Сохраняйте выбранный язык в localStorage, чтобы он не сбрасывался после перезагрузки страницы. Плагин LanguageDetector делает это автоматически с помощью порядка обнаружения `localStorage`.
i18n.init({
  detection: {
    order: ['localStorage', 'navigator'],
    caches: ['localStorage'],
  },
});

Зачем нужна отложенная загрузка переводов

Включение всех переводов в пакет JavaScript увеличивает время первоначальной загрузки. При отложенной загрузке при первом запуске отправляется только язык по умолчанию, а остальные языки загружаются лишь при переключении пользователя.

Настройка HTTP-бэкенда

Плагин i18next-http-backend загружает файлы переводов по шаблону URL. Переводы хранятся в папке `public/` и предоставляются как статические ресурсы — серверный код не требуется.
import Backend from 'i18next-http-backend';

i18n.use(Backend).init({
  backend: {
    loadPath: '/locales/{{lng}}/{{ns}}.json',
  },
  ns: ['common', 'auth'],
  defaultNS: 'common',
});

Добавление файлов переводов

Создайте отдельный JSON-файл для каждого языка и каждого пространства имён в `public/locales/`. HTTP-бэкенд автоматически загружает их, когда язык или пространство имён впервые понадобятся.
public/locales/
  en/common.json
  en/auth.json
  tr/common.json
  tr/auth.json

Отображение состояния загрузки при переключении языка

После вызова changeLanguage() i18next асинхронно загружает файлы нового языка. Подпишитесь на событие `i18n.on('languageChanged')` или проверьте `i18n.isInitialized`, чтобы показать индикатор загрузки.
const [switching, setSwitching] = useState(false);

const change = async (lng) => {
  setSwitching(true);
  await i18n.changeLanguage(lng);
  setSwitching(false);
};

Отложенная загрузка отдельных пространств имён

Загружайте пространство имён только при первом обращении к нему с помощью `i18n.loadNamespaces(['dashboard'])`. Вызовите это в useEffect при монтировании маршрута панели управления, чтобы не загружать его для неаутентифицированных пользователей.
useEffect(() => {
  i18n.loadNamespaces('dashboard');
}, []);

CDN для переводов

В рабочем окружении размещайте файлы переводов в CDN (S3 + CloudFront). Обновите `loadPath`, указав URL CDN. Это отделяет обновление переводов от развёртывания кода.
backend: {
  loadPath: 'https://cdn.example.com/locales/{{lng}}/{{ns}}.json',
}

Локаль в URL

Многие приложения встраивают локаль в URL (например, /en/products, /tr/products). Объедините React Router с i18n: прочитайте локаль из параметра URL, вызовите changeLanguage и обновите URL, когда пользователь переключает язык.

Быстрая проверка

Что делает плагин i18next-http-backend?

Итоги

Создайте переключатель языка с помощью i18n.changeLanguage(). Сохраняйте выбор с помощью определителя localStorage. Используйте i18next-http-backend для отложенной загрузки файлов переводов. Показывайте состояние загрузки при переключении языка. Для рабочего окружения размещайте файлы в CDN.

Курс завершён

Поздравляем! Вы завершили курс **Интернационализация (i18n) в React**. Теперь Вы умеете настраивать react-i18next, переводить строки с помощью пространств имён, обрабатывать формы множественного числа и интерполяцию, а также загружать файлы переводов по мере необходимости.
Можно начать бесплатно

Изучай React с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
88
Уроки
324

Часто задаваемые вопросы

Урок «Переключатель языка и отложенная загрузка переводов» бесплатный?

Да — полный текст урока «Переключатель языка и отложенная загрузка переводов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Переключатель языка и отложенная загрузка переводов»?

Создайте переключатель локали и загружайте наборы переводов по требованию, чтобы уменьшить начальный размер. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Переключатель языка и отложенная загрузка переводов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Настройка react-i18next
  2. Использование хука useTranslation
  3. Множественное число и интерполяция
  4. Переключатель языка и отложенная загрузка переводов
← Назад к React Academy