Hi — I read CLAUDE.md's "External PRs — REFUSE" section and understand the policy. Before spending your time on a PR that might be auto-closed, I wanted to ask first.
What I built
A minimal Chinese i18n layer for the UI:
- Small in-house i18n module at
ui/src/i18n/ (LanguageProvider + useT/useI18n, ~80 lines, no third-party dep). English is the dictionary source-of-truth; missing keys fall through to English at runtime.
- Default locale stays English. A language picker in Settings lets users switch to 中文; choice is persisted to
localStorage (alice.lang) and restored on next launch. Switch is immediate, no reload.
- ~50 UI files migrated (pages / sidebars / dialogs / Toast / ChatInput / ChatMessage / workspace Sidebar). Brand terms (OpenAlice, Alice, Trading as Git, MCP) kept English.
- Dev-only deep surfaces (DevPage internals, LogsPage, SimulatorPage, AutomationFlowSection / WebhookSection) left English — only their page headers translated.
Boundary touch — zero
- No backend /
src/ / services/uta/ / packages/ changes. UI-only.
- Logger output, tool descriptions (
src/tool/*), and Zod schemas stay English by design — translating tool descriptions would degrade AI tool-call accuracy.
- No migrations, no broker/UTA/trading-domain code touched.
Verification
cd ui && npx tsc -b clean
npx tsc --noEmit (Alice src) clean
pnpm test --project ui --run matches master baseline (29 failed / 29 passed — same pre-existing localStorage.clear failures; no new failures)
My questions
- Given the policy is rooted in broker-credential safety, would a strictly-UI i18n PR (no
src/, no services/, no packages/ changes) be acceptable as an exception?
- If not, is there interest in turning this into a satellite repo / extension (per the README's ecosystem model)?
- If neither — totally fine, I'll keep it on my fork for personal use.
Branch on my fork (for reference, no action expected from you on it):
https://github.com/jxdwinter/OpenAlice/tree/feat/i18n-foundation
Thanks for considering, and either way thanks for OpenAlice — the project is great.
Hi — I read CLAUDE.md's "External PRs — REFUSE" section and understand the policy. Before spending your time on a PR that might be auto-closed, I wanted to ask first.
What I built
A minimal Chinese i18n layer for the UI:
ui/src/i18n/(LanguageProvider +useT/useI18n, ~80 lines, no third-party dep). English is the dictionary source-of-truth; missing keys fall through to English at runtime.localStorage(alice.lang) and restored on next launch. Switch is immediate, no reload.Boundary touch — zero
src//services/uta//packages/changes. UI-only.src/tool/*), and Zod schemas stay English by design — translating tool descriptions would degrade AI tool-call accuracy.Verification
cd ui && npx tsc -bcleannpx tsc --noEmit(Alice src) cleanpnpm test --project ui --runmatches master baseline (29 failed / 29 passed — same pre-existinglocalStorage.clearfailures; no new failures)My questions
src/, noservices/, nopackages/changes) be acceptable as an exception?Branch on my fork (for reference, no action expected from you on it):
https://github.com/jxdwinter/OpenAlice/tree/feat/i18n-foundation
Thanks for considering, and either way thanks for OpenAlice — the project is great.