← Назад в блог

React.js i18n: настройка и использование локализации

Опубликовано
2 мин чтения
--- просмотров

Библиотека i18n

Часто используемая библиотека и подход к локализации.

Установка

  • Установи пакеты

    yarn add i18next i18next-browser-languagedetector i18next-xhr-backend
    
  • Посмотри на конфигурационный файл config/i18n/i18n.ts. Подключи его куда-нибудь в своём проекте

  • В index.tsx импортируй ранее добавленный i18n.ts

  • Помести файлы переводов в public/locales/${LOCALIZATION_NAME}/translation.json

Использование

Через специальный хук в компонентах
import { useTranslation } from 'react-i18next';
///...

const Component: React.FC = () => {
  const { t } = useTranslation();

  ///...
  return (
    <TextField
      fullWidth
      type="email"
      label={t('Email address')}
      InputLabelProps={{
        shrink: true
      }}
      {...getFieldProps('email')}
      error={Boolean(touched.email && errors.email)}
      helperText={touched.email && errors.email}
    />
  )
}
Компоненты с привязкой параметров
    // in functional component
    <Trans i18nKey="View all images" values={{ total }} />

    // in locales/en/translation.json
    {
      //...
      "View all images": "View all {{total}} images",
      //...
    }

    // in locales/cn/translation.json
    {
      //...
      "View all images": "查看所有 {{total}} 張圖片",
      //...
    }
Прямой способ, через утилиту

Это полезно, если у тебя есть строка для локализации в каких-то объектах (не в функциональных компонентах)

// importing file from ./config/18n/i18n.ts
import i18n from '~/utils/i18n';

const messages = {
  hello: i18n.t('world'),
};

Советы и хитрости

Чтобы сменить перевод, нужно изменить значение в local storage браузера с именем i18nextLng

или используй эту команду в консоли:

localStorage.setItem('i18nextLng', 'cn');

После этого обнови страницу, чтобы увидеть применённую новую локализацию сайта

Открыт для работы по контракту

Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.

Записаться на 30-минутный звонок