Монорепозитории

Max PrilutskiyГенеральный директор и соучредитель1 мин чтения

Каждая команда поднимается от текущей директории вверх до ближайшего .lingo/config.json. Этого правила достаточно, чтобы CLI работал в монорепозитории: вам нужно только решить, где будут лежать файлы конфигурации.

Вариант 1: одна конфигурация в корне#

Если все пакеты используют одну исходную локаль и одни и те же целевые локали, разместите один .lingo/config.json в корне репозитория, а его шаблоны files пусть охватывают все пакеты:

json
{
  "sourceLocale": "en",
  "targetLocales": ["de", "fr"],
  "files": [
    { "pattern": "apps/web/locales/en.json" },
    { "pattern": "packages/docs/content/en/**/*.md" }
  ]
}

Один lingo push в корне покрывает весь репозиторий. Файл блокировки тоже находится в корне.

Вариант 2: отдельная конфигурация для каждого пакета#

Если пакетам нужны разные локали или движки, добавьте каждому свой .lingo/config.json:

text
apps/web/.lingo/config.json      # de, fr
apps/mobile/.lingo/config.json   # de, fr, ja, ko

Запускайте команды из директории пакета (или cd в неё) — CLI найдёт конфигурацию этого пакета:

bash
cd apps/mobile && lingo push

У каждого пакета свой файл блокировки, и каждый из них независимо привязывается к своему движку.

CI для каждого пакета#

В CI задайте для каждого шага working-directory путь к пакету — так lingo push найдёт его конфигурацию:

yaml
- run: npx @lingo.dev/cli@latest push --wait
  working-directory: apps/web
- run: npx @lingo.dev/cli@latest push --wait
  working-directory: apps/mobile

--wait удерживает каждый шаг до тех пор, пока не будут записаны переводы, — чтобы следующий шаг мог их закоммитить. См. CI/CD.

Запуск из поддиректории

Для локальных команд не нужно вручную переходить cd в корень пакета: если запустить lingo push из любого места внутри пакета, CLI поднимется до конфигурации этого пакета и запишет файл блокировки рядом с ней.