i18n overview
Internationalization features in Katura.
Overview
Katura supports 24 languages out of the box β more than any other jewelry platform. Both the admin panel and the customer-facing storefront can be displayed in your customers' preferred language.
Supported languages
| Language | Code | Direction |
|---|---|---|
| English | en | LTR |
| Spanish | es | LTR |
| French | fr | LTR |
| German | de | LTR |
| Italian | it | LTR |
| Portuguese | pt | LTR |
| Dutch | nl | LTR |
| Swedish | sv | LTR |
| Norwegian | no | LTR |
| Danish | da | LTR |
| Polish | pl | LTR |
| Hungarian | hu | LTR |
| Russian | ru | LTR |
| Ukrainian | uk | LTR |
| Turkish | tr | LTR |
| Arabic | ar | RTL |
| Hebrew | he | RTL |
| Hindi | hi | LTR |
| Japanese | ja | LTR |
| Korean | ko | LTR |
| Chinese | zh | LTR |
| Thai | th | LTR |
| Vietnamese | vi | LTR |
| Indonesian | id | LTR |
How language detection works
Katura uses locale-based URL routing. When a customer visits your store:
- The middleware checks the URL for a locale prefix (e.g.,
/fr/products) - If no locale is specified, it detects the browser's preferred language
- The storefront and admin render in the detected language
Changing admin language
Team members can set their preferred admin language in Settings β Profile. The entire admin interface β labels, statuses, actions, navigation β displays in the chosen language.
Tip
Having your admin in your team's native language reduces errors and speeds up order processing, especially for status labels and customer communication.
Right-to-left (RTL) support
Arabic and Hebrew are fully supported with right-to-left text rendering. The layout automatically adjusts navigation, forms, and tables for RTL languages.
SEO & hreflang
Every storefront page emits <link rel="alternate" hreflang="..."> tags for every locale you have enabled, plus an x-default pointing to your primary locale. Google uses these to surface the right language version per searcher. Sitemaps are generated per-locale at /sitemap-{locale}.xml.
Geo-aware locale detection
Beyond the browser's Accept-Language header, Katura uses Vercel's edge geo data to make smarter first-visit guesses. A visitor from Tokyo with an English browser still sees a banner offering ζ₯ζ¬θͺ. The choice is sticky in a cookie so it doesn't nag on every page.
Translator workflow
All UI strings live in JSON files at messages/{locale}.json. The English file is the source of truth β every other locale's file is keyed against it. To add a new translation:
- Translator pulls latest
messages/en.json - Edits
messages/{locale}.jsonfilling in any missing or stale keys - Submits a PR; CI runs
scripts/i18n-check.tswhich fails if keys are missing or unused - After merge, the new strings ship with the next deploy β no extra build step
Per-product translations
Product titles, descriptions, and meta fields can be translated per-locale at/admin/products/[id]/translations. If a translation is missing for a given locale, the storefront falls back to the default (English) value.
