Hoe bouw je een meertalige Shopify-naar-WordPress migratie?

Je hebt maanden besteed aan het bouwen van een meertalige Shopify-winkel. Je productbeschrijvingen zijn vertaald in het Frans, Duits en Spaans. Je afrekenproces werkt in drie talen. Vervolgens besluit je te migreren naar WordPress en WooCommerce voor meer controle, betere marges of flexibiliteit van de plug-in.
De productgegevens worden prima overgezet. De afbeeldingen komen mee. Maar je vertalingen? Die verdwijnen.
Dit zijn de verborgen kosten van een meertalige WordPress-migratie waar niemand je voor waarschuwt. Shopify vergrendelt je vertalingen in zijn eigen propriëtaire systeem en WordPress gebruikt een volledig andere architectuur. Zonder een duidelijk plan besteed je weken aan het herbouwen van wat je al had. Deze gids geeft je dat plan.
Waarom meertalige migraties mislukken (en Shopify het erger maakt)
Platformmigraties zijn al pijnlijk genoeg met eentalige winkels. Voeg meerdere talen toe en de complexiteit vermenigvuldigt zich. De belangrijkste oorzaak is architectonisch: Shopify en WordPress behandelen vertalingen op fundamenteel verschillende manieren.
Shopify's vertaalmodel is een afgesloten geheel
Shopify slaat vertalingen op als metadata die aan resources zijn gekoppeld via de Translate and Adapt API. Elk product, elke collectie en elke pagina heeft vertaalitems die zijn gekoppeld aan de interne resource-ID's van Shopify.
Wanneer je je winkel exporteert met behulp van een migratietool zoals Cart2Cart, LitExtension of een CSV-export, krijg je de inhoud van de standaardtaal. De vertalingen? Die bevinden zich in een afzonderlijke laag die de meeste migratietools volledig negeren.
Wat er daadwerkelijk wordt geëxporteerd (en wat er verloren gaat)
Hier is wat een typische Shopify-naar-WordPress migratietool overdraagt:
| Content Type | Transfers? | Translations Transfer? |
|---|---|---|
| Producttitels en -beschrijvingen | Ja | Nee |
| Collectie-/categorienamen | Ja | Nee |
| Blog posts | Ja | Nee |
| Pagina's (Over, Contact) | Ja | Nee |
| Thema strings (knoppen, labels) | Nee | Nee |
| Afreken-/e-mailstrings | Nee | Nee |
| Navigatiemenu's | Gedeeltelijk | Nee |
Het patroon is duidelijk. Je standaardtaalinhoud migreert. Je vertalingen niet. En zelfs als je ze handmatig extraheert, kun je Shopify-vertalingen niet zomaar in WordPress plakken. De systemen spreken letterlijk verschillende talen.
Shopify-talen toewijzen aan WordPress-vertalingsbestanden
Voordat je opnieuw begint met bouwen, moet je begrijpen hoe WordPress meertalige inhoud verwerkt. Dit is waar de meeste migratiegidsen tekortschieten.
Het Gettext-systeem begrijpen
WordPress gebruikt het Gettext-lokalisatiesysteem. In plaats van vertalingen op te slaan in een databaselaag, leest het uit statische binaire bestanden (.mo-bestanden) die zijn gecompileerd vanuit door mensen leesbare .po-bestanden.
Een .po-bestand ziet er als volgt uit:
msgid "Add to Cart"
msgstr "Ajouter au panier"
msgid "Search results for %s"
msgstr "Résultats de recherche pour %s"
Elk WordPress-thema en elke plug-in wordt geleverd met een .pot-sjabloonbestand dat alle vertaalbare strings bevat. Je maakt een .po-bestand voor elke taal, vult de vertalingen in, compileert het naar .mo en plaatst het in de juiste directory.
Dit is het systeem waar je Shopify-vertalingen aan moeten worden gekoppeld.
Het probleem met de taalcodemismatch
Shopify gebruikt IETF-taaltags (en, fr, de). WordPress gebruikt landinstellingscodes met regio-varianten (fr_FR, de_DE, es_ES). Tijdens de migratie moet je elke Shopify-taal toewijzen aan de juiste WordPress-locale. Als je dit verkeerd doet, kan WordPress je vertaalbestanden niet vinden.
Veelvoorkomende mappings die mensen in de problemen brengen:
- Shopify
ptkomt overeen met WordPresspt_PT(Portugal) ofpt_BR(Brazilië) -- niet uitwisselbaar - Shopify
zh-CNkomt overeen met WordPresszh_CN, maar Shopifyzh-TWkomt overeen metzh_TW - Shopify
nb(Noors Bokmål) komt overeen met WordPressnb_NO
Geef je .po- en .mo-bestanden een naam met de WordPress-locale code: themename-fr_FR.po, woocommerce-de_DE.mo. Een verkeerde code betekent dat WordPress het bestand stilzwijgend negeert.
Een stapsgewijze workflow voor meertalige WordPress-migratie
Hier is de concrete workflow voor het behouden van je vertalingen tijdens een Shopify-naar-WordPress migratie.
Stap 1: Exporteer en controleer je Shopify-vertalingen
Voordat je WordPress aanraakt, extraheer je alles uit Shopify. Gebruik de Shopify Admin API of een tool zoals Shopify Translate CSV Export om je vertalingen in gestructureerde bestanden te plaatsen.
# Using Shopify CLI to export translations
shopify app translate export --locale fr
shopify app translate export --locale de
shopify app translate export --locale es
Controleer de exports. Tel hoeveel strings je per taal hebt. Identificeer welke productinhoudvertalingen zijn (behandeld door je CMS of meertalige plug-in op WordPress) versus thema-/UI-stringvertalingen (behandeld door .po-bestanden).
Stap 2: Stel je WordPress- en WooCommerce-taalstructuur in
Configureer op je nieuwe WordPress-installatie je taalinfrastructuur voordat je inhoud importeert.
- Ga naar Instellingen > Algemeen en stel je sitetaal in
- Installeer taalpakketten voor elke doeltaal via Instellingen > Algemeen > Sitetaal
- Maak de vertaalmappenstructuur:
/wp-content/languages/
/wp-content/languages/plugins/
/wp-content/languages/themes/
Voor productinhoudvertalingen (titels, beschrijvingen) heb je een meertalige content plug-in nodig, zoals WPML of Polylang. Maar voor thema- en plug-in UI-strings -- de knoppen, labels, foutmeldingen en de afrekenprocedure -- wil je statische .po/.mo-bestanden. Dit is de cloudgebaseerde aanpak die plug-in bloat vermijdt.
Stap 3: Converteer je vertalingen naar PO-formaat
Je Shopify-thema-stringvertalingen moeten worden geconverteerd naar Gettext .po-formaat. Dit is waar migratie technisch wordt.
Als je Shopify-vertalingen in JSON- of CSV-formaat zijn, kun je ze converteren naar .po met behulp van een script of tool. De sleutel is om elke bronstring toe te wijzen aan een msgid/msgstr-paar:
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')
Dit geeft je een startpunt, maar je nieuwe WordPress-thema en WooCommerce-installatie hebben honderden strings die niet bestonden in Shopify. Je kunt een Shopify "Toevoegen aan winkelwagen"-vertaling niet hergebruiken voor WooCommerce, omdat de omringende codecontext anders is. De WooCommerce-string kan Add to cart zijn (kleine letter "c") of een %s-variabele bevatten voor de productnaam.
Hier lopen de meeste mensen vast. Je hebt gedeeltelijke vertalingen van Shopify en een enorme kloof van onvertaalde WordPress-specifieke strings.
Hoe je de gaten kunt opvullen zonder opnieuw te beginnen
Het goede nieuws: je hoeft niet handmatig 5.000 WooCommerce-strings te vertalen. Het slechte nieuws: je kunt ze ook niet overslaan, anders toont je winkel een storende mix van Franse koppen en Engelse foutmeldingen.
Thema- en plug-in strings moeten nog steeds worden vertaald
Je WordPress-thema heeft een eigen .pot-bestand. WooCommerce heeft er een eigen. Elke plug-in die je installeert -- betalingsgateways, verzendcalculators, formulierbouwers -- heeft vertaalbare strings. Deze bestonden niet in je Shopify-winkel.
De snelste aanpak is om deze grote .po-bestanden in batch te vertalen in plaats van string voor string. Upload het .pot-bestand van je thema, selecteer de doeltaal en laat AI het zware werk doen.
Batch-vertaling van grote WooCommerce-bestanden
Het taalbestand van WooCommerce is enorm. Met duizenden strings die alles omvatten, van winkelwagenberichten tot belastingfoutcodes, is dit de grootste afzonderlijke vertaaltaak bij elke migratie. SimplePoTranslate behandelt dit via Smart Batching -- het opsplitsen van oversized bestanden in veilige brokken, het parallel verwerken ervan en het samenvoegen van de resultaten tot een enkel schoon bestand.
Het cruciale detail: je vertaalde bestanden moeten elke codevariabele exact behouden zoals deze in de bron staat. Een %s-placeholder in een WooCommerce-e-mailsjabloon mag geen spatie krijgen of van positie worden verwisseld tijdens de vertaling. Dit is waar syntax locking voorkomt dat beschadigde variabelen je productiewinkel bereiken.
Met SimplePoTranslate's Multi-Format Output krijg je .po, .mo, .json, .php en .xliff-bestanden in één ZIP-download. Dit is vooral handig tijdens migratie, omdat verschillende delen van je WordPress-stack vertalingen in verschillende formaten kunnen consumeren. Je thema leest .mo-bestanden. Een headless front-end heeft mogelijk .json nodig. Een aangepaste integratie verwacht mogelijk .xliff. Eén vertaalrun dekt ze allemaal.
Het vermijden van de drie meest voorkomende migratievertaalfouten
Zelfs met de juiste workflow zijn er valkuilen specifiek voor platformmigraties die ervaren ontwikkelaars overrompelen.
Beschadigde variabelen in transactionele e-mails
WooCommerce transactionele e-mails zitten vol met placeholders: {order_number}, {customer_name}, %1$s, %2$s. Als je vertaalproces er maar één van beschadigt, ontvangen klanten letterlijk e-mails zoals "Hallo {customer_name}", of erger nog, e-mails met verwisselde gegevens.
Valideer je vertaalde bestanden altijd aan de hand van de bron .pot voordat je ze implementeert. Tools zoals Poedit markeren placeholder-mismatches en cloudgebaseerde vertalers met syntax locking elimineren deze categorie fouten volledig.
Ontbrekende meervoudsregels
Shopify behandelt meervoudsvormen eenvoudig. WordPress Gettext ondersteunt complexe meervoudsvormen die per taal verschillen. Russisch heeft drie meervoudsvormen. Arabisch heeft er zes. Als je vertaalde .po-bestand niet de juiste Plural-Forms-header en overeenkomende msgstr[0], msgstr[1], msgstr[2]-items bevat, valt WordPress terug op de onvertaalde 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 товаров"
Dit is iets waar Shopify je nooit over hoefde na te denken. Op WordPress doet het er wel toe.
Verloren strings na plug-in swaps
Wanneer je migreert van Shopify, verander je niet alleen van platform. Je vervangt een heel plug-in ecosysteem. Je Shopify-betalingsgateway wordt WooCommerce Payments of Stripe voor WooCommerce. Je reviewsysteem wordt een WordPress-plug-in. Elke swap introduceert nieuwe vertaalbare strings en maakt oude vertalingen overbodig.
Maak een checklist van elke plug-in die je na de migratie installeert en controleer of elk een corresponderend vertaald .mo-bestand heeft in /wp-content/languages/plugins/. Zelfs het missen van één plug-in betekent dat je klanten Engelse strings zien in het midden van een verder vertaalde interface.
Lanceer je meertalige winkel op WordPress
Een meertalige WordPress-migratie is niet alleen een gegevensoverdracht. Het is een her-architectuur van hoe je winkel communiceert met internationale klanten. De winkels die dit goed doen, zien hogere conversiepercentages in niet-Engelstalige markten, omdat de ervaring native aanvoelt in plaats van aan elkaar gelapt.
De workflow is eenvoudig: exporteer je Shopify-vertalingen, wijs ze toe aan WordPress-locale codes, converteer naar .po-formaat, vul de gaten met batch AI-vertaling, valideer je variabelen en implementeer statische .mo-bestanden. Geen database bloat. Geen runtime vertaal overhead. Gewoon snelle, betrouwbare, meertalige commerce.
Als je een migratie tegemoet ziet met duizenden onvertaalde WooCommerce-strings, kan de aanpak van SimplePoTranslate voor lokalisatie van grote bestanden je weken handmatig werk besparen.
Klaar om je WooCommerce-winkel te vertalen na de migratie? Probeer SimplePoTranslate gratis -- geen creditcard vereist. Upload je .pot-bestand en ontvang binnen enkele minuten vertalingen die klaar zijn voor productie.