Title: Sawir Live Translate
Author: Ricardo Sawir
Published: <strong>July 2, 2026</strong>
Last modified: July 2, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/sawir-live-translate.svg)

# Sawir Live Translate

 By [Ricardo Sawir](https://profiles.wordpress.org/sawirricardo/)

[Download](https://downloads.wordpress.org/plugin/sawir-live-translate.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/sawir-live-translate/#description)
 * [Reviews](https://wordpress.org/plugins/sawir-live-translate/#reviews)
 * [Development](https://wordpress.org/plugins/sawir-live-translate/#developers)

 [Support](https://wordpress.org/support/plugin/sawir-live-translate/)

## Description

Open any page on your site, click “Translate this page” in the admin bar, choose
a
 target language, and either auto-translate every visible string (via a free machine-
translation service) or edit translations by hand while seeing the page update live.

Saved translations are rendered server-side into the HTML response (SEO-friendly:

no flash of untranslated text, and hreflang alternates in the head), and visitors
switch languages via a link-based switcher (bottom-right).

Developed by Ricardo Sawir for Sawir Studio LLC.

 * Website: https://sawirstudio.com
 * X: https://x.com/RicardoSawir
 * GitHub: https://github.com/sawirricardo
 * Email: ricardo@sawirstudio.com

URLs use a language path prefix, e.g. /es/about for Spanish, /about for the source

language (which stays canonical, un-prefixed). Language is resolved in this order:/
es/ path  ?lang=es  saved cookie  browser Accept-Language  source. Root and prefix-
less URLs auto-detect the visitor’s browser language without redirecting (a Vary
header is sent so shared caches behave).

 1. Settings  Live Translate: set your source language and tick the languages to offer.
 2. Visit a front-end page and click “🌐 Translate this page” in the admin bar.
 3. Pick a language, hit “Auto-translate empty” (or edit strings), then “Save”.
 4. Visitors use the switcher (bottom-right); each language has its own /xx/ URL.

Note: language path prefixes assume a root-domain install and no top-level page

whose slug is a two-letter language code.

### External services

This plugin’s optional “Auto-translate” feature (admin-only, triggered manually

by clicking an Auto-translate/Translate button) sends the source text strings and
the chosen language pair to the MyMemory translation API (https://mymemory.translated.
net/) to fetch machine translations. The request is made from the administrator’s
browser only when they click the button; no visitor data is ever sent, and nothing
is sent automatically.

 * Service terms: https://mymemory.translated.net/doc/en/tos.php
 * Privacy policy: https://mymemory.translated.net/doc/en/privacy.php

Developers can swap the provider — see “Custom translation provider” below.

### Native WordPress localization (dates, core/theme strings)

On a translated request the plugin switches WordPress’s locale to the target
 language,
so dates (month/day names) and any _installed_ core, theme, and plugin translations
render natively — the string map only covers the rest.

For this to have visible effect the language pack must be installed. The easiest

way is Settings  General  Site Language: pick and save the language once (which 
downloads its pack), then switch back to your source language. Languages without
an installed pack still work for content translation; only native dates/strings 
are skipped. Map codes to custom WP locales with the ‘sawir_lt_wp_locale’ filter.

### Scan site for strings

Settings  Live Translate  “Scan site now” crawls your published pages, posts,
 and
public archives to discover every translatable string up front (batched, with a 
progress indicator). Discovered strings then appear in the “Edit all site strings”
section right below, where you can pick a language and translate, auto- translate,
or bulk-import the whole site at once instead of page by page. Note: machine translation
is still rate-limited by the free service, so for large sites use Bulk edit to export
and translate elsewhere.

### Multisite

Multisite-aware. Each subsite has its own settings and its own translations table,

configured independently. Tables are created on network activation, when a new subsite
is created, and lazily on first admin visit; uninstall cleans every site on the 
network.

### Custom switcher

Turn off “Built-in switcher” in settings and render your own anywhere in your
 theme
using sawir_lt_switcher_links(), which returns the language links for the current
page:

    ```
    <?php if ( function_exists( 'sawir_lt_switcher_links' ) ) : ?>
      <ul class="my-lang-switcher">
      <?php foreach ( sawir_lt_switcher_links() as $l ) : ?>
        <li>
          <a href="<?php echo esc_url( $l['url'] ); ?>"<?php echo $l['active'] ? ' aria-current="true"' : ''; ?>>
            <?php echo esc_html( $l['name'] ); ?>
          </a>
        </li>
      <?php endforeach; ?>
      </ul>
    <?php endif; ?>
    ```

Each item is [‘code’,’name’,’url’,’active’,’is_source’] (code is ” for the
 source
language). sawir_lt_current_lang() returns the active language code.

### Custom translation provider

Auto-translate uses the free MyMemory API by default. To use your own provider
 (
DeepL, Google, a local model, …), reassign window.SawirLT.translate from a script
enqueued after the ‘sawir-lt-walk’ handle. Signature: it receives the source text
and the two language codes, and returns a Promise resolving to the translated string.
Every auto-translate path (in-page editor and admin bulk translate) routes through
it.

    ```
    add_action( 'admin_enqueue_scripts', 'myprefix_lt_provider' );
    add_action( 'wp_enqueue_scripts', 'myprefix_lt_provider' );
    function myprefix_lt_provider() {
        if ( wp_script_is( 'sawir-lt-walk', 'registered' ) ) {
            wp_enqueue_script( 'myprefix-lt-provider',
                plugins_url( 'provider.js', __FILE__ ),
                array( 'sawir-lt-walk' ), '1.0.0', true );
        }
    }
    ```

provider.js:

    ```
    window.SawirLT.translate = function ( text, source, target ) {
        return fetch( 'https://example.com/translate', {
            method: 'POST',
            body: JSON.stringify( { text: text, from: source, to: target } )
        } ).then( function ( r ) { return r.json(); } )
          .then( function ( j ) { return j.translation; } );
    };<h3>Translations</h3>
    ```

The plugin’s own admin/UI text is translation-ready (text domain
 “sawir-live-translate”).
A .pot template ships in /languages — drop your .po/.mo there or under wp-content/
languages/plugins/. (The in-page editor’s JavaScript labels are not yet localized.)

### Other plugins by Sawir Studio

 * [Sawir Restock Notifier for WooCommerce](https://wordpress.org/plugins/sawir-restock-notifier-for-woocommerce/)—
   let customers request an email when an out-of-stock product is back.
 * [Sawir Product Image Zoom for WooCommerce](https://wordpress.org/plugins/sawir-product-image-zoom-for-woocommerce/)—
   product image lightbox with navigation and click-to-zoom.
 * [Sawir Variation Gallery Tools for WooCommerce](https://wordpress.org/plugins/sawir-variation-gallery-tools-woocommerce/)—
   manage variation-specific gallery images.
 * [Sawir Role Capabilities Manager](https://wordpress.org/plugins/sawir-role-capabilities-manager/)—
   create custom user roles and manage capabilities.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Sawir Live Translate” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Ricardo Sawir ](https://profiles.wordpress.org/sawirricardo/)

[Translate “Sawir Live Translate” into your language.](https://translate.wordpress.org/projects/wp-plugins/sawir-live-translate)

### Interested in development?

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

## Changelog

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.0.0**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.8 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [localization](https://wordpress.org/plugins/tags/localization/)[multilingual](https://wordpress.org/plugins/tags/multilingual/)
   [translation](https://wordpress.org/plugins/tags/translation/)
 *  [Advanced View](https://wordpress.org/plugins/sawir-live-translate/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/sawir-live-translate/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/sawir-live-translate/reviews/)

## Contributors

 *   [ Ricardo Sawir ](https://profiles.wordpress.org/sawirricardo/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/sawir-live-translate/)