Step 1: Choisissez un fournisseur de traduction
L’action fonctionne avec Azure AI Translator, AWS Translate et Traduction Google Cloud derrière une 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 quel que soit 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 éléments sous forme de secrets de dépôt
TRANSLATOR_KEY— La clé d’abonnement pour la ressource.TRANSLATOR_ENDPOINT— l’URL régionale du point de terminaison.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 éléments 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 nécessaire — 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 un identifiant JSON de compte de service, soit une clé API — fournissez exactement une :
Stockez ces éléments sous forme de secrets de dépôt
GCP_TRANSLATE_CREDENTIALS— une clé JSON de compte de service (sous forme de chaîne JSON).GCP_TRANSLATE_API_KEY— ou une clé API Google Cloud.
Un googleProjectId optionnel est déduit de la certification lorsqu’il est omis.
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 expose trois sorties que vous pouvez intégrer dans une description de PR : summary-title, summary-details et has-new-translations. Il rédige également un résumé Markdown sur la page d’emploi via core.summary.