Lingo.dev CLI переводит статические файлы в вашем репозитории — Markdown, MDX, Markdoc, JSON, YAML, субтитры и многое другое — через настроенный движок локализации. Просто укажите путь к контенту, запустите команду один раз и получите переведённые файлы рядом с исходниками.
Поддерживаемые типы контента#
CLI определяет формат каждого файла по расширению — тип хранилища настраивать не нужно. Локаль задаётся прямо в пути (content/en/x.md превращается в content/de/x.md), так что плейсхолдер [locale] не нужен.
| Тип контента | Формат | Пример пути |
|---|---|---|
| Документация | Markdown | docs/en/getting-started.md |
| Документация | MDX | docs/en/getting-started.mdx |
| Документация | Markdoc | docs/en/getting-started.mdoc |
| Структурированные данные | JSON | data/en.json |
| Структурированные данные | YAML | data/en.yaml |
| Статьи блога | Markdown / MDX | blog/en/post-slug.md |
| Локализация | Gettext PO | locale/en/messages.po |
| Локализация | XLIFF | locale/en.xliff |
| Субтитры | SRT | subs/en/intro.srt |
Полный список поддерживаемых форматов — в справочнике форматов.
В новом CLI пока не поддерживается
CSV (csv-per-locale), субтитры VTT, обычный текст .txt и Java .properties пока не поддерживаются новым CLI. Оставьте эти файлы в старом CLI и следите за обновлениями в журнале изменений.
Что понадобится#
При каждом запуске контент проходит через движок локализации — он определяет, какая языковая модель, глоссарий, тональность бренда и правила используются. Создайте движок в панели управления Lingo.dev и настройте CLI (Node 22+):
npm install -g @lingo.dev/cli
lingo login
lingo init
lingo linklingo init и lingo link создают .lingo/config.json, связывая CLI с вашей организацией и движком. Зафиксируйте этот файл в репозитории — тогда все окружения будут использовать одну конфигурацию.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "docs/en/getting-started.md" }]
}В CI пропустите lingo login и передайте LINGO_API_KEY как переменную окружения. Сгенерировать её можно в разделе API-ключей.
Сайты с документацией#
Большинство фреймворков для документации хранят переводы в отдельных директориях для каждой локали. Добавьте паттерн для каждого исходного файла (или глоб) в files. CLI сохраняет frontmatter, блоки кода и синтаксис компонентов, переводя Markdown, MDX и Markdoc.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "docs/en/getting-started.md" },
{ "pattern": "docs/en/setup.mdx" }
]
}Запустите первый перевод, заполнив все целевые локали:
lingo push --backfill-missingПри следующих запусках lingo push переводит только то, что изменилось. Используйте lingo pull, чтобы получить переводы, созданные в другом месте.
Скорректируйте путь к источнику под структуру директорий вашего фреймворка:
| Фреймворк | Структура каталогов локалей | Справка |
|---|---|---|
| Docusaurus | i18n/[locale]/docusaurus-plugin-content-docs/current/ | Руководство по i18n в Docusaurus |
| Nextra | Отдельные страницы для каждой локали или JSON-словари | Документация Nextra |
| Hugo | content/[locale]/ | Руководство по мультиязычности в Hugo |
| Astro | src/content/[locale]/ или JSON-словари | Руководство по i18n в Astro |
| VitePress | Префикс каталога [locale]/ | i18n в VitePress |
| MkDocs | Отдельный docs/ для каждой локали с i18n-плагином | i18n-плагин для MkDocs |
Компоненты MDX
При переводе MDX синтаксис JSX-компонентов сохраняется. Пользовательские компоненты — например <Callout>, <Tabs> и <CodeBlock> — передаются как есть, переводится только текст внутри них.
Структурированные данные#
JSON и YAML переводятся автоматически по расширению. Используйте управление ключами, чтобы защитить непереводимые значения (идентификаторы, URL, флаги конфигурации) от изменений.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "content/en.json" },
{ "pattern": "data/en.yaml" }
]
}Для обычного YAML поле format не нужно. Явно указать yaml-openapi в записи файла требуется только для yaml-root-key, android и "format".
YAML с корневым ключом локали
В YAML-файлах, где корневой ключ — это код локали (как в Rails и Hugo), нужно явно указать "format": "yaml-root-key": корневой ключ будет заменён на локаль целевого языка. См. Справочник форматов.
Субтитры#
SRT-файлы субтитров переводятся по расширению. CLI сохраняет все тайминги, индексы реплик и теги форматирования — переводится только текст.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "subs/en/intro.srt" }]
}VTT пока не поддерживается
Субтитры WebVTT (.vtt) новым CLI пока не поддерживаются. Оставьте VTT-файлы в старом CLI и следите за обновлениями в журнале изменений.
Работа с большим объёмом контента#
Статические репозитории контента могут содержать тысячи файлов. CLI справляется с этим без проблем:
| Механизм | Как помогает |
|---|---|
| Состояние запуска | .lingo/lock.json отслеживает отпечатки исходного контента, поэтому lingo push переводит только новые или изменённые файлы. Зафиксируйте его в репозитории — при каждом пуше он пересоздаётся. |
| Параллелизм на стороне сервера | Движок распараллеливает перевод автоматически — никаких настроек параллелизма не нужно. |
| Точечные запуски | Ограничьте запуск конкретными файлами с помощью глоба: lingo push "docs/en/**". |
Чтобы проверить актуальность переводов без записи файлов — удобно как CI-проверка — запустите lingo check.
