The translations came back. German, French, Japanese, all populated, all well-formed. They look fine – but "looks fine" in a language you do not read is faith, not verification, and the one thing a translation can quietly get wrong is the thing you most need it to get right: the meaning.
The backTranslation stage closes that gap without a second pair of human eyes. It translates each output back into the source locale, has an AI compare that round trip against the words you originally sent, and flags where the meaning drifted. You are not trusting that the meaning survived the round trip – you are watching the pipeline check that it did.
stepId: backTranslationThis page covers that one stage: what each step does, how drift is graded, and which cases get fixed automatically. New to the pipeline? Start with the pipeline overview for how stages wrap the core translate step. To turn it on, see Configure the pipeline; to read what a run produced, see Observe pipeline runs.
On this page
- How the check works
- How drift is graded
- A borrowed technique, automated
- When to enable it
- Reading the result
How the check works#
The stage runs after the core translation – and after rephrase, when that is enabled – so it always verifies the current best output, the exact text that would otherwise ship. It is three steps.
Reverse translate
The translated output is translated back into the source locale, using the same engine configuration – glossary, brand voice, instructions – adapted for the reverse direction. This is a real second translation, not a lookup.
Detect drift
An AI agent compares the back-translation against the original source you sent and grades any divergence by severity: minor, major, or critical.
Correct if needed
When the grade is major or critical, a further AI pass adjusts the forward translation to resolve the drift. minor divergences are recorded for observability and left as they are – the output is not rewritten over a wording nuance.
So the check does not just tell you the meaning drifted – on the cases that matter, it repairs the forward translation before that translation reaches your users.
How drift is graded#
A round trip never returns the source verbatim. Two translators – or one AI in two directions – will phrase the same idea differently, and that is expected, not a defect. The grade is what separates a harmless rewording from a meaning that moved:
| Severity | What it means | What the stage does |
|---|---|---|
minor | Wording differs, meaning intact – a synonym, a reordered clause, a stylistic choice. | Recorded, not corrected. |
major | The meaning shifted enough to matter – a changed emphasis, a dropped qualifier, an altered claim. | A correction pass adjusts the forward translation. |
critical | The meaning is wrong – a negation flipped, a number changed, a term inverted. | A correction pass adjusts the forward translation. |
The split is the point. A check that "fixed" every reworded sentence would churn good translations and bury the real problems; a check that flagged everything and fixed nothing would just hand you a longer report. Grading lets the stage leave the harmless cases alone and spend a correction pass only where the meaning actually moved.
What gets auto-corrected, and what does not
Only major and critical drift triggers a correction pass. minor drift is surfaced for observability and the output is left unchanged. If you want every divergence in front of a person regardless of grade, that is what human review is for – back-translation is the automated guard, not a replacement for a reviewer.
A borrowed technique, automated#
Back-translation is not a Lingo.dev invention. It is a classic quality-assurance method in human translation: a second translator renders the target text back into the source language, an editor compares the two, and the comparison surfaces where meaning was lost. It catches the failure that a single forward pass hides – a translation that reads fluently and means something subtly different.
The pipeline runs that same method with LLMs in place of the second translator and the editor. The technique is the established one; what is automated is the labor and the latency. That is why the stage exists – not to add an AI flourish, but to put a recognized meaning check inline in your job, on every locale, every time.
When to enable it#
Back-translation earns its place wherever a wrong meaning is expensive and you cannot read the target locale yourself to catch it. Reach for it when:
- The content is legal, medical, financial, or technical – domains where a flipped negation or a shifted qualifier is a real liability, not a style note.
- You ship into locales no one on your team reads, so the back-translation is your only window onto whether the meaning held.
- The output is high-stakes and low-volume – a contract clause, a dosage instruction, a compliance notice – where the extra checking cost is trivial against the cost of being wrong.
It runs a second translation – so it costs more
It performs a full reverse translation and an AI comparison on every output, plus a correction pass on top of that whenever drift is graded major or critical – so a job with back-translation on does more model work than a forward-only translation. Each enabled stage records its own cost on the job, so you can see exactly what the check added. Turn it on where meaning fidelity is worth that cost, and leave it off for high-volume, low-risk strings where a forward translation is enough.
It pairs naturally with rephrase: rephrase makes the copy read native, back-translation confirms that the native-sounding rewrite still says what the source said. Both are toggled independently – see Configure the pipeline.
Reading the result#
Like every pipeline stage, an enabled back-translation check writes its own record into the job's steps array. Fetch the job with GET /jobs/localization/:jobId and the backTranslation step tells you the check ran and how it resolved:
{
"id": "ljb_C3d4E5f6G7h8I9j0",
"status": "completed",
"outputData": { "clause": "Diese Vereinbarung darf nicht ohne schriftliche Zustimmung übertragen werden." },
"steps": [
{
"stepId": "localize",
"type": "action",
"status": "completed",
"errorMessage": null,
"createdAt": "2026-04-17T10:00:00Z",
"startedAt": "2026-04-17T10:00:00Z",
"completedAt": "2026-04-17T10:00:09Z"
},
{
"stepId": "backTranslation",
"type": "action",
"status": "completed",
"errorMessage": null,
"createdAt": "2026-04-17T10:00:09Z",
"startedAt": "2026-04-17T10:00:09Z",
"completedAt": "2026-04-17T10:00:21Z"
}
]
}A completed backTranslation step means the check ran end to end; if it graded major or critical drift, the outputData you read is the corrected forward translation, not the pre-check one. The full breakdown – the severities the check flagged, and what a stage failed or skipped means for the job as a whole – lives on Observe pipeline runs, the canonical home for reading steps and warnings.
That is the whole stage: a reverse translation, a graded comparison, and a correction where the meaning moved – so the fidelity of every output is verified inline, not assumed. Turn it on per request or set it as an engine default, then read the step to confirm the round trip held.
