{"id":342040,"date":"2026-07-22T06:11:48","date_gmt":"2026-07-22T06:11:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pewit-ai-alt-translator\/"},"modified":"2026-07-22T06:11:11","modified_gmt":"2026-07-22T06:11:11","slug":"pewit-ai-alt-translator","status":"publish","type":"plugin","link":"https:\/\/ary.wordpress.org\/plugins\/pewit-ai-alt-translator\/","author":11391715,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.3","stable_tag":"1.1.3","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Pewit AI Alt Translator","header_author":"PEWIT Labs","header_description":"Translate existing alt text and captions across WPML and Polylang languages in bulk, with review.","assets_banners_color":"","last_updated":"2026-07-22 06:11:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/pewitlabs.com\/product-ai-alt-translator.html","header_author_uri":"https:\/\/pewitlabs.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.3":{"tag":"1.1.3","author":"michalczajka","date":"2026-07-22 06:11:11"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3618022,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.3"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1953,2353,17214,2333,103],"plugin_category":[34,48],"plugin_contributors":[268312],"plugin_business_model":[],"class_list":["post-342040","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-ai","plugin_tags-alt-text","plugin_tags-translation","plugin_tags-wpml","plugin_category-accessibility","plugin_category-language-tools","plugin_contributors-michalczajka","plugin_committers-michalczajka"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/pewit-ai-alt-translator\/assets\/icon.svg?rev=3618022","icon":"https:\/\/ps.w.org\/pewit-ai-alt-translator\/assets\/icon.svg?rev=3618022","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Plugin homepage, documentation and paid plans: https:\/\/pewitlabs.com\/product-ai-alt-translator.html<\/p>\n\n<p>Pewit AI Alt Translator translates image ALT text and captions across WPML and Polylang languages, with a side-by-side preview before you apply, bulk background jobs and a review queue.<\/p>\n\n<h4>Fully functional and free<\/h4>\n\n<p>Every feature in this plugin is free and fully functional: bring your own API key (OpenAI, Anthropic Claude or Google Gemini), translate ALT text and captions one image at a time with preview, run bulk translation jobs across the whole library in the background, review and approve\/reject results, detect wrong-language ALT with the Mismatch Radar, keep a glossary for brand terms, and trigger translation right from the Media Library. Nothing is locked behind a license.<\/p>\n\n<p>Optionally, you can subscribe to managed AI credits (so you don't need your own API key) and priority support at https:\/\/pewitlabs.com\/product-ai-alt-translator.html \u2014 this is a paid external service, not a requirement to use the plugin.<\/p>\n\n<h4>Translation<\/h4>\n\n<ul>\n<li>Bring your own API key (OpenAI, Anthropic Claude or Google Gemini).<\/li>\n<li>Translate ALT and caption for one image at a time with a side-by-side preview.<\/li>\n<li>WPML &amp; Polylang language detection (falls back to site locale).<\/li>\n<li>Glossary for brand terms so names stay consistent.<\/li>\n<li>Pairs with Pewit AI Media Toolkit metadata in the default language.<\/li>\n<\/ul>\n\n<h4>Bulk &amp; automation<\/h4>\n\n<ul>\n<li>Bulk translate the entire media library in the background via WP-Cron.<\/li>\n<li>Pause, resume, cancel and review background jobs with a live log.<\/li>\n<li>Review queue with bulk approve\/reject before changes are applied.<\/li>\n<li>Media Library bulk action to queue translations.<\/li>\n<\/ul>\n\n<h4>Language Mismatch Radar<\/h4>\n\n<ul>\n<li>Scan ALT text for wrong language or empty ALT on images used in translated content.<\/li>\n<li>Bulk fix mismatches and export a CSV report.<\/li>\n<\/ul>\n\n<h4>Notifications<\/h4>\n\n<ul>\n<li>Email notification when a background job finishes.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to third-party services to translate image metadata. Please review this before use.<\/p>\n\n<p>You choose the AI provider in the plugin settings and use your own API key (BYOK), or on WordPress 7.0+ use the site-wide AI connectors (Settings \u2192 Connectors) via the core AI Client. No data is sent to any provider until you trigger a translation. Requests go directly from your site to the selected provider under your own credentials and that provider's terms. Nothing is sent to the plugin author.<\/p>\n\n<p>WordPress AI Client (WordPress 7.0+, when connectors are configured):\n* What and when: translation uses <code>wp_ai_client_prompt()<\/code> so credentials stay in core (Settings \u2192 Connectors). Source ALT\/caption text and your translation instructions are sent to whichever provider the site administrator configured.<\/p>\n\n<p>OpenAI API (https:\/\/openai.com):\n* What and when: when you translate (or bulk-translate) image ALT text and captions and OpenAI is the selected provider (BYOK fallback), the source text and your translation instructions are sent to OpenAI to produce the translated text.\n* Data sent: the ALT\/caption text, optional context and glossary you configure, the target language and the selected model name.\n* Terms: https:\/\/openai.com\/policies\/terms-of-use \u2014 Privacy: https:\/\/openai.com\/policies\/privacy-policy<\/p>\n\n<p>Anthropic (Claude) API (https:\/\/www.anthropic.com):\n* What and when: only if you select Claude as the provider (BYOK fallback) \u2014 when you translate ALT text and captions, the source text and your translation instructions are sent to Anthropic to produce the translated text.\n* Data sent: the ALT\/caption text, optional context and glossary you configure, the target language and the selected model name.\n* Terms: https:\/\/www.anthropic.com\/legal\/consumer-terms \u2014 Privacy: https:\/\/www.anthropic.com\/legal\/privacy<\/p>\n\n<p>Google Gemini API (https:\/\/ai.google.dev):\n* What and when: only if you select Gemini as the provider (BYOK fallback) \u2014 when you translate ALT text and captions, the source text and your translation instructions are sent to Google's Generative Language API to produce the translated text.\n* Data sent: the ALT\/caption text, optional context and glossary you configure, the target language and the selected model name.\n* Terms: https:\/\/ai.google.dev\/gemini-api\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p>Freemius (licensing &amp; checkout \u2014 https:\/\/freemius.com):\n* What and when: used for license activation, updates and (for optional paid plans) checkout as Merchant of Record. Opt-in is optional.\n* Terms: https:\/\/freemius.com\/terms\/ \u2014 Privacy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<h3>Source code<\/h3>\n\n<p>All JavaScript and CSS shipped in this plugin (in assets\/js and assets\/css) is the original, hand-written, human-readable source. Nothing is minified, compiled, transpiled or generated by a build tool, so no separate source files are required \u2014 what you read in the plugin is the source. The only bundled third-party library is the Freemius SDK (vendor\/freemius), whose source is available at https:\/\/github.com\/Freemius\/wordpress-sdk<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload ZIP via Plugins -&gt; Add New -&gt; Upload Plugin.<\/li>\n<li>Activate. Folder: <code>pewit-ai-alt-translator\/<\/code>, main file: <code>pewit-ai-alt-translator.php<\/code>.<\/li>\n<li>Connect AI under Settings \u2014 WordPress 7.0+ Connectors (Settings \u2192 Connectors) or your own API key (BYOK \u2014 OpenAI, Claude or Gemini).<\/li>\n<\/ol>\n\n<p>The plugin folder must always be pewit-ai-alt-translator\/ and the main file pewit-ai-alt-translator.php.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20everything%20really%20free%3F\"><h3>Is everything really free?<\/h3><\/dt>\n<dd><p>Yes. Every feature \u2014 single and bulk translation, background jobs, the review queue and the Mismatch Radar \u2014 works without a paid license. You only need AI access via WordPress Connectors or your own API key.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20ai%20api%20key%3F\"><h3>Do I need an AI API key?<\/h3><\/dt>\n<dd><p>On WordPress 7.0+ you can use Settings \u2192 Connectors (core AI Client). Otherwise bring your own key for OpenAI, Anthropic Claude or Google Gemini. You pay your provider directly for API usage.<\/p><\/dd>\n<dt id=\"will%20translating%20change%20my%20original%20images%3F\"><h3>Will translating change my original images?<\/h3><\/dt>\n<dd><p>No. The plugin only updates ALT text and captions for the target language; image files and attachment IDs are untouched.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fixed: removed bundled .po\/.mo translation files from the wordpress.org package (translations via translate.wordpress.org).<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Added: WordPress 7.0+ AI Client integration \u2014 uses <code>wp_ai_client_prompt()<\/code> when site connectors are configured (Settings \u2192 Connectors), with BYOK direct API fallback.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Changed: the wordpress.org build now physically ships without any license or plan gating code \u2014 every feature is unlocked source with no premium checks. Optional paid managed AI credits and support remain available as an external service.<\/li>\n<li>Maintenance: internal build tooling and consistent prefixing of plugin globals.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Changed: renamed to \"Pewit AI Alt Translator\" (new slug pewit-ai-alt-translator) for a distinctive directory name.<\/li>\n<li>Changed: every feature is now free and fully functional \u2014 no license gating of built-in features (bulk jobs, review queue and Mismatch Radar). Optional paid managed AI credits and support remain available as an external service.<\/li>\n<li>Added: External services documentation for OpenAI, Anthropic (Claude), Google Gemini and Freemius, including terms\/privacy links.<\/li>\n<li>Fixed: removed Google Fonts (no external font requests); admin uses a system font stack.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed: Plugin Check advisory warnings \u2014 annotated direct DB queries (DirectQuery\/NoCaching) and WPML integration hooks.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: WordPress Plugin Check \u2014 i18n translators comments, inline AJAX nonce verification, in-memory CSV helpers, prefixed LLM client class, removed manual textdomain loading.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: WordPress.org Plugin Check i18n compliance for shared LLM client.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added: Settings provider selector \u2014 OpenAI, Claude (Pro), Gemini (Pro).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Stable release: WPML\/Polylang + monolingual translate, glossary, review queue, Mismatch Radar, Media Library bulk action, onboarding, admin PL.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Mismatch Fix Queue and bulk Fix mismatches (Pro).<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Media Library bulk action; Mismatch Radar CSV export.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Language Mismatch Radar scan on dashboard.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Onboarding, job email, Polish admin, AI Media Toolkit pair.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial beta: single translate, WPML\/Polylang, Pro bulk + review queue.<\/li>\n<\/ul>","raw_excerpt":"Translate existing alt text and captions across WPML and Polylang languages in bulk, with review.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/342040","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=342040"}],"author":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/michalczajka"}],"wp:attachment":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=342040"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=342040"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=342040"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=342040"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=342040"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=342040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}