Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"v8.9.004.05.2026
- "Добавить команду init"v7.5.930.12.2025
- "Инициализация истории"v5.5.1029.06.2025
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомЕсли у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.
Ссылка на документацию GitHubКопировать Markdown документа в буфер обмена
Переведите ваш Create React App с Intlayer | Интернационализация (i18n)
Смотрите Application Template на GitHub.
Что такое Intlayer?
Intlayer - это инновационная, открытая библиотека интернационализации (i18n), созданная для упрощения поддержки многоязычности в современных веб-приложениях.
С помощью Intlayer вы можете:
- Легко управлять переводами с использованием декларативных словарей на уровне компонентов.
- Динамически локализовать метаданные, маршруты и контент.
- Обеспечить поддержку TypeScript с автогенерируемыми типами, улучшая автозаполнение и обнаружение ошибок.
- Использовать расширенные функции, такие как динамическое определение и переключение локали.
Пошаговое руководство по настройке Intlayer в React-приложении
Установка зависимостей
Установите необходимые пакеты с помощью npm:
bashКопировать кодКопировать код в буфер обмена
intlayer
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, переводами, декларацией контента, транспиляцией и CLI-командами.
react-intlayer
Пакет, интегрирующий Intlayer с React-приложением. Он предоставляет провайдеры контекста и хуки для интернационализации в React.
react-scripts-intlayer
Включает команды и плагины
react-scripts-intlayerдля интеграции Intlayer с приложением на основе Create React App. Эти плагины основаны на craco и включают дополнительную конфигурацию для сборщика Webpack.Конфигурация вашего проекта
Создайте файл конфигурации для настройки языков вашего приложения:
intlayer.config.tsКопировать кодКопировать код в буфер обмена
import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Ваши другие локали ], defaultLocale: Locales.ENGLISH, }, }; export default config;Через этот файл конфигурации вы можете настроить локализованные URL-адреса, перенаправление через middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к документации по конфигурации.
Интеграция Intlayer в конфигурацию CRA
Измените ваши скрипты для использования react-intlayer
package.jsonКопировать кодКопировать код в буфер обмена
Скрипты
react-scripts-intlayerоснованы на CRACO. Вы также можете реализовать собственную настройку на основе плагина intlayer для craco. См. пример здесь.Декларация вашего контента
Создайте и управляйте декларациями контента для хранения переводов:
src/app.content.tsxКопировать кодКопировать код в буфер обмена
import { t, type Dictionary } from "intlayer"; import React, { type ReactNode } from "react"; const appContent = { key: "app", content: { getStarted: t<ReactNode>({ ru: ( <> Редактируйте <code>src/App.tsx</code> и сохраните для перезагрузки </> ), en: ( <> Edit <code>src/App.tsx</code> and save to reload </> ), fr: ( <> Éditez <code>src/App.tsx</code> et enregistrez pour recharger </> ), es: ( <> Edita <code>src/App.tsx</code> y guarda para recargar </> ), }), reactLink: { href: "https://reactjs.org", content: t({ ru: "Изучить React", en: "Learn React", fr: "Apprendre React", es: "Aprender React", }), }, }, } satisfies Dictionary; export default appContent;Ваши декларации контента могут быть определены в любом месте вашего приложения, если они включены в каталог
contentDir(по умолчанию,./src) и соответствуют расширению файла декларации контента (по умолчанию,.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).Для получения более подробной информации обратитесь к документации по декларации контента.
Если ваш файл контента включает код TSX, вам следует импортировать
import React from "react";в ваш файл контента.Использование Intlayer в вашем коде
Получите доступ к вашим словарям контента по всему приложению:
src/App.tsxКопировать кодКопировать код в буфер обмена
import logo from "./logo.svg"; import "./App.css"; import type { FC } from "react"; import { IntlayerProvider, useIntlayer } from "react-intlayer"; const AppContent: FC = () => { const content = useIntlayer("app"); return ( <div className="App"> <img src={logo} className="App-logo" alt="logo" /> {content.getStarted} <a className="App-link" href={content.reactLink.href.value} target="_blank" rel="noopener noreferrer" > {content.reactLink.content} </a> </div> ); }; const App: FC = () => ( <IntlayerProvider> <AppContent /> </IntlayerProvider> ); export default App;Примечание: если вы хотите использовать ваш контент в атрибуте
string, таком какalt,title,href,aria-labelи т.д., необходимо вызвать значение функции, например:htmlКопировать кодКопировать код в буфер обмена
Чтобы узнать больше о хуке
useIntlayer, обратитесь к документации.Изменение языка вашего контента
НеобязательноЧтобы изменить язык вашего контента, вы можете использовать функцию
setLocale, предоставляемую хукомuseLocale. Эта функция позволяет установить локаль приложения и обновить контент соответствующим образом.src/components/LocaleSwitcher.tsxКопировать кодКопировать код в буфер обмена
import { Locales } from "intlayer"; import { useLocale } from "react-intlayer"; const LocaleSwitcher = () => { const { setLocale } = useLocale(); return ( <button onClick={() => setLocale(Locales.English)}> Change Language to English </button> ); };Чтобы узнать больше о хуке
useLocale, обратитесь к документации.Добавьте локализованную маршрутизацию в ваше приложение
НеобязательноЦель этого шага - создать уникальные маршруты для каждого языка. Это полезно для SEO и удобных для SEO URL. Пример:
plaintextКопировать кодКопировать код в буфер обмена
По умолчанию маршруты не имеют префикса для локали по умолчанию. Если вы хотите добавить префикс для локали по умолчанию, вы можете установить опцию
middleware.prefixDefaultв значениеtrueв вашей конфигурации. Подробнее см. в документации по конфигурации.Чтобы добавить локализованную маршрутизацию в ваше приложение, вы можете создать компонент
LocaleRouter, который обернет маршруты вашего приложения и будет обрабатывать маршрутизацию на основе локали. Вот пример с использованием React Router:src/components/LocaleRouter.tsxКопировать кодКопировать код в буфер обмена
// Importing necessary dependencies and functions import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // Утилиты и типы из 'intlayer' // Утилиты и типы из 'intlayer' import type { FC, PropsWithChildren } from "react"; // Типы React для функциональных компонентов и пропсов import { IntlayerProvider } from "react-intlayer"; // Провайдер для контекста интернационализации import { BrowserRouter, Routes, Route, Navigate, useLocation, } from "react-router-dom"; // Компоненты роутера для управления навигацией // Деструктуризация конфигурации из Intlayer const { internationalization, middleware } = configuration; const { locales, defaultLocale } = internationalization; /** * Компонент, который обрабатывает локализацию и оборачивает дочерние элементы в соответствующий контекст локали. * Он управляет определением и проверкой локали на основе URL. */ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({ children, locale, }) => { const { pathname, search } = useLocation(); // Получить текущий путь URL // Определить текущую локаль, используя локаль по умолчанию, если не указана const currentLocale = locale ?? defaultLocale; // Удалить префикс локали из пути для построения базового пути const pathWithoutLocale = getPathWithoutLocale( pathname // Текущий путь URL ); /** * Если middleware.prefixDefault равно true, локаль по умолчанию всегда должна иметь префикс. */ if (middleware.prefixDefault) { // Проверить локаль if (!locale || !locales.includes(locale)) { // Перенаправить на локаль по умолчанию с обновлённым путём return ( <Navigate to={`/${defaultLocale}/${pathWithoutLocale}${search}`} replace // Замена текущей записи в истории на новую /> ); } // Обернуть дочерние элементы в IntlayerProvider и установить текущую локаль return ( <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> ); } else { /** * Когда middleware.prefixDefault равно false, локаль по умолчанию не имеет префикса. * Убедитесь, что текущая локаль действительна и не является локалью по умолчанию. */ if ( currentLocale.toString() !== defaultLocale.toString() && !locales .filter( (locale) => locale.toString() !== defaultLocale.toString() // Исключить локаль по умолчанию ) .includes(currentLocale) // Проверка, находится ли текущая локаль в списке допустимых локалей ) { // Перенаправление на путь без префикса локали return <Navigate to={`${pathWithoutLocale}${search}`} replace />; } // Оборачивание дочерних элементов с использованием IntlayerProvider и установки текущей локали return ( <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> ); } }; /** * Компонент маршрутизатора, который настраивает маршруты для конкретных локалей. * Использует React Router для управления навигацией и рендеринга локализованных компонентов. */ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => ( <BrowserRouter> <Routes> {locales .filter( (locale) => middleware.prefixDefault || locale !== defaultLocale ) .map((locale) => ( <Route // Шаблон маршрута для захвата локали (например, /en/, /fr/) и всех последующих путей path={`/${locale}/*`} key={locale} element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Оборачивает дочерние элементы с управлением локалью /> ))} { // Если префикс для локали по умолчанию отключен, рендерить дочерние элементы напрямую по корневому пути !middleware.prefixDefault && ( <Route path="*" element={ <AppLocalized locale={defaultLocale}>{children}</AppLocalized> } // Оборачивает дочерние элементы с управлением локалью /> ) } </Routes> </BrowserRouter> );Затем вы можете использовать компонент
LocaleRouterв вашем приложении:src/App.tsxКопировать кодКопировать код в буфер обмена
import { LocaleRouter } from "./components/LocaleRouter"; import type { FC } from "react"; // ... Ваш компонент AppContent const App: FC = () => ( <LocaleRouter> <AppContent /> </LocaleRouter> );Изменение URL при смене локали
НеобязательноЧтобы изменить URL при смене локали, вы можете использовать проп
onLocaleChange, предоставляемый хукомuseLocale. Параллельно можно использовать хукиuseLocationиuseNavigateизreact-router-domдля обновления пути URL.src/components/LocaleSwitcher.tsxКопировать кодКопировать код в буфер обмена
import { useLocation, useNavigate } from "react-router-dom"; import { Locales, getHTMLTextDir, getLocaleName, getLocalizedUrl, } from "intlayer"; import { useLocale } from "react-intlayer"; import { type FC } from "react"; const LocaleSwitcher: FC = () => { const { pathname, search } = useLocation(); // Получаем текущий путь URL. Пример: /fr/about?foo=bar const navigate = useNavigate(); const { locale, availableLocales, setLocale } = useLocale({ onLocaleChange: (locale) => { // Построить URL с обновленной локалью // Пример: /es/about?foo=bar const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale); // Обновить путь URL navigate(pathWithLocale); }, }); return ( <div> <button popoverTarget="localePopover">{getLocaleName(locale)}</button> <div id="localePopover" popover="auto"> {availableLocales.map((localeItem) => ( <a href={getLocalizedUrl(location.pathname, localeItem)} hrefLang={localeItem} aria-current={locale === localeItem ? "page" : undefined} onClick={(e) => { e.preventDefault(); setLocale(localeItem); }} key={localeItem} > <span> {/* Локаль - например, FR */} {localeItem} </span> <span> {/* Язык в своей локали - например, Français */} {getLocaleName(localeItem, locale)} </span> <span dir={getHTMLTextDir(localeItem)} lang={localeItem}> {/* Язык в текущей локали - например, Francés при текущей локали Locales.SPANISH */} {getLocaleName(localeItem)} </span> <span dir="ltr" lang={Locales.ENGLISH}> {/* Язык на английском - например, French */} {getLocaleName(localeItem, Locales.ENGLISH)} </span> </a> ))} </div> </div> ); };Ссылки на документацию:
Переключение атрибутов языка и направления в HTML
НеобязательноКогда ваше приложение поддерживает несколько языков, крайне важно обновлять атрибуты
langиdirтега<html>, чтобы они соответствовали текущей локали. Это обеспечивает:- Доступность: программы чтения с экрана и вспомогательные технологии полагаются на правильный атрибут
langдля точного произношения и интерпретации содержимого. - Отображение текста: атрибут
dir(направление) обеспечивает правильный порядок отображения текста (например, слева направо для английского, справа налево для арабского или иврита), что важно для удобочитаемости. - SEO: поисковые системы используют атрибут
langдля определения языка вашей страницы, помогая показывать правильный локализованный контент в результатах поиска.
Динамическое обновление этих атрибутов при смене локали гарантирует последовательный и доступный опыт для пользователей на всех поддерживаемых языках.
Реализация хука
Создайте пользовательский хук для управления атрибутами HTML. Хук отслеживает изменения локали и обновляет атрибуты соответствующим образом:
src/hooks/useI18nHTMLAttributes.tsxКопировать кодКопировать код в буфер обмена
import { useEffect } from "react"; import { useLocale } from "react-intlayer"; import { getHTMLTextDir } from "intlayer"; /** * Обновляет атрибуты `lang` и `dir` элемента <html> в зависимости от текущей локали. * - `lang`: Информирует браузеры и поисковые системы о языке страницы. * - `dir`: Обеспечивает правильный порядок чтения (например, 'ltr' для английского, 'rtl' для арабского). * * Это динамическое обновление необходимо для корректного отображения текста, доступности и SEO. */ export const useI18nHTMLAttributes = () => { const { locale } = useLocale(); useEffect(() => { // Обновляет атрибут языка на текущую локаль. document.documentElement.lang = locale; // Устанавливает направление текста в зависимости от текущей локали. document.documentElement.dir = getHTMLTextDir(locale); }, [locale]); };Использование хука в вашем приложении
Интегрируйте хук в главный компонент, чтобы атрибуты HTML обновлялись при каждом изменении локали:
src/App.tsxКопировать кодКопировать код в буфер обмена
import type { FC } from "react"; import { IntlayerProvider, useIntlayer } from "react-intlayer"; import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes"; import "./App.css"; const AppContent: FC = () => { // Примените хук для обновления атрибутов lang и dir тега <html> на основе локали. useI18nHTMLAttributes(); // ... Остальная часть вашего компонента }; const App: FC = () => ( <IntlayerProvider> <AppContent /> </IntlayerProvider> ); export default App;Применяя эти изменения, ваше приложение будет:
- Обеспечивать корректное отражение текущей локали в атрибуте языка (
lang), что важно для SEO и поведения браузера. - Настраивать направление текста (
dir) в соответствии с локалью, улучшая читаемость и удобство использования для языков с разным порядком чтения. - Обеспечивать более доступный опыт, поскольку вспомогательные технологии зависят от этих атрибутов для оптимальной работы.
- Доступность: программы чтения с экрана и вспомогательные технологии полагаются на правильный атрибут
Настройка TypeScript
Intlayer использует расширение модулей (module augmentation), чтобы получить преимущества TypeScript и сделать вашу кодовую базу более надежной.


Убедитесь, что ваша конфигурация TypeScript включает автогенерируемые типы.
Копировать код в буфер обмена
Конфигурация Git
Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.
Для этого вы можете добавить следующие инструкции в файл .gitignore:
Копировать код в буфер обмена
Расширение VS Code
Для улучшения вашего опыта разработки с Intlayer вы можете установить официальное расширение Intlayer для VS Code. Установить из VS Code Marketplace
Это расширение предоставляет:
- Автозаполнение ключей переводов.
- Обнаружение ошибок в реальном времени для отсутствующих переводов.
- Встроенный просмотр переведённого контента.
- Быстрые действия для лёгкого создания и обновления переводов.
Для получения дополнительной информации о том, как использовать расширение, обратитесь к документации по расширению Intlayer для VS Code.
Продвинутые возможности
Для расширения возможностей вы можете реализовать визуальный редактор или вынести ваш контент во внешний CMS.