For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /docs/mobile/i18n.md (or send Accept: text/markdown).
Localize the mobile app
Four shipped locales, a type-checked catalog, and English fallback.
How the catalogs work
The app ships English, German, Spanish, and French catalogs in apps/mobile/src/i18n — one type-checked MobileCatalog per locale, looked up with t(key, vars) through dotted paths and {name} interpolation. A key missing in one locale falls back to its English entry, and pluralized strings select their form through Intl.PluralRules.
Picking the locale
The device locale resolves through Intl APIs at runtime, matches by language prefix, and falls back to English — a pt-BR device sees English because Portuguese is not in MOBILE_LOCALES.
Adding strings and locales
Add every new key to all four catalogs — the shared catalog type fails typecheck when a locale misses one. A fifth locale means extending MobileLocale and MOBILE_LOCALES and writing a complete catalog. Mobile catalogs are separate from the web app's i18n: nothing syncs automatically, so copy that exists on both platforms is translated in both places.
Verification and troubleshooting
Switch the device language through each shipped locale plus an unsupported one, and check a pluralized string like the offline banner's relative times in every catalog. A raw dotted key on screen means the key is missing everywhere, not untranslated in one locale.