I18n architecture
Locales, message catalogs, routing, and docs/blog localization.
Sources of truth
| Concern | Location |
|---|---|
| Enabled locales | integrations/next-intl/i18n.config.ts (en-US, pl-PL) |
| App messages | next-intl message JSON (checked by i18n:check) |
| Docs / blog | Fumadocs *.en-US.mdx / *.pl-PL.mdx + meta.<locale>.json (parser: "dot") |
Runtime
[locale]segment on all marketing/app/admin/docs/blog routesproxy.tsnegotiates / redirects locales- Client strings via
useTranslations; RSC viagetTranslations - Docs i18n:
integrations/fumadocs/fumadocs.i18n.ts(fallbackLanguage)
Rules
- Never hard-code user-visible English in admin/app UI
- Keep message keys in sync across locales before merge
- Prefer shared date/number formatting helpers from next-intl