{"id":378829,"date":"2026-10-17T08:53:51","date_gmt":"2026-10-17T08:53:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-translate-for-wpml\/"},"modified":"2026-10-17T10:10:55","modified_gmt":"2026-10-17T10:10:55","slug":"rjvv-tools-translate-for-wpml","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rjvv-tools-translate-for-wpml\/","author":9548143,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.17.1","stable_tag":"0.17.1","tested":"7.1.3","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"RJVV Tools Translate for WPML","header_author":"RJVV Tools","header_description":"Automatic translation of posts, CPTs, taxonomies and ACF options (title, slug, content and fields) with the OpenAI API, integrated with WPML + ACFML.","assets_banners_color":"d2edfb","last_updated":"2026-10-17 10:10:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/rjvv.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":96,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.17.0":{"tag":"0.17.0","author":"rjvv","date":"2026-10-17 08:53:26","revision":3751655},"0.17.1":{"tag":"0.17.1","author":"rjvv","date":"2026-10-17 10:10:55","revision":3751762}},"upgrade_notice":{"0.6.0":"<p>The admin interface is now in English by default, with Spanish included as a translation.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3751678,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3751678,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3751678,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3751678,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.17.0","0.17.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3752736,"resolution":"1","location":"assets","locale":"","width":2560,"height":1573},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3752736,"resolution":"2","location":"assets","locale":"","width":2560,"height":1573},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3752736,"resolution":"3","location":"assets","locale":"","width":2560,"height":787},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3752736,"resolution":"4","location":"assets","locale":"","width":2560,"height":2300}},"screenshots":{"1":"Content tab: every original with its status per language, filters and batch actions.","2":"Settings: API key, model, source language, excluded fields and instructions for the model.","3":"Taxonomies tab, with terms and their own ACF fields."}},"plugin_section":[],"plugin_tags":[2211,99,194533,2333,103],"plugin_category":[48,59],"plugin_contributors":[78154,287230],"plugin_business_model":[],"class_list":["post-378829","plugin","type-plugin","status-publish","hentry","plugin_tags-acf","plugin_tags-multilingual","plugin_tags-openai","plugin_tags-translation","plugin_tags-wpml","plugin_category-language-tools","plugin_category-utilities-and-tools","plugin_contributors-freemius","plugin_contributors-rjvv","plugin_committers-rjvv"],"banners":{"banner":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/banner-772x250.png?rev=3751678","banner_2x":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/banner-1544x500.png?rev=3751678","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/icon-128x128.png?rev=3751678","icon_2x":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/icon-256x256.png?rev=3751678","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/screenshot-1.png?rev=3752736","caption":"Content tab: every original with its status per language, filters and batch actions."},{"src":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/screenshot-2.png?rev=3752736","caption":"Settings: API key, model, source language, excluded fields and instructions for the model."},{"src":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/screenshot-3.png?rev=3752736","caption":"Taxonomies tab, with terms and their own ACF fields."},{"src":"https:\/\/ps.w.org\/rjvv-tools-translate-for-wpml\/assets\/screenshot-4.png?rev=3752736","caption":""}],"raw_content":"<!--section=description-->\n<p>RJVV Tools Translate for WPML translates <strong>the ACF fields<\/strong> of your posts and custom post types,\nnot just the title and the content.<\/p>\n\n<p>On a site built with Advanced Custom Fields, a lot of the content lives in repeaters,\nflexible content and nested groups rather than in the editor. When a translation is created,\nthose field values are copied across as they are. This plugin walks that structure and\ntranslates the text inside it.<\/p>\n\n<p>Translations are created as real WPML translations: same translation group as the original,\ncorrect language assignment, marked as complete. They are not duplicates sitting outside\nWPML.<\/p>\n\n<h4>What it translates<\/h4>\n\n<ul>\n<li>Post title, slug, content and excerpt, for posts and any custom post type WPML marks as\ntranslatable. On WooCommerce the excerpt is the product short description.<\/li>\n<li>ACF text fields (text, textarea, wysiwyg), including those inside repeaters, flexible\ncontent and nested groups, at any depth.<\/li>\n<li>Taxonomy terms: name, slug, description and their own ACF fields. Term assignments are\ncopied to the translation, which <code>wp_insert_post()<\/code> does not do on its own.<\/li>\n<li>ACF options pages, when the theme stores one set of values per language.<\/li>\n<li>WPML String Translation strings, grouped by domain.<\/li>\n<\/ul>\n\n<h4>How it decides what to send<\/h4>\n\n<p>Every field is hashed. When you edit the original, only the fields that actually changed are\nsent again \u2014 you do not pay to re-translate a whole page because one paragraph moved. The\ntable shows, per language, whether a translation is missing, outdated (and how many fields\nchanged), up to date, or was made outside the plugin.<\/p>\n\n<h4>Your own API key<\/h4>\n\n<p>You connect your own OpenAI API key, so you pay OpenAI for what you use and nothing else.\nThere is no per-word cost and no translation credits. The request uses structured outputs,\nso the model can only return the same keys it received: it cannot reshape your field\nstructure.<\/p>\n\n<p>You can give the model standing instructions (tone, names never to translate) and exclude\nfields by name or pattern \u2014 useful for codes, references and proper names that must stay\nidentical in every language.<\/p>\n\n<h4>Free vs Pro<\/h4>\n\n<p>The free version translates <strong>posts, custom post types and their ACF fields<\/strong> \u2014 title,\nslug, content, excerpt and every text field inside repeaters, flexible content and nested\ngroups.<\/p>\n\n<p>Pro adds the rest of a full multilingual site:<\/p>\n\n<ul>\n<li><strong>Taxonomies<\/strong> \u2014 term names, slugs, descriptions and their ACF fields.<\/li>\n<li><strong>ACF options pages<\/strong> \u2014 one set of values per language.<\/li>\n<li><strong>WPML String Translation<\/strong> \u2014 theme and plugin strings, by domain.<\/li>\n<li><strong>Source language<\/strong> \u2014 translate from the language content is actually written in,\nwhich does not have to be the WPML default.<\/li>\n<li><strong>Fix language<\/strong> \u2014 content written in the wrong language, moved and translated in\nplace, with a backup.<\/li>\n<li><strong>Reassign terms<\/strong> \u2014 repair term assignments after changing WPML settings, at no API cost.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li><strong>WPML Multilingual CMS<\/strong> \u2014 required. WPML String Translation only for the Strings tab.<\/li>\n<li><strong>Advanced Custom Fields<\/strong> \u2014 optional. Without it the plugin still translates titles,\nslugs and content; with it, every text field too. ACF PRO for repeaters and flexible content.<\/li>\n<li>An OpenAI API key.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends content to the OpenAI API in order to translate it.<\/p>\n\n<p><strong>What is sent:<\/strong> the texts you choose to translate \u2014 post titles, slugs, content, ACF field\nvalues, taxonomy term names and descriptions, or WPML strings \u2014 together with the source and\ntarget language and any extra instructions you configure. Nothing is sent until you press a\ntranslate button: there is no background or scheduled sending.<\/p>\n\n<p><strong>When:<\/strong> only on your explicit action from the plugin's admin screens.<\/p>\n\n<p><strong>Who receives it:<\/strong> OpenAI, L.L.C., through https:\/\/api.openai.com\/v1\/chat\/completions,\nauthenticated with the API key you provide.<\/p>\n\n<ul>\n<li>Terms of use: https:\/\/openai.com\/policies\/row-terms-of-use\/<\/li>\n<li>Privacy policy: https:\/\/openai.com\/policies\/row-privacy-policy\/<\/li>\n<\/ul>\n\n<p>The plugin does not send your content anywhere else, and the plugin author receives no data.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. <strong>WPML must be active first.<\/strong> ACF is optional: without\nit the plugin translates titles, slugs and content, and with it the custom fields too.<\/li>\n<li>Go to <strong>AI Translate \u2192 Settings<\/strong> and paste your OpenAI API key.<\/li>\n<li>Choose the model, the status for new translations (draft or published), the content types\nand, if the texts are written in a language other than the WPML default, the source language.<\/li>\n<li>Open the <strong>Content<\/strong> tab: you will see every original with its status per language.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20need%20wpml%3F\"><h3>Does it need WPML?<\/h3><\/dt>\n<dd><p>Yes. The plugin creates translations through WPML's own API and links them to the original's\ntranslation group. It does not work with other multilingual plugins.<\/p><\/dd>\n<dt id=\"does%20it%20need%20acf%3F\"><h3>Does it need ACF?<\/h3><\/dt>\n<dd><p>No. WPML is the only hard requirement. Without ACF the plugin translates the title, the\nslug, the content and the excerpt of posts and custom post types. ACF support is an\naddition, not a condition for the plugin to work.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20acf%20free%3F\"><h3>Does it work with ACF free?<\/h3><\/dt>\n<dd><p>Yes for plain text, textarea and wysiwyg fields. Repeaters and flexible content need ACF PRO,\nsince those field types are PRO features.<\/p><\/dd>\n<dt id=\"will%20it%20overwrite%20translations%20i%20made%20by%20hand%3F\"><h3>Will it overwrite translations I made by hand?<\/h3><\/dt>\n<dd><p>No. Translations the plugin did not create are shown as \"External\" and are skipped. You have\nto force them explicitly, one by one or from the toolbar.<\/p><\/dd>\n<dt id=\"does%20it%20re-translate%20everything%20when%20i%20edit%20a%20page%3F\"><h3>Does it re-translate everything when I edit a page?<\/h3><\/dt>\n<dd><p>No. It compares a hash per field and only sends the ones that changed.<\/p><\/dd>\n<dt id=\"why%20is%20a%20content%20type%20missing%20from%20the%20list%3F\"><h3>Why is a content type missing from the list?<\/h3><\/dt>\n<dd><p>Because WPML does not have it set as translatable. Check <strong>WPML \u2192 Settings \u2192 Post Types\nTranslation<\/strong>. Without that, WPML cannot link a translation to its original.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.17.1<\/h4>\n\n<ul>\n<li>Fixed the admin screen: the stylesheet and script were not being loaded, so the content\nlist stayed on \"Loading\".<\/li>\n<\/ul>\n\n<h4>0.17.0<\/h4>\n\n<ul>\n<li>Renamed to RJVV Tools Translate for WPML.<\/li>\n<li>Fixed a deprecation notice on PHP 8.4.<\/li>\n<li>Translation files are no longer bundled; WordPress.org language packs are used instead.<\/li>\n<\/ul>\n\n<h4>0.16.3<\/h4>\n\n<ul>\n<li>Updated Freemius SDK to the latest version.<\/li>\n<\/ul>\n\n<h4>0.16.2<\/h4>\n\n<ul>\n<li>The API key field is no longer filled in by password managers, and a value that is not\nan OpenAI key can no longer overwrite the one you had saved.<\/li>\n<\/ul>\n\n<h4>0.16.1<\/h4>\n\n<ul>\n<li>Fixed a licence check: in the paid build the source language setting worked without a\nvalid licence.<\/li>\n<\/ul>\n\n<h4>0.16.0<\/h4>\n\n<ul>\n<li>The Pro settings are no longer drawn as disabled controls in the free version: that code\nnow lives entirely in the premium files, so it is absent rather than switched off.<\/li>\n<\/ul>\n\n<h4>0.15.2<\/h4>\n\n<ul>\n<li>The translator comments now survive the free build, so Plugin Check passes on the\npackage that is actually distributed.<\/li>\n<\/ul>\n\n<h4>0.15.1<\/h4>\n\n<ul>\n<li>Passes Plugin Check: translator comments on every string with placeholders, and the\n.gitignore no longer travels inside the package.<\/li>\n<\/ul>\n\n<h4>0.15.0<\/h4>\n\n<ul>\n<li>The excerpt is translated. On WooCommerce that is the product short description, the one\nshown next to the price; it used to stay in the original language.<\/li>\n<\/ul>\n\n<h4>0.14.0<\/h4>\n\n<ul>\n<li>ACF is no longer required. Without it the plugin still translates titles, slugs and\ncontent; WPML remains the only hard requirement.<\/li>\n<\/ul>\n\n<h4>0.13.1<\/h4>\n\n<ul>\n<li>Fixed the licence check: a free build with a valid licence showed the Pro interface with\nnothing behind it.<\/li>\n<\/ul>\n\n<h4>0.13.0<\/h4>\n\n<ul>\n<li>Prepared for the WordPress.org submission: readme, external services disclosure and\nuninstall handling.<\/li>\n<\/ul>\n\n<h4>0.12.0<\/h4>\n\n<ul>\n<li>Uninstall now goes through Freemius, so the cleanup runs in both builds.<\/li>\n<\/ul>\n\n<h4>0.11.0<\/h4>\n\n<ul>\n<li>Pro code is stripped from the free build instead of being hidden at runtime.<\/li>\n<\/ul>\n\n<h4>0.10.0<\/h4>\n\n<ul>\n<li>Freemius integration: licensing, checkout and the free\/Pro split.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Free and Pro feature split.<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Term deletion hardened; English by default everywhere.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>readme, uninstall handling and a text domain loading fix.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Full internationalisation: source strings in English, Spanish translation bundled.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Source language setting: translate from the language the content is actually written in,\nwhich does not have to be the WPML default.<\/li>\n<li>Bulk action to fix the language of several items at once.<\/li>\n<li>ACF internal post types are never translated.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Strings tab for WPML String Translation, with a domain selector.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Force re-translation, and a cleanup screen for terms created by the plugin.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Taxonomies, ACF options pages, and in-place language fixing with backup.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: posts, custom post types and ACF fields.<\/li>\n<\/ul>","raw_excerpt":"Translate posts, custom post types and their ACF fields with your own OpenAI API key, linked into WPML as proper translations.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/378829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=378829"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rjvv"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=378829"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=378829"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=378829"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=378829"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=378829"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=378829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}