Konfigurace

Max PrilutskiyCEO a spoluzakladatel3 min čtení

Trvalý stav CLI se ukládá na třech místech: dvě jsou uvnitř projektu (commitovaná), jedno ve vašem domovském adresáři (pro každý stroj zvlášť).

.lingo/config.json — commitovaný#

Vytváří ho lingo init (sekce lokalizace) a lingo link (propojení org/engine). Commitněte ho.

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

Přehled polí#

PolepovinnéPopis
orgIdano (po link)Organizace, která vlastní engine.
engineIdano (po link)Engine, který zajišťuje překlad. Obsahuje konfiguraci modelu, glosář a hlas značky.
sourceLocaleanoKód jazyka vašich zdrojových souborů (např. "en"). Zdrojové soubory se čtou, nikdy se do nich nezapisuje.
targetLocalesanoJazyky, do kterých se má překládat. Výstupy se zapisují do stejného adresáře jako zdrojové soubory, přičemž se v patternu nahradí kód jazyka (locales/en.json → locales/de.json).
filesanoPole zdrojových patternů. pattern je glob (lomítka vpřed, rekurze **, zástupné znaky *). CLI při určování cílových cest nahrazuje kódy jazyků.
githubneNastavení pro GitHub App — samotné CLI je ignoruje.

Mapování patternů na cíle#

CLI v patternu nahradí zdrojový jazyk každým cílovým jazykem:

  • locales/en.json → locales/de.json, locales/fr.json, ...
  • docs/en/**/*.md → docs/de/**/*.md (zrcadlený podstrom)
  • copy/en/marketing.md → copy/de/marketing.md

Pokud vaše struktura zdrojů neobsahuje v cestě kód jazyka, upravte ji. CLI bez něj nedokáže určit, kam mají cílové soubory patřit.

Příkazy push, pull a purge také kontrolují, kam jednotlivé cesty skutečně vedou. Pokud cesta ke zdrojovému souboru, cílovému souboru, .lingo/lock.json nebo .lingo/config.json vede mimo kořenový adresář projektu nebo do .git — například přes symbolický odkaz — příkaz skončí chybou ještě předtím, než se v daném umístění cokoli přečte, zapíše nebo odstraní. Odkazy vedoucí dovnitř projektu fungují i nadále, ale pokud je samotný cílový soubor nebo Lockfile odkazem, zápis přes něj se neprovede. V monorepozitáři spouštějte CLI z kořenového adresáře, který obsahuje sdílené soubory, místo abyste na ně vytvářeli odkazy z balíčku.

.lingo/lock.json — commitovaný#

Sleduje hash posledního známého stavu na serveru u každého zdrojového i cílového souboru. Používá se ke dvěma věcem:

  1. lingo push podle něj rozhoduje, jestli se zdroj od posledního úspěšného běhu změnil. Nezměněné soubory se přeskočí bez další komunikace se serverem.
  2. lingo pull ho používá k odhalení lokálních úprav cílových souborů — pokud se hash lokálního cíle liší od toho, co uvádí lockfile, pull by přepsal místní práci, takže pull skončí chybou, pokud nepředáte --force.

Hashe zdroje se do lockfile zapisují jen po dokončení běhu (lingo push --wait nebo následně lingo pull), takže neúspěšný nebo zrušený běh můžete bez ručního zásahu spustit znovu.

Commitujte lockfile spolu s přeloženými výstupy. Ke konfliktům přistupujte stejně jako ke konfliktům v package-lock.json: znovu je vygenerujte spuštěním lingo push --wait.

~/.lingo/runs/<hash>.json — pro každý počítač#

Ukládá naposledy odeslané push, aby lingo pull vědělo, z kterého běhu má načíst výstupy — funguje i po zavření terminálu, na stejném počítači a ve stejné cestě projektu.

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

Hash názvu souboru se odvozuje z absolutní cesty ke kořeni projektu, ne z obsahu souborů, takže:

  • Úprava en.json soubor nezneplatní — stejné pull běh stále najde.
  • Dva checkouty stejného repozitáře na stejném stroji dostanou odlišné soubory (mají různé absolutní cesty).
  • Přesun projektu (mv ~/Projects/foo ~/Projects/bar) mezi push a pull zneplatní vyhledání, protože se hash změní. JSON ale stále zůstane v ~/.lingo/runs/, pokud potřebujete ID běhu obnovit ručně.

Tento soubor je stav konkrétního stroje, ne stav projektu — není v gitignore, protože je úplně mimo repozitář.

Přihlašovací údaje — ~/.lingo/auth.json#

Ukládá je lingo login (tok OTP ukládá relaci Supabase; tok --api-key ukládá klíč). Necommitují se a nečte je nic jiného než samotné CLI.

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

Vyhodnocování z podadresářů#

Každý příkaz postupuje od cwd směrem nahoru a hledá nejbližší .lingo/config.json. Když spustíte lingo push z src/components/, zapíše lockfile zpět do kořene projektu, ne nový .lingo/ do components/. Nemusíte se tedy před každým příkazem vracet přes cd do kořene.