Changelog
ChangelogGato AI Translations for Polylang

Gato AI Translations for Polylang

These are all the changes for each version of the Gato AI Translations for Polylang plugin.

18.0.0

Release date: 20/05/2026

Breaking changes

  • Translating additional Gutenberg blocks, Elementor widgets, and Bricks elements is done in a different way

Added

  • Support ChatGPT 5.4 mini (#2319)
  • Support Claude Opus 4.7 (#2320)
  • Use API keys for ChatGPT and Claude from WordPress 7.0's AI Connectors, if not set in the plugin Settings (#2324)
  • Support Gemini as a translation service provider, with API key fallback from WordPress 7.0's AI Connectors (#2325)
  • Translate PHP-only blocks (#2329)
  • Translate Advanced Custom Fields (ACF) blocks (#2339)
  • Add a "Gato Translate" quick link on CPT and media list pages (#2359)
  • Add a "Gato Translate" quick link on tags, categories, and users list pages (#2384)
  • Add a "Gato Translate" button to translate menus manually (#2385)
  • Translate menu reference in GenerateBlock's Navigation block (generateblocks-pro/classic-menu) (#2371)
  • Register WordPress AI Abilities (via the Abilities API) to translate custom posts, taxonomy terms, media, menus and users (#2386)
  • Support for Kadence blocks (#2389)
  • Support for Greenshift blocks (#2389)
  • Support for all blocks implementing WMPL config file (wpml-config.xml) (#2389)
  • Settings for "Translation Timeouts" (#2392)

Improvements

  • Made ChatGPT 5.4 mini new default model (#2319)
  • Tested up to WordPress 7.0 (#2323)
  • Set the Default Translation Provider to the first AI service with API key provided via WP 7.0's AI Connectors (#2326)
  • Translate custom blocks attributes via PHP hooks with regex (instead of GraphQL) (#2332)
  • Translate custom Elementor widgets via PHP hooks configuration (instead of GraphQL) (#2337)
  • Translate custom Bricks elements via PHP hooks configuration (instead of GraphQL) (#2338)
  • Allow translating custom posts without author (#4cf7c879)
  • Improve plugin performance: run translations much faster (#2340)
  • Improve plugin performance: consume less memory (#2341)
  • Improve plugin performance: cache compiled queries (#2347)
  • Replace deprecations in PHP 8.5 (#2350)
  • Translate Elementor's icon-box widget (#05415577)
  • Suppress "Block type is not server-side registered" warnings (#2358)
  • Added support for the OpenAI GPT-5.5 (gpt-5.5) model (#2360)
  • Added support for the DeepSeek v4 (deepseek-v4-pro) and DeepSeek v4 Flash (deepseek-v4-flash) models (#2360)
  • Added support for Claude Sonnet 4.6 (Claude claude-sonnet-4-6) and Haiku 4.5 (claude-haiku-4-5) models (#2360)
  • Translate entity reference IDs in Elementor and Bricks pages (#2362)
  • Translate entity reference IDs in Gutenberg blocks (#2366)
  • Avoid conflict with BBQ Firewall plugin (#2380)
  • Updated the list of supported languages for DeepL (#2381)
  • Updated the list of supported languages for Google Translate (#2382)
  • Include the post type and title of the referenced custom post, the taxonomy and name of the referenced term, or the name of the referenced menu, in the warning emitted when no translated entry is found for a custom field relationship (#2388)

Fixed

  • Handle null response from license API (eg: when access is forbidden via network) (#2322)
  • Prevent deleting shared media files (original_image, edited versions and their thumbnails) when removing one translation while sibling translations still reference them (Bug from Polylang: github.com/polylang/polylang/issues/1883) (#2364)
  • Removing the failed translation meta for non-default languages (#2387)
  • Do not add warning message about missing entity ID if it had already been translated, when doing "Translate content" in "Partial Translations" (#2391)
  • Several bug fixes (#2392)

17.1.2

Release date: 07/04/2026

Improvements

  • Add support for Elementor v4 (#2318)

Fixed

  • Do not execute translations on plugins.php, just in case Polylang's PLL() is missing (#2317)

17.1.1

Release date: 24/03/2026

Fixed

  • Conflict with the "All In One Security" plugin (#2315)

17.1.0

Release date: 23/03/2026

Added

  • Support using a self-hosted LLM model (run on your own server) as the translation provider (#2309)
  • Support ChatGPT 5.4 (#2310)

Improvements

  • Disable Polylang syncing meta (#2307)
  • Lower min required memory from 1 GB to 512 MB (#2312)

Fixed

  • Fix Bricks templates not syncing template type (#2307)
  • Store Bricks templates meta under the right meta key (#2308)
  • Conflict with the "All In One Security" plugin (#6c76aa6)

17.0.0

Improvements

  • Validate plugin license against Gato's new FluentCart-powered shop (#2303)

Fixed

  • Fixed - Show new version updates when clicking on the Show details link in Plugin updates

16.1.0

Added

  • Translate user descriptions (#2280)
  • Translate user descriptions via WP-CLI (#2281)
  • Support Claude Opus 4.6 (#2297)

Improvements

  • Allow printing logs in reverse order (#2279)
  • Pass --default-provider param to WP-CLI for menus (#2282)
  • Validate the PHP server has 1GB of memory available (#2283)
  • Link to documentation URL to explain how to increase memory for plugin (#2284)

Fixed

  • Do not show input for custom posts on the "Gato Translate (Custom)" form for taxonomies (#45b09e9f)
  • Execute menu translation when automatic translation for CPTs is disabled (#271a08c5)

16.0.3

Fixed

  • Error "variable 'menuEntityReferenceTranslationLanguageIDs' has not been defined in the operation" (#2278)

16.0.2

Fixed

  • Editing Bricks templates would throw an exception (#2276)

16.0.0

Breaking changes

  • The prompt cannot be customized for AI services anymore (#2271)
  • The prompt was moved to the "AI Translation Options" tab in the Settings (#2271)

Added

  • ChatGPT 5.2 models (#2248)
  • Translate menus (#2253)
  • Translate menus via WP-CLI (#2260)
  • Translate menu entity references for Elementor's "WordPress Menu" widget (#2266)
  • Translate menu entity references for Brick's "Nav Menu" element (#2267)
  • Added "AI Prompt" CPT to store custom prompts (#2272)

Improvements

  • Set the "GPT-5.2 (Thinking)" model as the default one for ChatGPT (#2248)
  • Translate entity references can also translate strings (for slugs) (#2265)

15.3.0

Added

  • Settings in Bricks to enable/disable replacing components (#2218)
  • Allow to process failed translations only (#2220)
  • In Posts/Media/Tags/Categories list page: Style Polylang edit icon with yellow background for failed translations (#2221)
  • Add a filter in the Posts/Media list page to show only entries with failed translations (#2222)
  • Support old format of the Gutenberg core/list block (#2233)
  • Support Claude Opus 4.5 and Sonnet 4.5 (#2234)
  • Added --process-failed param to WP-CLI commands (#2245)

Improvements

  • Better slug translations, by removing all "-" from the slug to translate (#2217)
  • Only sync a custom post's categories/tags/featured image for the target languages, not for all of them (#2223)
  • Only remove meta entries for the target languages, not for all of them (#2224)
  • Enable DEBUG log level by default (#2229)
  • Throw a warning (instead of an error) when an entity is not translated (#2235)
  • Improve the "lower number of translations" error message with solution (#2236)
  • Improved description for the "Translate custom posts separately?" option (#2240)

Fixed

  • Do not show "Display query execution response in logs?" option before entering license key (#2239)
  • Ignore the "Translate custom posts separately?" option for media meta entries (#2241)
  • Do not override Bricks/Elementor content when "Translate content" is disabled (#2243)

15.2.1

Fixed

  • WordPress 6.9 issue: Queries not stored properly in the DB (#2219)

15.2.0

Added

  • Translate internal URL links (in: Gutenberg/Classic Editor/Bricks/Elementor content, meta fields) (#2143)
  • Translate ACF links (#2145)
  • Support translating GenerateBlocks (GeneratePress blocks) (#2139)
  • Support translating Yoast SEO blocks (#2163)
  • Integration with ACF: Translate entity reference for the "Page Link" field type (#c573064)
  • If the slug is provided in the origin language, translate that one (i.e. don't generate it from the translated title) (#2185)
  • Partial translations (by tasks, and by content parts) (#2195)
  • ChatGPT 5.1 models (#2203)
  • Support translating posts whose CPT is handled by a Elementor but the post is not built with Elementor (#2207)
  • Support the "reuse slugs" feature from Polylang Pro (#2211)

Improvements

  • Execute translation once for all created tags/categories (#2134)
  • Execute translation once for all uploaded media items (#2135)
  • Show warning when translation custom post is in the trash (#2137)
  • Added --fail-if-log-notifications param to WP-CLI commands, to print IDs only when a log entry was added during the execution (#2138)
  • Added --parts param to WP-CLI commands, to select what parts to translate (#2184)
  • Added --tasks param to WP-CLI commands, to select what tasks to execute (#2195)
  • Validate the number of translations returned by the API provider equals the number of strings to translate (#2161)
  • Remove " (the)" at the end of the country name (#2165)
  • Improved prompt to avoid escaping HTML attributes (#2166)
  • Improved prompt to translate text inside HTML tags (#0334741)
  • Added settings to disable printing the queryExecutionResponse entry in the logs (#2174)
  • Added settings to select what custom post parts to translate, among properties, content, and meta (#2176)
  • Added settings to select what taxonomy parts to translate, among properties and meta (#2178)
  • Sort the variables in the logs (#2175)
  • Also translate the post content when handled by Page Builders (Elementor/Bricks) (#2201)
  • Set the "GPT-5.1 (Thinking)" model as the default one for ChatGPT (#2203)
  • Use 2000 chars as max payload size by default (to make translations faster) (#2214)
  • Tested up to WordPress 6.9 (#2215)

Fixed

  • Remove code from GraphQL query for deactivated plugins (#2139)
  • Translating only properties not working (#1a3bd58)
  • Use ChatGPT as default translation provider when Settings have not been set (#2172)
  • Translate reference to reusable block when translating more than 1 post (#2173)
  • Translate blocks containing the non-breaking space "U+00A0" (not a regular space) (#2202)
  • For slugs, translate origin slug for tags/categories instead of name (#2208)
  • Improve regex to search/replace strings inside Gutenberg blocks to avoid error "Backtrack limit exhausted" (#2213)
  • "Undefined array key" warning

15.1.0

  • Skipped version (keep the same version as the Gato GraphQL plugin)

15.0.1

  • Avoid exception when reordering ACF fields (#2101)

15.0.0

Added

  • Use a unified prompt for all AI services (#2068)

Fixed

  • Conflict with Nelio A/B Testing plugin (#2066)
  • Setting properties on BasicService classes (#2067)

14.0.4

Fixed

  • Exception when initializing plugin and conflicting plugins installed on site (#2065)

14.0.2

Fixed

  • Do not trigger translations when user is not logged-in, to avoid "You must be logged in to create or update custom posts" error (#2063)
  • Warning message when translating meta and no custom post translation entries exist (#2064)

14.0.0

Breaking changes

  • Upgraded min PHP version from 7.4 to 8.1 (#2057)
  • Must provide the OpenRouter API key again
  • Hardcode _wp_page_template meta key to copy, removed from Meta Configuration default value (#1992)
  • Added integration with SEO plugins, ACF, and Meta Box (see below), hence meta keys from these plugins (not previously in the Meta Configuration) will now automatically be synced/translated.

Added

  • Skip translating predefined names for tags/categories (#1925)
  • Support glossaries in DeepL (#1926)
  • Execute bulk action "Gato Translate (Custom)" (#1931)
  • Sync post's menuOrder (#1948)
  • Sync post's parent (#1949)
  • Translate arrays of arrays in meta (i.e. support Meta Box group type) (#1950)
  • Translate arrays of arrays in meta for entity IDs (i.e. support Meta Box group type) (#1951)
  • Override the prompt sent to AI services via hooks (#1954)
  • Support all models from OpenRouter via API (#2003)
  • Support OpenAI 5 models (#1979)
  • Support OpenAI 5 models via OpenRouter (as predefined models) (#1981)
  • Support OpenAI 4.1 models (#1956)
  • Support Claude Opus 4.1 (#1982)
  • Hooks to react to the query execution (#1957)
  • Hooks to override GraphQL variables before the query execution (#1957)
  • Integration with Advanced Custom Fields UI (via Field Groups) to define meta keys to sync/translate (#1971)
  • Integration with Meta Box UI (via Custom Fields) to define meta keys to sync/translate (#1977)
  • Integration with SEO plugins to to sync/translate meta: (#1974)
    • All in One SEO
    • Rank Math
    • SEO Simple Pack
    • SEOPress
    • Slim SEO
    • The SEO Framework
    • WP Meta SEO
    • Yoast SEO
  • Enable/disable integration with 3rd-party plugins, via the Plugin Integration Configuration tab in Settings (#1972)
  • When translating multiple posts at once, enable translating each post separately (in its own request to the API) (#1975)
  • Execute translation programatically (via Gato::translateCustomPosts(), Gato::translateTaxonomyTerms(), and Gato::translateMedia()) (#2030)
  • Execute translation via WP-CLI (#2039)
  • Support Elementor's Countdown element for translation (#2043)

Improvements

  • Upgrade plugin to latest dependencies for PHP 8.1 (#2059)
  • Print body of failing requests in error logs
  • Improved prompt sent to AI services (as to avoid issues with quotes, escaped HTML tags, and character encoding) (#1928)
  • Translate properties inside HTML tags: alt, title, placeholder, aria-label, aria-describedby, aria-labelledby, aria-placeholder (#1929)
  • Sort providers and languages, in the dropdown in the Settings (#1930)
  • Only add Gato Translate bulk action if user can edit_posts (#1935)
  • Validate that variables to read from/to language to translate are in AI prompt (#1937)
  • Reorganized Settings tabs (#1953)
  • Use a System message settings input for Claude (#1955)
  • Improved error message for unloadable IDs (#1969)
  • Removed deprecated OpenAI 4.5 preview model (#1980)
  • Support Claude via OpenRouter (#1995)
  • Print the model in the Logs entry (#1997)
  • Added a notice when Polylang is disabled (#1998)
  • Improved the warning message when there are no custom posts to translate, indicating the reason why (#2007)
  • Provide solutions to fix issues in error log entry (#2011)
  • Use default "Automatically create translation entries" option for CPTs registered via plugins (#2012):
    • ACF
    • MetaBox
    • Custom Post Type UI
  • Show notification labels in different colors for different severities (#2013)
  • Enable log notifications for warnings by default (#2014)
  • Upgrade DeepSeek to v3.1 (#2038)
  • Add ID of tags/categories without translation entry on warning messages (#2044)
  • Treat missing translated tags/categories as error, not warning (#2045)
  • Treat missing translated entities (for custom post parent, block patterns, and entity relationships in custom fields) as error, not warning (#2046)
  • Print both error and warnings in the same log entry (#2047)
  • Either throw warning or error for missing translated IDs depending on that CPT/taxonomy/media being translatable or not (#2048)
  • Print debug log when automatic creation of translation entries for that CPT is disabled (#2056)

Fixed

  • Exception when OpenRouter returns null translations (#1927)
  • Create translation category using origin name as slug, not description (#1932)
  • Don't show empty plugin menu for users without edit_posts capability (#1933)
  • Use edit_theme_options capability to show Patterns in menu (#1934)
  • Do not exclude languages from the current languages in Polylang's associations (#1960)
  • Fix translating media item attached to post without language (#1961)
  • Fix translating category that has parent without language (#1962)
  • Avoid error when there are no languages to translate for media, tags, and categories (#1963)
  • Trigger automatic translations on posts created using WP REST API (#1984)
  • Bricks exception when doing Live Preview with another theme (#1985)
  • Plugin not working with PHP 7.4 (#2005)
  • Updating posts storing wrong date (#53f6b66)
  • User authentication when executing translation query triggered via the WP REST API (#68b1ef3)
  • Avoid errors from continuing translation when a provider doesn't have API key configured (#2037)
  • Override OpenRouter prompt in Custom Settings (v14.0.1)

13.2.0

Added

  • Log API requests when using Google Translate and DeepL (#1904)
  • Sync entity IDs in meta with corresponding IDs for target language (#1916)
  • New translation provider: OpenRouter (#1923)

Improvements

  • Log entry "ai-requests" has been renamed to "api-requests" (to also handle Google Translate and DeepL) (#1904)
  • Updated dependencies to latest version (#1907)
  • Translate meta entries for media items all together (#1918)
  • Translate meta entries for tags and categories all together (#1919)

Fixed

  • When translating posts, handle status future as publish when doing "Same status as origin" (#1903)
  • Translate password-protected posts (#1916)
  • Translate meta in media items (#1916)
  • Don't use selected default translation provider if disabled (#1922)

13.1.0

Note: v13.1.0 was not released, it was released directly as v13.1.1.

Added

  • New "Translation Options" tab in the Settings, to select sync/async multi-language translation (#1833)
  • Option "Translate custom post slugs?" in the Settings (to support shared slugs with Polylang PRO) (#1835)
  • Added Bricks integration (#1838)
  • Support Gutenberg's html block (#1867)
  • Support translating reusable blocks (synced patterns) (#1868)
  • Define max payload of request sent to AI provider (v13.1.1) (#1897)

Improvements

  • Show warning instead of error if can't update a taxonomy term slug (#1842)
  • Regenerate queries when plugin/theme dependency is activated/deactivated (#1843)
  • Calculate maximum string length for translation by subtracting prompt character count (#1860)
  • For error "String to translate exceeds max length", don't print full string on log header (#1861)
  • Avoid executing the GraphQL query if the post (cat/tag/media) has a different language than the configured origin language (#1862)
  • Print notice 'There were no items to translate' when bulk action has no valid items to process (#1862)
  • If any request to API fails, still perform the translation for all successful requests (#1872)
  • Format markdown content in logs (#1873)
  • Skip executing the query if there are validation errors for the translation (eg: no API key defined) (#1877)
  • Improved prompt for Claude (#1879)
  • If any string fails the max-length validation, still translate everything else (#1880)
  • Added language in "ai-requests" log entry (#1881)
  • Automatically create translation entries for Elementor templates (#1891)
  • Keep the same name in JSON properties for Elementor Widgets for better search/replace to translate new widgets (v13.1.1) (#1895)
  • Improve name in JSON properties for Gutenberg blocks for better search/replace to translate new blocks (v13.1.1) (#1896)
  • Set translated post status to "Same as origin post" (v13.1.1) (#1899)
  • In the Settings, moved the "Status to update" option from "Automatic Translation" to "General Configuration" (v13.1.1) (#1900)
  • Translate lists of strings also for cats/tags/media (v13.1.1) (#1901)

Fixed

  • Assign default value to configuration items added after the Settings was saved to DB (#1865)
  • Sync featured image only if supported for that CPT (#1866)

13.0.1

Fixed

  • Translation not working if Elementor not installed (#1830)

13.0.0

Breaking changes

  • Moved "Logs" from "Advanced Use" tab to new "Logs" tab in the Settings (#1819)

Added

  • Enable logs by severity in the Settings (#1812)
  • Logs count badge in the Logs menu link (#1821)
  • Support for Claude 4 (#1829)

Improvements

  • Do not print nested errors with the @applyField (#1823)
  • Throw an error whenever a mutation produces an error (#1824)
  • Throw a warning whenever there are no entries to translate (#1825)

Fixed

  • Recursion when translating media items (#1828)

12.2.2

Fixed

  • Fix translating Elementor content with statusToUpdate: draft and statusWhenTranslated: publish (#1809)

12.2.1

Improvements

  • Define meta to sync always (#1808)

Fixed

  • Synchronize the Elementor template type (#1808)

12.2.0

Added

  • Support translating strings in arrays and objects (#1805)

12.1.1

Fixed

  • Check if Elementor PRO returns null in $document->save() and transform to boolean (#1802)
  • Add the "Edit with Elementor" link when translating Elementor pages (#1803)

12.1.0

Added

  • Translate Elementor's html widget + Settings to enable/disable (#1790)
  • Do not translate strings that start with <!-- gato:translation:ignore --> (#1791)

Improvements

  • Encode multibyte Unicode characters when translating content (#1799)

Fixed

  • Exception when updating plugin manually (#1795)
  • Publishing Elementor page via Quick Links would not trigger translation (#1796)
  • Closing HTML tags escaped in ChatGPT's translated content (eg: <\/p> instead of </p>) (#1797)
  • Improved ChatGPT prompt to not alter emojis in translated text (#1798)
  • Language Switcher from plugin "Connect Polylang for Elementor" not showing up (#1081)

12.0.1

Fixed

  • Translating icon-list widget in Elementor wouldn't translate all items (#1789)

12.0.0

Improvements

  • Gutenberg logic in GraphQL query is not executed if Classic Editor is active (#1782)

Breaking changes

  • Hooks to inject custom Gutenberg blocks have been renamed
  • Sync meta key _wp_page_template by default (#1775)
  • Renamed field PolylangLanguage.isEnabled to isActive (#1744)
  • Renamed input filter arg Root.polylangLanguages(filter.enabled:) to active (#1744)

11.3.0

Added

  • Translate and sync meta (custom posts, tags, categories, media)
  • Added settings for Automatic Sync

Improvements

  • Tested up WordPress 6.8

Fixed

  • Translations for non-active languages must not throw an error (#1743)
  • Code not downgraded to PHP 7.4 (#1749)
  • Translation loading error message in WordPress 6.8

11.2.0

Added

  • Support translating content by Page Builders (#1729)

Improvements

  • Do not repeat code in the "translate-customposts" query (#1727)

Fixed

  • Install plugin setup data on first request after activating license (#1733)

11.1.2

Improvements

  • Use password type to activate extensions in Settings (#1725)

Fixed

  • Hook template_include can receive null values (error may hapen when WooCommerce is installed)

11.1.1

Fixed

  • If translation for the origin language is set to None (Disable Translation) in the Settings, don't exclude it (or it won't add that language in the Polylang associations) (#1724)

Improvements

  • Renamed settings from "DeepSeek Translation" to "DeepSeek" (#1723)

11.1.0

Added

  • New model: Claude Sonnet 3.7 (#1719)
  • New model: GPT-4.5 (research preview) (#1721)

Improvements

  • Use 128k context for Claude Sonnet 3.7, and make it the default model (#1720)
  • Improved log entry by not surrounding JSON with quotes (#1722)

11.0.4

Fixed

  • Do not remove the Screen Options tab on the post list page

11.0.0

Required actions

  • Important: Before updating this plugin, you need to deactivate your license, then re-upload the new plugin (renamed as Gato AI Translations for Polylang), and finally activate it again, using the same license key

Breaking changes

  • Renamed Gato Multilingual for Polylang to Gato AI Translations for Polylang (#1716)
  • Register the changelog URL for the plugin, to show the new version's changelog when updating it (#1707)

Added

  • Support new translation providers:
    • Mistral AI (#1708)
    • DeepSeek (#1714)
  • Log response from the LLM (#1710)

Improvements

  • Show the model's name (instead of their code) on the Settings (#1711)
  • Simplified queries to execute less logic (#1713)
  • Don't parse Gutenberg blocks when publishing a translated post (#1717)

Fixed

  • Issue when translations for tags/categories are missing (#1712)

10.5.0

Improvements

  • Do not enable translating media if not translatable in Polylang (#1705)
  • Enable selecting multiple statuses to trigger automatic translation for CPTs (#1706)

10.4.0

Added

  • Make API keys of password input type (#1693)
  • Support triggering automations on the future post status (#1694)
  • Support copying the date of the original post to its translations (#1697)
  • Added Claude (Anthropic) as translation provider (#1703)

Improvements

  • Rename the Custom Post Types subsection in Settings to General Configuration (#1698)
  • Make the GraphiQL client full-width (#1699)
  • Limit number of strings to translate in one request by string length (#1700)
  • If any string to translate produces an error, don't execute the translation (#1701)
  • Do not include encodedContentItems in ChatGPT prompt (#1702)
  • Improved log format (#1704)

10.3.0

Added

  • Enable/disable automatic translations by CPT/taxonomy/media (#1684)
  • Print warning in logs when missing translation entry for CPT/taxonomy/media (#1690)

Fixed

  • Override Polylang hooks only if Gato AI Translations for Polylang has active license (#1682)

10.2.0

  • Initial launch