Localize your repo on every commit.
Resource Translator opens machine-translated pull requests for your resource files using Azure AI Translator via the official SDK — no extra services, just a workflow.
- 0 npm-audit issues
- 150 tests
- Node 20 / 22 / 24
- Official Azure SDK
.NET XML .xliff XLIFF 2.0 .po gettext .json nested or flat .ini key=value .restext MUI text Built for shipping
Translation as a workflow, not a chore.
Drop the action into your existing CI, point it at Azure AI Translator, and let your repo speak every language you target.
Six file formats
Round-trips .resx, .xliff, .po, .json, .ini, and .restext with byte-stable formatting.
Repo-level config
Drop a .github/resource-translator.yml file for include globs, glossaries, and Custom Translator categories.
Glossary-aware
Lock brand names and product terms with smart word-boundary regex that handles C++, .NET, and friends.
Dry-run + soft-fail
Preview translations without writing files, or surface every error as a warning while you iterate.
PR-friendly outputs
summary-title, summary-details, and has-new-translations slot directly into create-pull-request.
Official Azure SDK
Built on @azure-rest/ai-translation-text + @azure/core-rest-pipeline — automatic retries on 408/429/5xx, no hand-rolled HTTP. esbuild-bundled, audit-clean.
Drop-in workflow
Copy. Paste. Translate.
Three secrets, four lines, and your repo is multilingual on the next push.
name: translateon: push: branches: [main] 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 subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} region: ${{ secrets.TRANSLATOR_REGION }} toLocales: '["fr","de","es","ja"]'
- if: steps.translator.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: branch: machine-translation title: ${{ steps.translator.outputs.summary-title }} body: ${{ steps.translator.outputs.summary-details }} labels: localizationReady to localize on autopilot?
One Azure AI Translator key, one workflow file. Resource Translator handles the rest.