Repository navigation
Conversation
JeffC0628
marked this pull request as ready for review
October 11, 2026 04:57
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
The app's interface was hardcoded in English, with no way to use it in another language. This adds interface language switching to the Expo app (web, iOS, Android) with nine locales: English, Simplified Chinese, Traditional Chinese, Japanese, Korean, Spanish, Brazilian Portuguese, French, and German.
apps/mobile/src/i18n/sets up i18next and react-i18next with one JSON catalog per locale. English is the source and fallback. Keys are semantic, such asnav.chatormail.noMatch.zh-TW/zh-HK/zh-MOuse Traditional Chinese, otherzhtags use Simplified Chinese, andpt-*uses Brazilian Portuguese.<html lang>on web.Intlwith the active locale instead ofen-US.i18n/glossary.tsrather than repeated in each catalog.New dependencies, at Expo SDK 54 versions:
expo-localization,i18next,react-i18next,@react-native-async-storage/async-storage.Verification
Run locally on Windows 11 with Node 24 and pnpm 11.19.0.
pnpm lint: passes on a clean LF checkout of this branch. In a Windows clone withcore.autocrlf=true, Biome reports format errors for unchanged files checked out with CRLF (the issue addressed by chore: check text files out with LF so Windows clones pass lint #175). The changed files pass Biome in place.pnpm typecheck: the roottsc --noEmitand theapps/mobiletypecheck both pass. I ran the two halves directly because the script's nestedpnpmcall is not on PATH in this shell.pnpm test: 482 pass, 2 fail, 3 skipped. Both failures are Windows environment issues outside the app:worker recovery preserves downloads when metadata cannot be inspectedfails withEPERMonsymlink. It fails the same way on unmodifiedmain.fixture lifecycle releases its server when temporary profile creation failsfailed under full-suite load and passed both times when run alone.apps/mobile/test/locale.test.tscovers locale tag mapping, checks that every catalog has the same keys and{{placeholder}}names as English, and checks that dates follow the locale.relative-date.test.tscovers localized relative times.pnpm build:server,pnpm build:web,pnpm build:ios,pnpm build:android, andpnpm --dir apps/worker typecheckpass.pnpm dev:demo(sample workspace): with a Chinese system locale, the app opened in Simplified Chinese. Choosing 日本語 updated every visible label without a reload, set<html lang="ja">, and was kept after reloading. Product names stayed unchanged.Screenshots:
Integration limits
details.tsx, the command hint, output toggle, and file messages incomputer-workspace.tsx, the queue labels and client errors inchat.tsx, and a few notes inagent-ui.tsx.