Docs

This page isn't translated yet

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

SwitchWhat it doesWhere you configure itGuide
Frontend localesRoutes, links, <html lang> and UI messages per locale, with prefix or domain routinglocales in systhema.config.ts, defined with defineSysthemaLocalesFrontend locales
Content localizationStores content fields per locale in PayloadFollows the same locales; localization.policy decides which fields are localizedContent localization
Admin languagesThe language of the Payload Admin interfaceThe 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.policy decides 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.