i18n and locales (6 languages)

Read before editing translations, localized pages or content collections.

Languages and URLs

Key files

Pages

Every src/pages/[lang]/** page must export getStaticPaths() with all active languages, validate lang with isValidLang() and redirect to /en if invalid, and pass lang to BaseLayout and to every component. Components receive the lang prop and use t(lang, 'key').

Translations must be complete

Translation workflow: multilingual-translator agent (mandatory)

For any content translated into several languages (changelog entries, UI strings, static pages, marketing copy, legal text, blog posts) invoke .claude/agents/multilingual-translator.md (Task tool, subagent_type=multilingual-translator). It translates the 6 languages in parallel, keeps terminology consistent and preserves placeholders, formatting and markup. Do not translate sequentially by hand, do not copy-paste translation files without agent validation, do not use general-purpose agents for translation.

Content collections

Adding a language

Follow docs/guides/adding-new-language.md: languages in config.ts → new translations/{lang}.ts → translationMap in utils.ts → lang enum in src/content.config.ts → getStaticPaths() of every [lang] page → src/content/blog/{lang}/ and help/{lang}/ → src/pages/{lang}/rss.xml.ts.

Reference