Acme.

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.