Skip to content

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

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

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.

@MrLesk

MrLesk commented Jul 1, 2026

Copy link
Copy Markdown
Owner Author

Alex's Agent: Maintainer cleanup: closing this draft as an archived slice of #669.

This PR is still part of a stacked broad feature bundle and is outside the current project scope. We are not merging this stack.

For future work, please open or link an issue before submitting a PR so the scope can be agreed before implementation. If a small fix from this slice is still desired, please extract it into a fresh PR against main with one narrow, agreed scope and no dependency on the #669 stack.

Future PRs in this area should link an issue first, or open one before implementation so scope can be agreed.

@MrLesk MrLesk closed this Jul 1, 2026
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.

3 participants