{"id":350209,"date":"2026-08-31T18:46:48","date_gmt":"2026-08-31T18:46:48","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/translate-master\/"},"modified":"2026-10-12T16:21:04","modified_gmt":"2026-10-12T16:21:04","slug":"incode-translate-master","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/incode-translate-master\/","author":23087910,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.10.9","stable_tag":"2.10.9","tested":"7.1.3","requires":"6.1","requires_php":"8.0","requires_plugins":null,"header_name":"Incode Translate Master","header_author":"Adri\u00e1n Alcal\u00e1","header_description":"Traducci\u00f3n visual de tu web: editor en el frontend, traducci\u00f3n por lotes con motor gratuito o tu clave de Gemini, DeepL o Google, URL e hreflang por idioma y compatibilidad con Elementor y WooCommerce.","assets_banners_color":"726e8e","last_updated":"2026-10-12 16:21:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wptranslate.es","header_author_uri":"https:\/\/adrianalcala.es","rating":5,"author_block_rating":0,"active_installs":0,"downloads":892,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.10.0":{"tag":"2.10.0","author":"adrianincode","date":"2026-09-18 13:16:25","revision":3702040},"2.10.1":{"tag":"2.10.1","author":"adrianincode","date":"2026-09-20 14:17:05","revision":3704328},"2.10.2":{"tag":"2.10.2","author":"adrianincode","date":"2026-09-23 15:33:23","revision":3709596},"2.10.3":{"tag":"2.10.3","author":"adrianincode","date":"2026-09-23 16:15:33","revision":3709678},"2.10.4":{"tag":"2.10.4","author":"adrianincode","date":"2026-10-01 14:04:57","revision":3723287},"2.10.5":{"tag":"2.10.5","author":"adrianincode","date":"2026-10-04 18:19:43","revision":3727697},"2.10.6":{"tag":"2.10.6","author":"adrianincode","date":"2026-10-05 06:52:50","revision":3728237},"2.10.7":{"tag":"2.10.7","author":"adrianincode","date":"2026-10-06 09:02:49","revision":3730343},"2.10.8":{"tag":"2.10.8","author":"adrianincode","date":"2026-10-06 10:06:37","revision":3730493},"2.10.9":{"tag":"2.10.9","author":"adrianincode","date":"2026-10-12 16:21:04","revision":3742122},"2.7.6":{"tag":"2.7.6","author":"adrianincode","date":"2026-09-02 09:33:08","revision":3677620},"2.7.7":{"tag":"2.7.7","author":"adrianincode","date":"2026-09-02 10:54:59","revision":3677806},"2.7.8":{"tag":"2.7.8","author":"adrianincode","date":"2026-09-02 21:00:55","revision":3678666},"2.7.9":{"tag":"2.7.9","author":"adrianincode","date":"2026-09-03 09:30:37","revision":3679446},"2.8.0":{"tag":"2.8.0","author":"adrianincode","date":"2026-09-03 12:11:15","revision":3679701},"2.8.1":{"tag":"2.8.1","author":"adrianincode","date":"2026-09-03 17:15:34","revision":3680137},"2.9.1":{"tag":"2.9.1","author":"adrianincode","date":"2026-09-04 13:12:07","revision":3681263},"2.9.2":{"tag":"2.9.2","author":"adrianincode","date":"2026-09-05 20:08:59","revision":3682788},"2.9.3":{"tag":"2.9.3","author":"adrianincode","date":"2026-09-09 13:40:34","revision":3688388},"2.9.5":{"tag":"2.9.5","author":"adrianincode","date":"2026-09-13 17:06:16","revision":3693979}},"upgrade_notice":{"2.10.9":"<p>Recommended for everyone. Fixes pages whose address starts with a language code (404 or redirect to the original language on their translated URL) and adds Support &amp; feedback inside the plugin. Note: hreflang codes change from &quot;en-US&quot; to &quot;en&quot; by default.<\/p>","2.10.8":"<p>Recommended for everyone on 2.10.7: it fixes headings and paragraphs that 2.10.7 left untranslated on large pages.<\/p>","2.10.7":"<p>Recommended for Elementor sites. Paragraphs and headings with a link or bold text in the middle are now translated as one sentence instead of coming out half translated.<\/p>","2.10.6":"<p>Recommended. The setup wizard now opens reliably after activation and explains how to add the language switcher, page titles are translated without an SEO plugin, and scans no longer store internal data as text to translate.<\/p>","2.10.5":"<p>Recommended. Fixes a critical error when adding the Language Switcher widget, and redirects addresses with two language prefixes (\/de\/en\/\u2026) with a 301 so they stop being indexed as separate pages.<\/p>","2.10.4":"<p>Optional. Nothing changes in the free plugin; this release only keeps the version in step with the paid edition.<\/p>","2.10.3":"<p>Recommended. The plugin was writing a cookie on every visit, which stopped page caching from working on the whole site. Update if your hosting has a full-page cache (Cloudways, Varnish, SiteGround, Kinsta and similar).<\/p>","2.10.2":"<p>Optional. Fixes the &quot;Write a review&quot; button, which was opening a page that does not exist. Nothing changes in how the plugin translates.<\/p>","2.10.1":"<p>Recommended if you translate with Gemini: testing an API key was checking the saved model instead of the one you had just picked, so every model looked broken in the same way. Also lets you choose the language switcher style from Settings.<\/p>","2.10.0":"<p>Optional. Adds a Support screen with built-in help and a form to report problems. Nothing is sent anywhere unless you fill that form in and press Send.<\/p>","2.9.5":"<p>Optional. Nothing changes in how the plugin translates. The review request now waits until the plugin has actually been working on your site for a while, and can be postponed.<\/p>","2.9.3":"<p>Recommended for every site, and especially for shops. Any visitor who had opened a page in a second language was losing the query string on links without a language prefix, so add-to-cart links, coupons and site search did nothing.<\/p>","2.9.2":"<p>Optional. Adds nothing to how the plugin translates: after your first translation it asks once, and only once, whether you want to leave a review.<\/p>","2.9.1":"<p>Recommended if you have ever saved an API key and seen it come back as &quot;Not configured&quot;. The key was usually saved; the screen was painting a stale state and hiding the error behind it.<\/p>","2.8.1":"<p>Cosmetic release: the Pro notice now links straight to the licence it offers. Nothing changes in how the plugin translates.<\/p>","2.8.0":"<p>Recommended for everyone. Your translated pages are announced to Google again \u2014 most of them were not, so they were never indexed. Also: links and bold text no longer disappear from translated paragraphs, pages whose address contains &quot;sitemap&quot; are translated again, and auto-translate on save now works in the block editor.<\/p>","2.7.9":"<p>Fixes the Pro notice, which was invisible on the plugin&#039;s own screens, and shows the launch offer while it lasts. Nothing changes in how the plugin translates.<\/p>","2.7.8":"<p>Housekeeping release. No change to how the plugin translates; it only adds a dismissible notice about the Pro version.<\/p>","2.7.7":"<p>The interface is now translated into Spanish, French, German, Italian and Brazilian Portuguese, and follows your WordPress language.<\/p>","2.6.0":"<p>Adds auto-translate on save and Yoast SEO title translation. Recommended for everyone.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3717918,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3717918,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3723287,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3723287,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.10.0","2.10.1","2.10.2","2.10.3","2.10.4","2.10.5","2.10.6","2.10.7","2.10.8","2.10.9","2.7.6","2.7.7","2.7.8","2.7.9","2.8.0","2.8.1","2.9.1","2.9.2","2.9.3","2.9.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3679446,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3679446,"resolution":"10","location":"assets","locale":"","width":1280,"height":800},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3679446,"resolution":"11","location":"assets","locale":"","width":1280,"height":800},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3679446,"resolution":"12","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3679446,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3679446,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3679446,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3679446,"resolution":"5","location":"assets","locale":"","width":1280,"height":800},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3679446,"resolution":"6","location":"assets","locale":"","width":1280,"height":800},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3679446,"resolution":"7","location":"assets","locale":"","width":1280,"height":800},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3679446,"resolution":"8","location":"assets","locale":"","width":1280,"height":468},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3679446,"resolution":"9","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Visual editor: click any text on your own page and translate it while looking at the real design.","2":"Dashboard: total strings, translated, pending and progress by language at a glance.","3":"Languages: your source language and the translated one, each with its own URL prefix.","4":"77 languages to choose from, with a live search.","5":"Translation manager: original and translation side by side, with search and one-click auto-translation.","6":"String manager: every string found on the site, with its context, its source and the post it came from.","7":"Settings: translation providers. Free (Google) needs no API key; Gemini, DeepL and Google Cloud use your own.","8":"Auto-translate on save: publish or update a page, even from Elementor, and the translation runs in the background.","9":"Language switcher: flag and name, flags only or language code, with your own colours and corner radius.","10":"Translate and replace: rewrites the real content in the database to migrate a whole site to another language.","11":"The site in its original language, at the root URL.","12":"The same page in English at \/en\/ - same design, translated content."}},"plugin_section":[],"plugin_tags":[6370,2993,1734,95,2333],"plugin_category":[48],"plugin_contributors":[278539],"plugin_business_model":[],"class_list":["post-350209","plugin","type-plugin","status-publish","hentry","plugin_tags-bilingual","plugin_tags-hreflang","plugin_tags-localization","plugin_tags-translate","plugin_tags-translation","plugin_category-language-tools","plugin_contributors-adrianincode","plugin_committers-adrianincode"],"banners":{"banner":"https:\/\/ps.w.org\/incode-translate-master\/assets\/banner-772x250.png?rev=3723287","banner_2x":"https:\/\/ps.w.org\/incode-translate-master\/assets\/banner-1544x500.png?rev=3723287","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/incode-translate-master\/assets\/icon-128x128.gif?rev=3717918","icon_2x":"https:\/\/ps.w.org\/incode-translate-master\/assets\/icon-256x256.gif?rev=3717918","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-1.png?rev=3679446","caption":"Visual editor: click any text on your own page and translate it while looking at the real design."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-2.png?rev=3679446","caption":"Dashboard: total strings, translated, pending and progress by language at a glance."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-3.png?rev=3679446","caption":"Languages: your source language and the translated one, each with its own URL prefix."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-4.png?rev=3679446","caption":"77 languages to choose from, with a live search."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-5.png?rev=3679446","caption":"Translation manager: original and translation side by side, with search and one-click auto-translation."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-6.png?rev=3679446","caption":"String manager: every string found on the site, with its context, its source and the post it came from."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-7.png?rev=3679446","caption":"Settings: translation providers. Free (Google) needs no API key; Gemini, DeepL and Google Cloud use your own."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-8.png?rev=3679446","caption":"Auto-translate on save: publish or update a page, even from Elementor, and the translation runs in the background."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-9.png?rev=3679446","caption":"Language switcher: flag and name, flags only or language code, with your own colours and corner radius."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-10.png?rev=3679446","caption":"Translate and replace: rewrites the real content in the database to migrate a whole site to another language."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-11.png?rev=3679446","caption":"The site in its original language, at the root URL."},{"src":"https:\/\/ps.w.org\/incode-translate-master\/assets\/screenshot-12.png?rev=3679446","caption":"The same page in English at \/en\/ - same design, translated content."}],"raw_content":"<!--section=description-->\n<p>https:\/\/www.youtube.com\/watch?v=k63m2aO4ka0<\/p>\n\n<p><strong>Incode Translate Master makes your site bilingual from the front end \u2014 no account, no license key, no sign-up.<\/strong> Install it, pick your translation language, and start translating your real pages by clicking on the text you want to change, while you look at the actual design. A translation never breaks a button or a heading again.<\/p>\n\n<p>A built-in <strong>keyless engine translates out of the box<\/strong>, so you can go from a single-language site to a published second language in minutes. Prefer your own provider? Plug in a DeepL, Google or Gemini key whenever you like and you pay the provider directly.<\/p>\n\n<h4>\u2728 Why you'll like it<\/h4>\n\n<ul>\n<li>\ud83d\uddb1\ufe0f <strong>Translate what you see.<\/strong> Click text on your own page and translate it in context \u2014 headings, buttons, menus, image captions.<\/li>\n<li>\ud83d\udd11 <strong>Works with zero setup.<\/strong> A free keyless engine translates immediately. No API key, no credit card, no account.<\/li>\n<li>\ud83d\ude80 <strong>Not a trial.<\/strong> Everything described here is fully functional and never expires. Nothing is disabled waiting for a payment.<\/li>\n<li>\ud83d\udd0e <strong>SEO-ready.<\/strong> Translations publish on their own URL prefix with reciprocal hreflang tags and a self-referencing canonical, so Google indexes them.<\/li>\n<li>\u26a1 <strong>Fast.<\/strong> Translations live in your database and are served as plain HTML \u2014 no API call while a visitor loads the page.<\/li>\n<\/ul>\n\n<h4>\ud83e\udde9 Everything it does<\/h4>\n\n<ul>\n<li>\ud83d\udd8a\ufe0f <strong>Visual front-end editor.<\/strong> Open your page, click any string, and edit the machine translation in the side panel while seeing the real layout.<\/li>\n<li>\ud83d\udce6 <strong>Batch translation.<\/strong> Send all pending strings with one click. The queue runs in batches, resumes where it stopped and never translates the same string twice.<\/li>\n<li>\ud83d\udd2c <strong>Full-site scan.<\/strong> Extract every translatable string from your posts and pages at once and manage them from one screen.<\/li>\n<li>\ud83d\udcbe <strong>Auto-translate on save.<\/strong> New and changed texts of a post can be translated automatically in the background when you save, so the translation never lags behind the original.<\/li>\n<li>\ud83c\udff7\ufe0f <strong>SEO title translation.<\/strong> With Yoast SEO installed, each page's meta title is translated so your translated pages show a title in their own language on search results.<\/li>\n<li>\ud83c\udf10 <strong>Translation engines.<\/strong> Free keyless engine, or bring your own key for Google Translate, DeepL or Gemini. Switch engines any time without losing what's already translated.<\/li>\n<li>\ud83d\udd00 <strong>Language switcher.<\/strong> Dropdown, list, flags or inline \u2014 as a shortcode, a theme widget, a menu item or an Elementor widget.<\/li>\n<li>\ud83e\udde0 <strong>Translation memory.<\/strong> Every translated string is stored in your own database. If the same sentence appears in two hundred pages, the engine is called once.<\/li>\n<li>\ud83e\uddf1 <strong>Works with your stack.<\/strong> Any theme, Elementor and Elementor Pro, WooCommerce product and page text, and the usual caching plugins.<\/li>\n<\/ul>\n\n<h4>\ud83d\udc8e There is also a Pro version<\/h4>\n\n<p>Everything above is free, permanent and complete \u2014 this list is here so you know what exists, not because anything is missing. <a href=\"https:\/\/wptranslate.es\/precios\/\">Incode Translate Master Pro<\/a> adds more languages at the same time, translated URL slugs, automatic language detection for first-time visitors, a multilingual XML sitemap, Rank Math SEO support and translation of the emails WordPress and WooCommerce send.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can send your content to third-party machine-translation services to translate it. A request is made only when you actively translate a string, run a batch translation or save a post with auto-translate enabled, and it contains the text to translate plus the target language code. No translation service is contacted while simply viewing already-translated pages.<\/p>\n\n<p>You choose the engine in Settings \u2192 Translation provider. Depending on your choice, the plugin connects to:<\/p>\n\n<ul>\n<li><strong>Free engine (default, no API key).<\/strong> Uses Google's public translation endpoint and, as a fallback, MyMemory. Sends the text to translate and the target language.\n\n<ul>\n<li>Google Translate \u2014 Terms: https:\/\/policies.google.com\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li>MyMemory (Translated s.r.l.) \u2014 Terms: https:\/\/mymemory.translated.net\/terms-and-conditions \u2014 Privacy: https:\/\/translated.com\/confidentiality<\/li>\n<\/ul><\/li>\n<li><strong>Google Cloud Translation API<\/strong> (optional, your own API key) \u2014 Terms: https:\/\/cloud.google.com\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li><strong>DeepL API<\/strong> (optional, your own API key) \u2014 Terms: https:\/\/www.deepl.com\/pro-license \u2014 Privacy: https:\/\/www.deepl.com\/privacy<\/li>\n<li><strong>Google Gemini API<\/strong> (optional, your own API key) \u2014 Terms: https:\/\/ai.google.dev\/gemini-api\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<p><strong>Bug reports (optional).<\/strong> The plugin's Support screen has a form to report a problem. Only if you fill it in and press Send, the plugin sends what you wrote \u2014 plus the technical report shown to you on that same screen \u2014 to the plugin author's server at wptranslate.es, so the problem can be investigated and answered. The technical report lists your WordPress, PHP and MySQL versions, your theme, your active plugins, the plugin's own configuration and the most recent error lines from its translation log. It never includes API keys, passwords, or the content of your pages, and it is displayed in full, exactly as it will be sent, before you send it. Nothing is sent automatically or in the background.<\/p>\n\n<ul>\n<li>wptranslate.es (Adrian Alcala) \u2014 Terms: https:\/\/wptranslate.es\/terminos-y-condiciones\/ \u2014 Privacy: https:\/\/wptranslate.es\/politica-de-privacidad\/<\/li>\n<\/ul>\n\n<p>Only the engine you select is contacted. If you never trigger a translation and never send a bug report, no external service receives any data.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP from <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Incode Translate Master \u2192 Languages<\/strong> and choose your translation language.<\/li>\n<li>Open any page of your site and use the toolbar link to start translating, or run a scan and translate in batch from <strong>Incode Translate Master \u2192 Strings<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20plugin%20a%20trial%20version%3F\"><h3>Is this plugin a trial version?<\/h3><\/dt>\n<dd><p>No. Everything described here works with no key, no account and no expiry date. Nothing is time-limited or disabled waiting for a payment.<\/p><\/dd>\n<dt id=\"is%20there%20a%20paid%20version%3F\"><h3>Is there a paid version?<\/h3><\/dt>\n<dd><p>Yes, and it changes nothing about this one. The free plugin is complete and permanent: original language plus one translation language, with every feature listed above. Pro adds more simultaneous languages, translated slugs, visitor language detection, a multilingual sitemap, Rank Math support and email translation. You can see it at <a href=\"https:\/\/wptranslate.es\/precios\/\">wptranslate.es<\/a>.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>No. A built-in keyless engine translates with no configuration. If you prefer, you can add your own key for Google Translate, DeepL or Gemini in Settings, so the translation cost is billed to you directly by the provider.<\/p><\/dd>\n<dt id=\"what%20languages%20does%20my%20site%20end%20up%20with%3F\"><h3>What languages does my site end up with?<\/h3><\/dt>\n<dd><p>Two: the original language your content is written in, plus the translation language you choose. The translation is published under its own URL prefix, and you can change the translation language whenever you want from the Languages screen.<\/p><\/dd>\n<dt id=\"will%20google%20index%20the%20translated%20versions%3F\"><h3>Will Google index the translated versions?<\/h3><\/dt>\n<dd><p>Yes. The translated version is published under its own URL prefix, with reciprocal hreflang tags and a self-referencing canonical.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20the%20site%20down%3F\"><h3>Does it slow the site down?<\/h3><\/dt>\n<dd><p>No. Translations are stored in your database and served as regular HTML. There is no API call while a visitor loads the page.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%20and%20woocommerce%3F\"><h3>Does it work with Elementor and WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Elementor designs are read from their own JSON so no string is missed, including Elementor Pro widgets. For WooCommerce it covers product and page texts.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20translations%20if%20i%20remove%20the%20plugin%3F\"><h3>What happens to my translations if I remove the plugin?<\/h3><\/dt>\n<dd><p>They are yours. You can export them before uninstalling, and the uninstall routine asks whether to keep or delete the plugin tables.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.10.9<\/h4>\n\n<ul>\n<li>Fixed: a page or post whose address starts with the same letters as a language code -- \"entrega\" or \"enterprise\" under \/en\/, \"descarga\" or \"design\" under \/de\/ -- gave a 404 or was redirected to the original language on its translated URL. Those pages are served in their language again.<\/li>\n<li>Fixed: on pages larger than 512 KB, image alt text, titles and aria labels stayed in the original language, and text after a stray \"&lt;\" inside a script could be left untranslated. The whole page is translated now.<\/li>\n<li>Changed: language URLs now redirect (301) to their one correct address: the trailing slash is added when your permalinks use it, and a post reached through a wrong or made-up path is sent to its real permalink in that language.<\/li>\n<li>Fixed: a translated page that is not available in a language now points its canonical link at the original, so search engines do not index an untranslated copy under \/xx\/.<\/li>\n<li>Changed: hreflang codes now use only the language (\"en\", \"de\") instead of language and country (\"en-US\", \"de-DE\"), unless two variants of the same language are active. Both forms are valid; search engines pick up the change on their own.<\/li>\n<li>New: a \"Support &amp; feedback\" entry in the plugin menu and in the plugins list. Report a problem, send an idea or ask a question from inside WordPress; you choose what kind of message it is, and it reaches the WP Translate team directly.<\/li>\n<li>New: when you deactivate the plugin you can tell us why, in one click. It is optional, \"Skip and deactivate\" sends nothing, and it never includes technical data.<\/li>\n<li>Fixed: the \"Support forum\" button opened a WordPress.org page that does not exist.<\/li>\n<li>Fixed: the plugin could lower PHP's memory limit to 256 MB on sites that already had more.<\/li>\n<li>Fixed: \"Delete absolutely everything\" left API keys, licence data, a database table, cached data and a scheduled task behind.<\/li>\n<li>Fixed: \"Translate and replace\" deleted the post's revisions; it now only removes autosaves.<\/li>\n<li>Fixed: the site menu was translated inside the visual editor, so editing it showed translated labels.<\/li>\n<li>Fixed: the dashboard language could load too late for some of the plugin's own texts.<\/li>\n<\/ul>\n\n<p><h4>2.10.8<\/h4><\/p>\n\n<ul>\n<li>Fixed: 2.10.7 left some headings and paragraphs in the original language on pages larger than 512 KB -- the ones with formatting in the middle, such as a highlighted word, a line break, a small icon or a struck-out price -- although 2.10.6 translated them. They are translated again, and now keep that formatting.<\/li>\n<li>Fixed: since 2.10.7, a heading or paragraph with highlighted words could be translated fragment by fragment instead of as one sentence, which reads worse, whenever its fragments also had translations of their own. The whole-sentence translation is used again, also when the highlight is nested (bold inside italics). Only formatting that is more than a highlight -- a line break, an icon, a struck-out price -- makes the plugin translate fragment by fragment, so that it is not lost.<\/li>\n<li>Fixed: a heading or paragraph wrapped as a whole in a link or a styled span -- for example a heading that opens a popup -- lost that wrapper when it was translated, and since 2.10.7 it could stay in the original language or be translated in fragments. The whole translation now goes inside it.<\/li>\n<\/ul>\n\n<p><h4>2.10.7<\/h4><\/p>\n\n<ul>\n<li>Fixed: with Elementor, a paragraph or heading with a link or bold text in the middle came out half translated -- the link in the visitor's language and the rest in the original -- or was not translated at all, even when the whole sentence had its translation. Elementor widgets now translate the whole sentence first and put the link and the formatting back in place, as the rest of the page already did.<\/li>\n<li>Fixed: a link with something inside it, such as bold text or an image, could disappear from a translated paragraph when its text could not be placed in the translation. The link is now always kept.<\/li>\n<li>Fixed: a paragraph split into lines with line breaks lost the breaks when it was translated as a whole. When each line has its own translation, the lines are now translated one by one and the breaks stay.<\/li>\n<li>Fixed: any element with a CSS class containing \"wptm-\" was never translated, not only the plugin's own language switcher. Only the switcher is skipped now.<\/li>\n<\/ul>\n\n<p><h4>2.10.6<\/h4><\/p>\n\n<ul>\n<li>Fixed: the setup wizard did not open after activating the plugin if a background request reached WordPress first. On a fresh install WordPress itself sends one right after activation; on other sites it can be the Heartbeat or another plugin's AJAX call. That request used up the one-time redirect, nobody saw it, and the Plugins screen loaded without the wizard -- which also left the site's original language set to English. Only an ordinary admin page uses the redirect now.<\/li>\n<li>New: the last step of the setup wizard explains how to put the language switcher on the site, with direct links, and only lists the ways your theme supports: the Site Editor on block themes, Menus or Widgets on classic themes, the Elementor widget, and the shortcode anywhere. The plugin never adds a switcher by itself, and without one visitors have no way to reach the translation.<\/li>\n<li>Fixed: without an SEO plugin, translated pages kept the page title in the original language -- the title shown in the browser tab and in search results. The page title, the site name and the tagline are now translated as well.<\/li>\n<li>Fixed: scanning a page stored WordPress, WooCommerce and Elementor internal data as text to translate -- the page template name (\"default\"), image gallery IDs, version numbers -- so each of them waited in every language and translating everything spent engine quota on them. Private fields are now skipped unless they hold visible text (the WooCommerce purchase note and button text, and image alt text), and values made only of numbers are skipped too. Developers can add other fields with the wptm_translatable_private_meta_keys filter. Strings stored by earlier scans are left as they are.<\/li>\n<li>Fixed: a PHP warning, \"Object of class WP_Term could not be converted to int\", for every category or tag link printed on a translated page. On sites with WP_DEBUG_DISPLAY on it showed on screen.<\/li>\n<li>Fixed: the setup wizard named languages in English -- \"your site can now be published in English\" on a Spanish dashboard. Language names now follow the language of your dashboard, and the language lists are sorted in that language.<\/li>\n<li>Fixed: the message after translating said \"Done in 1 phases\". It now gives the number of strings translated, with the right singular or plural.<\/li>\n<li>Fixed: the setup wizard's browser tab had no title, and PHP logged \"strip_tags(): Passing null\" on that page.<\/li>\n<li>Fixed: a console error on the setup wizard page, because the dashboard script was loaded there too.<\/li>\n<li>Fixed: in WordPress Playground, which runs PHP the same way as the command line, language URLs and translation were switched off. They are now only skipped for real WP-CLI commands.<\/li>\n<li>Fixed: the \"Auto-translate on save\" card said it also translates the page slug. Translated slugs are part of the paid edition, so the free plugin no longer says so.<\/li>\n<\/ul>\n\n<p><h4>2.10.5<\/h4><\/p>\n\n<ul>\n<li>Fixed: adding the classic \"Language Switcher \u2014 Incode Translate Master\" widget -- under Appearance &gt; Widgets, in the Customizer or in Elementor -- stopped the page with a critical error. A widget that had not been saved with a display style yet looked up the default style through a method the widget does not have. Widgets already saved with a style kept working. The error came in with 2.10.1.<\/li>\n<li>Fixed: an address with two language prefixes in a row, such as \/de\/en\/blog\/post\/, was served as an ordinary page with a 200 status and a canonical pointing at itself, so search engines indexed it as one more page. Its hreflang links then announced further addresses of the same kind (\/en\/en\/\u2026, \/fr\/en\/\u2026), so every one of them led to more. These addresses now redirect permanently (301) to the same page with a single prefix -- the first one, which is the language the page was being served in -- keeping the query string. Form submissions and WooCommerce AJAX calls are never redirected.<\/li>\n<\/ul>\n\n<p><h4>2.10.4<\/h4><\/p>\n\n<ul>\n<li>Housekeeping: nothing changes in the free plugin. This release only keeps the version in step with the paid edition, which got a follow-up to the 2.10.3 caching fix covering automatic browser language detection -- a feature the free plugin does not include. If you are already on 2.10.3 there is nothing you need to do.<\/li>\n<\/ul>\n\n<p><h4>2.10.3<\/h4><\/p>\n\n<ul>\n<li>Fixed: the plugin wrote its language cookie on every single page view, including visits that were served in the site's own default language. Any response that carries a cookie is treated as personalised by a full-page cache -- Varnish on Cloudways, and the equivalent on most managed hosting -- so the page was never stored and every visit was rebuilt by PHP. The chosen language is now remembered from the browser, and only when the visitor is not on the default language, so the site caches normally again.<\/li>\n<li>Fixed: that same cookie also switched off automatic browser language detection after the first page. The cookie looked like a language the visitor had picked on purpose, so from the second page onwards the detection stepped aside and left the site in the default language.<\/li>\n<\/ul>\n\n<p><h4>2.10.2<\/h4><\/p>\n\n<ul>\n<li>Fixed: the \"Write a review\" button in the review request opened a WordPress.org address that does not exist, so it landed on a 404 instead of the review form. It now links to the plugin's listing on WordPress.org, where the review is written.<\/li>\n<\/ul>\n\n<p><h4>2.10.1<\/h4><\/p>\n\n<ul>\n<li>Fixed: testing a Gemini API key always tested the model that was already saved, not the one selected on screen. Picking a different model and pressing Test re-tested the previous one, so every model failed with the very same error.<\/li>\n<li>Fixed: the Gemini model list offered five models that no longer exist, and Google answered 404 for every one of them. The list is now asked directly to Google with your own API key, so you only see models that key can really use.<\/li>\n<li>Fixed: a 404 from Google was reported as \"not available in your region\" \u2014 a cause that was never checked \u2014 and it suggested a model that no longer exists. Google's own message is now shown exactly as it comes.<\/li>\n<li>Added: the language switcher style (dropdown, list, flags, inline) can now be chosen from the Settings tab, with a live preview that uses the real front-end markup and CSS before you save.<\/li>\n<\/ul>\n\n<p><h4>2.10.0<\/h4><\/p>\n\n<ul>\n<li>Added: a Support screen inside the plugin. It gathers the answers to the questions that come up most \u2014 adding a language, what the translation states mean, why a translated string can still show the old text \u2014 and it has a form to report a problem directly to the plugin author.<\/li>\n<li>Added: the report form attaches a technical summary of your installation (versions, theme, active plugins, plugin settings and recent errors from the log). It is shown in full before sending, it never contains API keys or page content, and it is only ever sent when you press the button.<\/li>\n<li>Fixed: the link in the plugin's own notice landed on the shop page without putting anything in the basket, because the shop moved to one product with three licence options and the link still pointed at the old one.<\/li>\n<\/ul>\n\n<p><h4>2.9.5<\/h4><\/p>\n\n<ul>\n<li>Changed: the review request now waits until the plugin has been translating your site for a week and has saved at least twenty translations, instead of showing up right after the very first one. It can also be postponed for two weeks if you would rather decide later, and it is now translated into the five languages bundled with the plugin.<\/li>\n<\/ul>\n\n<p><h4>2.9.3<\/h4><\/p>\n\n<ul>\n<li>Fixed: links with a query string lost it for any visitor who had already opened a page in another language. Site search, add-to-cart links and WooCommerce AJAX calls were all redirected to that language's home page with the query string dropped. The redirect now carries the query string through.<\/li>\n<li>Fixed: a form posted to a URL without a language prefix was redirected too, and a 302 turns a POST into a GET, so the submission was lost. Those requests are no longer redirected. The same applies to WooCommerce AJAX endpoints, files and \/.well-known\/.<\/li>\n<li>Fixed: the language switcher no longer loads its stylesheet and script inside the Elementor editor preview, where they could push the editor into Safe Mode.<\/li>\n<\/ul>\n\n<p><h4>2.9.2<\/h4><\/p>\n\n<ul>\n<li>New: after the plugin translates something for the first time, it asks once whether you feel like leaving a review on WordPress.org. It appears on the dashboard, the plugins list and the plugin's own screens, it is dismissible, and once you answer \u2014 either way \u2014 it never comes back. It is never shown at the same time as any other notice from the plugin.<\/li>\n<\/ul>\n\n<p><h4>2.9.1<\/h4><\/p>\n\n<ul>\n<li>New (optional): the primary language can now be served under its own URL prefix, exactly like the secondary languages \u2014 for example the Spanish home at \/es\/ instead of \/. The canonical, the hreflang x-default, the per-language sitemap and a 301 that consolidates the old unprefixed addresses all follow the prefixed URL, so a site migrating from another multilingual plugin that already publishes its primary language on a prefixed URL keeps the exact same structure and its existing indexing. Off by default: sites that serve the primary language at the root are completely unaffected.<\/li>\n<li>Fixed: the SEO integration could crash the Elementor editor. Yoast passes null through its title, description, canonical and OG-URL filters when there is no queried object \u2014 a Theme Builder template, the editor preview \u2014 and a non-nullable type hint turned that into a fatal error on PHP 8.<\/li>\n<li>Fixed: saving an API key could show \"Settings saved!\" and, right underneath, \"Not configured\" \u2014 with the key actually saved. The screen re-read the settings in a second request and, when that request failed, the failure was discarded silently and the old state was painted back.<\/li>\n<li>Fixed: the plugin never checked that its settings had really reached the database. It now re-reads them after writing and reports an honest error if they did not.<\/li>\n<li>Fixed: opening Settings fired seven requests at once. On shared hosting some of them lost their turn and the screen was painted half empty. It is now a single request.<\/li>\n<li>Changed: a failure to read the settings is now shown on screen instead of being mistaken for \"nothing is configured\".<\/li>\n<li>Changed: API settings are no longer loaded on every visit to the public site.<\/li>\n<\/ul>\n\n<p><h4>2.8.1<\/h4><\/p>\n\n<ul>\n<li>Changed: the Pro notice now takes you straight to the licence it is offering, with it ready in the basket, instead of to a page of plans. Nothing changes in how the plugin translates.<\/li>\n<\/ul>\n\n<p><h4>2.8.0<\/h4><\/p>\n\n<ul>\n<li>Fixed: on most pages the plugin was not telling Google that a translated version existed, so those translations were left out of the search index. The check that decided it counted only the strings currently filed under that page, and that filing moves on its own as the site is scanned.<\/li>\n<li>Fixed: \"page not found\" screens and search results announced a translated version of a page that does not exist.<\/li>\n<li>Fixed: pages built with Elementor filed their texts under a different key than the rest of the plugin, so the same sentence could be stored \u2014 and paid for \u2014 twice. Existing duplicates are merged automatically when you update.<\/li>\n<li>Fixed: bold text and links inside a paragraph were being stripped out when the paragraph was translated. Formatting is now put back into the translated sentence. If a link cannot be placed with certainty, the paragraph is left in the original language instead of published without its link.<\/li>\n<li>Fixed: any address containing the word \"sitemap\" was skipped, so pages like \/blog\/how-to-create-a-sitemap\/ were never translated and never got a language prefix. Only real sitemap files are skipped now.<\/li>\n<li>Fixed: the visual editor showed strings as pending even when they were already translated, which invited overwriting good work. It now normalises text the same way the server does, and falls back to the context-free index.<\/li>\n<li>Fixed: auto-translate on save never ran in the block editor, which saves through the REST API. It now runs there too. Elementor keeps its own path and is unaffected.<\/li>\n<\/ul>\n\n<p><h4>2.7.9<\/h4><\/p>\n\n<ul>\n<li>Fixed: the Pro notice was invisible on the plugin's own screens. It is now printed as an inline notice, so WordPress no longer moves it inside the app container where it was being wiped out on the first repaint.<\/li>\n<li>The notice shows the launch offer for Pro while it lasts, with a live countdown to the end date. When the offer is over the notice goes back to its normal text on its own, with no update needed.<\/li>\n<li>Countdown is driven by the server clock, so a wrong clock on the visitor's computer cannot make it run fast or slow.<\/li>\n<li>The new strings are translated into Spanish, French, German, Italian and Brazilian Portuguese.<\/li>\n<\/ul>\n\n<p><h4>2.7.8<\/h4><\/p>\n\n<ul>\n<li>Added a dismissible notice about the Pro version, shown only to administrators, only on the Dashboard, the Plugins screen and the plugin's own screens, and only after the plugin has been installed for a week.<\/li>\n<li>The notice honours \"prefers-reduced-motion\" and remembers your choice per user: \"Maybe later\" hides it for 30 days and the \u2715 hides it for good. Both preferences are removed when the plugin is uninstalled.<\/li>\n<li>Added a \"Go Pro\" link to the plugin's row in the Plugins list.<\/li>\n<\/ul>\n\n<p><h4>2.7.7<\/h4><\/p>\n\n<ul>\n<li>\ud83c\udf0d <strong>New:<\/strong> The whole plugin is now translatable, and ships translated into Spanish, French, German, Italian and Brazilian Portuguese.<\/li>\n<li>The admin interface, the setup wizard and the front-end visual editor now follow your WordPress language instead of always showing the same texts.<\/li>\n<li>Every user-facing string is internationalized with the <code>incode-translate-master<\/code> text domain, including the JavaScript, so translate.wordpress.org contributors can translate it into any other language.<\/li>\n<\/ul>\n\n<p><h4>2.7.6<\/h4><\/p>\n\n<ul>\n<li>Clearer bilingual model: the site has its original language plus one translation language, and changing it is now an explicit, documented action in the Languages screen.<\/li>\n<li>The memory limit is only raised while processing a confirmed large page or a heavy scan task, never globally.<\/li>\n<li>Hardened output escaping in the language switcher (wp_kses allowlist) and CSS color sanitization.<\/li>\n<\/ul>\n\n<p><h4>2.7.5<\/h4><\/p>\n\n<ul>\n<li>The plugin is now called \"Incode Translate Master\".<\/li>\n<\/ul>\n\n<p><h4>2.6.0<\/h4><\/p>\n\n<ul>\n<li>\u2728 <strong>New:<\/strong> Auto-translate on save \u2014 new and changed texts of a post are translated automatically in the background when you save it.<\/li>\n<li>\ud83c\udff7\ufe0f <strong>New:<\/strong> Yoast SEO integration \u2014 the meta title of each page is translated.<\/li>\n<li>\ud83c\udf10 <strong>Improved:<\/strong> Translation engines \u2014 built-in keyless engine, or your own Google Translate, DeepL or Gemini API key, switchable any time.<\/li>\n<li>\ud83e\udded <strong>Improved:<\/strong> Simpler language management.<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>\ud83e\uddd9 <strong>New:<\/strong> Setup wizard on activation \u2014 pick your source language, choose the free engine (or your own key) and run the first scan, all in guided steps.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>\ud83c\udf89 <strong>First release:<\/strong> front-end visual editor, full-site scan, batch translation, keyless free engine, translation memory, language switcher, and Elementor \/ WooCommerce support.<\/li>\n<\/ul>","raw_excerpt":"Make your site bilingual: click any text on your page, translate it in context, and publish it on its own URL. No account, no key, no trial.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=350209"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/adrianincode"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=350209"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350209"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350209"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350209"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350209"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}