Internationalization
List the languages you write in and Blogin builds each into its own subtree.
"languages": ["en", "fr"],
"language-config": {
"en": { "title": "My Site" },
"fr": { "title": "Mon Site" }
}
Put each language's content under a directory named for its code:
content/
en/
posts/
2026-07-19-hello.md
fr/
posts/
2026-07-19-hello.md
Each language builds into public/<code>/, with its own pages, listings,
taxonomies, and feeds rooted at /<code>/. The site root gets an index.html
that redirects to the first language. Layouts and assets are shared across
languages, and language-config overrides settings like title per language.
Translations and the switcher#
Two files with the same path in different language trees are treated as
translations, matched by filename rather than slug, so a translated title (and
its slug) still links up. A layout reaches the switcher through languages, a
list of { code, url, current } where url is the translation in that language,
or that language's home page when there is no translation:
%nav.languages
- for languages -> $lang
%a{href: "#{$lang<url>}", class: ($lang<current> ?? 'current' !! '')}= $lang<code>