Translations and Internationalization

The parent app uses `next-intl` with cookie-based locale resolution and clean URLs without locale prefixes.

Relevant Files

  • i18n/routing.ts
  • i18n/request.ts
  • i18n/navigation.ts
  • messages/*.json

Supported Locales

  • en
  • hi
  • es
  • fr
  • de
  • pt
  • ar
  • zh

How Locale Resolution Works

  1. routing.ts defines locales and sets localePrefix: never.
  2. request.ts checks requestLocale first.
  3. If request locale is missing or invalid, it checks the NEXT_LOCALE cookie.
  4. If neither works, it falls back to en.
  5. Messages are loaded dynamically from src/messages/${locale}.json.

How Navigation Is Wrapped

navigation.ts exports Link, redirect, usePathname, useRouter, and getPathname from createNavigation(routing) so the rest of the app stays aligned with next-intl routing rules.

How to Add or Change Languages

  1. Add the locale to routing.ts.
  2. Create the matching JSON message file.
  3. Update any language switcher UI if it lists locales explicitly.
  4. Verify auth, pricing, invites, and sidebar labels for the new locale.
Paddle checkout overlay screen
Paddle webhook settings page