Overview
Two different things need translating, and they’re handled separately because they belong to different people. Your content — product names, descriptions, category names — is written by whoever runs the store. Spree stores a version of each field per language. The interface — button labels, error messages, email wording — is written by Spree, and is already translated into dozens of languages by the community.Which languages a region gets is decided by its Market. A market sets the default locale alongside the currency, so a visitor from France lands on French prices and French copy without choosing anything.
Translating content
Every translatable record keeps one row per language, so a product genuinely has a French name rather than a French name pasted over the English one.What can be translated
Note that slugs are translated too. A French page can live at
/produits/sac-spree rather than at the English slug with French words on it — which is what search engines actually reward. See Slugs.
Reading translated content
Ask for a locale and you get that language back. Nothing else about the request changes:Responses vary by locale, so if you cache them, include the locale in the cache key. Spree sets
Vary headers for you, which is enough for a CDN but not for a hand-rolled in-memory cache.Writing translations
Merchants translate in the dashboard, switching locale on the record they’re editing. For bulk work — handing a catalogue to a translation agency — export to CSV, translate, and import it back. Translations can also be written through the Admin API, which is what you’d use to sync from an external translation service:Translating the interface
Spree’s own strings — everything in the dashboard and in transactional emails — come from a community-maintained project covering 40+ languages.See the supported locales in the Spree I18n repository. Contributions are welcome if yours is incomplete.
Related
- Markets — which locale and currency a region gets
- Slugs — localized URLs
- Custom Fields — translating your own fields
- Localization — the locale, currency and country headers

