
Polylang Multilingual Shop for WooCommerce — a multilingual store on free Polylang
Multilingual WooCommerce on free Polylang: one-click product translation (prices, stock, SKU, images, categories, attributes and variations in one go), shared prices and stock across languages, shop, cart, checkout and account pages per language, the cart follows the shopper’s language, the order keeps its language and customer e-mails go out in it. Classic and block checkout, HPOS. The base version is free; Pro adds translating the whole catalogue in one run, separate prices or stock per language, payment and shipping texts per language and CSV with language columns.
- Compatibility
- WordPress 6.2+ · WooCommerce 8.0+ · Polylang 3.7+ (free; tested on WordPress 7.1, WooCommerce 11.1, Polylang 3.8) · PHP 7.4+ (live run on PHP 7.4 and 8.3) · HPOS · classic and block cart and checkout · language from the directory, subdomain, content, plain permalinks
- Licence
- one site, annual
- Trial
- 7 days, no card, one per site
- Updated
- September 2026
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.
What it looks like

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.
Technical requirements
WordPress 6.2+, WooCommerce 8.0+ and the free Polylang 3.7+. Live run on WordPress 7.1, WooCommerce 11.1 and Polylang 3.8, with and without HPOS.
PHP 7.4+. Live run on PHP 7.4 and PHP 8.3.
Polylang URL modes: directory, subdomain, content, plain permalinks — all four tested; a separate domain per language runs through the same code as subdomains but was not run on its own.
Themes: tested with Twenty Twenty-Five and Storefront, block and classic cart and checkout.
Not together with Polylang for WooCommerce or Hyyan WooCommerce Polylang Integration — they do the same job; the module pauses next to them. Polylang Pro and page caching were not tested.
Version history
Orders from the block checkout keep the shopper’s language even when the Store API request arrives without the language parameter.
First public release: translatable products, variations, categories, tags and attributes, one-click product translation, shared data, product type and stock in sync across languages,…
Frequently bought with Polylang Multilingual Shop for WooCommerce
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — a Nova Poshta module for OpenCart 2.3, 3.x and 4.x

LiqPay — Card Payments for OpenCart 2.3, 3.x and 4.x

Telegram notifications and Viber/SMS for customers for OpenCart
Full module description
Polylang Multilingual Shop for WooCommerce builds a multilingual store on the free Polylang. Polylang translates posts and pages; this module teaches it WooCommerce: products with variations, categories, tags and attributes, the shop, cart and checkout pages, the cart, the order and the e-mails. A shopper who reads the store in Ukrainian buys in Ukrainian and gets a Ukrainian e-mail, while the warehouse sees one product with one stock level.
A product is translated in one click: “+” in the language column creates a full copy — prices, stock, SKU, images, translated categories and attribute values, every variation. You only translate the texts. From then on everything that is not text stays the same in every language: change the price in any language and the others follow, sell the product in the German version and the stock drops everywhere.
What the shopper sees
- A shop page for every language. The Ukrainian shop page lists Ukrainian products; the language switcher leads from shop to shop, not to the home page.
- Product, categories, attributes in the shopper’s language. “Колір: Червоний” instead of “Color: Red”, navigation and breadcrumbs in Ukrainian.
- Same prices. The sale, the price range of variations and the stock are the same as in the English version.
The cart follows the shopper: switch the language and the lines move to the translations of the same product and variation, with the same quantity and coupon. The block cart, mini-cart and checkout get the page language (their Store API requests carry it), and so does the classic checkout — product names, shipping, field errors and the order itself are all in Ukrainian.
The order keeps the language it was placed in. “Order received”, then “Shipped” or “Completed” reach the customer in that language — whether the status is changed by an admin in an English dashboard or by a payment service at night.
What the admin gets
- Product translation with “+” in the product list or in the language box on the product screen — a full copy, status “Draft” or the same as the original (configurable).
- Shared data in sync from any language: prices and sale dates, stock and status, SKU and GTIN, weight and dimensions, shipping and tax classes, image and gallery, categories, tags, attributes, linked products. The product screen tells you what exactly is shared.
- WooCommerce → Polylang Shop: how many products each language has and how many are not translated yet, the shop, cart, checkout and account pages per language and a “Create the missing page translations” button — a copy with the block or shortcode, not an empty page.
- Languages → Translations: attribute names, your own WooCommerce e-mail subjects, headings and texts, and in Pro the payment and shipping texts.
The orders list has a Language column (HPOS and legacy storage), the order screen an “Order language” field. Admin notifications (“new order”, “low stock”) go out in the store’s default language, one per product rather than one per translation.
Pro: the whole catalogue at once, prices per language, payment texts and CSV
- Translate the whole catalogue. Pick a language and a status — the module gives products without a language the default one and creates the missing translations of categories, tags, attribute values and products with all their variations. Short steps, can be stopped and resumed, a rerun duplicates nothing.
- Separate data per language. Untick a group and each language keeps its own price, stock, images or SKU — for example a separate stock per market.
- Payment and shipping texts per language: payment method titles, descriptions and instructions (bank details on the thank-you page and in e-mails) and shipping method titles — on the classic and the block checkout; plus the store notice and the checkout consent texts.
- CSV with languages. WooCommerce export and import with “Language” and “Translation group” columns: products and variations come in already in their languages and linked.
How it works — step by step
- You add languages in Polylang; the module makes products, categories, tags and attributes translatable and creates the shop, cart, checkout and account pages for every language.
- “+” in the language column — a full copy of the product in that language; you translate the texts and publish.
- You edit price, stock or variations in any language — the module carries the shared data to every translation; an order reduces the stock in all languages.
- The shopper switches language — the cart moves to the translations; block and classic checkout run in the page language.
- The order stores its language; every customer e-mail about it goes out in that language, admin e-mails in the store language.
Under the hood
- Public APIs only. Languages and translations through Polylang functions (
pll_*), products and orders through the WooCommerce CRUD — so it works with HPOS and with legacy order storage. - Data. Order language in the
_catcode_plms_langmeta, the link between variations across languages in_catcode_plms_vgroup, settings in one optioncatcode_plms_settings. No custom tables. - For developers. The
catcode_plms_email_languagefilter sets the language of any WooCommerce e-mail. - Removal. Products, translations and pages always stay; settings, variation links and the order language go only with “Delete data on uninstall” ticked.
How to install
- Install and activate WooCommerce and the free Polylang, add your languages in Languages → Languages (“language from the directory name” is recommended).
- Download the free version
catcode-polylang-multilingual-shop-for-woocommerce-1.0.1.zipwith the button at the top of this page (or the Pro zip from your account after purchase) and install it: Plugins → Add New → Upload Plugin. - WooCommerce → Polylang Shop → “Create the missing page translations” — the shop, cart, checkout and account pages get copies in every language.
- In Products click “+” in a language column and translate the texts. In Pro — “Translate the whole catalogue”.
- Translate attribute names and e-mail texts in Languages → Translations.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
Do I need Polylang Pro or Polylang for WooCommerce?
No. The module works with the free Polylang from wordpress.org. If Polylang for WooCommerce is already active, our module pauses itself and says so — both do the same job.
What is shared between languages and what is separate?
Shared is everything that is not text: prices and sale dates, stock, SKU and GTIN, weight and dimensions, shipping and tax class, images, categories, tags, attributes, default variation, linked products. Separate are the name, descriptions, purchase note and custom attribute values. In Pro you can untick a group, and each language keeps, say, its own price.
How do I translate a product?
In the product list click “+” in the language column. A full copy is created: prices, stock, images, translated categories and attribute values (missing ones are created as copies), every variation. You translate the texts and publish.
I have 2,000 products. One by one?
In Pro — “Translate the whole catalogue”: one run creates the missing translations of categories, tags, attribute values and products. It works in short steps, so hosting limits are not hit; 1,350 products took about a minute and a half, up to 3 s and 15 MB of memory per step. A rerun duplicates nothing.
A shopper put a product in the cart in English and switched the language. What happens?
The line moves to the Ukrainian translation of the same product and variation — same quantity, same coupon. If there is no published translation yet, the product stays as it was.
Which language do e-mails go out in?
To the customer — the order language, even when the status is changed by an admin in an English dashboard, by a cron or by a payment callback. To the admin — the store’s default language. The order language can be changed by hand on the order screen.
Which Polylang URL modes are supported?
Language from the directory (/uk/), from the subdomain (uk.example.com), from the content and plain permalinks (?lang=uk) — all four went through the full shopper run. On language subdomains the module also fixes the block cart and checkout translation: without it WooCommerce shows them in English there.
A second currency?
Tested with our Multi Currency: the Ukrainian store in hryvnias, switching the language keeps the currency, the order is placed in UAH with language uk.
I have the free copy from wordpress.org and bought Pro.
Upload the Pro zip in Plugins → Add New and activate it. There is no fatal error: Pro runs on the same settings and data, the free copy switches itself off and tells you it can be removed.
What happens to my data if I delete the module?
Products, translations and pages always stay — they are Polylang content. Settings, variation links and the order language are removed only if “Delete data on uninstall” is ticked.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—