AUDIT
Localization
Checkpoints ships in 5 languages. A key that exists in English but not in French doesn't error — it silently falls back, and the product quietly degrades for four users out of five. So the diff runs on every build.
- LOCALES
- 5
- NAMESPACES
- 19
- KEYS PER LOCALE
- 1,959
- MISSING
- 0
Full coverage
Coverage by locale
Every locale is diffed against en, key by key, including nested paths.
es
Español
1,959 / 1,959 KEYS
fr
Français
1,959 / 1,959 KEYS
it
Italiano
1,959 / 1,959 KEYS
pt
Português
1,959 / 1,959 KEYS
By namespace
Missing-key counts per namespace, per locale. Zero everywhere is the target state — and currently the actual state.
| NAMESPACE | KEYS | es | fr | it | pt |
|---|---|---|---|---|---|
| achievements | 79 | — | — | — | — |
| activity | 13 | — | — | — | — |
| admin | 42 | — | — | — | — |
| auth | 83 | — | — | — | — |
| checkpoints | 179 | — | — | — | — |
| common | 29 | — | — | — | — |
| feed | 61 | — | — | — | — |
| game | 162 | — | — | — | — |
| guilds | 213 | — | — | — | — |
| import | 102 | — | — | — | — |
| lists | 241 | — | — | — | — |
| nav | 25 | — | — | — | — |
| notifications | 5 | — | — | — | — |
| onboarding | 132 | — | — | — | — |
| parties | 138 | — | — | — | — |
| profile | 182 | — | — | — | — |
| reviews | 118 | — | — | — | — |
| search | 58 | — | — | — | — |
| settings | 97 | — | — | — | — |
The rules this enforces
Translation coverage is a design-system concern because copy is a component input. A label that overflows in German is a layout bug, not a content bug.
- No user-facing string is hardcoded. Copy goes through
useTranslation("<namespace>")on both platforms. - A key lands in all 5 locale files in the same change. English-only is never the end state of a PR.
- Interpolation and plural suffixes (
_one/_other) instead of string concatenation — word order isn't portable across languages. - Dynamic content is never translated: usernames, game titles, and user-written checkpoint and review text pass through untouched.