Ingénierie//9 min de lecture

Translation Automation : Optimisez la localisation avec CI/CD et Webhooks

Eray Gündoğmuş
Partager

Translation Automation : Optimisez la localisation avec CI/CD et Webhooks

Points clés

  • La translation automation élimine les transferts manuels de fichiers entre développeurs et traducteurs, réduisant les délais de cycle de localisation
  • L'intégration CI/CD permet une localisation continue où les nouvelles chaînes sont automatiquement extraites, traduites et resynchronisées
  • Les webhooks permettent aux plateformes TMS de déclencher des actions (builds, notifications, deployments) lorsque les traductions sont terminées
  • L'automatisation réduit le risque de livrer du contenu non traduit ou des traductions obsolètes
  • Un workflow bien automatisé peut réduire le délai de localisation de semaines à heures

Qu'est-ce que l'Auto Translation ?

Dans son essence, l'auto translation est la pratique consistant à supprimer les étapes manuelles du workflow de traduction afin que le contenu passe de la langue source aux langues cibles avec une intervention humaine minimale. Le terme couvre un spectre large — d'un simple appel API à Google Translate, à un pipeline entièrement orchestré qui détecte les nouvelles chaînes dans votre codebase, les traduit avec une IA sensible au contexte, les achemine via une révision humaine et fusionne les traductions approuvées dans votre dépôt sous forme de pull request.

L'automatic translation est importante parce que les équipes logicielles modernes livrent en continu. Si votre processus de traduction nécessite des exports manuels de fichiers, une coordination par e-mail et des imports manuels, il devient le goulot d'étranglement qui retarde chaque sortie internationale. L'auto translation élimine ce goulot d'étranglement.

Il existe trois niveaux de maturité de l'automatic translation :

  1. Auto translation basique : Un développeur appelle une API MT (DeepL, Google Translate, Azure Translator) pour traduire un fichier, puis intègre manuellement le résultat. Rapide pour des tâches ponctuelles, mais ne passe pas à l'échelle.
  2. Traduction semi-automatisée : Un TMS surveille votre dépôt ou CMS pour détecter les modifications, applique automatiquement la translation memory et la machine translation, puis notifie les réviseurs humains. La majeure partie du pipeline s'exécute sans intervention, mais les humains approuvent avant la publication.
  3. Pipelines de traduction entièrement automatisées : Des workflows intégrés à CI/CD où les modifications de chaînes sont détectées lors du merge, traduites par IA, validées par des quality gates (vérification des placeholders, validation de la longueur, seuils de complétude) et fusionnées automatiquement si toutes les vérifications passent. La révision humaine est réservée aux types de contenu qui la nécessitent (copy marketing, textes juridiques).

Le reste de ce guide se concentre sur les niveaux 2 et 3 — les approches basées sur CI/CD et les webhooks qui font de l'automatic translation une partie durable de votre workflow de développement, pas un raccourci ponctuel.

Pourquoi automatiser la traduction ?

Dans un workflow de localisation manuel, les développeurs extraient les fichiers de traduction, les envoient par e-mail aux traducteurs ou les téléchargent vers un TMS, attendent les traductions, téléchargent les fichiers complétés et les fusionnent dans la codebase. Chaque transfert introduit des délais et des opportunités d'erreur.

La translation automation supprime ces transferts en connectant directement votre dépôt de code source à votre système de gestion des traductions. Lorsque les développeurs effectuent des commits de modifications, les chaînes nouvelles ou modifiées sont automatiquement détectées et envoyées pour traduction. Lorsque les traducteurs terminent leur travail, les traductions sont automatiquement resynchronisées.

Le pipeline de localisation automatisé

Un pipeline automatisé typique suit ce flux :

Le développeur effectue un commit du code
        ↓
CI/CD détecte les fichiers de traduction modifiés
        ↓
TMS CLI pousse les chaînes nouvelles/modifiées vers le TMS
        ↓
Le TMS applique la translation memory (correspondances instantanées)
        ↓
Chaînes sans correspondance → pré-traduction MT ou assignation humaine
        ↓
Le traducteur complète les traductions dans le TMS
        ↓
Webhook déclenché : "translations completed"
        ↓
CI/CD récupère les traductions complétées dans le dépôt
        ↓
PR créé avec les nouvelles traductions
        ↓
Revue, merge, déploiement

Modèles d'intégration CI/CD

Exemple GitHub Actions

La plupart des plateformes TMS fournissent des outils CLI utilisables dans les pipelines CI/CD :

# .github/workflows/sync-translations.yml
name: Sync Translations

on:
  push:
    branches: [main]
    paths:
      - 'src/locales/en/**'

jobs:
  push-sources:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Push source strings to TMS
        run: |
          npx @better-i18n/cli push \
            --project your-org/your-project \
            --source src/locales/en
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}

Récupérer les traductions selon un planning

# .github/workflows/pull-translations.yml
name: Pull Translations

on:
  schedule:
    - cron: '0 */6 * * *'  # Toutes les 6 heures
  workflow_dispatch:       # Déclenchement manuel

jobs:
  pull-translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Pull completed translations
        run: |
          npx @better-i18n/cli pull \
            --project your-org/your-project \
            --target src/locales
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}
      - name: Create PR if translations changed
        uses: peter-evans/create-pull-request@v6
        with:
          title: 'chore(i18n): update translations'
          commit-message: 'chore(i18n): pull latest translations from TMS'
          branch: i18n/update-translations

GitLab CI/CD

# .gitlab-ci.yml
push-sources:
  stage: sync
  only:
    changes:
      - src/locales/en/**
  script:
    - npx @better-i18n/cli push --project $PROJECT_ID --source src/locales/en

Workflows basés sur les Webhooks

Les webhooks permettent à votre TMS de notifier vos systèmes lorsque des événements se produisent — traductions terminées, révisions approuvées ou nouvelles chaînes détectées.

Événements Webhook courants

ÉvénementDéclencheurAction typique
translation.completedToutes les chaînes pour une langue sont traduitesRécupérer les traductions, créer un PR
translation.reviewedLa traduction passe la révisionDéployer sur staging
source.updatedNouvelles chaînes source détectéesNotifier les traducteurs
project.exportedL'export de traduction est prêtTélécharger et merger

Exemple de gestionnaire de Webhook

// Gestionnaire de webhook Express.js
app.post('/webhooks/translations', (req, res) => {
  const { event, language, project } = req.body;

  if (event === 'translation.completed') {
    // Déclencher le workflow GitHub Actions via API
    triggerWorkflow('pull-translations', {
      language,
      project,
    });
  }

  res.status(200).json({ received: true });
});

Considérations sur les formats de fichiers

Différents formats de fichiers affectent le fonctionnement de l'automatisation :

FormatPoints fortsCourant dans
JSON (plat/imbriqué)Facile à parser, largement supportéReact, Vue, Angular
XLIFFStandard de l'industrie, préserve les métadonnéesOutils enterprise
PO/POTOutillage mature, adapté aux traducteursDjango, Rails, PHP
RESXFormat natif .NETProjets C#, .NET
ARBStandard Flutter/DartApplications Flutter
Strings/StringsdictFormat natif iOSApplications iOS/macOS
XMLFormat natif AndroidApplications Android

Votre pipeline d'automatisation doit gérer le format spécifique utilisé par votre codebase. La plupart des outils CLI TMS supportent tous les formats courants.

Automatisation de l'extraction de chaînes

Pour les projets qui n'utilisent pas de fichiers de traduction séparés, l'extraction automatisée de chaînes identifie les chaînes traduisibles dans le code source :

Analyse statique

Les outils scannent le code source pour trouver des appels de fonctions de traduction :

// Ces modèles sont détectés par les outils d'extraction :
t('home.title')
useTranslations('common')
formatMessage({ id: 'greeting' })

Configuration de l'extraction

{
  "extract": {
    "patterns": ["src/**/*.{tsx,ts}"],
    "functions": ["t", "useTranslations", "formatMessage"],
    "output": "src/locales/en/messages.json"
  }
}

Exécuter la commande d'extraction comme hook pre-commit ou étape CI garantit que les nouvelles chaînes traduisibles sont toujours capturées.

Quality gates dans les pipelines automatisées

L'automatisation doit inclure des vérifications de qualité pour éviter que des traductions cassées n'atteignent la production :

  1. Validation des placeholders : Vérifier que tous les placeholders ({name}, {count}) des chaînes source existent dans les traductions
  2. Validation de la longueur : Signaler les traductions qui dépassent significativement la longueur de la chaîne source (peut provoquer un débordement de l'UI)
  3. Vérification de complétude : S'assurer que toutes les langues requises atteignent un pourcentage de traduction minimum avant le deployment
  4. Validation du format : Vérifier que les fichiers de traduction sont des JSON/XLIFF/PO valides (pas d'erreurs de syntaxe)
# Quality gate dans CI
- name: Validate translations
  run: |
    npx @better-i18n/cli validate \
      --source src/locales/en \
      --target src/locales \
      --min-coverage 95

Pièges courants

  1. Synchronisation excessive : Récupérer les traductions à chaque commit crée des PRs bruyants. Utilisez plutôt des récupérations planifiées ou déclenchées par webhook.
  2. Contexte manquant : L'extraction automatisée capture les chaînes mais pas les captures d'écran ni les descriptions. Fournissez du contexte via des commentaires ou des fonctionnalités du TMS.
  3. Conflits de branches : Les PRs de traduction peuvent entrer en conflit avec les branches de fonctionnalités. Fusionnez fréquemment les mises à jour de traduction pour minimiser les conflits.
  4. Gestion des secrets : Les tokens API TMS doivent être stockés de manière sécurisée dans les secrets CI/CD, pas dans le dépôt.
  5. Rate limiting : Les appels API aux plateformes TMS peuvent être soumis à des limites de taux. Implémentez une logique de backoff et de retry dans les scripts d'automatisation.

FAQ

À quelle fréquence dois-je synchroniser les traductions ?

Poussez les chaînes source à chaque merge vers main (ou votre branche principale). Récupérez les traductions soit selon un planning (toutes les 4-6 heures), soit via webhook lorsque les traductions sont terminées. Évitez de synchroniser à chaque commit vers des branches de fonctionnalités — cela crée du bruit inutile.

Dois-je auto-merger les PRs de traduction ?

Pour des workflows bien établis avec des quality gates (validation des placeholders, vérification du format), l'auto-merge des PRs de traduction peut être sûr. Pour les nouvelles configurations, exigez une révision manuelle jusqu'à ce que vous ayez confiance dans les vérifications de qualité. Beaucoup d'équipes font de l'auto-merge pour les langues non critiques et exigent une révision pour les marchés principaux.

Que faire si les traductions cassent le build ?

Ajoutez un check CI qui valide les fichiers de traduction avant le merge. Si un fichier de traduction a une syntaxe invalide, des placeholders manquants ou d'autres problèmes, le PR devrait échouer en CI et ne pas être mergé. Cela empêche les traductions cassées d'atteindre la production.

L'auto translation est-elle suffisamment bonne pour la production ?

L'auto translation — c'est-à-dire la machine translation entièrement automatisée sans révision humaine — convient aux outils internes, à la documentation développeur et au contenu à faibles enjeux où la vitesse compte plus que le polish. Pour l'UI produit orientée utilisateur, le copy marketing et le contenu juridique, l'auto translation doit servir de premier brouillon dans un pipeline qui inclut une révision humaine. L'objectif de l'automatic translation dans un contexte CI/CD n'est pas d'éliminer les humains, mais d'éliminer la coordination manuelle qui les ralentit.

Comments

Loading comments...