Run a multi-currency European shop
A European shop usually needs to show and charge in several currencies and speak several languages. Cartwright handles both natively: turn on multi-currency to charge in the customer’s selected currency (a Stripe presentment-currency charge with the FX rate snapshotted on the order), and declare your locales in one config line to get per-locale routes, automatic hreflang, and per-entity content translation. VAT is handled by Stripe Tax (EU OSS) or a built-in single rate.
Who it’s for
EU/Nordic merchants selling cross-border who need DKK/EUR/USD and Danish/English/German from day one.
Charge, don’t just display
Multi-currency charges in the customer’s currency and records currency + FX rate on the order for clean receipts, refunds, and accounting.
Languages + hreflang
Add a locale in brand.config; routes and hreflang appear automatically, and products, categories, pages, services, and posts are translatable.
VAT
Stripe Tax for managed multi-country VAT (EU OSS, VAT-ID, invoicing), or the built-in single rate — correct at checkout either way.
Frequently asked
- Does Cartwright actually charge in the customer’s currency?
- Yes — with multi-currency enabled, the Stripe PaymentIntent is created in the customer’s presentment currency with the converted amount, and the order snapshots the currency and FX rate.
- How do I add a language?
- Add the locale to the `locales` array in brand.config.ts. Routing and hreflang update automatically, and the translation admin covers products, categories, pages, services, and blog posts.
- How is EU VAT handled?
- Via Stripe Tax for managed multi-country VAT (EU OSS, VAT-ID, invoicing), or a built-in single rate if you prefer.
Start in one command
npx create-cartwright@latest my-shopSee the docs or compare Cartwright.