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

LanguageCodeDirection
EnglishenLTR
SpanishesLTR
FrenchfrLTR
GermandeLTR
ItalianitLTR
PortugueseptLTR
DutchnlLTR
SwedishsvLTR
NorwegiannoLTR
DanishdaLTR
PolishplLTR
HungarianhuLTR
RussianruLTR
UkrainianukLTR
TurkishtrLTR
ArabicarRTL
HebrewheRTL
HindihiLTR
JapanesejaLTR
KoreankoLTR
ChinesezhLTR
ThaithLTR
VietnameseviLTR
IndonesianidLTR

How language detection works

Katura uses locale-based URL routing. When a customer visits your store:

  1. The middleware checks the URL for a locale prefix (e.g., /fr/products)
  2. If no locale is specified, it detects the browser's preferred language
  3. 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:

  1. Translator pulls latest messages/en.json
  2. Edits messages/{locale}.json filling in any missing or stale keys
  3. Submits a PR; CI runs scripts/i18n-check.ts which fails if keys are missing or unused
  4. 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.

Was this article helpful?

Internationalization Overview β€” Global Commerce | K99