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()
, andGato::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 canedit_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, notdescription
(#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
aspublish
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
andstatusWhenTranslated: 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
toisActive
(#1744) - Renamed input filter arg
Root.polylangLanguages(filter.enabled:)
toactive
(#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 receivenull
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