Goal
Several status / error messages in the viewer are still hardcoded Chinese. Move them all into viewer/src/lib/i18n.ts so they switch with the language toggle.
Why
UI 99% goes through i18n already, but a handful of strings (mostly inside App.tsx's drag handlers and error fallback) escaped. Easy cleanup.
Scope (what is in)
Out of scope
- Translation polish (rough English is fine if you're not native)
- AGENTS.md / CHANGELOG / docs (those are author content, not UI)
Files likely involved
viewer/src/App.tsx
viewer/src/app/ErrorBoundary.tsx
viewer/src/app/TopBar.tsx
viewer/src/lib/i18n.ts
Acceptance criteria
Estimated effort
~2-3 hours
Hints
useI18n hook is already there and used in many components. Existing keys like topbar.openButton, error.boundaryTitle are good naming examples.
Want to take this?
Comment "I'd like to take this" and I'll confirm within 24h.
Goal
Several status / error messages in the viewer are still hardcoded Chinese. Move them all into
viewer/src/lib/i18n.tsso they switch with the language toggle.Why
UI 99% goes through i18n already, but a handful of strings (mostly inside
App.tsx's drag handlers and error fallback) escaped. Easy cleanup.Scope (what is in)
viewer/src/tree for Chinese characters in.tsx/.tsfiles (excluding example data and i18n.ts itself)i18n.ts'smessages.zh-CNandmessages.en, replace the hardcoded string witht('that.key')Out of scope
Files likely involved
viewer/src/App.tsxviewer/src/app/ErrorBoundary.tsxviewer/src/app/TopBar.tsxviewer/src/lib/i18n.tsAcceptance criteria
git grep -P '[\\u4e00-\\u9fff]' viewer/src/{**/*,*}.{ts,tsx}returns nothing (or only what's clearly data)npm run buildand lintEstimated effort
~2-3 hours
Hints
useI18nhook is already there and used in many components. Existing keys liketopbar.openButton,error.boundaryTitleare good naming examples.Want to take this?
Comment "I'd like to take this" and I'll confirm within 24h.