{"id":98,"date":"2026-09-23T11:24:42","date_gmt":"2026-09-23T11:24:42","guid":{"rendered":"https:\/\/docs.latw.ai\/uncategorized\/automatic-translation-2\/"},"modified":"2026-09-23T11:24:42","modified_gmt":"2026-09-23T11:24:42","slug":"automatic-translation-2","status":"publish","type":"post","link":"https:\/\/docs.latw.ai\/pl\/latw-for-polylang\/automatic-translation-2\/","title":{"rendered":"Automatic Translation"},"content":{"rendered":"<p><em>Available in LATW AI Translation for Polylang <strong>PRO<\/strong>.<\/em><\/p>\n<h2>What it does<\/h2>\n<p>Normally you translate content by opening the plugin&#8217;s <strong>Translations<\/strong> screen and pressing a<br \/>\nbutton. Automatic translation removes that step: as soon as a new post, page or product is<br \/>\npublished, the plugin sends it to the AI on its own and the finished translation is linked to it in<br \/>\nPolylang a short while later.<\/p>\n<p>It was built for sites where content does not arrive by hand \u2014 a product feed from a supplier, a CSV<br \/>\nimporter, an app that posts articles through the API. You publish, and the translations appear.<\/p>\n<p><strong>Important:<\/strong> every automatic translation is billed by your AI provider, exactly like a manual one.<br \/>\nThe settings include daily limits so an importer that misbehaves cannot run up a bill overnight \u2014<br \/>\nsee <a href=\"#daily-limits\">Daily limits<\/a>.<\/p>\n<h2>How it works, step by step<\/h2>\n<ol>\n<li>Someone (or something) publishes a new post.<\/li>\n<li>The plugin notes the post and starts a short countdown \u2014 60 seconds by default.<\/li>\n<li>If the post is saved again during the countdown, the countdown restarts. This is deliberate:<br \/>\nimporters usually write the same product several times in a row (first the text, then the<br \/>\nprice, then the stock level, then the images), and we want to translate it once, after it has<br \/>\nsettled \u2014 not four times.<\/li>\n<li>Once the countdown runs out, the plugin&#8217;s regular every-minute background task picks the post up<br \/>\nand sends it to the AI, in the same way as if you had pressed Translate yourself.<\/li>\n<li>The translation is saved and linked to the original in Polylang.<\/li>\n<\/ol>\n<h3>What does <em>not<\/em> start a translation<\/h3>\n<ul>\n<li><strong>Editing content that is already published.<\/strong> Only content <em>entering<\/em> one of the selected<br \/>\nstatuses counts \u2014 a brand-new post being published, or a draft going live. Re-saving a published<br \/>\npost does nothing at all. A stock or price sync that touches every product every few hours will<br \/>\ntherefore not trigger anything.<\/li>\n<li><strong>Content that is already translated.<\/strong> If a post already has a translation in every target<br \/>\nlanguage, it is skipped.<\/li>\n<li><strong>Translations themselves.<\/strong> A translated post is never treated as new content to translate, so<br \/>\nthere is no loop.<\/li>\n<li><strong>Drafts in progress, trashed posts and media attachments.<\/strong><\/li>\n<\/ul>\n<p>Keeping existing translations up to date when the original changes remains a manual decision on<br \/>\nthe <strong>Translations<\/strong> screen.<\/p>\n<p>One case worth knowing: if a post is published that already has <em>some<\/em> of its target languages, the<br \/>\nmissing ones are translated and the ones it has are brought up to date in the mode chosen under<br \/>\n<strong>Outdated Translations<\/strong> \u2014 for free when nothing changed, but at full price if that setting is<br \/>\n<strong>Re-translate the whole post from scratch<\/strong>. See <em>Updating Outdated Translations<\/em>.<\/p>\n<hr \/>\n<h2>The settings<\/h2>\n<p>All options live in <strong>AI Translation \u2192 Settings \u2192 Automation<\/strong>. Without an active licence the tab<br \/>\nshows a notice instead, and nothing is watched.<\/p>\n<h3>Automatic translation \u2014 &#8220;Translate new content automatically&#8221;<\/h3>\n<p>The master switch. While it is off, nothing below has any effect and the plugin behaves exactly as<br \/>\nbefore. Tick it and save, and the plugin starts watching for new content.<\/p>\n<p>While posts are waiting for their countdown, the switch shows how many: <em>N item(s) are currently<br \/>\nwaiting to be translated.<\/em><\/p>\n<h3>Content types<\/h3>\n<p>Which kinds of content are watched: Posts, Pages, Products, or any custom type your theme or plugins<br \/>\nregister \u2014 as long as Polylang is set to translate it.<\/p>\n<p><strong>Nothing happens until at least one type is ticked.<\/strong> This is the usual reason automatic<br \/>\ntranslation appears to &#8220;not work&#8221;.<\/p>\n<h3>Triggering statuses<\/h3>\n<p>The status a post has to <em>enter<\/em> for a translation to start. <strong>Published<\/strong> is the default and is<br \/>\nwhat most sites want.<\/p>\n<table>\n<thead>\n<tr>\n<th>Option<\/th>\n<th>Translation starts when\u2026<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Published<\/strong><\/td>\n<td>a post goes live (new post published, or a draft published)<\/td>\n<\/tr>\n<tr>\n<td><strong>Pending review<\/strong><\/td>\n<td>a contributor submits a post for review<\/td>\n<\/tr>\n<tr>\n<td><strong>Draft<\/strong><\/td>\n<td>a post is first saved as a draft \u2014 useful if you want translations ready before publishing<\/td>\n<\/tr>\n<tr>\n<td><strong>Private<\/strong><\/td>\n<td>a post is published privately<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>You can tick more than one. Remember that only the <em>move into<\/em> that status counts \u2014 a post that is<br \/>\nalready published and gets edited is not re-translated.<\/p>\n<p>The status the <em>translation<\/em> gets is a separate setting: <strong>Settings \u2192 Translation \u2192 Status of new<br \/>\ntranslations<\/strong> (Draft by default).<\/p>\n<h3>Wait before translating<\/h3>\n<p>How many seconds to wait before sending the content to the AI. Default <strong>60<\/strong>, minimum <strong>30<\/strong>.<\/p>\n<p>Every further save of that post restarts the countdown. So the delay is not &#8220;translate 60 seconds<br \/>\nlater&#8221; so much as &#8220;translate 60 seconds after the last time anything touched this post&#8221; \u2014 which is<br \/>\nwhat stops half-built imported products from being translated mid-import.<\/p>\n<ul>\n<li>Content written by people in the editor: the default 60 seconds is fine.<\/li>\n<li>Content coming from an importer that writes in several passes: raise it to 300 seconds (5 min) or<br \/>\nmore, so the importer is definitely finished.<\/li>\n<\/ul>\n<h3>Target languages<\/h3>\n<p>Which languages new content is translated into.<\/p>\n<p>Leave <strong>all boxes unticked<\/strong> to reuse the Target Languages you already picked on the<br \/>\n<strong>Translation<\/strong> tab. Tick specific languages here only if automatic translation should cover a<br \/>\nnarrower set than your manual translations \u2014 for example, translate everything into German by hand<br \/>\nbut let only French run automatically.<\/p>\n<h3>Daily limits<\/h3>\n<p>Two limits, both counting <strong>automatic translations only<\/strong> \u2014 anything you start by hand is never<br \/>\nblocked and never counted. <strong>0 means no limit.<\/strong><\/p>\n<p><strong>Translations per day.<\/strong> One post translated into three languages counts as <strong>three<\/strong>.<\/p>\n<p>This is the safety net. If a feed misfires and recreates 5,000 products, the limit stops the run<br \/>\nonce it is reached. Nothing is lost \u2014 the remaining posts keep waiting and go out automatically once<br \/>\nthe limit resets the next day, or as soon as you raise it. While a limit is holding content back, a<br \/>\nwarning appears on the plugin&#8217;s own screens telling you how many items are waiting.<\/p>\n<p><strong>USD per day.<\/strong> The maximum amount to spend on automatic translations per day.<\/p>\n<p>One caveat worth understanding: the exact cost of a translation is only known once it comes back<br \/>\nfrom the provider, so this limit reacts with a delay and can be overshot \u2014 by a lot in <strong>Batch<\/strong><br \/>\nprocessing, where results arrive hours later. If you want a hard, immediate stop, set <strong>translations<br \/>\nper day<\/strong> as well.<\/p>\n<p>The day is counted in UTC, so it rolls over at the same moment regardless of your site&#8217;s timezone.<\/p>\n<h3>Settings this feature reuses<\/h3>\n<p>Automatic translation is not a separate translation engine \u2014 it uses everything already configured<br \/>\nelsewhere in the plugin:<\/p>\n<ul>\n<li><strong>Engine, model, processing and reasoning effort<\/strong> (Settings \u2192 General).<\/li>\n<li><strong>Prompt, glossary and what to translate<\/strong> (Settings \u2192 Translation, Glossary).<\/li>\n<li><strong>Outdated Translations<\/strong>, for a post that turns out to be partly translated already.<\/li>\n<\/ul>\n<hr \/>\n<h2>Where to check on it<\/h2>\n<ul>\n<li><strong>Settings \u2192 Automation<\/strong> shows how many posts are waiting for their countdown.<\/li>\n<li><strong>AI Translation \u2192 Translations<\/strong> and <strong>History<\/strong> show the jobs themselves, as for any other<br \/>\ntranslation.<\/li>\n<li><strong>AI Translation \u2192 Logs<\/strong> records the work, with lines starting <code>auto-translate:<\/code> \u2014 which posts<br \/>\nwere dispatched, when a daily limit started holding posts, and any dispatch that failed. Why an<br \/>\nindividual post was skipped is recorded too, once <strong>Settings \u2192 Advanced \u2192 Debug Mode<\/strong> is on.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Available in LATW AI Translation for Polylang PRO. What it does Normally you translate content by opening the plugin&#8217;s Translations screen and pressing a button. Automatic\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_latwm_translated_slug":"","footnotes":""},"categories":[17],"tags":[],"class_list":["post-98","post","type-post","status-publish","format-standard","hentry","category-latw-for-polylang"],"_links":{"self":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/98","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/comments?post=98"}],"version-history":[{"count":0,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/98\/revisions"}],"wp:attachment":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/media?parent=98"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/categories?post=98"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/tags?post=98"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}