Accéder au contenu principal

Livre de recettes : Traduire 30 langues

Faire évoluer un projet de quelques paramètres régionaux à une couverture mondiale. Ce livre de recettes vous guide à travers la sélection des méthodes, l'optimisation des coûts et l'intégration CI pour un déploiement multilingue réel.

Scénario : Vous disposez d'une application SaaS avec en, fr, es. Vous devez ajouter 27 langues supplémentaires réparties sur trois niveaux d'exigences de qualité.


Étape 1 : Catégoriser vos langues

Toutes les 30 langues ne nécessitent pas la même approche. Regroupez-les selon la qualité de la méthode disponible :

NiveauLanguesMéthodeRaison
Niveau 1 — Premiumja, ko, zh, de, ptllm (GPT-4o)Marchés à forte valeur, grammaire nuancée
Niveau 2 — Standardit, nl, pl, sv, da, fi, no, cs, ro, hu, el, tr, id, ms, th, vi, uk, bggoogle-translateVolume élevé, bien pris en charge par Google
Niveau 3 — Encadrécrk, oj, mi, hawllm-coached + pluginsRessources limitées, nécessitent l'application de la terminologie

Étape 2 : Configurer par paire

champollion.config.json
{
"version": 3,
"inputLocale": "en",
"localesDir": "./locales",
"defaultMethod": "google-translate",
"model": "google/gemini-3.5-flash",
"languages": {
"ja": { "name": "Japanese", "register": "Polite/formal" },
"ko": { "name": "Korean", "register": "Formal" },
"zh": { "name": "Simplified Chinese", "register": "Neutral" },
"de": { "name": "German", "register": "Formal (Sie)" },
"pt": { "name": "Brazilian Portuguese", "register": "Informal" },
"crk": { "name": "Plains Cree (SRO)", "register": "Neutral" }
},
"pairs": {
"en:ja": { "method": "llm", "model": "openai/gpt-4o" },
"en:ko": { "method": "llm", "model": "openai/gpt-4o" },
"en:zh": { "method": "llm", "model": "openai/gpt-4o" },
"en:de": { "method": "llm", "model": "openai/gpt-4o" },
"en:pt": { "method": "llm", "model": "openai/gpt-4o" },
"en:crk": { "methodPlugin": "crk-coached-v1" }
}
}

Remarque : Les langues non listées dans pairs héritent de defaultMethod: "google-translate". Vous n'avez pas besoin de lister les 30.

information

Le support de crk est en cours de développement — consultez Supporter une langue peu dotée en ressources pour connaître l'état et les directives de contribution.

Étape 3 : Configurer les clés API

Vous aurez besoin des deux clés API pour cette configuration :

export OPENROUTER_API_KEY="sk-or-v1-..."
export GOOGLE_TRANSLATE_API_KEY="AIza..."

Étape 4 : Effectuer d'abord un essai à blanc

Prévisualisez toujours avant de traduire 30 langues :

npx champollion sync --dry

Examinez la sortie. Elle affichera :

  • Quelles paires utilisent quelle méthode
  • Combien de clés sont nouvelles/modifiées par paramètre régional
  • Appels API estimés par niveau

Étape 5 : Exécuter la synchronisation

npx champollion sync

Champollion traite chaque paire indépendamment. Les paires du Niveau 2 utilisant Google Translate seront rapides. Les paires LLM du Niveau 1 seront plus lentes mais de meilleure qualité. Les paires encadrées du Niveau 3 utilisent les données d'encadrement du plugin.

Mises à jour incrémentielles

Après la synchronisation initiale, les exécutions suivantes ne traduisent que les clés modifiées ou nouvelles :

# Only keys that changed since last sync
npx champollion sync

Le fichier de verrouillage (.champollion.lock) suit ce qui a été traduit, de sorte que vous ne retraduis jamais le contenu stable.

Étape 6 : Auditer la qualité

Vérifiez l'état de toutes les paires de langues :

npx champollion status

Cela génère un tableau montrant la méthode, le modèle, le niveau de qualité de chaque paire, et si les données d'encadrement ou les scores de référence sont disponibles.

La sortie a-t-elle respecté vos registres ?

À l'étape 2, vous avez déclaré un registre par langue — "Polite/formal" pour le japonais, "Formal (Sie)" pour l'allemand. (Nouveau pour ce terme ? Le glossaire l'explique en langage clair.) Ces instructions entrent dans l'invite de traduction, mais une invite est une demande, pas une garantie.

Le harnais MT Eval Arena — le même outil qui alimente le classement public — peut mesurer l'adhérence au registre et au style sur un échantillon de vos traductions. Ses métriques de style d'écriture vérifient chaque sortie par rapport au registre attendu (marqueurs formels/informels, pronoms T–V, contractions, dérive de longueur de phrase) et rapportent un style_consistency_rate sur l'exécution. Vous pouvez également le pointer vers un profil de voix de marque personnalisé avec --style-profile.

# install the harness, then run your sample corpus through it
curl -fsSL champollion.dev/harness | bash
mt-eval run --corpus my-sample.json --style-profile brand-voice.json

Deux mises en garde honnêtes : ces métriques sont informatives (elles n'entrent jamais dans le score composite du classement), et la détection de formalité est basée sur des marqueurs — un détecteur de dérive, pas un jugement humain. Détails et définitions des métriques : Métriques de style d'écriture et de registre.

Étape 7 : Intégration CI

Ajoutez à votre flux de travail GitHub Actions pour que les traductions restent à jour à chaque envoi :

.github/workflows/i18n-sync.yml
name: Sync Translations
on:
push:
paths:
- 'locales/en/**'

jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20

- run: npm ci

- name: Sync translations
run: npx champollion sync
env:
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
GOOGLE_TRANSLATE_API_KEY: ${{ secrets.GOOGLE_TRANSLATE_API_KEY }}

- name: Commit updated translations
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add locales/
git diff --staged --quiet || git commit -m "chore(i18n): sync translations"
git push

Estimation des coûts

Pour un projet avec 500 clés source sur 30 langues :

NiveauLanguesMéthodeCoût approximatif
Niveau 1 (5 langues)ja, ko, zh, de, ptGPT-4o~2,50 $/synchronisation complète
Niveau 2 (18 langues)it, nl, pl, etc.Google Translate~0,90 $/synchronisation complète
Niveau 3 (4 langues)crk, oj, mi, hawGPT-4o-mini encadré~0,40 $/synchronisation complète
Total30 languesMixte~3,80 $/synchronisation complète

Les synchronisations incrémentielles (5–20 clés modifiées) coûtent une fraction d'une synchronisation complète.

Voir aussi