Title: Transleti Translator – Multilingual &amp; Automatic Translation
Author: TransLeti
Published: <strong>Majo 28, 2026</strong>
Last modified: Aŭgusto 3, 2026

---

Priserĉi kromprogramojn

![](https://ps.w.org/transleti-translator/assets/banner-772x250.png?rev=3557325)

![](https://ps.w.org/transleti-translator/assets/icon-256x256.png?rev=3552779)

# Transleti Translator – Multilingual & Automatic Translation

 De [TransLeti](https://profiles.wordpress.org/transleti/)

[Elŝuti](https://downloads.wordpress.org/plugin/transleti-translator.1.9.42.zip)

 * [Detaloj](https://eo.wordpress.org/plugins/transleti-translator/#description)
 * [Pritaksoj](https://eo.wordpress.org/plugins/transleti-translator/#reviews)
 *  [Instalo](https://eo.wordpress.org/plugins/transleti-translator/#installation)
 * [Programado](https://eo.wordpress.org/plugins/transleti-translator/#developers)

 [Helpo](https://wordpress.org/support/plugin/transleti-translator/)

## Priskribo

**The plugin is 100% free and GPL.** You can run a fully multilingual WordPress 
site with manual translations, hreflang sitemap, language switcher and slug translation
without ever paying anything or connecting to an external service.

If you also want automatic translation across every language at once, connect the
optional Transleti API — flat-rate, unlimited words and languages, backed by a **
14-day money-back guarantee**. **The API is optional**: the manual workflow keeps
working forever, even if you never subscribe.

Transleti Translator handles posts, pages, custom post types, WooCommerce products,
menus, slugs, SEO meta, and theme strings. A built-in visual editor lets you click
on any text in the rendered page and refine its translation in a side-by-side panel—
useful both for polishing automatic translations and for translating everything 
by hand.

#### Two ways to use it

 * **Manual mode (free, forever)** — edit each translation directly in the WordPress
   post editor or via the visual front-end editor. No API key, no subscription, 
   no external connection required. Includes the language switcher, hreflang sitemap,
   slug translation and 49+ pre-defined language slots.
 * **Automatic mode (optional Transleti API)** — connect an API key and the plugin
   fans out translations to every target language in parallel. Flat-rate, unlimited
   words, with a 14-day money-back guarantee. If you decide to stop, the plugin 
   keeps working in manual mode. Manual edits on top of automatic translations are
   preserved on re-translation.

#### Features

 * **Free GPL plugin** — fully functional in manual mode without any external connection
   or paid service.
 * **Visual translation editor** — open any front-end page in an editor frame, click
   on any string (titles, paragraphs, menu items, buttons, image alts) and edit 
   its translation in a side panel with live preview.
 * **Nothing goes live half-translated** — a page only becomes available in a new
   language once its content, title and SEO description are ready. Until then visitors
   and search engines get a “translation in progress” response instead of a page
   that is still half in the source language, so nothing broken ever gets indexed.
 * **Keeps your site translated on its own** — publish a post and it gets translated
   in the background, in every language. Edit it later and the translations follow.
   No queue to launch, no per-post action, nothing to remember.
 * **Manual translation editor** — review and refine translations directly in the
   WordPress post editor for every language.
 * **Optional unlimited automatic translation** — flat-rate Transleti API subscription
   with a 14-day money-back guarantee. If you do not keep the subscription, the 
   API stops and the plugin keeps working in manual mode.
 * **Parallel translation** (API mode) — requests fan out to every target language
   simultaneously. A site with 10 languages translates in roughly the same time 
   as a site with 1.
 * **Built on open source** — the plugin itself is GPL, fully auditable, no proprietary
   lock-in.
 * **Theme & builder-agnostic** — works out of the box with Elementor, Divi, Gutenberg,
   classic editor, GeneratePress and any standards-compliant theme.
 * **WooCommerce ready** — translates product titles, descriptions, attributes and
   variations. Also supported in Connector Mode (with WooCommerce Multilingual &
   Multicurrency when running behind WPML).
 * **Connector Mode for WPML, Polylang and TranslatePress** — already using one 
   of them? Keep it in charge of your languages, URLs, switcher and stored translations,
   and let Transleti act purely as the automatic translation engine behind it. Detected
   and enabled automatically; no double language switching or duplicate URLs.

#### Key features

 * **Multilingual sitemap with hreflang** — separate `<url>` entries per language(
   the format Google explicitly documents) with self-referential hreflang and `x-
   default`. Compatible with Yoast SEO, RankMath, SEOPress, AIOSEO and the WordPress
   core sitemap.
 * **SEO meta translation** — titles and descriptions for SEOPress, Yoast, AIOSEO
   and RankMath.
 * **Visual translation editor** — open any front-end page in an editor frame, click
   on any string (titles, paragraphs, menu items, buttons, image alts) and edit 
   its translation in a side panel with live preview.
 * **Manual translation editor** — review and refine translations directly in the
   WordPress post editor for every language.
 * **Manual edit protection** — your manual fixes survive re-translation cycles.
 * **Slug translation** — translated URLs (e.g. `/es/contacto/`) for clean per-language
   SEO.
 * **Menu translation** — duplicates and translates navigation menus per language.
 * **HTML entity and shortcode protection** — prevents corruption of `&copy;`, `[
   shortcode]`, and similar in translated output.
 * **Custom “do not translate” word list** — keep brand names, product codes and
   acronyms intact across all languages.
 * **Language switcher** — widget, block and shortcode in flag, dropdown or text
   styles.

#### Supported languages

49+ languages including English, Spanish, French, German, Italian, Portuguese (PT/
BR), Dutch, Polish, Romanian, Bulgarian, Hungarian, Finnish, Russian, Ukrainian,
Arabic, Hindi, Japanese, Korean, Chinese, Thai, Turkish, and more.

#### How it works

**Manual mode (free):**

 1. Install and activate the plugin.
 2. Choose your default language and the target languages you want to publish.
 3. For each post / page, open the translation editor (in the post editor sidebar or
    via the visual front-end editor) and type the translation by hand.
 4. The language switcher, hreflang sitemap and per-language slugs work out of the 
    box.

**Automatic mode (optional API):**

 1. Install and activate the plugin.
 2. Sign up at https://transleti.com to get your API key (flat-rate subscription with
    a 14-day money-back guarantee).
 3. Enter your Transleti API key in the plugin settings.
 4. Choose your default language and the languages you want to publish.
 5. The plugin runs a background job that translates posts, menus, slugs and SEO meta
    automatically.
 6. Optionally refine any translation manually from the WordPress post editor — your
    edits are preserved on re-translation.

### External Services

This plugin can optionally connect to the Transleti translation API (`api.transleti.
com`) to translate site content automatically into the languages you select. **This
connection is optional** — the plugin works in manual mode (typing translations 
by hand from the WordPress editor or the visual front-end editor) without contacting
any external service. No external request is made unless you enter an API key in
the plugin settings.

**What data is sent (only in automatic mode):** the text strings to translate (post
content, titles, excerpts, menu labels, slugs, SEO meta, theme strings) along with
the source and target language codes and your API key.

**When it is sent:** when the background translation cron runs, when you save a 
post that needs re-translation, or when you trigger a manual translation from the
settings page.

**Service provider:** Transleti — `https://transleti.com`

 * Terms of Service: https://transleti.com/terms
 * Privacy Policy: https://transleti.com/privacy

No personal data of site visitors is sent to the service. Only the text content 
you choose to translate.

## Ekrankopioj

[⌊General settings — configure default language, URL structure, hreflang, slug translation
and the external cron service.⌉⌊General settings — configure default language, URL
structure, hreflang, slug translation and the external cron service.⌉[

General settings — configure default language, URL structure, hreflang, slug translation
and the external cron service.

[⌊Languages — add up to 49 target languages with custom slugs and per-language publish
toggles.⌉⌊Languages — add up to 49 target languages with custom slugs and per-language
publish toggles.⌉[

Languages — add up to 49 target languages with custom slugs and per-language publish
toggles.

[⌊Machine Translation — connect to the Transleti / LibreTranslate API and define
words or phrases that must stay untranslated.⌉⌊Machine Translation — connect to 
the Transleti / LibreTranslate API and define words or phrases that must stay untranslated
.⌉[

Machine Translation — connect to the Transleti / LibreTranslate API and define words
or phrases that must stay untranslated.

[⌊Language Switcher — floating selector, [transleti-switcher] shortcode and automatic
navigation menu integration with flags, dropdowns or text styles.⌉⌊Language Switcher—
floating selector, [transleti-switcher] shortcode and automatic navigation menu 
integration with flags, dropdowns or text styles.⌉[

Language Switcher — floating selector, [transleti-switcher] shortcode and automatic
navigation menu integration with flags, dropdowns or text styles.

[⌊Translation Process — per-language progress bars showing machine and human-reviewed
translation counts.⌉⌊Translation Process — per-language progress bars showing machine
and human-reviewed translation counts.⌉[

Translation Process — per-language progress bars showing machine and human-reviewed
translation counts.

[⌊Translations — review and edit every translated string per language; "Human reviewed"
edits are never overwritten by auto-translation.⌉⌊Translations — review and edit
every translated string per language; "Human reviewed" edits are never overwritten
by auto-translation.⌉[

Translations — review and edit every translated string per language; “Human reviewed”
edits are never overwritten by auto-translation.

[⌊Images — replace logos, infographics or any image with a localized version per
language.⌉⌊Images — replace logos, infographics or any image with a localized version
per language.⌉[

Images — replace logos, infographics or any image with a localized version per language.

[⌊Support — send a diagnostic report to Transleti with environment info, plugin 
settings and recent debug log lines.⌉⌊Support — send a diagnostic report to Transleti
with environment info, plugin settings and recent debug log lines.⌉[

Support — send a diagnostic report to Transleti with environment info, plugin settings
and recent debug log lines.

[⌊Visual Editor — click any text on the front-end and translate it from a live side
panel.⌉⌊Visual Editor — click any text on the front-end and translate it from a 
live side panel.⌉[

Visual Editor — click any text on the front-end and translate it from a live side
panel.

[⌊Connector Mode — when WPML, Polylang or TranslatePress is active, Transleti works
as its automatic translation engine, with a per-language progress panel and no duplicate
switcher or URLs.⌉⌊Connector Mode — when WPML, Polylang or TranslatePress is active,
Transleti works as its automatic translation engine, with a per-language progress
panel and no duplicate switcher or URLs.⌉[

Connector Mode — when WPML, Polylang or TranslatePress is active, Transleti works
as its automatic translation engine, with a per-language progress panel and no duplicate
switcher or URLs.

## Instalo

 1. Upload the `transleti-translator` folder to `/wp-content/plugins/`, or install 
    through the WordPress plugin installer.
 2. Activate the plugin via the _Plugins_ menu in WordPress.
 3. Go to _Settings  Transleti Translator_.
 4. Select your default language and target languages.
 5. (Optional) Enter a Transleti API key to enable automatic translation. Without a
    key, you can still translate every string manually from the post editor or the 
    visual editor.
 6. Save settings.

## OD

### Do I need to pay anything to use this plugin?

No. The plugin is free GPL software and works fully in manual mode without any external
connection or paid subscription. Automatic translation is an optional add-on that
uses the Transleti API.

### Can I use the plugin without an API key?

Yes. Without an API key the plugin runs in manual mode: language switcher, per-language
slugs, hreflang sitemap and the manual / visual translation editors all work normally.
You simply type translations by hand instead of having the plugin generate them.

### How does billing work, and is there a guarantee?

The automatic translation API is a flat-rate subscription (unlimited words and languages)
that you can start at https://transleti.com. It comes with a **14-day money-back
guarantee**: if it isn’t for you, ask for a refund within 14 days. The manual workflow
always keeps working for free, whether or not you subscribe.

### Who owns the translations, and what happens if I stop subscribing?

Your translations are always yours. Your translated content is stored in your own
site’s database and keeps working in manual mode for free even if you later cancel
your subscription — you never lose it. Your original content (your posts and pages
in the site’s main language) is never touched by the plugin.

### Is the plugin really fast even with many languages?

Yes. Translation requests for every target language are fanned out in parallel, 
so adding more languages does not multiply the wait time. A 10-language site translates
in roughly the same time window as a 2-language site.

### Does it work with WooCommerce?

Yes. Product titles, descriptions, short descriptions, attributes and variations
are all translated automatically. When you run in WPML Connector Mode, install the
free **WooCommerce Multilingual & Multicurrency (WCML)** add-on so WPML registers
products, categories and tags as translatable — the plugin then feeds those translations
automatically, and each shop only shows the products for the language being viewed.

### I already use WPML, Polylang or TranslatePress. Can I use Transleti just as the translation engine?

Yes. When WPML, Polylang or TranslatePress is active, Transleti automatically switches
to **Connector Mode**: your multilingual plugin stays in charge of languages, URLs,
the language switcher and the stored translations, and Transleti works purely as
the machine-translation engine behind it — no duplicate switchers or URLs. You can
force plain Standalone mode from the Connector tab if you prefer Transleti to manage
languages itself.

**With WPML** it translates your posts, pages, custom post types, WooCommerce products(
with WooCommerce Multilingual & Multicurrency), taxonomy terms, menus, slugs, SEO
meta and interface strings into every language you have set up.

**With TranslatePress** Transleti is added to its list of automatic translation 
engines, and it also translates your pages in the background instead of waiting 
for someone to visit each one in each language — so the site translates itself, 
including WooCommerce shops.

### Does it support Elementor, Divi, Gutenberg and the classic editor?

Yes. Elementor pages translate the underlying `_elementor_data` JSON; Divi pages
translate the `et_pb_*` shortcode content and text attributes (headings, buttons,
CTAs, blurbs, tabs and more); Gutenberg parses blocks and translates innerHTML and
block attributes; classic posts translate `post_content` directly.

### Will Google index the translated pages correctly?

Yes. The plugin emits a separate `<url>` element per language in the sitemap (the
format Google explicitly documents), with bidirectional hreflang and `x-default`.
It also outputs `<link rel="alternate" hreflang="...">` tags in the HTML head.

It also protects you from the opposite problem: a page that is only partly translated.
Until the content, the title and the meta description are ready in that language,
the page returns a temporary “translation in progress” response instead of a half-
English page — so Google never indexes a broken version and has nothing to de-index
later.

### Does it cost more if I publish a lot of content?

No. The subscription is flat-rate: the same price whether you publish one post a
month or twenty a day, in one language or in all 49. There is no per-word, per-character
or per-API-call billing, and no credits to top up. Sites with continuous publishing
are exactly what it is built for.

### Can I edit translations manually?

Yes. There are two ways: (1) the visual editor, which lets you click on any string
in the rendered page and edit its translation in a side panel — useful for menus,
buttons, widgets and theme strings that don’t live in the post editor; and (2) each
translated post is a standard WordPress post you can edit from the admin like any
other content. Manual edits are detected and preserved during re-translation.

### What happens if I update the source post?

The plugin detects content changes via MD5 hashing and queues a re-translation. 
Manual edits to translations are detected and preserved (unless the source change
is structural).

## Pritaksoj

![](https://secure.gravatar.com/avatar/5fbfbe84e9c65b1a8c3b4e7b959b266607b6f65dcf601b37af165a9a785dfed6?
s=60&d=retro&r=g)

### 󠀁[Eficiencia y libertad: Todo lo que buscaba en un traductor](https://wordpress.org/support/topic/eficiencia-y-libertad-todo-lo-que-buscaba-en-un-traductor/)󠁿

 [rpena](https://profiles.wordpress.org/rpena/) Julio 5, 2026

He probado varios plugins de traducción y, finalmente, he encontrado uno que no 
te pone límites. Transleti Translator hace exactamente lo que promete: traducciones
automáticas sin restricciones de cantidad. La configuración fue muy rápida y, de
momento, funciona de maravilla en mi sitio. ¡Totalmente recomendado si buscas una
solución sencilla y eficiente!

 [ Legi 1 pritakson ](https://wordpress.org/support/plugin/transleti-translator/reviews/)

## Kontribuantoj k. programistoj

“Transleti Translator – Multilingual & Automatic Translation” estas liberkoda programo.
La sekvaj homoj kontribuis al la kromprogramo.

Kontribuantoj

 *   [ TransLeti ](https://profiles.wordpress.org/transleti/)
 *   [ Perfecto Ramón Bouso Alvarez ](https://profiles.wordpress.org/grupobouso/)

“Transleti Translator – Multilingual & Automatic Translation” has been translated
into 2 locales. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/transleti-translator/contributors)
for their contributions.

[Traduki “Transleti Translator – Multilingual & Automatic Translation” en vian lingvon.](https://translate.wordpress.org/projects/wp-plugins/transleti-translator)

### Ĉu interesita en programado?

[Browse the code](https://plugins.trac.wordpress.org/browser/transleti-translator/),
check out the [SVN repository](https://plugins.svn.wordpress.org/transleti-translator/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/transleti-translator/)
by [RSS](https://plugins.trac.wordpress.org/log/transleti-translator/?limit=100&mode=stop_on_copy&format=rss).

## Ŝanĝprotokolo

#### 1.9.42

 * New: **Connector Mode now supports Polylang.** If your site already runs Polylang,
   Transleti works as its automatic translation engine — Polylang keeps languages,
   URLs, the switcher and the stored translations, and Transleti fills them in. 
   Posts, pages, custom post types, categories and tags, SEO titles and descriptions,
   interface strings and navigation menus are all covered, with the same per-language
   progress panel and the same “translation in progress” page the other modes use.
   Detected and enabled automatically.
 * New: **your blog index and category, tag, author and date archives are no longer
   served in the source language.** Until a language had something translated, those
   pages showed the original text to every visitor — and they are usually the first
   pages a search engine crawls. They now return the same “translation in progress”
   page as the rest of the site, and open on their own as soon as the first translation
   is ready.
 * Fix: **buttons and headings written in capitals came back untranslated, or wrong.**
   The translation engine handles shouted text badly: “READ MORE”, “ADD TO CART”
   and “LEARN MORE” were returned unchanged, and “SEND NOW” came back as an unrelated
   phrase. Capitalised text is now translated as a normal sentence and shouted back
   afterwards, so it reads correctly and still looks the way your theme designed
   it.
 * Fix: some common button labels are now guaranteed correct in the languages where
   the engine got them wrong — a Spanish contact form no longer says “Submit”, and
   a German one no longer says “Bitte” where it should say “Senden”. Only the words
   that were actually mistranslated are overridden, so everything the engine already
   gets right is left alone.
 * Fix: **the submit button and confirmation message of your forms stayed in the
   source language** even when the rest of the form was translated, because those
   texts live in the form’s settings rather than its content. They are translated
   now, and support was widened from SureForms to WPForms, Contact Form 7, Forminator
   and Everest Forms.
 * Fix: Contact Form 7 field tags such as `[text* your-name]` were not recognised
   as code and could be altered by the engine, which breaks the form. They are now
   protected like any other shortcode.
 * Fix: placeholders written in braces — `{cart_total}`, `{{post_title}}` and similar
   tokens used by themes and page builders — were translated word by word and stopped
   working. They are now left untouched.
 * Fix (WPML): **some posts were never translated, and nothing said so.** A post
   whose ID happened to match that of an already translated category, tag or comment
   was skipped by the search for pending work, silently and permanently. The progress
   bar sitting just short of 100% was the only clue.
 * Fix (WPML): the progress bar could show a green 100% on a site where nothing 
   had been translated at all, because posts still waiting to be duplicated were
   left out of the count. It now reports real progress from the first run.
 * Fix: **Elementor pages could appear unstyled the first time they were opened 
   after being translated.** Translating a page invalidates its stylesheet, and 
   Elementor only rebuilt it when someone loaded the page — so the first visitor,
   often a search engine, got the page without its design. The stylesheet is now
   rebuilt as soon as the translation is written.
 * Fix: switching to Connector Mode left the Standalone background task scheduled,
   running every minute with nothing to do. It is now removed automatically.

#### 1.9.41

 * Fix: **words in your “Do not translate” list were still being altered in Vietnamese,
   Thai and Urdu.** The protection worked by hiding each word behind a marker while
   the sentence was translated, and for those languages the engine rewrote the marker
   itself, so the word could no longer be put back — brand names came out garbled
   or replaced by leftover characters. The marker was changed for one those engines
   never touch, verified across every supported language. Brand names, product names
   and email addresses now survive in all of them.
 * New: the Images tab is now paginated and searchable. Sites with hundreds of discovered
   images no longer render one endless list: images are shown in pages of ten, with
   a search box that matches a file name or any part of the URL.
 * Fix: saving or deleting an image on the Images tab returned you to the first 
   page, losing your place and your search. It now keeps both.
 * Fix: asking for an Images page that no longer exists (after deleting images, 
   or from an old bookmark) showed an empty list with no way back. It now falls 
   to the last available page.
 * Fix: the label on primary buttons in the settings screens sat too low inside 
   the button.

#### 1.9.40

 * New: the higher-quality home page translation now also works in Connector Mode.
   If the plugin runs behind WPML or TranslatePress, your home page, its SEO title
   and description and your navigation menu get the same premium treatment they 
   already had in Standalone, while the rest of the site keeps using the regular
   engine. Nothing to configure.
 * Fix: **Elementor pages were re-translated but the change never appeared.** Elementor
   serves a stored copy of the rendered page, so an updated translation stayed invisible
   until that copy expired. This affected every re-translation in Connector Mode—
   edit a page, and the new translation was saved correctly and never shown. The
   stored copy is now cleared whenever a translation is written.
 * Fix: short phrases built from small words (“Hi. I am a”) were skipped in Elementor
   content and stayed in the source language, because they were mistaken for code.
 * Fix: brand names, people’s names and email addresses on the home page are no 
   longer altered. When the translation engine returns a word unchanged because 
   it is the same in the target language, that answer is now kept instead of being
   replaced by a second, worse attempt — which is what turned menu items like “Contact”
   into a full sentence.
 * Fix: home page translation could start from a page that had not finished loading,
   right after installing or resetting the site. It now waits for the real page.
 * Fix: the monthly premium allowance was charged for the whole home page even when
   a single line had changed, so editing your headline a few times could use it 
   up without actually translating anything. Only new text counts now.
 * Change: the monthly premium allowance is counted in translations rather than 
   in batches, so the ceiling no longer depends on how large your home page is or
   how many languages you run.
 * Change: the free trial has been replaced by a 14-day money-back guarantee, and
   the plugin no longer contains the code that cleared translations when a trial
   ended unpaid. Your translations are yours.

#### 1.9.39

 * New: **TranslatePress Connector Mode.** Already using TranslatePress? Keep it
   in charge of your languages, URLs and stored translations, and let Transleti 
   work as its automatic translation engine. Transleti appears as a translation 
   engine inside TranslatePress and, on top of that, translates your pages in the
   background instead of waiting for a visitor to open each one — so your site gets
   translated on its own. Detected and enabled automatically; you can force plain
   Standalone mode from the Connector tab. WooCommerce shops are supported.
 * New: the “translation in progress” page now also covers your blog index and category,
   tag and author archives, so visitors and search engines never land on a listing
   that is still in the source language.
 * Fix: pages that could never leave the “translation in progress” state. Several
   checks were waiting for text that can never be translated — SEO templates such
   as `%%title%% %%sep%% %%sitename%%`, leftover settings from an SEO plugin that
   is no longer active, and strings the translation layer never records. Those no
   longer hold a page back, while the SEO title and description are still required
   before a page goes live.
 * Fix: a page or product published after the plugin had already scanned your site
   could stay untranslated indefinitely, and the progress bar showed 100% because
   it only counted the pages it knew about. New content is now picked up immediately.
 * Fix: the browser tab title is now checked before a page is published in a new
   language, so pages no longer appear with the title still in the source language.
 * Fix: submitting a form on a translated page could hit the “translation in progress”
   screen instead of being processed.
 * Fix: several items were retried forever when their translation could not change(
   brand names, words that are identical in the target language, URL slugs that 
   WordPress cannot reuse). They are now accepted after a few attempts, which also
   stops the wasted translation requests they caused.
 * Fix: switching between WPML and TranslatePress now leaves no background task 
   behind from the previous plugin, in either direction.
 * Fix: premium home translation no longer re-runs when you simply publish a post.
   Titles listed on the home page (for example a “latest posts” block) are no longer
   treated as home content, and there is now a monthly cap as a safeguard.

#### 1.9.38

 * New: **WPML Connector Mode.** If WPML is active, the plugin now detects it and
   works as WPML’s automatic translation engine instead of managing languages itself.
   WPML keeps full control of your languages, URLs, switcher and stored translations,
   so there is no conflict, no duplicate switcher and no duplicate URLs. It translates
   posts, pages, custom post types, taxonomy terms, menus, slugs, SEO meta and interface
   strings into every WPML language. Enabled automatically; you can force plain 
   Standalone mode from the new Connector tab. Sites without WPML are unaffected
   and keep running exactly as before.
 * New: **WooCommerce + WPML support.** With WooCommerce Multilingual & Multicurrency(
   WCML) installed, products, categories and tags are translated automatically, 
   and each shop page correctly shows only the products for the language being viewed(
   no more all-languages product lists). A translated product stays blocked with
   a temporary notice until its title and description are ready, so shoppers never
   see a half-translated page.
 * New: form fields (SureForms) are now translated per language, including placeholder
   text, instead of falling back to another language.
 * Fix: a newly added language no longer stays stuck behind the “translation in 
   progress” page — the readiness check now ignores strings that are handled elsewhere,
   so the language goes live as soon as its content is done.
 * Change: the automatic translation API is now a flat-rate subscription with a 
   14-day money-back guarantee (the previous 7-day trial has been retired). The 
   plugin remains free and fully usable in manual mode.

#### 1.9.37

 * Fix: corrections made in the visual (in-page) translation editor now reliably
   apply. Previously, editing some text directly on an already-translated page could
   save your change against the wrong entry and appear to do nothing; the editor
   now matches the edit to the correct source string and updates it.

#### 1.9.36

 * Fix: per-language progress now reaches 100% correctly. Entries that were intentionally
   set aside — untranslatable strings and text detected as belonging to another 
   language — no longer hold the bar below 100%, since there is no further work 
   to do on them.
 * Fix: extended the cross-language cleanup so text already stored in a wrong language(
   including entries produced by earlier versions) is removed even after it was 
   translated, across both the page and interface string stores. Legitimate labels
   that mix a few foreign characters with your own language (for example a place
   name written as “Beijing / 北京”) are always kept.

#### 1.9.35

 * Fix: much stronger protection against one language’s text mixing into another.
   Text that your theme or plugin already displayed in the visitor’s language is
   now reliably detected and never re-translated or copied to other languages — 
   including European (Latin-script) languages that earlier checks could not catch—
   so it simply shows in that language as intended. This runs automatically and 
   cleans up any entries that had already accumulated.
 * Fix: a translation that comes back with characters from the wrong writing system(
   for example a few stray characters from another alphabet mixed into an otherwise
   correct result) is now rejected and translated again cleanly, instead of being
   stored. Your original content is never modified.
 * Fix: brand names such as “WordPress” and “WooCommerce” are now kept intact in
   every language, including scripts where some engines previously mangled or truncated
   them (e.g. Thai dropping the final letter). A protected brand that a low-resource
   model corrupts mid-translation is now recovered automatically instead of leaking
   a placeholder.
 * New: the language switcher’s country flags now load a bundled flag font, so they
   render on platforms whose system fonts omit flag emoji (Windows and some Linux)
   instead of showing empty boxes or letters. Scoped to flag characters only; can
   be turned off with the `transleti_load_flag_font` filter.

#### 1.9.34

 * New: pages translated into a language whose script your theme font doesn’t cover(
   Hindi and other Indic scripts, Chinese, Japanese, Korean, Arabic, Hebrew, Thai
   and more) now automatically load a matching high-quality webfont, so the text
   is fully readable instead of showing empty boxes. Latin, Greek and Cyrillic languages
   are left untouched, icon fonts are preserved, and it can be turned off with the`
   transleti_load_webfonts` filter.

#### 1.9.33

 * Fix: prevents translations from one language leaking into another. When a theme
   or plugin displayed text that was already in a different language (for example
   a native navigation menu or shop labels), earlier versions could mistake it for
   source text and copy it into every language, creating a few wrong or foreign-
   looking entries and wasting translation quota. Such text is now ignored when 
   detected and never copied between languages, and any entries that had already
   accumulated are cleared automatically when you update. Your original content 
   is never modified.

#### 1.9.32

 * Change: automatic translations created during the 7-day free trial are now cleared
   if the trial ends without starting a subscription. This only affects trials that
   end unpaid — once you have made at least one payment, your translations always
   stay in your own site and keep working for free, even after a cancellation (see
   the “Who owns the translations” FAQ). Your original content is never modified.

#### 1.9.31

 * Fix: a page whose SEO title or description can’t be machine-translated into a
   particular language (e.g. a brand-only or malformed title) no longer retries 
   forever or stays flagged as “blocked” — after a few attempts the page is finalized
   with the source-language text for that string, the same graceful give-up already
   used for individual dictionary entries.
 * Fix: the “translations blocked for over an hour” notice and its email digest 
   no longer list internal, non-public post types (e.g. WooCommerce support-ticket
   messages); stale entries are cleaned up automatically and remaining ones are 
   labelled clearly even when the item has no title.

#### 1.9.30

 * Improvement: when the higher-quality home and SEO translation is temporarily 
   unavailable, the translated home page is now held on the friendly “translation
   pending” page instead of being shown at lower machine-translation quality — so
   visitors and search engines never see a lower-quality home. It restores automatically
   as soon as the higher-quality translation is ready.

#### 1.9.29

 * Improvement: higher-quality automatic translation of the home page and its SEO
   fields (page title, meta description and navigation menus), for a stronger first
   impression and better search-engine and social previews on translated pages.
 * Fix: secondary languages could get stuck below 100%. Strings discovered while
   rendering one language are now propagated to every active language automatically,
   so low-traffic languages no longer lag behind; the per-language progress indicator
   is also more robust when one language happens to carry extra strings.
 * Fix: internal, non-public post types (for example WooCommerce support-ticket 
   messages) are no longer reported as “stuck” translations or held back by the “
   translation pending” page — only genuinely public pages are gated and crawled.
 * Fix: the logged-in admin toolbar is no longer captured as translatable content,
   keeping per-language string counts and progress accurate.
 * Fix: navigation menus now translate from the correct source menu, preventing 
   already-translated labels from being re-queued into the wrong language.
 * Fix: duplicate dictionary entries for the same source string are de-duplicated,
   so a stray automatic translation can no longer shadow a better one (menus and
   home strings render correctly).

#### 1.9.28

 * Fix: one-time recovery of SEO titles, descriptions and other strings that were
   left in the source language after an earlier translation-engine outage. Before
   1.9.27 a connection timeout could permanently flag pending strings as failed;
   those rows stayed excluded from the queue even after the engine recovered. On
   upgrade the plugin now requeues them automatically (runs once), so previously
   stuck translations complete on the next translation cycles. No action required.
 * Fix: API keys, JWT auth tokens and hash/digest strings (e.g. on account or API-
   key pages) are no longer queued for translation. They were never translatable,
   so the engine kept rejecting them and they piled up in the pending list. They
   are now detected and stored as-is, keeping the queue and the “pending strings”
   notice clean. Guarded so real text — including non-Latin scripts — is never affected.

#### 1.9.27

 * Fix: on translated pages the `<title>` could render empty and `<html lang>` could
   stay on the default language when an SEO plugin (e.g. Rank Math) built the document
   head before the language context was active. The output buffer now rewrites `
   <html lang>` to the current language and rebuilds an empty/missing `<title>` 
   from the translated title, so search engines never see a blank title on a translated
   page.
 * Fix: fatal TypeError in the Rank Math sitemap integration (`rankmath_sitemap_url()`
   received an array, not a string) that could break the Rank Math sitemap and its
   hreflang alternates. The handler now accepts both, matching the SEOPress integration.
 * Fix: the 503 “translation pending” page could fatal (and serve a raw 503 error
   instead of the friendly template) when triggered from the render layer, because
   it started a new output buffer inside the page output buffer. The pending page
   is now built as a string and renders correctly in every context.
 * Fix: a temporary translation-engine outage (connection timeout or server error)
   no longer counts against a string’s retry limit. Previously a few minutes of 
   downtime could permanently flag pending strings as failed, leaving them in the
   source language even after the engine recovered. Transient failures are now retried
   indefinitely; only genuine per-string rejections count toward the limit.
 * Fix: hardened the background translator against a missing source-language setting
   that could throw a fatal error on every cron run and silently stop all translation;
   it now falls back to the default source language.

#### 1.9.26

 * Doc: improved the WordPress.org listing title, tags and short description for
   better discoverability (no functional changes).

#### 1.9.25

 * SEO: the real composite page title (`Post - Site - Tagline`), og:title and meta
   description are now fetched from the rendered page and translated proactively
   in the background batch, before the first visit — so search engines and social
   previews never see an English title on a translated page. A render-side gate 
   holds a secondary-language page at 503 while its `<title>` is still untranslated,
   with a fail-open grace period so a title that never translates can’t strand the
   page.
 * Fix: homepage redirect loop on sites served over both www and non-www. Automatic
   language detection now reads the visitor’s current language from a host-agnostic
   signal instead of the rewritten request URI, so `www.` secondary-language pages
   no longer bounce in a redirect loop.
 * Fix: cookie-consent notice mistranslated in Urdu (ur) — the translation engine
   rendered “cookies” as پکوان (“food dishes”). A per-language term lock now forces
   the correct word (کوکیز) so the notice translates correctly, with a safeguard
   that falls back cleanly if the engine corrupts the protected term.

#### 1.9.24

 * UI: fixed vertical alignment of dashicons inside admin buttons on the plugin 
   settings page.
 * Doc: refreshed screenshots and captions for every plugin tab on the WordPress.
   org listing.

#### 1.9.23

 * Fix: WooCommerce Blocks cart / checkout — product short descriptions now translate
   correctly. WC Blocks pre-renders the cart server-side via a hydration path that
   bypasses the REST response filter; the plugin now hooks `woocommerce_hydration_request_after_callbacks`
   so hydrated responses are translated alongside live Store API calls.
 * Fix: WooCommerce Blocks Summary truncation — product short descriptions in cart/
   checkout are no longer clipped to ~15 characters on locales whose WordPress translation
   breaks the `Word count type. Do not translate!` hint (e.g. pt_BR returning “palavras”).
   Both the server-side `_x()` value and the client-side `wp.i18n` translation file
   entry are now sanitised back to a valid value.
 * Fix: Store API translation — WC Blocks calls `/wc/store/v1/*` without a language
   URL prefix from the localized React bundle. The plugin now falls back to `HTTP_REFERER`
   to detect the visitor’s current language so Store API responses match the page
   they were requested from.
 * Doc: readme repositioned to make clear the plugin is free and fully usable in
   manual mode; the Transleti API (automatic translation) is now described as optional.
 * Doc: trial messaging updated to reflect that the 7-day API trial no longer requires
   a card or payment method. After the trial, the API stops automatically unless
   you subscribe and the plugin keeps working in manual mode for free.

#### 1.9.22

 * Fix: per-language progress no longer gets stuck below 100% on mixed-script content.
   Dictionary rows now retire after 3 failed translation attempts (mirroring the
   existing gettext mechanism), so untranslatable strings stop blocking the percentage
   indicator.

#### 1.9.21

 * Fix: visual editor — clicks on theme menu items (GeneratePress, Astra, Divi, 
   Elementor Pro mega-menus, etc.) now open the translation panel reliably. Listener
   moved to `window` capture + `pointerdown` so theme menu togglers that call `stopPropagation()`
   can no longer swallow the selection click.

#### 1.9.20

 * Fix: visual editor now detects menu items in Hebrew, Greek, Hindi, Thai, Georgian
   and Armenian (menu translation now bails during preview so the renderer can add
   translatable markers regardless of script).
 * Fix: visual editor — clicking on a string with duplicated text on the same page(
   e.g. a heading and a menu link with the same label) now opens the translation
   panel for the selected occurrence.
 * Fix: ignore RSS feed `pubDate`/`lastBuildDate` strings in the “stuck translations”
   notice.
 * Improvement: automatic cleanup of orphan sentence segments left over from long-
   paragraph batching.

#### 1.9.x

 * New: visual translation editor — click any text in the rendered front-end and
   edit its translation in a live side panel. Works on menus, buttons, image alts
   and theme strings.
 * New: 49+ languages supported via the Transleti translation API.
 * New: HTML entity and shortcode protection across all translation entry points.
 * New: “Do not translate” word list (brand names, product codes, acronyms).
 * New: SEO meta translation for SEOPress, Yoast, AIOSEO and RankMath.
 * Improvement: manual edit protection — your manual fixes survive re-translation
   cycles.
 * Improvement: parallel translation across all target languages.

#### 1.4.4

 * Feature: drag-and-drop reordering of active languages in the Languages tab (also
   affects the language switcher order).
 * i18n: added 503 “pending translation” page strings for 16 additional languages(
   Lithuanian, Albanian, Azerbaijani, Basque, Bengali, Catalan, Esperanto, Galician,
   Irish, Kyrgyz, Latvian, Malay, Persian, Slovenian, Tagalog, Urdu).

#### 1.4.3

 * Compliance: wrapped `language_has_translations()` and `find_original_slug()` 
   direct `$wpdb` probes with `wp_cache_get` / `wp_cache_set` (5-minute TTL, `transleti`
   cache group).
 * Compliance: documented every legitimate direct DB call against core meta tables
   with `phpcs:ignore` comments explaining why the existing core API can’t replace
   them.

#### 1.4.2

 * Hardening: escaped flag-emoji output in the language switcher shortcode (`render_switcher`,`
   render_language_list`) via `esc_html()`.
 * Hardening: every `ob_start()` callback buffer is now explicitly closed via a 
   paired `ob_end_flush()` registered through `register_shutdown_function()` in 
   the same function scope (frontend page buffer, AJAX response buffer, sitemap 
   xhtml-namespace buffer).

#### 1.2.1

 * Hardening: replaced `fopen`/`fread`/`fclose` with `WP_Filesystem::get_contents()`
   for the diagnostic log reader.
 * Hardening: switched all custom-table existence checks to `$wpdb->prepare( 'SHOW
   TABLES LIKE %s', ... )` (no more single-quote interpolation).
 * Hardening: switched several `$_POST` reads on HTML-bearing fields to `wp_kses_post(
   wp_unslash( ... ) )`; integer reads now use `absint( wp_unslash( ... ) )`.
 * Hardening: added explicit nonce checks (`check_admin_referer`/`wp_nonce_url`)
   to the string-export download link.
 * Compliance: removed redundant `load_plugin_textdomain()` call (WP 4.6+ auto-loads
   translations from the WP.org directory).
 * Compliance: documented every legitimate direct-DB query (custom plugin tables)
   with localised `phpcs:disable`/`enable` blocks.

#### 1.2.0

 * Compliance: removed comparative/superlative marketing phrasing from the readme.
 * Compliance: extracted inline `<script>` blocks to enqueued JS files (language
   switcher, editor preview).
 * Hardening: all `$_GET` / `$_POST` / `$_SERVER` / `$_COOKIE` reads now go through`
   wp_unslash()` plus a context-appropriate sanitiser (`sanitize_text_field`, `esc_url_raw`).
 * Hardening: AJAX nonce check in `ajax_empty_language()` now unslashes and sanitises
   the nonce before passing it to `wp_verify_nonce()`.

#### 1.0.6

 * Removed redundant `load_plugin_textdomain()` call — translations are now auto-
   loaded by WordPress 4.6+ for plugins hosted in the directory.
 * Switched front-end language redirect from `wp_redirect()` to `wp_safe_redirect()`
   for additional protection against open-redirect attempts.
 * Defense-in-depth: explicit allowlist validation for the language storage key 
   before SQL identifier interpolation in the cache-clearing endpoint.
 * Packaging: included a `.pot` template in `languages/` so the Domain Path folder
   is present in the distributed package.

#### 1.0.5

 * New: separate `<url>` entry per language in the sitemap, matching Google’s documented
   hreflang format.
 * New: AIOSEO sitemap compatibility (`aioseo_sitemap_post`/`_term`/`_archive_entry`/`
   _addl_pages` filters).
 * Fix: `xmlns:xhtml` namespace now declared in `<urlset>` so `<xhtml:link>` alternates
   are valid XML.
 * Fix: `/sitemap.xml` no longer redirects to `/en/sitemap.xml` when `add_subdirectory_to_default
   =yes`.
 * Fix: sitemap `<loc>` URLs now use the canonical default-language URL instead 
   of the redirecting unprefixed permalink.
 * Fix: HTML head and sitemap hreflang codes now match exactly for bidirectional
   confirmation.

#### 1.0.4

 * Parallel translation crawling — O(1) in number of languages.
 * Render substitution fixes for raw `%1$s` placeholders and `[cookie_*]` shortcodes
   leaking to public pages.

#### 1.0.3

 * HTML entity and shortcode protection in all translation entry points.
 * “Do Not Translate” word list.
 * Manual edit protection improvements.

## Metadatumoj

 *  Version **1.9.42**
 *  Last updated **antaŭ 13 horoj**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.2**
 *  PHP version ** 8.0 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/transleti-translator/), [Russian](https://ru.wordpress.org/plugins/transleti-translator/),
   kaj [Spanish (Spain)](https://es.wordpress.org/plugins/transleti-translator/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/transleti-translator)
 * Tags
 * [multilingual](https://eo.wordpress.org/plugins/tags/multilingual/)[polylang](https://eo.wordpress.org/plugins/tags/polylang/)
   [TranslatePress](https://eo.wordpress.org/plugins/tags/translatepress/)[translation](https://eo.wordpress.org/plugins/tags/translation/)
   [wpml](https://eo.wordpress.org/plugins/tags/wpml/)
 *  [Altnivela rigardo](https://eo.wordpress.org/plugins/transleti-translator/advanced/)

## Pritaksoj

 5 out of 5 stars.

 *  [  1 5-star review     ](https://wordpress.org/support/plugin/transleti-translator/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/transleti-translator/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/transleti-translator/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/transleti-translator/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/transleti-translator/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/transleti-translator/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/transleti-translator/reviews/)

## Kontribuantoj

 *   [ TransLeti ](https://profiles.wordpress.org/transleti/)
 *   [ Perfecto Ramón Bouso Alvarez ](https://profiles.wordpress.org/grupobouso/)

## Helpo

Got something to say? Need help?

 [Vidi helpforumon](https://wordpress.org/support/plugin/transleti-translator/)