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.

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 / 14.0.1

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 / 13.1.1

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