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

Lingo.dev Compiler

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

Фреймворки

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

Руководства

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

Справочник

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

Структура проекта

Альфа

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

Lingo.dev Compiler создает и поддерживает директорию .lingo/ в корне проекта, где хранятся метаданные переводов и кэш. Понимание структуры этой директории поможет вам управлять переводами в системе контроля версий, разбираться с отсутствующими переводами и оптимизировать скорость сборки.

Директория .lingo/#

Compiler автоматически создает эту директорию при первой сборке. В ней хранятся все метаданные переводов, которые использует пайплайн сборки:

text
.lingo/
  metadata.json              # Translation cache and content hashes
  locale-resolver.server.ts  # Optional: custom server-side locale resolver
  locale-resolver.client.ts  # Optional: custom client-side locale resolver

metadata.json#

Это основной файл в директории .lingo/. В нем хранятся:

  • Хеши содержимого — стабильные идентификаторы на основе хеша для каждой переводимой строки
  • Кэшированные переводы — сгенерированные переводы для каждой пары локалей
  • Снимки исходного текста — исходный текст на момент перевода, который используется для отслеживания изменений

Compiler читает этот файл в начале каждой сборки. Для строк с совпадающими хешами повторно используются кэшированные переводы. Строки с изменившимися или отсутствующими хешами отправляются в настроенный провайдер перевода.

Коммитьте в систему контроля версий

Всегда коммитьте .lingo/metadata.json в репозиторий. Production-сборки в режиме cache-only берут переводы только из этого файла. Если он не закоммичен, production-сборка завершится ошибкой.

Что важно учесть в .gitignore#

Не добавляйте .lingo/ в .gitignore. Эта директория должна отслеживаться в системе контроля версий. Вот типичный .gitignore для проекта, использующего Compiler:

gitignore
# Do NOT ignore .lingo/ - it contains translation cache
node_modules/
dist/
.env

sourceRoot#

Опция sourceRoot определяет, какую директорию Compiler сканирует в поиске переводимых React-компонентов:

ts
{
  sourceRoot: "./app",  // Next.js App Router
  // or
  sourceRoot: "src",    // Vite + React
}

Compiler рекурсивно сканирует все файлы .tsx, .ts, .jsx и .js внутри sourceRoot в поисках переводимого JSX-контента. Файлы за пределами этой директории не обрабатываются.

Значение sourceRootЧто сканируется
"./app"Все файлы в директории app/ (соглашение Next.js)
"src"Все файлы в директории src/ (соглашение Vite)
"."Все файлы в корне проекта (удобно для монорепозиториев с общими пакетами)

Чем шире sourceRoot, тем больше файлов сканируется, а значит, тем дольше идет сборка. Старайтесь делать его как можно уже. Если перевод нужен только для части файлов, используйте вместо этого опцию useDirective.

Режим явного включения с 'use i18n'#

По умолчанию Compiler переводит весь JSX-текст в sourceRoot. Чтобы переключиться в режим явного включения, задайте useDirective: true:

ts
{
  useDirective: true,
}

В режиме явного включения обрабатываются только файлы, которые начинаются с директивы 'use i18n':

tsx
'use i18n';

export function Welcome() {
  return <h1>Welcome to our app</h1>;
  // This text IS translated
}

Файлы без этой директивы пропускаются:

tsx
export function InternalAdmin() {
  return <h1>Admin Dashboard</h1>;
  // This text is NOT translated
}

Когда использовать режим явного включения#

СценарийРекомендуемый режим
Небольшое приложение, где нужно переводить весь контентПо умолчанию (useDirective: false)
Большая кодовая база, где перевод нужен только для части пользовательских страницЯвное включение (useDirective: true)
Монорепозиторий с общими внутренними и внешними компонентамиЯвное включение (useDirective: true)
Постепенное внедрение — добавление i18n в существующее приложениеЯвное включение (useDirective: true)

lingoDir#

Опция lingoDir меняет расположение директории с метаданными:

ts
{
  lingoDir: ".lingo",  // Default
  // or
  lingoDir: ".translations",  // Custom location
}

Это удобно, если .lingo/ конфликтует с уже существующей директорией в вашем проекте.

Что дальше#

Режимы сборки
Как metadata.json используется в каждом режиме
Пользовательские резолверы локали
Добавьте файлы резолверов в .lingo/
Справочник по Конфигурация
Опции sourceRoot, lingoDir и useDirective
Лучшие практики
Советы по работе с системой контроля версий и настройке проекта

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

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