Lingo.dev Compiler

Max PrilutskiyГенеральный директор и соучредительUpdated 6 месяцев назад · 3 min read

Альфа

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

Lingo.dev Compiler — это бесплатная open-source система перевода на этапе сборки для React-приложений. Она находит переводимый текст в JSX, генерирует переводы с помощью ИИ с полным контекстом компонента и встраивает их в отдельные бандлы для каждой локали в процессе сборки. Исходный код остаётся неизменным: не нужно вручную поддерживать файлы с ключами перевода и отдельно загружать словари во время выполнения.

Посмотрите в действии: живое демо на X

До и после#

tsx
// Your code - unchanged
export function Welcome() {
  return <h1>Welcome to our app</h1>;
}
// Renders "Bienvenido a nuestra aplicacion" in Spanish

Никаких изменений в коде. Переводы определяются на этапе компиляции, а для каждой локали создаются оптимизированные бандлы.

Чем отличается от традиционных i18n-библиотек#

Традиционные i18n-библиотекиLingo.dev Compiler
Управление переводамиВручную — вы создаёте и поддерживаете файлы с ключамиАвтоматически — Compiler извлекает переводимые строки из JSX
Нужны ли изменения в кодеНужно оборачивать каждую строку в вызовы t()Нет — просто пишите обычный JSX
Как загружаются переводыОтдельные файлы словарей загружаются во время выполненияВстраиваются в бандлы для каждой локали на этапе сборки
Источник переводовВручную или через внешний TMSГенерируются ИИ с полным контекстом компонента
Загрузка словарейЗапрос или импорт файлов перевода во время выполненияБез отдельной загрузки — переводы уже входят в бандл

Пайплайн сборки#

1

Анализ AST

Compiler разбирает ваш React-код в Abstract Syntax Tree с помощью Babel. Он определяет переводимый контент: текстовые узлы, строковые атрибуты (alt, aria-label, placeholder) и шаблонные выражения.

2

Извлечение контента

Каждая переводимая строка получает стабильный идентификатор на основе хеша. Compiler сохраняет контекст компонента, структуру форматированного текста (вложенные <strong>, <em>) и плейсхолдеры интерполяции. Метаданные сохраняются в .lingo/metadata.json.

3

Генерация переводов

В разработке pseudotranslator мгновенно генерирует тестовые переводы без API-вызовов. В CI настроенный провайдер LLM создаёт реальные переводы с полным контекстом компонента — расположением файла, окружающими элементами и семантикой интерполяции. Переводятся только новые или изменённые строки: Compiler использует хеширование содержимого, чтобы пропускать неизменившиеся строки.

4

Инъекция кода

В ваш JSX внедряются обращения к переводам. Compiler добавляет лёгкие вызовы поиска по хешу к встроенному словарю для каждой локали. Исходный код при этом никогда не изменяется.

5

Оптимизация бандла

Создаются отдельные бандлы для каждой локали. В них попадают только те переводы, которые используются конкретным компонентом. Удаление мёртвого кода и tree-shaking помогают сохранить минимальный размер бандлов.

Поддерживаемые фреймворки#

ФреймворкИнтеграция
Next.js (App Router)Обёртка для конфигурации withLingo() — поддерживает RSC, Webpack и Turbopack
Vite + ReactlingoCompilerPlugin — плагин для Vite с полной поддержкой HMR

Ключевые возможности#

Следующие шаги#