{"id":377297,"date":"2026-10-06T16:58:18","date_gmt":"2026-10-06T16:58:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/zinn-translate\/"},"modified":"2026-10-06T16:58:04","modified_gmt":"2026-10-06T16:58:04","slug":"zinn-translate","status":"publish","type":"plugin","link":"https:\/\/nl.wordpress.org\/plugins\/zinn-translate\/","author":23304153,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.4.7","stable_tag":"2.4.7","tested":"7.1.3","requires":"6.6","requires_php":"8.2","requires_plugins":null,"header_name":"Zinn\u00ae Translate","header_author":"Neil Lock \u2014 CEO, Zinn Digital\u00ae Ltd","header_description":"Publishes this site in every language you choose, on its own web addresses, with translated slugs, metadata, menus, WooCommerce products, hreflang, per-language sitemaps and llms.txt. Translate with your Zinn Digital\u00ae plan or with your own provider key.","assets_banners_color":"3f4d7b","last_updated":"2026-10-06 16:58:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/zinndigital.com\/wordpress-plugins\/zinn-translate","header_author_uri":"https:\/\/zinndigital.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":132,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.4.7":{"tag":"2.4.7","author":"zinndigital","date":"2026-10-06 16:58:04","revision":3731265}},"upgrade_notice":{"2.2.5":"<p>If you set the plugin up on its settings screen and no translated pages appeared, this makes them appear. Your settings are kept.<\/p>","2.2.1":"<p>Fixes a fatal error on the settings screen for sites that took the first 2.2.0 build. Nothing else changes and your settings are kept.<\/p>","2.2.0":"<p>Shares the right OpenGraph title and description to Facebook, LinkedIn and X, shows variation descriptions and custom attribute values in the visitor&#039;s language, and translates WooCommerce products by default on new sites. Your settings are unchanged.<\/p>","2.0.0":"<p>Adds translated slugs, metadata, menus and WooCommerce, a language switcher, manual overrides, per-language sitemaps, and the option to translate with your own provider key instead of a Zinn Digital\u00ae plan. Your existing settings are carried over.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3731264,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3731264,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3731264,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3731264,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3731264,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"zinn\/language-switcher":{"name":"zinn\/language-switcher","title":"Language switcher"}},"tagged_versions":["2.4.7"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3731264,"resolution":"1","location":"assets","locale":"","width":1100,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3731264,"resolution":"2","location":"assets","locale":"","width":900,"height":404},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3731264,"resolution":"3","location":"assets","locale":"","width":1100,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3731264,"resolution":"4","location":"assets","locale":"","width":1100,"height":526}},"screenshots":{"1":"Choosing who pays and which languages to publish.","2":"The language switcher, in six styles.","3":"The manual-override screen.","4":"Per-language sitemaps and <code>llms.txt<\/code> addresses, with links to check them."}},"plugin_section":[262246],"plugin_tags":[2993,99,186,2333,286],"plugin_category":[45,48,55],"plugin_contributors":[280285],"plugin_business_model":[],"class_list":["post-377297","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-hreflang","plugin_tags-multilingual","plugin_tags-seo","plugin_tags-translation","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-language-tools","plugin_category-seo-and-marketing","plugin_contributors-zinndigital","plugin_committers-zinndigital"],"banners":{"banner":"https:\/\/ps.w.org\/zinn-translate\/assets\/banner-772x250.png?rev=3731264","banner_2x":"https:\/\/ps.w.org\/zinn-translate\/assets\/banner-1544x500.png?rev=3731264","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/zinn-translate\/assets\/icon.svg?rev=3731264","icon":"https:\/\/ps.w.org\/zinn-translate\/assets\/icon.svg?rev=3731264","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/zinn-translate\/assets\/screenshot-1.png?rev=3731264","caption":"Choosing who pays and which languages to publish."},{"src":"https:\/\/ps.w.org\/zinn-translate\/assets\/screenshot-2.png?rev=3731264","caption":"The language switcher, in six styles."},{"src":"https:\/\/ps.w.org\/zinn-translate\/assets\/screenshot-3.png?rev=3731264","caption":"The manual-override screen."},{"src":"https:\/\/ps.w.org\/zinn-translate\/assets\/screenshot-4.png?rev=3731264","caption":"Per-language sitemaps and <code>llms.txt<\/code> addresses, with links to check them."}],"raw_content":"<!--section=description-->\n<p>Zinn\u00ae Translate turns a WordPress site into a genuinely multilingual one. Each language gets its own web addresses \u2014 <code>\/fr\/a-propos\/<\/code> alongside <code>\/about\/<\/code> \u2014 with translated URL slugs, the right <code>hreflang<\/code> tags, its own sitemap, and its own <code>llms.txt<\/code> for AI answer engines.<\/p>\n\n<p>It translates what a visitor actually reads, which is more than a page's body text: titles, bodies and excerpts, URL slugs, SEO titles and descriptions, OpenGraph tags, image alt text, categories and tags, navigation menus, your site title and tagline, and \u2014 on a shop \u2014 product names, descriptions, short descriptions, purchase notes, attribute labels and variation descriptions.<\/p>\n\n<h4>Where the translations happen<\/h4>\n\n<p>Two things run, and it is worth knowing which is which.<\/p>\n\n<p>The <strong>plugin<\/strong> runs on your site. It lists every translatable string, stores the finished translations in one table on your own server, and swaps the words in while a page renders. It also tells WordPress which language the page is in, so your theme's and WooCommerce's own buttons \u2014 \"Add to cart\", \"Read more\" \u2014 come out in that language too, from the language packs WordPress already publishes.<\/p>\n\n<p>The <strong>translation itself<\/strong> is bought from a provider, and you choose which:<\/p>\n\n<ul>\n<li><strong>Your Zinn Digital\u00ae plan.<\/strong> Connect the site with its ID and token and the words are translated on Zinn Digital\u00ae, against that site's Site Translation plan.<\/li>\n<li><strong>Your own API key.<\/strong> Paste a Google Gemini, DeepL or OpenAI key and the plugin translates directly with it. No Zinn Digital\u00ae account is needed and the provider bills you.<\/li>\n<\/ul>\n\n<p>There is no free translation tier. Machine translation costs money per word, and somebody pays a provider for every one of them \u2014 either through your Zinn Digital\u00ae plan or on your own key.<\/p>\n\n<h4>What it does not do<\/h4>\n\n<ul>\n<li><strong>It does not duplicate your content.<\/strong> No shadow posts, no second post type, no parallel site to keep in step. Translations are applied while the page renders, so deactivating the plugin returns your site to exactly what it was.<\/li>\n<li><strong>It does not add a REST endpoint.<\/strong> It adds a shortcode, a block, a widget and a nav-menu item for the language switcher, and no public route of its own.<\/li>\n<li><strong>It does not fetch anything while a visitor waits.<\/strong> Translations are read from your own database. A provider being slow can never make your site slow.<\/li>\n<\/ul>\n\n<h4>Corrections that stick<\/h4>\n\n<p>Every translation can be edited by hand, and an edited translation is never overwritten. Re-translating the page leaves your wording exactly as you typed it.<\/p>\n\n<h4>The language switcher<\/h4>\n\n<p>A shortcode (<code>[zinn_language_switcher]<\/code>), a block, a widget and a nav-menu item, all the same control. Six styles \u2014 dropdown, inline list, pills, minimal text, flags and names, stacked list \u2014 each with editable colours, spacing, corners and text size. You choose which languages appear, and whether they are named in their own language (Deutsch) or in yours (German). Right-to-left languages are laid out correctly, and the switcher is keyboard-operable with a visible focus ring.<\/p>\n\n<h4>SEO<\/h4>\n\n<ul>\n<li>Reciprocal <code>hreflang<\/code> on every page, with <code>x-default<\/code> and a self-reference.<\/li>\n<li><code>&lt;html lang&gt;<\/code> and <code>dir=\"rtl\"<\/code> where the language needs it.<\/li>\n<li>The canonical of a translated page is that page, never the original.<\/li>\n<li>Works alongside <strong>Yoast SEO<\/strong>, <strong>Rank Math<\/strong>, <strong>All in One SEO<\/strong> and <strong>SEOPress<\/strong> by filtering what they output rather than competing with them, so a page never ends up with two canonicals or two titles.<\/li>\n<li>Its own per-language sitemaps, indexed at <code>\/zinn-sitemap-index.xml<\/code>, with <code>xhtml:link<\/code> alternates, announced in <code>robots.txt<\/code> alongside whatever else is there.<\/li>\n<li>If another translation plugin is active, this one stops emitting <code>hreflang<\/code> rather than fighting it.<\/li>\n<\/ul>\n\n<h4>WooCommerce<\/h4>\n\n<p>Product names, descriptions, short descriptions, purchase notes, attribute labels, attribute values and variation descriptions. Prices, SKUs and the stored option values that identify a variation are never touched \u2014 translating those would put the wrong item in a basket.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends the text of your site to a translation provider <strong>that you choose and configure<\/strong>. It makes no outbound request at all until you have chosen one and saved a credential for it.<\/p>\n\n<p><strong>What is sent, and when<\/strong><\/p>\n\n<ul>\n<li><strong>To Zinn Digital\u00ae, only if you connect the site (mode \"My Zinn Digital\u00ae plan\").<\/strong> On an hourly background pass and when you press Translate, the plugin posts your site's translatable text \u2014 page and post titles, bodies, excerpts and slugs, SEO titles and descriptions, image alt text, term names, menu labels and WooCommerce product fields \u2014 to <code>https:\/\/api.zinndigital.com\/v1\/sites\/{site}\/translation\/sources<\/code>, with the site identifier and token you pasted in. It then fetches the finished translations from <code>https:\/\/api.zinndigital.com\/v1\/sites\/{site}\/translation\/bundle\/{locale}<\/code>. Terms: https:\/\/zinndigital.com\/legal\/terms \u2014 Privacy: https:\/\/zinndigital.com\/legal\/privacy<\/li>\n<li><strong>To Google Gemini, only if you choose it and save a Google API key.<\/strong> On the background translation pass, the plugin posts batches of that same text to <code>https:\/\/generativelanguage.googleapis.com\/v1beta\/models\/{model}:generateContent<\/code> with your key in a request header. Terms: https:\/\/ai.google.dev\/gemini-api\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li><strong>To DeepL, only if you choose it and save a DeepL API key.<\/strong> The plugin posts batches of that text to <code>https:\/\/api.deepl.com\/v2\/translate<\/code> (or <code>https:\/\/api-free.deepl.com\/v2\/translate<\/code> for a free key) with your key in a request header. Terms: https:\/\/www.deepl.com\/en\/pro-license \u2014 Privacy: https:\/\/www.deepl.com\/en\/privacy<\/li>\n<li><strong>To OpenAI, only if you choose it and save an OpenAI API key.<\/strong> The plugin posts batches of that text to <code>https:\/\/api.openai.com\/v1\/chat\/completions<\/code> with your key in a request header. If you set a different base URL, it goes to that service instead of OpenAI. Terms: https:\/\/openai.com\/policies\/row-terms-of-use \u2014 Privacy: https:\/\/openai.com\/policies\/row-privacy-policy<\/li>\n<li><strong>To WordPress.org, when you publish a language.<\/strong> The plugin asks <code>https:\/\/api.wordpress.org<\/code> for the WordPress, theme and plugin language packs for that language, so your theme's own buttons are shown in it. This is the same request WordPress makes when you change the site language yourself.<\/li>\n<\/ul>\n\n<p><strong>No visitor data, analytics, personal data or order data is transmitted.<\/strong> What is sent is the published content of your site, which is already public, plus the credential you saved for the provider you chose.<\/p>\n\n<ul>\n<li><strong>Support diagnostics (only when you press send).<\/strong> If you ask us for help, the plugin can send\na support report to <code>https:\/\/api.zinndigital.com\/v1\/connector\/diagnostics<\/code>. <strong>You are shown the\nexact payload first, already redacted, and nothing leaves your site until you press send.<\/strong>\nCredentials are excluded by declaration rather than by matching key names, and render as\n  [not sent \u2014 credential]. The plugin never sends this on its own initiative.<\/li>\n<\/ul>\n\n<h3>What this plugin stores on your site<\/h3>\n\n<p>One database table, <code>{prefix}zinn_translations<\/code>, holding one row per translated string: which content it belongs to, which language, the translation, a hash of the source it was made from, and whether you edited it by hand. It also stores your settings, including the API credential you saved.<\/p>\n\n<p>Uninstalling the plugin drops that table and deletes those settings. Deactivating does not \u2014 so switching the plugin off to test something never destroys translations you have paid for.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin and activate it.<\/li>\n<li>Go to <strong>Zinn\u00ae \u2192 Translate<\/strong>.<\/li>\n<li>Choose who pays: your Zinn Digital\u00ae plan (paste the Site ID and token from the site's Translation tab) or your own provider key.<\/li>\n<li>Choose the languages to publish, and save.<\/li>\n<\/ol>\n\n<p>Translation runs in the background. Publishing or updating a page marks its translations out of date and they are remade automatically; editing a page without changing any words costs nothing.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20duplicate%20my%20posts%3F\"><h3>Does it duplicate my posts?<\/h3><\/dt>\n<dd><p>No. There is no second copy of anything. A translated page is your own page with the words swapped in as it renders, so your content, your permalinks and your editor are untouched.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20translation%20service%20is%20down%3F\"><h3>What happens if the translation service is down?<\/h3><\/dt>\n<dd><p>Nothing on your site changes. Translations are already stored on your own server, so pages keep serving in every language. New or edited content is translated on the next background pass.<\/p><\/dd>\n<dt id=\"can%20i%20correct%20a%20translation%3F\"><h3>Can I correct a translation?<\/h3><\/dt>\n<dd><p>Yes, on the <strong>Manual overrides<\/strong> tab. An edited translation is marked as yours and is never overwritten by a later re-translation.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20old%20urls%20if%20i%20turn%20on%20translated%20slugs%3F\"><h3>What happens to my old URLs if I turn on translated slugs?<\/h3><\/dt>\n<dd><p>They keep working. The untranslated address redirects permanently to the translated one, and if a re-translation ever changes a slug the previous address redirects too.<\/p><\/dd>\n<dt id=\"will%20it%20clash%20with%20my%20seo%20plugin%3F\"><h3>Will it clash with my SEO plugin?<\/h3><\/dt>\n<dd><p>No. It detects Yoast SEO, Rank Math, All in One SEO and SEOPress and translates what they emit through their own filters, rather than printing a second title, description or canonical of its own.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20zinn%20digital%C2%AE%20account%3F\"><h3>Do I need a Zinn Digital\u00ae account?<\/h3><\/dt>\n<dd><p>No. With your own Google Gemini, DeepL or OpenAI key the plugin works on its own and the provider bills you. A Zinn Digital\u00ae plan is the alternative, not a requirement.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.4.7<\/h4>\n\n<ul>\n<li>The Dropdown language switcher (the default style) is visible again: it now shows the current language as a button that opens the list on hover or keyboard focus; before, it showed nothing at all.<\/li>\n<\/ul>\n\n<h4>2.4.6<\/h4>\n\n<ul>\n<li>Serbian: quotation marks are now \u201e\u2026\u201c throughout, as the Serbian WordPress translation team writes them.<\/li>\n<\/ul>\n\n<h4>2.4.5<\/h4>\n\n<ul>\n<li>Translations follow each language's WordPress.org translation team style guide: its quotation marks, spacing before punctuation, apostrophes and ellipsis, and the forms of address it uses.<\/li>\n<\/ul>\n\n<h4>2.4.4<\/h4>\n\n<ul>\n<li>Japanese follows the WordPress.org Japanese team's style guide: a half-width space around Latin text, half-width colons and question marks.<\/li>\n<\/ul>\n\n<h4>2.4.3<\/h4>\n\n<ul>\n<li>New: two wp-config.php switches for the Zinn Digital\u00ae panel. define( 'ZINN_TRANSLATE_PROMO', false ); removes the panel (dashboard widget, settings block and footer), and define( 'ZINN_TRANSLATE_PROMO_HOSTING_URL', 'https:\/\/\u2026' ); points its hosting offer at another https address.<\/li>\n<\/ul>\n\n<h4>2.4.2<\/h4>\n\n<ul>\n<li>Every bundled translation of this plugin is redone with the current Google model: each locale in its own script (Serbian in Cyrillic), in the register its WordPress translation team uses, with the original spacing, placeholders and entities preserved.<\/li>\n<\/ul>\n\n<h4>2.4.1<\/h4>\n\n<ul>\n<li>The Gemini provider now defaults to gemini-3.8-flash, the current Google model for translation (the older default is no longer offered to new API keys). A model you chose in Settings is unchanged.<\/li>\n<li>Translations of this plugin itself are corrected: every locale is in its own script, with the original spacing and placeholders preserved.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>Smaller download: the editable translation sources (.po) are no longer shipped; WordPress only ever loads the compiled .mo and .l10n.php files, which are unchanged.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Updates install whenever you click Update, even months later: the download link is fetched fresh at install time instead of expiring in WordPress's saved update data.<\/li>\n<\/ul>\n\n<h4>2.2.11<\/h4>\n\n<ul>\n<li>Security: every translation handed back to WordPress (post, page and menu titles, excerpts, term names, the site title and tagline, SEO titles and descriptions, image alt text, WooCommerce labels and descriptions) is now escaped before it is returned.<\/li>\n<li>Security: the design-token stylesheet validates every component id and strips anything that could close the inline style.<\/li>\n<li>Security: the language switcher's shortcode, block, menu item and widget wrapper are escaped as they are output.<\/li>\n<\/ul>\n\n<h4>2.2.10<\/h4>\n\n<ul>\n<li>Translations: a word written in the wrong alphabet (for example a Korean word inside a Malayalam sentence, or an Urdu word ending a Punjabi one) is corrected in every language that had one. Each affected string was translated again and checked.<\/li>\n<\/ul>\n\n<h4>2.2.9<\/h4>\n\n<ul>\n<li>Translations: re-translated the strings where a locale had dropped or altered a protected product name.<\/li>\n<\/ul>\n\n<h4>2.2.8<\/h4>\n\n<ul>\n<li>Tested up to: 7.1 \u2014 the major version only, as WordPress.org's Plugin Check requires (7.1.1 was refused as invalid_tested_upto_minor).<\/li>\n<\/ul>\n\n<h4>2.2.7<\/h4>\n\n<ul>\n<li>Tested up to WordPress 7.1.1.<\/li>\n<\/ul>\n\n<h4>2.2.6<\/h4>\n\n<ul>\n<li>Changed: on a Zinn Digital\u00ae plan, the languages this site publishes are now the ones you switch on under \"Shown to visitors\" on the site's Translation tab in your dashboard. The site checks that choice every hour, straight after you save the Site ID and token, and when you open these settings. Until it has read the choice once, it keeps publishing the languages chosen on this screen. With your own provider key, you still choose the languages here.<\/li>\n<li>Fixed: the dashboard's language choice was saved but never used, so switching a language on or off there changed nothing on the site.<\/li>\n<li>Fixed: the \"Site token\" setting now says what it is \u2014 an API key from your dashboard's API keys page, with the sites.view and sites.translation.manage permissions \u2014 and a rejected token says the same.<\/li>\n<\/ul>\n\n<h4>2.2.5<\/h4>\n\n<ul>\n<li>Fixed: on a site configured through the settings screen, the plugin behaved as if it had never been set up \u2014 no language addresses, no hreflang, and a status card saying \"Not connected\" beside the saved Site ID and token. Settings read very early in a page load, before the settings screen had registered, were the defaults, and they were then kept for the rest of that page load. They are now read from what you saved.<\/li>\n<li>Fixed: \"Languages to publish\", the language switcher's language list and \"Post types\" could not be saved \u2014 saving the screen stored none of them, so no language was published and, after one save, no content was collected for translation.<\/li>\n<li>Fixed: a language published on the settings screen now gets its web addresses straight away. Previously its pages answered \"not found\" until the plugin was reactivated or the site's permalinks were saved.<\/li>\n<li>Fixed: a translated address in a language that does not use the Latin alphabet \u2014 Japanese, Chinese, Arabic, Hindi, Thai and others \u2014 now opens the page it names. It previously redirected to the site's front page, and on those pages the \"other languages\" links and the search-engine language annotations pointed at the front page rather than at the same page in each language.<\/li>\n<\/ul>\n\n<h4>2.2.4<\/h4>\n\n<ul>\n<li>In a right-to-left admin language, the Zinn Digital\u00ae menu entry showed its trademark symbol on the wrong side of the name. The name is now isolated so it reads correctly in Arabic, Hebrew, Persian, Pashto and Urdu.<\/li>\n<\/ul>\n\n<h4>2.2.3<\/h4>\n\n<ul>\n<li>The admin screens' styles and scripts are now enqueued through WordPress rather than printed into the page, so they can be dequeued, deferred or optimised by your site like any other asset \u2014 and they still work on a site whose security policy forbids inline code.<\/li>\n<\/ul>\n\n<h4>2.2.2<\/h4>\n\n<ul>\n<li>Translations: every string this plugin's admin shows is now translated in every bundled language. A few strings the machine translator refused were shipping in English; they are now translated by hand.<\/li>\n<li>The Japanese plugin description is translated.<\/li>\n<li>Every query against the plugin's translation table binds the table name as an identifier.<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Fixed a fatal error when opening or saving the settings screen on a site that updated to 2.2.0 before 13:44 UTC on 9 September 2026. Three classes the screen uses were shipped in that build but never loaded. Sites that installed 2.2.0 later already had the fix; this release makes sure every site gets it.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Fixed: your OpenGraph title and description are now translated as themselves. A page with an OpenGraph title different from its SEO title had the SEO title shared to Facebook, LinkedIn and X instead \u2014 translated, and not what you wrote.<\/li>\n<li>Fixed: variation descriptions are shown in the visitor's language. They were being translated and stored, and the shopper still saw the original text under the variation picker.<\/li>\n<li>Fixed: custom product attribute values are shown in the visitor's language, so \"Material: Oak, Walnut\" no longer answers a translated question in the original language.<\/li>\n<li>New sites now translate WooCommerce products by default, alongside posts and pages. A site that had already chosen its post types keeps exactly what it chose.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Fixed a fatal error on activation: the settings screen's class was never loaded, which took the site down on the front end and in wp-admin.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Real settings, real styling and a real connection status, on the shared Zinn\u00ae plugin framework.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Translated URL slugs, with permanent redirects from the untranslated address and from any slug a re-translation supersedes.<\/li>\n<li>SEO metadata: titles, descriptions, OpenGraph, image alt text, and compatibility with Yoast SEO, Rank Math, All in One SEO and SEOPress.<\/li>\n<li>Categories, tags, navigation menus (classic and block themes), the site title and the tagline.<\/li>\n<li>WooCommerce: products, short descriptions, purchase notes, attribute labels and variation descriptions.<\/li>\n<li>A language switcher as a shortcode, a block, a widget and a nav-menu item, with six customisable styles and right-to-left support.<\/li>\n<li>Manual overrides that survive re-translation.<\/li>\n<li>Standalone operation with your own Google Gemini, DeepL or OpenAI key \u2014 no Zinn Digital\u00ae account needed.<\/li>\n<li>Per-language sitemaps and <code>llms.txt<\/code> \/ <code>llms-full.txt<\/code>.<\/li>\n<li>WordPress, theme and plugin language packs installed automatically for each published language.<\/li>\n<li>Translations are now stored on your own site, so pages keep serving when the provider cannot be reached.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Rendering of translated titles, bodies and excerpts with locale-prefixed URLs and hreflang.<\/li>\n<\/ul>","raw_excerpt":"Publish your site in 58 languages on their own web addresses, with translated slugs, metadata, menus, WooCommerce products, hreflang and sitemaps.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/377297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=377297"}],"author":[{"embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/zinndigital"}],"wp:attachment":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=377297"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=377297"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=377297"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=377297"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=377297"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=377297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}