Five locales, one codebase
September 18, 2026
The expensive way to ship a second language is to copy the site. The cheap way is to notice that most of a page doesn't change at all.
Localize the field, not the site
Mark a field localized and it stores one value per locale. Everything else — slugs, enum keys, reference wiring — stays single-valued, because translating them would only create work.
Fallbacks do the rest
Ask for a locale and the delivery API walks a chain you configure until it finds a value. A missing French subheading falls back to English rather than rendering an empty block, so a half-finished translation is still a shippable page.
Required is satisfied by the default locale, so a translation can lag without blocking publication.
Validation runs per locale: a length limit applies to each translation separately.
Asking for every locale at once returns the raw maps, which is what translation tooling wants.
This page is the demonstration: switch the language in the header and watch the hero and cards change while the layout does not.