Auteur:
    Création:2025-05-20Dernière mise à jour:2025-06-29

    Génération Automatique des Traductions dans un Pipeline CI/CD

    Intlayer permet la génération automatique des traductions pour vos fichiers de déclaration de contenu. Plusieurs méthodes existent selon votre flux de travail.

    Table des matières

    Utilisation du CMS

    Avec Intlayer, vous pouvez adopter un flux de travail où une seule locale est déclarée localement, tandis que toutes les traductions sont gérées à distance via le CMS. Cela permet de détacher complètement le contenu et les traductions de la base de code, offrant plus de flexibilité aux éditeurs de contenu et permettant le rechargement dynamique du contenu (pas besoin de reconstruire l'application pour appliquer les modifications).

    Exemple de Configuration

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.SPANISH, Locales.FRENCH],
        requiredLocales: [Locales.ENGLISH], // Les locales optionnelles seront gérées à distance
        defaultLocale: Locales.ENGLISH,
      },
      editor: {
        dictionaryPriorityStrategy: "distant_first", // Le contenu distant a la priorité
    
        applicationURL: process.env.APPLICATION_URL, // URL de l'application utilisée par le CMS
    
        clientId: process.env.INTLAYER_CLIENT_ID, // Identifiants du CMS
        clientSecret: process.env.INTLAYER_CLIENT_SECRET,
      },
      ai: {
        applicationContext: "This is a test application", // Aide à garantir une génération cohérente des traductions
      },
    };
    
    export default config;
    

    Pour en savoir plus sur le CMS, consultez la documentation officielle.

    Utilisation de Husky

    Vous pouvez intégrer la génération de traductions dans votre flux de travail Git local en utilisant Husky.

    Exemple de Configuration

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.SPANISH, Locales.FRENCH],
        requiredLocales: [Locales.ENGLISH], // Les locales optionnelles sont gérées à distance
        defaultLocale: Locales.ENGLISH,
      },
      editor: {
        clientId: process.env.INTLAYER_CLIENT_ID,
        clientSecret: process.env.INTLAYER_CLIENT_SECRET,
      },
      ai: {
        provider: "openai",
        apiKey: process.env.OPENAI_API_KEY, // Utilisez votre propre clé API
    
        applicationContext: "This is a test application", // Aide à garantir une génération cohérente des traductions
      },
    };
    
    export default config;
    
    .husky/pre-push
    npx intlayer build                          # Pour s'assurer que les dictionnaires sont à jour
    npx intlayer fill --unpushed --mode fill    # Remplit uniquement le contenu manquant, ne met pas à jour les contenus existants
    
    Pour plus d'informations sur les commandes CLI d'Intlayer et leur utilisation, consultez la documentation CLI.
    Si vous avez plusieurs applications dans votre dépôt utilisant des instances intlayer séparées, vous pouvez utiliser l'argument --base-dir comme ceci :
    .husky/pre-push
    # Application 1
    npx intlayer build --base-dir ./app1
    npx intlayer fill --base-dir ./app1 --unpushed --mode fill
    
    # Application 2
    npx intlayer build --base-dir ./app2
    npx intlayer fill --base-dir ./app2 --unpushed --mode fill
    

    Utilisation de GitHub Actions

    Intlayer fournit une commande CLI pour remplir automatiquement et réviser le contenu du dictionnaire. Cela peut être intégré dans votre workflow CI/CD en utilisant GitHub Actions.

    .github/workflows/intlayer-translate.yml
    name: Remplissage automatique Intlayer
    on:
      push:
        branches: [ main ]
        paths:
          - 'src/**'
      pull_request:
        branches: [ main ]
        paths:
          - 'src/**'
      workflow_dispatch: {}
    
    concurrency:
      group: 'autofill-${{ github.ref }}'
      cancel-in-progress: true
    
    jobs:
      autofill:
        runs-on: ubuntu-latest
        env:
          INTLAYER_CLIENT_ID: ${{ secrets.INTLAYER_CLIENT_ID }}
          INTLAYER_CLIENT_SECRET: ${{ secrets.INTLAYER_CLIENT_SECRET }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    
        steps:
          - name: ⬇️ Récupérer le dépôt
            uses: actions/checkout@v3
            with:
              persist-credentials: true
    
          - name: 🟢 Configurer Node.js
            uses: actions/setup-node@v3
            with:
              node-version: 20
    
          - name: 📦 Installer les dépendances
            run: npm ci
    
          - name: ⚙️ Compiler le projet Intlayer
            run: npx intlayer build
    
          - name: 🤖 Remplir automatiquement les traductions manquantes
            run: npx intlayer fill --git-diff --mode fill
    
          - name: 📤 Créer ou mettre à jour la PR de traduction
            uses: peter-evans/create-pull-request@v4
            with:
              commit-message: chore: remplissage automatique des traductions manquantes [skip ci]
              branch: auto-translations
              title: chore: mise à jour des traductions manquantes
              labels: translation, automated
    

    Pour configurer les variables d'environnement, allez sur GitHub → Settings → Secrets and variables → Actions et ajoutez le secret.

    Comme pour Husky, dans le cas d'un monorepo, vous pouvez utiliser l'argument --base-dir pour traiter séquentiellement chaque application.
    Par défaut, l'argument --git-diff filtre les dictionnaires qui incluent les modifications de la base (par défaut origin/main) vers la branche courante (par défaut : HEAD).
    Pour plus d'informations sur les commandes Intlayer CLI et leur utilisation, consultez la documentation CLI.