Multilingual sites

Configure languages with one content directory per language:

default_language = "en"

[languages.en]
label = "English"
content_dir = "."

[languages.fr]
label = "Français"
content_dir = "fr"

With this layout, about.typ and fr/about.typ are treated as translations of the same page. The default language keeps root URLs like about.html; other languages use their language code as a URL prefix, such as fr/about.html.

Use page metadata when translations move or need different slugs:

#set document(title: [À propos])

#metadata((
  translation_key: "about",
  slug: "a-propos",
)) <website-metadata>

#title()

When more than one language is configured, the bundled themes show a language picker. Local navigation links are shown only for the current language; external links stay global.