Selling internationally means more than translating your product pages. A WooCommerce store has moving parts — cart, checkout, emails, and dynamic blocks — that all need to speak your customer's language, or you lose them at exactly the wrong moment: the point of payment.
The four layers of a translated store
Most WooCommerce translation problems come from not realising that a store's text arrives from four different places, handled by four different mechanisms. Fixing one does nothing for the others.
- Your product content — titles, descriptions, attributes. Lives in your database, translated by your multilingual plugin.
- WooCommerce's interface strings — "Add to cart", "Proceed to checkout". Ship as translations via WordPress language packs (WooCommerce Localization).
- Block-rendered Cart and Checkout — modern Woo renders these in the browser through
wp.i18n, using JSON translation files, not server HTML. - Transactional emails — generated at send time, in whichever locale the sending context resolves to.
A store can be fully translated in layer 1 and completely English in layers 2–4. That is the single most common outcome, and it is why "my products are translated but my checkout isn't" is such a frequent complaint.
What actually needs translating
- Product content — titles, descriptions, short descriptions, and image alt text.
- Product attributes and variations — sizes, colours, materials, and their values. "Colour: Red" needs both halves translated.
- Categories and tags — plus their archive pages and any category descriptions.
- Cart and checkout — every label, button, placeholder, and validation message.
- Order and account emails — confirmations, processing, completed, refunds, invoices, password resets.
- Store notices — "added to cart", coupon errors, stock warnings, shipping messages.
- Policy pages — shipping, returns, terms, privacy. Often forgotten, and the pages a hesitant buyer actually reads.
The trap: JavaScript-rendered blocks
This is the one that costs stores real money, so it deserves the detail.
The modern WooCommerce Cart and Checkout are built as blocks that render in the browser with JavaScript. Their strings are not printed into the HTML by PHP — they are looked up client-side through wp.i18n against JSON translation files loaded with the script.
Any translation approach that works by intercepting and rewriting server output never sees those strings. The HTML that leaves your server contains a container element and a script tag; the words appear afterwards, in the browser. So the product page translates perfectly and the checkout stays English.
The fix is to make sure the relevant WordPress language packs are installed, so the JSON translation files those scripts request actually exist for the target locale. When you evaluate a translation tool, ask specifically how it handles block-based checkout — and then verify by loading the checkout in a non-source language and reading it.
Order emails: translated at send time
Transactional emails are generated when the event fires, not when the customer was browsing. If the sending context resolves to the site's default locale rather than the customer's, your German buyer gets a German storefront experience and an English order confirmation.
Emails also carry strings from several sources at once: WooCommerce's own templates, your store name and policy text, product titles from the database, and anything your theme or a plugin has filtered in. Getting the first three right and missing the fourth produces an email that is 90% translated, which reads worse than one that is plainly in English.
Test this directly. Place a real test order in each language and read the confirmation end to end.
Approaches
Automatic AI translation
A plugin such as Gloty translates product content, cart, checkout, and emails automatically, and installs the WordPress language packs so JavaScript-rendered blocks localize as well. This is the fastest path for most stores, particularly ones with large or frequently changing catalogues where per-product manual translation is not realistic. Estimate cost with the translation cost calculator.
Manual / per-product
Polylang and WPML let you translate each product by hand or with assistance. More editorial control, considerably more work — and WooCommerce support is frequently a separate add-on or a higher tier rather than part of the base licence, so check what the real total is before comparing prices.
Currency and formatting are separate problems
Language and currency are independent decisions, and conflating them causes real confusion. Translating your store into German does not switch prices to euros — and it should not, because a German-speaking customer in Switzerland pays in francs.
Multicurrency is a distinct feature: it needs exchange rates, rounding rules, and per-currency payment-method availability. Decide whether you need it alongside translation, and budget for it separately.
Number, date and address formats also vary by locale — decimal commas, day-first dates, postcode-before-city ordering. WooCommerce handles much of this through its locale settings, but it is worth verifying on a real checkout in each target market.
SEO for a multilingual store
Each translated product needs the same SEO hygiene as any multilingual page: a clean language-prefixed URL, reciprocal hreflang including x-default, a self-referencing canonical, and a translated title and meta description.
Product structured data should reflect the translated content — a German product page carrying English schema is a mixed signal about what you are selling. Include product URLs for every language in your sitemap, and verify with the hreflang checker. The full list is in the multilingual SEO checklist.
Pre-launch checklist
- Add a product to the cart in each language and complete a test checkout — read every label, placeholder, and validation message.
- Place a test order and read the confirmation email end to end in each language.
- Confirm attribute names and values are translated on a variable product.
- Check a product, a category archive, and the shop page for correct hreflang and language URLs.
- Trigger an error deliberately — an invalid coupon, an out-of-stock item — and confirm the message is translated.
- Read the shipping, returns and terms pages in each language.
- Verify prices, decimal separators, and date formats display correctly per locale.
The checkout test is the one that matters most. It is the only step that exercises all four translation layers at once, and it is the exact moment a confused customer abandons the purchase.