Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Init history"v8.13.005.06.2026
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Миграция с next-i18next на Intlayer
Почему стоит перейти с next-i18next на Intlayer?
Вместо того чтобы загружать огромные JSON-файлы на ваших страницах, загружайте только необходимый контент. Intlayer помогает сократить размер бандла и страниц до 50%.
Локализация контента на уровне компонентов и разделов делает крупные приложения удобными для поддержки. Вы можете дублировать или удалять целые директории с фичами без необходимости пересматривать всю базу контента. Кроме того, Intlayer строго типизирован, что гарантирует правильность вашего контента на уровне TypeScript.
Intlayer также является наиболее активно развивающимся решением в экосистеме i18n — проблемы решаются быстро, регулярно добавляются адаптеры для новых фреймворков, а основное API постоянно дорабатывается на основе реальных отзывов разработчиков.
Колокация контента сокращает контекст, необходимый для работы Больших Языковых Моделей (LLM). Intlayer также предоставляет набор инструментов, таких как CLI для тестирования отсутствующих переводов, LSP, MCP и Навыки для Агентов (Agent Skills), чтобы сделать процесс разработки (DX) еще более плавным для ИИ-агентов.
Автоматизируйте переводы в вашем CI/CD-пайплайне, используя любую LLM по вашему выбору по цене вашего ИИ-провайдера. Intlayer также предоставляет компилятор для автоматического извлечения контента, а также веб-платформу для помощи с фоновым переводом.
Привязка огромных JSON-файлов к компонентам может привести к проблемам с производительностью и реактивностью. Intlayer оптимизирует загрузку контента на этапе сборки (build-time).
Будучи больше, чем просто решением i18n, Intlayer предоставляет визуальный редактор (self-hosted) и полноценную CMS, чтобы помочь вам управлять мультиязычным контентом в реальном времени, делая сотрудничество с переводчиками, копирайтерами и другими членами команды бесшовным. Контент может храниться как локально, так и/или удаленно.
Стратегии миграции
Поскольку next-i18next использует "под капотом" react-i18next и i18next, существует две дополняющие друг друга стратегии миграции на Intlayer:
Адаптер совместимости (рекомендуется для существующих приложений) — Установите
@intlayer/next-i18next,@intlayer/react-i18nextи@intlayer/i18next. Эти пакеты предоставляют абсолютно те же API, что и оригиналы, но перенаправляют всю логику переводов в Intlayer. Ваши текущие вызовыuseTranslation,appWithTranslation,serverSideTranslationsи маршрутизация страниц Next.js останутся нетронутыми — изменится только настройка и инициализация.Полная миграция — Постепенно заменяйте API
next-i18nextна нативные хуки Intlayer (useIntlayer) и переводите ваш контент в файлы.content.ts, размещая их рядом с компонентами.
В этом руководстве сначала рассматривается Стратегия 1 (адаптер совместимости без существенных изменений), а затем — опциональная полная миграция.
Оглавление
Быстрая миграция
Следующие шаги — это необходимый минимум для запуска вашего приложения Next.js (Pages Router) с Intlayer, не меняя код ни одной страницы или компонента.
Установка зависимостей
Установите основные пакеты Intlayer и адаптеры совместимости:
bashКопировать кодКопировать код в буфер обмена
npm install intlayer next-intlayer react-intlayer @intlayer/next-i18next @intlayer/react-i18next @intlayer/i18next @intlayer/sync-json-pluginnpx intlayer initВы можете безопасно оставить установленными пакеты
next-i18next,react-i18nextиi18nextво время миграции, пока все алиасы не будут настроены.Настройка Intlayer
Команда
intlayer initсоздает базовый файл конфигурацииintlayer.config.ts. Обновите его, указав ваши текущие локали, и настройте плагинsyncJSONна ваши файлы сообщенийnext-i18next(обычно расположенные вpublic/locales):intlayer.config.tsКопировать кодКопировать код в буфер обмена
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Добавьте все ваши текущие локали сюда ], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ // соответствует синтаксису плейсхолдеров i18next: {{name}} format: "i18next", source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`, location: "public/locales", }), ], }; export default config;sourceсопоставляет локаль и namespace (key) с путем к вашему JSON-файлу.locationсообщает вотчеру (watcher) Intlayer, за какой папкой нужно следить для отслеживания изменений. Настройкаformat: 'i18next'гарантирует правильную обработку плейсхолдеров, используемых вnext-i18next.Обновление конфигурации Next.js
Оберните ваш текущий
next.config.ts(или.js) функциейcreateNextI18nPluginиз@intlayer/next-i18next/plugin. Эта функция-обертка применяетwithIntlayerи одновременно настраивает алиасы дляnext-i18next/react-i18next/i18next→@intlayer/*. Таким образом, во время сборки ваши импорты вродеimport { useTranslation } from 'next-i18next'будут прозрачно перенаправлены. Вносить изменения в исходный код не требуется.next.config.tsКопировать кодКопировать код в буфер обмена
import type { NextConfig } from "next"; import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin"; // Импорт конфигурации i18n из next-i18next.config.js можно удалить // import { i18n } from './next-i18next.config'; const withIntlayer = createNextI18nPlugin(); const nextConfig: NextConfig = { // Intlayer обрабатывает нативную маршрутизацию i18n в Next.js "под капотом", // так что вам больше не нужно передавать объект i18n сюда. }; export default withIntlayer(nextConfig);Файл
next-i18next.config.jsбольше не нужен. Intlayer компилирует все словари на этапе сборки (build-time) и берет на себя бесшовное определение локали, маршрутизацию и загрузку словарей.Предпочитаете использовать чистый плагин
withIntlayerизnext-intlayer/server? При его использовании словари будут скомпилированы, но алиасы дляnext-i18next/react-i18next/i18nextне будут добавлены — в этом случае вам придется вручную переименовать импорты в@intlayer/*(см. Шаг 4).
На этом быстрая миграция завершена. Теперь ваше приложение Next.js работает на Intlayer, при этом все ваши вызовы useTranslation, serverSideTranslations и appWithTranslation остаются без изменений.
Строгая типизация ключей перевода — автоматически. Как только Intlayer скомпилирует ваши словари, методы
useTranslationиgetFixedTбудут типизированы на основе вашего реального контента. Ключи будут автодополняться в вашей IDE, а недействительные пути приведут к ошибкам TypeScript при компиляции — дополнительная настройка не требуется.tsxКопировать кодКопировать код в буфер обмена
// Pages Router — 'about' — зарегистрированный namespace (пространство имен) словаряconst { t } = useTranslation("about");t("counter.label"); // ✓ автодополнениеt("does.not.exist"); // ✗ Ошибка TypeScript// getStaticProps / getServerSideProps (экземпляр i18next)const tAbout = i18n.getFixedT(null, "about");tAbout("counter.label"); // ✓ строгая типизация
Полная миграция
Следующие шаги необязательны и могут выполняться постепенно. Они открывают доступ ко всему набору функций Intlayer: визуальному редактору, CMS, строго типизированным файлам контента, ИИ-автоматизации переводов и многому другому.
Явное переименование импортов (Опционально)
НеобязательноПлагин Intlayer уже справляется с подменой алиасов на уровне сборщика. Если вы хотите сделать зависимости явными в ваших исходных файлах, вы можете переименовать импорты вручную:
Показать все данные таблицыОткрыть таблицу в модальном окне для четкого просмотра всех данных
Было Стало import { serverSideTranslations } from 'next-i18next/serverSideTranslations'import { serverSideTranslations } from '@intlayer/next-i18next'import { appWithTranslation } from 'next-i18next'import { appWithTranslation } from '@intlayer/next-i18next'import { useTranslation } from 'next-i18next'import { useTranslation } from '@intlayer/next-i18next'import { useTranslation } from 'react-i18next'import { useTranslation } from '@intlayer/react-i18next'Это прямые замены — вам не нужно менять сигнатуры функций, передаваемые аргументы или возвращаемые типы.
Включение ИИ-автоматизации перевода
НеобязательноКогда Intlayer настроен, вы можете использовать CLI для автоматического заполнения недостающих переводов:
bashКопировать кодКопировать код в буфер обмена
# Проверить отсутствующие переводы (добавьте в CI)npx intlayer test# Заполнить недостающие переводы с помощью ИИnpx intlayer fillДобавьте конфигурацию ИИ в ваш
intlayer.config.ts:intlayer.config.tsКопировать кодКопировать код в буфер обмена
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ format: "i18next", source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`, location: "public/locales", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // по умолчанию // model: "gpt-4o-mini", // по умолчанию }, }; export default config;Ознакомьтесь с Документацией по Intlayer CLI, чтобы изучить все доступные возможности.
Что можно удалить после миграции
После настройки адаптера совместимости следующий стандартный бойлерплейт next-i18next можно удалить:
Открыть таблицу в модальном окне для четкого просмотра всех данных
| Файл / Паттерн | Почему это больше не нужно |
|---|---|
next-i18next.config.js | Intlayer полностью берет на себя маршрутизацию, загрузку словарей и работу с локалями на основе intlayer.config.ts. |
next-i18next в package.json | Полностью заменен на @intlayer/next-i18next и алиасы. |
JSON бандлы локалей (public/locales/*.json) | JSON бандлы необходимы только если вы продолжаете использовать плагин syncJSON. После миграции на файлы .content.ts вы можете удалить эту папку с JSON. |
Когда вы будете готовы двигаться дальше, Intlayer автоматически обнаружит все файлы .content.ts и .content.json в любом месте вашей кодовой базы (по умолчанию, в любом месте внутри ./src). Вы можете поместить файл my-component.content.ts прямо рядом с вашим кодом MyComponent.tsx, и Intlayer обнаружит его на этапе сборки без дополнительной настройки — не нужно никаких импортов, регистрации или центрального index-файла. Это делает совместное размещение переводов невероятно удобным.
Настройка TypeScript
Intlayer использует расширение модулей (module augmentation), чтобы предоставить полноценный IntelliSense в TypeScript для ключей перевода. Убедитесь, что ваш tsconfig.json включает автоматически сгенерированные типы:
Копировать код в буфер обмена
{ // ... Ваша текущая конфигурация TypeScript "include": [ // ... Ваша текущая конфигурация TypeScript ".intlayer/**/*.ts", // Включает автосгенерированные типы ],}Настройка Git
Добавьте сгенерированную директорию Intlayer в ваш .gitignore:
Копировать код в буфер обмена
# Игнорировать файлы, сгенерированные Intlayer.intlayerУзнать больше
- Визуальный редактор — Управляйте переводами визуально прямо в браузере: Intlayer Visual Editor
- CMS — Вынесите контент за пределы кода и управляйте им удаленно: Intlayer CMS
- VS Code Расширение — Получите автодополнение и обнаружение ошибок в реальном времени: Intlayer VS Code Extension
- Справочник по CLI — Полный список команд интерфейса командной строки: Intlayer CLI
- Intlayer с Next.js (Pages Router) — Полное руководство по настройке в Next.js: intlayerwithnextjspagerouter.md