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 two ways to force that: a scoped --force push, or purge followed by a normal push.
Force a scoped push#
--force retranslates every matching target, ignoring existing translations and server-side cache. It requires a scope — bare lingo push --force is rejected so you can't accidentally retranslate the whole project.
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 --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 |
| Switched the engine's model | lingo push <scope> --force |
| Updated rules / glossary | lingo push <scope> --force, or per-locale purge + backfill |
| Poor quality in one locale | lingo purge --locale <code> then lingo push --backfill-missing |
| Starting completely fresh | lingo push --backfill-missing --force --yes |
