From aaaad33e617f2f0bfbd7f32a00c6d12345037533 Mon Sep 17 00:00:00 2001 From: Chen <57979394+hsingjui@users.noreply.github.com> Date: Sat, 10 Jan 2026 22:07:22 +0800 Subject: [PATCH] feat: add i18n support and enhance session UI (#50) --- web/src/App.tsx | 12 +- .../AssistantChat/ComposerButtons.tsx | 23 +- .../AssistantChat/HappyComposer.tsx | 8 +- .../components/AssistantChat/HappyThread.tsx | 12 +- .../components/AssistantChat/StatusBar.tsx | 28 ++- web/src/components/CliOutputBlock.tsx | 26 +- web/src/components/CodeBlock.tsx | 4 +- web/src/components/DiffView.tsx | 8 +- web/src/components/InstallPrompt.tsx | 18 +- web/src/components/LanguageSwitcher.tsx | 136 +++++++++++ web/src/components/LoadingState.tsx | 8 +- web/src/components/LoginPrompt.tsx | 58 +++-- .../components/NewSession/ActionButtons.tsx | 9 +- .../components/NewSession/AgentSelector.tsx | 5 +- .../NewSession/DirectorySection.tsx | 9 +- .../components/NewSession/MachineSelector.tsx | 9 +- .../NewSession/SessionTypeSelector.tsx | 15 +- web/src/components/NewSession/YoloToggle.tsx | 10 +- web/src/components/OfflineBanner.tsx | 4 +- web/src/components/RenameSessionDialog.tsx | 13 +- web/src/components/SessionActionMenu.tsx | 10 +- web/src/components/SessionHeader.tsx | 36 ++- web/src/components/SessionList.tsx | 50 ++-- web/src/components/Spinner.tsx | 4 +- web/src/components/SyncingBanner.tsx | 4 +- .../ToolCard/AskUserQuestionFooter.tsx | 30 +-- .../components/ToolCard/PermissionFooter.tsx | 46 ++-- web/src/components/ToolCard/ToolCard.tsx | 10 +- web/src/components/ui/ConfirmDialog.tsx | 12 +- web/src/lib/i18n-context.tsx | 54 +++++ web/src/lib/locales/en.ts | 224 +++++++++++++++++ web/src/lib/locales/index.ts | 2 + web/src/lib/locales/zh-CN.ts | 226 ++++++++++++++++++ web/src/lib/use-translation.ts | 12 + web/src/main.tsx | 11 +- web/src/router.tsx | 24 +- 36 files changed, 960 insertions(+), 210 deletions(-) create mode 100644 web/src/components/LanguageSwitcher.tsx create mode 100644 web/src/lib/i18n-context.tsx create mode 100644 web/src/lib/locales/en.ts create mode 100644 web/src/lib/locales/index.ts create mode 100644 web/src/lib/locales/zh-CN.ts create mode 100644 web/src/lib/use-translation.ts diff --git a/web/src/App.tsx b/web/src/App.tsx index dfdd9903..9f835120 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -14,6 +14,7 @@ import { queryKeys } from '@/lib/query-keys' import { AppContextProvider } from '@/lib/app-context' import { fetchLatestMessages } from '@/lib/message-window-store' import { useAppGoBack } from '@/hooks/useAppGoBack' +import { useTranslation } from '@/lib/use-translation' import { LoginPrompt } from '@/components/LoginPrompt' import { InstallPrompt } from '@/components/InstallPrompt' import { OfflineBanner } from '@/components/OfflineBanner' @@ -34,6 +35,7 @@ export function App() { } function AppInner() { + const { t } = useTranslation() const { serverUrl, baseUrl, setServerUrl, clearServerUrl } = useServerUrl() const { authSource, isLoading: isAuthSourceLoading, setAccessToken } = useAuthSource(baseUrl) const { token, api, isLoading: isAuthLoading, error: authError, needsBinding, bind } = useAuth(authSource, baseUrl) @@ -223,7 +225,7 @@ function AppInner() { if (isAuthSourceLoading) { return (