Multilingual sites
The three independent switches (frontend locales, content localization, Admin languages) and where to configure each.
On this page
A multilingual Systhema site is built from independent switches. Turn on only what the site needs: a site can serve several languages from one CMS language, or keep the Admin in English while content is translated.
The three switchesLink to this section
| Switch | What it does | Where you configure it | Guide |
|---|---|---|---|
| Frontend locales | Routes, links, <html lang> and UI messages per locale, with prefix or domain routing | locales in systhema.config.ts, defined with defineSysthemaLocales | Frontend locales |
| Content localization | Stores content fields per locale in Payload | Follows the same locales; localization.policy decides which fields are localized | Content localization |
| Admin languages | The language of the Payload Admin interface | The translations plugin option of withSysthema() | Admin translations |
systhema.config.ts is the one source of truth for locales. Payload projects project that value into content localization, so the frontend and CMS can share the same supported locales. Retain locales: systhemaConfig.locales in the Payload plugin options. Admin languages are separate: they control the editing interface, not the content.
Two more content switchesLink to this section
- Field policy.
localization.policydecides which fields are per-locale and which are shared. See Field policy. - Per-locale publishing.
localization.localizeStatus, on by default with locales, lets one locale be published while another stays a draft. See Per-locale publishing.
Turning locales onLink to this section
On a Payload project, systhema setup locales writes the locale contract into systhema.config.ts and runs the locale migration; see systhema setup. A site that already has content needs the reviewed data migration in Localizing an existing site.