Title: Lionrapid Translation
Author: lionrapid
Published: <strong>November 9, 2026</strong>
Last modified: November 9, 2026

---

Search plugins

![](https://ps.w.org/lionrapid-translation/assets/banner-772x250.png?rev=3792925)

![](https://ps.w.org/lionrapid-translation/assets/icon.svg?rev=3792328)

# Lionrapid Translation

 By [lionrapid](https://profiles.wordpress.org/lionrapid/)

[Download](https://downloads.wordpress.org/plugin/lionrapid-translation.1.4.2.zip)

 * [Details](https://wordpress.org/plugins/lionrapid-translation/#description)
 * [Reviews](https://wordpress.org/plugins/lionrapid-translation/#reviews)
 *  [Installation](https://wordpress.org/plugins/lionrapid-translation/#installation)
 * [Development](https://wordpress.org/plugins/lionrapid-translation/#developers)

 [Support](https://wordpress.org/support/plugin/lionrapid-translation/)

## Description

Lionrapid Translation translates your site’s content **on the server**, before the
page reaches the browser. Visitors never see a flash of untranslated text, and search
engines index the translated pages.

The plugin is managed from your **Lionrapid dashboard**: languages, switcher style,
excluded paths and server-side rendering sync to the plugin automatically. In WordPress
you only enter your site key.

#### Key features

 * **Server-side translation**: the page’s HTML is translated before delivery, so
   search engines see the translated content directly.
 * **Formatting kept**: inline formatting such as `<b>` and `<a>` survives translation.
 * **Managed from the dashboard**: source and target languages, the switcher and
   excluded paths come from your Lionrapid project. Changes are pushed to the site
   immediately, with a 5-minute check as a safety net.
 * **Gutenberg blocks**: a translation block, a language switcher block and an inline
   translation editor.
 * **Language switcher**: three styles (floating, buttons, flags), added to every
   page automatically or placed where you want it with the block.
 * **Language URLs**: addresses like `/de/`, `/es/` and `/fi/` lead visitors to 
   the right language.
 * **SEO**: hreflang tags, translated meta descriptions and canonical URLs.
 * **New text is collected**: text that appears on the live site is sent to your
   dashboard for translation in the background (`wp_cron`).

#### Required external service

This plugin requires a **Lionrapid account**. It connects to the Lionrapid service
at the address shown under Settings  Lionrapid (https://app.lionrapid.com by default).

When activated and configured with a site key, the plugin sends:

 * Translation requests (page content blocks)  server for translation lookup
 * New keys discovered on the live site  server for translation queue
 * Configuration sync requests  server for current project settings

Server endpoints called:

 * `GET /api/integrations/config?domain={your-site-domain}` — fetches project config
 * `GET /api/integrations/translations/{locale}/{namespace}` — fetches translations
 * `POST /api/integrations/sync/...` — pushes newly discovered keys

When your settings hold a publishable key (`pk_`), your visitors’ browsers also 
call the Lionrapid service directly, at the API address your Lionrapid project gives(
https://app.lionrapid.com by default):

 * to load the translations and language settings for the page they are viewing;
 * to report text on the page that has no translation yet, so it appears in your
   dashboard.

Like any web request, these calls show the service the visitor’s IP address and 
browser details. The plugin adds no tracking or analytics. Login and account pages
excluded on the dashboard never report text. Without a publishable key, the browser
loads translations from your own site instead and calls no Lionrapid address.

The plugin also adds two REST endpoints to your site:

 * `POST /wp-json/lionrapid/v1/resync`: your Lionrapid dashboard calls it to push
   configuration changes immediately. It is authenticated with the key stored in
   your plugin settings.
 * `GET /wp-json/lionrapid/v1/api/integrations/translations/{locale}/{namespace}`:
   public and read-only. It serves your site’s translations to the visitor’s browser,
   so the browser never needs a key.

Lionrapid’s terms of service: https://www.lionrapid.com/terms. Privacy policy: https://
www.lionrapid.com/privacy.

#### Without a site key

Until you enter a site key, the plugin calls no external service. It does start 
preparing your pages for translation as soon as it is active (language links and
markers in the HTML), so activate it once your Lionrapid account is ready.

## Screenshots

[⌊Settings: one button connects the site to your Lionrapid project; languages and
everything else come from your dashboard.⌉⌊Settings: one button connects the site
to your Lionrapid project; languages and everything else come from your dashboard
.⌉[

Settings: one button connects the site to your Lionrapid project; languages and 
everything else come from your dashboard.

## Installation

 1. In **Plugins  Add New**, search for “Lionrapid Translation”, then click **Install
    Now** and **Activate**.
 2. Visit **Settings  Lionrapid**.
 3. Enter your **site key** from the WordPress tab of your Lionrapid dashboard: a publishable
    key starting with `pk_`. Leave the address as it is unless support asks you to 
    change it. Sites configured earlier with a master key (`sk_`) keep working unchanged.
 4. Click **Save settings**. The plugin pulls your project settings (languages, switcher,
    excluded paths) from the dashboard automatically.
 5. Language URLs like `/de/` are set up automatically when your languages change. 
    If one answers “not found”, click **Refresh language URLs** on the same page.

## FAQ

### Do I need a Lionrapid account?

Yes. The plugin connects to the Lionrapid service. You can sign up at https://www.
lionrapid.com.

### Can I use it without server-side translation?

Yes. In the Lionrapid dashboard, turn off “Server-side translate initial page render”
for your project. The plugin will then rely on JavaScript-side translation only,
applied via MutationObserver after page load.

### How does it handle new strings that haven’t been translated yet?

The plugin scans the block-level strings of every page it renders, in your source
language too. On a translated page, each string is looked up in the cached translations.
A string Lionrapid does not know yet is queued for sync via `wp_cron`, so a visit
to a page in your source language is enough to send its new strings. They appear
in the Lionrapid editor for human or machine translation, and the next page load
gets the translated version.

### Does it work with WooCommerce / Elementor / page builders?

The plugin operates at the rendered HTML level, so it works with any front-end content.
Path rules let you exclude `/cart/`, `/checkout/`, `/wp-admin/`, and similar paths
from translation if needed (configured on the dashboard).

### Is my API key visible to visitors?

The key the plugin prints for the browser is a publishable key (`pk_`), which is
designed to be public — it can read your translations and register new strings for
translation, nothing else. The plugin refuses to print anything that is not a `pk_`
key: if your settings hold a master key (`sk_`), it stays server-side and the browser
is pointed at this site’s own read-only translation endpoint instead. A master key
is never written into your page HTML.

### Where are my settings stored?

In `wp_options` under the key `lionrapid_settings`. Your site key, the service address
and the on/off switch are set in Settings  Lionrapid. Everything else (languages,
namespace, switcher, exclude paths) is read-only and overwritten by the dashboard
sync.

### How do I uninstall cleanly?

Deactivating the plugin stops it and keeps your settings. Deleting it from **Plugins**
removes its settings, saved translations and scheduled jobs (on a multisite network,
on every site).

### I installed an earlier version from a ZIP file. How do I switch to the directory version?

ZIP files before 1.3.1 installed into the folder `lionrapid`; the directory version
installs into `lionrapid-translation`. WordPress treats them as two plugins, but
they share one set of settings.

Install Lionrapid Translation from the directory and activate it. If the old copy
is still active, the new one deactivates it and takes over with your site key and
settings. Then delete the old copy from **Plugins**; your settings stay. The Plugins
screen and Settings  Lionrapid point out the old copy while it is still installed.

Before 1.4.2, deleting the old copy removed the shared settings. If you installed
an earlier version from the directory and still have the old copy, update to 1.4.2
first, then delete it.

ZIP files from 1.3.1 on install into `lionrapid-translation`, the directory’s own
folder, so WordPress treats a ZIP install and a directory install as the same plugin:
updates from the directory arrive in **Dashboard  Updates** either way, and your
settings are kept.

### Where is the source code of the bundled JavaScript?

The plugin’s own minified scripts in `assets/dist/` are built from the TypeScript
sources that ship in `assets/src/`.

The three scripts in `assets/dist/js/vendor/` come from the open-source Lionrapid
SDK, https://github.com/LionRapid/lionrapid-sdk (MIT, `packages/core`, built by `
packages/core/build.browser.js`):

 * `lionrapid.auto.min.js`: the language switcher and in-page translation, from `
   src/browser/index.ts`. Its unminified build ships beside it as `lionrapid.auto.
   dev.js`.
 * `lionrapid.iife.min.js`: the library the Gutenberg blocks use in the editor, 
   from `src/index.ts`.
 * `lionrapid.editor.min.js`: the visual translation editor, loaded only during 
   an editor session, from `src/browser/editor/editor-init.ts`.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Lionrapid Translation” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ lionrapid ](https://profiles.wordpress.org/lionrapid/)

[Translate “Lionrapid Translation” into your language.](https://translate.wordpress.org/projects/wp-plugins/lionrapid-translation)

### Interested in development?

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

## Changelog

#### 1.4.2

 * Fixed: activating Lionrapid Translation while an older copy installed from a 
   ZIP
    (in plugins/lionrapid/) is still active no longer fails with a fatal error.
   The new copy takes over and deactivates the old one; your connection and settings
   carry over.
 * Fixed: deleting that older copy no longer deletes your settings. Its uninstall
   used to
    remove the settings the two copies share, which disconnected the site.
 * New: the Plugins screen and Settings  Lionrapid say when an older copy is still
   
   installed, and that it can be deleted.

#### 1.4.1

 * Changed: the plugin now requires PHP 8.1. On PHP 8.0 it could not be activated.
 * Changed: activation no longer switches Plain permalinks to /%postname%/ by itself.
   
   Settings  Lionrapid says when your permalinks need changing for language addresses.
 * Changed: the page-cache notice shows only on Settings  Lionrapid, not on every
   
   admin screen.
 * Fixed: settings saved through the settings form or synced from your dashboard
   are
    cleaned field by field; invalid language codes are dropped.
 * Fixed: the plugin reads WordPress’s own addresses (REST, admin, login) instead
   of
    assuming the default ones, so a custom REST prefix works.
 * Fixed: the translation-editor block no longer contacts Lionrapid before the site
   is
    connected, and dashboard pushes are limited to one run a minute.
 * Fixed: no missing-file notices or 404s for block scripts in the block editor.

#### 1.4.0

 * New: a simpler settings page. Connection, Translation and Languages each sit 
   on one
    card, the status shows at the top (Connected, Waiting for approval, Not
   connected), and the connection code is shown large with a Copy button. Explanations
   moved into small ⓘ labels that open on hover, keyboard focus or tap. Technical
   details are under Advanced.
 * Fixed: “Connect to Lionrapid” always starts on the first click, also before the
   page’s
    script has loaded.
 * Fixed: a top-corner language switcher no longer covers your theme’s header menu.
 * Fixed: a visitor’s browser no longer shows a stored copy of translations from
   another
    Lionrapid project on the same site, and a removed translation stops 
   being shown.
 * The page language (`<html lang>`) follows the language the visitor picks.

#### 1.3.2

 * Fixed: the first Save on the settings page, and Sync Now, could drop the languages,
   
   namespace and switcher settings arriving from your dashboard, while still showing
   a successful Last sync. They came back only at the next background sync.
 * Fixed: with “Enable Plugin” or “Emit hreflang tags” turned off, Sync Now could
   turn
    them back on.
 * A sync whose settings could not be saved now reports an error instead of success.
 * The FAQ now says that pages in your source language are scanned too: that is 
   how new
    strings reach Lionrapid.
 * The redirect to a visitor’s language uses `wp_safe_redirect()`, which only follows
   
   addresses on your own site.

#### 1.3.1

 * Now in the WordPress plugin directory as “Lionrapid Translation”. The text domain
   is
    lionrapid-translation, the directory’s name for the plugin, so translations
   of the settings screen can come from translate.wordpress.org.
 * The readable TypeScript sources of the bundled scripts ship with the plugin, 
   in
    assets/src/.
 * The readme describes the plugin as it is today: three switcher styles, the current
   
   button names, what deleting the plugin removes, the service it connects to, and
   what visitors’ browsers send to it when you use a publishable key.
 * The plugin folder is now `lionrapid-translation`, the same as the directory
    
   install, so a ZIP install and a directory install are one plugin. ZIP files before
   1.3.1 installed into `lionrapid`; see the FAQ before switching.
 * Deleting the plugin keeps your settings while another copy of it is still
    installed.
 * The translation cache rows carry the plugin’s `lionrapid_` prefix. The old rows
   
   are removed once after updating and your translations are fetched again on the
   next page view.
 * The same-origin translation endpoint moved into the plugin’s own namespace:
    /
   wp-json/lionrapid/v1/api/integrations/translations/{locale}/{namespace}. The 
   old `/wp-json/api/integrations/...` address is gone. A page your host cached 
   before updating may ask the old address until that cache expires; its server-
   side translation is unaffected.
 * Every value read from the request is unslashed and sanitized, with web addresses
   
   kept intact, and each admin action checks its security token itself.

#### 1.3.0

 * The settings page now speaks plainly. Labels and messages were written for the
   
   developers who built the plugin, not for the people who install it — so a failure
   said things like “Invalid response format” and left you nowhere to go. Every 
   message now says what happened and what to do about it.
 * The server address defaults to the real one. A fresh install pointed at localhost,
   
   an address that only exists on a developer’s own machine, so the first connection
   test could never succeed. Sites already set up are unaffected — your saved address
   is kept.
 * Every button shows its own progress and result. Test connection, Sync now, Clear
   
   cache and Update language URLs now behave the same way: the button tells you 
   it is working, then whether it worked, and the answer stays on screen underneath
   instead of vanishing.
 * When something fails you get a plain explanation and a next step, with the
    technical
   detail behind a “Details” link for when support needs it.

#### 1.2.6

 * Fix: visitors whose browser is set to another language now reach that language
   
   from your home page, even when the page is served from your host’s cache. Previously
   the redirect ran in PHP, and on a cached page PHP never runs — so a Finnish visitor
   landing on a warm home page simply saw English. The choice is now made in the
   browser, which still runs when the cache is serving. Your home page stays cached
   for everyone; only the language decision moved.

#### 1.2.5

 * Fix: a translation you removed or unapproved could keep appearing on your site
   
   forever. Each string was stored twice — once on its own and once inside a bundle—
   and refreshing replaced the bundle without ever clearing the individual copy,
   which is the one the plugin reads first.
 * Fix: choosing your own language now sticks. Picking the site’s main language
   
   from the switcher could be overridden by your browser’s language on the next 
   visit, sending you back to the language you had just left.
 * Fix: language-prefixed URLs like /fi/about/ now resolve the same way /about/
   
   does, including nested pages and content from other plugins. Cache and SEO tools
   that ask WordPress “which page is this URL?” previously got no answer for a translated
   page.
 * Fix: “Clear Translations” also clears the bookkeeping that tracks how fresh your
   
   translations are.
 * Fix: deactivating the plugin now stops all three of its scheduled jobs, not one.
 * New: on hosts with a page cache the plugin can clear — WP Rocket, W3TC,
    LiteSpeed,
   WP Super Cache — it clears it automatically when translations change.
 * New: on WordPress.com, where plugins cannot clear the cache, you get a notice
   in
    the admin when your visitors are being served old pages, and how to clear
   it. It appears only when translations actually change, and once dismissed it 
   stays dismissed until they change again.
 * New: on WordPress.com your language choice is now part of the page-cache key,
   so
    a visitor who prefers Finnish is no longer served the page cached for an 
   English visitor.

#### 1.2.4

 * Fix: “Clear Translations” now really clears them on hosts that keep a
    persistent
   object cache, WordPress.com among them. The rows were being deleted, but a cached
   copy was still served, so old translations came back and no amount of clearing
   helped. The same stale copies also made every string look like one the site had
   already reported, so the site quietly stopped sending new content to your dashboard.
   If your site is on such a host, press Clear Translations once after updating.
 * Fix: the plugin’s own short-lived caches are cleared too. On a site with a
    persistent
   object cache those are not kept in the database at all, so the previous cleanup
   silently matched nothing.
 * Change: a resync from the dashboard now refreshes translations as well as
    settings,
   so an edit reaches your site without waiting for the next scheduled check.

#### 1.2.3

 * Fix: translation changes now appear on the FIRST page load. The refresh ran
    
   after the page had already been sent, so a page always showed the previous version
   and a reload was needed to see an edit.
 * Fix: saving a new API key no longer silently reverts to the old one. The
    settings
   page reported success while the previous key was written back.
 * Fix: the server URL you configure is the one the plugin calls. A legacy
    setting
   could override it invisibly, so requests went to the old host and failed with
   an error blaming the API key.
 * Fix: the dashboard’s minimum-text-length setting now reaches the site. It was
   
   declared and honoured everywhere except the one place that reads it from the 
   server, so sites stayed on the built-in default.

#### 1.2.2

 * Fix: “Clear Translations” now actually clears them. It was deleting from a
    cache
   layer the plugin never wrote to, and reported success because the delete matched
   zero rows rather than failing.
 * Fix: the source-language home page is reachable again. A visitor arriving at
   
   your site with no referer — a typed address, a bookmark, a search result — was
   redirected to their guessed language every time, with no way back to `/`. An 
   inferred language now redirects once; an explicit choice from the switcher still
   always applies.

#### 1.2.1

 * Fix: og: and twitter: social preview text is now translated. A shared link
    showed
   the source language even on a translated page, because the preview meta tags 
   were never extracted for translation.
 * Housekeeping: removed `translationMode`, a setting nothing ever read.

#### 1.2.0

 * Feature: regional locale routing (for example /pt-br/), with BCP-47 hreflang
   
   and Accept-Language quality-value parsing.
 * Feature: SEO plugin coexistence — Yoast and similar plugins are detected, and
   
   canonical/hreflang output defers to them instead of emitting a second, conflicting
   set.
 * Feature: localized sitemap alternates for Yoast.
 * Feature: honours the noindex-locales setting, so a locale still under review
   
   is not indexed before it is ready.
 * Change: the plugin authenticates with a publishable (pk_) key, and prefers
    the
   API host the server advertises over a hardcoded one.

#### 1.1.2

 * Fix: background sync no longer retries in a loop when the API key is missing
   
   or the server answers 4xx.
 * Fix: no If-None-Match header while the translations cache is empty — the
    request
   could return 304 with nothing to render from.
 * Fix: exact attribute-name matching when detecting no-translate markers, so a
   
   name that merely starts the same is no longer treated as a match.
 * Fix: the fallback class loader mirrors src/ again, so a fresh install cannot
   
   fatal on a class the loader never required.

#### 1.1.1

 * Security: hex-escape the inline config script so a config value cannot break
   
   out of the `<script>` tag (including the `<!--<script>` mXSS vector).
 * Fix: editor-pushed formatted translations now store under the real
    translation
   key instead of a numeric style index.
 * Build: the release now fails if the readme Stable tag and plugin header
    Version
   drift apart, so wp.org always ships the built version.

#### 1.1.0

 * Feature: attribute translation — alt, title, placeholder, meta and input
    values.
 * Feature: href and canonical rewriting on localized paths.
 * Feature: auth-page contract — configured paths never sync keys (GDPR).
 * Fix: the same-site referer guard never fired, because a bare host was
    compared
   against one carrying a port.
 * Fix: /{lang}/ home now resolves in the request filter, rewrite rules flush on
   
   a language change, and the locale redirect is skipped during editor sessions.
 * Fix: decode HTML entities in the markup parser, so PHP and JavaScript derive
   
   the same translation key for the same text.

#### 1.0.1

 * Fix: translated Pages (not just Posts) now resolve at /{lang}/ URLs.
 * Fix: editor URLs like /es/?__lr_editor= no longer 404 (query string was
    being
   captured as the post slug).
 * Add: pretty permalinks are enabled automatically on activation when the
    site
   is on the default plain structure (a custom structure is left untouched), so /{
   lang}/ routing works out of the box.
 * Fix: config-sync cron is scheduled on init, silencing a WP 6.7
    “textdomain loaded
   too early” notice.

#### 1.0.0

Initial public release.

 * Server-side block-level translation via output buffering.
 * Dashboard-managed config sync: languages, namespace, switcher, exclude paths,
   output-buffering toggle pulled from the LionRapid server.
 * Real-time config push via `POST /wp-json/lionrapid/v1/resync` from the dashboard.
 * 5-minute wp_cron fallback for config sync.
 * Gutenberg blocks: translation, language switcher, translation editor.
 * Language switcher auto-inject with four styles.
 * URL prefix routing for non-source languages.
 * SEO hreflang + translated meta descriptions.
 * Background sync of newly discovered keys via wp_cron.

## Meta

 *  Version **1.4.2**
 *  Last updated **7 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [language switcher](https://wordpress.org/plugins/tags/language-switcher/)[localization](https://wordpress.org/plugins/tags/localization/)
   [multilingual](https://wordpress.org/plugins/tags/multilingual/)[translate](https://wordpress.org/plugins/tags/translate/)
   [translation](https://wordpress.org/plugins/tags/translation/)
 *  [Advanced View](https://wordpress.org/plugins/lionrapid-translation/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

 *   [ lionrapid ](https://profiles.wordpress.org/lionrapid/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/lionrapid-translation/)