Modeling Bilingual Content for a Personal Site
A language switcher is not enough: routes, content identity, and missing translations all need explicit rules.
Identity before paths
Two translations should share a stable content identity rather than relying on coincidentally similar slugs. Locale switching, sitemaps, and canonical metadata can then be generated from the content model.
Allow translations to be missing
A bilingual site should not require every language to ship simultaneously. Record available locales explicitly and provide an honest, predictable fallback when one is missing.