|
Документация
Заказать демоПлатформа
ПлатформаMCPCLI
APIПроцессы
РуководстваЖурнал изменений

Обзор

  • @lingo.dev/cli

Начало работы

  • Быстрый старт
  • Конфигурация

Справочник

  • lingo push
  • lingo pull
  • Другие команды
  • lingo purge

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

  • Управление ключами
  • Форматы
  • Локали

Руководства

  • Добавление локали
  • Существующие переводы
  • Повторный перевод
  • Примечания для переводчика
  • Запуски, состояние и восстановление
  • CI/CD
  • Монорепозитории
  • Крупные проекты

Ищете CLI прежней версии (v0)? См. документацию по CLI прежней версии

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

Постоянное состояние CLI хранится в трёх местах: два — внутри проекта (коммитятся), одно — в домашней директории пользователя (для конкретной машины).

.lingo/config.json — коммитится#

Создаётся через lingo init (раздел локализации) и lingo link (привязка org/движок). Добавьте файл в коммит.

json
{
  "orgId": "org_a8c...",
  "engineId": "eng_b9d...",
  "sourceLocale": "en",
  "targetLocales": ["de", "fr", "es"],
  "files": [
    { "pattern": "locales/en.json" },
    { "pattern": "docs/en/**/*.md" }
  ]
}

Справочник по полям#

ПолеОбязательноОписание
orgIdда (после link)Организация, которой принадлежит движок.
engineIdда (после link)Движок, который выполняет перевод. Хранит конфигурацию модели, глоссарий и тональность бренда.
sourceLocaleдаКод локали исходных файлов (например, "en"). Исходные файлы только читаются и никогда не перезаписываются.
targetLocalesдаЛокали, на которые нужно переводить. Результаты записываются в ту же директорию, что и исходные файлы, с подстановкой кода локали в шаблон (locales/en.json → locales/de.json).
filesдаМассив шаблонов исходных файлов. pattern — это glob-шаблон (прямые слэши, рекурсия **, маски *). CLI подставляет коды локалей при определении путей к целевым файлам.
githubнетНастройки для GitHub App — самим CLI не используются.

Сопоставление шаблона с целевым путём#

CLI заменяет локаль исходника в шаблоне на каждую целевую локаль:

  • locales/en.json → locales/de.json, locales/fr.json, ...
  • docs/en/**/*.md → docs/de/**/*.md (зеркальное поддерево)
  • copy/en/marketing.md → copy/de/marketing.md

Если в структуре исходных файлов код локали не включён в путь, её нужно перестроить. Иначе CLI не сможет определить, куда записывать целевые файлы.

.lingo/lock.json — коммитится#

Хранит последний известный серверу хеш для каждого исходного и целевого файла. Используется для двух задач:

  1. lingo push сверяется с ним, чтобы понять, изменился ли исходный файл с момента последнего успешного запуска. Если файл не менялся, операция становится no-op без лишнего обращения к серверу.
  2. lingo pull сверяется с ним, чтобы обнаружить локальные правки в целевых файлах — если хеш локального целевого файла отличается от того, что записан в lockfile, pull перезапишет локальные изменения, поэтому pull завершится с ошибкой, если не передать --force.

Хеши исходных файлов попадают в lockfile только после полностью успешного push, поэтому частично завершённый запуск можно повторить без ручной очистки.

Коммитьте lockfile вместе с переведёнными файлами. С конфликтами обращайтесь так же, как с конфликтами package-lock.json: просто пересоздайте файл, снова запустив lingo push.

~/.lingo/runs/<hash>.json — для конкретной машины#

Хранит последний отправленный push, чтобы lingo pull знал, результаты какого запуска нужно забрать — это работает даже после закрытия терминала и на разных машинах с одним и тем же checkout.

json
{
  "runId": "run_a8c...",
  "engineId": "eng_b9d...",
  "organizationId": "org_a8c...",
  "sourceLocale": "en",
  "createdAt": "2026-05-22T14:32:01.000Z"
}

Хеш в имени файла вычисляется на основе абсолютного пути к корню проекта, а не содержимого файлов, поэтому:

  • Изменения в en.json не делают файл недействительным — тот же pull всё равно найдёт запуск.
  • Два checkout одного и того же репозитория на одной машине получат разные файлы (из-за разных абсолютных путей).
  • Если переместить проект (mv ~/Projects/foo ~/Projects/bar) между push и pull, поиск перестанет работать, потому что изменится хеш. Сам JSON по-прежнему останется в ~/.lingo/runs/, если понадобится вручную восстановить ID запуска.

Этот файл — состояние конкретной машины, а не состояние проекта — он не попадает в gitignore, потому что полностью находится вне репозитория.

Учётные данные для аутентификации — ~/.lingo/auth.json#

Сохраняются через lingo login (в потоке OTP сохраняется сессия Supabase, в потоке --api-key — ключ). Не коммитятся и никогда не читаются ничем, кроме самого CLI.

bash
lingo logout         # clear credentials
lingo whoami         # check what's stored and which org/engine the cwd resolves to

Разрешение путей из поддиректорий#

Каждая команда поднимается вверх от cwd в поисках ближайшего .lingo/config.json. Если запустить lingo push из src/components/, lockfile будет записан обратно в корень проекта, а не как новый .lingo/ в components/. Поэтому перед каждой командой не нужно делать cd в корень.

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

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