Zinn® Translate turns a WordPress site into a genuinely multilingual one. Each language gets its own web addresses — /fr/a-propos/ alongside /about/ — with translated URL slugs, the right hreflang tags, its own sitemap, and its own llms.txt for AI answer engines.
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 — on a shop — product names, descriptions, short descriptions, purchase notes, attribute labels and variation descriptions.
Two things run, and it is worth knowing which is which.
The plugin 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 — “Add to cart”, “Read more” — come out in that language too, from the language packs WordPress already publishes.
The translation itself is bought from a provider, and you choose which:
There is no free translation tier. Machine translation costs money per word, and somebody pays a provider for every one of them — either through your Zinn Digital® plan or on your own key.
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.
A shortcode ([zinn_language_switcher]), a block, a widget and a nav-menu item, all the same control. Six styles — dropdown, inline list, pills, minimal text, flags and names, stacked list — 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.
hreflang on every page, with x-default and a self-reference.<html lang> and dir="rtl" where the language needs it./zinn-sitemap-index.xml, with xhtml:link alternates, announced in robots.txt alongside whatever else is there.hreflang rather than fighting it.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 — translating those would put the wrong item in a basket.
This plugin sends the text of your site to a translation provider that you choose and configure. It makes no outbound request at all until you have chosen one and saved a credential for it.
What is sent, and when
https://api.zinndigital.com/v1/sites/{site}/translation/sources, with the site identifier and token you pasted in. It then fetches the finished translations from https://api.zinndigital.com/v1/sites/{site}/translation/bundle/{locale}. Terms: https://zinndigital.com/legal/terms — Privacy: https://zinndigital.com/legal/privacyhttps://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent with your key in a request header. Terms: https://ai.google.dev/gemini-api/terms — Privacy: https://policies.google.com/privacyhttps://api.deepl.com/v2/translate (or https://api-free.deepl.com/v2/translate for a free key) with your key in a request header. Terms: https://www.deepl.com/en/pro-license — Privacy: https://www.deepl.com/en/privacyhttps://api.openai.com/v1/chat/completions 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 — Privacy: https://openai.com/policies/row-privacy-policyhttps://api.wordpress.org 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.No visitor data, analytics, personal data or order data is transmitted. What is sent is the published content of your site, which is already public, plus the credential you saved for the provider you chose.
https://api.zinndigital.com/v1/connector/diagnostics. You are shown theOne database table, {prefix}zinn_translations, 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.
Uninstalling the plugin drops that table and deletes those settings. Deactivating does not — so switching the plugin off to test something never destroys translations you have paid for.