IntlPull
Guide
20 min read

Localisation Continue pour Équipes Agiles : Guide d'Implémentation Complet

Livrez des fonctionnalités multilingues plus rapidement avec la localisation continue. Découvrez l'intégration CI/CD, les flux d'automatisation et des exemples réels d'équipes agiles.

IntlPull Team
IntlPull Team
03 Feb 2026, 11:44 AM [PST]
On this page
Summary

Livrez des fonctionnalités multilingues plus rapidement avec la localisation continue. Découvrez l'intégration CI/CD, les flux d'automatisation et des exemples réels d'équipes agiles.

Le problème de la localisation agile

Votre équipe livre des fonctionnalités à chaque sprint. Mais les traductions ont des semaines de retard :

Sprint 1 :

  • ✅ Fonctionnalité codée
  • ✅ Déployée en production
  • ❌ Uniquement en anglais

Sprint 3 :

  • ❌ Les traductions arrivent enfin
  • ❌ Le code original a changé
  • ❌ Le contexte est perdu
  • ❌ Les développeurs sont frustrés

Cela vous semble familier ? Vous faites de la localisation en cascade dans un environnement agile.

La solution : Localisation Continue. Traitez la traduction comme une partie de votre pipeline de déploiement, pas comme un processus séparé.


Qu'est-ce que la Localisation Continue ?

Localisation Continue signifie :

  1. Les développeurs codent des fonctionnalités et extraient les chaînes traduisibles
  2. Les chaînes sont automatiquement synchronisées vers les traducteurs
  3. Les traductions reviennent dans la base de code automatiquement
  4. Les fonctionnalités sont déployées dans toutes les langues simultanément

Ancienne méthode (Cascade) :

Code → QA → Déploiement → Extraction chaînes → Attente 2 semaines → Traduction → Redéploiement

Nouvelle méthode (Continue) :

Code → Auto-extraction → Auto-traduction → QA → Déploiement (toutes langues)

Résultat : Les fonctionnalités sont lancées mondialement dès le premier jour, pas des semaines plus tard.


Pourquoi la Localisation Continue est importante

Impact Commercial

MétriqueTraditionnelContinuAmélioration
Délai de mise sur le marché (multilingue)4-8 semaines0-3 jours90% plus rapide
Coûts de traduction$0.15/mot$0.08/mot47% moins cher
Temps développeur sur i18n8h/sprint1h/sprint87% de réduction
Erreurs de traduction15-20%3-5%75% moins d'erreurs

Source : Compilation d'études de Nimdzi, CSA Research et données internes

Avantages pour les Développeurs

  • ✅ Plus d'extraction manuelle de chaînes
  • ✅ Plus besoin de courir après les traducteurs pour les mises à jour
  • ✅ Plus de conflits de fusion liés aux PR de traduction
  • ✅ Plus de dette technique "on traduira plus tard"

Avantages Produit/Business

  • ✅ Lancement sur tous les marchés simultanément
  • ✅ Boucles de feedback plus rapides des utilisateurs internationaux
  • ✅ Voix de marque cohérente dans toutes les langues
  • ✅ Réduction du changement de contexte pour les traducteurs

Le Pipeline de Localisation Continue

Voici le flux de travail complet :

┌─────────────────────────────────────────────────────────────┐
│ 1. DÉVELOPPEUR                                              │
│    - Code la fonctionnalité                                 │
│    - Utilise t('key') pour les chaînes                      │
│    - Commite sur Git                                        │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│ 2. PIPELINE CI (GitHub Actions, etc.)                       │
│    - Auto-extrait les nouvelles clés                        │
│    - Pousse vers TMS (IntlPull, etc.)                       │
│    - Déclenche le flux de traduction                        │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│ 3. SYSTÈME DE GESTION DE TRADUCTION (TMS)                   │
│    - IA pré-traduit (80% fait instantanément)               │
│    - Mémoire de traduction comble les lacunes               │
│    - Alerte les traducteurs pour révision                   │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│ 4. TRADUCTEURS                                              │
│    - Voient le contexte (captures d'écran, usage)           │
│    - Révisent les traductions IA                            │
│    - Approuvent ou modifient                                │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│ 5. WEBHOOK → CI/CD                                          │
│    - TMS ping le webhook à la fin de la traduction          │
│    - Auto-télécharge les traductions mises à jour           │
│    - Crée une PR ou déploie directement                     │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│ 6. PRODUCTION                                               │
│    - Fonctionnalité en ligne dans toutes les langues        │
│    - Zéro intervention développeur                          │
└─────────────────────────────────────────────────────────────┘

Idée clé : Les développeurs ne touchent jamais aux fichiers de traduction. Le pipeline s'en charge.


Étape 1 : Configurer l'Extraction de Chaînes

D'abord, configurez l'extraction automatique de chaînes dans votre CI/CD.

Pour les projets React/Next.js

Installer IntlPull CLI :

Terminal
npm install -D @intlpullhq/cli

Configurer (.intlpull.json) :

JSON
1{
2  "projectId": "proj_abc123",
3  "sourceLanguage": "en",
4  "targetLanguages": ["es", "fr", "de", "ja"],
5  "format": "json",
6  "outputDir": "locales",
7  "extractPatterns": [
8    "src/**/*.{ts,tsx,js,jsx}",
9    "!src/**/*.test.{ts,tsx}"
10  ],
11  "scanConfig": {
12    "functions": ["t", "i18n.t", "useTranslation"],
13    "extractComments": true
14  }
15}

Tester l'envoi :

Terminal
npx @intlpullhq/cli status

Ceci montre la couverture de traduction et les clés manquantes.


Étape 2 : Automatiser l'Intégration CI/CD

Exemple GitHub Actions

Créez .github/workflows/i18n-sync.yml :

YAML
1name: Continuous Localization
2
3on:
4  push:
5    branches: [main, develop]
6  pull_request:
7    branches: [main]
8
9jobs:
10  # Job 1: Extract and upload new strings
11  extract-upload:
12    runs-on: ubuntu-latest
13    steps:
14      - uses: actions/checkout@v3
15
16      - name: Setup Node
17        uses: actions/setup-node@v3
18        with:
19          node-version: '18'
20          cache: 'npm'
21
22      - name: Install dependencies
23        run: npm ci
24
25      - name: Upload to IntlPull
26        run: npx @intlpullhq/cli upload
27        env:
28          INTLPULL_API_KEY: ${{ secrets.INTLPULL_API_KEY }}
29
30      - name: Check translation coverage
31        run: |
32          COVERAGE=$(npx @intlpullhq/cli status --json | jq -r '.coverage')
33          echo "Translation coverage: ${COVERAGE}%"
34
35          if [ $COVERAGE -lt 90 ]; then
36            echo "⚠️  Warning: Translation coverage below 90%"
37          fi
38
39  # Job 2: Download latest translations
40  download-translations:
41    runs-on: ubuntu-latest
42    if: github.event_name == 'push'
43    steps:
44      - uses: actions/checkout@v3
45
46      - name: Setup Node
47        uses: actions/setup-node@v3
48        with:
49          node-version: '18'
50
51      - name: Download translations
52        run: npx @intlpullhq/cli download
53        env:
54          INTLPULL_API_KEY: ${{ secrets.INTLPULL_API_KEY }}
55
56      - name: Create PR if changes
57        uses: peter-evans/create-pull-request@v5
58        with:
59          commit-message: 'chore: update translations'
60          title: '🌍 Translation Update'
61          body: |
62            Automated translation sync from IntlPull.
63
64            **Changes:**
65            - Downloaded latest translations
66            - Translation coverage: See workflow logs
67
68            **Next steps:**
69            - Review and merge
70            - Translations will deploy on next release
71          branch: i18n-auto-update
72          labels: i18n, automated

Ce que cela fait :

  1. À chaque commit : extrait les nouvelles chaînes → envoie à IntlPull
  2. Toutes les 6 heures : télécharge les dernières traductions → crée une PR
  3. Les développeurs examinent la PR → fusionnent → déploient

Étape 3 : Configurer le Webhook pour les Mises à Jour en Temps Réel

Au lieu d'interroger toutes les 6 heures, utilisez des webhooks pour des mises à jour instantanées.

Configurer le Webhook IntlPull

Dans le tableau de bord IntlPull :

  1. Allez dans Settings → Webhooks
  2. Ajoutez l'URL du webhook : https://api.github.com/repos/your-org/your-repo/dispatches
  3. Sélectionnez les événements : translation.approved, language.completed
  4. Ajoutez le token GitHub avec la portée repo

Workflow GitHub pour le Webhook

.github/workflows/translation-webhook.yml :

YAML
1name: Translation Webhook Handler
2
3on:
4  repository_dispatch:
5    types: [translation-update]
6
7jobs:
8  sync:
9    runs-on: ubuntu-latest
10    steps:
11      - uses: actions/checkout@v3
12
13      - name: Download translations
14        run: npx @intlpullhq/cli download
15        env:
16          INTLPULL_API_KEY: ${{ secrets.INTLPULL_API_KEY }}
17
18      - name: Commit and push
19        run: |
20          git config user.name "i18n-bot"
21          git config user.email "bot@intlpull.com"
22          git add locales/
23          git commit -m "chore: sync translations [skip ci]" || exit 0
24          git push

Maintenant : Dès qu'un traducteur approuve une traduction, elle est auto-déployée sur votre dépôt.


Étape 4 : Intégrer avec le Flux de Développement

Hooks de Pré-commit

Empêchez les commits avec des traductions manquantes :

Terminal
npm install -D husky lint-staged
JSON
1// package.json
2{
3  "lint-staged": {
4    "src/**/*.{ts,tsx}": [
5      "eslint --fix"
6    ]
7  }
8}

Ce que cela fait : Si vous ajoutez t('new.key') mais oubliez de l'extraire, le commit échoue.

Vérifications de PR

Ajoutez des vérifications de couverture de traduction aux PR :

YAML
1# .github/workflows/pr-checks.yml
2name: PR Checks
3
4on: pull_request
5
6jobs:
7  translation-coverage:
8    runs-on: ubuntu-latest
9    steps:
10      - uses: actions/checkout@v3
11
12      - name: Check translation coverage
13        run: |
14          npx @intlpullhq/cli status --format json > coverage.json
15
16          MISSING=$(jq -r '.missing | length' coverage.json)
17
18          if [ $MISSING -gt 0 ]; then
19            echo "❌ $MISSING untranslated keys found"
20            exit 1
21          fi
22
23          echo "✅ All keys translated"

Résultat : Les PR ne peuvent pas être fusionnées tant que les traductions ne sont pas complètes.


Étape 5 : Pré-traduction par IA

L'IA traduit 80-90% de vos chaînes instantanément. Les humains révisent le reste.

Activer la Traduction IA dans IntlPull

Terminal
1# .intlpull.json
2{
3  "ai": {
4    "enabled": true,
5    "provider": "claude-3.5-sonnet",
6    "fallback": "gpt-4o",
7    "autoApprove": {
8      "threshold": 0.95, // Auto-approve if confidence > 95%
9      "languages": ["es", "fr", "de"] // Only for similar languages
10    }
11  }
12}

Workflow :

  1. Nouvelle clé ajoutée : t('product.new_feature')
  2. IntlPull la détecte
  3. L'IA traduit vers Espagnol/Français/Allemand instantanément
  4. Confiance élevée ? Auto-approbation
  5. Confiance faible ? Signalement pour révision humaine

Coût : ~$0.01 pour 1 000 mots (vs $0.15 pour la traduction humaine)

Vitesse : Instantané vs 2-3 jours


Étape 6 : Configurer la Mémoire de Traduction

Évitez de retraduire les mêmes phrases.

Comment fonctionne la Mémoire de Traduction

Première fois :

  • Traduire "Add to cart" → "Añadir al carrito" (coûte $0.05)

Deuxième fois :

  • Détecte "Add to cart" dans un nouveau composant
  • Réutilise la traduction existante (coûte $0)

Correspondance partielle :

  • "Add to wishlist" détecté
  • MT suggère : "Añadir a..." (correspondance 70%)
  • Le traducteur complète : "Añadir a la lista de deseos"

Configurer MT dans IntlPull

JSON
1{
2  "translationMemory": {
3    "enabled": true,
4    "minMatchScore": 0.75,
5    "autoApplyPerfectMatches": true,
6    "sources": [
7      "current-project",
8      "organization-wide",
9      "public-domain" // Free TM from open source
10    ]
11  }
12}

Économies : 30-50% de réduction des coûts après 6 mois


Étape 7 : Surveiller l'État de la Traduction

Métriques du Tableau de Bord

Suivez ces KPI :

MétriqueCiblePourquoi c'est important
Couverture de traduction>95%Les fonctionnalités ne peuvent pas sortir incomplètes
Temps de traduction<24hVersions plus rapides
Coût par mot<$0.10Efficacité budgétaire
SLA Traducteur<48hDélais prévisibles
Taux de clés manquantes<1%Contrôle qualité

Notifications Slack

Soyez alerté quand les traductions sont prêtes :

YAML
1# GitHub Action
2- name: Notify Slack
3  if: steps.download.outcome == 'success'
4  uses: slackapi/slack-github-action@v1
5  with:
6    payload: |
7      {
8        "text": "🌍 Translations updated",
9        "blocks": [
10          {
11            "type": "section",
12            "text": {
13              "type": "mrkdwn",
14              "text": "*Translation Update*
15
16Languages: ES, FR, DE
17Coverage: 98%
18
19<https://github.com/${{ github.repository }}/pull/123|Review PR>"
20            }
21          }
22        ]
23      }
24  env:
25    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

Exemples du Monde Réel

Exemple 1 : Entreprise SaaS (React + Next.js)

Avant la Localisation Continue :

  • 2 semaines de retard pour les traductions
  • 4 heures/semaine à gérer des feuilles de calcul
  • 10% de clés non traduites au lancement

Après :

  • Les fonctionnalités sont livrées dans toutes les langues simultanément
  • 20 minutes/semaine sur i18n (vérifications automatisées)
  • 99% de couverture de traduction

Configuration :

  • GitHub Actions pour CI/CD
  • IntlPull pour TMS
  • Claude AI pour la pré-traduction (Espagnol, Français)
  • Révision humaine pour Allemand, Japonais

ROI : 15 heures économisées/semaine × $100/h = $6,000/mois


Exemple 2 : Application Mobile (React Native)

Défi : L'app se met à jour toutes les 2 semaines. Les traductions ont 4 semaines de retard.

Solution : Mises à jour OTA (Over-The-Air)

JavaScript
1// app.tsx
2import { IntlPullOTA } from '@intlpullhq/react-native';
3
4useEffect(() => {
5  // Check for translation updates on app start
6  IntlPullOTA.sync({
7    projectId: 'proj_abc123',
8    currentVersion: '1.2.0',
9  }).then((updated) => {
10    if (updated) {
11      console.log('Translations updated!');
12      // Optionally reload UI
13    }
14  });
15}, []);

Résultat :

  • Les traductions se mettent à jour sans approbation de l'App Store
  • Les utilisateurs obtiennent de nouvelles langues en quelques heures
  • Cycle de localisation 50% plus rapide

Pièges Courants

1. Ne pas impliquer les traducteurs tôt

Erreur : Les traducteurs ne voient les chaînes qu'une fois le code terminé.

Correction : Partagez les designs Figma et le contexte tôt. Utilisez la fonctionnalité de capture d'écran d'IntlPull :

```bash

Upload screenshots via the IntlPull Dashboard

Or use the API to upload screenshots from your CI pipeline

```

Les traducteurs voient le texte apparaît → meilleures traductions.


2. Sur-automatiser les vérifications de qualité

Erreur : Auto-approuver toutes les traductions IA.

Correction : Définir des seuils de confiance :

JSON
1{
2  "autoApprove": {
3    "threshold": 0.95,
4    "languages": ["es", "fr", "pt"], // Similar to English
5    "exclude": ["ja", "ar", "zh"] // Always human-review these
6  }
7}

3. Ignorer le Contexte

Erreur : Le traducteur voit "Save". Est-ce "enregistrer un fichier" ou "économiser de l'argent" ?

Correction : Ajouter des commentaires dans le code :

TypeScript
1// Context appears in TMS automatically
2t('actions.save', {
3  // Translators will see this
4  _comment: 'Button to save document, not save money',
5});

Ou utiliser des espaces de noms :

JSON
1{
2  "file.save": "Save",
3  "checkout.save": "Save 20%"
4}

4. Pas de plan de retour en arrière

Erreur : Une mauvaise traduction part en production, aucun moyen de revenir en arrière.

Correction : Utiliser des versions :

Terminal
1# Tag translations with release version
2npx @intlpullhq/cli release create v1.2.0
3
4# Rollback if needed
5npx @intlpullhq/cli release rollback v1.1.0

Avancé : Stratégie de Traduction Multi-Branche

Défi

Vous avez :

  • Branche main (production)
  • Branche develop (staging)
  • Branches de fonctionnalité

Comment gérer les traductions entre les branches ?

Solution : Synchronisation de Traduction Basée sur les Branches

JSON
1// .intlpull.json
2{
3  "branches": {
4    "main": {
5      "requireApproval": true, // Human review required
6      "autoMerge": false
7    },
8    "develop": {
9      "requireApproval": false, // AI auto-approve
10      "autoMerge": true
11    },
12    "feature/*": {
13      "inheritFrom": "develop"
14    }
15  }
16}

Workflow :

  1. Branche de fonctionnalité : IA traduit, auto-fusionne
  2. Develop : IA + révision humaine rapide
  3. Main : Révision humaine complète avant production

Mesurer le Succès

Suivez ces métriques 3 mois après l'implémentation de la localisation continue :

MétriqueRéférenceCibleComment mesurer
Temps de traduction2 semaines48 heuresAnalytique IntlPull
Temps développeur sur i18n8h/sprint1h/sprintSuivi du temps
Coût de traduction$0.15/mot$0.08/motAnalyse facture
Rapports de bugs (i18n)15/mois3/moisSuivi des problèmes
Couverture de traduction85%98%npx @intlpullhq/cli status

ROI attendu : 300-500% la première année


Checklist de Localisation Continue

Infrastructure :

  • ✅ CI/CD extrait les chaînes automatiquement
  • ✅ TMS intégré (IntlPull, Crowdin, etc.)
  • ✅ Webhooks configurés pour la synchro instantanée
  • ✅ Mises à jour OTA activées (apps mobiles)

Workflow :

  • ✅ Hooks pré-commit empêchent les clés non traduites
  • ✅ Vérifications PR imposent la couverture de traduction
  • ✅ Pré-traduction IA activée
  • ✅ Mémoire de traduction configurée
  • ✅ Contexte (captures d'écran, commentaires) fourni

Surveillance :

  • ✅ Tableau de bord suit couverture, coût, SLA
  • ✅ Notifications Slack/email sur mises à jour
  • ✅ Rapports hebdomadaires aux parties prenantes
  • ✅ Plan de retour en arrière pour mauvaises traductions

Équipe :

  • ✅ Développeurs formés sur l'utilisation de t()
  • ✅ Traducteurs ont accès au TMS
  • ✅ L'équipe produit revoit le texte clé
  • ✅ Les parties prenantes comprennent le ROI

Prochaines Étapes

  1. Auditer l'état actuel : Combien de temps prend la localisation maintenant ?
  2. Choisir un projet pilote : Commencer avec un dépôt, une langue
  3. Configurer IntlPull : Commencez ici
  4. Configurer CI/CD : Utilisez l'exemple GitHub Actions ci-dessus
  5. Activer la traduction IA : Réduisez les coûts de 50%+
  6. Mesurer les résultats : Suivez le temps, le coût, la couverture
  7. Passer à l'échelle : Ajoutez plus de langues et de dépôts

Besoin d'aide ? Contactez-nous pour une consultation. Nous examinerons votre configuration et vous montrerons exactement comment implémenter la localisation continue.


Lectures Complémentaires

La localisation continue n'est pas seulement plus rapide. C'est ainsi que les équipes agiles modernes livrent des produits mondiaux. Commencez aujourd'hui.

Tags
continuous-localization
agile
ci-cd
automation
devops
i18n
IntlPull Team
IntlPull Team
Product

Building tools to help teams ship products globally. Follow us for more insights on localization and i18n.