Skip to content

Selling in several languages

Your catalogue translated, with AI doing the heavy lifting and you reviewing it.

It lives in Panel → Languages.

The first one you add is the base language: the one your catalogue is already written in. It is not translated — everything is translated against it. That is why it cannot be removed.

All the others are translations of it.

The dropdown carries the languages the engine knows about. If yours is not there, type its code by hand: it works just the same.

Catalan ca-ES
Basque eu-ES
Galician gl-ES

Those three are not on the engine’s list, and for a shop in Terrassa or Bilbao they are not a detail.

Each language shows how much of each thing is translated: products, categories, variants, options and tags. The question the screen answers is what is missing, not what you have already done.

The button translates 25 at a time. There is deliberately no “translate the whole shop”: every batch is calls to a paid model, and the one who decides whether to continue is you, seeing what came out and what it cost.

It uses whatever AI you configured in Panel → AI, with your key and against your daily spending cap.

Anything already translated stays as it is. A person may have corrected it, and overwriting would throw away the only reviewed work there is.

It translates, it does not rewrite. What gets translated is the text you already approved. If each language were generated from scratch, every version would say something different and only the original would have been reviewed.

It also checks for forbidden claims. A model can slip into English what did not slip in Spanish, and whoever publishes the page answers for what it says. Anything that smells of a health or guarantee promise comes back flagged in the report.

A storefront asks for a language in two ways, and the first one wins:

Terminal window
curl "https://your-shop/store/products?locale=en-US" \
-H 'x-publishable-api-key: pk_...'

or with the Accept-Language: en-US header, which the browser sends by itself. ?locale= wins if both are present.

It works on any route of the shop, not just products. And it translates the whole record: a product carries its variants and categories inside, and half a translated page looks worse than none.

Anything untranslated comes back in the original language. A Spanish product page inside an English site beats an empty one.

Translating the catalogue is not enough: the theme has to know to ask for it. In the theme that ships as standard, that is one variable:

Terminal window
THEME_LOCALES=es,en

Without it the storefront changes in no way at all. No prefix, no switcher, no hreflang: exactly the same URLs as before. That is on purpose — a shop that is already selling cannot wake up with an English version of a catalogue that is not translated yet.

Language URL
The main one /tienda, /producto/whatever
The rest /en/tienda, /en/producto/whatever

The main language carries NO prefix, and this matters more than it looks: your current URLs are indexed in Google, linked from outside and pasted into messages. Sending them all to /es/… costs you the whole ranking in exchange for nothing. If someone arrives at /es/tienda, they are redirected to /tienda so the same page does not exist at two addresses.

Switching language takes you to the same page in the other language, not to the home page. Someone looking at a product does not want to lose it by changing language.

What the theme translates and what the shop translates

Section titled “What the theme translates and what the shop translates”
  • The shop translates the catalogue: product names, descriptions, categories, variants. It arrives already translated and is the same for every theme.
  • The theme translates its interface: buttons, notices, the checkout, the age gate and its text pages (legal notice, FAQ, “about us”).

Reviews are not translated, and that is not an oversight: a review is what a person said, and rewriting it in another language is inventing a quote and signing it with their name.

If you add a language in the panel that the theme cannot write, the catalogue will come out translated and the buttons in the main language. For the theme to speak it, it has to be translated — it is all in one file (src/lib/i18n.ts) and a missing phrase does not compile, so it cannot be published half done.

It stops being sold in, but its translations are kept. It is a reversible decision, and throwing the work away just in case would turn one click into hours of paying the AI again.

  • Translations live apart from the product. Each one is its own row. The catalogue is never touched, so you can add a language, look at it calmly and remove it with no risk at all to what you are selling.
  • If translating fails, the shop carries on. The visitor sees the original language, which is exactly what they would see without any of this.
  • Prices and currencies go by region, not by language: they are different things and are configured in Settings → Regions.