Skip to content

Locales and multi-language

A locale is a language and (optionally) country pair that your shop supports — en, en-CA, fr, fr-FR, de, and so on. Locales are how the app knows which language to show a renamed rate or payment method in.

The app has two settings, configured in Settings:

  • Primary locale — the locale the app falls back to when the customer’s locale has no specific translation. The default is en.
  • Available locales — the list of locales your shop supports. Add every locale you actually sell in, as a language code plus optional country code (e.g. en, en-CA, fr, fr-FR).

The customer’s locale is taken from their browser and the Shopify storefront context, not from your list — your list is what you support, and the customer gets the closest match.

A rename operation lets you provide one translation per rate per locale. The form looks like this:

Rate: "Standard Shipping"
en → "Free Shipping"
fr → "Livraison standard"
fr-FR → "Livraison standard (France)"

When the customer sees the rate at checkout, the app picks the closest matching locale: their exact fr-FR if it exists, otherwise fr, otherwise the rate’s primary-locale value, otherwise the rate’s original name.

For every rate in a rename operation you can add one translation per available locale. The form gives you a + Add translation button per rate; the locale dropdown is populated from your available locales, and shows “All available locales are already used for this rate” when you’ve covered them all.

Multi-locale translations (more than one translation per rate) require a plan that includes the localization feature. See Plans and feature gating.

The format follows BCP 47: a two-letter language code, optionally followed by a hyphen and a two-letter country code. Examples used in the wild:

  • en — English (any country)
  • en-US, en-GB, en-CA — English in a specific country
  • fr, fr-FR, fr-CA — French in general, France, Canada
  • de, de-DE, de-AT — German in general, Germany, Austria

The app’s locale matching follows the same fallback rules the browser uses: a customer in fr-CA matches fr-CA first, then fr, then the primary locale.