Step 1: Choisissez un fournisseur de traduction
L’action fonctionne avec Azure AI Translator, AWS Translate et Traduction Google Cloud derrière une seule surface API unifiée. Choisissez un seul fournisseur par exécution avec l’entrée provider — le flux de travail se comporte de la même manière peu importe le fournisseur; Seules les qualifications diffèrent. Voir Fournisseurs de traduction pour une comparaison complète.
Step 2: Ajoutez des identifiants et un flux de travail
Stockez les identifiants de votre fournisseur sous forme de secrets du dépôt GitHub, puis créez .github/workflows/translate.yml. Sélectionnez votre fournisseur ci-dessous pour sa configuration spécifique — le reste du flux de travail est identique.
Azure AI Translator
Azure est le fournisseur par défaut, donc provider peut être omis. Provisionnez une ressource Azure AI Translator dans le portail Azure, puis stockez ses identifiants :
Stockez ces documents sous forme de secrets de dépôt
TRANSLATOR_KEY— La clé d’abonnement pour la ressource.TRANSLATOR_ENDPOINT— l’URL du point de terminaison régional.TRANSLATOR_REGION— la région Azure de la ressource.
Ajouter le flux de travail
name: translate
on: push: branches: [main] paths: - "src/**/*.en.resx" - "src/**/*.en.json"
permissions: contents: write pull-requests: write
jobs: translate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - id: translate uses: IEvangelist/resource-translator@v3 with: provider: | azure: subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} region: ${{ secrets.TRANSLATOR_REGION }} sourceLocale: en toLocales: '["fr","de","es"]' - if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} branch: machine-translationAWS Translate
Réglez provider sur aws. Privilégiez l’OIDC via aws-actions/configure-aws-credentials afin qu’aucun secret durable ne soit stocké — les exportations par étapes AWS_REGION pour vous. Pour utiliser des clés statiques à la place, stockez :
Stockez ces documents sous forme de secrets de dépôt
AWS_ACCESS_KEY_ID— votre identifiant de clé d’accès AWS.AWS_SECRET_ACCESS_KEY— votre clé d’accès secrète AWS.
Une région est toujours requise — définissez-la avec awsRegion ou la variable d’environnement AWS_REGION.
Ajouter le flux de travail
name: translate
on: push: branches: [main] paths: - "src/**/*.en.resx" - "src/**/*.en.json"
permissions: id-token: write # for aws-actions/configure-aws-credentials (OIDC) contents: write pull-requests: write
jobs: translate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/gh-actions-translate aws-region: us-east-1 - id: translate uses: IEvangelist/resource-translator@v3 with: provider: | aws: region: us-east-1 # or rely on AWS_REGION from the step above formality: FORMAL brevity: true sourceLocale: en toLocales: '["fr","de","es"]' - if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} branch: machine-translationTraduction Google Cloud
Réglez provider sur google. Authentifiez avec soit une identifiante JSON de compte de service, soit une clé API — fournissez exactement une :
Stockez ces documents sous forme de secrets de dépôt
GCP_TRANSLATE_CREDENTIALS— une clé JSON de compte de service (en tant que chaîne JSON).GCP_TRANSLATE_API_KEY— ou une clé API Google Cloud.
Une googleProjectId optionnelle est déduite de la certification lorsqu’elle est omise.
Ajouter le flux de travail
name: translate
on: push: branches: [main] paths: - "src/**/*.en.resx" - "src/**/*.en.json"
permissions: contents: write pull-requests: write
jobs: translate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - id: translate uses: IEvangelist/resource-translator@v3 with: provider: | google: # Provide EITHER a service-account JSON credential... credentials: ${{ secrets.GCP_TRANSLATE_CREDENTIALS }} # ...OR an API key: # apiKey: ${{ secrets.GCP_TRANSLATE_API_KEY }} model: nmt sourceLocale: en toLocales: '["fr","de","es"]' - if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} branch: machine-translationStep 3: Commit d’un fichier source de ressource
Les fichiers de ressources utilisent la convention Name.<sourceLocale>.<ext>. Par exemple, Greetings.en.resx devient Greetings.fr.resx, Greetings.de.resx, et ainsi de suite après une partie.
Step 4: Let smart change detection protect your bill
changeDetection defaults to smart and stores a compact .github/resource-translator-state.json manifest in the repo. Commit that file so future runs can reuse stable translations, preserve manual target edits, and send only new, missing, changed, or settings-invalidated keys to the provider. If localized files already exist, run once with snapshotOnly: true to create the manifest without provider calls.
Step 5: Inspectez la sortie
Une fois le flux de travail terminé, l’action révèle trois sorties que vous pouvez intégrer dans une description PR : summary-title, summary-details et has-new-translations. Il rédige aussi un résumé Markdown sur la page d’emploi via core.summary.