# Translator and reviewer workflow

A two-stage flow: translators draft values, reviewers approve them, and Content Deploy ships only what has been approved.

Canonical: https://comvi.io/docs/platform/recipes/translator-review-workflow

Translators write, reviewers approve, and the CDN carries only approved values. Three
settings make the split real: the Translator role, the Editor role, and the Content Deploy
status filter.

Every save in the editor sets a value to **Needs Review**, whoever saves it, and machine
translation output lands the same way. Editing a **Translated** value drops it back to
**Needs Review**. Approval is a separate action on the status badge. See
[Translation lifecycle](/docs/platform/translation-lifecycle).

## Set up

1. **Invite translators as Translator.** They can create and edit values and use machine
   translation. They cannot set **Translated**, touch keys or namespaces, or import or
   export. See [Team management](/docs/platform/team-management).

2. **Invite reviewers as Editor.** Review permission belongs to Editor, Manager and Owner.
   Viewer is read-only and cannot review.

3. **Restrict people to their languages (optional).** Set **Restrict to languages** on the
   invite, or later from the member's role dialog. A German translator then sees and edits
   only `de`.

4. **Filter Content Deploy to Translated.** Open **Settings → Content Deploy** and tick
   **Translated** only under **Filter by Status**. The filter starts empty, and empty
   deploys every status.

5. **Notify reviewers (optional).** A webhook on `translation.created` and
   `translation.updated` posts to a channel when a translator saves. See
   [Webhooks](/docs/platform/integrations/webhooks).

> **Imports skip the review stage**
>
> A file import and a `comvi push` both write **Translated** directly and record the
> importing user as reviewer. Review before the import, or select the imported rows and use
> **Status → Mark as Needs Review** afterwards.

## Daily flow

**Translator.** Open **Translations**, filter to your language and **Not Translated**, and
work down the list. The side panel offers machine translation and translation memory
matches. Save with `Cmd/Ctrl + Enter`; `Tab` and `Shift + Tab` move between languages.

**Reviewer.** Filter to your language and **Needs Review**. Read each value and correct it
if needed, which saves it as **Needs Review** again. Approve by clicking the status badge
and choosing **Translated**. For a run of rows that are all fine, tick their checkboxes and
use **Status → Mark as Translated** in the selection bar; the same menu has
**Mark as Needs Review** to send work back. The badge is not clickable while a value is
**Not Translated**.

Content Deploy runs about 5 seconds after the last change, and at most one minute after
the first one in a busy stretch, so approved values reach the CDN within a minute or so.

## Machine translation with review

1. Filter to the language and **Not Translated**, then tick the rows.

2. Click **Translate** in the selection bar. Machine translation is metered per month, so
   check the [current limits](https://comvi.io/pricing) before a large batch.

3. Review. Every machine translation lands as **Needs Review**, so the whole batch waits in
   the reviewer's filter.

## After approval

Any edit to a **Translated** value sends it back to **Needs Review** and out of the deploy
filter until someone approves it again. To ship a fix immediately, an Editor makes the edit
and then sets the status back to **Translated**: two actions, and the second is the one that
puts the value back on the CDN.

## What to avoid

- **Giving translators the Editor role to unblock them.** Editor carries review permission,
so the boundary is gone.
- **Leaving the deploy status filter empty.** Empty ships everything, drafts included.
- **Importing into a project you review in.** Imports write **Translated** without asking.
- **Making reviewers Viewers.** Viewer is read-only and cannot change a status.

## Next steps

- [Translation lifecycle](/docs/platform/translation-lifecycle): The full status state machine.
- [Team management](/docs/platform/team-management): Roles and language restrictions.
- [Machine translation](/docs/platform/machine-translation): Fill drafts for review.
- [Content Deploy / CDN](/docs/platform/cdn): The status filter and auto-deploy timing.
