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.
The three statuses
Section titled “The three statuses”| Status | Meaning |
|---|---|
| Not translated | No value exists yet for this (key, language) pair |
| Not reviewed | A value exists but hasn’t been approved by a reviewer |
| Translated | A value exists and has been approved |
Source-language values start as Translated — there is nothing to translate or review, they are the reference.
State machine
Section titled “State machine”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
Transitions in detail
Section titled “Transitions in detail”Not translated → Not reviewed
Section titled “Not translated → Not reviewed”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
Not translated → Translated
Section titled “Not translated → Translated”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
Not reviewed → Translated
Section titled “Not reviewed → Translated”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.
Translated → Not reviewed
Section titled “Translated → Not reviewed”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”.
→ Not translated
Section titled “→ Not translated”Clearing a value (blanking the cell or deleting the translation) returns it to Not translated, regardless of the previous state.
What triggers what
Section titled “What triggers what”| Action | Typical end status |
|---|---|
| Translator types a value | Not reviewed |
| Editor / Manager types a value | Translated |
| Bulk machine translation | Not reviewed |
| Translation Memory auto-apply | Not reviewed |
| Import | Translated |
| Reviewer approves | Translated |
| Edit after approval | Not reviewed |
| Clear value | Not translated |
Publishing is not a status
Section titled “Publishing is not a status”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
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.