How to Build a Multilingual Shopify-to-WordPress Migration

You have spent months building a multilingual Shopify store. Your product descriptions are translated into French, German, and Spanish. Your checkout flow works in three languages. Then you decide to migrate to WordPress and WooCommerce for more control, better margins, or plugin flexibility.
The product data transfers fine. The images come across. But your translations? They vanish.
This is the hidden cost of a multilingual WordPress migration that nobody warns you about. Shopify locks your translations into its own proprietary system, and WordPress uses an entirely different architecture. Without a clear plan, you will spend weeks rebuilding what you already had. This guide gives you that plan.
Why Multilingual Migrations Break (And Shopify Makes It Worse)
Platform migrations are painful enough with monolingual stores. Add multiple languages and the complexity multiplies. The root cause is architectural: Shopify and WordPress handle translations in fundamentally different ways.
Shopify's Translation Model Is a Walled Garden
Shopify stores translations as metadata attached to resources via the Translate and Adapt API. Each product, collection, and page has translation entries tied to Shopify's internal resource IDs.
When you export your store using a migration tool like Cart2Cart, LitExtension, or a CSV export, you get the default language content. The translations? They live in a separate layer that most migration tools ignore entirely.
What Actually Exports (And What Gets Lost)
Here is what a typical Shopify-to-WordPress migration tool transfers:
| Content Type | Transfers? | Translations Transfer? |
|---|---|---|
| Product titles and descriptions | Yes | No |
| Collection/category names | Yes | No |
| Blog posts | Yes | No |
| Pages (About, Contact) | Yes | No |
| Theme strings (buttons, labels) | No | No |
| Checkout/email strings | No | No |
| Navigation menus | Partial | No |
The pattern is clear. Your default language content migrates. Your translations do not. And even if you manually extract them, you cannot just paste Shopify translations into WordPress. The systems speak different languages, literally.
Mapping Shopify Languages to WordPress Translation Files
Before you start rebuilding, you need to understand how WordPress handles multilingual content. This is where most migration guides fall short.
Understanding the Gettext System
WordPress uses the Gettext localization system. Instead of storing translations in a database layer, it reads from static binary files (.mo files) compiled from human-readable .po files.
A .po file looks like this:
msgid "Add to Cart"
msgstr "Ajouter au panier"
msgid "Search results for %s"
msgstr "Résultats de recherche pour %s"
Every WordPress theme and plugin ships with a .pot template file containing all translatable strings. You create a .po file for each language, fill in the translations, compile it to .mo, and drop it in the right directory.
This is the system your Shopify translations need to map into.
The Language Code Mismatch Problem
Shopify uses IETF language tags (en, fr, de). WordPress uses locale codes with region variants (fr_FR, de_DE, es_ES). During migration, you need to map each Shopify language to the correct WordPress locale. Getting this wrong means WordPress cannot find your translation files.
Common mappings that trip people up:
- Shopify
ptmaps to WordPresspt_PT(Portugal) orpt_BR(Brazil) -- not interchangeable - Shopify
zh-CNmaps to WordPresszh_CN, but Shopifyzh-TWmaps tozh_TW - Shopify
nb(Norwegian Bokmal) maps to WordPressnb_NO
Name your .po and .mo files with the WordPress locale code: themename-fr_FR.po, woocommerce-de_DE.mo. A wrong code means WordPress ignores the file silently.
A Step-by-Step Multilingual WordPress Migration Workflow
Here is the concrete workflow for preserving your translations during a Shopify-to-WordPress migration.
Step 1: Export and Audit Your Shopify Translations
Before you touch WordPress, extract everything from Shopify. Use the Shopify Admin API or a tool like Shopify Translate CSV Export to pull your translations into structured files.
# Using Shopify CLI to export translations
shopify app translate export --locale fr
shopify app translate export --locale de
shopify app translate export --locale es
Audit the exports. Count how many strings you have per language. Identify which are product content translations (handled by your CMS or multilingual plugin on WordPress) versus theme/UI string translations (handled by .po files).
Step 2: Set Up Your WordPress and WooCommerce Language Structure
On your fresh WordPress installation, configure your language infrastructure before importing any content.
- Go to Settings > General and set your site language
- Install language packs for each target language via Settings > General > Site Language
- Create the translation directory structure:
/wp-content/languages/
/wp-content/languages/plugins/
/wp-content/languages/themes/
For product content translations (titles, descriptions), you will need a multilingual content plugin like WPML or Polylang. But for theme and plugin UI strings -- the buttons, labels, error messages, and checkout flow -- you want static .po/.mo files. This is the cloud-based approach that avoids plugin bloat.
Step 3: Convert Your Translations to PO Format
Your Shopify theme string translations need to be converted into Gettext .po format. This is where migration gets technical.
If your Shopify translations are in JSON or CSV format, you can convert them to .po using a script or tool. The key is mapping each source string to a msgid/msgstr pair:
import csv
with open('shopify_translations_fr.csv', 'r') as infile, \
open('theme-fr_FR.po', 'w') as outfile:
outfile.write('msgid ""\nmsgstr ""\n')
outfile.write('"Language: fr_FR\\n"\n\n')
reader = csv.DictReader(infile)
for row in reader:
outfile.write(f'msgid "{row["key"]}"\n')
outfile.write(f'msgstr "{row["translation"]}"\n\n')
This gives you a starting point, but your new WordPress theme and WooCommerce installation will have hundreds of strings that did not exist in Shopify. You cannot reuse a Shopify "Add to Cart" translation for WooCommerce because the surrounding code context is different. The WooCommerce string might be Add to cart (lowercase "c") or include a %s variable for the product name.
This is where most people get stuck. You have partial translations from Shopify and a massive gap of untranslated WordPress-specific strings.
How to Translate the Gaps Without Starting Over
The good news: you do not need to translate 5,000 WooCommerce strings by hand. The bad news: you cannot skip them either, or your store will show a jarring mix of French headings and English error messages.
Theme and Plugin Strings Still Need Translation
Your WordPress theme has its own .pot file. WooCommerce has its own. Every plugin you install -- payment gateways, shipping calculators, form builders -- each has translatable strings. These did not exist in your Shopify store.
The fastest approach is to translate these large .po files in batch rather than string by string. Upload your theme's .pot file, select the target language, and let AI handle the heavy lifting.
Batch Translating Large WooCommerce Files
WooCommerce's language file is massive. With thousands of strings covering everything from cart messages to tax error codes, it is the single biggest translation task in any migration. SimplePoTranslate handles this through Smart Batching -- splitting oversized files into safe chunks, processing them in parallel, and merging the results back into a single clean file.
The critical detail: your translated files must preserve every code variable exactly as it appears in the source. A %s placeholder in a WooCommerce email template cannot have a space added or a position swapped during translation. This is where syntax locking prevents broken variables from reaching your production store.
With SimplePoTranslate's Multi-Format Output, you get .po, .mo, .json, .php, and .xliff files in a single ZIP download. This is particularly useful during migration because different parts of your WordPress stack may consume translations in different formats. Your theme reads .mo files. A headless front end might need .json. A custom integration might expect .xliff. One translation run covers all of them.
Avoiding the Three Most Common Migration Translation Failures
Even with the right workflow, there are pitfalls specific to platform migrations that catch experienced developers off guard.
Broken Variables in Transactional Emails
WooCommerce transactional emails are dense with placeholders: {order_number}, {customer_name}, %1$s, %2$s. If your translation process corrupts even one of these, customers receive emails like "Hello {customer_name}" literally, or worse, emails with swapped data.
Always validate your translated files against the source .pot before deploying. Tools like Poedit will flag placeholder mismatches, and cloud-based translators with syntax locking eliminate this class of error entirely.
Missing Pluralization Rules
Shopify handles plurals simply. WordPress Gettext supports complex plural forms that vary by language. Russian has three plural forms. Arabic has six. If your translated .po file does not include the correct Plural-Forms header and matching msgstr[0], msgstr[1], msgstr[2] entries, WordPress falls back to the untranslated string.
# Correct Russian plural forms header
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
msgid "%s item"
msgid_plural "%s items"
msgstr[0] "%s товар"
msgstr[1] "%s товара"
msgstr[2] "%s товаров"
This is something Shopify never required you to think about. On WordPress, it matters.
Orphaned Strings After Plugin Swaps
When you migrate from Shopify, you are not just changing platforms. You are replacing an entire plugin ecosystem. Your Shopify payment gateway becomes WooCommerce Payments or Stripe for WooCommerce. Your review system becomes a WordPress plugin. Each swap introduces new translatable strings and makes old translations obsolete.
Build a checklist of every plugin you install post-migration and verify that each one has a corresponding translated .mo file in /wp-content/languages/plugins/. Missing even one plugin means your customers see English strings in the middle of an otherwise translated interface.
Launch Your Multilingual Store on WordPress
A multilingual WordPress migration is not just a data transfer. It is a re-architecture of how your store communicates with international customers. The stores that get this right see higher conversion rates in non-English markets because the experience feels native rather than patched together.
The workflow is straightforward: export your Shopify translations, map them to WordPress locale codes, convert to .po format, fill the gaps with batch AI translation, validate your variables, and deploy static .mo files. No database bloat. No runtime translation overhead. Just fast, reliable, multilingual commerce.
If you are facing a migration with thousands of untranslated WooCommerce strings, SimplePoTranslate's approach to large-file localization can save you weeks of manual work.
Ready to translate your WooCommerce store after migration? Try SimplePoTranslate free -- no credit card required. Upload your .pot file and get production-ready translations in minutes.