lingo push
Odešle zdrojové soubory do engine, počká na dokončení běhu a zapíše výstupy na disk.
lingo push [patterns...] [--key <pattern>] [--force] [--backfill-missing] [--yes] [--wait] [--estimate]Výchozí chování — delta push#
Bez argumentů lingo push běží v režimu pouze delta:
- Vypočítá hash každého zdrojového souboru odpovídajícího vzorům
filesv konfiguraci - Porovná každý hash s lockfile a zjistí, které zdroje se změnily
- Nahraje změněné zdroje jako běh do engine
- Počká na dokončení běhu
- Zapíše výstupy na disk
- Uloží nové hashe zdrojů do lockfile
Pokud se od posledního úspěšného push nezměnil žádný zdroj, příkaz se ukončí rovnou s ✓ Nothing to push. — bez komunikace se serverem a bez spotřeby tokenů.
Argumenty a přepínače#
Poziční: patterns... — omezený push#
lingo push docs/en/about.md
lingo push 'docs/en/**/*.md' 'locales/en.json'Omezí push na konkrétní soubory (musí odpovídat vzorům, které už jsou v .lingo/config.json). Přepne příkaz do omezeného režimu:
- Bez porovnání s předchozím stavem zdrojů — každý odpovídající zdroj se bere jako součást scope, i když se nezměnil.
- No-op na straně serveru pro cíle, které už existují a mají odpovídající hashe zdrojů — engine je přeskočí a CLI je nahlásí jako cache.
Použijte, když chcete přeložit právě jeden aktualizovaný soubor bez přepočítávání hashů celého projektu nebo když chcete znovu přeložit jednu stránku pomocí --force.
--key <pattern>#
lingo push --key auth.login
lingo push --key auth.login --key billing.plan
lingo push --key "auth.*"Znovu přeloží jen klíče, na které se pattern vztahuje, sloučí je do existujícího překladu a všechny ostatní klíče ponechá bajtově beze změny. Opakovatelné — jeden --key na pattern.
Rozsah klíčů ignoruje diff zdroje, takže i klíč, jehož zdrojový text se vůbec nezměnil, se přeloží znovu. Právě o to u tohoto příznaku jde: je to podporovaný způsob, jak po úpravě formulace, změně modelu nebo aktualizaci glosáře znovu přeložit jen pár řetězců, aniž byste platili za zbytek souboru.
--force vedle sebe nic nepřidává a potlačí výzvu k potvrzení pro celý soubor.
Co se stane s jednotlivými klíči#
Uvedený v --key | Přítomný v překladu | Výsledek |
|---|---|---|
| ano | ano | znovu přeložen |
| ano | ne | přeložen a přidán |
| ne | ano | stávající překlad zachován |
| ne | ne | vůbec se nezapíše |
Právě poslední řádek odlišuje rozsah klíčů od běžného push. Klíč přidaný do zdroje od vašeho posledního úplného push se do překladu jako zdrojový text nepřenese — vynechá se a přeloží ho až další běžný lingo push.
Jak pattern odpovídá#
| Pattern | Zahrne |
|---|---|
auth.login | auth.login a auth.login.title — nikdy auth.login_url |
auth | auth a celý jeho podstrom — nikdy authority |
"auth.*" | všechno pod auth, včetně auth.login_url, ale ne auth |
"auth*" | všechno výše uvedené plus authority — bez jakékoli hranice |
Pattern odpovídá klíči přesně, jako prefix končící na hranici ., /, - nebo [, případně jako glob. K členům pole se dá dostat přes hranici se závorkami, takže nav.items zahrne nav.items[0].title.
Globy dávejte do uvozovek. Váš shell je jinak rozbalí jako první: v zsh holý --key auth.* buď skončí chybou no matches found, nebo — pokud je v adresáři zrovna soubor jako auth.json — se tiše změní na jeho název. Hodnota oddělená čárkami není seznam: --key "a,b" je jeden doslovný pattern, který neodpovídá ničemu. Místo toho příznak zopakujte.
Co odmítá#
Rozsah klíčů věci nahlásí a přeskočí, místo aby tiše udělal víc, než jste chtěli:
- Jazyk bez existujícího překladu. Není do čeho slučovat, takže se jazyk vypíše a přeskočí — nejdřív ho jednou přeložte pomocí
--backfill-missing, potom použijte--key. - Formáty, u kterých nelze vynechat klíč — formáty dokumentů, u nichž se klíče změní hned po úpravě dokumentu, a
xcode-stringsdict, jejichž kategorie množného čísla soubor potřebuje, aby zůstal platný. Úplný seznam najdete v části Formáty. Tyto soubory se přeskočí s upozorněním, takže push je stále může kombinovat se soubory klíč–hodnota. Pushněte je bez--key. - Rozsah, který neodpovídal ničemu, to oznámí, místo aby běh vykázal jako už aktuální.
Poziční členové si ponechávají zdrojový text i v rámci rozsahu — prvky pole, položky Android <string-array>, počty <plurals> — protože odstranění jednoho z nich by přečíslovalo všechny ostatní.
Neupravuje lockfile#
Běh s rozsahem klíčů překládá jen část souboru, takže záměrně nechává hash zdroje v lockfilu beze změny. Všechno ostatní, co se v souboru změnilo, tak zůstává nevyřízené a příští běžný lingo push to zachytí.
--force / -f#
lingo push docs/en/about.md --forceZnovu přeloží každý odpovídající cíl, ignoruje všechny existující překlady a obejde cachování na straně serveru. Omezte to rozsahem — pomocí pozičních patternů nebo --backfill-missing — pokud opravdu nemáte na mysli celý projekt: samotné lingo push --force znovu přeloží každý nakonfigurovaný pattern a jediná věc, která tomu stojí v cestě, je potvrzení níže.
U projektu, který se ještě nikdy nepřekládal, není co přepsat, takže --force tam nepřinese nic navíc — místo toho sáhněte po --backfill-missing. A obecně je to i bezpečnější návyk: jen doplňuje mezery a nikdy se na nic neptá.
Ve výchozím nastavení si --force před spuštěním vyžádá potvrzení:
! --force will retranslate every target for pattern(s): docs/en/about.md and
overwrite existing translations. Continue? (Yes, retranslate / Cancel)Předejte --yes / -y, pokud chcete potvrzení přeskočit (vhodné pro CI).
Když chcete znovu přeložit jen pár řetězců místo celých souborů, sáhněte po --key — zaplatíte jen za klíče, které uvedete.
--backfill-missing#
lingo push --backfill-missingPřeloží každý cíl, který ještě neexistuje, napříč všemi nakonfigurovanými vzory. Je to ekvivalent omezeného push nad všemi vzory z konfigurace, ale vytvoří jen soubory, které chybí. Použijte po přidání nového jazyka do targetLocales nebo při prvním push nového projektu.
Zkombinujte s --force, pokud chcete vše přeložit znovu od nuly:
lingo push --backfill-missing --force --yes--yes / -y#
Přeskočí výzvu k potvrzení pro --force. Bez --force nemá žádný efekt a vedle --key také ne — rozsah klíčů nikdy potvrzení nevyžaduje, protože se vždy týká jen klíčů, které jste uvedli.
--estimate#
lingo push --estimate
lingo push 'docs/en/**/*.md' --estimateVypíše orientační cenu tohoto push a skončí bez překladu. CLI projde celý push pipeline — hashování, delta i nahrání zdrojových bytů — aby server mohl naplánovat přesnou delta, a pak místo spuštění požádá engine o ocenění běhu. Nic se nepřeloží, nezapíše ani nevyúčtuje; lockfile i vaše cílové soubory zůstanou beze změny.
Hodnoty jsou odhady, ne cenové nabídky. --estimate lze kombinovat s rozsahem i s --key / --force / --backfill-missing, takže si můžete nacenit přesně ten push, který se chystáte spustit.
Pokud se žádný zdroj nezměnil, --estimate se stejně jako běžný push ukončí hned s ✓ Nothing to push..
Pokud už pro stejné zdroje běh probíhá, --estimate skončí chybou, místo aby ocenil už napůl spuštěný běh:
Error: Cannot estimate: existing group run_a8c... is already in 'running' state. Change a source file or wait for the run to finish.Výstup#
Při úspěchu:
Pushing source files to localization engine…
✓ Run run_a8c...: localized 12 target file(s), 4 already up-to-date, uploaded 1 new artifact(s).Souhrn se dělí na:
- Lokalizováno N cílových souborů — engine vytvořil nové překlady a CLI je zapsalo.
- N už je aktuálních — zásahy serverové cache (zdroj odpovídal, cíl se znovu použil).
- N nových artefaktů nahráno — zdroje, které engine ještě neviděl (binární/velký obsah se uloží jednou a pak se už jen odkazuje).
- N cílů přeskočeno (místní úpravy) — místní hashe cílů se liší od lockfile. Pokud je chcete přepsat, spusťte znovu s
--force.
Při selhání jednotlivých cílů CLI vypíše chybu pro každý neúspěšný cíl a skončí s nenulovým návratovým kódem — užitečné pro CI:
✓ Run run_a8c...: localized 10 target file(s).
2 target(s) failed:
locales/de.json: rate limit on engine; retry later
locales/fr.json: timeoutS --estimate:
Estimating push cost…
› Estimated cost: ~$1.87 (12 target(s), ~48,000 output tokens — estimate, not a quote)
de: ~$0.9350 (6 target(s), ~24,000 tokens)
fr: ~$0.9350 (6 target(s), ~24,000 tokens)
4 target(s) already up-to-date — no cost.
✓ Estimate complete — nothing was translated. Run `lingo push` to start the translation.Sémantika opakování#
Lockfile se aktualizuje až po plně úspěšném běhu. Částečné selhání (např. timeout jednoho jazyka) ponechá hashe zdrojů v lockfile beze změny, takže další lingo push zopakuje stejný diff — bez ručního resetu.
Pokud engine selže ještě před zahájením překladu (ověření, validace), nic se nezapíše a lockfile zůstane beze změny.
Běžné vzory#
CI: překlad při merge#
- run: lingo push --backfill-missing --yes
- run: git add . && git commit -m "chore: refresh translations" && git push--backfill-missing je bezpečná výchozí volba: nic nepřepisuje, jen doplňuje chybějící položky.
Znovu přeložit pár řetězců#
lingo push --key auth.login --key billing.plan --waitPo úpravě formulace znovu přeloží přesně tyto klíče a všechny ostatní klíče v souboru nechá beze změny.
Práce s jedním souborem#
lingo push docs/en/onboarding.md -f -yZnovu přeložte jen jeden zdroj po větší změně textu. Pro rychlou iteraci přeskočte potvrzení.
Přidání nového jazyka#
Po navýšení targetLocales v .lingo/config.json:
lingo push --backfill-missingPřeloží celý korpus do nového jazyka, aniž by znovu překládal stávající.