Translations

ReferenceMessage filesLocale consistency

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.json
  • messages/es/ — same structure
  • messages/cn/ — same structure
How loading works

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.