Retranslation
lingo push only translates what changed: it hashes each source against the lockfile and skips anything that matches. That's the right default, but sometimes you want to retranslate content whose source text is identical — after switching the engine's model, updating its rules or glossary, or fixing a quality issue.
There are three ways to do that, and they differ in how much you pay: --key for individual strings, a scoped --force push for whole files, or purge followed by a normal push for a whole locale. Reach for the narrowest one that covers what you want to redo.
Retranslate specific keys#
--key re-translates only the keys you name, merges them into the existing translation, and leaves every other key byte-identical. It ignores the source diff, so a string whose English never changed is still redone.
lingo push --key auth.loginRepeat the flag for several keys:
lingo push --key auth.login --key billing.planA pattern claims a key exactly, as a prefix ending on a ., /, - or [ boundary, or as a glob. So auth.login also claims auth.login.title, but never auth.login_url; plain auth claims the whole auth subtree but never authority. Quote globs, or your shell expands them before the CLI sees them:
lingo push --key "auth.*"This is the cheapest option by a wide margin — you pay for the keys you named and nothing else. It needs an existing translation to merge into, so a locale you have never translated is skipped with a message pointing at --backfill-missing. Some formats can't take a key scope at all — Formats lists which, and why.
See lingo push for the full behavior, including what happens to keys you didn't name.
Force a scoped push#
--force retranslates every matching target, ignoring existing translations and server-side cache. Scope it, unless you really do mean the whole project — bare lingo push --force covers every configured pattern, and the confirmation prompt is all that stands in the way.
One file#
lingo push content/en/landing.mdx --forceA subtree#
lingo push 'content/en/**/*.md' --forceEverything#
lingo push --backfill-missing --force --yes--force prompts before overwriting; pass --yes to skip the prompt (CI). See lingo push for the full flag reference.
Retranslate a single locale#
push has no per-locale flag. To redo just one language, delete its files and backfill:
lingo purge --locale fr
lingo push --backfill-missingpurge removes the fr targets; --backfill-missing then regenerates only what's missing — the other locales are untouched. This is also cheaper than --force, because everything except fr stays a cache hit. See Purge.
Estimate before you spend#
Any push accepts --estimate, which prices the run and exits without translating:
lingo push 'content/en/**/*.md' --force --estimateIt composes with --key too, so you can price a key scope before running it:
lingo push --key auth.login --estimateEstimates are heuristic, not a quote — final cost may differ.
When to retranslate#
| Situation | What to run |
|---|---|
| Source text changed | Nothing — plain lingo push picks it up |
| A few strings you're unhappy with | lingo push --key auth.login --key billing.plan |
| Switched the engine's model | lingo push <scope> --force |
| Updated rules / glossary | lingo push --key <affected keys>, or lingo push <scope> --force |
| Poor quality in one locale | lingo purge --locale <code> then lingo push --backfill-missing |
| Starting completely fresh | lingo push --backfill-missing --force --yes |