Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Init history"v9.0.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-intl на Intlayer
Чому мігрувати з next-intl на Intlayer?
Замість завантаження масивних JSON файлів на ваші сторінки, завантажуйте лише необхідний вміст. Intlayer допомагає зменшити розміри bundle та сторінок на 50%.
Структурування вмісту вашого додатку спрощує обслуговування для великомасштабних додатків. Ви можете дублювати або видаляти окрему папку функцій без необхідності перегляду всієї вашої codebase вмісту. Крім того, Intlayer повністю типізований для забезпечення точності вашого вмісту.
Intlayer також є рішенням з найбільш активною розробкою в екосистемі i18n — проблеми вирішуються швидко, нові адаптери фреймворків регулярно з'являються, а базовий API постійно удосконалюється на основі реального feedback з production.
Розташування вмісту в одному місці зменшує контекст, необхідний для великих мовних моделей (LLMs). Intlayer також поставляється з набором інструментів, таких як CLI для перевірки відсутніх перекладів, LSP, MCP та agent skills, щоб зробити developer experience (DX) ще більш гладким для AI агентів.
Використовуйте автоматизацію для перекладу в вашому CI/CD pipeline з допомогою LLM на ваш вибір за вартість вашого AI провайдера. Intlayer також пропонує compiler для автоматизації видобування вмісту, а також web платформу для перекладу у фоновому режимі.
Підключення масивних JSON файлів до компонентів може призвести до проблем з продуктивністю та реактивністю. Intlayer оптимізує завантаження вашого вмісту на етапі збірки.
Більше ніж просто i18n рішення, Intlayer надає самостійно розміщений редактор видимості та повну CMS для допомоги в управлінні вашим багатомовним вмістом в реальному часі, що робить співпрацю з перекладачами, копірайтерами та іншими членами команди безпроблемною. Вміст може зберігатися локально та/або віддалено.
Стратегія міграції
Рекомендований підхід для існуючих додатків — це compat adapter: встановіть @intlayer/next-intl, який надає той же API, що й next-intl, але делегує всю роботу перекладу Intlayer під капотом.
Ви зберігаєте свої існуючі useTranslations, getTranslations, NextIntlClientProvider та подібне — єдина зміна — це шлях імпорту. Переструктуризація сигнатур викликів, форм реквізитів або структури компонентів не потрібна.
З часом ви можете опціонально мігрувати окремі файли до багатішого формату .content.ts Intlayer, щоб розблокувати візуальний редактор, CMS та область видимості вмісту на рівні компонентів — але цей крок повністю опціональний і може бути виконаний поступово.
Зміст
Швидка міграція
Наступні кроки — це мінімум, необхідний для запуску вашого існуючого next-intl додатку на Intlayer без змін коду.
Встановлення залежностей
Встановіть основні пакети Intlayer та адаптер сумісності
@intlayer/next-intl:bashКопіювати кодСкопіюйте код у буфер обміну
npx intlayer-cli init --interactiveпрапор
--interactiveє необов'язковим. Використовуйтеintlayer-cli init, якщо ви AI агент.Ця команда виявить ваше середовище та встановить необхідні пакети. Наприклад:
bashКопіювати кодСкопіюйте код у буфер обміну
npm install intlayer next-intlayer @intlayer/next-intl @intlayer/sync-json-pluginТримайте
next-intlвстановленим — він все ще необхідний для маршрутизації URL (createNavigation,createMiddleware,Link,redirect,usePathname,useRouter). Адаптер сумісності не замінює шар маршрутизації.Налаштування Intlayer
Команда
intlayer initстворює стартовий файлintlayer.config.ts. Оновіть його, щоб він відповідав вашим існуючим локалям і вкажіть плагінsyncJSONна ваші файли повідомлень: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({ // 'icu' відповідає синтаксису ICU заповнювачів next-intl: {name}, {count, plural, ...} format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], }; export default config;sourceвідображує локаль на шлях її JSON файлу.locationповідомляє спостерігачу Intlayer, яку папку моніторити на предмет змін. Опціяformat: 'icu'гарантує, що ICU заповнювачі на кшталт{name}та{count, plural, one {# item} other {# items}}розпарсюються правильно.Для повного переліку параметрів конфігурації дивіться документацію конфігурації.
Додайте плагін Intlayer до Next.js
Обгорніть вашу існуючу конфігурацію Next.js за допомогою
createNextIntlPluginіз@intlayer/next-intl/plugin. Цей wrapper складаєwithIntlayerта реєструє псевдонімиnext-intl→@intlayer/next-intlдля вас:next.config.tsКопіювати кодСкопіюйте код у буфер обміну
import type { NextConfig } from "next"; import { createNextIntlPlugin } from "@intlayer/next-intl/plugin"; const withIntlayer = createNextIntlPlugin(); const nextConfig: NextConfig = { /* ваші існуючі параметри конфігурації */ }; export default withIntlayer(nextConfig);createNextIntlPlugin()обгортаєwithIntlayer, автоматично виявляє Webpack або Turbopack, налаштовує спостереження вмісту, компіляцію словників та — критично — впровадження псевдонімів модулів, щоб ваші існуючі викликиimport … from 'next-intl'прозоро перенаправлялися на@intlayer/next-intlпід час побудови. Записи маршрутизаціїnext-intl/routingзалишаються спрямованими на реальний пакет. Жодні зміни вихідних файлів не потрібні.Надаєте перевагу простому
withIntlayerізnext-intlayer/server? Він скомпілює ваші словники, але не додає псевдонімиnext-intl— вам потім довелося б вручну перейменувати імпорти на@intlayer/next-intl(див. Крок 4).Вам більше не потрібні
getRequestConfigабоloadMessages. Зnext-intlвам довелося писати файлsrc/i18n.ts, який завантажував JSON пакети повідомлень при кожному запиті черезgetRequestConfig. Intlayer компілює всі словники в час побудови, тому немає кроку завантаження під час виконання. Ви можете повністю видалити цей файл (або зберегти тільки частини маршрутизації, якщо ви все ще використовуєтеcreateNavigation).
Це все для швидкої міграції. Ваш додаток тепер працює на Intlayer, зберігаючи кожний next-intl імпорт та API незмінним.
Типізовані ключі перекладу — автоматично. Після того як Intlayer скомпілює ваші словники,
useTranslationsтаgetTranslationsтипізуються проти вашого фактичного вмісту. Ключі автоматично доповнюються у вашій IDE, а невірні шляхи спричиняють помилки TypeScript під час побудови — додатково налаштування не потрібно.tsxКопіювати кодСкопіюйте код у буфер обміну
// Компонент клієнта — 'about' — це зареєстрований ключ словникаconst t = useTranslations("about");t("counter.label"); // ✓ автоматичне доповненняt("does.not.exist"); // ✗ Помилка TypeScript// Серверний компонентconst t = await getTranslations("about");t("counter.label"); // ✓ типізовано
Повна міграція
Кроки, наведені нижче, є необов'язковими і можуть виконуватися поступово. Вони розблоковують повний набір функцій Intlayer: візуальний редактор, CMS, типізовані файли вмісту, автоматизований переклад на основі AI та інше.
Явне перейменування імпортів (опціонально)
Необов'язковоОбгортка
createNextIntlPlugin()вже обробляє створення псевдонімаnext-intl→@intlayer/next-intlна рівні bundler. Якщо ви віддаєте перевагу зробити залежність явною у вихідних файлах (і використовувати звичайний плагінwithIntlayerзамість цього), ви можете перейменувати імпорти вручну:Показати весь вміст таблиціВідкрийте таблицю в модальному вікні, щоб чітко переглянути всі дані
До Після import { useTranslations } from 'next-intl'import { useTranslations } from '@intlayer/next-intl'import { useLocale } from 'next-intl'import { useLocale } from '@intlayer/next-intl'import { NextIntlClientProvider } from 'next-intl'import { NextIntlClientProvider } from '@intlayer/next-intl'import { getTranslations } from 'next-intl/server'import { getTranslations } from '@intlayer/next-intl/server'import { getLocale } from 'next-intl/server'import { getLocale } from '@intlayer/next-intl/server'import { setLocale } from 'next-intl/server'import { setLocale } from '@intlayer/next-intl/server'import { getMessages } from 'next-intl/server'import { getMessages } from '@intlayer/next-intl/server'Завжди залишайте імпорти маршрутизації з реального
next-intl— адаптер сумісності не замінює шар маршрутизації URL:tsКопіювати кодСкопіюйте код у буфер обміну
// ✅ Завжди залишайте ці імпорти з реального 'next-intl'import { createNavigation } from "next-intl/routing";import { createMiddleware } from "next-intl/server";import { defineRouting } from "next-intl/routing";Як альтернатива, ви можете використовувати
defineRoutingз@intlayer/next-intl/routing, який автоматично об'єднує конфігурацію локалі з вашогоintlayer.config.ts.Увімкнути автоматизацію перекладу на основі AI
Необов'язковоПісля настройки Intlayer ви можете використовувати його CLI для автоматичного заповнення відсутніх перекладів за допомогою LLM на ваш вибір:
bashКопіювати кодСкопіюйте код у буфер обміну
# Перевірити відсутні переклади (додати до CI)npx intlayer test# Заповнити відсутні переклади за допомогою AInpx intlayer fillДодайте
OPENAI_API_KEY(або ключ вашого переважного провайдера) до вашого файлу.env, потім розширьте ваш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: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // за замовчуванням // model: "gpt-4o-mini", // за замовчуванням }, }; export default config;Див. документацію Intlayer CLI для всіх доступних опцій.
Що можна видалити після міграції
Після встановлення @intlayer/next-intl можна видалити наступний boilerplate код next-intl:
Відкрийте таблицю в модальному вікні, щоб чітко переглянути всі дані
| Файл / шаблон | Чому він більше не потрібен |
|---|---|
src/i18n.ts → експорт getRequestConfig | Intlayer компілює словники під час побудови; немає завантаження повідомлень на основі запиту. Тримайте файл лише якщо він також експортує помічники маршрутизації createNavigation. |
Виклик loadMessages() / getMessages() в layout | NextIntlClientProvider з @intlayer/next-intl читає з скомпільованого виходу; властивість messages не потрібна. |
Імпорти locales/{locale}/*.json в layout | JSON bundles потрібні тільки якщо ви все ще використовуєте плагін syncJSON. Після міграції на файли .content.ts ви можете видалити папку JSON. |
Коли ви будете готові піти далі, Intlayer автоматично виявляє всі файли .content.ts та .content.json будь-де в вашій кодовій базі (за замовчуванням, будь-де всередину ./src). Ви можете розмістити файл about.content.ts прямо поруч з вашим about/page.tsx і Intlayer підберуть його під час побудови без додаткової конфігурації — ніяких імпортів, реєстрації, жодного централізованого файлу індексу не потрібно. Це робить co-locating перекладів зі сторінками та компонентами абсолютно без тертя.
Налаштування TypeScript
Intlayer використовує module augmentation для забезпечення повної intellisense TypeScript для ваших ключів перекладу. Переконайтесь, що ваш tsconfig.json включає автоматично створені типи:
Скопіюйте код у буфер обміну
{ // ... Ваші існуючі конфігурації TypeScript "include": [ // ... Ваші існуючі конфігурації TypeScript ".intlayer/**/*.ts", // Включити автоматично створені типи ],}Git Configuration
Додайте згенерований Intlayer каталог до вашого .gitignore:
Скопіюйте код у буфер обміну
# Ігноруйте файли, створені Intlayer.intlayerЙти далі
- Visual Editor — Керуйте перекладами візуально у браузері: Intlayer Visual Editor
- CMS — Екстерналізуйте та керуйте контентом дистанційно: Intlayer CMS
- VS Code Extension — Отримуйте автодоповнення та виявлення помилок перекладу в реальному часі: Intlayer VS Code Extension
- CLI Reference — Повний список CLI команд: Intlayer CLI
- Intlayer with Next.js — Повний посібник з налаштування для Next.js: intlayerwithnextjs_16.md