{"id":301990,"date":"2026-04-29T11:33:34","date_gmt":"2026-04-29T11:33:34","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/slytranslate-ai-translation-abilities\/"},"modified":"2026-05-19T14:53:03","modified_gmt":"2026-05-19T14:53:03","slug":"slytranslate","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/slytranslate\/","author":13775390,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.8.0","stable_tag":"1.8.0","tested":"7.0","requires":"6.9","requires_php":"8.1","requires_plugins":null,"header_name":"SlyTranslate - AI Translation Abilities","header_author":"Timon F\u00f6rst","header_description":"AI translation abilities for WordPress using native AI Connectors as a core feature, plus the AI Client and Abilities API for text and content translation.","assets_banners_color":"","last_updated":"2026-05-19 14:53:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/SlyBase\/wordpress-slytranslate\/","header_author_uri":"https:\/\/slybase.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":265,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq"],"tags":{"1.6.1":{"tag":"1.6.1","author":"TimonF","date":"2026-04-29 11:30:19"},"1.6.2":{"tag":"1.6.2","author":"TimonF","date":"2026-04-29 20:22:10"},"1.7.0":{"tag":"1.7.0","author":"TimonF","date":"2026-05-19 14:53:03"},"1.8.0":{"tag":"1.8.0","author":"TimonF","date":"2026-05-19 14:53:03"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3518350,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3518350,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3518350,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.6.1","1.6.2","1.7.0","1.8.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3518350,"resolution":"1","location":"assets","locale":"","width":3018,"height":1950},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3518350,"resolution":"2","location":"assets","locale":"","width":3018,"height":1950},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3518350,"resolution":"3","location":"assets","locale":"","width":3018,"height":1950},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3518350,"resolution":"4","location":"assets","locale":"","width":1336,"height":582},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3518350,"resolution":"5","location":"assets","locale":"","width":3018,"height":1950}},"screenshots":{"1":"Panel UI in page\/post","2":"Inline translation","3":"Gutenberg block translation","4":"Page\/post translation and bulk action","5":"Translation UI overview","6":"TranslatePress visual editor addon"}},"plugin_section":[],"plugin_tags":[256265,2353,10601,2333,261398],"plugin_category":[48],"plugin_contributors":[248563],"plugin_business_model":[],"class_list":["post-301990","plugin","type-plugin","status-publish","hentry","plugin_tags-abilities-api","plugin_tags-ai","plugin_tags-polylang","plugin_tags-translation","plugin_tags-wp-multilang","plugin_category-language-tools","plugin_contributors-timonf","plugin_committers-timonf"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/slytranslate\/assets\/icon.svg?rev=3518350","icon":"https:\/\/ps.w.org\/slytranslate\/assets\/icon.svg?rev=3518350","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/slytranslate\/assets\/screenshot-1.png?rev=3518350","caption":"Panel UI in page\/post"},{"src":"https:\/\/ps.w.org\/slytranslate\/assets\/screenshot-2.png?rev=3518350","caption":"Inline translation"},{"src":"https:\/\/ps.w.org\/slytranslate\/assets\/screenshot-3.png?rev=3518350","caption":"Gutenberg block translation"},{"src":"https:\/\/ps.w.org\/slytranslate\/assets\/screenshot-4.png?rev=3518350","caption":"Page\/post translation and bulk action"},{"src":"https:\/\/ps.w.org\/slytranslate\/assets\/screenshot-5.png?rev=3518350","caption":"Translation UI overview"}],"raw_content":"<!--section=description-->\n<p>SlyTranslate brings practical AI translation to WordPress. It is built for teams that need translation directly in editing workflows and also want the same workflows available through REST and MCP automation.<\/p>\n\n<p><strong>Why this plugin?<\/strong><\/p>\n\n<p>Use SlyTranslate when you need one consistent translation workflow for:<\/p>\n\n<ul>\n<li>page\/post translation in wp-admin<\/li>\n<li>TranslatePress visual-editor translation on the current page<\/li>\n<li>inline selected-text translation in Gutenberg<\/li>\n<li>Gutenberg block translation<\/li>\n<li>bulk translation from list-table actions<\/li>\n<li>SEO title\/description translation in the same process<\/li>\n<\/ul>\n\n<p><strong>Internal flow (short):<\/strong><\/p>\n\n<ul>\n<li>Uses native WordPress AI connectors through <code>wp_ai_client_prompt()<\/code>.<\/li>\n<li>Registers translation workflows as WordPress Abilities.<\/li>\n<li>Exposes abilities over REST (<code>\/wp-abilities\/v1\/<\/code>) and MCP discovery.<\/li>\n<li>Supports long\/structured content with chunking and output validation.<\/li>\n<li>Optional <code>direct_api_url<\/code> supports OpenAI-compatible endpoints for model-specific payload needs.<\/li>\n<li>In WP Multilang mode, translation state is detected from language-specific content so placeholder titles do not count as completed translations.<\/li>\n<li>List-table translation now includes an explicit overwrite option with a confirmation step.<\/li>\n<li>TranslatePress editor pages get a SlyTranslate sidebar panel that can translate the current singular page with model selection, overwrite, progress, and cancel controls.<\/li>\n<\/ul>\n\n<p><strong>Abilities:<\/strong><\/p>\n\n<pre><code>ai-translate\/get-languages:  List languages exposed by the active language plugin |\nai-translate\/get-translation-status: Show translation status for a content item, including `source_language` and `single_entry_mode` |\nai-translate\/set-post-language: Change the language assignment of an existing content item (only exposed when supported, e.g. Polylang) |\nai-translate\/get-untranslated: Find content still missing a target translation |\nai-translate\/translate-text: Translate arbitrary text |\nai-translate\/translate-blocks: Translate serialized Gutenberg blocks |\nai-translate\/translate-content: Create or update one translated post\/page\/CPT entry (call `get-translation-status` first; optional `source_language` + `overwrite`) |\nai-translate\/translate-content-bulk: Bulk-translate multiple entries (supports optional `source_language` and `overwrite`) |\nai-translate\/get-progress: Return live progress for a running translation |\nai-translate\/cancel-translation: Cancel a running translation |\nai-translate\/get-available-models: List models from configured connectors |\nai-translate\/save-additional-prompt: Save per-user additional instructions |\nai-translate\/configure: Read or update persistent plugin settings |\n<\/code><\/pre>\n\n<p><strong>MCP Call Flow:<\/strong><\/p>\n\n<ul>\n<li>Call <code>ai-translate\/get-languages<\/code> first when the correct target language code is unknown.<\/li>\n<li>Call <code>ai-translate\/get-translation-status<\/code> before <code>ai-translate\/translate-content<\/code> to inspect <code>source_language<\/code>, <code>single_entry_mode<\/code>, and whether the target language already exists.<\/li>\n<li>Omit <code>source_language<\/code> unless you intentionally pin a source variant. In single-entry adapters, reuse <code>get-translation-status.source_language<\/code> when you do pin it.<\/li>\n<li>Set <code>overwrite=true<\/code> only when status or prior context shows that the target language already exists.<\/li>\n<li>Expect <code>translated_post_id<\/code> to equal <code>source_post_id<\/code> in single-entry adapters such as WP Multilang, WPGlobus, and TranslatePress. In multi-post adapters such as Polylang, the translated item uses a sibling post ID.<\/li>\n<\/ul>\n\n<p><strong>Requirements:<\/strong><\/p>\n\n<ul>\n<li>WordPress 6.9+<\/li>\n<li>PHP 8.1+<\/li>\n<li>An AI connector configured in WordPress (Settings &gt; Connectors)<\/li>\n<li>A supported language plugin (Polylang, WP Multilang, WPGlobus, or TranslatePress Multilingual) for content-translation workflows across posts\/pages\/CPTs<\/li>\n<li>WordPress MCP Adapter if you want MCP discovery<\/li>\n<\/ul>\n\n<p><strong>Supported plugins:<\/strong><\/p>\n\n<ul>\n<li>Language plugin: Polylang, WP Multilang, WPGlobus, TranslatePress Multilingual<\/li>\n<li>SEO plugins: Genesis SEO, Yoast SEO, Rank Math, All in One SEO, The SEO Framework, SEOpress, Slim SEO<\/li>\n<\/ul>\n\n<p><strong>Supported model profiles:<\/strong><\/p>\n\n<p>Any LLM available through a WordPress AI connector works out of the box \u2014 no special configuration needed. The following model families additionally have dedicated built-in profiles that tune prompt style, chunking, and retry behavior for better results:<\/p>\n\n<ul>\n<li>TranslateGemma: dedicated runtime with <code>chat_template_kwargs<\/code> support through <code>direct_api_url<\/code><\/li>\n<li>TowerInstruct \/ Salamandra: bilingual framing, conservative chunking, stricter retry behavior<\/li>\n<li>Nvidia Nemotron: system-prompt-aware with reasoning-disable and provider-parameter forwarding<\/li>\n<li>Qwen 3.x \/ GLM-4.6v \/ Gemma 4 \/ Phi-4: thinking-aware profiles<\/li>\n<li>EuroLLM \/ Llama 3.1-8B \/ SauerkrautLM: conservative chunking tuned for European languages<\/li>\n<li>Ministral-3 \/ Ministral-8B: optimized for the Ministral model family<\/li>\n<\/ul>\n\n<!--section=installation-->\n<p><strong>Via WordPress Plugin Directory (recommended):<\/strong><\/p>\n\n<ol>\n<li>Ensure WordPress 6.9+ and PHP 8.1+ are running.<\/li>\n<li>In wp-admin, go to Plugins &gt; Add New and search for \"SlyTranslate\".<\/li>\n<li>Install and activate SlyTranslate.<\/li>\n<li>Install and configure an AI connector in Settings &gt; Connectors.<\/li>\n<li>Optional for content translation: install and activate Polylang, WP Multilang, WPGlobus, or TranslatePress Multilingual.<\/li>\n<li>Optional for local llama.cpp models: install AI Provider for llama.cpp.<\/li>\n<li>Optional for other OpenAI-compatible local\/self-hosted endpoints: install Ultimate AI Connector for Compatible Endpoints.<\/li>\n<li>Optional for MCP discovery: install and activate WordPress MCP Adapter.<\/li>\n<\/ol>\n\n<p><strong>Manual installation:<\/strong><\/p>\n\n<ol>\n<li>Ensure WordPress 6.9+ and PHP 8.1+ are running.<\/li>\n<li>Copy the <code>slytranslate<\/code> directory to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate SlyTranslate in wp-admin.<\/li>\n<li>Install and configure an AI connector in Settings &gt; Connectors.<\/li>\n<li>Optional for content translation: install and activate Polylang, WP Multilang, WPGlobus, or TranslatePress Multilingual.<\/li>\n<li>Optional for local llama.cpp models: install AI Provider for llama.cpp.<\/li>\n<li>Optional for other OpenAI-compatible local\/self-hosted endpoints: install Ultimate AI Connector for Compatible Endpoints.<\/li>\n<li>Optional for MCP discovery: install and activate WordPress MCP Adapter.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20without%20a%20language%20plugin%3F\"><h3>Does this work without a language plugin?<\/h3><\/dt>\n<dd><p>Yes, for text and block translation (<code>translate-text<\/code>, <code>translate-blocks<\/code>, inline selected-text workflow). Content translation workflows require a supported language plugin (Polylang, WP Multilang, WPGlobus, or TranslatePress Multilingual).<\/p><\/dd>\n<dt id=\"where%20are%20api%20keys%20configured%3F\"><h3>Where are API keys configured?<\/h3><\/dt>\n<dd><p>In WordPress Settings &gt; Connectors, not inside SlyTranslate.<\/p><\/dd>\n<dt id=\"can%20i%20use%20bulk%20translation%20from%20post%2Fpage%20lists%3F\"><h3>Can I use bulk translation from post\/page lists?<\/h3><\/dt>\n<dd><p>Yes. Use <code>translate-content-bulk<\/code> through abilities or the wp-admin list-table translation UI.<\/p><\/dd>\n<dt id=\"does%20this%20work%20inside%20the%20translatepress%20visual%20editor%3F\"><h3>Does this work inside the TranslatePress visual editor?<\/h3><\/dt>\n<dd><p>Yes. On singular pages opened with <code>?trp-edit-translation=true<\/code>, SlyTranslate adds a sidebar panel in the TranslatePress editor so you can translate the current page with the same model, overwrite, progress, and cancel controls used elsewhere in the plugin.<\/p><\/dd>\n<dt id=\"how%20does%20overwriting%20existing%20translations%20work%3F\"><h3>How does overwriting existing translations work?<\/h3><\/dt>\n<dd><p>In the list-table dialog, <strong>Overwrite existing translation<\/strong> is off by default. If a translation already exists, you must enable overwrite and confirm before the translation starts.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20language%20assignment%20of%20an%20existing%20post%20without%20running%20translation%3F\"><h3>Can I change the language assignment of an existing post without running translation?<\/h3><\/dt>\n<dd><p>Yes, when the active language plugin supports language mutation (currently Polylang). In that case <code>ai-translate\/set-post-language<\/code> is exposed and can be called with <code>post_id<\/code> and <code>target_language<\/code>. By default language conflicts fail with <code>language_conflict<\/code>; use <code>force<\/code> to opt in, and pass <code>relink=true<\/code> when translation relations should be rewritten. In WP Multilang mode this ability is not exposed.<\/p><\/dd>\n<dt id=\"how%20do%20i%20control%20prompts%20and%20style%3F\"><h3>How do I control prompts and style?<\/h3><\/dt>\n<dd><p>Use <code>ai-translate\/configure<\/code> for persistent defaults and <code>additional_prompt<\/code> on <code>translate-*<\/code> abilities for per-request instructions.<\/p><\/dd>\n<dt id=\"why%20can%20mcp%20execute-ability%20still%20fail%20after%20discovery%20looks%20correct%3F\"><h3>Why can MCP execute-ability still fail after discovery looks correct?<\/h3><\/dt>\n<dd><p>Some external WordPress MCP adapter wrappers expose a flatter <code>execute-ability<\/code> signature than they actually accept. If <code>discover-abilities<\/code> or <code>get-ability-info<\/code> shows the correct SlyTranslate schema but <code>execute-ability<\/code> still errors about a missing <code>parameters<\/code> wrapper, investigate the external adapter layer first. SlyTranslate controls the registered ability names, descriptions, and schemas, not that wrapper surface.<\/p><\/dd>\n<dt id=\"which%20model-specific%20profiles%20are%20supported%3F\"><h3>Which model-specific profiles are supported?<\/h3><\/dt>\n<dd><p>Any LLM from a WordPress AI connector works without configuration. Built-in dedicated profiles exist for: TranslateGemma, TowerInstruct, Salamandra, Nvidia Nemotron, Qwen 3.x, GLM-4.6v, Gemma 4, Phi-4, EuroLLM, Llama 3.1-8B, SauerkrautLM, Ministral-3, and Ministral-8B. Additional profiles can be registered via the <code>slytranslate_model_profiles<\/code> filter.<\/p><\/dd>\n\n<\/dl>","raw_excerpt":"AI translation abilities for WordPress using native AI Connectors, the AI Client and Abilities API for automated text and content translation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/301990","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=301990"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/timonf"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=301990"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=301990"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=301990"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=301990"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=301990"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=301990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}