i18nlisted
Install: claude install-skill TOMK-CMD/ITERUS-WEB
# i18n — locales, parity, translations
Czech is the primary locale (served at `/`), English at `/en`, German planned at `/de`.
Parity is enforced: `pnpm check:i18n` fails on missing message keys or content files.
## Adding a locale (e.g. `de`)
1. Spec + ADR note (why, scope: which pages first — usually home, services, contact, references).
2. Routing: add the locale to `apps/web/src/i18n/routing.ts` (`locales`, `pathnames` for every
route pair), keep `defaultLocale: 'cs'`, `localePrefix: 'as-needed'`.
3. Messages: copy `messages/en.json` → `messages/de.json`, translate, keep keys identical.
4. Content: create `content/de/` mirroring `content/en/` file by file (same frontmatter keys).
Untranslated pages must not be published half-empty: either translate or exclude the route
from that locale explicitly (routing) so hreflang stays truthful.
5. Metadata: `alternates.languages` gains `de`; `x-default` stays `cs`.
6. Legal pages (privacy, terms): draft, then flag for Tomas's review before publishing.
7. Tests: extend the e2e locale matrix; run `pnpm check:i18n`, `pnpm test:e2e`.
8. Docs: `docs/ARCHITECTURE.md` (locales), `docs/CONTENT-GUIDE.md` (terminology table + de column).
## Translating well
- Translate meaning, not words. Keep the answer-first structure and numbers identical.
- Terminology table in `docs/CONTENT-GUIDE.md` is binding (e.g. "vývoj software na zakázku" ↔
"custom software development"). Extend it when you introduce a new recurring term.
- Keep brand