Mobile Starter Kit

Languages and localization

Keep interface, native permissions, notifications, legal pages, and store copy aligned.

English and Spanish already work across the app. The starter uses i18next, typed resources, locale-aware formatting, and a persisted language preference.

Add a language

Add [language] to this product. Read agent-skills/add-i18n.md first. Translate
every visible key, native permission string, notification variant, legal page,
and store-facing copy. Use locale-aware numbers, dates, and plurals. Test text
expansion, Dynamic Type, forms, errors, paywalls, and screen-reader pronunciation.

The files that matter

  • src/i18n/resources.ts: supported languages and app strings.
  • src/i18n/index.ts: initialization and preference behavior.
  • locales/en.json and locales/es.json: native app name and permission copy.
  • legal-site: public privacy, terms, support, accessibility, and deletion pages.
  • backend push/email copy: content delivered when the app is not rendering it.

Rules that prevent awkward translations

  • Do not build sentences by joining English fragments.
  • Use interpolation for values and Intl for numbers, dates, and plurals.
  • Store machine values, not already-formatted strings.
  • Test long words, multiline actions, keyboard overlap, and the largest practical text size.
  • For RTL, use logical start/end alignment and test a clean reinstall because native RTL state can persist.
  • Localize store screenshots and metadata separately; in-app translation does not update App Store Connect or Play Console.

Verification prompt

Search route and component source for hard-coded visible strings. Walk every
primary, empty, error, permission-denied, purchase, and deletion path in each
language. Report anything untranslated or clipped before calling it complete.

On this page