Skip to content

BACK-478 - Web UI i18n: en, ja, zh-CN, zh-TW (split 3/9 of #669)#677

Draft
MrLesk wants to merge 1 commit into
pr669/2-wiki-corefrom
pr669/3-i18n
Draft

BACK-478 - Web UI i18n: en, ja, zh-CN, zh-TW (split 3/9 of #669)#677
MrLesk wants to merge 1 commit into
pr669/2-wiki-corefrom
pr669/3-i18n

Conversation

@MrLesk

@MrLesk MrLesk commented Jun 9, 2026

Copy link
Copy Markdown
Owner

Note

Maintainer-split slice 3/9 of #669. All commits are authored by @kuwork — I only rebased them onto current main and resolved conflicts. Merge with Rebase and merge to keep the per-task commits and original authorship.

Stack

Based on pr669/2-wiki-core (slice 2). Review only the commit unique to this PR. After the previous slice merges, restack with git rebase --onto main pr669/2-wiki-core pr669/3-i18n.

Tasks in this slice

BACK-478 — Web UI i18n (English, Japanese, Chinese Simplified/Traditional)

  • src/web/contexts/I18nContext.tsx: locale state via config (apiClient.fetchConfig())
  • src/web/hooks/useI18n.ts: t dictionary hook
  • src/web/locales/{index,types,en,ja,zh-CN,zh-TW}.ts: registry + full dictionaries for 30+ components
  • All src/web/components/*.tsx: hardcoded strings → t.*
  • BacklogConfig: new locale field persisted to backlog/config.yml

Notes

  • Split adjustment: the original useI18nContext threw when used outside I18nProvider, which broke every main test that renders components directly (the BACK-470 comment tests postdate the fork). Changed to fall back to the English dictionary — no behavior change inside the app, and components without a provider behave exactly as before i18n.
  • Split adjustment: five en.ts values in the milestones section were aligned to main's exact English ("Unassigned tasks", "Edit milestone", No milestones or tasks match "…", "No active unassigned tasks. Completed tasks are hidden.", "No matching unassigned tasks.") so the English dictionary reproduces main's UI verbatim and main's MilestonesPage tests pass unchanged.
  • Single very large but mostly mechanical commit. Key review questions: translation dictionary architecture (recursive TranslationDict type derived from en), and whether a locale config field belongs in config.yml.
  • The wiki-related translation keys reference slice 2 components (hence stack position).
  • Validated at this tip: bun install --frozen-lockfile, bunx tsc --noEmit.

Original combined PR: #669.

Full stack: #675 editor/paste → #676 wiki → #677 i18n → #678 doc editing → #679 search/sidebar → #680 fixes → #681 dates/stats → #682 Gantt → #683 timezone/polish — split from #669, all commits authored by @kuwork.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants