Translations, locales and theming
Built-in locales, per-tenant translation overrides and how keys resolve, plus what can be themed today.
Locales#
The interface ships in English, Arabic, German, Spanish, French and Portuguese (en ar de es fr pt); Arabic
renders right-to-left. A user’s locale is detected from the browser, stored as a preference, and can be changed
from the user menu. Dates, numbers and currencies follow the locale.
Tenant translations#
Any interface string can be overridden per tenant and locale, and new keys added for your own pages:
- Setup → Platform → Translations (
CUSTOMIZE_APPLICATION) edits rows of theui-translationscollection:locale,key,value. - Resolution order at render time: tenant override → locale bundle → English bundle → the inline default.
{{param}}placeholders interpolate exactly as in the built-in bundles.- Changes are broadcast to every pod and reach users on their next app load; the first 2 000 rows are loaded with the app bootstrap.
Metadata labels (collection and field display names) are edited on the metadata itself, not as translations.
Theme#
Users choose light, dark or system from the user menu; the choice is stored in the browser.
Tenant-level branding — logo, primary colour, favicon — is defined in the app’s bootstrap contract but is not yet configurable from the console; today only the application name is derived from the tenant. A custom domain gives the tenant its own hostname (Tenants).