Title: Websel Multilingual
Author: webseldonusum
Published: <strong>October 25, 2026</strong>
Last modified: October 25, 2026

---

Search plugins

![](https://ps.w.org/websel-multilingual/assets/banner-772x250.png?rev=3764472)

![](https://ps.w.org/websel-multilingual/assets/icon-256x256.png?rev=3764472)

# Websel Multilingual

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

[Download](https://downloads.wordpress.org/plugin/websel-multilingual.0.5.1.zip)

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

 [Support](https://wordpress.org/support/plugin/websel-multilingual/)

## Description

**Built for leaving WPML.** WPML stores every translation as a separate post. Websel
Multilingual imports those translations into the original post, keeps the translated
URLs your visitors and search engines already know (`/en/hotel-amenities/` stays`/
en/hotel-amenities/`), and serves every language from a single source. Elementor
pages are matched element by element, even when WPML gave the translated copy different
element IDs. The importer has a dry-run mode and writes a JSON report, so you can
check the result before switching.

It works just as well on a site that was never multilingual.

Websel Multilingual (Turkish name: **Websel Çok Dil** – “çok dil” means “many languages”)
keeps **one post per page** and serves every language from it. Visitors get `/en/`,`/
fr/`, `/de/` … versions; you maintain a single source.

Translations live in a string table:

 * **Page output translation** – text nodes and `alt` / `title` / `placeholder` /`
   aria-label` attributes of the rendered page are translated, so page builders (
   Elementor and others), widgets and shortcodes work without special integrations.
 * **gettext translation** – theme and plugin strings, per text domain.
 * **AI or manual** – translate pending strings in bulk with the Claude API, or 
   export / import CSV files and translate them yourself.

#### Features

 * Language prefixes without rewrite rules (works in subdirectory installs too).
 * **Translated URLs** per language (`/en/hotel-amenities/` instead of `/en/otel-
   olanaklari/`); old source-slug URLs under a prefix redirect with 301.
 * Correct `<html lang>`, `hreflang` alternates, canonical and Yoast SEO title /
   description / schema per language; translated URLs in the Yoast sitemap.
 * Language switcher as shortcode (`[websmu_language_switcher]`), template function(`
   websmu_language_switcher()`) or as a menu item with flags.
 * Optional WordPress locale switching per language, so themes and plugins load 
   their own language files.
 * Per-language shortcode attributes (for example a different contact form per language)
   and per-language post meta.
 * Elementor element cache is kept separately per language.
 * **WPML importer** (Tools tab, WP-CLI or REST): languages, translated slugs, Elementor
   and classic content, menus, terms, image alt texts, String Translation, per-language
   theme settings. Elementor elements are matched by element ID and by structure,
   unmatched rich-text fields are kept as element-level copies, nothing is overwritten
   silently and a detailed JSON report is produced.

#### Free and Pro

The free plugin manages **one target language** (two languages in total, with your
source language) and includes every feature above. Nothing in it is time-limited,
and languages you have set up are never switched off by the plugin.

**Websel Multilingual Pro**, a separate add-on sold on our site, lets you add more
target languages and adds automatic updates and priority support. The WPML importer
always imports the translations of every language, so they are ready when you add
those languages.

#### WP-CLI

 * `wp websmu scan` – collect translatable strings from all public URLs.
 * `wp websmu translate --lang=en` – translate pending strings with the Claude API.
 * `wp websmu export --lang=en --file=en.csv` / `wp websmu import --lang=en --file
   =en.csv`
 * `wp websmu status`, `wp websmu lang add|remove|list`
 * `wp websmu wpml-import [--dry-run] [--unpublish-translations] [--report=<file
   >]`

### External services

This plugin can connect to the **Anthropic Claude API** (`https://api.anthropic.
com/v1/messages`) to translate texts automatically.

 * **When:** only when an administrator clicks “Translate with AI” on the Tools 
   tab or runs `wp websmu translate`. Nothing is sent automatically, on page views
   or in the background.
 * **What is sent:** the source-language texts that are waiting for translation (
   page texts, attribute values, theme/plugin strings collected by the site scan),
   the target language and the model name, together with your API key.
 * **Requirement:** you must enter your own Anthropic API key (Settings tab, or 
   the `WEBSMU_AI_API_KEY` constant). Without a key no request is made.

Anthropic terms: https://www.anthropic.com/legal/commercial-terms — Privacy policy:
https://www.anthropic.com/legal/privacy

The site scan uses loopback requests to your own site only.

### Credits

Flag icons: [flag-icons](https://github.com/lipis/flag-icons) by Panayiotis Lipiridis,
MIT License (see `assets/flags/LICENSE-flag-icons.txt`).

## Screenshots

[⌊Settings: source language, target languages and the menu language switcher. The
free version manages one target language.⌉⌊Settings: source language, target languages
and the menu language switcher. The free version manages one target language.⌉[

Settings: source language, target languages and the menu language switcher. The 
free version manages one target language.

[⌊Translations tab: every translatable text of the site in one list, editable in
place, with filters by language, status and type.⌉⌊Translations tab: every translatable
text of the site in one list, editable in place, with filters by language, status
and type.⌉[

Translations tab: every translatable text of the site in one list, editable in place,
with filters by language, status and type.

[⌊Languages box in the editor: publish a page per language and give it a translated
URL slug.⌉⌊Languages box in the editor: publish a page per language and give it 
a translated URL slug.⌉[

Languages box in the editor: publish a page per language and give it a translated
URL slug.

[⌊The language switcher added to a theme menu, with flags.⌉⌊The language switcher
added to a theme menu, with flags.⌉[

The language switcher added to a theme menu, with flags.

## Installation

 1. Upload the plugin and activate it.
 2. Go to **Websel Multilingual  Settings** (shown as **Websel Çok Dil** in Turkish),
    set the source language and add target languages, one per line: `code|Label|hreflang
    |wp_locale` (for example `en|English|en-US|en_US`).
 3. Optional: choose menus for the language switcher and enable locale switching.
 4. Go to **Tools**, run **Scan Site**, then translate with AI, via CSV, or edit translations
    on the **Translations** tab.
 5. Per page, set translated URL slugs in the **Languages** box on the edit screen.

Coming from WPML? Take a full backup, run **Import from WPML  Dry Run** on the Tools
tab, read the report, deactivate the WPML plugins and run **Import**.

## FAQ

### Does it create duplicate posts like WPML or Polylang?

No. Every language is served from the source post. Translations are stored in the
plugin’s own table (`{prefix}websmu_strings`).

### What happens when I change a page in the source language?

Changed texts appear in the source language in other languages until they are translated.
Run a scan and translate the pending strings.

### Can I keep my existing translated URLs when moving from WPML?

Yes. The importer stores each translation’s slug, and old URLs keep working.

### How many languages does the free version support?

Two: the source language plus one target language. The WPML importer imports the
translations of all languages; adding the third and further languages to the settings
requires Websel Multilingual Pro.

### Which page builders are supported?

Translation works on the rendered HTML, so any builder works. Elementor has extra
support (element cache per language, element-level copies for the WPML import).

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Websel Multilingual” is open source software. The following people have contributed
to this plugin.

Contributors

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

[Translate “Websel Multilingual” into your language.](https://translate.wordpress.org/projects/wp-plugins/websel-multilingual)

### Interested in development?

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

## Changelog

#### 0.5.1

 * Changed: all code names, options, database table and post meta now use the longer`
   websmu` prefix.
 * Changed: `wp websmu export` writes to `wp-content/uploads/websel-multilingual/`(
   or to standard output) instead of an arbitrary path.
 * Fixed: translated post content is run through `wp_kses_post()` before it is output;
   the Translations table styles are enqueued instead of printed inline.

#### 0.5.0

 * The language limit now applies only when a language is added (settings, WP-CLI,
   WPML importer). Languages that are already set up are always served; there is
   no runtime switch-off.
 * New: `websmu_enabled_languages` filter for add-ons.

#### 0.4.1

 * Translations are loaded from WordPress.org language packs; the plugin no longer
   bundles its own .mo files.

#### 0.4.0

 * Plugin renamed to Websel Multilingual (Turkish: Websel Çok Dil); text domain `
   websel-multilingual`.
 * Free version serves two languages (source + one target); more languages with 
   the Websel Multilingual Pro add-on. Languages beyond the limit keep their data
   and redirect temporarily to the source language.
 * New: `[websmu_language_switcher]` shortcode (the old `[websmu_dil_secici]` keeps
   working).
 * New: `websmu_loaded` action and `websmu_max_target_languages` filter for add-
   ons.

#### 0.3.0

 * New: Translations tab – search, filter by language / status / type, edit translations
   in place, bulk approve / pending / ignore / delete.
 * New: Languages box on the post edit screen – translated URL slug per language
   and per-language availability.
 * New: interface in English with a Turkish translation; WP-CLI output in English.
 * Changed: flag icons replaced with flag-icons (MIT); default Claude model updated.
 * Fixed: gettext lookup falls back to the site’s own translations (themes whose
   source strings are not English).

#### 0.2.0

 * New: translated URLs (slugs) per language with 301 from source-slug URLs.
 * New: WPML importer (WP-CLI, Tools tab, REST endpoint `websmu/v1/wpml-import`).
 * New: language switcher as menu item with flags.
 * New: optional locale switching, `<html lang>` per language, WPML compatibility
   filters and `ICL_LANGUAGE_CODE` for themes and plugins that ask WPML.
 * New: per-language shortcode attributes and post meta, Elementor element-level
   copies, Elementor element cache per language.
 * New: Yoast title variables, schema and sitemap per language; meta descriptions
   without a translation are not printed in other languages.
 * New: per-post language availability; untranslated pages can redirect to the source
   language.
 * Improved: one database query per request for translations; typography-insensitive
   matching (curly quotes, dashes); gettext per text domain.
 * Changed: interface strings are English with a Turkish translation.

#### 0.1.5

 * Subdirectory installs supported.

#### 0.1.4

 * Language switcher and hreflang links point to the correct languages.

## Meta

 *  Version **0.5.1**
 *  Last updated **4 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [hreflang](https://wordpress.org/plugins/tags/hreflang/)[language switcher](https://wordpress.org/plugins/tags/language-switcher/)
   [multilingual](https://wordpress.org/plugins/tags/multilingual/)[translation](https://wordpress.org/plugins/tags/translation/)
   [wpml](https://wordpress.org/plugins/tags/wpml/)
 *  [Advanced View](https://wordpress.org/plugins/websel-multilingual/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

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

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/websel-multilingual/)