Truly Localised WordPress

Version: 2.2.3
Downloads: 128616

WordPress Translation Plugin

Your site in all the languages

MultilingualPress enables you to publish translated versions of your WordPress site. Switch between languages just by hitting a link, or redirect your visitors automatically to their preferred language according to their browser settings.



High Performance
Top-level Domains per Language
Translate All The Things
Add Language Links to WP Nav Menus
Language Manager
Future-proof, WordPress-Core-based Architecture
Inline Docs & Developer Support
No Lock-in, just honest Open Source Software.
Visual editor (Advanced Translator)
Automatic language redirection
Translate Custom Post Types
Quick Nav
Automatically Trash Translations
Duplicate Sites
Back-end Language
Dashboard Widget


Getting Started

There are a few things to consider when it comes to publishing web content in multiple languages. Most technical aspects, however, you shouldn’t need to worry about.

Especially when your content gets more complex, WordPress should remain easy and intuitively usable.

That’s why we have built MultilingualPress leveraging a powerful WordPress core feature: Multisite. Working on top of Multisite, MultilingualPress enables you to create a network of sites in different languages, all interconnected with and related to each other.

Learn how to quickly set up WordPress Multisite »



  1. Unzip the downloaded files.
  2. Upload the unzipped folder to wp-content/plugins/ directory.
  3. Network-enable MultilingualPress on your network admin plugins page.



  1. Set up the languages you plan to use in the Language Manager. Start with the ones you’re sure about, you can always add languages later.
  2. Choose which sites in your Multisite network will be related to each other as language sites. You can still have ›regular‹ sites in your network that won’t be touched by MultilingualPress at all.
  3. Set your own preferred language for your WordPress admin area in your profile.

Read the full documentation here »


Translate Content

Posts, Pages, Custom Post Types

For every language you have created a site in your Multisite network for, MultilingualPress will insert an extra Visual Editor when you edit a Post. Or a Page. Or Custom Post Type.
Just translate away on the same screen while you’re on it!

Hired a professional translator? Create a regular WordPress user account for them and grant them author permissions on a per-language basis. Whenever you’ll draft a new post in one language, MultilingualPress automatically will create drafts of that post for each language within your network. Translators just need to open their Dashboard and find new drafts right there to go to work with.

Edit and translate on the same WordPress admin page


Menus & Widgets

Translating Custom Menus, Widgets and other WordPress components on your website remains extremely flexible. Each language you set up literally translates into a separate site within your WordPress Multisite network. MultilingualPress interacts very carefully with the changes you make on a per-site basis and will only take action when it detects a translated ›sibling‹ of a particular Post, Page or Custom Post Type.

For example, you can add a widget displaying your latest blog posts on your English site. When you add the same widget on your French site, it will, of course, fetch the latest posts from your French blog. Those could be translations of your English blog posts, or not, just as you see fit.



“An image is worth a thousand words”, as the saying goes. But is it in any language?

Maybe the image you chose to illustrate a point for anglophone visitors won’t necessary translate to people socialised in non-English spoken society? A video in Portuguese would look great with German subtitles on your German site, wouldn’t it?

MultilingualPress adds great flexibility to the cultural aspects of translation by keeping separated media libraries in WordPress Multisite intact. Yes, it means you have to upload each image for each language and possibly host multiple versions of one and the same image. Just think it through—it’s a feature.

(There’s a nifty checkbox to have your Featured Image copied over to other languages automatically, though.)

Copy the featured image of a post over to its translations


For any Pre-Sale Questions please use our Support Site.

Includes VAT
  • 12 months access to our helpdesk
  • Priority support (office hours 09:00-17:00 UTC+1)
  • Tech support from MultilingualPress core developers




  • Combine all scripts and stylesheets, separated for frontend and backend.
  • Minify scripts and stylesheets when SCRIPT_DEBUG and MULTILINGUALPRESS_DEBUG are not set.
  • Make the icon/flag for the current site available in nav menus.
  • Sites with custom name are now returned in Mlp_Language_Api::get_translations().
  • Better updates: Make sure that site relations are not lost and languages are not duplicated.


  • Better flag handling
  • Link search result pages
  • Improve table duplicator
  • Fix usage of glob() on Solaris (Strato)


  • Added links to translations to the head element.
  • Relations between sites are now stored in a separate table mlp_site_relations. This is faster than the previous option call, and it is less error prone, because we don’t have to synchronize these relations between sites. The old options will be imported into the table automatically during the upgrade.
  • You cannot edit trashed translations anymore. If a translation has been moved to trash, you get a notice on the original editor page now, not the post content.
  • Post meta fields in poorly written plugins will not be overwritten anymore. We had many reports about plugins without a check for the current site when they write meta fields. Now we remove all global post data before we synchronize the posts, and we restore them when we are done.
  • The HTTP redirect will respect the visitor’s language preference now correctly.
  • All users who are logged in can disable the automatic redirection in their profile settings now.
  • You can see for which site the HTTP redirect is enabled in the global site table in the network administration in an extra column.
  • Installation and uninstallation are heavily improved now. We catch many more edge cases and switches from Free to Pro.
  • Languages are now synchronized between MultilingualPress and WordPress. When you assign a language in MultilingualPress to a site the first time and the language files are available, we set the site language in the WordPress option to that value.
  • You can add language links to regular navigation menus in the backend now. These links are adjusted automatically on each site: if there is a dedicated translation, the link will be changed to that page. It will point to the other site’s front page otherwise.
  • Users who are not logged in will not get permalinks for non-public sites anymore. You can work on a new site now safely, test all the links while being logged in, and your visitors will never see that until you set the site to public.
  • Post formats are now supported in the post translation page. We offer only formats that you have used on the other site at least once, because that is the onloy way to know that they are actually supported on that site.
  • Post parents are now synchronized when you save a hierarchical post type like a page.
  • You can link existing terms (tags, categories, whatever) now. We will add support for term creation on that page later.
  • There are hundreds of other, minor improvements.


  • Show current site in mlp_get_available_languages_titles() with proper language name.


  • Add check to Quicklink to avoid broken links.
  • Avoid notice when duplicating blogs with broken attachments.


  • Bring Quicklink options back.
  • Add a button to the translation metabox to copy the source post.
  • Extend return value of Mlp_Helpers::get_blog_language(): lang and language_short return just the first part of a language tag, language_long the complete language tag.
  • Include post status private in relationship changer.
  • Make get_available_languages_titles() use the correct source.
  • Remove language-list.php.


  • Code refactoring
  • New Language Manager with editable languages
  • Rename Widget to Language Switcher
  • Improved storage of site relationships
  • Set attributes width and height for flags
  • Fixed error on plugin deactivation
  • Implement uninstall.php to clean up on deletion properly
  • Simplify user interface in site settings
  • Better keyboard accessibility for form fields
  • Convert text domain calls to static strings
  • Better label texts
  • Missing translation does not prevent translating a post again anymore
  • Post authors of translations are not overwritten anymore.
  • Show current site in widget works now
  • Rework translation metaboxes, there is now one box for each language
  • Rename blog to site in the user interface
  • Update German translation, remove outdated other translations


  • Fixed URLs for static front page.


  • Fixed wrong links in widget on the front page.
  • Removed need to reload settings after adding a new relationship.
  • Copy post meta data and featured image for connected posts.
  • Show languages in site list in native writing style (alphabet), not flags.
  • Added a Catalonian flag, the Canadian flag was used for ca accidentally.
  • Better data handling during setup of post relationships.
  • Copy post meta data only once, avoid overwriting existing meta values later.
  • Set preview of connected posts to readonly, not disabled to make copy and paste easier.
  • Improved German translation.
  • Made all text domain references static strings.
  • Added a language list in inc/language-list.php to get languages in native and English writing by ISO codes.
  • Added a helper class Mlp_Db_Replace to update multiple tables and columns at once.
  • Many minor stability and performance improvements.
  • Duplicate blogs without relationships.
  • Quick edit does not delete Trasher settings anymore.
  • Trasher forgets to trash linked posts sometimes.
  • Avoid multiple confirmation messages in blog settings.
  • Avoid broken permalinks for linked custom post types, use dynamic links instead of pretty permalinks optionally.
  • Show translation metabox for activated post types only.
  • Open links from dashboard widget in the same window.
  • Fix label for User Backend Language switcher.
  • Make all strings in site settings translatable.
  • Fix relationship links in Advanced Translator.
  • Make language switcher appended to post content keyboard accessible.
  • Change appearance of language switcher: plain links for less than four languages, a select element for more.
  • Fix ID attributes in Advanced Translator to avoid JavaScript and CSS issues.


  • Removed link to blog posts on is_home()
  • Removed static ?noredirect parameter
  • Added modern greek as language
  • Added private posts for translations
  • Added parameter handling for mlp_show_linked_elements template function
  • Added parameter show_current_blog on mlp_show_linked_elements template function
  • Added show current blog at the MLP Widget
  • Added hook for checkbox "translate this post"
  • Added hook to change the default meta box
  • Added hook to change the link to the blog
  • Changed admin_url into network_admin_url
  • Redirect Feature: Added better check for session_start
  • Redirect Feature: Added redirect on is_home()
  • Redirect Feature: Added ?noredirect link with core plugin hook
  • Redirect Feature: Added english as browser language
  • Quicklink Feature: Added blog language to quicklink
  • Dashboard Widget: Fixed "This post is translated" checkbox
  • Advanced Translator: Removed default metabox when feature is active
  • Added Feature: Default Actions
  • Autoupdate Feature: Removed autoupdate module from module list


  • Code: Fixed Auto Updater
  • Version: Hopping due to some Auto Update Issues


  • Code: Fixed Wrong Encoding in different files
  • Code: Fixed several warnings, notices and small bugs
  • Pro Code: Fixed Auto Updater
  • Pro Code: Fixed several Advanced Translator Bugs
  • Pro Code: Fixed Post Relationships in Blog Duplicate


  • Pro Feature: Advanced Translator for Posts and Pages
  • Pro Feature: Support for Custom Post Types
  • Pro Feature: Dashboard Widget
  • Pro Feature: Duplicate Blogs
  • Pro Feature: Quick Load of new language packs
  • Pro Feature: Automatic browser redirection
  • Pro Feature: Systemwide Trash
  • Pro Feature: Individual backend language user settings


  • Feature: Added Demo Module
  • Feature: Added sort option to widget
  • Feature: Added is_home() to our queries
  • Feature: Added mlp_get_interlinked_permalinks
  • Feature: Added mlp_get_blog_language
  • Code: Fixed Widget
  • Code: Fixed several notices
  • Code: Fixed Buffer Bug in Settingspage
  • Code: Fixed Notices on refresh of the blog settings
  • Code: Fixed Column Content
  • Code: Fixed Relationship Error Notice
  • Code: Better Error Message for blog relationships
  • Code: Constant Language Strings
  • Code: Added Korean Language


  • PHP 5.2 Fix


  • Adding Plugin Settingspage, Code Cleanup
  • Added check that prevents the use of this plugin in a not-setted blog
  • Codexified several stuff
  • Fixed Missing Table from external Module
  • Added filter for the list, fixed Style
  • Fixed several notices
  • Fixed language key output


  • Codexified
  • Renamed the files
  • changed textdomain
  • fixed fi_FI language pack
  • fixed several widget bugs ( #10, #13, #18, #22 )
  • Documentation
  • Only load the Widget CSS when widget is used
  • added a check box to the editing view asking whether you want to create the drafts to other languages
  • Translation is availeable for drafts
  • Fixed up JS
  • Blog Checkup for invalid data


  • Display an admin notice if the plugin was not activated on multisite
  • Set the parent page if this page was also handled by the plugin Issue 2
  • Fix a problem that a new multisite cannot set related blogs
  • Change filter Issue 12
  • Widget bugfix Issue 12
  • Smaller source via use function selected() Issue 12
  • Static value for register widget Issue 12
  • Update Wiki for wrapper functions Wiki on Repo
  • Add new pages on Wiki on Repo for Filter- and Action Hooks inside the plugin
  • Fix bug, if you kill data on an blog for dont interlinked with other blogs


  • Exported the basic UI and userinput handling functionality into "default-module" class
  • By default post types other than post and page are excluded
  • Incorrect flags for some languages Issue 7


  • Exported helper functions into own class
  • Code documentation


  • Updated language codes
  • Pro Feature: Systemwide Trash