Sublanguage
Sublanguage is a lightweight multilanguage plugin for wordpress.
Use with caution
Sublanguage works, but test it on a staging site before relying on it in 2026. It runs on 600+ sites, is rated 4.6/5 and was last updated 10 months ago, and scores 51/100 on our health check.
- Loved by users — 4.6/5 from 31 reviews
- Small user base (600+ active installs)
- Only tested up to WordPress 6.6 (latest is 7.1)
How does it stack up?
Side-by-side on installs, updates, ratings & supportDaily downloads
Download spikes usually follow a new release — each site that auto-updates counts as a download.
Rankings
Where Sublanguage stands todayWordPress.org search rankings
Live position in the plugin search, top 100| Keyword | Position |
|---|---|
| language | >100 |
| multilanguage | #30 |
| multilingual | >100 |
| translation | >100 |
Version adoption
Share of active sites per release.
Rating breakdown
★★★★★★★★★★ 4.6 from 31 reviews
About Sublanguage
From the official readme · v2.12Description
Sublanguage is a multilanguage plugin for wordpress.
Concept
- no duplicated content (untranslated or untranslatable data inherits main language value)
- no additional database table (translation data is stored in post_meta)
- no markup added into content (unlike q-translate)
- no cookies (language is defined solely by URLs, better for SEO)
Features
- [NEW] support for Gutenberg (beta feature)
- translation UI for posts content, title, permalink, excerpt and meta (for posts, pages and custom posts)
- translation UI for terms name, slug and description
- translation UI for attachments title, caption, description, alt and meta
- translation UI for nav menus
- translate localized text
- translate login, password change, etc.
- translatability: define which content is translatable or not
- URL rewrite: translate posts and terms permalinks and child pages path
- support revisions
- support multisite
- extendable
Notes
In version 2.9, a security vulnerability (“The plugin settings can be executed by lower privilleged (sic) user”) was reported for Sublanguage. In order to ease the fixing, we chose to permanently remove a few under-used features concerned by this exploit in v 2.10. Please write in the forum if you disagree with this choice.
- remove automatic upgrade from version 1.x (version 2.0 is now about 10 years old).
- remove a quick edit button in classic editor that was available width Tinymce Advanced plugin.
- remove the possibility to translate options (Options translated so far will still works as usual in the front-end, you just no longer can edit translations in the back-end).
Documentation
Plugin documentation is available on github
Extensions
Thanks
- uggur for Turkish translation
Installation
Upload and activate the plugin
Add languages
- click the “Languages” tab
- click the “Add language” sub-tab
- choose a language in the list. If it is not in the list, you can just pick any one, then edit the language title, slug and locale code (xx_XX) later
- choose the language order (it will affect order in the language switch)
- click “Publish”. If you want to keep the language hidden on the front-end while you edit the translations, you can click “Save draft” instead
Add a language switch on the site (within a menu)
- click the “Appearance” tab
- click the “Menus” sub-tab.
- choose or create a menu
- click “Screen Options” (top right) and verify “Language” is checked
- open the “language” tab on the left, check the checkbox and click “Add to Menu”. Repeat it once for every language.
- if you want to organize the language items hierarchically, with the current language as root, you also need to go in the Sublanguage Settings and check “Current language first” checkbox.
Add a language switch in a widgets zone
- click the “Appearance” tab
- click the “Widgets” sub-tab
- Drag “Sublanguage” item in the zone you want
Add a language switch anywhere on the site (for developpers)
- Use this function:
do_action('sublanguage_print_language_switch');. You can customize HTML output through the filter “sublanguage_custom_switch” (read FAQ for more info).
Add translatable custom post types or custom taxonomies
Plugins or themes may add any number of extra post-type and extra taxonomies. If you can’t figure wether a post type or taxonomy need to be translatable, please ask in the forum.
- click the “Settings” tab
- click the “Sublanguage” sub-tab
- select every post type and every taxonomy you need. For better performance, only select translatable post types and taxonomies.
- click “Save Change”
- click “Option” link after a post type or taxonomy to access specific options
Translate menu items when your menu is using custom links or item names different from page titles
- click the “Settings” tab
- click the “Sublanguage” sub-tab
- select “Navigation Menu Items” in “Translate Post Type” section
- click “Save Change”
- click “Edit translations” after “Navigation Menu Items” in “Translate Post Type” section
- find the items you need to translate and click to edit
Frequently asked questions
How to clean uninstall this plugin?
In menu click on Languages, remove all language custom posts and empty trash. Deleting a language will permanently delete all translations associated to this language. Deleting main language will not delete original posts.
How to add a language switch on template file ?
Add this function in your template file do_action('sublanguage_print_language_switch');
How to customize the language switch output?
Add this in your function.php file and customize it: add_action('sublanguage_custom_switch', 'my_custom_switch', 10, 2); /** * @param array of WP_Post language custom post * @param Sublanguage_site $this The Sublanguage instance. */ function my_custom_switch($languages, $sublanguage) { ?>
How to have language switch in navigation menus ?
If you are using menus and you want the language switch into a menu, go to Display > Menu, open option drawer and verify ‘language’ is selected. Then add as much ‘language item’ as you have languages. You can even distribute languages on different hierarchy level. If you need current language to be on the first level and further language on the second, you will also want to check current language first in Settings -> Sublanguage
Post title, content or excerpt does not translate as expected in my theme
First go to Sublanguage>Settings and verify the relevant post type is set to be translatable. Then verify you are using the proper filters in you template file. For echoing post title, you need to ensure ´the_title´ filter is called. // echoing post title inside the loop the_title(); // echoing post title outside the loop echo get_the_title($some_post->ID); // but... echo $post->post_title; // -> Does not translate For echoing post content, you need to ensure ´the_content´ filter is called. // echoing content inside the loop the_content(); // or... echo apply_filters('the_content'…
Some texts in my theme do not translate as expected, like ‘Comment’, ‘Leave a Reply’, etc.
In your template files, verify texts are properly localized, and language packages are properly installed.
How can I access the current language for custom usage?
Use the global $sublanguage, like this: global $sublanguage; echo $sublanguage->current_language // -> WP_Post object echo $sublanguage->current_language->post_title; // -> Français echo $sublanguage->current_language->post_name; // -> fr echo $sublanguage->current_language->post_content; // -> fr_FR Alternatively you can use a sublanguage filter to call a user function with $current_language value in parameters: Function to use in your template file: echo apply_filters('sublanguage_custom_translate', 'text to translate', 'my_custom_translation', 'optional value'); Code to add in your…
How to translate wordpress options like ‘blog name’ or ‘blog description’ ?
Go to Sublanguage>Translate Options and try to find the corresponding option key. Options may be nested in a data tree.
How to translate texts in widgets?
Go to Sublanguage>Translate Options and find the corresponding widget option name (like ‘widget_somthing’). Expand items with value corresponding to ‘DATA’ until you find the text you need to translate.
How to translate nav menu items?
Your nav menu items that are linked to translated posts, pages or terms should be automatically translated. If you need to translate custom link or to change the default value for items name, you can select “Nav Menu Item” in “Translate post types” section of Sublanguage settings. Then open Sublanguage>Nav Menu Item and edit like a normal post.
How to make a custom post-meta value translatable?
Go to Sublanguage settings and select custom post-meta key in the checkbox list under “Translate Meta”. A meta key needs to be at least used once to appear in this list.
How to make post thumbnails translatable (different picture for each language)?
Go to Sublanguage settings and select ‘_thumbnail_id’ in the checkbox list under “Translate Meta”. At least one thumbnail must be set before metakey appears in this list.
How to access language data in javascript for ajax usage ?
Add this action to enqueue a small script to define values in javascript: add_action('init', 'my_init'); function my_init() { do_action('sublanguage_prepare_ajax'); } This will first define a global in javascript. Use console.log(sublanguage) to explore it. Furthermore, a small script will automatically add a language attribute in every jquery ajax call. You can change this language using sublanguage.current (in javascript). This language will be used if you need to get/update posts/terms using ajax.
How to import/export my blog with translations ?
You cannot export or import using the wordpress builtin tool while Sublanguage is active. It just does not work yet. But this feature will come in a future release. If you want to create a custom importer for posts and terms, you can use these 2 functions: do_action( 'sublanguage_import_post', $data); do_action( 'sublanguage_import_term', $taxonomy, $data); These functions are documented in sublanguage/include/admin.php. See examples on github.
Will this plugin affect my site performance?
Yes it will, unfortunately. A few more database queries are necessary to load every page. If performance drops noticeably, you may want to install a cache plugin. Sublanguage have been sucessfully tested with WP Super Cache and W3 Total Cache (with default settings). Sublanguage also works with SQLite Integration plugin.
My language is not in the language list
Use any language instead, then update, then edit language title, slug and locale, then update again.
Changelog
No notice yet.
2.12
- Add filter ‘sublanguage_redirect_uncanonical_url’ in class-site.php
- Fix versioning when registering gutenberg.js script (class-admin-ui.php, line 1954)
2.11
- Fix bug: Automatic conversion of false to array is deprecated in class-admin.php on line 158
- Fix bug: add_submenu_page function first argument being null in class-admin-ui.php on line 252
- Fix bug: replace this class “.edit-post-header__settings” with “editor-header__settings” to inject language switch in Gutenberg (Thx @andreinemes)
2.10
- add get_permlink_translation and get_archive_link_translation functions
- Fix bug when flush after editing a root page
- Fix bug when editing empty term meta translation
- remove creation of dynamic property (deprecated in PHP 8.2)
- remove options translation
- remove classic editor button
- remove automatic upgrade from 1.x
2.9
- Fix Bug causing problems when saving posts in block editor, when “custom-fields” not in post supports
- Replace deprecated js code for block editor API
2.8
- Fix Bug that erase other language content when a post is saved multiple times with Gutenberg.
- Fix Bug when a post has a translated post_name for main language causing a canonical loop
- Allow special characters in cpt archive url or slug
- Activate rewrite also when property is not set when registering post type
2.7.1
- Fix bug in Sublanguage::catch_translation: in some case (eg. querying posts page) query_vars “page” property become the pagename, leading to 404 error.
Screenshots
For developers
Is this your plugin? Show off the numbers.
Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.
Best Sublanguage alternatives
All language plugins →FAQ
Sublanguage: quick answers
Straight answers, pulled from live WordPress.org data.
Live data from WordPress.org · checked Sep 26, 2026
Is Sublanguage free?
Yes. Sublanguage is free to download and use from the official WordPress.org plugin directory.
Is Sublanguage safe to use in 2026?
Sublanguage works, but test it on a staging site before relying on it in 2026. It runs on 600+ sites, is rated 4.6/5 and was last updated 10 months ago, and scores 51/100 on our health check.
How many websites use Sublanguage?
Sublanguage is active on 600+ WordPress websites and has been downloaded 28,722 times since it launched in July 2015. It was downloaded 235 times in the last 30 days.
Does Sublanguage work with WordPress 7.1?
Sublanguage is officially tested up to WordPress 6.6.9, while the latest release is 7.1.2. It may still work, but try it on a staging site first.
When was Sublanguage last updated?
The latest version, 2.12, was released on December 8, 2025 (10 months ago).
Who makes Sublanguage?
Sublanguage is developed and maintained by maximeschoeni.
What are the best alternatives to Sublanguage?
The most popular alternatives to Sublanguage are Loco Translate (1M+ installs), Translate WordPress with GT… (900K+ installs) and Polylang (800K+ installs).
Powered by PageForge
Want thousands of pages that rank like these? Build them in an afternoon.
This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.
- CSV, Google Sheets & API data sources
- AI content, schema & internal links per page
- Works with Elementor, Gutenberg, Yoast & Rank Math
- Free on WordPress.org — no credit card