|Labs
Заказать демоПлатформа
React (Lingo Compiler)
Альфа
React (MCP)React (i18n)CLI прежней версии (v0)
Устаревшее

Lingo.dev Compiler

  • Как это работает
  • Настройка
  • Быстрый старт Compiler

Фреймворки

  • Интеграция с Next.js
  • Vite + React

Руководства

  • Переключение локали
  • Автоматическая обработка множественного числа
  • Ручные переопределения
  • Режимы сборки
  • Структура проекта
  • Провайдеры перевода
  • Пользовательские резолверы локали
  • Инструменты для разработки

Справочник

  • Лучшие практики
  • Справочник по конфигурации
  • Устранение неполадок
  • Руководство по миграции
  • Оптимизация
  • Форматы вывода

Интеграция с Next.js

Альфа

Compiler от Lingo.dev находится в альфа-версии. Он нестабилен, не рекомендуется для production-использования, а API могут меняться от релиза к релизу.

Compiler от Lingo.dev интегрируется с Next.js App Router через конфигурационную обёртку withLingo(), которая преобразует пайплайн сборки и создаёт отдельные бандлы для каждой локали. Поддерживаются React Server Components, Webpack и Turbopack — без изменений в коде компонентов.

Что понадобится#

Требования

  • Next.js 14+ с App Router
  • Node.js 18+
  • Установленный @lingo.dev/compiler

Установка#

bash
pnpm install @lingo.dev/compiler

Настройте next.config.ts#

Оберните конфигурацию Next.js с помощью withLingo. Конфигурация должна быть оформлена как функция async — это обязательно, потому что withLingo выполняет асинхронную инициализацию во время сборки.

ts
// next.config.ts
import type { NextConfig } from "next";
import { withLingo } from "@lingo.dev/compiler/next";

const nextConfig: NextConfig = {};

export default async function (): Promise<NextConfig> {
  return await withLingo(nextConfig, {
    sourceRoot: "./app",
    sourceLocale: "en",
    targetLocales: ["es", "de", "fr", "ja"],
    models: "lingo.dev",
    dev: {
      usePseudotranslator: true,
    },
  });
}

Требуется асинхронная конфигурация

Конфигурацию нужно экспортировать как функцию async, а не как обычный объект. Если экспортировать обычный объект, Compiler не сможет инициализироваться, и сборка завершится ошибкой. Подробности см. в разделе Устранение неполадок.

Добавьте LingoProvider#

Оберните корневой layout в LingoProvider, чтобы включить контекст локали во всём дереве компонентов:

tsx
// app/layout.tsx
import { LingoProvider } from "@lingo.dev/compiler/react";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <LingoProvider>
      <html>
        <body>{children}</body>
      </html>
    </LingoProvider>
  );
}

LingoProvider отвечает за определение локали, её сохранение и загрузку словарей. Он работает и с Server Components, и с Client Components.

Server Components и Client Components#

Compiler прозрачно работает с обоими типами компонентов:

Тип компонентаКак работают переводы
React Server ComponentsПереводы определяются на сервере во время запроса. Без дополнительной нагрузки JS на клиенте.
Client Components ("use client")Переводы включаются в клиентский чанк. useLingoContext() доступен для переключения локали.
Общие компонентыРаботают в обоих контекстах. Compiler автоматически определяет среду рендеринга.
tsx
// app/page.tsx - Server Component (default)
export default function Home() {
  return <h1>Welcome to our app</h1>;
  // Renders translated text with zero client JS
}
tsx
// app/components/greeting.tsx - Client Component
"use client";

export function Greeting() {
  return <p>Hello, world</p>;
  // Translations included in client bundle
}

Поддержка сборщиков#

Обёртка withLingo() работает с обоими сборщиками, которые поддерживает Next.js:

СборщикПоддержкаПримечания
WebpackПолнаяСборщик по умолчанию. Дополнительная настройка не требуется.
TurbopackПолнаяВключается с помощью next dev --turbopack. Compiler автоматически определяет Turbopack.

Конфигурация sourceRoot#

Опция sourceRoot указывает Compiler, в каком каталоге находятся компоненты с переводимым текстом. В проектах Next.js с App Router это обычно ./app:

ts
{
  sourceRoot: "./app",
}

Если часть компонентов находится вне ./app (например, в общей директории components/), укажите в sourceRoot их общий родительский каталог:

ts
{
  sourceRoot: ".",
}

Чем шире sourceRoot, тем больше файлов придётся сканировать. В крупных проектах лучше делать его как можно уже, чтобы сократить время сборки. Либо используйте useDirective: true и добавляйте 'use i18n' только в те файлы, где нужен перевод. Подробности см. в разделе Структура проекта.

Что дальше#

Настройка
Полное пошаговое руководство по настройке с аутентификацией
Справочник по конфигурации
Все параметры конфигурации
Переключение локали
Добавьте в приложение переключатель языка
Режимы сборки
Процессы для dev, CI и production

Эта страница была полезной?

Max PrilutskiyMax Prilutskiy·Обновлено 4 месяца назад·3 минуты чтения