Internationalisation

Localisation uses next-intl. Locale is cookie-based (NEXT_LOCALE), with no [locale] segment in the URL, using the browser's Accept-Language as a fallback and en as the default. Eight locales ship: en, es, pt, de, fr, nl, pl, th.

Translations live in messages/<locale>.json, organised by namespace, and components consume them through useTranslations:

const t = useTranslations('app.landing');
return <h1>{t('headline')}</h1>;

The LanguageSwitcher in the header sets the cookie and reloads the page. The full reload is deliberate: it re-runs the server layout so next-intl serves the new locale everywhere. The URL never changes.

Keep all locale files in sync when you add a key. (These docs are an exception. They're authored in English MDX rather than the translation catalogues.)

Next: The App.