Languages
The application ships in English and French, switched at runtime with Transloco: the active language is a JSON file fetched by the browser, so a new locale needs no back-end change.
Adding a locale
- Add the code to
APP_LANGUAGESandLANGUAGE_DEFINITIONSinfront/application/src/app/core/i18n/language.ts. - Copy
front/application/src/assets/i18n/en.jsonto<lang>.jsonand translate the values. - Register its Angular locale data in
provideI18n()(front/application/src/app/core/i18n/i18n.provider.ts). - Add the flag SVG to
front/application/src/assets/images/flags/. - Give
@blouppy/uiits strings: a catalogue infront/libs/ui/src/i18n/translations/, added toUI_LOCALESandUI_TRANSLATIONS.
The language selector in My account → Preferences picks it up.
Rules for new text
- No user-facing string is hard-coded: templates use the pipe
(
{{ 'workspace.team' | transloco }}). - In TypeScript, a list of labels is a
computed()overtranslateSignal(...), so it follows a language switch; one-shot texts (a toast, a confirmation) useTranslocoService.translate(). - Dates and amounts use
LocalizedDatePipeandLocalizedCurrencyPipe, which follow the switch — Angular's own pipes keep the language the app started in.
The landing page and the documentation site are prerendered static sites and are not covered by this setup.
Time zones
The language and the theme are per device, kept in the browser. The time zone is the
one preference the server stores (UserSettings, in the Users domain), because the server
has to honour it — quiet hours for notifications, for instance.