Translation workflow — visual diagrams
End-to-end visual guide: source → translate → review → publish → ship, with per-state actions, quality gates, and a guided Get-to-CDN checklist.
Translations move through five stages. Each stage has its own quality gate and its own place in the dashboard. This page shows the flow, the gates, and what to click when something is stuck.
The flow at a glance
Per-language readiness — what the numbers mean
The Quality & Review tab shows five counters per language. Each tells you exactly which gate is blocking you from publishing that language:
| Column | What it counts | How it gets unstuck |
|---|---|---|
| Filled | Translations present and non-empty | AI translate, or edit cell manually |
| Empty | Keys with no value for this language | AI translate, manual entry, or remove the key |
| Stale | Translations where the source changed after the target | "Refresh stale" — rewrites only stale rows |
| Unapproved | AI/human writes pending review | Approve per-cell, or bulk-approve in Quality panel |
| Errors | Quality-check violations | Quality panel → Issues → fix or dismiss |
'Ready' is a lie when unapproved > 0
errors === 0 and empty === 0. With the default policy ( review: ai_only), AI translations still need approval before they ship to the CDN. Check the Unapproved column before publishing.First-time setup checklist
- Push source for
en— 100% filled is required for any publish. - Add target languages in project settings. They appear as empty columns in the editor.
- Translate all missing from the editor toolbar (per language) or Translate all languages for parallel runs.
- Review the
Unapprovedcount — open the Quality tab, bulk-approve AI generations, or edit per cell. - Publish a version (e.g.
production). Approved keys ship to the CDN tag. - Ship by pointing your app at the tag (
version: production). Floating tags update on the next reload.
Stale lifecycle
When the source string for a key changes, every other language is marked stale and a stale_target quality issue is raised. Until you refresh, the old translation may be wrong (different numbers, new features).
Review modes
The default review policy decides whether a write blocks publishing:
| Mode | Behavior | When to use |
|---|---|---|
| off | No review required; everything publishes | Internal tools, prototypes |
| ai_only | Only AI-generated writes need approval | Production with human spot-check |
| selected | Only listed languages need review | Mixed markets, gradual rollout |
| production | Only the production tag needs review | Strict staging → prod gates |
| all | Every write needs approval | Regulated content |
Status glossary
- Origin:
human,ai,memory(TM hit),sync,import,restore,system. Decides whether review policy applies. - Revision: every write appends one. History drawer shows the chain.
- Approved: a revision was reviewed and pinned as the active shipping revision.
approvedRevisionId === currentRevisionId. - Stale: source changed since this translation was written; AI or human refresh recommended.
- Block: quality-check failure preventing publish (configurable in project quality settings).