Add a language
A new locale is two JSON files plus one config entry. Right-to-left scripts mirror the whole layout automatically.
1. Add the message catalogs
- Frontend:
src/locales/{lang}.json— copyen.jsonand translate the values. - Backend:
Resources/{lang}.json— the server-side strings (email subjects, etc.).
Keys mirror the folder structure (feature.subkey.subsubkey), so a missing key is easy to spot.
2. Register it
In src/i18n.config.ts, import the JSON into resources and add a LANGUAGES entry:
ts
import it from './locales/it.json';
export const LANGUAGES = [
// …
{ code: 'it', name: 'Italiano', dir: 'ltr' }, // autonym in `name`
];supportedLngs is derived from LANGUAGES, so that's the only list to touch. The language picker (top bar + profile) updates automatically.
Right-to-left
For an RTL script, set dir: 'rtl':
ts
{ code: 'he', name: 'עברית', dir: 'rtl' },The shell mirrors automatically — the codebase uses logical CSS properties throughout, so there's no separate RTL stylesheet to maintain. See Theming, i18n & RTL.