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.
{
"orgId": "org_a8c...",
"engineId": "eng_b9d...",
"sourceLocale": "en",
"targetLocales": ["de", "fr", "es"],
"files": [
{ "pattern": "locales/en.json" },
{ "pattern": "docs/en/**/*.md" }
]
}Přehled polí#
| Pole | povinné | Popis |
|---|---|---|
orgId | ano (po link) | Organizace, která vlastní engine. |
engineId | ano (po link) | Engine, který zajišťuje překlad. Obsahuje konfiguraci modelu, glosář a hlas značky. |
sourceLocale | ano | Kód jazyka vašich zdrojových souborů (např. "en"). Zdrojové soubory se čtou, nikdy se do nich nezapisuje. |
targetLocales | ano | Jazyky, 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). |
files | ano | Pole 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ů. |
github | ne | Nastavení 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.
.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:
lingo pushpodle 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.lingo pullho 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žepullskončí chybou, pokud nepředáte--force.
Hashe zdrojů se do lockfile commitují až po plně úspěšném pushi, takže napůl dokončený běh můžete zopakovat bez ručního úklidu.
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.
~/.lingo/runs/<hash>.json — pro konkrétní stroj#
Ukládá naposledy odeslané push, aby lingo pull věděl, z kterého běhu má stáhnout výstupy — funguje i po zavření terminálu a napříč stroji, které sdílejí stejný checkout.
{
"runId": "run_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.jsonsoubor nezneplatní — stejnépullbě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.
lingo logout # clear credentials
lingo whoami # check what's stored and which org/engine the cwd resolves toVyhodnocová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.
