From e9fab03ebea92991b54a78438b07c03523137a1e Mon Sep 17 00:00:00 2001 From: LimLLL Date: Wed, 22 Apr 2026 15:15:29 +0800 Subject: [PATCH 01/30] feat(i18n): Add Vue i18n support for English and Chinese UI - Register vue-i18n in the app and add locale detection with localStorage persistence - Create English and Simplified Chinese locale files organized by feature area - Replace hardcoded UI strings across sidebar, composer, review, skills, and threads - Add a language selector in settings and localize dynamic labels, tooltips, and statuses --- .gitignore | 1 + package.json | 1 + src/App.vue | 111 +++-- src/components/content/AccountMenu.vue | 12 +- src/components/content/ComposerDropdown.vue | 7 +- .../content/ComposerRuntimeDropdown.vue | 15 +- .../content/ComposerSearchDropdown.vue | 10 +- .../content/ComposerSkillPicker.vue | 4 +- src/components/content/QueuedMessages.vue | 6 +- src/components/content/ReviewPane.vue | 102 ++-- src/components/content/SkillCard.vue | 6 +- src/components/content/SkillDetailModal.vue | 14 +- src/components/content/SkillsHub.vue | 56 +-- src/components/content/ThreadComposer.vue | 76 +-- src/components/content/ThreadConversation.vue | 95 ++-- .../content/ThreadMessageTypeMenu.vue | 6 +- .../content/ThreadPendingRequestPanel.vue | 74 +-- src/components/sidebar/SidebarPrimaryNav.vue | 6 +- .../sidebar/SidebarThreadControls.vue | 8 +- src/components/sidebar/SidebarThreadTree.vue | 115 ++--- src/i18n/index.ts | 31 ++ src/i18n/locales/en.ts | 457 ++++++++++++++++++ src/i18n/locales/zh.ts | 456 +++++++++++++++++ src/main.ts | 5 +- 24 files changed, 1336 insertions(+), 338 deletions(-) create mode 100644 src/i18n/index.ts create mode 100644 src/i18n/locales/en.ts create mode 100644 src/i18n/locales/zh.ts diff --git a/.gitignore b/.gitignore index ca9ef4de..9e202931 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ pnpm-lock.yaml package.json DYNAMIC_INSTRUCTIONS.md .omx/ +.idea diff --git a/package.json b/package.json index 0c2ab97f..2fb13bfa 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "firebase": "^12.2.1", "highlight.js": "^11.11.1", "qrcode-terminal": "^0.12.0", + "vue-i18n": "^11.3.2", "ws": "^8.18.3" }, "devDependencies": { diff --git a/src/App.vue b/src/App.vue index 3e0879bb..83738f04 100644 --- a/src/App.vue +++ b/src/App.vue @@ -15,8 +15,8 @@ class="sidebar-search-toggle" type="button" :aria-pressed="isSidebarSearchVisible" - aria-label="Search threads" - title="Search threads" + :aria-label="$t('home.searchThreads')" + :title="$t('home.searchThreads')" @click="toggleSidebarSearch" > @@ -30,14 +30,14 @@ v-model="sidebarSearchQuery" class="sidebar-search-input" type="text" - placeholder="Filter threads..." + :placeholder="$t('home.filterThreads')" @keydown="onSidebarSearchKeydown" />