The phone app ships in 9 languages (en, es, fr, de, it, pt, ja, ko, zh). If yours isn't there, you can add it — no app-building, no hardware, and there's a test that tells you the moment you've missed a key.
What: add one new locale to the translation catalog.
Start here:
phone-app/src/i18n/translations.ts — one big object keyed by locale. Copy the en block, add your locale key (e.g. hi, ar, ru, nl, pl, tr, id, vi), and translate every string value. Keep the keys identical — only the values change.
phone-app/src/i18n/index.ts already picks the device locale automatically and falls back to en, so once your block exists it's live for anyone on that locale.
The safety net:
phone-app/src/__tests__/i18n_catalog.test.ts enforces that every locale has exactly the same keys as en. Run cd phone-app && npx jest i18n_catalog and it will name any key you missed or added by mistake. Green = complete.
- RTL languages (Arabic, Hebrew, Farsi) are very welcome. If you hit a layout snag, note it in the PR and translate the strings anyway — the text catalog is the contribution; layout polish can follow separately.
Done means: your locale block is complete (catalog test green), npx tsc --noEmit is clean, and the strings read naturally to a native speaker (machine translation is a fine starting point, but give it a human pass). Sign your commits (git commit -s) — CI checks DCO.
No hardware, no Python — just the phone app.
The phone app ships in 9 languages (en, es, fr, de, it, pt, ja, ko, zh). If yours isn't there, you can add it — no app-building, no hardware, and there's a test that tells you the moment you've missed a key.
What: add one new locale to the translation catalog.
Start here:
phone-app/src/i18n/translations.ts— one big object keyed by locale. Copy theenblock, add your locale key (e.g.hi,ar,ru,nl,pl,tr,id,vi), and translate every string value. Keep the keys identical — only the values change.phone-app/src/i18n/index.tsalready picks the device locale automatically and falls back toen, so once your block exists it's live for anyone on that locale.The safety net:
phone-app/src/__tests__/i18n_catalog.test.tsenforces that every locale has exactly the same keys asen. Runcd phone-app && npx jest i18n_catalogand it will name any key you missed or added by mistake. Green = complete.Done means: your locale block is complete (catalog test green),
npx tsc --noEmitis clean, and the strings read naturally to a native speaker (machine translation is a fine starting point, but give it a human pass). Sign your commits (git commit -s) — CI checks DCO.No hardware, no Python — just the phone app.