Step 1: Hitamo umusemuzi
The action works with Azure AI Translator, AWS Translate, and Google Cloud Translation behind one unified API surface. Pick a single provider per run with the provider input — the workflow behaves identically regardless of provider; gusa impamyabumenyi z'icyiciro cya mbere ziba zitandukanye. See Abatanga ubusemuzi for a full comparison.
Step 2: Add credentials and a workflow
Kubika ibyangombwa by'utanga serivisi nk'amabanga y'ububiko bwa GitHub, hanyuma ukore .github/workflows/translate.yml. Select your provider below for its specific setup — the rest of the workflow is identical.
Azure AI Translator
Uriya muyobozi w'Akarere ka Nyamasheke ni we wahawe inshingano zo kurengera ibidukikije, ku buryo provider ashobora gushyirwa mu bikorwa. Tanga ibikoresho bya Azure AI Translator ku rubuga rwa Azure, hanyuma ubike ibyangombwa byayo:
Kubika aya mabanga nk'amabanga y'ububiko
TRANSLATOR_KEY— Urufunguzo rw'ibicuruzwa by'ibicuruzwa.TRANSLATOR_ENDPOINT— the regional endpoint URL.TRANSLATOR_REGION— Akarere ka Nyamasheke kagizwe n'Akarere ka Nyamasheke.
Add the workflow
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
Set provider to aws. Hitamo OIDC ukoresheje aws-actions/configure-aws-credentials kugira ngo hatagira amabanga y'igihe kirekire abikwa — intambwe yoherezwa mu mahanga AWS_REGION kuri wowe. Kugirango ukoreshe urufunguzo rwa static, bika:
Kubika aya mabanga nk'amabanga y'ububiko
AWS_ACCESS_KEY_ID— Your AWS access key ID.AWS_SECRET_ACCESS_KEY— Urufunguzo rwawe rw'ibanga rw'ibanga.
A region is always required — set it with awsRegion or the AWS_REGION environment variable.
Add the workflow
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-translationGoogle Cloud Translation
Set provider to google. Authenticate with either a service-account JSON credential or an API key — provide exactly one:
Kubika aya mabanga nk'amabanga y'ububiko
GCP_TRANSLATE_CREDENTIALS— Urufunguzo rwa JSON (nk'umurongo wa JSON).GCP_TRANSLATE_API_KEY— cyangwa urufunguzo rwa Google Cloud API.
An optional googleProjectId is inferred from the credential when omitted.
Add the workflow
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 a source resource file
Resource files use the Name.<sourceLocale>.<ext> convention. Urugero Greetings.en.resx Greetings.fr.resx, Greetings.de.resx, n'ibindi nyuma yo kwiruka.
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: Genzura umusaruro
Iyo akazi karangiye, igikorwa kigaragaza ibicuruzwa bitatu ushobora guhuza mu bisobanuro bya PR: summary-title, summary-details, na has-new-translations. It also writes a Markdown summary into the job page via core.summary.