Skip to content

Language

Choose your language

Switch to the same page in another language.

EnglishEnglishenAfrikaansAfrikaansafአማርኛAmharicamالعربيةArabicarঅসমীয়াAssameseasAzərbaycanAzerbaijaniazБашҡортBashkirbaБългарскиBulgarianbgभोजपुरीBhojpuribhoবাংলাBanglabnབོད་སྐད་Tibetanboबड़ोBodobrxBosanskiBosnianbsCatalàCatalancaČeštinaCzechcsCymraegWelshcyDanskDanishdaDeutschGermandeडोगरीDogridoiDolnoserbšćinaLower SorbiandsbދިވެހިބަސްDivehidvΕλληνικάGreekelEspañolSpanishesEestiEstonianetEuskaraBasqueeuفارسیPersianfaSuomiFinnishfiFilipinoFilipinofilVakavitiFijianfjFøroysktFaroesefoFrançaisFrenchfrFrançais (Canada)French (Canada)fr-CAGaeilgeIrishgaGalegoGalicianglकोंकणीKonkanigomગુજરાતીGujaratiguHausaHausahaעבריתHebrewheहिन्दीHindihiछत्तीसगढ़ीChhattisgarhihneHrvatskiCroatianhrHornjoserbsceUpper SorbianhsbHaitian CreoleHaitian CreolehtMagyarHungarianhuՀայերենArmenianhyIndonesiaIndonesianidÌgbòIgboigInuinnaqtunInuinnaqtuniktÍslenskaIcelandicisItalianoItalianitᐃᓄᒃᑎᑐᑦInuktitutiuInuktitut (Latin)Inuktitut (Latin)iu-Latn日本語JapanesejaქართულიGeorgiankaҚазақ ТіліKazakhkkខ្មែរKhmerkmKurmancîKurdish (Northern)kmrಕನ್ನಡKannadakn한국어KoreankoكٲشُرKashmiriksکوردیی ناوەندیKurdish (Central)kuКыргызчаKyrgyzkyLëtzebuergeschLuxembourgishlbLingálaLingalalnລາວLaoloLietuviųLithuanianltLugandaGandalugLatviešuLatvianlv中文 (文言文)Chinese (Literary)lzhमैथिलीMaithilimaiMalagasyMalagasymgTe Reo MāoriMāorimiМакедонскиMacedonianmkമലയാളംMalayalammlМонгол хэлMongolian (Cyrillic)mn-Cyrlᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡMongolian (Traditional)mn-MongমৈতৈলোনManipurimniमराठीMarathimrMelayuMalaymsMaltiMaltesemtHmong DawHmong Dawmwwမြန်မာMyanmar (Burmese)myNorsk BokmålNorwegian BokmålnbनेपालीNepalineNederlandsDutchnlSesotho sa LeboaSesotho sa LeboansoChinyanjaChichewanyaଓଡ଼ିଆOdiaorHñähñuQuerétaro OtomiotqਪੰਜਾਬੀPunjabipaPolskiPolishplدریDariprsپښتوPashtopsPortuguês (Brasil)Portuguese (Brazil)ptPortuguês (Portugal)Portuguese (Portugal)pt-PTRomânăRomanianroРусскийRussianruIkirundiRundirunKinyarwandaKinyarwandarwسنڌيSindhisdසිංහලSinhalasiSlovenčinaSlovakskSlovenščinaSlovenianslGagana SāmoaSamoansmchiShonaShonasnSoomaaliSomalisoShqipAlbaniansqСрпски (ћирилица)Serbian (Cyrillic)sr-CyrlSrpski (latinica)Serbian (Latin)sr-LatnSesothoSesothostSvenskaSwedishsvKiswahiliSwahiliswதமிழ்TamiltaతెలుగుTeluguteไทยThaithትግርTigrinyatiTürkmen DiliTurkmentkLea fakatongaTongantoTürkçeTurkishtrТатарTatarttReo TahitiTahitiantyئۇيغۇرچەUyghurugУкраїнськаUkrainianukاردوUrduurUzbek (Latin)Uzbek (Latin)uzTiếng ViệtVietnameseviisiXhosaisiXhosaxhÈdè YorùbáYorubayoYucatec MayaYucatec Mayayua粵語Cantonese (Traditional)yue中文 (简体)Chinese Simplifiedzh-Hans中文 (繁體)Chinese Traditionalzh-HantisiZuluisiZuluzu

History

Changelog

High-level summary of releases. The canonical, authoritative changelog lives in CHANGELOG.md in the repository.

On this page

    See CHANGELOG.md for the full record.

    Releases

    3.2.0 —

    • Smart change detection now defaults to smart: a compact provider-neutral state manifest (.github/resource-translator-state.json) tracks parser keys, source hashes, target hashes, and translation-affecting settings so only changed or missing keys are sent to the selected provider. Use changeDetection=disabled or false for legacy always-translate behavior, statePath to relocate the manifest, and snapshotOnly to bootstrap the manifest from existing target files without calling a provider. The same release adds nested {provider} blocks, AWS/Google-native behavior knobs, narrow-friendly reference cards, and official provider-doc links. Key-level audit rule codes are logged for every decision.

    3.1.0 —

    • Multi-vendor: translate with Azure AI Translator, AWS Translate, or Google Cloud Translation behind one unified API surface. Pick a single provider per run with the new provider input; the action delegates to the matching SDK behind a factory and behaves identically regardless of vendor. Fully backward compatible — provider defaults to azure, so existing Azure workflows keep working unchanged.
    • New AWS Translate provider (@aws-sdk/client-translate). Authenticate with the AWS default credential chain (recommended: OIDC via aws-actions/configure-aws-credentials) or explicit awsAccessKeyId / awsSecretAccessKey; region via awsRegion or AWS_REGION.
    • New Google Cloud Translation provider (@google-cloud/translate, v2). Authenticate with a service-account JSON credential (googleCredentials) or an API key (googleApiKey); optional googleProjectId.
    • New inputs: provider, awsAccessKeyId, awsSecretAccessKey, awsRegion, googleApiKey, googleCredentials, googleProjectId.
    • Intent-specifier mapping: textType maps to Google's format and profanityAction maps to AWS profanity masking where an equivalent exists. Azure-only specifiers (categoryId, apiVersion, profanityMarker, allowFallback) are ignored by other providers.
    • Azure request inputs (subscriptionKey, endpoint, region) are no longer marked required in action.yml so other providers can be selected — still validated at runtime when provider is azure.
    • New Translation providers page, provider tabs on Getting started, provider selection on the Inputs page, and a refreshed home page leading with Azure, AWS, and Google.

    3.0.2 —

    • Fixed: Translator requests now pin api-version=3.0 on the wire for both /translate and /languages. The Azure SDK only honors the client-level api-version option when a credential is passed; the action authenticates per request via headers, so that option was silently dropped and requests defaulted to a preview api-version whose /translate contract rejected the body with HTTP 400 (error code 400074). Completes the fix started in 3.0.1.

    3.0.1 —

    • Fixed: The /translate request body is now a bare JSON array of { text } items instead of a wrapped { inputs } object, matching the v3.0 REST contract. On its own this did not restore translations — see 3.0.2.

    3.0.0 —

    • Bumped to node24 runtime (BREAKING).
    • New inputs: include, exclude, configPath, categoryId, apiVersion, dryRun, failOnError, plus advanced Translator knobs textType, profanityAction, profanityMarker, and allowFallback.
    • Source locale is now also forwarded to Translator as from=<locale> so short strings aren't autodetected.
    • Resilience: automatic retry on transient HTTP responses (408, 425, 429, 500, 502, 503, 504) honoring Azure's Retry-After header — falls back to jittered exponential backoff when absent. Tunable via maxRetries and retryBackoffMs. Closes #46.
    • Placeholder protection: tokens like {{name}}, ${var}, {0}, {0:N2}, %s, %1$s and HTML entities are wrapped in sentinels before translation and restored afterward, so Translator stops mangling i18next/Mustache/Handlebars/.NET/printf placeholders. Toggle via protectPlaceholders; extend with customPlaceholderPatterns. Tightens #16.
    • Per-key opt-out: new noTranslatePatterns input drops matching keys from the Translator request entirely (preserves source values for brand names, error codes, etc.). Matches glob patterns against parser-level keys (JSON dotted path, RESX name, PO msgid, XLIFF unit id, INI/restext key). Closes #35.
    • Repo-level config via .github/resource-translator.yml.
    • Glossary support, step summary via core.summary.
    • esbuild bundler, ESLint 9 flat config, Prettier, EditorConfig.
    • npm audit clean (0 vulnerabilities).
    • Astro + Tailwind v4 docs site with view transitions and Expressive Code.
    • Docs accessibility: WCAG 2.1 AA pass. Logo glyphs converted to paths so they no longer fail color-contrast against gradient stops, the floating Back to top button uses inert while hidden (instead of an aria-hidden toggle that left it tabbable), formats.astro sections no longer collide with their auto-generated heading IDs, three locale cards now expose BCP-47-valid lang attributes (nya→ny, lug→lg, run→rn), duplicate Documentation landmark labels are disambiguated between sidebar and footer, and every data table on inputs/configuration ships with a screen-reader caption.
    • Inline code styling: docs prose <code> now wears the warm/amber theme accent — distinct from the brand→accent palette used for links and headings.
    • Dependabot auto-merge, CodeQL scanning, CI matrix.

    2.2.1 —

    • Security: bumped axios (1.4.0 → 1.6.0), @babel/traverse, semver, and tough-cookie/@azure/ms-rest-js to clear Dependabot alerts.

    2.2.0 —

    • Maintenance release (dependency and dist refresh).

    2.1.9 —

    • Dependency upgrades (including xml2js 0.4.23 → 0.5.0) and a refreshed dist build.

    2.1.8 —

    • Security: bumped follow-redirects, node-fetch, decode-uri-component, minimist, ansi-regex, jsdom, json5, minimatch, and @actions/core (1.2.6 → 1.9.1).

    2.1.7 —

    • Use a different delimiter when building the translation map so keys containing the previous separator are handled correctly (#36).
    • Fixes #32.

    2.1.6 —

    • Assorted bug fixes and improved logging.

    2.1.5 —

    • Fix an issue with file names containing four segments.

    2.1.4 —

    • Added a JSON parser and .json file support.
    • Fix batching bug (#18).

    2.1.3 —

    • Maintenance release.

    2.1.2 —

    • Fixes #15.

    2.1.1 —

    • Fix the generated step summary.

    2.1.0 —

    • Support for additional resource file formats beyond .resx: .ini, .po, .restext, and .xliff.

    2.0.4 —

    • Maintenance release.

    2.0.3 —

    • Fixes a batching bug and other related issues.

    2.0.2 —

    • File filtering to limit excessive translations.
    • Batching of the translate API call to avoid rate limiting.

    2.0.1 —

    • New action outputs: has-new-translations, summary-title, and summary-details.
    • Fix a bug where an error was logged but the action failure was not set.

    2.0.0 —

    • First official, fully functional and verified release.

    1.0.1 —

    • Build release.

    1.0.0 —

    • Initial release of the Azure AI Translator resource action (.resx support).

    0.0.x —

    • Initial prototype pre-releases (tags 0.01–0.09).