{"id":373916,"date":"2026-09-23T10:00:17","date_gmt":"2026-09-23T10:00:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/latw-ai-translation-for-polylang\/"},"modified":"2026-09-23T09:59:45","modified_gmt":"2026-09-23T09:59:45","slug":"latw-ai-translation-for-polylang","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/latw-ai-translation-for-polylang\/","author":23441936,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"LATW AI Translation for Polylang","header_author":"Szymon Zawadzki","header_description":"Automatically translate WordPress content using OpenAI LLM with Polylang integration.","assets_banners_color":"000000","last_updated":"2026-09-23 09:59:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/llm-automatic-translation.top\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"szymon0zawadzki","date":"2026-09-23 09:59:45","revision":3709035}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3709036,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3709036,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3709036,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3709036,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3709036,"resolution":"1","location":"assets","locale":"","width":1920,"height":962},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3709036,"resolution":"2","location":"assets","locale":"","width":1920,"height":962},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3709036,"resolution":"3","location":"assets","locale":"","width":1920,"height":962}},"screenshots":{"1":"Translations screen: pick content and target languages, with per-language status","2":"Settings: pick an engine, its key and model, and the website description passed to every translation","3":"History: what was sent, what came back, and what each job cost"}},"plugin_section":[],"plugin_tags":[220668,12519,279010,4318,10601],"plugin_category":[],"plugin_contributors":[255069],"plugin_business_model":[],"class_list":["post-373916","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-translation","plugin_tags-automatic-translation","plugin_tags-llm-translation","plugin_tags-machine-translation","plugin_tags-polylang","plugin_contributors-szymon0zawadzki","plugin_committers-szymon0zawadzki"],"banners":{"banner":"https:\/\/ps.w.org\/latw-ai-translation-for-polylang\/assets\/banner-772x250.png?rev=3709036","banner_2x":"https:\/\/ps.w.org\/latw-ai-translation-for-polylang\/assets\/banner-1544x500.png?rev=3709036","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/latw-ai-translation-for-polylang\/assets\/icon-128x128.png?rev=3709036","icon_2x":"https:\/\/ps.w.org\/latw-ai-translation-for-polylang\/assets\/icon-256x256.png?rev=3709036","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/latw-ai-translation-for-polylang\/assets\/screenshot-1.png?rev=3709036","caption":"Translations screen: pick content and target languages, with per-language status"},{"src":"https:\/\/ps.w.org\/latw-ai-translation-for-polylang\/assets\/screenshot-2.png?rev=3709036","caption":"Settings: pick an engine, its key and model, and the website description passed to every translation"},{"src":"https:\/\/ps.w.org\/latw-ai-translation-for-polylang\/assets\/screenshot-3.png?rev=3709036","caption":"History: what was sent, what came back, and what each job cost"}],"raw_content":"<!--section=description-->\n<p><a href=\"https:\/\/llm-automatic-translation.top\/latw-ai-translation-for-polylang\/\">LATW AI Translation for Polylang<\/a> adds automatic AI translation to the Polylang workflow you already use.<\/p>\n\n<p>Polylang keeps doing what it does today: languages, the language switcher, translation groups, string translation, the multilingual structure of your site. This plugin fills those translations in for you, using the AI model or translation engine you pick and your own API key.<\/p>\n\n<h4>You bring your own API key<\/h4>\n\n<p>There is no subscription, no credit pack and no per-word price list here. You connect your own provider key, and every request goes straight from your WordPress server to OpenAI, Google or MyMemory, at their published rates, with nothing added on top by us.<\/p>\n\n<p>Nothing passes through our servers, and no content is stored outside your site and your chosen provider. You are responsible for your own provider billing and usage limits.<\/p>\n\n<h4>How it plugs into Polylang<\/h4>\n\n<p>Polylang has no built-in translation-management pipeline to plug into \u2014 a translation is just another post, linked to the original through Polylang's own language and translation-group system, with nothing that extracts content or writes it back automatically. So this plugin does that whole job itself.<\/p>\n\n<p>On sites running <strong>Polylang Pro<\/strong>, it reuses Polylang's own content export and import machinery, so what counts as translatable content always matches what Polylang itself understands. On <strong>Polylang free<\/strong>, which ships none of that machinery, the plugin extracts content with its own equivalent, built to match Polylang's own rules. Either way, Elementor is handled by a dedicated extractor that pulls out only the text inside known widgets \u2014 the layout, styling and IDs never leave your site.<\/p>\n\n<p>Pick your content on the plugin's own Translations screen, tick the target languages, and start. Jobs are collected in the background by WP-Cron, so a long page never holds a request open or times out. The finished translation lands back in Polylang exactly as if you had created it by hand \u2014 an ordinary post, term or string, findable, editable and linked the same way as everything else on your multilingual site. If you later delete this plugin, the translations stay; they belong to your site.<\/p>\n\n<h4>Who it is for<\/h4>\n\n<ul>\n<li>Agencies running client sites on Polylang that want translation cost moved off the invoice and onto a metered API key<\/li>\n<li>Site owners with a few hundred pages, where per-word or subscription pricing stops making sense<\/li>\n<li>Anyone who needs translated content to travel between their own server and their chosen provider, with no intermediary in between<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Deep Polylang integration<\/strong> \u2014 writes finished translations straight into Polylang's own language and translation-group model, so a translated post, term or string is no different from one you created by hand<\/li>\n<li><strong>Four engines, your choice<\/strong> \u2014 MyMemory, Google Translate, OpenAI and Gemini, and in Pro also your own model or any OpenAI-compatible API<\/li>\n<li><strong>Your own model, or any OpenAI-compatible API<\/strong> \u2014 point the plugin at a model you host yourself, or at a gateway such as OpenRouter or Groq, and translate through it <em>(Pro)<\/em><\/li>\n<li><strong>Polylang string translation<\/strong> \u2014 batch-translate the strings registered with Polylang<\/li>\n<li><strong>Elementor support<\/strong> \u2014 only the text inside known widgets is sent to the model, never the layout, styling or IDs<\/li>\n<li><strong>ACF support<\/strong> \u2014 translates Advanced Custom Fields content<\/li>\n<li><strong>Taxonomy translation<\/strong> \u2014 a dedicated screen for categories, tags and custom taxonomies, with per-term status<\/li>\n<li><strong>SEO metadata<\/strong> \u2014 Yoast SEO, Rank Math, SEOPress and All in One SEO titles and descriptions<\/li>\n<li><strong>Website context<\/strong> \u2014 describe your site once and every language-model translation is done with that context in mind<\/li>\n<li><strong>Custom field control<\/strong> \u2014 translate extra meta keys, or exclude ones you do not want touched<\/li>\n<li><strong>Cost tracking<\/strong> \u2014 every completed job records what it actually cost, priced against the engine that produced it<\/li>\n<li><strong>Translation history<\/strong> \u2014 review any past translation, inspect what was sent and what came back, track status over time<\/li>\n<li><strong>Custom prompt and glossary<\/strong> \u2014 control tone, register and terminology, and lock specific terms to specific translations <em>(Pro)<\/em><\/li>\n<li><strong>Processing modes<\/strong> \u2014 translate synchronously for immediate results, or send OpenAI jobs to the Batch API for roughly half the price<\/li>\n<li><strong>Automatic translation<\/strong> \u2014 automatically start a translation when creating posts of a selected type <em>(Pro)<\/em><\/li>\n<li><strong>Translate from a chat with Claude or ChatGPT (MCP)<\/strong> \u2014 connect your site once and ask your assistant to translate a post, page or term; it runs inside the subscription you already pay for, with no API key and no per-token cost <em>(Pro)<\/em><\/li>\n<li><strong>Re-translate only changes<\/strong> \u2014 edit one paragraph, pay for one paragraph instead of the whole page <em>(Pro)<\/em><\/li>\n<li><strong>Bulk translation<\/strong> \u2014 queue dozens of posts for translation in a single action instead of one at a time <em>(Pro)<\/em><\/li>\n<\/ul>\n\n<h4>Free vs Pro<\/h4>\n\n<p>The free version is not a trial. It translates unlimited content into <strong>every language you have set up in Polylang<\/strong>, permanently.<\/p>\n\n<p><strong>Free<\/strong><\/p>\n\n<ul>\n<li>Unlimited translations, every Polylang language<\/li>\n<li>Posts, pages and custom post types<\/li>\n<li>Taxonomy translation \u2014 categories, tags and custom taxonomies<\/li>\n<li>Polylang string translation<\/li>\n<li>Elementor layouts<\/li>\n<li>ACF fields<\/li>\n<li>SEO metadata \u2014 Yoast SEO, Rank Math, SEOPress, All in One SEO<\/li>\n<li>Custom field control \u2014 translate extra meta keys, or exclude ones you do not want touched<\/li>\n<li>Translation history and per-job cost tracking<\/li>\n<li>Batch processing, at roughly half price <em>(OpenAI only)<\/em><\/li>\n<li>Engines: MyMemory, Google Translate, OpenAI GPT-5.6 Luna and GPT-5.4 Nano, Gemini 3.5 Flash Lite<\/li>\n<\/ul>\n\n<p><strong>Pro<\/strong><\/p>\n\n<p>Everything in free, plus:<\/p>\n\n<ul>\n<li>Bulk translation \u2014 queue many posts in a single action instead of one at a time<\/li>\n<li>Glossary \u2014 lock specific terms to specific translations<\/li>\n<li>Editable translation prompt \u2014 control tone, register and terminology<\/li>\n<li>Your own model, or any OpenAI-compatible API \u2014 point the plugin at a model you host yourself, or at a gateway such as OpenRouter or Groq, and translate through it<\/li>\n<li>Translate from a chat with Claude or ChatGPT (MCP) \u2014 connect your site once and ask your assistant to translate a post, page or term; it runs inside the subscription you already pay for, with no API key and no per-token cost<\/li>\n<li>More engines and models \u2014 Claude (Opus 5, Sonnet 5, Haiku 4.5), DeepL, and the larger OpenAI and Gemini models, for higher quality on difficult content<\/li>\n<li>Premium support<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/llm-automatic-translation.top\/latw-ai-translation-for-polylang\/\">Upgrade to Pro<\/a><\/p>\n\n<h4>Supported content<\/h4>\n\n<ul>\n<li>Post titles, content and excerpts<\/li>\n<li>Custom post types Polylang is set to translate<\/li>\n<li>Categories, tags and custom taxonomies<\/li>\n<li>Strings registered with Polylang<\/li>\n<li>Elementor widgets \u2014 only the text inside them is sent to the model, never the layout, styling or IDs<\/li>\n<li>ACF fields<\/li>\n<li>Yoast SEO, Rank Math, SEOPress and All in One SEO titles and descriptions<\/li>\n<li>Image alt texts<\/li>\n<li>Any meta key a plugin declares to Polylang as translatable, plus any key you add yourself<\/li>\n<\/ul>\n\n<h4>Translation engines<\/h4>\n\n<p>Two language models and two machine translation engines, plus more models, Claude, DeepL and a custom endpoint with Pro. Language models read your website description, follow the translation prompt and handle nuance. Machine translation engines are faster and cheaper per word but take no instructions, because there is nothing to instruct.<\/p>\n\n<p><strong>Language models<\/strong><\/p>\n\n<ul>\n<li><strong>OpenAI<\/strong> \u2014 GPT-5.6 Luna and GPT-5.4 Nano; the larger models come with Pro<\/li>\n<li><strong>Google Gemini<\/strong> \u2014 Gemini 3.5 Flash Lite; more models come with Pro<\/li>\n<\/ul>\n\n<p><strong>Machine translation<\/strong><\/p>\n\n<ul>\n<li><strong>Google Translate<\/strong> \u2014 Neural Machine Translation, billed per character<\/li>\n<li><strong>MyMemory<\/strong> \u2014 translation memory with machine translation fallback, free within a daily quota, no API key required<\/li>\n<\/ul>\n\n<p><strong>Your own endpoint<\/strong> <em>(Pro)<\/em><\/p>\n\n<ul>\n<li>Any API that speaks OpenAI's chat format: a model you host yourself, or a gateway such as OpenRouter or Groq. You enter the address, the model name and what it costs.<\/li>\n<\/ul>\n\n<p>Each engine stores its own API key and model separately, so switching between them, and back again, costs you nothing in reconfiguration.<\/p>\n\n<h4>Page builders<\/h4>\n\n<p><strong>Elementor is supported.<\/strong> Only the text inside known widget fields is extracted and sent to the model, as a flat list of strings. The widget tree itself \u2014 layout, styling, IDs, responsive settings \u2014 never leaves your site, and the translation is written back into a copy of the original tree, so nothing the model never saw can be damaged by it.<\/p>\n\n<p><strong>Other builders are refused rather than mangled.<\/strong> Bricks, Divi, Beaver Builder, Oxygen and WPBakery keep their content in their own storage format instead of the post content. Translating such a post would either produce an empty page or copy the original layout across untouched \u2014 both of which look like a broken plugin. Posts built with them are detected and blocked in the interface, with the reason shown, and refused server-side as well.<\/p>\n\n<h4>Polylang and Polylang Pro<\/h4>\n\n<p>Both editions work. With <strong>Polylang Pro<\/strong> the plugin delegates string extraction and reassembly to Polylang's own export machinery, so block parsing stays in step with whatever Polylang supports. On <strong>Polylang free<\/strong> it uses its own content walker instead. Elementor always goes through the plugin's own extractor, on both editions.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.2 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/polylang\/\">Polylang<\/a> 3.2 or higher, with at least two languages configured \u2014 this is an add-on for Polylang, not a standalone translation plugin<\/li>\n<li>An API key for the engine you choose. MyMemory needs none.<\/li>\n<li>Working WP-Cron, or a real server cron job calling wp-cron.php. If neither is available, the plugin offers a manual \"Check Responses\" button instead.<\/li>\n<\/ul>\n\n<h4>Third-Party Services<\/h4>\n\n<p>Content is sent only to the engine you selected in the plugin settings, and only when you start a translation. Nothing is sent without your action, and every request goes directly from your WordPress server to that provider.<\/p>\n\n<p><strong>OpenAI API<\/strong><\/p>\n\n<ul>\n<li>Service URL: <a href=\"https:\/\/api.openai.com\/\">https:\/\/api.openai.com\/<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/openai.com\/privacy\/\">https:\/\/openai.com\/privacy\/<\/a><\/li>\n<li>Terms of Use: <a href=\"https:\/\/openai.com\/terms\/\">https:\/\/openai.com\/terms\/<\/a><\/li>\n<\/ul>\n\n<p><strong>Google Gemini API<\/strong><\/p>\n\n<ul>\n<li>Service URL: <a href=\"https:\/\/generativelanguage.googleapis.com\/\">https:\/\/generativelanguage.googleapis.com\/<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/policies.google.com\/privacy\">https:\/\/policies.google.com\/privacy<\/a><\/li>\n<li>Terms of Use: <a href=\"https:\/\/ai.google.dev\/gemini-api\/terms\">https:\/\/ai.google.dev\/gemini-api\/terms<\/a><\/li>\n<\/ul>\n\n<p><strong>Google Cloud Translation API<\/strong><\/p>\n\n<ul>\n<li>Service URL: <a href=\"https:\/\/translation.googleapis.com\/\">https:\/\/translation.googleapis.com\/<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/policies.google.com\/privacy\">https:\/\/policies.google.com\/privacy<\/a><\/li>\n<li>Terms of Use: <a href=\"https:\/\/cloud.google.com\/terms\">https:\/\/cloud.google.com\/terms<\/a><\/li>\n<\/ul>\n\n<p><strong>MyMemory (Translated S.r.l.)<\/strong><\/p>\n\n<ul>\n<li>Service URL: <a href=\"https:\/\/api.mymemory.translated.net\/\">https:\/\/api.mymemory.translated.net\/<\/a><\/li>\n<li>Privacy Policy and Terms of Use: <a href=\"https:\/\/mymemory.translated.net\/terms-and-conditions\">https:\/\/mymemory.translated.net\/terms-and-conditions<\/a><\/li>\n<li>Usage limits: <a href=\"https:\/\/mymemory.translated.net\/doc\/usagelimits.php\">https:\/\/mymemory.translated.net\/doc\/usagelimits.php<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Quick start<\/h4>\n\n<ol>\n<li>Install and activate Polylang, and set up at least two languages.<\/li>\n<li>Install and activate LATW AI Translation for Polylang.<\/li>\n<li>Go to <strong>AI Translation &gt; Settings<\/strong>, choose an engine and paste its API key. Starting with MyMemory needs no key at all.<\/li>\n<li>Optionally write a short website description, so the language model knows what kind of site it is translating.<\/li>\n<li>Open <strong>AI Translation &gt; Translations<\/strong>, pick your content and target languages, and start.<\/li>\n<\/ol>\n\n<p>Translations arrive in the background. Check <strong>History<\/strong> to see what was sent, what came back, and what each job cost.<\/p>\n\n<h4>Adding Pro<\/h4>\n\n<p>Pro is a separate add-on plugin that runs alongside this one. Install this plugin first, then upload the Pro .zip under <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong> and activate it. Bulk translation, the glossary, the editable prompt, the extra engines, the custom endpoint and MCP appear on the screens you already know \u2014 there is no second settings page and nothing to migrate.<\/p>\n\n<h4>Where to get an API key<\/h4>\n\n<p>The settings screen links straight to the right page for each engine, with step-by-step instructions:<\/p>\n\n<ul>\n<li>OpenAI \u2014 <a href=\"https:\/\/platform.openai.com\/api-keys\">platform.openai.com\/api-keys<\/a><\/li>\n<li>Google Gemini \u2014 <a href=\"https:\/\/aistudio.google.com\/apikey\">aistudio.google.com\/apikey<\/a><\/li>\n<li>Google Translate \u2014 a Google Cloud API key with the Cloud Translation API enabled<\/li>\n<li>MyMemory \u2014 no key required<\/li>\n<li>Custom endpoint <em>(Pro)<\/em> \u2014 whatever your provider issues, for example <a href=\"https:\/\/openrouter.ai\/keys\">openrouter.ai\/keys<\/a> or <a href=\"https:\/\/console.groq.com\/keys\">console.groq.com\/keys<\/a>; a model on your own server usually needs no key<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20polylang%3F\"><h3>Do I need Polylang?<\/h3><\/dt>\n<dd><p>Yes. This is an add-on for <a href=\"https:\/\/wordpress.org\/plugins\/polylang\/\">Polylang<\/a>, not a standalone translation plugin. It needs Polylang active with at least two languages, and does nothing without it.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20polylang%20free%2C%20or%20only%20polylang%20pro%3F\"><h3>Does it work with Polylang free, or only Polylang Pro?<\/h3><\/dt>\n<dd><p>Both. Polylang Pro lets the plugin reuse Polylang's own export and reassembly machinery; on Polylang free the plugin uses its own content walker. The screens and the results are the same either way.<\/p><\/dd>\n<dt id=\"what%20can%20i%20do%20with%20the%20free%20version%3F\"><h3>What can I do with the free version?<\/h3><\/dt>\n<dd><p>Translate unlimited content into every language configured in Polylang, using MyMemory, Google Translate, OpenAI GPT-5.6 Luna or GPT-5.4 Nano, or Gemini 3.5 Flash Lite. Posts, custom post types, taxonomies, strings, ACF, Elementor, SEO metadata and custom fields are all included. It is not a trial and it does not expire.<\/p><\/dd>\n<dt id=\"how%20much%20does%20translation%20actually%20cost%3F\"><h3>How much does translation actually cost?<\/h3><\/dt>\n<dd><p>It depends on the engine and the volume \u2014 you pay the provider directly, at their rates. Language models bill per token, Google Translate bills per character, MyMemory is free within its quota. As a rough guide, a single 1,000-word page through GPT-5.4 Nano or Gemini 3.5 Flash Lite costs well under one cent. Every completed job records what it actually cost, so the History screen shows real figures for your own content rather than an estimate.<\/p><\/dd>\n<dt id=\"is%20my%20content%20sent%20anywhere%20else%3F\"><h3>Is my content sent anywhere else?<\/h3><\/dt>\n<dd><p>No. Content goes from your server to the engine you selected and back. It does not pass through our servers, and we neither see nor store it.<\/p><\/dd>\n<dt id=\"which%20engine%20should%20i%20choose%3F\"><h3>Which engine should I choose?<\/h3><\/dt>\n<dd><p>If quality on nuanced content matters most, use a language model \u2014 OpenAI or Gemini. It reads the whole page, follows the translation prompt and your website description, and keeps tone consistent. If you are pushing large volumes of straightforward text and cost is the priority, Google Translate is cheaper and faster, and MyMemory is free within its daily quota.<\/p><\/dd>\n<dt id=\"can%20i%20switch%20engines%20later%3F\"><h3>Can I switch engines later?<\/h3><\/dt>\n<dd><p>Yes, at any time. Each engine keeps its own key and model setting, so switching back does not mean re-entering anything.<\/p><\/dd>\n<dt id=\"do%20google%20translate%20and%20mymemory%20use%20the%20prompt%3F\"><h3>Do Google Translate and MyMemory use the prompt?<\/h3><\/dt>\n<dd><p>No. They ignore the translation prompt and the website description. They are machine translation engines rather than language models, so there is nothing to prompt.<\/p><\/dd>\n<dt id=\"can%20i%20customise%20the%20translation%20prompt%3F\"><h3>Can I customise the translation prompt?<\/h3><\/dt>\n<dd><p>This plugin ships one prompt, and the Settings page prints it in full so you can see exactly what is sent. You can still add a website description, which is passed to the model with every translation. Writing a prompt of your own, and a glossary for locking specific terms, come with Pro.<\/p><\/dd>\n<dt id=\"which%20languages%20are%20supported%3F\"><h3>Which languages are supported?<\/h3><\/dt>\n<dd><p>Every language you have configured in Polylang. There is no per-language limit in the free version.<\/p><\/dd>\n<dt id=\"what%20are%20the%20processing%20modes%3F\"><h3>What are the processing modes?<\/h3><\/dt>\n<dd><p><strong>Synchronous<\/strong> waits for the provider and fills in the translation in the same run.<\/p>\n\n<p><strong>Background<\/strong> is OpenAI-only. It finishes without holding a long request open, and is the default where available.<\/p>\n\n<p><strong>Batch<\/strong> is OpenAI-only too. It sends the job to OpenAI's Batch API for roughly half the price and collects it when ready, usually within the hour, though OpenAI only guarantees a 24-hour window.<\/p>\n\n<p>Gemini, Google Translate and MyMemory run synchronously only.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%3F\"><h3>Does it work with page builders?<\/h3><\/dt>\n<dd><p>Elementor is supported. Bricks, Divi, Beaver Builder, Oxygen and WPBakery are deliberately refused: their content lives in their own storage format, and translating it would produce an empty page or an untranslated copy. Those posts are marked in the list with the reason, rather than silently producing a broken translation.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Products are ordinary posts as far as Polylang is concerned, so the plugin translates whatever Polylang hands over. There is no shop-specific handling \u2014 product attribute taxonomies and variations are not covered.<\/p><\/dd>\n<dt id=\"can%20i%20stop%20it%20translating%20certain%20fields%3F\"><h3>Can I stop it translating certain fields?<\/h3><\/dt>\n<dd><p>Yes. <strong>Settings &gt; Custom Fields<\/strong> takes a list of meta keys to translate in addition to the defaults, and a list to exclude. The exclusion list wins.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20from%20a%20chat%20with%20claude%20or%20chatgpt%3F\"><h3>Can I translate from a chat with Claude or ChatGPT?<\/h3><\/dt>\n<dd><p>Yes, with Pro. Pro includes an MCP server: connect your site once to Claude or ChatGPT, then ask the assistant to translate a post, page or term. It runs inside the subscription you already have, so there is no API key and no per-token charge, and publishes the result as a Polylang-linked translation. The free version does not include MCP.<\/p><\/dd>\n<dt id=\"can%20i%20see%20what%20was%20translated%3F\"><h3>Can I see what was translated?<\/h3><\/dt>\n<dd><p>Yes. The History screen shows every past translation, what was sent, what came back, the status of each job and what it cost. The Logs screen carries the technical detail.<\/p><\/dd>\n<dt id=\"how%20are%20translations%20queued%3F\"><h3>How are translations queued?<\/h3><\/dt>\n<dd><p>Jobs go to your chosen engine and are collected by WP-Cron in the background, so long pages do not time out. Cron health is shown on the dashboard. If your host blocks WP-Cron, enable <strong>Manual Check Responses<\/strong> in Settings &gt; Advanced to get a button that collects finished jobs on demand.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20translations%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my translations if I delete the plugin?<\/h3><\/dt>\n<dd><p>They stay. Translated posts, terms and strings are ordinary Polylang content and belong to your site. Deleting the plugin removes its own queue table, settings and logs, and nothing else.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20my%20pro%20license%20expires%3F\"><h3>What happens when my Pro license expires?<\/h3><\/dt>\n<dd><p>The version you have keeps working, but you stop receiving updates until you renew. The free version continues working regardless, with no licence at all.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Automatic AI translation for Polylang, billed to your own API key. No per-word pricing, no markup, no middleman.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/373916","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=373916"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/szymon0zawadzki"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=373916"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=373916"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=373916"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=373916"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=373916"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=373916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}