system
400.wtf

400.wtf / system / docs · docs/ADR/0013-bilingual-routing-and-content.md

ADR-0013 — Bilingual routing: PT-BR default, EN first-class

Status: Accepted (implemented 2026-10-10, DS-0)

Context

Portuguese is the site’s primary language, and English must be equally complete.

Decision

  • Astro i18n with prefixDefaultLocale: false: PT-BR at /, EN under /en/.
  • Paths are localized per page (/creditos/ ↔ /en/credits/) through a single route map (apps/site/src/i18n/routes.ts). Every page declares its alternates, which drive hreflang (+ x-default → PT) and the DS LocaleSwitch.
  • The locale contract (Locale, htmlLang, localeNames, t() for the DS’s own strings) lives in @400/ds. Page copy never does: components take it via props/slots.
  • Content that exists in one language only is served with the correct lang and labeled as such, never machine-translated silently.

Consequences

  • Artifact write-ups are EN-only until the site phase (S-1) adds PT versions. A CI check for one-locale-only entries lands with that content model.
  • /system/* specimens are English-chrome and noindex (internal tooling for now). Their specimens show both languages.
  • Astro’s sitemap pairs alternates only by identical paths, so localized slugs rely on the in-page hreflang links.