# Machine translation

Configure MT providers, run single-key and bulk translation, understand how glossaries reach each provider type, and what MT costs in credits.

Canonical: https://comvi.io/docs/platform/machine-translation

Machine translation fills first drafts so translators do not start from a blank cell. Enable
the providers that fit your workload under **Settings → Machine Translation** and name one
the primary provider. Every MT result lands as **Needs Review**.

## Provider matrix

| Provider | Type | Glossary behaviour |
|---|---|---|
| **Google Translate** | Traditional MT | Hints shown to the editor, not applied by the provider |
| **DeepL** | Traditional MT | Hints only |
| **Amazon Translate** | Traditional MT | Hints only |
| **Azure Translator** | Traditional MT | Hints only |
| **OpenAI** | AI | Injected into the prompt |
| **Anthropic Claude** | AI | Injected into the prompt |

| AI provider | Models |
|---|---|
| **OpenAI** | GPT-5.4 mini, GPT-5.4, GPT-5.5 |
| **Anthropic Claude** | Claude Haiku 4.5, Claude Sonnet 4.6 |

Traditional providers do not read instructions. AI providers follow
[AI context](/docs/platform/ai-context) at the project, language and key level and receive
glossary terms through the prompt. A common split is traditional MT for bulk fills on a new
language and AI for marketing pages, onboarding flows and emails.

## Set up providers

1. Open **Settings → Machine Translation**.

2. Tick the providers you want from the **Traditional MT** and **AI-Powered** groups.
   Provider API keys are configured server-side by Comvi.

3. Pick a model for each enabled AI provider.

4. Set a **primary provider**. It is used for automatic suggestions and single-click
   translations.

5. Decide on **Auto-apply translations**. On: suggestions are written as **Needs Review**
   automatically. Off: the suggestion is cached and appears when a translator opens the key.

## Automatic suggestions

When a key is created or its source text changes, and at least one provider is enabled,
Comvi does two things per target language: it looks for a 100%
[translation memory](/docs/platform/translation-memory) match and writes it if found;
otherwise it queues a machine translation job with the primary provider. With auto-apply on,
the result is written as **Needs Review**; with it off, the result is cached for the editor.

## Translate one key

Open a key in the editor. The **Machine Translation** panel lists one suggestion per enabled
provider, labelled with its source. Click **Apply**, edit if needed, and mark the value
**Translated**. The refresh action discards the cached suggestions and re-fetches them.

## Translate in bulk

1. On the Translations page, filter by status **Not Translated**, and by language or
   namespace, to scope the batch.

2. Tick the rows and click **Translate** in the selection bar.

3. In the **Apply Machine Translation** dialog, tick the target locales. Tick **Overwrite
   existing translations** to replace values that are already there; otherwise those keys
   are skipped silently. The dialog shows an estimated credit cost.

4. Click **Apply Translation**. Comvi queues one background job per target language and
   reports progress. Results land as **Needs Review**.

Bulk translation always uses the project's configured providers; there is no per-batch
override. To use a different provider, change the primary under
**Settings → Machine Translation** first. Bulk runs call the provider for every selected key;
the 100% translation-memory shortcut applies only to key creation and source edits.

Keys with no source value report "No source value to translate from" in the job summary.
Language pairs the provider does not support are named there too.

## Glossaries and MT

For **AI providers**, matching glossary terms are injected into the prompt with their correct
translations, and terms marked not translatable are listed as must-keep-verbatim. Reliable,
not guaranteed, so review critical terminology. For **traditional providers**, terms are not
sent to the provider; they appear as hints to the reviewer in the editor. For enforced
terminology in bulk MT, use an AI provider or run a find-and-replace pass before review. See
[Glossaries](/docs/platform/glossaries).

## Credits

| Plan | MT credits per month |
|---|---|
| Free | 20,000 |
| Early adopter | 200,000 |
| Credits add-on | +100,000 each |

Traditional providers are charged per character, deducted before the request. AI providers
are charged per input and output token, deducted after the response from the real counts.
The rates per provider are on the [credits page](https://comvi.io/pricing/credits); run a
small test batch on a new provider before a large one.

When the allowance runs out, MT requests fail with `403 LIMIT_EXCEEDED` ("MT credits limit
exceeded" or "MT credits exhausted"), the bulk dialog shows a toast telling you to upgrade
or buy credits, and everything else keeps working. Credits reset at the start of each
period.

> **Credits are not read-only mode**
>
> Going over the key, member or project limit, or letting a subscription lapse, puts the
> whole organization into read-only: every write fails with `403 READ_ONLY_MODE` until you
> upgrade or delete resources. Running out of MT credits does not.

## Review

Machine output enters the lifecycle as **Needs Review**, and history records its origin as
**Machine** rather than **Human**. A translator or reviewer edits or approves each value, and
the next deploy picks up whatever passes the status filter. To keep raw MT out of production,
tick **Translated** only under **Settings → Content Deploy**.

Custom AI instructions are a REST API field with no control in the dashboard. If quality is
poor on one language, enable a second provider and compare suggestions side by side in the
editor.

## Next steps

- [AI context](/docs/platform/ai-context): Steer AI translation at the project, language and key level.
- [Glossaries](/docs/platform/glossaries): How term preferences reach each provider type.
- [Translation memory](/docs/platform/translation-memory): Reuse previous translations before calling MT.
- [Translation lifecycle](/docs/platform/translation-lifecycle): Why MT output lands as Needs Review.
