One source key changes
Smart detection isolates the delta before any provider call.
Three secrets, four lines, and your repo is multilingual on the next push.
Smart detection isolates the delta before any provider call.
Built for shipping
Drop the action into your existing CI, point it at Azure, AWS, or Google, and let your repo speak every language you target.
Default in v3.2
A compact .github/resource-translator-state.json tracks parser keys, source hashes, and translation-affecting settings. The action skips stable keys, preserves manual target edits, and logs every decision with rule codes. Use snapshotOnly to bootstrap existing translations without a provider call.
Most runs translate only the changed keys
Round-trips .resx, .xliff, .po, .json, .ini, and .restext with byte-stable formatting.
Drop a .github/resource-translator.yml file for include globs, glossaries, and Custom Translator categories.
Lock brand names and product terms with smart word-boundary regex that handles C++, .NET, and friends.
Preview translations without writing files, or surface every error as a warning while you iterate.
summary-title, summary-details, and has-new-translations slot directly into create-pull-request.
Pick one provider per run. Each is driven by its official SDK (@azure-rest/ai-translation-text, @aws-sdk/client-translate, @google-cloud/translate) with automatic retries on 408/429/5xx - no hand-rolled HTTP. esbuild-bundled, audit-clean.
Resource Translator opens machine-translated pull requests for your resource files using Azure, AWS, or Google - one unified action, one provider per run, official SDKs under the hood.
Get startedname: translateon: push: paths: ["**/*.en.resx", "**/*.en.json"]
permissions: contents: write pull-requests: write
jobs: translate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - id: translator uses: IEvangelist/resource-translator@v3 with: sourceLocale: en provider: | azure: subscriptionKey: ${{ secrets.KEY }} endpoint: ${{ secrets.ENDPOINT }} region: ${{ secrets.REGION }} toLocales: '["fr","de","es","ja"]'
- uses: peter-evans/create-pull-request@v7 with: title: Update translationsOne provider key - Azure, AWS, or Google - and one workflow file. Resource Translator handles the rest.