Translations
Translations live in the messages/ directory and are loaded at request time by next-intl.
This page is the quick reference for where translations live, how they are resolved, and which parts of the app depend on stable translation keys.
Need the workflow?
For the implementation steps to add another language, see Add a Locale.
Current files
messages/en/—system.json,navbar.json,dashboard.json,auth.jsonmessages/es/— same structuremessages/cn/— same structure
How translations are loaded
src/i18n/request.ts resolves the locale and imports the matching message file dynamically.
If the incoming locale is invalid, the app falls back to the default locale from src/i18n/routing.ts.
That fallback behavior helps the UI remain stable even when a locale is missing or malformed.
What depends on translation keys
- dashboard navigation labels
- auth forms and messages
- pricing content
- marketing sections
- footer content
Shared user-facing copy
Translations power both public and authenticated parts of the app, not only the landing page.
Config-driven labels
Many config surfaces point to translation keys, so locale files must stay aligned when copy changes.
Best practice
When editing config-driven content that references translation keys, always update every locale file together.
This avoids broken labels and inconsistent UI across languages.