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

  1. Add the code to APP_LANGUAGES and LANGUAGE_DEFINITIONS in front/application/src/app/core/i18n/language.ts.
  2. Copy front/application/src/assets/i18n/en.json to <lang>.json and translate the values.
  3. Register its Angular locale data in provideI18n() (front/application/src/app/core/i18n/i18n.provider.ts).
  4. Add the flag SVG to front/application/src/assets/images/flags/.
  5. Give @blouppy/ui its strings: a catalogue in front/libs/ui/src/i18n/translations/, added to UI_LOCALES and UI_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() over translateSignal(...), so it follows a language switch; one-shot texts (a toast, a confirmation) use TranslocoService.translate().
  • Dates and amounts use LocalizedDatePipe and LocalizedCurrencyPipe, 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.