BLACK FRIDAY
Save 59% on PageForge Annual $191/year $485/year
Claim 59% Off →
Sublanguage icon
Maintained Tested up to 6.6.9 #17 in language

Sublanguage

Sublanguage is a lightweight multilanguage plugin for wordpress.

Active installs600+100+ tier
Downloads · 30d235▼ -3.3% vs prev. 30d
Rating4.6/531 reviews
Health score51/100Fair
All-time downloads28.7KSince Jul 2015
Support resolved—No recent threads
RequiresWP 4.5PHP any
Downloads · 7d66▲ +8.2% week over week
Our verdict

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 & support

Daily downloads

4812Jun 28Aug 11Sep 25
Yesterday14
Daily average (1y)5
Peak day18Apr 12, 2026
Last 12 months2K

Download spikes usually follow a new release — each site that auto-updates counts as a download.

Rankings

Where Sublanguage stands today

WordPress.org search rankings

Live position in the plugin search, top 100
KeywordPositionCompeting pluginsCategory
language >100 10,000 Best language plugins →
multilanguage #30 227 Best multilanguage plugins →
multilingual >100 2,681 Best multilingual plugins →
translation >100 10,000 Best translation plugins →

Version adoption

Share of active sites per release.

  • 2.1260.6%
  • 2.811.6%
  • 2.108.1%
  • 2.67.2%
  • Other12.5%

Rating breakdown

★★★★★★★★★★ 4.6 from 31 reviews

  • 5★80.6%
  • 4★9.7%
  • 3★3.2%
  • 2★6.5%
  • 1★0.00%

About Sublanguage

From the official readme · v2.12

Description

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

  1. click the “Languages” tab
  2. click the “Add language” sub-tab
  3. 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
  4. choose the language order (it will affect order in the language switch)
  5. 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)

  1. click the “Appearance” tab
  2. click the “Menus” sub-tab.
  3. choose or create a menu
  4. click “Screen Options” (top right) and verify “Language” is checked
  5. open the “language” tab on the left, check the checkbox and click “Add to Menu”. Repeat it once for every language.
  6. 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

  1. click the “Appearance” tab
  2. click the “Widgets” sub-tab
  3. Drag “Sublanguage” item in the zone you want

Add a language switch anywhere on the site (for developpers)

  1. 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.

  1. click the “Settings” tab
  2. click the “Sublanguage” sub-tab
  3. select every post type and every taxonomy you need. For better performance, only select translatable post types and taxonomies.
  4. click “Save Change”
  5. 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

  1. click the “Settings” tab
  2. click the “Sublanguage” sub-tab
  3. select “Navigation Menu Items” in “Translate Post Type” section
  4. click “Save Change”
  5. click “Edit translations” after “Navigation Menu Items” in “Translate Post Type” section
  6. 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.

Full changelog on WordPress.org →

Screenshots

Add or edit language screen.
Add or edit language screen.
Post.php screen with language switch and tinyMCE button for quick interface.
Post.php screen with language switch and tinyMCE button for quick interface.
Tinymce plugin: quick interface for translation
Tinymce plugin: quick interface for translation
Wp.media interface with language tabs for medias translation
Wp.media interface with language tabs for medias translation
Edit-tags.php screen.
Edit-tags.php screen.
Nav-menus.php screen with language custom metabox
Nav-menus.php screen with language custom metabox
Options-permalink.php screen with inputs for taxonomy slug or custom post archive slug translation.
Options-permalink.php screen with inputs for taxonomy slug or custom post archive slug…
Minimal UI settings
Minimal UI settings

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.

Active installs badge Rating badge Health score badge

Best Sublanguage alternatives

All language plugins →
Alternatives
Rank Plugin Active installs Rating Updated Health
1 Loco Translate Loco Translate Translate WordPress plugins and themes directly in your browser. Versatile PO file editor… by Tim W 1M+ ★★★★★★★★★★ 4.8 (453) 2 months ago 73
2 Translate WordPress with GTranslate Translate WordPress with GTranslate Translate WordPress with Google Translate multilanguage plugin using AI translation… by edo888 900K+ ★★★★★★★★★★ 4.9 (5K) 2 weeks ago 97
3 Polylang Polylang Go multilingual in a simple and efficient way. Keep writing posts and taxonomy terms as… by Chouby 800K+ ★★★★★★★★★★ 4.7 (3K) 3 weeks ago 85
4 Translate WordPress – Google Language Translator Translate WordPress – Google Language Translator Translate WordPress with Google Language Translator multilanguage plugin which allows to… by edo888 100K+ ★★★★★★★★★★ 4.7 (619) 2 weeks ago 95
5 Bogo Bogo A straight-forward multilingual plugin. No more double-digit custom DB tables or hidden… by Rock Lobster Inc. 10K+ ★★★★★★★★★★ 4.5 (48) 1 month ago 81
6 Multilingual Contact Form 7 with Polylang Multilingual Contact Form 7 with Polylang Enables string translation and use of the same forms in different languages of Contact Form… by Andreas Münch 9K+ ★★★★★★★★★★ 4.9 (17) 8 months ago 56
7 Hreflang Manager – Hreflang Implementation for International SEO Hreflang Manager The Hreflang Manager plugin provides you an easy and reliable method to implement hreflang… by DAEXT 8K+ ★★★★★★★★★★ 4.7 (9) 2 weeks ago 87
8 WPBakery Visual Composer & qTranslate-X WPBakery Visual Composer & qTranslate-X Enables multilingual framework for plugin "WPBakery Visual Composer". by John Clause 7K+ ★★★★★★★★★★ 3.2 (11) 9 years ago 34
9 Admin Locale Admin Locale This plugin allows you to change the language of the admin panel without changing the whole… by Louy Alakkad 6K+ ★★★★★★★★★★ 5 (3) 14 years ago 36
10 Language Fallback Language Fallback Set a language as a fallback for the chosen language (e.g. "Deutsch" as a fallback for… by Bernhard Kau 5K+ ★★★★★★★★★★ 4.8 (23) 2 weeks ago 88

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
Sarah is here to help!
Hi there! 👋 Need help finding what you're looking for?
Sarah
Sarah
Online & Ready to Help
Hi there! 👋 Need help finding what you're looking for?

We'll use this to continue our conversation

Just now ✓ Verified

Join 500+ SEO Pros Scaling Their Strategy

Get exclusive programmatic SEO tactics, AI content workflows, and the latest PageForge updates delivered straight to your inbox. Stay ahead of the algorithm.

We care about your data in our privacy policy.