---
title: "Travailler sans traduction automatique"
description: "Désactive par principe la traduction automatique de verbatra : aucune chaîne n'atteint un service de traduction et chaque texte vient d'une personne."
type: "how-to"
---
# Travailler sans traduction automatique

Désactive par principe la traduction automatique de verbatra : aucune chaîne n'atteint un service de traduction et chaque texte vient d'une personne.

<AvailableFrom version="0.12.0" />

Utilise ceci quand un NDA, un contrat client ou une règle d'entreprise interdit d'envoyer des chaînes à un service d'IA ou de traduction. Avec le fournisseur réglé sur `none`, chaque commande qui pourrait dépenser ou envoyer quoi que ce soit travaille uniquement avec des données locales ou refuse. Tout ce qui n'a pas besoin de fournisseur (le diff, le fichier de verrouillage, la mémoire de traduction, l'export et l'import, les contrôles, les types, la pseudo-localisation, l'extraction) fonctionne comme avant.

Il te faut un projet verbatra, ou un dossier où tu vas lancer `verbatra init`.

## Mise en place [#mise-en-place]

```bash
verbatra init --provider none
```

Cela écrit une config dont le bloc provider se résume à ceci, sans `.env.example`, puisqu'aucune clé d'API n'est jamais lue :

```ts title="verbatra.config.ts"
provider: { id: "none" }
```

Dans un projet existant, remplace le bloc `provider` par `{ id: "none" }`. [`verbatra doctor`](https://verbatra.kreitz-webdev.de/fr/docs/cli/doctor.md) signale alors "machine translation disabled by policy" et valide ses contrôles de fournisseur et de clé d'API sans chercher de clé.

## Ce que fait chaque commande [#ce-que-fait-chaque-commande]

| Commande | Avec `provider: { id: "none" }` |
| --- | --- |
| `translate`, `watch` | remplissent une clé uniquement à partir d'une correspondance exacte de la [mémoire de traduction](https://verbatra.kreitz-webdev.de/fr/docs/the-cache.md), jamais d'une correspondance approximative ; toute autre clé manquante ou modifiée est listée comme `unfilled`, laissée intacte et proposée à nouveau à l'exécution suivante. `translate` sort avec `3` tant qu'il reste une clé |
| `export`, `import`, `tmx` | inchangées : la remise et la mémoire de traduction sont les voies d'entrée des traductions humaines |
| `check`, `diff`, `doctor`, `pseudo`, `types`, `extract` | inchangées ; aucune n'appelle de fournisseur |
| `studio`, `mcp` | les lectures et modifications locales fonctionnent ; les actions qui dépensent auprès du fournisseur ne sont jamais proposées, même avec `--allow-spend` |
| SDK [`retranslateEntry`](https://verbatra.kreitz-webdev.de/fr/docs/sdk/review.md#retranslateentry) | échoue avec [`MACHINE_TRANSLATION_DISABLED`](https://verbatra.kreitz-webdev.de/fr/docs/error-codes.md#machine_translation_disabled) avant de lire ou de verrouiller quoi que ce soit |

Aucun fournisseur n'est construit sur aucun de ces chemins, quel que soit le contenu de l'environnement, et aucune requête réseau n'est faite.

## Passer depuis un fournisseur automatique [#passer-depuis-un-fournisseur-automatique]

La mémoire de traduction garde le travail 100 % humain dans un compartiment à part, séparé de tout ce qu'un fournisseur automatique a produit, donc passer à `none` part d'une mémoire vide. Changer `tone` ou le glossaire ne touche jamais ce compartiment.

Si tu veux reprendre des traductions antérieures, déplace-les explicitement, en sachant que tu importes une sortie machine dans une mémoire autrement 100 % humaine. Exporte avant de basculer : juste après le changement, `tmx export` écrit le compartiment humain, encore vide.

```bash
# 1. Still on the old provider: export its memory
verbatra tmx export

# 2. Switch the config to provider: { id: "none" }

# 3. Import it into the human-only bucket
verbatra tmx import verbatra-memory.tmx
```

Voir [`verbatra tmx`](https://verbatra.kreitz-webdev.de/fr/docs/cli/tmx.md) pour le nom du fichier et les options.

## La boucle au quotidien [#la-boucle-au-quotidien]

```bash
# 1. After source strings change, see what needs a human
verbatra translate          # exits 3 and lists the unfilled keys

# 2. Hand them to your translators
verbatra export

# 3. Bring the filled workbook back
verbatra import verbatra-translations.xlsx

# 4. Gate CI on it
verbatra check
```

L'étape 1 est facultative, car `verbatra diff` et `verbatra check` montrent les mêmes clés en attente. Elle vaut quand même le coup : elle remplit chaque clé que la mémoire de traduction couvre déjà, donc tes traducteurs ne voient que ce qui est vraiment nouveau. Pour la remise elle-même, voir [Confier avec Excel ou CSV](https://verbatra.kreitz-webdev.de/fr/docs/manual-translation.md) ou [Confier à une agence](https://verbatra.kreitz-webdev.de/fr/docs/translation-agency.md).

## En CI [#en-ci]

`translate` sort avec `3` quand des clés attendent une personne ([codes de sortie](https://verbatra.kreitz-webdev.de/fr/docs/cli/output.md#codes-de-sortie)), donc un pipeline peut faire échouer le build, ouvrir une demande de traduction ou simplement le signaler. L'[action GitHub](https://verbatra.kreitz-webdev.de/fr/docs/github-action.md#mode-humain-uniquement) laisse passer l'étape sur le code `3` et met sa sortie `needs-human` à `"true"` pour qu'une étape suivante agisse.

## Voir aussi [#voir-aussi]

- [Codes de sortie](https://verbatra.kreitz-webdev.de/fr/docs/cli/output.md#codes-de-sortie) : le contrat complet des codes de sortie.
- [Le cache de traduction](https://verbatra.kreitz-webdev.de/fr/docs/the-cache.md) : la mémoire que `translate` utilise pour remplir.
- [Fournisseurs](https://verbatra.kreitz-webdev.de/fr/docs/providers.md) : `none` à côté des fournisseurs de traduction.
- [Traitement des données et vie privée](https://verbatra.kreitz-webdev.de/fr/docs/data-handling.md) : ce qui quitte la machine avec chaque fournisseur.
