Skip to content

Languages

The CMS is multilingual at its core. Every page, blog post, menu item, product, and widget variant can have translations. This page covers the languages list — the set of languages your site supports. The two companion pages cover the per-language content: URL Translations for slug mapping and Translations for runtime UI strings.

Open Settings → Languages. You see the list of configured languages.

Languages list with language name and ISO code

Columns

ColumnPurpose
LanguageHuman label, e.g. Deutsch, English, Français.
ISO CodeTwo-letter code (ISO 639-1), e.g. de, en, fr. Used in URLs and in the content model.

The main (default) language is usually the first row. It does not get a URL prefix — pages live under /about rather than /en/about. Every other language gets the ISO code as a path prefix: /de/about, /fr/about.

1. Add a language

Click Add language in the top right.

Add language modal with name and ISO code
FieldPurpose
LanguageThe display name as editors see it. Locale-specific: write Deutsch, not German.
ISO CodeTwo-letter code. Use the standard ISO 639-1 code for compatibility with browsers and hreflang tags.

Click Save. The new language appears in the content forms (page editor, blog editor, menu editor) with its own tab.

The first language is the default

Changing which row is the main language is not a one-click operation — existing content references depend on the ID. If you need to switch the default language after go-live, export content, re-assign base IDs, and re-import. Plan the main language on day one.

2. Edit a language

Click the pencil Edit icon. You can change the display name and the ISO code. Changing the ISO code breaks every URL under that language prefix — avoid it once the site is live.

3. Delete a language

Click the trash Delete icon. A confirmation modal asks twice.

Orphaned translations

Deleting a language does not delete the content records that used its ISO code. Page variants, menu-item translations, and product translations that reference the deleted language remain in the database but are no longer reachable from the UI. Re-add the language with the same ISO code to see them again. To truly remove, delete the variant rows first, then delete the language.

Hreflang and fallbacks

The frontend renders <link rel="alternate" hreflang="xx" /> tags based on the language table. Each page's existing translations are listed as alternates for SEO.

If a page does not have a translation for a requested language, the frontend falls back to the main language. The URL stays prefixed (/de/about still works), but the content is the default language.

Where language data lives

Content typePattern
Pagespages_custom with base_id + language_short.
Blog postsblog_articles with base_id + language_short.
Menu itemsmenueditor_items with base_id + language_short.
Products (native shop)s_products with language variants.
Translations (runtime)language_translations.
URL slugslanguages_url_translations.

The base_id joins the translations together; language_short is the ISO code.

Common issues

The language tab is missing in the page editor. Add the language in Languages first; the tab is rendered from that list.

Hreflang tags are missing in the HTML. The page has no translations — hreflang only renders when a second language variant exists.

Frontend shows "Deutsch" as de not as a flag. Flags are not bundled. Use the ISO code in the template and let the theme provide the icon.

See also