{"id":335777,"date":"2026-07-14T23:23:47","date_gmt":"2026-07-14T23:23:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/translaterocket\/"},"modified":"2026-10-23T16:36:04","modified_gmt":"2026-10-23T16:36:04","slug":"translate-rocket","status":"publish","type":"plugin","link":"https:\/\/so.wordpress.org\/plugins\/translate-rocket\/","author":23527293,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.8.20","stable_tag":"1.8.20","tested":"7.1.3","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"TranslateRocket \u2013 Free Multilingual Translation, Unlimited Languages","header_author":"federico_dev","header_description":"Free, AI-powered translation for WordPress. Translate your whole site \u2014 visible text, image alt tags, titles, placeholders and SEO meta \u2014 using your own AI keys (OpenAI, Anthropic, Gemini, DeepL, Google). Untranslated strings are detected automatically as visitors browse.","assets_banners_color":"a8a3b7","last_updated":"2026-10-23 16:36:04","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/translaterocket.com\/donate\/","header_plugin_uri":"https:\/\/translaterocket.com","header_author_uri":"https:\/\/federicocaputo.dev","rating":5,"author_block_rating":0,"active_installs":60,"downloads":6323,"num_ratings":10,"support_threads":3,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.10.0":{"tag":"0.10.0","author":"federicodev","date":"2026-09-01 10:25:07","revision":3675849},"0.7.7":{"tag":"0.7.7","author":"federicodev","date":"2026-07-15 00:21:44","revision":3608140},"0.7.8":{"tag":"0.7.8","author":"federicodev","date":"2026-07-15 16:02:21","revision":3609169},"0.7.9":{"tag":"0.7.9","author":"federicodev","date":"2026-07-16 11:39:35","revision":3610141},"0.8.0":{"tag":"0.8.0","author":"federicodev","date":"2026-07-21 10:52:10","revision":3616943},"0.8.1":{"tag":"0.8.1","author":"federicodev","date":"2026-07-24 09:01:27","revision":3620995},"0.8.2":{"tag":"0.8.2","author":"federicodev","date":"2026-07-30 14:33:32","revision":3628780},"0.8.3":{"tag":"0.8.3","author":"federicodev","date":"2026-08-22 12:09:21","revision":3660528},"0.8.4":{"tag":"0.8.4","author":"federicodev","date":"2026-08-22 18:23:59","revision":3661025},"0.8.5":{"tag":"0.8.5","author":"federicodev","date":"2026-08-24 14:57:40","revision":3663725},"0.8.6":{"tag":"0.8.6","author":"federicodev","date":"2026-08-25 12:53:19","revision":3665343},"0.8.7":{"tag":"0.8.7","author":"federicodev","date":"2026-08-25 17:06:29","revision":3665742},"0.8.8":{"tag":"0.8.8","author":"federicodev","date":"2026-08-27 07:42:45","revision":3668286},"0.8.9":{"tag":"0.8.9","author":"federicodev","date":"2026-08-27 13:41:35","revision":3668962},"0.9.0":{"tag":"0.9.0","author":"federicodev","date":"2026-08-28 14:50:30","revision":3670551},"0.9.1":{"tag":"0.9.1","author":"federicodev","date":"2026-08-29 23:31:51","revision":3671938},"0.9.2":{"tag":"0.9.2","author":"federicodev","date":"2026-08-30 19:03:19","revision":3673041},"0.9.3":{"tag":"0.9.3","author":"federicodev","date":"2026-08-30 19:59:21","revision":3673087},"0.9.4":{"tag":"0.9.4","author":"federicodev","date":"2026-08-30 21:01:15","revision":3673115},"0.9.5":{"tag":"0.9.5","author":"federicodev","date":"2026-08-31 10:38:03","revision":3673907},"0.9.6":{"tag":"0.9.6","author":"federicodev","date":"2026-08-31 11:05:12","revision":3673950},"0.9.7":{"tag":"0.9.7","author":"federicodev","date":"2026-08-31 20:53:08","revision":3674952},"0.9.8":{"tag":"0.9.8","author":"federicodev","date":"2026-09-01 09:33:33","revision":3675786},"0.9.9":{"tag":"0.9.9","author":"federicodev","date":"2026-09-01 09:53:46","revision":3675813},"1.0.0":{"tag":"1.0.0","author":"federicodev","date":"2026-09-02 11:00:29","revision":3677821},"1.1.0":{"tag":"1.1.0","author":"federicodev","date":"2026-09-07 10:36:59","revision":3684671},"1.1.2":{"tag":"1.1.2","author":"federicodev","date":"2026-09-07 21:06:19","revision":3685599},"1.1.4":{"tag":"1.1.4","author":"federicodev","date":"2026-09-08 10:12:52","revision":3686370},"1.2.0":{"tag":"1.2.0","author":"federicodev","date":"2026-09-11 21:12:15","revision":3692097},"1.2.1":{"tag":"1.2.1","author":"federicodev","date":"2026-09-13 08:25:05","revision":3693451},"1.3.0":{"tag":"1.3.0","author":"federicodev","date":"2026-09-13 20:48:42","revision":3694172},"1.4.0":{"tag":"1.4.0","author":"federicodev","date":"2026-09-14 19:51:11","revision":3695853},"1.4.1":{"tag":"1.4.1","author":"federicodev","date":"2026-09-15 13:46:06","revision":3697070},"1.4.2":{"tag":"1.4.2","author":"federicodev","date":"2026-09-15 20:03:37","revision":3697651},"1.4.3":{"tag":"1.4.3","author":"federicodev","date":"2026-09-17 21:16:07","revision":3701004},"1.4.4":{"tag":"1.4.4","author":"federicodev","date":"2026-09-18 12:03:13","revision":3701926},"1.4.5":{"tag":"1.4.5","author":"federicodev","date":"2026-09-19 07:31:32","revision":3703075},"1.4.6":{"tag":"1.4.6","author":"federicodev","date":"2026-09-20 11:01:55","revision":3704153},"1.5.0":{"tag":"1.5.0","author":"federicodev","date":"2026-09-21 17:13:34","revision":3706004},"1.5.1":{"tag":"1.5.1","author":"federicodev","date":"2026-09-22 14:20:34","revision":3707549},"1.5.2":{"tag":"1.5.2","author":"federicodev","date":"2026-09-23 08:13:39","revision":3708797},"1.5.3":{"tag":"1.5.3","author":"federicodev","date":"2026-09-23 16:17:16","revision":3709683},"1.5.4":{"tag":"1.5.4","author":"federicodev","date":"2026-09-24 11:05:24","revision":3711129},"1.5.5":{"tag":"1.5.5","author":"federicodev","date":"2026-09-24 17:50:44","revision":3711804},"1.5.6":{"tag":"1.5.6","author":"federicodev","date":"2026-09-25 23:12:03","revision":3713680},"1.5.7":{"tag":"1.5.7","author":"federicodev","date":"2026-09-27 19:18:53","revision":3715990},"1.5.8":{"tag":"1.5.8","author":"federicodev","date":"2026-09-28 20:35:36","revision":3717886},"1.5.9":{"tag":"1.5.9","author":"federicodev","date":"2026-09-29 13:50:41","revision":3719178},"1.7.0":{"tag":"1.7.0","author":"federicodev","date":"2026-09-30 22:01:25","revision":3722089},"1.7.1":{"tag":"1.7.1","author":"federicodev","date":"2026-10-02 05:50:27","revision":3724203},"1.7.10":{"tag":"1.7.10","author":"federicodev","date":"2026-10-07 16:51:07","revision":3733020},"1.7.12":{"tag":"1.7.12","author":"federicodev","date":"2026-10-08 06:26:58","revision":3733777},"1.7.2":{"tag":"1.7.2","author":"federicodev","date":"2026-10-03 11:26:46","revision":3726183},"1.7.3":{"tag":"1.7.3","author":"federicodev","date":"2026-10-04 13:55:25","revision":3727484},"1.7.4":{"tag":"1.7.4","author":"federicodev","date":"2026-10-06 10:32:57","revision":3730531},"1.7.5":{"tag":"1.7.5","author":"federicodev","date":"2026-10-06 15:57:43","revision":3731181},"1.7.6":{"tag":"1.7.6","author":"federicodev","date":"2026-10-06 17:40:21","revision":3731315},"1.7.7":{"tag":"1.7.7","author":"federicodev","date":"2026-10-06 18:08:57","revision":3731353},"1.7.8":{"tag":"1.7.8","author":"federicodev","date":"2026-10-07 10:53:17","revision":3732394},"1.7.9":{"tag":"1.7.9","author":"federicodev","date":"2026-10-07 12:56:51","revision":3732627},"1.8.0":{"tag":"1.8.0","author":"federicodev","date":"2026-10-10 08:15:48","revision":3737753},"1.8.1":{"tag":"1.8.1","author":"federicodev","date":"2026-10-11 09:59:55","revision":3739280},"1.8.10":{"tag":"1.8.10","author":"federicodev","date":"2026-10-18 08:03:02","revision":3752726},"1.8.11":{"tag":"1.8.11","author":"federicodev","date":"2026-10-18 12:56:44","revision":3753047},"1.8.12":{"tag":"1.8.12","author":"federicodev","date":"2026-10-20 17:36:37","revision":3757216},"1.8.13":{"tag":"1.8.13","author":"federicodev","date":"2026-10-21 00:23:46","revision":3757600},"1.8.14":{"tag":"1.8.14","author":"federicodev","date":"2026-10-21 09:09:06","revision":3758001},"1.8.15":{"tag":"1.8.15","author":"federicodev","date":"2026-10-22 00:10:52","revision":3759194},"1.8.16":{"tag":"1.8.16","author":"federicodev","date":"2026-10-22 12:31:06","revision":3759896},"1.8.17":{"tag":"1.8.17","author":"federicodev","date":"2026-10-22 16:26:42","revision":3760214},"1.8.18":{"tag":"1.8.18","author":"federicodev","date":"2026-10-23 06:30:44","revision":3761004},"1.8.19":{"tag":"1.8.19","author":"federicodev","date":"2026-10-23 08:05:09","revision":3761147},"1.8.2":{"tag":"1.8.2","author":"federicodev","date":"2026-10-13 12:03:35","revision":3743831},"1.8.20":{"tag":"1.8.20","author":"federicodev","date":"2026-10-23 16:36:04","revision":3762036},"1.8.3":{"tag":"1.8.3","author":"federicodev","date":"2026-10-13 16:56:11","revision":3744482},"1.8.4":{"tag":"1.8.4","author":"federicodev","date":"2026-10-14 10:45:19","revision":3746069},"1.8.5":{"tag":"1.8.5","author":"federicodev","date":"2026-10-14 16:03:48","revision":3746755},"1.8.6":{"tag":"1.8.6","author":"federicodev","date":"2026-10-15 09:58:19","revision":3748123},"1.8.6.1":{"tag":"1.8.6.1","author":"federicodev","date":"2026-10-15 15:50:01","revision":3748881},"1.8.7":{"tag":"1.8.7","author":"federicodev","date":"2026-10-16 12:45:49","revision":3750437},"1.8.8":{"tag":"1.8.8","author":"federicodev","date":"2026-10-17 05:26:34","revision":3751431},"1.8.9":{"tag":"1.8.9","author":"federicodev","date":"2026-10-17 18:06:54","revision":3752240}},"upgrade_notice":{"1.8.20":"<p>AI engine errors explained and handled, Groq key checked in the setup wizard, \u00abShow it to visitors\u00bb after the first translation, category and tag pages included in the site scan.<\/p>","1.8.19":"<p>Your homepage translates by itself right after the setup wizard, and AI translation in the visual editor is several times faster.<\/p>","1.8.18":"<p>Cache warm-up after every flush, Complianz consent kept across languages, LiteSpeed REST cache fix, page-builder box links in the visitor&#039;s language.<\/p>","1.8.17":"<p>New option to keep your own category and tag slugs in every language, with 301 redirects from the translated addresses already indexed.<\/p>","1.8.16":"<p>WooCommerce: translated product category and tag addresses no longer answer 404. Recommended model on every AI engine card, \u00abUse this engine\u00bb switch, faster search in all languages.<\/p>","1.8.15":"<p>Faster pages while Labs or WP-Cron translate in the background (caches cleared at most every ten minutes), no more false \u00abAI translation failed\u00bb lines for resting engines.<\/p>","1.8.14":"<p>Lighter and steadier \u00abTranslate all\u00bb on small servers (fewer database writes, retries after 502\/504\/524, one process at a time), new WP-CLI command, DeepL rest that survives cache purges.<\/p>","1.8.13":"<p>The SEO Framework: translated pages in its sitemap, one og:locale. \u00abRead more\u00bb links to feature pages, setup guide link, clearer engine box.<\/p>","1.8.12":"<p>Internal links follow translated slugs; \u00abTranslate\u00bb in the Simple view starts translating; percentages reach 100% when everything visible is translated.<\/p>","1.8.11":"<p>Only what visitors see counts: no more admin-only or stale sentences in the percentages.<\/p>","1.8.10":"<p>Search suggestions answer in a fraction of the time (light endpoint, REST fallback).<\/p>","1.8.9":"<p>Editor and imports now save on SQLite and in the wordpress.org Live Preview; the search box in block-theme menus; language names readable in the phone menu; search and Save-bar fixes.<\/p>","1.8.8":"<p>Simple\/Advanced view, the Search screen with profiles and looks, sentences an engine cannot translate kept (pages reach 100%), cookie-banner and cache compatibility.<\/p>","1.8.7":"<p>Faster admin screens and search on large sites; no more 504 from the bulk AI buttons in Translation memory and in the page editor.<\/p>","1.8.6.1":"<p>Fix: no more \u00ab504 Gateway Timeout\u00bb when translating a page or a whole language on large sites.<\/p>","1.8.6":"<p>Fix: offline languages and preview mode no longer send visitors into a redirect loop \u2014 please update. Also: one \u00abTranslate with\u00bb menu with free engines in green, visits per language, content and menus per language.<\/p>","1.8.5":"<p>Security fixes (page cache, WooCommerce emails, editor panel) \u2014 please update. Also: search in every language, six new languages for the plugin, plain-words provider errors, \u00abScan site\u00bb beyond 1,000 pages.<\/p>","1.8.4":"<p>Security update: please update. The editor&#039;s translation panel is limited to published content and administrators for removals and AI; its Save works again.<\/p>","1.8.3":"<p>Labels showing who translated each page, the MyMemory e-mail box, Labs texts in the plugin&#039;s language, a tidier \u00abTranslate with\u00bb row.<\/p>","1.8.2":"<p>Clear error messages with the HTTP code (no more \u00abkey refused\u00bb for timeouts), \u00abTranslate all missing\u00bb in short steps with a progress bar, a \u00abSentences per request\u00bb option.<\/p>","1.8.1":"<p>Choose the engine (official or not) on Translations, one switcher profile for the header and one for the footer, an \u24d8 on every feature, fixes to page progress.<\/p>","1.8.0":"<p>New \u00abAutomatic translation\u00bb page with live progress, a free\/Labs overview, a test button for every AI provider, free setup on request; many fixes found on a large real site. Recommended.<\/p>","1.7.12":"<p>Redirects keep the visitor&#039;s language (Redirection and others); titles of protected posts translated in lists; 25 more plugins and 3 classic themes tested. Recommended.<\/p>","1.7.10":"<p>\u00abLatest posts\u00bb excerpts and sentences ending with a \u00abRead more\u00bb link are now translated on every site; loading indicator in the switcher&#039;s live preview. Recommended.<\/p>","1.7.9":"<p>Security hardening (translations can never carry scripts or handlers, whatever their source), pasted translations in the editor panel, sentences with a bold\/italic number kept whole, clearer switcher profiles. Recommended.<\/p>","1.7.8":"<p>Fixes pasted translations landing on the wrong sentence (cookie banner showing a blog post), presets in the switcher customizer and the colours of the language item in your header menu. Recommended.<\/p>","1.7.7":"<p>Fixes content loaded by AJAX on translated pages: scripts stay whole (forms like SupportCandy&#039;s send again) and its links keep the visitor&#039;s language. Recommended.<\/p>","1.7.6":"<p>The languages in your header menu take the colours you choose, can sit right after any menu item, and the Switcher screen shows your real header live before you save. Recommended.<\/p>","1.7.5":"<p>Fixes translating in your browser without an API key (sentences with links are saved, a run always ends), and flags plus open-on-click for the languages in block themes&#039; header menu. Recommended.<\/p>","1.7.4":"<p>The language switcher in your theme&#039;s header menu, or in a spot you click on your own page; a row of languages at the bottom of pages; 40 more languages (77 in all); many popular plugins translated (WP Job Manager, Events Manager, Ninja Tables, FiboSearch, Social Chat\u2026); a simpler dashboard. Recommended.<\/p>","1.7.3":"<p>E-mails from seven contact form plugins and GiveWP in the visitor&#039;s language; form confirmation messages, map markers and GiveWP donation forms translated; dates inside sentences fixed on most themes. Recommended.<\/p>","1.7.2":"<p>MetForm forms, rotating \u00abFancy Text\u00bb, countdown labels and chat buttons of popular Elementor add-ons now translated; a \u00abPlugin language\u00bb menu; better on phones. Recommended.<\/p>","1.7.1":"<p>Invoices from PDF Invoices &amp; Packing Slips in the customer&#039;s language; customers&#039; names and addresses no longer collected from order e-mails; a check after every import; more plugins and markup understood. Recommended.<\/p>","1.7.0":"<p>Free AI translation with your own free Cloudflare, Groq or OpenRouter account; a universal importer for plugins with no importer here, with side-by-side preview; a translation style proposed from your site. Recommended.<\/p>","1.5.9":"<p>Content loaded after the page (\u00abLoad more\u00bb, filters), REST responses, feeds and script strings are now translated; Ninja\/Fluent Forms; SEO og:locale and sitemaps; RTL; sign-up language. Recommended for every site.<\/p>","1.5.8":"<p>Recommended for WooCommerce shops: e-mails sent from the dashboard are translated, variations and product names in the cart and e-mails too, search works in every language. New WP Rocket integration. Imports from Polylang and WPML bring categories, variations and ACF fields.<\/p>","1.5.7":"<p>Wording of the Labs page only. Nothing else changes.<\/p>","1.5.6":"<p>Imports keep your hand corrections and skip drafts and trash; pages with translate=&quot;no&quot; on  are translated; better caching (Google Shopping links, NitroPack, Cloudflare). New Labs page; optional anonymous reason on deactivation.<\/p>","1.5.5":"<p>Recommended if you translated your site with an older version: sentences with links or bold words show up translated in the visual editor again. Without an API key, a browser that cannot translate now explains why and offers free alternatives. The switcher preview is now the real switcher, and admin screens no longer jump.<\/p>","1.5.4":"<p>TranslateRocket now works on a phone: every admin screen fits, and the translation panel under the editor is readable. The language switcher no longer covers cookie banner buttons. New: choose what the AI reuses from memory, and improve browser translations with AI.<\/p>","1.5.3":"<p>Import from Falang and Sublanguage; pages no longer end up on the home page after a translation plugin is switched off; OpenAI reasoning models work; composed page titles are translated.<\/p>","1.5.2":"<p>Submit buttons, pictures inside , video posters and retina images are translated; an edited translation shows immediately; visitors arriving with tracking parameters read from the cache.<\/p>","1.5.1":"<p>Switching from qTranslate, WPGlobus or WP Multilang no longer leaves every language on every page, and imported sentences with links are used everywhere. Recommended if you are moving from another translation plugin.<\/p>","1.5.0":"<p>Sentences broken by a link or a bold word are now translated whole, so the words can move where your language needs them. Your existing translations stay, but the count of phrases to translate will go up: the whole sentences are new. A new panel tells you where your site is and what is left to do.<\/p>","1.4.6":"<p>Brand and product names in &quot;Words &amp; phrases&quot; now stay as they are inside sentences too, with DeepL, Google Cloud and the AI models.<\/p>","1.4.5":"<p>A page edited in the block editor, a product renamed through the store API or a footer edited in the Site Editor now reaches visitors at once, instead of up to six hours later.<\/p>","1.4.4":"<p>The two links at the bottom of a Complianz banner can be translated at last, plus two things the screens never explained: what to do with the header and footer Polylang or WPML duplicated per language, and where the text of pop-ups comes from.<\/p>","1.4.3":"<p>Cookie and consent banners (Complianz, CookieYes and others) are now collected and can be clicked in the visual editor; page builders are left alone while you edit; &quot;Translate again&quot; for a single page, with undo; pages left behind by Polylang, WPML or Bogo are labelled.<\/p>","1.4.2":"<p>Side by side, the preview is now one click away: a Preview panel on the Languages page, a Preview menu in the admin bar and a Preview link in Pages and Posts.<\/p>","1.4.1":"<p>Forms in the visitor\u2019s language wherever they are placed, Forminator e-mails in the language of the page, and side-by-side fixes: the mode no longer switches itself on over a site TranslateRocket is already serving.<\/p>","1.4.0":"<p>Side-by-side mode: activate TranslateRocket next to WPML, Polylang, TranslatePress or another translation plugin without changing your public site, preview the translations as an administrator and go online when you are ready.<\/p>","1.2.0":"<p>Content and menu items for some languages only, and whole-page translation in ChatGPT or Gemini with a prompt made for your site. Existing pages and menus are unchanged until you use the new options.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":10},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3608126,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3608126,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3675937,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3675937,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3762037,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/?trr-edit=1\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"translate-rocket\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php require_once '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/* Permalink parlanti: senza, \\\/it\\\/ e \\\/es\\\/ non esistono e non c'e' niente da mostrare. *\\\/\\nupdate_option( 'permalink_structure', '\\\/%postname%\\\/' );\\nif ( function_exists( 'flush_rewrite_rules' ) ) { flush_rewrite_rules( false ); }\\n\\n\\\/* Lingua di partenza e destinazioni, cosi' si atterra su un sito gia' multilingue. *\\\/\\n$s = (array) get_option( 'trrocket_settings', array() );\\n$s['source_language']  = 'en';\\n$s['target_languages'] = array( 'it', 'es', 'de', 'fr' );\\n$s['show_poweredby']   = 1;\\nupdate_option( 'trrocket_settings', $s );\\n\\n\\\/* La pagina vetrina. Il sorgente leggibile e' _ssh\\\/video-2026\\\/demo-aurora.html:\\n   qui arriva in base64 solo per non dover litigare con apici e virgolette\\n   annidati in tre livelli (JSON dentro PHP dentro HTML). *\\\/\\n$c = base64_decode( 'PHN0eWxlPg0KICAvKiBJbCB0ZW1hIG1ldHRlIGlsIHRpdG9sbyBkZWxsYSBwYWdpbmEgaW4gdW4gY29udGVuaXRvcmUgcGl1JyBzdHJldHRvIGRlbA0KICAgICBub3N0cm86IGludmVjZSBkaSByaW5jb3JyZXJlIGxlIHN1ZSBtaXN1cmUsIGxvIHRvZ2xpYW1vLiAqLw0KICAud3AtYmxvY2stcG9zdC10aXRsZSwgLmVudHJ5LXRpdGxlIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9DQogIC53cC1zaXRlLWJsb2NrcyA+IC53cC1ibG9jay1ncm91cCwNCiAgLndwLWJsb2NrLXBvc3QtY29udGVudCB7IG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OyB9DQogIC5hdSB7IC0tb3JvOiNjOWEyMjc7IC0tc2N1cm86IzEyMTAyYjsgLS10ZXN0bzojM2YzZDU2OyAtLXRlbnVlOiM2YjY5ODI7DQogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgICAgIGNvbG9yOiB2YXIoLS10ZXN0byk7IG1heC13aWR0aDogMTIwMHB4OyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMCAyOHB4IDY0cHg7IH0NCiAgLmF1ICogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9DQogIC5hdS1oZXJvIHsgcG9zaXRpb246IHJlbGF0aXZlOyBib3JkZXItcmFkaXVzOiAyMnB4OyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW46IDAgMCAxOHB4OyB9DQogIC5hdS1oZXJvIGltZyB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDU2MHB4OyBvYmplY3QtZml0OiBjb3ZlcjsgZGlzcGxheTogYmxvY2s7IH0NCiAgLmF1LXZlbCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEwLDgsMzAsLjIwKSAwJSwgcmdiYSgxMCw4LDMwLC4zMCkgNDUlLCByZ2JhKDEwLDgsMzAsLjgyKSAxMDAlKTsgfQ0KICAuYXUtaGVyby10eHQgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBib3R0b206IDA7IHBhZGRpbmc6IDAgNTZweCA1MnB4OyBjb2xvcjogI2ZmZjsgfQ0KICAuYXUtb2NjaGllbGxvIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOXB4OyBtYXJnaW46IDAgMCAxNnB4Ow0KICAgICAgICAgICAgICAgICAgcGFkZGluZzogN3B4IDE1cHg7IGJvcmRlci1yYWRpdXM6IDk5OXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC4xNCk7DQogICAgICAgICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsgZm9udC1zaXplOiAxMi41cHg7IGxldHRlci1zcGFjaW5nOiAuMTZlbTsNCiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGZvbnQtd2VpZ2h0OiA2MDA7IH0NCiAgLmF1LXN0ZWxsZSB7IGNvbG9yOiB2YXIoLS1vcm8pOyBsZXR0ZXItc3BhY2luZzogMnB4OyB9DQogIC5hdS1oZXJvIGgxIHsgbWFyZ2luOiAwIDAgMTZweDsgZm9udC1zaXplOiA1OHB4OyBsaW5lLWhlaWdodDogMS4wNDsgZm9udC13ZWlnaHQ6IDgwMDsNCiAgICAgICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyBtYXgtd2lkdGg6IDE1Y2g7IHRleHQtd3JhcDogYmFsYW5jZTsgfQ0KICAuYXUtaGVybyBwIHsgbWFyZ2luOiAwIDAgMjZweDsgZm9udC1zaXplOiAxOS41cHg7IGxpbmUtaGVpZ2h0OiAxLjU1OyBtYXgtd2lkdGg6IDU0Y2g7IG9wYWNpdHk6IC45NTsgfQ0KICAuYXUtY3RhIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kOiAjZmZmOyBjb2xvcjogdmFyKC0tc2N1cm8pOyBmb250LXdlaWdodDogNzAwOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweCAzMHB4OyBib3JkZXItcmFkaXVzOiA5OTlweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDE2cHg7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMjZweCByZ2JhKDAsMCwwLC4yOCk7IH0NCiAgLmF1LWN0YS5naG9zdCB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogI2ZmZjsgYm94LXNoYWRvdzogbm9uZTsNCiAgICAgICAgICAgICAgICAgIGJvcmRlcjogMS41cHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNTUpOyBtYXJnaW4tbGVmdDogMTJweDsgfQ0KDQogIC8qIExhIHN0cmlzY2lhIGRlaSBzZXJ2aXppOiBkaWNlIGluIHVuIGNvbHBvIGQnb2NjaGlvIGNoZSBwb3N0byBlJy4gKi8NCiAgLmF1LXN0cmlwIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgMWZyKTsgZ2FwOiAxcHg7DQogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGU2ZjI7IGJvcmRlcjogMXB4IHNvbGlkICNlOGU2ZjI7IGJvcmRlci1yYWRpdXM6IDE2cHg7DQogICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47IG1hcmdpbjogMCAwIDU2cHg7IH0NCiAgLmF1LXN0cmlwIGRpdiB7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6IDIycHggMThweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQogIC5hdS1zdHJpcCBiIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6ZTogMjJweDsgY29sb3I6IHZhcigtLXNjdXJvKTsgbWFyZ2luLWJvdHRvbTogM3B4OyB9DQogIC5hdS1zdHJpcCBzcGFuIHsgZm9udC1zaXplOiAxMy41cHg7IGNvbG9yOiB2YXIoLS10ZW51ZSk7IH0NCg0KICAuYXUtc2V6IHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDUycHg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW46IDAgMCA2NHB4OyB9DQogIC5hdS1zZXogaW1nIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogNDAwcHg7IG9iamVjdC1maXQ6IGNvdmVyOyBib3JkZXItcmFkaXVzOiAxOHB4Ow0KICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyBib3gtc2hhZG93OiAwIDE4cHggNDBweCByZ2JhKDE4LDE2LDQzLC4xMyk7IH0NCiAgLmF1LWV5ZWJyb3cgeyBmb250LXNpemU6IDEyLjVweDsgbGV0dGVyLXNwYWNpbmc6IC4xOGVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiB2YXIoLS1vcm8pOyBtYXJnaW46IDAgMCAxMnB4OyB9DQogIC5hdS1zZXogaDIgeyBmb250LXNpemU6IDM2cHg7IGxpbmUtaGVpZ2h0OiAxLjE0OyBtYXJnaW46IDAgMCAxNnB4OyBmb250LXdlaWdodDogNzUwOw0KICAgICAgICAgICAgICAgY29sb3I6IHZhcigtLXNjdXJvKTsgbGV0dGVyLXNwYWNpbmc6IC0uMDE1ZW07IH0NCiAgLmF1LXNleiBwIHsgZm9udC1zaXplOiAxNy41cHg7IGxpbmUtaGVpZ2h0OiAxLjcyOyBtYXJnaW46IDAgMCAxNHB4OyB9DQogIC5hdS1saXN0YSB7IGxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdpbjogMThweCAwIDA7IHBhZGRpbmc6IDA7IH0NCiAgLmF1LWxpc3RhIGxpIHsgcG9zaXRpb246IHJlbGF0aXZlOyBwYWRkaW5nLWxlZnQ6IDI2cHg7IG1hcmdpbi1ib3R0b206IDlweDsNCiAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNi41cHg7IGNvbG9yOiB2YXIoLS10ZXN0byk7IH0NCiAgLmF1LWxpc3RhIGxpOjpiZWZvcmUgeyBjb250ZW50OiAi4pyTIjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IC0xcHg7DQogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHZhcigtLW9ybyk7IGZvbnQtd2VpZ2h0OiA3MDA7IH0NCg0KICAuYXUtY2l0IHsgbWFyZ2luOiAwIDAgNjRweDsgcGFkZGluZzogNDRweCA0OHB4OyBib3JkZXItcmFkaXVzOiAyMHB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2Y3ZjVmZiAwJSwgI2ZkZjlmMCAxMDAlKTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlY2VhZmE7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KICAuYXUtY2l0IHAgeyBmb250LXNpemU6IDI0cHg7IGxpbmUtaGVpZ2h0OiAxLjU7IG1hcmdpbjogMCAwIDE4cHg7IGNvbG9yOiB2YXIoLS1zY3Vybyk7DQogICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc3R5bGU6IGl0YWxpYzsgbWF4LXdpZHRoOiA0NmNoOw0KICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9DQogIC5hdS1jaXQgc21hbGwgeyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiB2YXIoLS10ZW51ZSk7IGxldHRlci1zcGFjaW5nOiAuMDRlbTsgfQ0KDQogIC5hdS1mb25kbyB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYm9yZGVyLXJhZGl1czogMjBweDsgb3ZlcmZsb3c6IGhpZGRlbjsgfQ0KICAuYXUtZm9uZG8gaW1nIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMzgwcHg7IG9iamVjdC1maXQ6IGNvdmVyOyBkaXNwbGF5OiBibG9jazsgfQ0KICAuYXUtZm9uZG8tdmVsIHsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldDogMDsNCiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgxMCw4LDMwLC45MikgMCUsIHJnYmEoMTAsOCwzMCwuODApIDQ1JSwgcmdiYSgxMCw4LDMwLC4zMCkgNzglLCByZ2JhKDEwLDgsMzAsLjEwKSAxMDAlKTsgfQ0KICAuYXUtZm9uZG8tdHh0IHsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IHBhZGRpbmc6IDAgNTZweDsgY29sb3I6ICNmZmY7IG1heC13aWR0aDogNjIlOyB9DQogIC5hdS1mb25kbyBoMiB7IGZvbnQtc2l6ZTogMzRweDsgbGluZS1oZWlnaHQ6IDEuMTY7IG1hcmdpbjogMCAwIDEycHg7IGZvbnQtd2VpZ2h0OiA3NTA7IH0NCiAgLmF1LWZvbmRvIHAgeyBmb250LXNpemU6IDE3LjVweDsgbGluZS1oZWlnaHQ6IDEuNjsgbWFyZ2luOiAwIDAgMjJweDsgb3BhY2l0eTogLjk1OyB9DQoNCiAgLyogU3UgdGVsZWZvbm8gaWwgdGVzdG8gc29wcmEgbGEgZm90byBub24gY2kgc3RhOiBjcmVzY2UgcGl1JyBkZWxsJ2ltbWFnaW5lDQogICAgIGUgdXNjaXZhIGRhaSBib3JkaSwgY29uIGlsIHRpdG9sbyB0YWdsaWF0byBpbiBjaW1hIGUgaWwgc2Vjb25kbyBwdWxzYW50ZQ0KICAgICBtYW5naWF0byBpbiBmb25kby4gU2kgaW1waWxhOiBmb3RvIHNvcHJhLCB0ZXN0byBzb3R0byBzdSBmb25kbyBzY3Vyby4gKi8NCiAgQG1lZGlhIChtYXgtd2lkdGg6IDg2MHB4KSB7DQogICAgLmF1IHsgcGFkZGluZzogMCAxNnB4IDQwcHg7IH0NCiAgICAuYXUtaGVybyB7IGJvcmRlci1yYWRpdXM6IDE2cHg7IH0NCiAgICAuYXUtaGVybyBpbWcgeyBoZWlnaHQ6IDI0MHB4OyB9DQogICAgLmF1LXZlbCB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAuYXUtaGVyby10eHQgeyBwb3NpdGlvbjogc3RhdGljOyBwYWRkaW5nOiAyMHB4IDIwcHggMjRweDsgYmFja2dyb3VuZDogdmFyKC0tc2N1cm8pOyB9DQogICAgLmF1LW9jY2hpZWxsbyB7IGZvbnQtc2l6ZTogMTAuNXB4OyBwYWRkaW5nOiA1cHggMTFweDsgbWFyZ2luLWJvdHRvbTogMTJweDsgfQ0KICAgIC5hdS1oZXJvIGgxIHsgZm9udC1zaXplOiAyOHB4OyBsaW5lLWhlaWdodDogMS4xMjsgbWF4LXdpZHRoOiBub25lOyBtYXJnaW4tYm90dG9tOiAxMnB4OyB9DQogICAgLmF1LWhlcm8gcCB7IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuNTsgbWFyZ2luLWJvdHRvbTogMThweDsgbWF4LXdpZHRoOiBub25lOyB9DQogICAgLmF1LWN0YSB7IGRpc3BsYXk6IGJsb2NrOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDEzcHggMjBweDsgZm9udC1zaXplOiAxNXB4OyB9DQogICAgLmF1LWN0YS5naG9zdCB7IG1hcmdpbjogMTBweCAwIDA7IH0NCg0KICAgIC5hdS1zdHJpcCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7IG1hcmdpbi1ib3R0b206IDQwcHg7IH0NCiAgICAuYXUtc3RyaXAgZGl2IHsgcGFkZGluZzogMTZweCAxMHB4OyB9DQogICAgLmF1LXN0cmlwIGIgeyBmb250LXNpemU6IDE5cHg7IH0NCiAgICAuYXUtc3RyaXAgc3BhbiB7IGZvbnQtc2l6ZTogMTJweDsgfQ0KDQogICAgLmF1LXNleiB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBnYXA6IDIycHg7IG1hcmdpbi1ib3R0b206IDQ0cHg7IH0NCiAgICAuYXUtc2V6LmludmVydGl0YSA+IGltZyB7IG9yZGVyOiAyOyB9DQogICAgLmF1LXNleiBpbWcgeyBoZWlnaHQ6IDIyMHB4OyB9DQogICAgLmF1LXNleiBoMiB7IGZvbnQtc2l6ZTogMjZweDsgfQ0KICAgIC5hdS1zZXogcCB7IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuNjsgfQ0KDQogICAgLmF1LWNpdCB7IHBhZGRpbmc6IDI4cHggMjJweDsgbWFyZ2luLWJvdHRvbTogNDRweDsgfQ0KICAgIC5hdS1jaXQgcCB7IGZvbnQtc2l6ZTogMThweDsgfQ0KDQogICAgLyogU3Rlc3NhIHN0b3JpYSBkZWxsYSBjb3BlcnRpbmE6IGlsIHRlc3RvIHNvcHJhIGxhIGZvdG8gbm9uIGNpIHN0YS4gKi8NCiAgICAuYXUtZm9uZG8gaW1nIHsgaGVpZ2h0OiAyMDBweDsgfQ0KICAgIC5hdS1mb25kby12ZWwgeyBkaXNwbGF5OiBub25lOyB9DQogICAgLmF1LWZvbmRvLXR4dCB7IHBvc2l0aW9uOiBzdGF0aWM7IG1heC13aWR0aDogbm9uZTsgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2N1cm8pOyBkaXNwbGF5OiBibG9jazsgfQ0KICAgIC5hdS1mb25kbyBoMiB7IGZvbnQtc2l6ZTogMjRweDsgfQ0KICAgIC5hdS1mb25kbyBwIHsgZm9udC1zaXplOiAxNnB4OyB9DQogIH0NCjwvc3R5bGU+DQoNCjxkaXYgY2xhc3M9ImF1Ij4NCg0KICA8ZGl2IGNsYXNzPSJhdS1oZXJvIj4NCiAgICA8aW1nIHNyYz0iaHR0cHM6Ly90cmFuc2xhdGVyb2NrZXQuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9wbGF5Z3JvdW5kL2hlcm8ud2VicCIgYWx0PSJUaGUgY291cnR5YXJkIGF0IGdvbGRlbiBob3VyIj4NCiAgICA8ZGl2IGNsYXNzPSJhdS12ZWwiPjwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImF1LWhlcm8tdHh0Ij4NCiAgICAgIDxzcGFuIGNsYXNzPSJhdS1vY2NoaWVsbG8iPjxzcGFuIGNsYXNzPSJhdS1zdGVsbGUiPuKYheKYheKYheKYheKYhTwvc3Bhbj4gQXVyb3JhIEJvdXRpcXVlIEhvdGVsPC9zcGFuPg0KICAgICAgPGgxPkEgcXVpZXQgZXNjYXBlIGluIHRoZSBvbGQgdG93bjwvaDE+DQogICAgICA8cD5TaXggcm9vbXMgYWJvdmUgYSBjb3VydHlhcmQgb2YgbGVtb24gdHJlZXMsIHR3byBtaW51dGVzIGZyb20gdGhlIGNhdGhlZHJhbC4gQnJlYWtmYXN0IG1hZGUgYnkgaGFuZCwgYW5kIHRoZSBraW5kIG9mIHNpbGVuY2UgeW91IGNhbWUgaGVyZSBmb3IuPC9wPg0KICAgICAgPGEgY2xhc3M9ImF1LWN0YSIgaHJlZj0iIyI+Q2hlY2sgYXZhaWxhYmlsaXR5PC9hPg0KICAgICAgPGEgY2xhc3M9ImF1LWN0YSBnaG9zdCIgaHJlZj0iIyI+U2VlIHRoZSByb29tczwvYT4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBjbGFzcz0iYXUtc3RyaXAiPg0KICAgIDxkaXY+PGI+NjwvYj48c3Bhbj5yb29tcywgZWFjaCBkaWZmZXJlbnQ8L3NwYW4+PC9kaXY+DQogICAgPGRpdj48Yj4yIG1pbjwvYj48c3Bhbj53YWxrIHRvIHRoZSBjYXRoZWRyYWw8L3NwYW4+PC9kaXY+DQogICAgPGRpdj48Yj45LjY8L2I+PHNwYW4+YXZlcmFnZSBndWVzdCByYXRpbmc8L3NwYW4+PC9kaXY+DQogICAgPGRpdj48Yj4xODc4PC9iPjxzcGFuPnRoZSB5ZWFyIGl0IHdhcyBidWlsdDwvc3Bhbj48L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBjbGFzcz0iYXUtc2V6Ij4NCiAgICA8ZGl2Pg0KICAgICAgPHAgY2xhc3M9ImF1LWV5ZWJyb3ciPlRoZSByb29tczwvcD4NCiAgICAgIDxoMj5Nb3JuaW5ncyB0aGF0IHN0YXJ0IHdpdGggbGlnaHQsIG5vdCB3aXRoIGFuIGFsYXJtPC9oMj4NCiAgICAgIDxwPkxpbmVuIHNoZWV0cywgd29vZGVuIHNodXR0ZXJzIHRoYXQgb3BlbiBvbnRvIHRoZSByb29mdG9wcywgYW5kIGZsb29ycyBvZiBvcmlnaW5hbCB0aWxlLiBObyB0d28gcm9vbXMgYXJlIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSBidWlsZGluZyBuZXZlciB3YXMuPC9wPg0KICAgICAgPHVsIGNsYXNzPSJhdS1saXN0YSI+DQogICAgICAgIDxsaT5BaXIgY29uZGl0aW9uaW5nIGFuZCBmYXN0IFdpLUZpIHRocm91Z2hvdXQ8L2xpPg0KICAgICAgICA8bGk+QSBzbWFsbCBiYWxjb255IGluIGV2ZXJ5IHJvb208L2xpPg0KICAgICAgICA8bGk+TGF0ZSBjaGVja291dCB3aGVuZXZlciB3ZSBjYW4gbWFuYWdlIGl0PC9saT4NCiAgICAgIDwvdWw+DQogICAgPC9kaXY+DQogICAgPGltZyBzcmM9Imh0dHBzOi8vdHJhbnNsYXRlcm9ja2V0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvcGxheWdyb3VuZC9jYW1lcmEud2VicCIgYWx0PSJBIHN1bmxpdCByb29tIHdpdGggb3BlbiBzaHV0dGVycyI+DQogIDwvZGl2Pg0KDQogIDxkaXYgY2xhc3M9ImF1LXNleiBpbnZlcnRpdGEiPg0KICAgIDxpbWcgc3JjPSJodHRwczovL3RyYW5zbGF0ZXJvY2tldC5jb20vd3AtY29udGVudC91cGxvYWRzL3BsYXlncm91bmQvY29sYXppb25lLndlYnAiIGFsdD0iQnJlYWtmYXN0IHNlcnZlZCBvbiB0aGUgdGVycmFjZSI+DQogICAgPGRpdj4NCiAgICAgIDxwIGNsYXNzPSJhdS1leWVicm93Ij5CcmVha2Zhc3Q8L3A+DQogICAgICA8aDI+U2VydmVkIG9uIHRoZSB0ZXJyYWNlIHVudGlsIGVsZXZlbjwvaDI+DQogICAgICA8cD5QYXN0cmllcyBmcm9tIHRoZSBiYWtlcnkgZG93biB0aGUgc3RyZWV0LCBmcnVpdCBmcm9tIHRoZSBtYXJrZXQgdGhhdCBtb3JuaW5nLCBhbmQgY29mZmVlIHdvcnRoIGdldHRpbmcgdXAgZm9yLjwvcD4NCiAgICAgIDxwPkVsZXZlbiwgYmVjYXVzZSB5b3UgYXJlIG9uIGhvbGlkYXkg4oCUIGFuZCBiZWNhdXNlIHRoZSBnb29kIGJyZWFkIGFycml2ZXMgbGF0ZS48L3A+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KDQogIDxkaXYgY2xhc3M9ImF1LWNpdCI+DQogICAgPHA+4oCcV2UgY2FtZSBmb3IgdHdvIG5pZ2h0cyBhbmQgY2hhbmdlZCBvdXIgcGxhbnMgdG8gc3RheSBmb3VyLiBUaGUgYnJlYWtmYXN0IGFsb25lIHdhcyB3b3J0aCB0aGUgdHJpcC7igJ08L3A+DQogICAgPHNtYWxsPk1hcnRhICZhbXA7IEp1bGllbiDigJQgTHlvbiwgbGFzdCBTZXB0ZW1iZXI8L3NtYWxsPg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJhdS1mb25kbyI+DQogICAgPGltZyBzcmM9Imh0dHBzOi8vdHJhbnNsYXRlcm9ja2V0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvcGxheWdyb3VuZC9jZW50cm8ud2VicCIgYWx0PSJUaGUgb2xkIHRvd24gYXQgZHVzayI+DQogICAgPGRpdiBjbGFzcz0iYXUtZm9uZG8tdmVsIj48L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJhdS1mb25kby10eHQiPg0KICAgICAgPGRpdj4NCiAgICAgICAgPGgyPkV2ZXJ5dGhpbmcgd29ydGggc2VlaW5nIGlzIGEgd2FsayBhd2F5PC9oMj4NCiAgICAgICAgPHA+VGhlIGNhdGhlZHJhbCwgdGhlIG1hcmtldCBhbmQgdGhlIHNlYSBhcmUgYWxsIHdpdGhpbiB0ZW4gbWludXRlcyBvbiBmb290LiBXZSB3aWxsIHRlbGwgeW91IHdoZXJlIHRoZSBsb2NhbHMgYWN0dWFsbHkgZWF0IOKAlCBpdCBpcyBub3Qgd2hlcmUgdGhlIHNpZ25zIHBvaW50LjwvcD4NCiAgICAgICAgPGEgY2xhc3M9ImF1LWN0YSIgaHJlZj0iIyI+UGxhbiB5b3VyIHN0YXk8L2E+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCjwvZGl2Pg==' );\\n\\n\\\/* Senza questo WordPress toglie il <style> con kses e ne stampa il contenuto\\n   come testo: lo script gira senza un utente con unfiltered_html. Si sospende\\n   il filtro per il solo inserimento e lo si rimette subito. *\\\/\\nkses_remove_filters();\\n\\n$id = wp_insert_post( array(\\n\\t'post_title'   => 'Aurora Boutique Hotel',\\n\\t'post_name'    => 'aurora',\\n\\t'post_content' => '<!-- wp:html -->' . $c . '<!-- \\\/wp:html -->',\\n\\t'post_status'  => 'publish',\\n\\t'post_type'    => 'page',\\n) );\\nkses_init_filters();\\n\\nif ( $id && ! is_wp_error( $id ) ) {\\n\\tupdate_option( 'show_on_front', 'page' );\\n\\tupdate_option( 'page_on_front', $id );\\n}\\n\"},{\"step\":\"runPHP\",\"code\":\"<?php require_once '\\\/wordpress\\\/wp-load.php';\\n\\\/* trr-demo-traduzioni (17\\\/10\\\/2026): la demo Aurora gia' tradotta in it\\\/es\\\/de\\\/fr, cosi' l'anteprima mostra subito\\n   il sito tradotto anche dove il traduttore del browser non e' disponibile. Sorgente leggibile:\\n   _ssh\\\/anteprima-demo\\\/prepara-blueprint.py *\\\/\\n$dati = json_decode( base64_decode( 'W3sibyI6ICJBIHF1aWV0IGVzY2FwZSBpbiB0aGUgb2xkIHRvd24iLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJVbiByaWZ1Z2lvIHRyYW5xdWlsbG8gbmVsIGNlbnRybyBzdG9yaWNvIiwgImRlIjogIkVpbiBydWhpZ2VyIFLDvGNrenVnc29ydCBpbiBkZXIgQWx0c3RhZHQiLCAiZnIiOiAiVW5lIGVzY2FwYWRlIHBhaXNpYmxlIGRhbnMgbGEgdmllaWxsZSB2aWxsZSIsICJlcyI6ICJVbiByZWZ1Z2lvIHRyYW5xdWlsbyBlbiBlbCBjYXNjbyBhbnRpZ3VvIn19LCB7Im8iOiAiU2l4IHJvb21zIGFib3ZlIGEgY291cnR5YXJkIG9mIGxlbW9uIHRyZWVzLCB0d28gbWludXRlcyBmcm9tIHRoZSBjYXRoZWRyYWwuIEJyZWFrZmFzdCBtYWRlIGJ5IGhhbmQsIGFuZCB0aGUga2luZCBvZiBzaWxlbmNlIHlvdSBjYW1lIGhlcmUgZm9yLiIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIlNlaSBjYW1lcmUgc3UgdW4gY29ydGlsZSBkaSBsaW1vbmksIGEgZHVlIG1pbnV0aSBkYWxsYSBjYXR0ZWRyYWxlLiBDb2xhemlvbmUgZmF0dGEgYSBtYW5vLCBlIHF1ZWwgc2lsZW56aW8gcGVyIGN1aSBzZWkgdmVudXRvIGZpbiBxdWkuIiwgImRlIjogIlNlY2hzIFppbW1lciDDvGJlciBlaW5lbSBJbm5lbmhvZiBtaXQgWml0cm9uZW5iw6R1bWVuLCB6d2VpIE1pbnV0ZW4gdm9uIGRlciBLYXRoZWRyYWxlLiBFaW4gRnLDvGhzdMO8Y2sgbWl0IHZpZWwgSGFuZGFyYmVpdCB1bmQgZ2VuYXUgZGllIFJ1aGUsIGbDvHIgZGllIFNpZSBnZWtvbW1lbiBzaW5kLiIsICJmciI6ICJTaXggY2hhbWJyZXMgYXUtZGVzc3VzIGQndW5lIGNvdXIgZGUgY2l0cm9ubmllcnMsIMOgIGRldXggbWludXRlcyBkZSBsYSBjYXRow6lkcmFsZS4gVW4gcGV0aXQtZMOpamV1bmVyIGZhaXQgbWFpc29uLCBldCBsZSBzaWxlbmNlIHF1ZSB2b3VzIMOqdGVzIHZlbnUgY2hlcmNoZXIuIiwgImVzIjogIlNlaXMgaGFiaXRhY2lvbmVzIHNvYnJlIHVuIHBhdGlvIGRlIGxpbW9uZXJvcywgYSBkb3MgbWludXRvcyBkZSBsYSBjYXRlZHJhbC4gRGVzYXl1bm8gaGVjaG8gYSBtYW5vIHkgZWwgc2lsZW5jaW8gcXVlIHZpbmlzdGUgYSBidXNjYXIuIn19LCB7Im8iOiAiQ2hlY2sgYXZhaWxhYmlsaXR5IiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiVmVyaWZpY2EgZGlzcG9uaWJpbGl0w6AiLCAiZGUiOiAiVmVyZsO8Z2JhcmtlaXQgcHLDvGZlbiIsICJmciI6ICJWw6lyaWZpZXIgbGVzIGRpc3BvbmliaWxpdMOpcyIsICJlcyI6ICJWZXIgZGlzcG9uaWJpbGlkYWQifX0sIHsibyI6ICJTZWUgdGhlIHJvb21zIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiR3VhcmRhIGxlIGNhbWVyZSIsICJkZSI6ICJaaW1tZXIgYW5zZWhlbiIsICJmciI6ICJWb2lyIGxlcyBjaGFtYnJlcyIsICJlcyI6ICJWZXIgbGFzIGhhYml0YWNpb25lcyJ9fSwgeyJvIjogInJvb21zLCBlYWNoIGRpZmZlcmVudCIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogImNhbWVyZSwgdHV0dGUgZGl2ZXJzZSIsICJkZSI6ICJaaW1tZXIsIGplZGVzIGFuZGVycyIsICJmciI6ICJjaGFtYnJlcywgdG91dGVzIGRpZmbDqXJlbnRlcyIsICJlcyI6ICJoYWJpdGFjaW9uZXMsIHRvZGFzIGRpc3RpbnRhcyJ9fSwgeyJvIjogIndhbGsgdG8gdGhlIGNhdGhlZHJhbCIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogImEgcGllZGkgZGFsbGEgY2F0dGVkcmFsZSIsICJkZSI6ICJ6dSBGdcOfIHp1ciBLYXRoZWRyYWxlIiwgImZyIjogIsOgIHBpZWQgZGUgbGEgY2F0aMOpZHJhbGUiLCAiZXMiOiAiYSBwaWUgaGFzdGEgbGEgY2F0ZWRyYWwifX0sIHsibyI6ICJhdmVyYWdlIGd1ZXN0IHJhdGluZyIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogInZvdG8gbWVkaW8gZGVnbGkgb3NwaXRpIiwgImRlIjogImR1cmNoc2Nobml0dGxpY2hlIEfDpHN0ZWJld2VydHVuZyIsICJmciI6ICJub3RlIG1veWVubmUgZGVzIGNsaWVudHMiLCAiZXMiOiAibm90YSBtZWRpYSBkZSBsb3MgaHXDqXNwZWRlcyJ9fSwgeyJvIjogInRoZSB5ZWFyIGl0IHdhcyBidWlsdCIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogImwnYW5ubyBpbiBjdWkgZnUgY29zdHJ1aXRvIiwgImRlIjogImRhcyBCYXVqYWhyIiwgImZyIjogImwnYW5uw6llIGRlIHNhIGNvbnN0cnVjdGlvbiIsICJlcyI6ICJlbCBhw7FvIGVuIHF1ZSBzZSBjb25zdHJ1ecOzIn19LCB7Im8iOiAiVGhlIHJvb21zIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiTGUgY2FtZXJlIiwgImRlIjogIkRpZSBaaW1tZXIiLCAiZnIiOiAiTGVzIGNoYW1icmVzIiwgImVzIjogIkxhcyBoYWJpdGFjaW9uZXMifX0sIHsibyI6ICJNb3JuaW5ncyB0aGF0IHN0YXJ0IHdpdGggbGlnaHQsIG5vdCB3aXRoIGFuIGFsYXJtIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiTWF0dGluZSBjaGUgaW5pemlhbm8gY29uIGxhIGx1Y2UsIG5vbiBjb24gbGEgc3ZlZ2xpYSIsICJkZSI6ICJNb3JnZW4sIGRpZSBtaXQgTGljaHQgYmVnaW5uZW4sIG5pY2h0IG1pdCBkZW0gV2Vja2VyIiwgImZyIjogIkRlcyBtYXRpbnMgcXVpIGNvbW1lbmNlbnQgYXZlYyBsYSBsdW1pw6hyZSwgcGFzIGF2ZWMgdW4gcsOpdmVpbCIsICJlcyI6ICJNYcOxYW5hcyBxdWUgZW1waWV6YW4gY29uIGxhIGx1eiwgbm8gY29uIGVsIGRlc3BlcnRhZG9yIn19LCB7Im8iOiAiTGluZW4gc2hlZXRzLCB3b29kZW4gc2h1dHRlcnMgdGhhdCBvcGVuIG9udG8gdGhlIHJvb2Z0b3BzLCBhbmQgZmxvb3JzIG9mIG9yaWdpbmFsIHRpbGUuIE5vIHR3byByb29tcyBhcmUgdGhlIHNhbWUsIGJlY2F1c2UgdGhlIGJ1aWxkaW5nIG5ldmVyIHdhcy4iLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJMZW56dW9sYSBkaSBsaW5vLCBwZXJzaWFuZSBkaSBsZWdubyBjaGUgc2kgYXByb25vIHN1aSB0ZXR0aSBlIHBhdmltZW50aSBpbiBtYWlvbGljYSBvcmlnaW5hbGUuIE5lc3N1bmEgY2FtZXJhIMOoIHVndWFsZSBhIHVuJ2FsdHJhLCBwZXJjaMOpIGwnZWRpZmljaW8gbm9uIGxvIMOoIG1haSBzdGF0by4iLCAiZGUiOiAiTGVpbmVuYmV0dHfDpHNjaGUsIEhvbHpsw6RkZW4sIGRpZSBzaWNoIHp1IGRlbiBEw6RjaGVybiDDtmZmbmVuLCB1bmQgQsO2ZGVuIGF1cyBvcmlnaW5hbGVuIEZsaWVzZW4uIEtlaW4gWmltbWVyIGdsZWljaHQgZGVtIGFuZGVyZW4sIGRlbm4gZGFzIEhhdXMgd2FyIG5pZSBnbGVpY2hmw7ZybWlnLiIsICJmciI6ICJEZXMgZHJhcHMgZW4gbGluLCBkZXMgdm9sZXRzIGVuIGJvaXMgcXVpIHMnb3V2cmVudCBzdXIgbGVzIHRvaXRzIGV0IGRlcyBzb2xzIGVuIGNhcnJlYXV4IGQnb3JpZ2luZS4gQXVjdW5lIGNoYW1icmUgbmUgc2UgcmVzc2VtYmxlLCBjYXIgbGUgYsOidGltZW50IG4nYSBqYW1haXMgw6l0w6kgdW5pZm9ybWUuIiwgImVzIjogIlPDoWJhbmFzIGRlIGxpbm8sIGNvbnRyYXZlbnRhbmFzIGRlIG1hZGVyYSBxdWUgc2UgYWJyZW4gYSBsb3MgdGVqYWRvcyB5IHN1ZWxvcyBkZSBiYWxkb3NhIG9yaWdpbmFsLiBObyBoYXkgZG9zIGhhYml0YWNpb25lcyBpZ3VhbGVzLCBwb3JxdWUgZWwgZWRpZmljaW8gbnVuY2EgbG8gZnVlLiJ9fSwgeyJvIjogIkFpciBjb25kaXRpb25pbmcgYW5kIGZhc3QgV2ktRmkgdGhyb3VnaG91dCIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIkFyaWEgY29uZGl6aW9uYXRhIGUgV2ktRmkgdmVsb2NlIG92dW5xdWUiLCAiZGUiOiAiS2xpbWFhbmxhZ2UgdW5kIHNjaG5lbGxlcyBXTEFOIGltIGdhbnplbiBIYXVzIiwgImZyIjogIkNsaW1hdGlzYXRpb24gZXQgV2ktRmkgcmFwaWRlIHBhcnRvdXQiLCAiZXMiOiAiQWlyZSBhY29uZGljaW9uYWRvIHkgd2lmaSByw6FwaWRvIGVuIHRvZG8gZWwgZWRpZmljaW8ifX0sIHsibyI6ICJBIHNtYWxsIGJhbGNvbnkgaW4gZXZlcnkgcm9vbSIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIlVuIHBpY2NvbG8gYmFsY29uZSBpbiBvZ25pIGNhbWVyYSIsICJkZSI6ICJFaW4ga2xlaW5lciBCYWxrb24gaW4gamVkZW0gWmltbWVyIiwgImZyIjogIlVuIHBldGl0IGJhbGNvbiBkYW5zIGNoYXF1ZSBjaGFtYnJlIiwgImVzIjogIlVuIHBlcXVlw7FvIGJhbGPDs24gZW4gY2FkYSBoYWJpdGFjacOzbiJ9fSwgeyJvIjogIkxhdGUgY2hlY2tvdXQgd2hlbmV2ZXIgd2UgY2FuIG1hbmFnZSBpdCIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIkNoZWNrLW91dCB0YXJkaXZvIG9nbmkgdm9sdGEgY2hlIHBvc3NpYW1vIiwgImRlIjogIlNww6R0ZXIgQ2hlY2stb3V0LCB3YW5uIGltbWVyIGVzIG3DtmdsaWNoIGlzdCIsICJmciI6ICJEw6lwYXJ0IHRhcmRpZiBkw6hzIHF1ZSBjJ2VzdCBwb3NzaWJsZSIsICJlcyI6ICJTYWxpZGEgdGFyZMOtYSBzaWVtcHJlIHF1ZSBwb2RhbW9zIn19LCB7Im8iOiAiQnJlYWtmYXN0IiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiQ29sYXppb25lIiwgImRlIjogIkZyw7xoc3TDvGNrIiwgImZyIjogIlBldGl0LWTDqWpldW5lciIsICJlcyI6ICJEZXNheXVubyJ9fSwgeyJvIjogIlNlcnZlZCBvbiB0aGUgdGVycmFjZSB1bnRpbCBlbGV2ZW4iLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJTZXJ2aXRhIGluIHRlcnJhenphIGZpbm8gYWxsZSB1bmRpY2kiLCAiZGUiOiAiU2VydmllcnQgYXVmIGRlciBUZXJyYXNzZSBiaXMgZWxmIFVociIsICJmciI6ICJTZXJ2aSBlbiB0ZXJyYXNzZSBqdXNxdSfDoCBvbnplIGhldXJlcyIsICJlcyI6ICJTZXJ2aWRvIGVuIGxhIHRlcnJhemEgaGFzdGEgbGFzIG9uY2UifX0sIHsibyI6ICJQYXN0cmllcyBmcm9tIHRoZSBiYWtlcnkgZG93biB0aGUgc3RyZWV0LCBmcnVpdCBmcm9tIHRoZSBtYXJrZXQgdGhhdCBtb3JuaW5nLCBhbmQgY29mZmVlIHdvcnRoIGdldHRpbmcgdXAgZm9yLiIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIkRvbGNpIGRhbCBmb3JubyBpbiBmb25kbyBhbGxhIHN0cmFkYSwgZnJ1dHRhIGRlbCBtZXJjYXRvIGRpIHF1ZWxsYSBtYXR0aW5hIGUgdW4gY2FmZsOoIHBlciBjdWkgdmFsZSBsYSBwZW5hIGFsemFyc2kuIiwgImRlIjogIkdlYsOkY2sgdm9uIGRlciBCw6Rja2VyZWkgYW4gZGVyIEVja2UsIE9ic3Qgdm9tIE1hcmt0IGFtIHNlbGJlbiBNb3JnZW4gdW5kIGVpbiBLYWZmZWUsIGbDvHIgZGVuIHNpY2ggZGFzIEF1ZnN0ZWhlbiBsb2hudC4iLCAiZnIiOiAiRGVzIHZpZW5ub2lzZXJpZXMgZGUgbGEgYm91bGFuZ2VyaWUgZCdlbiBiYXMsIGRlcyBmcnVpdHMgZHUgbWFyY2jDqSBkdSBtYXRpbiBldCB1biBjYWbDqSBxdWkgdmF1dCBsYSBwZWluZSBkZSBzZSBsZXZlci4iLCAiZXMiOiAiQm9sbGVyw61hIGRlIGxhIHBhbmFkZXLDrWEgZGUgbGEgZXNxdWluYSwgZnJ1dGEgZGVsIG1lcmNhZG8gZGUgZXNhIG1pc21hIG1hw7FhbmEgeSB1biBjYWbDqSBxdWUgbWVyZWNlIGxldmFudGFyc2UuIn19LCB7Im8iOiAiRWxldmVuLCBiZWNhdXNlIHlvdSBhcmUgb24gaG9saWRheSDigJQgYW5kIGJlY2F1c2UgdGhlIGdvb2QgYnJlYWQgYXJyaXZlcyBsYXRlLiIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIkxlIHVuZGljaSwgcGVyY2jDqSBzZWkgaW4gdmFjYW56YSDigJQgZSBwZXJjaMOpIGlsIHBhbmUgYnVvbm8gYXJyaXZhIHRhcmRpLiIsICJkZSI6ICJFbGYgVWhyLCB3ZWlsIFNpZSBpbSBVcmxhdWIgc2luZCDigJQgdW5kIHdlaWwgZGFzIGd1dGUgQnJvdCBzcMOkdCBrb21tdC4iLCAiZnIiOiAiT256ZSBoZXVyZXMsIHBhcmNlIHF1ZSB2b3VzIMOqdGVzIGVuIHZhY2FuY2VzIOKAlCBldCBwYXJjZSBxdWUgbGUgYm9uIHBhaW4gYXJyaXZlIHRhcmQuIiwgImVzIjogIkEgbGFzIG9uY2UsIHBvcnF1ZSBlc3TDoXMgZGUgdmFjYWNpb25lcyDigJQgeSBwb3JxdWUgZWwgYnVlbiBwYW4gbGxlZ2EgdGFyZGUuIn19LCB7Im8iOiAi4oCcV2UgY2FtZSBmb3IgdHdvIG5pZ2h0cyBhbmQgY2hhbmdlZCBvdXIgcGxhbnMgdG8gc3RheSBmb3VyLiBUaGUgYnJlYWtmYXN0IGFsb25lIHdhcyB3b3J0aCB0aGUgdHJpcC7igJ0iLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICLigJxTaWFtbyB2ZW51dGkgcGVyIGR1ZSBub3R0aSBlIGFiYmlhbW8gY2FtYmlhdG8gaSBwaWFuaSBwZXIgcmVzdGFybmUgcXVhdHRyby4gU29sbyBsYSBjb2xhemlvbmUgdmFsZXZhIGlsIHZpYWdnaW8u4oCdIiwgImRlIjogIuKAnldpciBrYW1lbiBmw7xyIHp3ZWkgTsOkY2h0ZSB1bmQgaGFiZW4gdW5zZXJlIFBsw6RuZSBnZcOkbmRlcnQsIHVtIHZpZXIgenUgYmxlaWJlbi4gQWxsZWluIGRhcyBGcsO8aHN0w7xjayB3YXIgZGllIFJlaXNlIHdlcnQu4oCcIiwgImZyIjogIsKrIE5vdXMgc29tbWVzIHZlbnVzIHBvdXIgZGV1eCBudWl0cyBldCBhdm9ucyBjaGFuZ8OpIG5vcyBwbGFucyBwb3VyIGVuIHJlc3RlciBxdWF0cmUuIExlIHBldGl0LWTDqWpldW5lciDDoCBsdWkgc2V1bCB2YWxhaXQgbGUgdm95YWdlLiDCuyIsICJlcyI6ICLCq1Zpbmltb3MgcG9yIGRvcyBub2NoZXMgeSBjYW1iaWFtb3MgZGUgcGxhbmVzIHBhcmEgcXVlZGFybm9zIGN1YXRyby4gU29sbyBlbCBkZXNheXVubyB5YSB2YWzDrWEgZWwgdmlhamUuwrsifX0sIHsibyI6ICJNYXJ0YSAmIEp1bGllbiDigJQgTHlvbiwgbGFzdCBTZXB0ZW1iZXIiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJNYXJ0YSAmIEp1bGllbiDigJQgTGlvbmUsIGxvIHNjb3JzbyBzZXR0ZW1icmUiLCAiZGUiOiAiTWFydGEgJiBKdWxpZW4g4oCUIEx5b24sIGxldHp0ZW4gU2VwdGVtYmVyIiwgImZyIjogIk1hcnRhICYgSnVsaWVuIOKAlCBMeW9uLCBlbiBzZXB0ZW1icmUgZGVybmllciIsICJlcyI6ICJNYXJ0YSB5IEp1bGllbiDigJQgTHlvbiwgZWwgcGFzYWRvIHNlcHRpZW1icmUifX0sIHsibyI6ICJFdmVyeXRoaW5nIHdvcnRoIHNlZWluZyBpcyBhIHdhbGsgYXdheSIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIlR1dHRvIGNpw7IgY2hlIHZhbGUgbGEgcGVuYSB2ZWRlcmUgw6ggYSBkdWUgcGFzc2kiLCAiZGUiOiAiQWxsZXMgU2VoZW5zd2VydGUgaXN0IHp1IEZ1w58gZXJyZWljaGJhciIsICJmciI6ICJUb3V0IGNlIHF1aSB2YXV0IGxlIGTDqXRvdXIgZXN0IMOgIGRldXggcGFzIiwgImVzIjogIlRvZG8gbG8gcXVlIG1lcmVjZSBsYSBwZW5hIGVzdMOhIGEgdW4gcGFzZW8ifX0sIHsibyI6ICJUaGUgY2F0aGVkcmFsLCB0aGUgbWFya2V0IGFuZCB0aGUgc2VhIGFyZSBhbGwgd2l0aGluIHRlbiBtaW51dGVzIG9uIGZvb3QuIFdlIHdpbGwgdGVsbCB5b3Ugd2hlcmUgdGhlIGxvY2FscyBhY3R1YWxseSBlYXQg4oCUIGl0IGlzIG5vdCB3aGVyZSB0aGUgc2lnbnMgcG9pbnQuIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiTGEgY2F0dGVkcmFsZSwgaWwgbWVyY2F0byBlIGlsIG1hcmUgc29ubyB0dXR0aSBhIGRpZWNpIG1pbnV0aSBhIHBpZWRpLiBUaSBkaXJlbW8gZG92ZSBtYW5naWFubyBkYXZ2ZXJvIHF1ZWxsaSBkZWwgcG9zdG8g4oCUIG5vbiDDqCBkb3ZlIGluZGljYW5vIGkgY2FydGVsbGkuIiwgImRlIjogIkRpZSBLYXRoZWRyYWxlLCBkZXIgTWFya3QgdW5kIGRhcyBNZWVyIGxpZWdlbiBhbGxlIHplaG4gR2VobWludXRlbiBlbnRmZXJudC4gV2lyIHZlcnJhdGVuIElobmVuLCB3byBkaWUgRWluaGVpbWlzY2hlbiB3aXJrbGljaCBlc3NlbiDigJQgZXMgaXN0IG5pY2h0IGRvcnQsIHdvaGluIGRpZSBTY2hpbGRlciB6ZWlnZW4uIiwgImZyIjogIkxhIGNhdGjDqWRyYWxlLCBsZSBtYXJjaMOpIGV0IGxhIG1lciBzb250IHRvdXMgw6AgZGl4IG1pbnV0ZXMgw6AgcGllZC4gTm91cyB2b3VzIGRpcm9ucyBvw7kgbWFuZ2VudCB2cmFpbWVudCBsZXMgaGFiaXRhbnRzIOKAlCBjZSBuJ2VzdCBwYXMgbMOgIG\\\/DuSBwb2ludGVudCBsZXMgcGFubmVhdXguIiwgImVzIjogIkxhIGNhdGVkcmFsLCBlbCBtZXJjYWRvIHkgZWwgbWFyIGVzdMOhbiBhIG1lbm9zIGRlIGRpZXogbWludXRvcyBhIHBpZS4gVGUgZGlyZW1vcyBkw7NuZGUgY29tZW4gZGUgdmVyZGFkIGxvcyB2ZWNpbm9zIOKAlCBubyBlcyBkb25kZSBhcHVudGFuIGxvcyBjYXJ0ZWxlcy4ifX0sIHsibyI6ICJQbGFuIHlvdXIgc3RheSIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIk9yZ2FuaXp6YSBpbCB0dW8gc29nZ2lvcm5vIiwgImRlIjogIkF1ZmVudGhhbHQgcGxhbmVuIiwgImZyIjogIlByw6lwYXJlciB2b3RyZSBzw6lqb3VyIiwgImVzIjogIlBsYW5pZmljYSB0dSBlc3RhbmNpYSJ9fSwgeyJvIjogIjIgbWluIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiMiBtaW4iLCAiZGUiOiAiMiBNaW4uIiwgImZyIjogIjIgbWluIiwgImVzIjogIjIgbWluIn19LCB7Im8iOiAiUm9vbXMiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJDYW1lcmUiLCAiZGUiOiAiWmltbWVyIiwgImZyIjogIkNoYW1icmVzIn19LCB7Im8iOiAiVGhlIG9sZCB0b3duIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiSWwgY2VudHJvIHN0b3JpY28iLCAiZGUiOiAiRGllIEFsdHN0YWR0IiwgImZyIjogIkxhIHZpZWlsbGUgdmlsbGUifX0sIHsibyI6ICJCb29rIGEgc3RheSIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIlByZW5vdGEgdW4gc29nZ2lvcm5vIiwgImRlIjogIkF1ZmVudGhhbHQgYnVjaGVuIiwgImZyIjogIlLDqXNlcnZlciB1biBzw6lqb3VyIn19LCB7Im8iOiAiU2tpcCB0byBjb250ZW50IiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiVmFpIGFsIGNvbnRlbnV0byIsICJlcyI6ICJJciBhbCBjb250ZW5pZG8iLCAiZGUiOiAiWnVtIEluaGFsdCBzcHJpbmdlbiIsICJmciI6ICJBbGxlciBhdSBjb250ZW51In19LCB7Im8iOiAiTXkgV29yZFByZXNzIFdlYnNpdGUiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJJbCBtaW8gc2l0byBXb3JkUHJlc3MiLCAiZXMiOiAiTWkgc2l0aW8gd2ViIGRlIFdvcmRQcmVzcyIsICJkZSI6ICJNZWluZSBXb3JkUHJlc3MtV2Vic2l0ZSIsICJmciI6ICJNb24gc2l0ZSBXb3JkUHJlc3MifX0sIHsibyI6ICJBdXJvcmEgQm91dGlxdWUgSG90ZWwiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJBdXJvcmEgQm91dGlxdWUgSG90ZWwiLCAiZXMiOiAiQXVyb3JhIEJvdXRpcXVlIEhvdGVsIiwgImRlIjogIkF1cm9yYSBCb3V0aXF1ZSBIb3RlbCIsICJmciI6ICJBdXJvcmEgQm91dGlxdWUgSMO0dGVsIn19LCB7Im8iOiAiU2FtcGxlIFBhZ2UiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJQYWdpbmEgZGkgZXNlbXBpbyIsICJlcyI6ICJQw6FnaW5hIGRlIGVqZW1wbG8iLCAiZGUiOiAiQmVpc3BpZWwtU2VpdGUiLCAiZnIiOiAiUGFnZSBk4oCZZXhlbXBsZSJ9fSwgeyJvIjogIkJsb2ciLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJCbG9nIiwgImVzIjogIkJsb2ciLCAiZGUiOiAiQmxvZyIsICJmciI6ICJCbG9nIn19LCB7Im8iOiAiQWJvdXQiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJDaGkgc2lhbW8iLCAiZXMiOiAiUXVpw6luZXMgc29tb3MiLCAiZGUiOiAiw5xiZXIgdW5zIiwgImZyIjogIsOAIHByb3BvcyJ9fSwgeyJvIjogIkZBUXMiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJEb21hbmRlIGZyZXF1ZW50aSIsICJlcyI6ICJQcmVndW50YXMgZnJlY3VlbnRlcyIsICJkZSI6ICJIw6R1ZmlnZSBGcmFnZW4iLCAiZnIiOiAiUXVlc3Rpb25zIGZyw6lxdWVudGVzIn19LCB7Im8iOiAiQXV0aG9ycyIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIkF1dG9yaSIsICJlcyI6ICJBdXRvcmVzIiwgImRlIjogIkF1dG9yZW4iLCAiZnIiOiAiQXV0ZXVycyJ9fSwgeyJvIjogIkV2ZW50cyIsICJ0IjogInRleHQiLCAiYyI6ICIiLCAidHIiOiB7Iml0IjogIkV2ZW50aSIsICJlcyI6ICJFdmVudG9zIiwgImRlIjogIlZlcmFuc3RhbHR1bmdlbiIsICJmciI6ICLDiXbDqW5lbWVudHMifX0sIHsibyI6ICJTaG9wIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiTmVnb3ppbyIsICJlcyI6ICJUaWVuZGEiLCAiZGUiOiAiU2hvcCIsICJmciI6ICJCb3V0aXF1ZSJ9fSwgeyJvIjogIlBhdHRlcm5zIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiUGF0dGVybiIsICJlcyI6ICJQYXRyb25lcyIsICJkZSI6ICJWb3JsYWdlbiIsICJmciI6ICJDb21wb3NpdGlvbnMifX0sIHsibyI6ICJUaGVtZXMiLCAidCI6ICJ0ZXh0IiwgImMiOiAiIiwgInRyIjogeyJpdCI6ICJUZW1pIiwgImVzIjogIlRlbWFzIiwgImRlIjogIlRoZW1lcyIsICJmciI6ICJUaMOobWVzIn19LCB7Im8iOiAiVHdlbnR5IFR3ZW50eS1GaXZlIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiVHdlbnR5IFR3ZW50eS1GaXZlIiwgImVzIjogIlR3ZW50eSBUd2VudHktRml2ZSIsICJkZSI6ICJUd2VudHkgVHdlbnR5LUZpdmUiLCAiZnIiOiAiVHdlbnR5IFR3ZW50eS1GaXZlIn19LCB7Im8iOiAiRGVzaWduZWQgd2l0aCA8MT5Xb3JkUHJlc3M8LzE+IiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiUmVhbGl6emF0byBjb24gPDE+V29yZFByZXNzPC8xPiIsICJlcyI6ICJEaXNlw7FhZG8gY29uIDwxPldvcmRQcmVzczwvMT4iLCAiZGUiOiAiR2VzdGFsdGV0IG1pdCA8MT5Xb3JkUHJlc3M8LzE+IiwgImZyIjogIkNvbsOndSBhdmVjIDwxPldvcmRQcmVzczwvMT4ifX0sIHsibyI6ICJEZXNpZ25lZCB3aXRoIiwgInQiOiAidGV4dCIsICJjIjogIiIsICJ0ciI6IHsiaXQiOiAiUmVhbGl6emF0byBjb24iLCAiZXMiOiAiRGlzZcOxYWRvIGNvbiIsICJkZSI6ICJHZXN0YWx0ZXQgbWl0IiwgImZyIjogIkNvbsOndSBhdmVjIn19LCB7Im8iOiAiVGhlIGNvdXJ0eWFyZCBhdCBnb2xkZW4gaG91ciIsICJ0IjogImF0dHJpYnV0ZSIsICJjIjogImFsdCIsICJ0ciI6IHsiaXQiOiAiSWwgY29ydGlsZSBhbGzigJlvcmEgZG9yYXRhIiwgImVzIjogIkVsIHBhdGlvIGEgbGEgaG9yYSBkb3JhZGEiLCAiZGUiOiAiRGVyIElubmVuaG9mIHp1ciBnb2xkZW5lbiBTdHVuZGUiLCAiZnIiOiAiTGEgY291ciDDoCBs4oCZaGV1cmUgZG9yw6llIn19LCB7Im8iOiAiQSBzdW5saXQgcm9vbSB3aXRoIG9wZW4gc2h1dHRlcnMiLCAidCI6ICJhdHRyaWJ1dGUiLCAiYyI6ICJhbHQiLCAidHIiOiB7Iml0IjogIlVuYSBjYW1lcmEgcGllbmEgZGkgc29sZSBjb24gbGUgcGVyc2lhbmUgYXBlcnRlIiwgImVzIjogIlVuYSBoYWJpdGFjacOzbiBzb2xlYWRhIGNvbiBsYXMgY29udHJhdmVudGFuYXMgYWJpZXJ0YXMiLCAiZGUiOiAiRWluIHNvbm5pZ2VzIFppbW1lciBtaXQgb2ZmZW5lbiBGZW5zdGVybMOkZGVuIiwgImZyIjogIlVuZSBjaGFtYnJlIGVuc29sZWlsbMOpZSBhdXggdm9sZXRzIG91dmVydHMifX0sIHsibyI6ICJCcmVha2Zhc3Qgc2VydmVkIG9uIHRoZSB0ZXJyYWNlIiwgInQiOiAiYXR0cmlidXRlIiwgImMiOiAiYWx0IiwgInRyIjogeyJpdCI6ICJMYSBjb2xhemlvbmUgc2Vydml0YSBpbiB0ZXJyYXp6YSIsICJlcyI6ICJFbCBkZXNheXVubyBzZXJ2aWRvIGVuIGxhIHRlcnJhemEiLCAiZGUiOiAiRnLDvGhzdMO8Y2sgYXVmIGRlciBUZXJyYXNzZSIsICJmciI6ICJMZSBwZXRpdC1kw6lqZXVuZXIgc2Vydmkgc3VyIGxhIHRlcnJhc3NlIn19LCB7Im8iOiAiVGhlIG9sZCB0b3duIGF0IGR1c2siLCAidCI6ICJhdHRyaWJ1dGUiLCAiYyI6ICJhbHQiLCAidHIiOiB7Iml0IjogIklsIGNlbnRybyBzdG9yaWNvIGFsIHRyYW1vbnRvIiwgImVzIjogIkVsIGNhc2NvIGFudGlndW8gYWwgYW5vY2hlY2VyIiwgImRlIjogIkRpZSBBbHRzdGFkdCBpbiBkZXIgQWJlbmRkw6RtbWVydW5nIiwgImZyIjogIkxhIHZpZWlsbGUgdmlsbGUgYXUgY3LDqXB1c2N1bGUifX0sIHsibyI6ICJPcGVuIG1lbnUiLCAidCI6ICJhdHRyaWJ1dGUiLCAiYyI6ICJhcmlhLWxhYmVsIiwgInRyIjogeyJpdCI6ICJBcHJpIGlsIG1lbnUiLCAiZXMiOiAiQWJyaXIgbWVuw7oiLCAiZGUiOiAiTWVuw7wgw7ZmZm5lbiIsICJmciI6ICJPdXZyaXIgbGUgbWVudSJ9fSwgeyJvIjogIkNsb3NlIG1lbnUiLCAidCI6ICJhdHRyaWJ1dGUiLCAiYyI6ICJhcmlhLWxhYmVsIiwgInRyIjogeyJpdCI6ICJDaGl1ZGkgaWwgbWVudSIsICJlcyI6ICJDZXJyYXIgbWVuw7oiLCAiZGUiOiAiTWVuw7wgc2NobGllw59lbiIsICJmciI6ICJGZXJtZXIgbGUgbWVudSJ9fSwgeyJvIjogIk15IFdvcmRQcmVzcyBXZWJzaXRlIiwgInQiOiAibWV0YSIsICJjIjogInRpdGxlIiwgInRyIjogeyJpdCI6ICJJbCBtaW8gc2l0byBXb3JkUHJlc3MiLCAiZXMiOiAiTWkgc2l0aW8gd2ViIGRlIFdvcmRQcmVzcyIsICJkZSI6ICJNZWluZSBXb3JkUHJlc3MtV2Vic2l0ZSIsICJmciI6ICJNb24gc2l0ZSBXb3JkUHJlc3MifX0sIHsibyI6ICJBdXJvcmEgQm91dGlxdWUgSG90ZWwg4oCTIE15IFdvcmRQcmVzcyBXZWJzaXRlIiwgInQiOiAibWV0YSIsICJjIjogInRpdGxlIiwgInRyIjogeyJpdCI6ICJBdXJvcmEgQm91dGlxdWUgSG90ZWwg4oCTIElsIG1pbyBzaXRvIFdvcmRQcmVzcyIsICJlcyI6ICJBdXJvcmEgQm91dGlxdWUgSG90ZWwg4oCTIE1pIHNpdGlvIHdlYiBkZSBXb3JkUHJlc3MiLCAiZGUiOiAiQXVyb3JhIEJvdXRpcXVlIEhvdGVsIOKAkyBNZWluZSBXb3JkUHJlc3MtV2Vic2l0ZSIsICJmciI6ICJBdXJvcmEgQm91dGlxdWUgSMO0dGVsIOKAkyBNb24gc2l0ZSBXb3JkUHJlc3MifX1d' ), true );\\n$ok = 0;\\n\\\/* in Playground il passo gira prima che il plugin abbia creato le sue tabelle (prima prova: 0 frasi salvate) *\\\/\\nif ( class_exists( '\\\\\\\\TranslateRocket\\\\\\\\Database' ) && array() !== \\\\TranslateRocket\\\\Database::missing_tables() ) { \\\\TranslateRocket\\\\Database::create_tables(); }\\n\\\/* Playground usa SQLite: Strings::save_by_source della 1.8.8 fa un \\u00abON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)\\u00bb\\n   che SQLite rifiuta (corretto nella 1.8.9). Qui: inserimento semplice, id riletto dall'impronta, poi save_translation. *\\\/\\nif ( is_array( $dati ) && class_exists( '\\\\\\\\TranslateRocket\\\\\\\\Strings' ) ) {\\n\\tglobal $wpdb;\\n\\t$tab = \\\\TranslateRocket\\\\Database::strings_table();\\n\\tforeach ( $dati as $r ) {\\n\\t\\t$ctx  = '' === $r['c'] ? null : $r['c'];\\n\\t\\t$hash = \\\\TranslateRocket\\\\Strings::hash( $r['o'], $r['t'], $ctx );\\n\\t\\t$now  = current_time( 'mysql' );\\n\\t\\t$wpdb->query( $wpdb->prepare( \\\"INSERT INTO {$tab} (string_hash, text_hash, original, context, type, first_seen, last_seen) VALUES (%s, %s, %s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE last_seen = VALUES(last_seen)\\\", $hash, sha1( $r['o'] ), $r['o'], (string) $ctx, $r['t'], $now, $now ) );\\n\\t\\t$id = (int) $wpdb->get_var( $wpdb->prepare( \\\"SELECT id FROM {$tab} WHERE string_hash = %s\\\", $hash ) );\\n\\t\\tif ( ! $id ) { continue; }\\n\\t\\tforeach ( $r['tr'] as $l => $t ) {\\n\\t\\t\\tif ( \\\\TranslateRocket\\\\Strings::save_translation( $id, $l, $t, 2, 'visual' ) ) { $ok++; }\\n\\t\\t}\\n\\t}\\n\\tif ( class_exists( '\\\\\\\\TranslateRocket\\\\\\\\Cache' ) ) { \\\\TranslateRocket\\\\Cache::flush(); }\\n}\\nupdate_option( 'trrocket_demo_preloaded', $ok, false );\\n\"}]}"}},"all_blocks":{"translaterocket\/search":{"name":"translaterocket\/search","title":"TranslateRocket search"},"translaterocket\/switcher":{"name":"translaterocket\/switcher","title":"Language Switcher"}},"tagged_versions":["0.10.0","0.7.7","0.7.8","0.7.9","0.8.0","0.8.1","0.8.2","0.8.3","0.8.4","0.8.5","0.8.6","0.8.7","0.8.8","0.8.9","0.9.0","0.9.1","0.9.2","0.9.3","0.9.4","0.9.5","0.9.6","0.9.7","0.9.8","0.9.9","1.0.0","1.1.0","1.1.2","1.1.4","1.2.0","1.2.1","1.3.0","1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5","1.4.6","1.5.0","1.5.1","1.5.2","1.5.3","1.5.4","1.5.5","1.5.6","1.5.7","1.5.8","1.5.9","1.7.0","1.7.1","1.7.10","1.7.12","1.7.2","1.7.3","1.7.4","1.7.5","1.7.6","1.7.7","1.7.8","1.7.9","1.8.0","1.8.1","1.8.10","1.8.11","1.8.12","1.8.13","1.8.14","1.8.15","1.8.16","1.8.17","1.8.18","1.8.19","1.8.2","1.8.20","1.8.3","1.8.4","1.8.5","1.8.6","1.8.6.1","1.8.7","1.8.8","1.8.9"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3722089,"resolution":"1","location":"assets","locale":"","width":1200,"height":750},"screenshot-2.gif":{"filename":"screenshot-2.gif","revision":3752247,"resolution":"2","location":"assets","locale":"","width":1200,"height":750},"screenshot-3.gif":{"filename":"screenshot-3.gif","revision":3752247,"resolution":"3","location":"assets","locale":"","width":1200,"height":750},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3752247,"resolution":"4","location":"assets","locale":"","width":1600,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3752247,"resolution":"5","location":"assets","locale":"","width":1600,"height":1000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3752247,"resolution":"6","location":"assets","locale":"","width":1600,"height":1000}},"screenshots":{"1":"Your whole site in every language: each language on its own address (\/it\/, \/de\/, \/fr\/), ready for Google, with a language switcher for your visitors.","2":"Free translation in three steps: choose your languages, press Translate, put them online. Your own browser (Chrome or Edge) translates for free, with no API key and no account; free AI accounts or your own keys are there when you want more.","3":"A free search box that speaks every language: visitors type in their own language and find your pages, posts and products, with suggestions as they type. Add it to your menu, as a block or with a shortcode.","4":"Click any sentence on your page to fix it: type it yourself, or ask the browser translator, Google Translate or your AI.","5":"Coming from another plugin? WPML, Polylang, TranslatePress and ten more have their own importer; the universal importer reads your pages as visitors see them, with a preview before you switch.","6":"Design the language switcher \u2014 dropdown or list, flags, colours \u2014 with a live preview."}},"plugin_section":[],"plugin_tags":[1385,99,95,2333,286],"plugin_category":[48],"plugin_contributors":[271583],"plugin_business_model":[],"class_list":["post-335777","plugin","type-plugin","status-publish","hentry","plugin_tags-language","plugin_tags-multilingual","plugin_tags-translate","plugin_tags-translation","plugin_tags-woocommerce","plugin_category-language-tools","plugin_contributors-federicodev","plugin_committers-federicodev"],"banners":{"banner":"https:\/\/ps.w.org\/translate-rocket\/assets\/banner-772x250.png?rev=3675937","banner_2x":"https:\/\/ps.w.org\/translate-rocket\/assets\/banner-1544x500.png?rev=3675937","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/translate-rocket\/assets\/icon-128x128.png?rev=3608126","icon_2x":"https:\/\/ps.w.org\/translate-rocket\/assets\/icon-256x256.png?rev=3608126","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/translate-rocket\/assets\/screenshot-1.gif?rev=3722089","caption":"Your whole site in every language: each language on its own address (\/it\/, \/de\/, \/fr\/), ready for Google, with a language switcher for your visitors."},{"src":"https:\/\/ps.w.org\/translate-rocket\/assets\/screenshot-2.gif?rev=3752247","caption":"Free translation in three steps: choose your languages, press Translate, put them online. Your own browser (Chrome or Edge) translates for free, with no API key and no account; free AI accounts or your own keys are there when you want more."},{"src":"https:\/\/ps.w.org\/translate-rocket\/assets\/screenshot-3.gif?rev=3752247","caption":"A free search box that speaks every language: visitors type in their own language and find your pages, posts and products, with suggestions as they type. Add it to your menu, as a block or with a shortcode."},{"src":"https:\/\/ps.w.org\/translate-rocket\/assets\/screenshot-4.png?rev=3752247","caption":"Click any sentence on your page to fix it: type it yourself, or ask the browser translator, Google Translate or your AI."},{"src":"https:\/\/ps.w.org\/translate-rocket\/assets\/screenshot-5.png?rev=3752247","caption":"Coming from another plugin? WPML, Polylang, TranslatePress and ten more have their own importer; the universal importer reads your pages as visitors see them, with a preview before you switch."},{"src":"https:\/\/ps.w.org\/translate-rocket\/assets\/screenshot-6.png?rev=3752247","caption":"Design the language switcher \u2014 dropdown or list, flags, colours \u2014 with a live preview."}],"raw_content":"<!--section=description-->\n<p>https:\/\/www.youtube.com\/watch?v=WsLpAISB_vo<\/p>\n\n<p><strong>TranslateRocket makes your site multilingual, and everything it does is free.<\/strong> No word limits, no charge per language, and nothing switched off to push you towards an upgrade \u2014 it is not a trimmed-down version of a paid plugin.<\/p>\n\n<p><strong>Already using WPML, Polylang, TranslatePress or Weglot? Try TranslateRocket next to it \u2014 your site does not change.<\/strong> Activate it alongside your current translation plugin: visitors keep seeing exactly the same site, while you import your translations, complete them and preview any page in any language as an administrator. When you are convinced, deactivate the old plugin and put TranslateRocket online with one click. Nothing of the other plugin is deleted, and switching it back on takes you straight back to where you started.<\/p>\n\n<p><strong>You do not need an API key at all.<\/strong> Chrome and Edge on a computer carry a translator that runs on the device itself, and TranslateRocket can drive it: install the plugin, pick your languages, press one button and the site is translated. It costs nothing, needs no account, and the text never leaves your machine. It is the fastest way to a translated site. When you want fluent, idiomatic copy, the same pages can go through DeepL or an AI model with your own key (OpenAI, Anthropic, Gemini \u2014 you pay the provider directly), through ChatGPT or Gemini with a ready-made prompt at no cost, or through your own hands, line by line \u2014 and everything already translated is kept, so nothing is ever done twice.<\/p>\n\n<p><strong>Switching from another translation plugin? Your existing translations come with you.<\/strong> One click imports everything you have already paid for or typed by hand \u2014 from <strong>TranslatePress, Polylang, WPML, Weglot, qTranslate (X and XT), WPGlobus, WP Multilang, Bogo, Multilanguage by BestWebSoft, Falang, Sublanguage, Loco Translate and Autoglot<\/strong>, plus CSV and TMX for anything else. Most are read straight from the tables, the posts or the files, so the import still works after the other plugin has been deactivated or even deleted \u2014 which is the usual state of a site that is moving on. Pages built with Elementor or Bricks come across too, widget by widget \u2014 their words live in a meta field, not in the page content, and most importers never look there.<\/p>\n\n<p>It detects translatable text as you browse \u2014 visible text, link titles, image alt, placeholders, ARIA labels, page titles, meta descriptions and the social preview tags a SEO plugin adds (Open Graph, X) \u2014 and serves each language under its own clean URL prefix (<code>\/it\/<\/code>, <code>\/de\/<\/code>), friendly to SEO and to page caches.<\/p>\n\n<p>You translate however you like:<\/p>\n\n<ul>\n<li>\ud83c\udd93 <strong>In your browser, with no key<\/strong> \u2014 Chrome and Edge translate the whole page, or the whole site, on the device itself. Nothing to sign up for, nothing to pay, nothing sent anywhere. Available both on the live page and on the bulk screen.<\/li>\n<li>\ud83d\uddb1\ufe0f <strong>On the live page<\/strong> \u2014 switch on the visual editor and click any text to translate it in a small, draggable popup, with Previous\/Next, a progress bar and a \"skip already-translated\" mode.<\/li>\n<li>\ud83c\udd93 <strong>Free with Google Translate (no key)<\/strong> \u2014 every field has a link that opens Google Translate prefilled, so you translate for free on Google's own site and paste the result back.<\/li>\n<li>\u270d\ufe0f <strong>By hand<\/strong>, in a clear per-page editor (also inside the post\/page screen) with red highlighting for what's still missing \u2014 plus a copy &amp; paste box for bulk Google translation.<\/li>\n<li>\ud83d\udcac <strong>With ChatGPT or Gemini, no key<\/strong> \u2014 one button copies the whole page with a translation prompt written for your site; paste the answer back and every line goes to its place.<\/li>\n<li>\ud83c\udd93 <strong>With free AI, on your own free account<\/strong> \u2014 Cloudflare Workers AI (about 1,900 sentences a day with Llama 3.3 70B, or 11,000 with a plain translation model), Groq (gpt-oss-120b) or OpenRouter's free models. A two-minute guide gets you the key, no card needed; a counter shows today's free share, and when it runs out the next provider in your chain carries on.<\/li>\n<li>\ud83e\udd16 <strong>With AI<\/strong> \u2014 bring your own key for DeepL, OpenAI, Google Gemini, Anthropic (Claude) or Google Cloud Translate. Text is sent only to the provider you choose, only when you ask.<\/li>\n<\/ul>\n\n<h4>Highlights<\/h4>\n\n<ul>\n<li>\ud83d\udd0e <strong>Search in every language, free<\/strong> \u2014 a search box that always searches in the language of the page: a visitor on <code>\/it\/<\/code> types in Italian and finds your pages, posts and WooCommerce products by their translated title and text, with suggestions as they type. Make one profile for the header, one for the footer and one for the phone menu, each with its own look and a live preview; add it as a block, with the <code>[translaterocket_search]<\/code> shortcode or as an item of your menu. The site's own search box, Ajax Search Lite and FiboSearch find translated text too.<\/li>\n<li>\ud83d\udfe2 <strong>Simple view: translate a site in three steps<\/strong> \u2014 choose the languages, press \u00abTranslate\u00bb, put each language online. Nothing to configure and no key: the free engines are already there. Everything else stays one click away under \u00abAdvanced\u00bb, and nothing is ever removed.<\/li>\n<li>\ud83e\udde0 <strong>Sentences an engine cannot translate are kept<\/strong> \u2014 a brand name, an address or a line already in another language stays as it is and the page still counts as complete, with a \u00abtranslate again\u00bb button if you want to try another engine.<\/li>\n<li>\ud83d\udcca <strong>Visits per language, without cookies<\/strong> \u2014 how many visits each language gets, its most read pages and the languages your visitors' browsers ask for, so you know which language to translate next.<\/li>\n<li>\ud83c\udf6a <strong>Cookie banners in the visitor's language<\/strong> \u2014 Complianz, CookieYes, iubenda, Cookiebot and Usercentrics show their banner in the language of the page, and their legal texts are never machine-translated.<\/li>\n<li>\ud83d\udcb3 <strong>Checkout and e-mails in the customer's language<\/strong> \u2014 the WooCommerce checkout (Stripe tested), the order e-mails and the e-mails of form plugins (WPForms, Contact Form 7, Fluent Forms, Ninja Forms, Gravity Forms) reach each visitor in the language they used. WooCommerce lists TranslateRocket as compatible with High-Performance Order Storage and with the Cart and Checkout blocks.<\/li>\n<li>\ud83c\udd93 <strong>Free AI on your own free account<\/strong> \u2014 Groq, Cloudflare Workers AI or OpenRouter\u2019s free models, with a two-minute guide to the key and no card; and, with the free Labs add-on, MyMemory with no key at all (about 5,000 characters a day, about 50,000 with an e-mail address).<\/li>\n<li>\ud83d\udd11 <strong>No API key required \u2014 and not just \"by hand\".<\/strong> Chrome and Edge translate the whole site automatically, on your own computer, for free. Or do it by hand in the visual editor, or free with Google Translate, and edit any translation later. There is no signup, no account and no key to create \u2014 AI providers are optional and only used if you add one yourself.<\/li>\n<li>\ud83c\udf0d <strong>Unlimited languages<\/strong> (36 built in), 100% free. Donations welcome, never required.<\/li>\n<li>\u26a1 <strong>Built for huge sites<\/strong>: past ~20,000 strings the engine switches by itself to indexed per-page lookups \u2014 flat memory and the same render time at 500 or 500,000 strings (load-tested), where map-loading translation plugins hit the PHP memory limit.<\/li>\n<li>\ud83d\uddb1\ufe0f <strong>On-page visual editor<\/strong>: click text to translate it in a draggable popup \u2014 no admin round-trips.<\/li>\n<li>\ud83e\udde9 <strong>Interface too<\/strong>: translates theme &amp; plugin interface strings, not just page content.<\/li>\n<li>\ud83d\udd17 <strong>SEO-ready URLs<\/strong>: translated slugs (e.g. <code>\/it\/chi-siamo\/<\/code>) and <code>hreflang<\/code> tags.<\/li>\n<li>\ud83d\udd0d <strong>One SEO panel with everything in it<\/strong>: open a page in the visual editor and the SEO panel lists, in order, the translated address, the page title, the meta description, the social preview (Open Graph and X), the keywords, then every image on the page and every translatable attribute \u2014 titles, placeholders, ARIA labels. Each line takes you straight to that element on the page and opens the right editor, so nothing search engines read is left in the source language by accident.<\/li>\n<li>\ud83d\udea6 <strong>Per-page visibility<\/strong>: if a page has no equivalent in a language, redirect it, show a custom message, or 404 \u2014 per page, per language.<\/li>\n<li>\ud83c\udf8c <strong>Flexible language switcher<\/strong> as a shortcode <code>[translaterocket_switcher]<\/code>, a Gutenberg block, or a widget \u2014 inline, dropdown, or a <strong>scrollable bar with \u2039 \u203a arrows<\/strong> for many languages \u2014 with original SVG flags that render everywhere (including Windows). Show a switcher on desktop only, on mobile only, or both, to style a different menu for each.<\/li>\n<li>\ud83d\udce5 <strong>One-click import from thirteen other plugins<\/strong> \u2014 TranslatePress, Polylang, WPML, Weglot, qTranslate (X and XT), WPGlobus, WP Multilang, Bogo, Multilanguage by BestWebSoft, Falang, Sublanguage, Loco Translate and Autoglot \u2014 plus a <strong>universal importer<\/strong> for any other plugin: it reads your pages as visitors see them, in every language, pairs each sentence with its translation only where the pages match, and lets you preview every page side by side before you switch the old plugin off \u2014 plus CSV and TMX for everything else. Read straight from the tables, the posts or the <code>.po<\/code> files, so it works even when the other plugin is gone. Pages built with Elementor or Bricks come across too, widget by widget.<\/li>\n<li>\ud83d\uddbc\ufe0f <strong>A different image for each language<\/strong> \u2014 swap any picture for a translated one: switch on the visual editor, click the button on the image and pick another from your media library. For text baked into a picture, a screenshot of your own interface, or a photo that only makes sense in one country.<\/li>\n<li>\ud83c\udfaf <strong>Different content and menus per language<\/strong> \u2014 show a paragraph, a block or a menu item only in some languages: with a shortcode, a class on any block, or a checkbox in Appearance \u2192 Menus.<\/li>\n<li>\ud83d\uded2 <strong>WooCommerce aware<\/strong>: product and category slugs per language, the AJAX mini-cart and JS strings translated too, and customer emails rendered in the language the order was placed in.<\/li>\n<li>\ud83d\udc40 <strong>Preview mode<\/strong>: review new translations or a fresh import on the real pages while visitors still see the default language \u2014 publish with one click when ready.<\/li>\n<li>\ud83d\udea6 <strong>Add a language now, publish it when it is ready<\/strong>: each language has a switch \u2014 green and your visitors see it, grey and only you do. While it is offline it stays out of the switcher, out of your sitemap and out of the <code>hreflang<\/code> tags, and its URLs send visitors to your default language, while you keep working on the real pages. Nothing half-translated ever reaches your visitors or Google.<\/li>\n<li>\ud83d\udcc2 <strong>Built for scale<\/strong>: searchable, sortable page list for sites with hundreds of pages.<\/li>\n<li>\u2705 <strong>You stay in charge<\/strong> \u2014 every machine translation can be reviewed and edited by hand. Translations live in your own database.<\/li>\n<\/ul>\n\n<h4>Languages<\/h4>\n\n<p>Translate your site into the languages your visitors actually speak: Spanish, French, German, Italian, Portuguese and Brazilian Portuguese, Dutch, Polish, Russian, Ukrainian, Turkish, Romanian, Greek, Arabic, Hindi, Indonesian, Vietnamese, Thai, Chinese, Japanese, Korean \u2014 36 languages ship built in, and you can add unlimited custom ones (any language code works). The plugin's own admin interface is translated into fifteen languages besides English: Arabic, Chinese, Dutch, French, German, Indonesian, Italian, Japanese, Korean, Persian, Polish, Brazilian Portuguese, Russian, Spanish and Turkish.<\/p>\n\n<h4>Works with<\/h4>\n\n<p>TranslateRocket translates the page your site actually sends to the browser, so it is not tied to a theme or a page builder. Every release is tested on a real site with the plugins below (tested means installed, configured and checked from the visitor's side, not only read about):<\/p>\n\n<ul>\n<li><strong>Page builders:<\/strong> Elementor and Elementor Pro (theme builder headers and footers included), the block editor. While a builder is editing a page - Elementor, Beaver Builder, Divi, Bricks, Oxygen, Breakdance, Brizy, WPBakery, Thrive Architect, the Customizer - TranslateRocket stays out of its way.<\/li>\n<li><strong>Shops:<\/strong> WooCommerce - product pages, cart, checkout and the order e-mails, in the customer's language.<\/li>\n<li><strong>Forms:<\/strong> Forminator, Contact Form 7, WPForms, Gravity Forms, SureForms, Formidable, Ninja Forms.<\/li>\n<li><strong>Cookie and consent banners:<\/strong> Complianz, CookieYes, GDPR Cookie Compliance, Cookie Notice - the banner text is collected, can be clicked in the visual editor and reaches visitors translated; iubenda, Cookiebot and Usercentrics are told the language of each page.<\/li>\n<li><strong>Payments:<\/strong> WooCommerce checkout with Stripe, in the visitor's language.<\/li>\n<li><strong>Search:<\/strong> WordPress search, Ajax Search Lite, FiboSearch.<\/li>\n<li><strong>SEO:<\/strong> Yoast SEO, Rank Math - translated titles, descriptions and social tags.<\/li>\n<li><strong>Caching and optimisation:<\/strong> Cache Enabler, Autoptimize, WP Fastest Cache.<\/li>\n<li><strong>Side by side with, and importing from:<\/strong> WPML, Polylang, TranslatePress, Weglot, Bogo and others.<\/li>\n<\/ul>\n\n<p>The full list, with what was checked and the date of the last test: https:\/\/translaterocket.com\/compatibility\/<\/p>\n\n<p>Something missing, or not behaving? Tell me from https:\/\/translaterocket.com\/support\/ and I will test it.<\/p>\n\n<h4>Need a hand with your site?<\/h4>\n\n<p><strong>I can do it for you.<\/strong> I am the developer of TranslateRocket, and I also build and translate WordPress sites for a living: a new multilingual site from scratch, an existing site taken from one language to ten, a migration away from a paid plugin, or a stubborn theme that will not translate. You get the person who wrote the engine, not a support queue.<\/p>\n\n<p>The plugin stays free either way \u2014 nothing here is locked behind that. Write to me from the \"Help &amp; Feedback\" screen inside the plugin, or from https:\/\/translaterocket.com\/support\/ .<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can connect to third-party services, but only with your involvement:<\/p>\n\n<ul>\n<li><strong>AI translation providers (optional).<\/strong> If you add an API key and ask to translate, the relevant text is sent to the provider you selected so it can return a translation. No text is sent until you configure a provider and trigger a translation. Providers and policies:\n\n<ul>\n<li>DeepL \u2014 service: https:\/\/www.deepl.com\/en\/pro , privacy: https:\/\/www.deepl.com\/en\/privacy<\/li>\n<li>OpenAI \u2014 service: https:\/\/platform.openai.com , privacy: https:\/\/openai.com\/policies\/privacy-policy\/<\/li>\n<li>Google Cloud Translation \/ Gemini \u2014 service: https:\/\/cloud.google.com\/translate , privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li>Anthropic (Claude) \u2014 service: https:\/\/www.anthropic.com , privacy: https:\/\/www.anthropic.com\/legal\/privacy<\/li>\n<li>Cloudflare Workers AI \u2014 service: https:\/\/developers.cloudflare.com\/workers-ai\/ , privacy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/li>\n<li>Groq \u2014 service: https:\/\/console.groq.com , privacy: https:\/\/groq.com\/privacy-policy\/<\/li>\n<li>OpenRouter (and the provider of the model you pick there) \u2014 service: https:\/\/openrouter.ai , privacy: https:\/\/openrouter.ai\/privacy<\/li>\n<\/ul><\/li>\n<li><strong>Google Translate (manual, always available).<\/strong> Every editor offers a per-phrase link and a copy-paste box that open Google Translate (translate.google.com) prefilled, so you translate on Google's own site and paste the result back. This is just a convenience link \u2014 your browser, not the plugin, contacts Google. Service: https:\/\/translate.google.com , terms: https:\/\/policies.google.com\/terms , privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li><strong>Optional one-click Google auto-fill (off by default).<\/strong> A site owner can opt in (the <code>TRROCKET_AUTO_GOOGLE<\/code> constant \/ the <code>trrocket_auto_google<\/code> filter) to let the server fetch a translation from Google's free endpoint with one click. This uses an undocumented endpoint and is best-effort, so it is disabled out of the box and the plugin never calls it on its own. For dependable automatic translation use the official AI providers below.<\/li>\n<li><strong>translaterocket.com support ticket (optional, on request).<\/strong> The Diagnostics screen has  \u2026<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install TranslateRocket from <strong>Plugins \u2192 Add New<\/strong> (search for \"TranslateRocket\") and activate it.<\/li>\n<li>Open <strong>TranslateRocket<\/strong>: the Simple view shows three steps. Tick the languages you want and save.<\/li>\n<li>Press <strong>Translate<\/strong> next to a language: Chrome or Edge translate it on your computer, free and with no key \u2014 or add a free AI account, or your own key, whenever you like.<\/li>\n<li>Flip the language's switch to <strong>Online<\/strong> when you are happy with it. Until then only you see it.<\/li>\n<li>Add the language switcher and the search box where you want them \u2014 block, shortcode or menu \u2014 from the <strong>Switcher<\/strong> and <strong>Search<\/strong> screens.<\/li>\n<\/ol>\n\n<p>First steps, filmed from installation to the first translated page:<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=FgrO7Fqun4U<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20it%20really%20free%3F\"><h3>Is it really free?<\/h3><\/dt>\n<dd><p>Yes. All translation features and unlimited languages are free, with no paid tier inside the plugin. You only ever pay your own AI provider, directly, if you choose to use AI.<\/p><\/dd>\n<dt id=\"how%20do%20you%20keep%20it%20free%20with%20no%20income%20from%20it%3F\"><h3>How do you keep it free with no income from it?<\/h3><\/dt>\n<dd><p>I build websites for a living, and I use TranslateRocket on every multilingual site I make. Every fix reaches those sites the day I release it, so the plugin gets maintained because I need it maintained \u2014 publishing it for everyone costs me nothing on top of that. What comes back is worth more to me than a licence fee would be: bug reports from setups I could never reproduce on my own, which end up improving my own clients' sites too. Donations are welcome and change nothing about what the plugin does.<\/p>\n\n<p><strong>And if you want that work done on your own site, you can hire me.<\/strong> Building and fixing WordPress sites is the day job: a site built from scratch, a design put right, a multilingual setup done properly, custom development, a migration off a plugin that charges you every month. That is where the money comes from \u2014 not from crippling this plugin. Ask me from the \"Help &amp; Feedback\" screen inside the plugin, or at https:\/\/translaterocket.com\/support\/ .<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20ai%20key%3F\"><h3>Do I need an AI key?<\/h3><\/dt>\n<dd><p>No \u2014 and without one you are not limited to typing by hand. <strong>Chrome and Edge on a computer carry a translator that runs on the device itself, and one button puts it to work on your whole site.<\/strong> It costs nothing, needs no account and no signup, and the text never leaves your machine. Quality sits below DeepL and the AI models, so it is the quickest way to a translated site rather than the finest one \u2014 but everything it translates is kept, so adding a provider later never repeats the work.<\/p>\n\n<p>It needs Chrome, or Edge 148 or later, on a computer that can run the built-in model: Windows 10 or 11, macOS 13 or later, Linux or ChromeOS (not Windows Server), 16 GB of RAM or a graphics card with more than 4 GB, and 22 GB of free disk space, with the admin on https. Anywhere else, the copy-and-paste route works in any browser and still needs no key.<\/p>\n\n<p>Beyond that you can click any text on the live page and type its translation, edit it again later, and publish it. Every field also offers a free Google Translate link you can paste back from. AI keys are optional and only used at the moment you ask for one.<\/p>\n\n<p>Two minutes, filmed on a real site: translating a page with no key at all.<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=J0TxlZBKaWc<\/p><\/dd>\n<dt id=\"do%20my%20translations%20stay%20on%20my%20site%3F\"><h3>Do my translations stay on my site?<\/h3><\/dt>\n<dd><p>Yes. Translations are stored in your own WordPress database. Text is only sent to the AI provider you configure, at the moment you ask for a translation.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20caching%20plugins%3F\"><h3>Does it work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes. Each language lives under its own URL (e.g. <code>\/it\/<\/code>), so page caches store each language separately and automatically.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Product pages, categories and attributes are translated like any other content, and slugs are translated per language. It also covers the parts WooCommerce renders outside the page HTML, which a page-only engine misses: the AJAX mini-cart fragments, strings passed to JavaScript (such as the \"View cart\" link), and transactional emails \u2014 the order's language is recorded at checkout (classic and block\/Store API) and the customer email is rendered in that language. Wording that only ever appears inside an email (WooCommerce's own \"Thank you for your order\", \"Quantity\", \"Price\") is picked up automatically the first time such an email is sent and filed under \"WooCommerce emails\" in the translation screens, so you can translate it like anything else. Multi-currency is out of scope: TranslateRocket translates, it does not convert prices.<\/p>\n\n<p>The whole shop translated, from the product page to the order e-mail:<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=kU0TConiT20<\/p><\/dd>\n<dt id=\"does%20it%20translate%20forms%20%28forminator%2C%20contact%20form%207%2C%20wpforms%E2%80%A6%29%3F\"><h3>Does it translate forms (Forminator, Contact Form 7, WPForms\u2026)?<\/h3><\/dt>\n<dd><p>Yes. Labels, placeholders, options and buttons are translated with the rest of the page, whether the form is added with a shortcode, a block, a widget or a page builder such as Elementor. The messages the form plugin adds with JavaScript \u2014 validation errors, \"message sent\" \u2014 are translated too, on Forminator, Contact Form 7, WPForms, Gravity Forms, SureForms, Formidable and Ninja Forms. With Forminator, the thank-you message, forms loaded with \"Load form using AJAX\" and the e-mail notifications follow the language of the page the form was sent from; the wording of the form settings and e-mails appears under \"Forms: messages and e-mails\" in the translation screens once an administrator has viewed the form or a notification has been sent. To keep a notification (for example the copy for the site owner) in the source language, return false from the <code>trrocket_forminator_translate_notification<\/code> filter.<\/p><\/dd>\n<dt id=\"is%20there%20a%20php%20function%20that%20returns%20the%20current%20language%3F\"><h3>Is there a PHP function that returns the current language?<\/h3><\/dt>\n<dd><p>Yes, for theme and plugin code that needs it (the equivalent of Polylang's <code>pll_current_language()<\/code>): <code>trrocket_current_language()<\/code> returns the code of the language of the current request, such as <code>en<\/code>, <code>fr<\/code> or <code>pt-br<\/code> \u2014 also in AJAX requests sent from a translated page \u2014 and <code>trrocket_default_language()<\/code> returns the site's source language. Wrap calls in <code>function_exists()<\/code> so your code keeps working if the plugin is deactivated.<\/p><\/dd>\n<dt id=\"which%20plugins%20can%20i%20import%20my%20translations%20from%3F\"><h3>Which plugins can I import my translations from?<\/h3><\/dt>\n<dd><p>Yes \u2014 use <strong>TranslateRocket \u2192 Import<\/strong> to bring over your existing translations. The WPML import covers both its string translations and its post-based translations (titles, slugs and matching body text), and reads directly from WPML's tables, so it works even when WPML is already deactivated. Coming from Weglot (a hosted service)? Export your translations from the Weglot dashboard as a CSV and upload the file on the same Import screen \u2014 the columns are detected automatically and mapped to your target languages.<\/p>\n\n<p>To review the result safely, turn on <strong>Preview mode<\/strong> (\"Who sees the translations\" in Settings): you browse the fully translated site while visitors keep seeing the default language, and one click publishes it when you are happy.<\/p>\n\n<p>Safer still: run TranslateRocket next to your current plugin, import, and switch only when you are happy. Two minutes:<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=K5qmxn3_4po<\/p><\/dd>\n<dt id=\"can%20visitors%20search%20my%20site%20in%20their%20own%20language%3F\"><h3>Can visitors search my site in their own language?<\/h3><\/dt>\n<dd><p>Yes, for free. The search box of TranslateRocket always searches in the language of the page: on <code>\/de\/<\/code> a visitor types in German and finds your pages, posts and WooCommerce products by their translated title, excerpt and content, with suggestions while typing, and the results open on the German pages. You can let it look in every language at once, choose which content types it shows and add filters. The search box WordPress already has on your site, Ajax Search Lite and FiboSearch understand the translated words too.<\/p><\/dd>\n<dt id=\"what%20if%20a%20page%20shouldn%27t%20exist%20in%20another%20language%3F\"><h3>What if a page shouldn't exist in another language?<\/h3><\/dt>\n<dd><p>Open the page and use the \"Language visibility\" box to redirect it, show a custom message, or return a 404 \u2014 per language.<\/p><\/dd>\n<dt id=\"can%20i%20show%20something%20in%20one%20language%20only%3F\"><h3>Can I show something in one language only?<\/h3><\/dt>\n<dd><p>Yes. Wrap it in <code>[translaterocket_language lang=\"it\"]\u2026[\/translaterocket_language]<\/code> \u2014 several languages work too, as <code>lang=\"it,de\"<\/code> \u2014 or use <code>not=\"it\"<\/code> to show it everywhere except Italian. In the block editor you do not need the shortcode: add the class <code>trrocket-only-it<\/code> or <code>trrocket-hide-it<\/code> in \"Advanced \u2192 Additional CSS class(es)\" of any block, navigation links included. Content limited with <code>lang=<\/code> or <code>trrocket-only-<\/code> is taken to be written in that language, and is shown exactly as you wrote it.<\/p><\/dd>\n<dt id=\"can%20a%20menu%20item%20appear%20only%20in%20some%20languages%3F\"><h3>Can a menu item appear only in some languages?<\/h3><\/dt>\n<dd><p>Yes. In Appearance \u2192 Menus every item has a \"Show in\" row with one checkbox per language; nothing ticked means every language. Hiding an item hides its sub-items too. Block themes build menus with the Navigation block instead: there, give a link the class <code>trrocket-only-it<\/code> or <code>trrocket-hide-it<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20with%20chatgpt%20or%20gemini%20without%20an%20api%20key%3F\"><h3>Can I translate with ChatGPT or Gemini without an API key?<\/h3><\/dt>\n<dd><p>Yes. Open a page in the visual editor, click \"Translate page\" and use \"Copy with a translation prompt\" \u2014 or the ChatGPT and Gemini links, which copy the same thing. The prompt carries your languages, the words you never translate, your glossary and your house style, and asks for the reply in a code block with the line numbers intact. Paste the reply in box 2 and apply it.<\/p>\n\n<p>And when a machine translation gets a word wrong, fixing it takes ten seconds:<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=Bc83GXh1NvI<\/p><\/dd>\n<dt id=\"my%20browser%20isn%27t%20chrome%20or%20edge%2C%20or%20i%20work%20from%20a%20phone.%20can%20i%20still%20translate%20without%20a%20key%3F\"><h3>My browser isn't Chrome or Edge, or I work from a phone. Can I still translate without a key?<\/h3><\/dt>\n<dd><p>The translator built into the browser exists only in Chrome and Edge on a computer. TranslateRocket Labs, a separate free add-on you can ask for at https:\/\/translaterocket.com\/labs\/, adds free translation engines that work from any browser, phones included \u2014 each one is switched on only after you read and accept its conditions. Labs is not needed: everything described on this page works without it.<\/p>\n\n<p>Both, in one minute \u2014 a page translated in the browser with no key, then Labs translating a new page the moment it is published:<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=Zsf1PXWFhVI<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.8.20<\/h4>\n\n<ul>\n<li>Improved: when an AI engine refuses a request, the visual editor now says why in plain words and stops \u2014 a key that is wrong or out of credit, the daily limit reached \u2014 with a link to fix it, instead of leaving the page half translated with a row of warnings. A busy service (429, 5xx, timeouts) is tried again by itself up to three times.<\/li>\n<li>Improved: the setup wizard tries your Groq key with one word as you finish. If Groq refuses it, the last screen says so at once, with the link to copy it again \u2014 or the way to translate in your browser without a key \u2014 instead of \u00abYou're all set\u00bb.<\/li>\n<li>New: at the end of the first translation, if the language is still visible only to you, the editor offers \u00abShow it to visitors\u00bb \u2014 one click and visitors see it, with the language switcher.<\/li>\n<li>New: \u00abTranslate again the sentences that contain them\u00bb on the Exclusions screen. After adding names or glossary terms, only the translated sentences that do not respect them go back to \u00abmissing\u00bb, in every language, and are translated again with the new rules. One link undoes it. The glossary is now also passed to AI engines with each request.<\/li>\n<li>Fixed: the site scan now visits category, tag and shop archive pages too, so their texts \u2014 SEO titles and descriptions included \u2014 are collected and translated even if nobody has opened them yet. Thanks to the shop owner who reported it.<\/li>\n<li>New: \u00abAlso in the phone menu of your theme\u00bb on the Switcher screen. Themes like Blocksy have a \u00abmobile\u00bb menu place; when it holds another menu (categories, for example), untick it and the languages stop appearing twice. Phones without the main menu still get the floating switcher.<\/li>\n<li>Fixed: on Apache servers, if the site's rewrite rules were saved while a translated page was being served (by WP-CLI or by a plugin that refreshes them during a visit), .htaccess could get \u00abRewriteBase \/it\/\u00bb and every page answered with an error. The rules are now always written with the site's own address.<\/li>\n<li>Fixed: Cloudflare Workers AI with an e-mail or a wrong value in the \u00abAccount ID\u00bb field: the right account is now found from the token and saved, instead of failing every request.<\/li>\n<\/ul>\n\n<h4>1.8.19<\/h4>\n\n<ul>\n<li>Improved: right after the setup wizard, \u00abTranslate my homepage now\u00bb translates your homepage by itself with the engine you just chose \u2014 you watch it turn into your language. Before, the page opened still in the original language and the translation was behind two buttons, so some of you thought nothing worked.<\/li>\n<li>Faster: \u00abAuto-translate everything with AI\u00bb in the visual editor sends ten sentences per request and saves them together, instead of two requests for every sentence. A homepage takes seconds instead of minutes.<\/li>\n<li>Fixed: the page counter in the editor bar now moves while the page is being translated, instead of staying at 0% until the end.<\/li>\n<\/ul>\n\n<h4>1.8.18<\/h4>\n\n<ul>\n<li>New: cache warm-up. Each time TranslateRocket clears the caches, a minute later the home and the most visited pages of every language are visited again in the background, a few at a time, so the next visitor finds them ready instead of waiting for the page to be built. The pages come from the visit statistics, or from your menu. It runs only with a page cache (ours, WP Rocket, LiteSpeed, Breeze\u2026), waits when the server is busy, and can be switched off in Settings.<\/li>\n<li>Fixed: with Complianz, consent given on a translated page was stored for that language only (\/it\/), so the cookie banner came back at every change of language. Consent now covers the whole site, as with the other multilingual plugins Complianz knows.<\/li>\n<li>Fixed: with LiteSpeed Cache, REST answers loaded by a page (maps, sliders, \u00abload more\u00bb) could be cached in one language and served to all of them. Answers asked by a page of the site now stay out of the page cache; calls from apps and other servers are cached as before.<\/li>\n<li>Fixed: \u00ablink on the whole box\u00bb of page builders now leads to the page in the visitor's language: Essential Addons' Wrapper Link, Premium Addons' element link, Divi Supreme's lightbox, clickable columns and Divi 4's module, row and section links. Developers can add more attributes with the trrocket_url_attributes filter.<\/li>\n<\/ul>\n\n<h4>1.8.17<\/h4>\n\n<ul>\n<li>New: \u00abTranslate the addresses of categories and tags\u00bb (Settings, next to SEO meta). On, as before, each language uses the translated name: \/de\/product-category\/drucker\/. Off, every language keeps your own slug: \/de\/product-category\/printers\/ \u2014 the links, the hreflang tags and the language switcher all follow, and translated addresses that search engines already know move to the plain address with a 301. For shops whose category addresses are already indexed. Developers can choose per taxonomy with the trrocket_translate_term_slugs filter.<\/li>\n<\/ul>\n\n<h4>1.8.16<\/h4>\n\n<ul>\n<li>Fixed: on WooCommerce shops, translated product category and product tag addresses answered 404 (for example \/de\/product-category\/drucker\/). The links used the translated name, but the address was not recognised when a visitor opened it. Custom category bases, subcategories and any public taxonomy are covered. Thanks to the shop owner who sent the details.<\/li>\n<li>New: when a category or tag is renamed, or its translation is corrected, its translated address follows, and the old address sends visitors and search engines to the new one with a 301. Slugs imported from other plugins are left as they are.<\/li>\n<li>New: every AI engine card shows the recommended model, with a \u00abUse it\u00bb button; in the model lists the recommended one comes first and is marked. Groq and OpenRouter lists updated after a translation test of their free models.<\/li>\n<li>New: \u00abUse this engine\u00bb on every engine card. Switch an engine off and it is never used, not even as a fallback, while its key stays saved (for example when the account has no credit left).<\/li>\n<li>Improved: \u00abTest this text\u00bb lets you choose the language to translate into, refreshes the \u00abfree requests today\u00bb counter at once, and warns when the result mixes in letters of another alphabet, a sign that the model does not suit that language.<\/li>\n<li>Improved: search across all languages runs one database query instead of one per language: on sites with many languages each suggestion is several times faster.<\/li>\n<li>Fixed: text added by JavaScript inside an area listed in \u00abExclude selectors\u00bb was still collected when an administrator viewed the page (for example a help-desk plugin showing tickets). It is now skipped, like the rest of the area.<\/li>\n<li>Fixed: OpenRouter's \u00abno endpoints found\u00bb on a free model now says that the model's free provider is not answering, instead of \u00abthe model does not exist\u00bb.<\/li>\n<\/ul>\n\n<h4>1.8.15<\/h4>\n\n<ul>\n<li>Faster pages for your visitors while translations run in the background: Labs, WP-Cron and WP-CLI now clear the site's caches (page cache, Breeze, LiteSpeed, Varnish, object cache) at most once every ten minutes, instead of after every page. The last change is still shown within ten minutes; what you edit by hand is shown at once, as before.<\/li>\n<li>An engine that is only resting (DeepL paused after refusals, a free engine that has used its share for the hour) is no longer logged as \u00abAI translation failed\u00bb for every language and step: one \u00abTranslation is waiting\u00bb line, with the time it goes on. Real failures are still logged as before.<\/li>\n<li>The \u00abi\u00bb buttons of the overview link to the page of translaterocket.com that explains each feature, in your language when the site has it.<\/li>\n<\/ul>\n\n<h4>1.8.14<\/h4>\n\n<ul>\n<li>Faster and lighter \u00abTranslate all\u00bb on small servers: each step writes to the options table about 80% less (the maps were flushed after every sentence, with a scan of the whole table each time) and runs about half the database queries; the settings are read once per request. Thanks to Isis for the PHP slow log that pointed straight at it.<\/li>\n<li>\u00abTranslate all\u00bb goes on by itself after a 502, 504 or Cloudflare 524 from your server, waiting a little longer each time, instead of asking you to press the button again.<\/li>\n<li>One translation at a time on the site: a second tab, or Labs in the background, waits for the one running instead of loading the server with several PHP processes at once.<\/li>\n<li>New WP-CLI command: wp translaterocket translate --lang=zh (or --all), with --engine, --batch and --pause. Translate the backlog in one low-priority process, away from your visitors.<\/li>\n<li>DeepL that keeps refusing a key rests an hour, then a day, then a week, instead of being asked again every hour; \u00abTest\u00bb on the AI screen tries it at once.<\/li>\n<li>The daily character cap for paid AI and DeepL's rest are kept in the database: a cache purge (object cache, Breeze, WP Rocket, LiteSpeed) no longer resets them.<\/li>\n<li>When Chrome's built-in translator does not start (its model stays at 0%, or it stops with an error), the Translations screen offers a free Groq key at once.<\/li>\n<li>Block themes: a different Navigation menu per language now works with Twenty Twenty-Five as installed (WordPress showed the newest menu in every language), and the menu chosen for a language is left as written.<\/li>\n<li>Fixed: automatic updates could be rolled back on slow hosts. Right after an update WordPress loads the home page once to check for errors, and that request ran the database upgrade of the new version; on a shared host it could pass the 50 seconds WordPress waits, and the update was undone. The upgrade now runs on the next request, one request at a time.<\/li>\n<li>Fixed: the safety net that removes key-like strings from the diagnostics report did not match anything since August; keys you had configured were always removed.<\/li>\n<\/ul>\n\n<h4>1.8.13<\/h4>\n\n<ul>\n<li>New: The SEO Framework. Its sitemap is a single list, so the translated pages were in no sitemap: now every translated address is inside it. Its og:locale was printed twice on translated pages; now once, and a repeated og:locale from any other SEO plugin is removed too.<\/li>\n<li>New: \u00abRead more\u00bb in the \u24d8 buttons of engines, limits, bots and search opens the page that explains the feature on translaterocket.com, in your admin language when the site has it.<\/li>\n<li>New: a \u00abStep-by-step setup guide\u00bb link in the setup wizard and on the Start screen.<\/li>\n<li>Improved: the box that describes the chosen engine on the Translations screen is easier to read \u2014 one tile per fact, the quality with its bars. \u00abAll free\u00bb in the overview is now a green label.<\/li>\n<li>Fixed: the \u00abCrawlers\u00bb checkbox on the AI screen was saved but did nothing, because a visit never starts an AI translation. The row now says so instead of offering a switch with no effect.<\/li>\n<li>Fixed: the help of \u00abFallback priority\u00bb said that providers left on \u00ab\u2014\u00bb stay out of the chain; they are used after the numbered ones, and the text now says so.<\/li>\n<\/ul>\n\n<h4>1.8.12<\/h4>\n\n<ul>\n<li>Fixed: links inside translated pages now use the translated slug of the page they point to \u2014 a button to \u00ab\/start-here\/\u00bb leads an Italian visitor to \u00ab\/it\/inizia-da-qui\/\u00bb, not \u00ab\/it\/start-here\/\u00bb. The source-slug address, if someone still reaches it, moves there with a 301, so canonical, hreflang, the switcher and the sitemap all name the same page. Thanks to Tommaso for reporting it.<\/li>\n<li>Fixed: in the Simple view, \u00abTranslate\u00bb next to a language only opened the Translations screen, and nothing seemed to happen. It now starts the translation with the engine in the menu.<\/li>\n<li>Fixed: the percentages count only sentences that are on a page of the site. Sentences of pages rewritten or deleted, and pieces of pages read directly through the REST API by crawlers, kept a fully translated site below 100%. \u00abTranslate all missing\u00bb skips them too, so no engine time goes to text nobody sees.<\/li>\n<li>Fixed: a code example made only of tags (an hreflang snippet in a tutorial) is not a sentence any more; ones already collected go with the update.<\/li>\n<\/ul>\n\n<h4>1.8.11<\/h4>\n\n<ul>\n<li>Fixed: sentences nobody but the administrator ever sees were counted as \u00abstill to translate\u00bb, and a fully translated site showed 63%: the labels of the editor WordPress loads for a signed-in admin (quicktags, links, media), the descriptions of the REST routes read by the dashboard in the admin's language, and sentences of a page rewritten weeks ago. None of them is collected any more, and when a page is read again whatever was last seen on it more than two days ago leaves its count. Sites that already have such sentences: open the page again as an administrator and they go.<\/li>\n<li>Fixed: addresses, paths, domains, bare tags and language codes (\u00abhttps:\/\/\u2026\u00bb, \u00ab\/de\/\u00bb, \u00ab\u00bb, \u00aben-GB\u00bb) were collected as sentences and, as nothing can translate them, kept every language short of 100%. They are left out now, and the ones already collected go with the update (those somebody translated stay).<\/li>\n<li>Faster Translations screen: up to 200 pages the list is drawn at once and the search box, \u00abOnly pages still to translate\u00bb and the column sort work in the browser, with no request to the server \u2014 on a shared host each one used to wait for WordPress to start. Larger sites keep the 50-rows-at-a-time list.<\/li>\n<\/ul>\n\n<h4>1.8.10<\/h4>\n\n<ul>\n<li>Faster suggestions in the search box: while a visitor types, the answers now come from a light endpoint (suggest.php) that starts only a slice of WordPress \u2014 no plugins, no theme \u2014 instead of the REST route, which on a shared host took 2\u20137 seconds, nearly all of it WordPress starting up. Measured on the same site: 0.2 s instead of 3\u20134 s, with exactly the same results. If a host blocks direct access to plugin files, the box falls back to the REST route by itself. The index keeps the address, title and kind of each page in a small new table, built once in the background after the update; the kind of page (\u00abProduct\u00bb, \u00abPage\u00bb) follows the language of the page.<\/li>\n<\/ul>\n\n<h4>1.8.9<\/h4>\n\n<ul>\n<li>Fixed: on WordPress Playground (the \u00abLive Preview\u00bb on wordpress.org) and on any site that runs on SQLite, a sentence corrected in the visual editor and the translations brought in by the importers were not saved: one database query was MySQL-only. It now works the same on MySQL, MariaDB and SQLite. The Live Preview also opens on a demo page already translated into Italian, Spanish, German and French.<\/li>\n<li>Improved: the search box \u00abin the header menu\u00bb now appears in block themes too (the Navigation block of Twenty Twenty-Five and the like), on the computer and inside the phone menu.<\/li>\n<li>Fixed: in the full-screen phone menu of block themes the language names were white on white \u2014 only the flags could be seen. There they now take the colours of the theme, like the other links.<\/li>\n<li>Improved: a product never opened in a language is found by its translated title and excerpt (the search index is rebuilt once); while suggestions are on their way a small wheel turns in the search button; \u00abFilters\u00bb opens as a button.<\/li>\n<li>Improved: the \u00abSave changes\u00bb bar stays at the bottom of the form and floats only when there is something to save, instead of covering the languages; the preview of the icon search styles opens the panel inside the frame, on the phone too.<\/li>\n<li>Fixed: a tag between two words of a title no longer glued them together in the suggestions.<\/li>\n<\/ul>\n\n<h4>1.8.8<\/h4>\n\n<ul>\n<li>New: Simple and Advanced view. Simple shows only what is free and immediate \u2014 choose the languages, press \u00abTranslate\u00bb, put the language online \u2014 in three steps at the top of the plugin and three entries in the side menu; everything else is one click away under \u00abAdvanced\u00bb. Nothing was removed.<\/li>\n<li>New: \u00abSearch\u00bb screen. The search box that searches in the language of the page has its own screen, after Switcher, with profiles (header menu, phone menu, bottom of every page, shortcode or block), four looks (field, rounded field, magnifier that opens a field, magnifier that opens the search over the page), width, placeholder, computer\/phone visibility, suggestions while typing, the kinds of content it searches, search in every language, and filters for the visitor (always in sight or behind a \u00abFilters\u00bb button), with a live preview at computer and phone width.<\/li>\n<li>New: sentences an engine cannot translate (a name, text not in the site's language) are kept as they were and the page counts as complete, instead of staying at 89% forever. The notice says how many, with a link to see them in Translation memory (\u00abOnly kept as they were\u00bb); \u00abTranslate again the kept ones\u00bb, in a page's \u00ab\u22ef\u00bb menu, tries them with another engine.<\/li>\n<li>New: \u00abRecommended: \u2026\u00bb under every option where it applies, in all 15 languages of the plugin; quality bars and a gear (to its settings) next to every engine in \u00abTranslate with\u00bb; the engine's details are a tidy grid.<\/li>\n<li>New: on deactivation, a box offers immediate free help (keep the plugin active and open a ticket), the Simple view, and an optional e-mail to be contacted about that problem only, with consent and deletion after six months.<\/li>\n<li>Improved: the pages list shows \u00abTranslate\u00bb (with the engine chosen above), \u00abReview\u00bb and a \u00ab\u22ef\u00bb menu (open the sentences, visual editor, translate again the kept ones, start over, hide) instead of a row of similar buttons; the list and the \u00abOnly the pages still to translate\u00bb box show that they are loading; \u00abNext steps\u00bb leaves the side menu (its drawer stays on every screen in Advanced).<\/li>\n<li>Improved: numbers, dates and euro follow the plugin's language, not WordPress'; the switcher presets light up at once and the preview shows it is redrawing; the menus-per-language explanation says where menus are made, with a link to Appearance \u2192 Menus; the texts of the editor blocks (Language switcher, TranslateRocket search) are in the plugin's language.<\/li>\n<li>Compatibility: cookie banners of iubenda, Cookiebot and Usercentrics get the language of each page and their legal texts are never translated (iubenda: one policy per language); Aruba HiSpeed Cache and the host caches are cleared when a translation changes; Slider Revolution 7 slides and WoodMart elements are translated.<\/li>\n<li>Compatibility, from a reading of what fourteen other multilingual plugins fix for their users: WooCommerce now lists TranslateRocket as compatible with high-performance order storage and the block checkout; the mini-cart no longer shows the previous language after a switch; where a form, a booking or a checkout sends the visitor next (AJAX answers) keeps the language; the e-mails of any plugin to the visitor (membership, booking, newsletter) go out in the language of the page, only when sent to the address the visitor typed; CookieYes and every theme or plugin that draws HTML from a template script are collected and translated; Ajax Search Lite and FiboSearch find the pages when the visitor types in their language; \/it\/page and \/it\/page\/ no longer answer both (301 to the one your permalinks use); Google Site Kit no longer reports a changed home URL; WordPress' own sitemap lists the translated addresses.<\/li>\n<li>Fix: the hourglass stayed on after a translation ended with a message; two switcher presets were both called \u00abSoft\u00bb in Italian, German, Spanish and French; the free engines' counters showed English thousands separators.<\/li>\n<li>100+ new sentences translated in the 15 languages of the plugin.<\/li>\n<\/ul>\n\n<h4>1.8.7<\/h4>\n\n<ul>\n<li>Faster on large sites (tested with 5,000 pages and 75,000 sentences): the counts of every language and of every page are kept until something really changes, instead of being counted again on every screen. The admin screens no longer slow down because of TranslateRocket (the next-steps panel could add 7 to 15 seconds to every page, the WordPress page list included); Translations opens in about 3 seconds instead of 15.<\/li>\n<li>Faster search in the translated languages: the sentences are read once for all the words typed, with exactly the same results and order as before (about three times faster on a large site).<\/li>\n<li>Fix: \u00abTranslate all missing with AI\u00bb and \u00abImprove with AI\u00bb in Translation memory, and \u00abTranslate with AI\u00bb and the free Google translation in the page editor's TranslateRocket box, translated everything in one request and could end in \u00ab504 Gateway Timeout\u00bb on large sites. They now work in short steps: the memory offers \u00abContinue translating\u00bb, the editor box goes on by itself and shows how many sentences it has translated.<\/li>\n<\/ul>\n\n<h4>1.8.6.1<\/h4>\n\n<ul>\n<li>Fix: on large sites, the \u00abAI\u00bb button of a page and \u00abTranslate N missing\u00bb on AI Translation could end in \u00ab504 Gateway Timeout\u00bb: they translated everything in one request. They now work in short steps of about 25 seconds, like \u00abTranslate all missing\u00bb, with a progress bar and a \u00abContinue translating\u00bb button, so no request reaches the server's time limit. What was already translated is kept.<\/li>\n<\/ul>\n\n<h4>1.8.6<\/h4>\n\n<ul>\n<li>Fix: a language kept offline while you translate it, and preview mode, sent visitors back to the same address over and over (\u00abtoo many redirects\u00bb; a redirect loop for search engines) instead of to the page in your default language. Present since 1.7.11.<\/li>\n<li>New: one \u00abTranslate with\u00bb menu. The browser translator is in it (the default when you have no key), with every engine marked FREE (green), FREE with a daily limit, or paid \u2014 and under the menu, for the chosen engine: quality, limit, what it needs, where it runs and where your text goes. What is left of today's free limit is shown beside each engine.<\/li>\n<li>New: visits per language, without cookies \u2014 how many visits each language gets, its most read pages, and the languages your visitors' browsers speak, with a hint when many of them read a language your site does not have yet. Off until you switch it on.<\/li>\n<li>New: content per language \u2014 a \u00abLanguages\u00bb panel on every block and on every Elementor widget, section and container: show it only in some languages, or hide it in some.<\/li>\n<li>New: a different menu per language, for classic and block themes.<\/li>\n<li>New: other plugins doing the same job are detected. When a page cache is already active, TranslateRocket's own cache steps aside and says so; when two plugins optimize JavaScript, a warning says to keep that on in one only. More cache plugins are cleared when a translation changes (Hummingbird, FlyingPress, WP Engine, Kinsta, Varnish).<\/li>\n<li>New: the Translations screen shows 50 pages at a time with \u00abShow more\u00bb, and searches, filters and sorts on the server \u2014 fast with thousands of pages.<\/li>\n<li>Improved: the overview \u2014 every row opens its settings, with clearer green checks.<\/li>\n<li>Improved: when DeepL refuses a key that has not used its allowance, the message says so with DeepL's own words and the code its support asks for; DeepL rests for an hour and the next engine carries on.<\/li>\n<li>Fix: importing from TranslatePress skips its rows that are not real translations.<\/li>\n<\/ul>\n\n<h4>1.8.5<\/h4>\n\n<ul>\n<li>New: search in every language. On a translated page the site's search box finds pages by their translated text (title, excerpt, content, Elementor), never by menus, buttons, footers or cookie banners. The theme's search box, Elementor's search widget and the Search block work as they are. A switch with an info button turns it off.<\/li>\n<li>New: the plugin's screens in six more languages: Turkish, Indonesian, Simplified Chinese, Korean, Arabic and Persian.<\/li>\n<li>New: when a new version of TranslateRocket or Labs is out, a pill beside the version and a notice with \u00abUpdate now\u00bb say it inside the plugin \u2014 red when it is a security release.<\/li>\n<li>New: Next steps recommends automatic updates, with one click for TranslateRocket and Labs, and says so honestly when the host has turned them off.<\/li>\n<li>Improved: an AI provider's error is said in plain words with its HTTP code (no credit, wrong model, text too long, safety filter, firewall or proxy page, timeout, DNS, SSL\u2026), the provider's own answer under \u00abTechnical details\u00bb; \u00abLoad available models\u00bb and the provider test say the same.<\/li>\n<li>Improved: a provider's daily limit (for example Groq's tokens per day) is said as a daily limit, not \u00abwait a minute\u00bb, and the notice shows only on TranslateRocket's screens, without the provider's account codes in sight.<\/li>\n<li>Improved: simpler screens \u2014 Languages, Translations, Automatic, AI, Switcher, Memory, Next steps in front and the rest under \u00abMore\u00bb; the translation memory in pages; the list of 80 languages folded until you open it; the \u00abpages changed\u00bb notice only on Translations; Labs marked FREE in green.<\/li>\n<li>Fixed: \u00abScan site\u00bb stopped after 1,000 pages and posts: on a site with 5,600 pages the rest stayed at 0\/0. It now visits every published page, post and product, a block at a time.<\/li>\n<li>Security: the cache of translated pages no longer stores the page of a visitor who unlocked a password-protected post, has their name saved for comments or has a cart \u2014 no password-protected page is cached at all.<\/li>\n<li>Security: the wording collected from WooCommerce emails leaves out the order number, the details under each item (gift card codes, licence keys) and the note written to the customer.<\/li>\n<li>Security: in the editor's translation panel, a user who is not an administrator works only on the sentences of their own page, not on the header, menu and footer shared by the whole site.<\/li>\n<li>Security: a tag left open in a translation is shown as text, never as markup; the site's requests to itself follow WordPress's own SSL setting (https_local_ssl_verify).<\/li>\n<li>Labs 0.9.3: \u00abTranslate the whole site\u00bb goes on from where it was \u2014 pages already translated in every language are skipped, also in a job already running \u2014 with Pause and Resume; each page stops after 45 seconds and comes back, instead of being cut by the server's time limit.<\/li>\n<li>Labs 0.9.3 (security): links for external collaborators are kept encrypted in the database, a whole-site link no longer shows private or password-protected pages nor e-mails, the history export is safe to open in a spreadsheet, the support access acts only through TranslateRocket's own code in wp-admin too, and the background reading of a page never follows a redirect to another site.<\/li>\n<\/ul>\n\n<h4>1.8.4<\/h4>\n\n<ul>\n<li>Security: the translation panel in the post editor works on published content only, and removing a page's translations or running the AI or Google from it is for administrators. A Contributor's draft could reach the home page's translations.<\/li>\n<li>Security: only an administrator can send the visitors of a translated page to another site.<\/li>\n<li>Fixed: \u00abSave\u00bb and \u00abImport\u00bb in the translation panel of the post editor saved nothing.<\/li>\n<li>Labs 0.9.2 (security): the support access is limited to TranslateRocket's own tools on the site too, and the Labs page and the domains per language stay the owner's.<\/li>\n<\/ul>\n\n<h4>1.8.3<\/h4>\n\n<ul>\n<li>New: on Translations, small labels under each page say who translated it in this language and how many sentences each \u2014 an AI provider, a free Labs engine, this browser, the visual editor, by hand, an import or reuse. A page translated in several ways shows several labels.<\/li>\n<li>New: choosing MyMemory under \u00abTranslate with\u00bb shows a box for the e-mail address that raises its free limit from about 5,000 to about 50,000 characters a day, with a button to use the site's address and a Save button that keeps it at once.<\/li>\n<li>Fixed: \u00abPlugin language\u00bb now also applies to the Labs texts shown in TranslateRocket's pages, such as the conditions of the Labs engines.<\/li>\n<li>Fixed: the \u00abTranslate with\u00bb row stays in one line, the notes under it and the \u00abTranslate with your browser\u00bb box take the full width.<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>Fixed: a network problem, a gateway timeout (502, 504, 524), a firewall or a provider not available in your server's region no longer reads \u00abThe provider refused this API key\u00bb. The HTTP code now decides the message, and is shown with it; the provider's own answer is under \u00abTechnical details\u00bb.<\/li>\n<li>Improved: \u00abTranslate all missing\u00bb runs in short steps of about 25 seconds with a progress bar, saving and continuing by itself. No single request comes near the 100-second limit of Cloudflare and of many hosts.<\/li>\n<li>New: \u00abSentences per request\u00bb in AI Translation \u2192 Usage &amp; limits (Automatic, 5, 10, 20, 50): fewer for a slow or distant provider, more on a quick connection.<\/li>\n<li>Improved: requests that meet Cloudflare's 520, 522 and 524 errors are tried again, like 502, 503 and 504.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>New: \u00abTranslate with\u00bb on the Translations screen: choose the engine \u2014 your priority order, one AI provider, a free engine from Labs, or this browser. The menu says which engines are official APIs and which are unofficial endpoints, and warns when a Labs engine is chosen. Engines that are not ready stay visible with what they still need; the choice is remembered and also used by the \u00abAI\u00bb button of each page.<\/li>\n<li>Improved: the language switcher is one switcher in one place. \u00abWhere to show the switcher\u00bb now offers Header and Footer: one profile for the header menu, another for the row at the bottom of every page, each with its own look. Sites that had both in the same profile keep them: the bottom row moves to a new \u00abfooter\u00bb profile with the same look.<\/li>\n<li>Improved: \u00abYour site, live\u00bb on a phone opens the theme's \u2630 menu to show the languages, without scroll bars; a footer profile shows the bottom of the page.<\/li>\n<li>Fixed: a page counted its images and the sentences deleted since, and stayed below 100% with nothing left to translate.<\/li>\n<li>Fixed: the \u00abAI\u00bb button of a single page no longer sends image  \u2026<\/li>\n<\/ul>","raw_excerpt":"Translate your whole site with no API key \u2014 Chrome and Edge do it on your own computer. Unlimited languages, free, no paid tier.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=335777"}],"author":[{"embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/federicodev"}],"wp:attachment":[{"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335777"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335777"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335777"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335777"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335777"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/so.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}