@lingo.dev/cli
@lingo.dev/cli отправляет исходный контент в движок локализации, который переводит его на стороне сервера и записывает результаты на диск — в той же команде с --wait или позже с lingo pull. Это замена устаревшего рабочего процесса npx lingo.dev: тот же проект, но совершенно другая архитектура.
Что изменилось по сравнению с устаревшим CLI#
Устаревший CLI (npx lingo.dev run) извлекал строки, вызывал LLM напрямую с вашей машины и за один проход записывал файлы локально. Текущий CLI разделяет работу на push и pull:
lingo pushзагружает исходники в ваш движок, запускает серверный процесс и либо ждёт завершения, либо сразу возвращает ID запускаlingo pullскачивает результаты последнего push — даже если вы закрыли терминал в процессе перевода. Главное — выполнять pull на той же машине из того же репозитория.- lockfile (
.lingo/lock.json) хранит последнюю известную на сервере версию каждой целевой локали, чтобы механизм обнаружения конфликтов мог предупредить о локальных изменениях до того, как они будут перезаписаны
Это то, чего старый CLI не умел: длительные переводы без зависшего терминала. Отправьте задание, закройте терминал и заберите результаты когда удобно.
Ожидание результатов#
lingo push загружает источники, запускает рабочий процесс на сервере и сразу завершается — не ждёт перевода и ничего не записывает. Заберите результаты с помощью lingo pull или передайте --wait (-w), чтобы сделать всё за одну команду.
lingo push # submit the run and exit (default)
lingo pull # later: re-attach to the most recent push and download its outputs
lingo push --wait # submit, wait, and write outputs in one command--wait(-w) блокирует выполнение до завершения процесса и записывает результаты в рамках той же команды.lingo pullпереподключается к последнему push для этого проекта и скачивает результаты — даже после закрытия терминала. Состояние запуска хранится на уровне машины в~/.lingo/runs/<project-hash>.jsonс привязкой к пути проекта, так чтоpullпродолжит работу на той же машине из того же репозитория.
Авторизация: обе команды читают LINGO_API_KEY (или --api-key, или сессию lingo login). В CI достаточно задать LINGO_API_KEY.
Режимы push#
| Команда | Режим | Когда использовать |
|---|---|---|
lingo push | Инкрементальный — сравнивает исходники с .lingo/lock.json, переводит только новые и изменённые ключи в существующие целевые файлы, остальное сохраняет без изменений | Каждый плановый запуск (добавьте --wait в CI) |
lingo push --backfill-missing | Bootstrap — заполняет целевые ФАЙЛЫ, которых ещё нет | Первый push или после добавления новой локали |
lingo push --force | Полный повторный перевод — перезаписывает все целевые файлы (включая ручные правки); --yes/-y пропускает запрос подтверждения | Редко (например, после изменения глоссария или движка) |
--backfill-missing — это флаг bootstrap. Он выполняет отдельный новый запрос в заданной области и добавляет только целые целевые файлы, которых не хватает, — он НЕ переводит новые ключи в уже переведённых файлах (в отчёте запуска будет указано "already up-to-date", и ключ будет пропущен). Для текущих изменений используйте обычный lingo push.
Редактирование переводов вручную#
Обычный lingo push сохраняет ручные правки на уровне ключей:
- Измените целевую строку (если исходник не менялся) → эта строка сохранится; остальные ключи продолжат обновляться.
- Изменился исходник у отредактированного ключа → для этого ключа будет создан новый перевод, который заменит ручную правку.
- Добавлен новый исходный ключ → он будет переведён и добавлен даже в файлы с ручными правками.