Skip to content

Translation Lifecycle

Every translation value in Comvi has a status. Status tracks where the value is in the review pipeline — it does not track whether the value is live on the CDN. Publishing is a separate, orthogonal action covered at the bottom of this page.

StatusMeaning
Not translatedNo value exists yet for this (key, language) pair
Not reviewedA value exists but hasn’t been approved by a reviewer
TranslatedA value exists and has been approved

Source-language values start as Translated — there is nothing to translate or review, they are the reference.

flowchart LR
  Start(("new key"))
  NT["Not translated"]
  NR["Not reviewed"]
  T["Translated"]

  Start --> NT
  NT -->|"translator edit, MT, import"| NR
  NT -->|"reviewer edit, import as reviewer"| T
  NR -->|"reviewer approves"| T
  T -->|"edit after approval"| NR
  T -->|"value cleared"| NT
  NR -->|"value cleared"| NT
Every target-language value moves through these three states. Transitions are driven by translator, reviewer, and import actions.

Triggered by any action that puts a value into the cell without reviewer authority:

  • A translator types a value and saves
  • Bulk translate fills the value via machine translation
  • An import contains a value and the importer has no review permission

Triggered when a reviewer (or import-with-review) lands the first value directly approved:

  • An editor or manager types and saves a value
  • An import is run by a reviewer — imported values land as Translated so they are not re-reviewed

The review step. A reviewer opens the value, confirms it is correct, and marks it Translated. Who can do this is governed by Roles & Permissions.

Triggered when an approved value is edited. Edits always drop a value back to Not reviewed — every change is re-reviewed, no matter how small. This is deliberate: silent edits to approved copy would break the trust that “Translated” means “checked”.

Clearing a value (blanking the cell or deleting the translation) returns it to Not translated, regardless of the previous state.

ActionTypical end status
Translator types a valueNot reviewed
Editor / Manager types a valueTranslated
Bulk machine translationNot reviewed
Translation Memory auto-applyNot reviewed
ImportTranslated
Reviewer approvesTranslated
Edit after approvalNot reviewed
Clear valueNot translated

The CDN is populated by a separate Publish action that snapshots the current values and pushes JSON bundles to the edge. Publishing does not change any value’s status — the status machine above describes editorial state, the CDN describes delivery state.

When you publish, you pick a status filter. If no statuses are selected, all statuses are included. Values that don’t match the filter are excluded from the bundle — they stay in the database untouched.

flowchart LR
  DB[("Translation values<br/>with statuses")]
  Publish{"Publish<br/>(pick status filter)"}
  Bundle["JSON bundles<br/>per (language, namespace)"]
  CDN["CDN edge"]

  DB --> Publish
  Publish -- filter: Translated --> Bundle
  Bundle --> CDN
Publishing reads the current values, filters by status, bundles them, and pushes to the CDN. It never writes status back.

This separation lets you keep working on drafts after a release ships, without risk of leaking unreviewed copy to production. Values remain Not reviewed in the editor while the previous Translated version is still served from the CDN.