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

1. Sourceen (reference)2. TranslateAI / human3. Reviewapprove4. Publishmanifest5. ShipCDN tag100% fillednon-emptyapprovedno errorsetagQuality gate per stage

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:

ColumnWhat it countsHow it gets unstuck
FilledTranslations present and non-emptyAI translate, or edit cell manually
EmptyKeys with no value for this languageAI translate, manual entry, or remove the key
StaleTranslations where the source changed after the target"Refresh stale" — rewrites only stale rows
UnapprovedAI/human writes pending reviewApprove per-cell, or bulk-approve in Quality panel
ErrorsQuality-check violationsQuality panel → Issues → fix or dismiss

'Ready' is a lie when unapproved > 0

The panel shows ready when 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

  1. Push source for en — 100% filled is required for any publish.
  2. Add target languages in project settings. They appear as empty columns in the editor.
  3. Translate all missing from the editor toolbar (per language) or Translate all languages for parallel runs.
  4. Review the Unapproved count — open the Quality tab, bulk-approve AI generations, or edit per cell.
  5. Publish a version (e.g. production). Approved keys ship to the CDN tag.
  6. 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).

Source editrev N → rev N+1stale: trueper language"Refresh stale"job per languageAI retranslatestale onlyReview + publishcycle repeatsStale flags clear when a new revision writes to that translation (manual edit or AI refresh).

Review modes

The default review policy decides whether a write blocks publishing:

ModeBehaviorWhen to use
offNo review required; everything publishesInternal tools, prototypes
ai_onlyOnly AI-generated writes need approvalProduction with human spot-check
selectedOnly listed languages need reviewMixed markets, gradual rollout
productionOnly the production tag needs reviewStrict staging → prod gates
allEvery write needs approvalRegulated 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).