Автор:
    Дата створення:2026-01-10Останнє оновлення:2026-09-06

    Як постфактум зробити наявний додаток Next.js багатомовним (i18n посібник 2026)

    Додати інтернаціоналізацію (i18n) у проєкт Next.js із самого початку відносно легко. Але що робити, коли у вас вже є готовий production-додаток однією мовою, і вам потрібно зробити його багатомовним постфактум?

    З класичними бібліотеками на кшталт next-intl чи next-i18next це перетворюється на випробування:

    • Пошук захардкодженного тексту в сотнях файлів JSX/TSX.
    • Створення вкладених JSON-словників і вигадування назв ключів (pages.dashboard.header.title).
    • Заміна тексту на виклики хуків (t('...')).
    • Перебудова всієї папки app/ на app/[locale]/..., що ламає наявні маршрути та індексацію в пошукових системах.

    У 2026 році вам не потрібно переписувати код. З Intlayer ви можете додати багатомовність за лічені хвилини за допомогою автоматичного вилучення тексту, перекладу за допомогою ШІ та гнучкої маршрутизації.

    Шукаєте повний покроковий посібник для Next.js 16 App Router? Перегляньте нашу документацію: Переклад Next.js 16 з Intlayer.

    Зміст

    Дилема доопрацювання: Чому інтернаціоналізація наявного додатку є складною

    Розробники стикаються з трьома проблемами:

    1. Руйнування кодової бази: Ручне перенесення тексту вимагає змін майже в кожному компоненті.
    2. Вимоги до маршрутизації: Необхідність переносити файли в динамічний сегмент [locale].
    3. Рутинна робота над перекладом: Копіювання та переклад ключів десятками мов.

    Intlayer вирішує це за допомогою компілятора, декларативних словників і гнучкої маршрутизації.

    Автоматичне вилучення контенту (без ручного пошуку)

    Варіант A: CLI-утиліта вилучення (npx intlayer extract)

    Запустіть утиліту вилучення Intlayer у вашому проєкті:

    bash
    npx intlayer extract
    

    Команда створить типізовані файли декларацій (.content.ts) поруч із кожним компонентом.

    Варіант B: Компілятор Intlayer (Вилучення під час збірки)

    Пишіть звичайний текст у компонентах. Компілятор під час збірки автоматично вилучить його і підключить локалізовані дані:

    src/app/page.tsx
    // Write normal React code. The compiler extracts the text automatically
    export default function HomePage() {
      return (
        <section>
          <h1>Welcome to our platform</h1>
          <p>Start exploring our modern features today.</p>
        </section>
      );
    }
    

    За лаштунками Intlayer будує словник і пов'язує компонент із локалізованим контентом, повністю усуваючи необхідність ручного рефакторингу.

    У цьому випадку буде створено файл src/app/page.content.ts із таким вмістом:

    src/app/page.content.ts
    import { Dictionary } from "intlayer";
    
    const content = {
      key: "home-page",
      content: {
        welcomeToOurPlatform: t({ en: "Welcome to our platform" }),
        startExploringOurModernFeaturesToday: t({
          en: "Start exploring our modern features today.",
        }),
      },
    };
    
    export default content;
    

    ШІ-переклад із вашою улюбленою мовною моделлю

    Перекладайте вміст за секунди за допомогою OpenAI, Anthropic, DeepSeek чи Mistral:

    bash
    npx intlayer fill
    
    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.GERMAN],
        defaultLocale: Locales.ENGLISH,
      },
      ai: {
        provider: "openai",
        model: "gpt-4o-mini",
        apiKey: process.env.OPENAI_API_KEY,
        applicationContext: "SaaS панель для продуктивності та командної роботи",
      },
    };
    
    export default config;
    

    Виконання команди npx intlayer fill автоматично заповнить перекладами для всіх налаштованих мов ваші файли декларацій .content.ts:

    src/app/page.content.ts
    import { Dictionary } from "intlayer";
    
    const content = {
      key: "home-page",
      content: {
        welcomeToOurPlatform: t({
          en: "Welcome to our platform",
          fr: "Bienvenue sur notre plateforme",
          es: "Bienvenido a nuestra plataforma",
          uk: "Ласкаво просимо на нашу платформу",
        }),
        startExploringOurModernFeaturesToday: t({
          en: "Start exploring our modern features today.",
          fr: "Découvrez nos fonctionnalités modernes dès aujourd'hui.",
          es: "Comience a explorar nuestras funciones modernas hoy.",
          uk: "Почніть знайомство з сучасними можливостями вже сьогодні.",
        }),
      },
    };
    
    export default content;
    

    Оскільки Intlayer надає високорівневий applicationContext для LLM, згенеровані переклади зберігають технічні нюанси, стиль бренду та граматичний контекст значно краще, ніж традиційні інструменти автоматичного перекладу.

    Щоб переконатися, що жоден рядок не було пропущено перед виходом у прод:

    bash
    npx intlayer test
    

    Багатомовна маршрутизація без зміни чинних URL

    Intlayer підтримує:

    • Параметри запиту / Cookies (search-params): Збереження структури /app/page.tsx без створення папки [locale].
    • Префіксний режим (prefix / prefix-all-locales): Зручне налаштування маршрутів для SEO.

    Налаштуйте інтеграцію з Next.js за лічені секунди:

    next.config.ts
    import type { NextConfig } from "next";
    import { withIntlayer } from "next-intlayer/server";
    
    const nextConfig: NextConfig = {/* Your existing Next.js config */};
    
    export default withIntlayer(nextConfig);
    

    Огорніть кореневий layout компонентом IntlayerProvider:

    src/app/layout.tsx
    import type { ReactNode } from "react";
    import { IntlayerProvider } from "next-intlayer";
    import { getLocale } from "next-intlayer/server";
    import { getHTMLTextDir } from "intlayer";
    
    export default async function RootLayout({
      children,
    }: {
      children: ReactNode;
    }) {
      const locale = await getLocale();
    
      return (
        <html lang={locale} dir={getHTMLTextDir(locale)}>
          <body>
            <IntlayerProvider defaultLocale={locale}>{children}</IntlayerProvider>
          </body>
        </html>
      );
    }
    

    Багатомовне SEO

    Автоматична генерація метаданих і тегів hreflang для глобальної видимості:

    src/app/page.tsx
    import type { Metadata } from "next";
    import { getLocale } from "next-intlayer/server";
    import { getIntlayer } from "intlayer";
    
    export const generateMetadata = async (): Promise<Metadata> => {
      const locale = await getLocale();
      const content = getIntlayer("home-page-metadata", locale);
    
      return {
        title: content.title,
        description: content.description,
      };
    };
    

    Поглиблення: Готові до покрокового налаштування?

    Повний технічний посібник із налаштування middleware, генерації статичних сторінок (generateStaticParams) та Server Components доступний у документації:

    👉 Повний посібник із перекладу Next.js 16 з Intlayer

    Часті запитання (FAQ)

    Так. Intlayer підтримує routing.mode: "search-params" і виявлення через cookies/заголовки, зберігаючи чинну структуру тек.

    Ні. За допомогою npx intlayer extract або компілятора Intlayer тексти вилучаються автоматично.

    Завдяки модульній декларації для кожного компонента та оптимізації макросами під час збірки.

    Так, команда npx intlayer fill використовує LLM для перекладу з урахуванням контексту проєкту.

    Коментарі

    Поки що немає коментарів. Будьте першим, хто поділиться своїми думками.

    Схожі публікації

    Останні публікації