Switching from another plugin
What carries over, what does not, and how to try Multilify without breaking a site that is already live.
There is no importer
Multilify does not read another plugin's data, and pretending otherwise would waste your afternoon. What follows is how to move deliberately, and what to expect from each of the three plugins people usually arrive from.
Where your translations are now
- WPML
- Each translation is a separate post, joined to the original through WPML's own tables. Your translated content is real post content, so it can be copied by hand or by a script into the Multilify panel on the original post.
- Polylang
- Each translation is also a separate post, joined to the original through taxonomy terms. Same shape as WPML for this purpose: the text exists as posts, and moving it means moving post content.
- TranslatePress
- Translations are stored as strings in the plugin's own tables and applied to the rendered page, not to the post. There is no per-language post to copy from, so this is the slowest of the three to leave.
Before you touch anything
Take a database backup you have actually restored once before.
Do this on a staging copy first. Two multilingual plugins active at the same time will both try to answer for the same address.
Write down your current language prefixes. Keeping the same ones is what keeps your existing addresses working.
After the switch
Set the same default language you had before, so your unprefixed addresses stay unprefixed.
Give each language the prefix it had before. A changed prefix is a changed address, and a changed address needs a redirect.
There is no Permalinks step to remember. Adding or removing a language flags the rewrite rules and they are flushed on the next request.
Deactivate the old plugin only after the new addresses resolve. Its data stays in the database until you remove it.
How to tell it worked
A translated post opens at its prefixed address and shows the translated title.
The default language still opens at the address it always had.
The page source carries an alternate tag for every language plus x-default.
The html lang attribute matches the language you are reading.