One source key changes
Smart detection isolates the delta before any provider call.
Three secrets, one workflow, and smart change detection is on by default for every future 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 smart change detection keep provider calls focused on the keys that actually need work.
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.
Already have localized files? Seed the manifest from disk without provider calls, then let future runs translate only the delta.
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 and no hand-rolled HTTP. esbuild-bundled, audit-clean.
Resource Translator opens machine-translated pull requests using Azure, AWS, or Google. Its default smart change detection sends only new, missing, or changed keys to your provider.
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 for Azure, AWS, or Google, plus one workflow file. Resource Translator handles the rest without retranslating stable strings over and over.