Одной из функций, запрошенных для моего личного приложения, было добавление нескольких языков! А именно немецкий и испанский. Поэтому я решил пойти дальше и изучить react-i18next.
Вот краткое описание от команды react-i18next того, для чего это нужно:
react-18next — это мощная платформа интернационализации для React/React Native, основанная на i18next
После этого краткого введения давайте продолжим и приступим к настройке!
Настройка
Для начала установим необходимые пакеты:
npm install react-i18next i18next
С созданными пакетами создадим файл конфигурации в корне, назовем его i18n.ts
.
Примечание. Я использую TypeScript.
В файле мы продолжим и импортируем необходимые модули из пакетов, которые мы только что установили:
Несколькими строками ниже мы начнем настройку.
Конфигурация
Платформа i18next ожидает ресурсы для различных локализаций. Это делается с помощью пары ключ:значение перевода и фактического текста. В идеале это должно быть разделено на разные локали, поэтому, например, в моем приложении для немецкого, испанского и английского объект ресурса будет выглядеть так:
Для заполнения ресурсов я лично предпочитаю создать папку с именем locale и начать помещать в нее свои переводы:
Затем я импортирую их в файл конфигурации и устанавливаю значения внутри объекта ресурса:
Небольшой пример файла ресурсов (в формате JSON):
{ "about": "Über" }
После этого мы создадим languageDetector
, эта часть конфигурации определит, какой язык отображать при запуске приложения:
Давайте разберем это: объект languageDetector
ожидает несколько свойств. Во-первых, тип, указывающий, что это languageDetector
. После этого мы обозначим его как асинхронный процесс. Настоящим мясом и костями этого является свойство detect, в моем случае у меня есть хранилище Zustand для получения языка, важно использовать функцию обратного вызова свойства обнаружения, чтобы установить его правильно.
Это потребует код языка, который непосредственно соответствует ресурсам, которые мы настроили ранее. В моем случае мне не нужны функции инициализации или свойства cacheUserLanguage, поэтому я просто оставляю их пустыми для целей Typescript.
Важно: если у вас нет языка для пользователя, хранящегося в каком-то другом месте, и вы просто хотите получить его прямо из браузера, для этого есть специальный пакет!
npm install i18next-browser-languagedetector
Это определит язык в браузере. После установки вы можете импортировать его из пакета:
import LanguageDetector from 'i18next-browser-languagedetector';
Последний шаг — создать экземпляр i18n и экспортировать его!
По сути, мы просто подключаем все ранее настроенные свойства. В функции инициализации мы устанавливаем fallbackLng
на случай, если наш languageDetector
не сработает.
Заключительные шаги
В нашем корневом файле, где мы изначально отображаем наше дерево React, давайте продолжим и импортируем наш файл конфигурации:
import './i18n';
Теперь вы можете начать вызывать ключи локализации, используя пространство имен и ключ с хуком, предоставленным react-i18next:
Здесь common
— это подсвойство объекта ресурса, который мы установили ранее, чтобы разделить наши локализации! Аккуратный! а затем я просто вызываю ключ из JSON-файла, и он отображает правильный перевод.
Примечание. Вы можете динамически установить язык с другим свойством внутри возвращаемого значения useTranslation
хука:
Если у вас есть какой-либо другой способ настроить локализацию для вашего приложения или какой-либо отзыв, оставьте его в комментариях ниже!
Больше контента на Relatable Code
Первоначально опубликовано на https://relatablecode.com 23 января 2022 г.
Создавайте компонуемые приложения
Не создавайте веб-монолиты. Используйте Bit для создания и компоновки несвязанных программных компонентов — в ваших любимых фреймворках, таких как React или Node. Создавайте масштабируемые и модульные приложения с мощными и приятными возможностями разработки.
Перенесите свою команду в Bit Cloud, чтобы совместно размещать и совместно работать над компонентами, а также значительно ускорить, масштабировать и стандартизировать разработку в команде. Начните с компонуемых интерфейсов, таких как Design System или Micro Frontends, или исследуйте компонуемый сервер. Попробуйте →