From 42ee34e34dde76dc49f979077ce7f3390008ca8e Mon Sep 17 00:00:00 2001 From: Xubin Ren <52506698+Re-bin@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:37:49 +0800 Subject: [PATCH] fix(webui): localize skills view tabs --- .../settings/SkillsCatalogSettings.tsx | 17 ++--------------- webui/src/i18n/locales/en/common.json | 3 +++ webui/src/i18n/locales/es/common.json | 3 +++ webui/src/i18n/locales/fr/common.json | 3 +++ webui/src/i18n/locales/id/common.json | 3 +++ webui/src/i18n/locales/ja/common.json | 3 +++ webui/src/i18n/locales/ko/common.json | 3 +++ webui/src/i18n/locales/pt-BR/common.json | 3 +++ webui/src/i18n/locales/vi/common.json | 3 +++ webui/src/i18n/locales/zh-CN/common.json | 3 +++ webui/src/i18n/locales/zh-TW/common.json | 3 +++ webui/src/tests/app-layout.test.tsx | 4 +++- webui/src/tests/i18n.test.tsx | 5 +++++ 13 files changed, 40 insertions(+), 16 deletions(-) diff --git a/webui/src/components/settings/SkillsCatalogSettings.tsx b/webui/src/components/settings/SkillsCatalogSettings.tsx index fb793e5ad..f525f1b61 100644 --- a/webui/src/components/settings/SkillsCatalogSettings.tsx +++ b/webui/src/components/settings/SkillsCatalogSettings.tsx @@ -108,7 +108,7 @@ export function SkillsCatalogSettings({ skills }: { skills: SkillSummary[] }) { aria-selected={view === item} onClick={() => setView(item)} className={cn( - "inline-flex items-center gap-1.5 rounded-[9px] px-3.5 py-1.5 text-[13px] font-medium transition-colors", + "inline-flex items-center rounded-[9px] px-3.5 py-1.5 text-[13px] font-medium transition-colors", view === item ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground", @@ -116,12 +116,7 @@ export function SkillsCatalogSettings({ skills }: { skills: SkillSummary[] }) { > {item === "installed" ? t("settings.skills.installedTab", { defaultValue: "Installed" }) - : ( - <> - - {t("settings.skills.discoverTab", { defaultValue: "Discover" })} - - )} + : t("settings.skills.discoverTab", { defaultValue: "Discover" })} ))} @@ -228,14 +223,6 @@ export function SkillsCatalogSettings({ skills }: { skills: SkillSummary[] }) { ); } -function VercelMark() { - return ( - - - - ); -} - function SkillCatalogRow({ skill, onSelect, diff --git a/webui/src/i18n/locales/en/common.json b/webui/src/i18n/locales/en/common.json index 1e8cc1a7a..177cdaf6c 100644 --- a/webui/src/i18n/locales/en/common.json +++ b/webui/src/i18n/locales/en/common.json @@ -788,6 +788,9 @@ "skills": { "description": "Review the instruction skills this agent can load during a conversation.", "caption": "{{available}} available · {{total}} total", + "views": "Skills views", + "installedTab": "Installed", + "discoverTab": "Discover", "featured": "Agent skills", "empty": "No skills are available.", "sourceWorkspace": "Custom", diff --git a/webui/src/i18n/locales/es/common.json b/webui/src/i18n/locales/es/common.json index d8847971f..2aa1dd23e 100644 --- a/webui/src/i18n/locales/es/common.json +++ b/webui/src/i18n/locales/es/common.json @@ -775,6 +775,9 @@ "skills": { "description": "Revisa las habilidades de instrucciones que este agente puede cargar durante una conversación.", "caption": "{{available}} disponibles · {{total}} en total", + "views": "Vistas de habilidades", + "installedTab": "Instaladas", + "discoverTab": "Descubrir", "featured": "Habilidades del agente", "empty": "No hay habilidades disponibles.", "sourceWorkspace": "Personalizada", diff --git a/webui/src/i18n/locales/fr/common.json b/webui/src/i18n/locales/fr/common.json index d241c6fa4..57540a27c 100644 --- a/webui/src/i18n/locales/fr/common.json +++ b/webui/src/i18n/locales/fr/common.json @@ -774,6 +774,9 @@ "skills": { "description": "Consultez les compétences d’instruction que cet agent peut charger pendant une conversation.", "caption": "{{available}} disponibles · {{total}} au total", + "views": "Vues des compétences", + "installedTab": "Installées", + "discoverTab": "Découvrir", "featured": "Compétences agent", "empty": "Aucune compétence disponible.", "sourceWorkspace": "Personnalisée", diff --git a/webui/src/i18n/locales/id/common.json b/webui/src/i18n/locales/id/common.json index 49b06fc00..3d0f02c03 100644 --- a/webui/src/i18n/locales/id/common.json +++ b/webui/src/i18n/locales/id/common.json @@ -774,6 +774,9 @@ "skills": { "description": "Tinjau skill instruksi yang dapat dimuat agent ini selama percakapan.", "caption": "{{available}} tersedia · {{total}} total", + "views": "Tampilan skill", + "installedTab": "Terpasang", + "discoverTab": "Temukan", "featured": "Skill agent", "empty": "Tidak ada skill yang tersedia.", "sourceWorkspace": "Kustom", diff --git a/webui/src/i18n/locales/ja/common.json b/webui/src/i18n/locales/ja/common.json index b85e9c225..270a58848 100644 --- a/webui/src/i18n/locales/ja/common.json +++ b/webui/src/i18n/locales/ja/common.json @@ -774,6 +774,9 @@ "skills": { "description": "このエージェントが会話中に読み込める指示スキルを確認します。", "caption": "{{available}} 利用可能 · 合計 {{total}}", + "views": "スキル表示", + "installedTab": "インストール済み", + "discoverTab": "見つける", "featured": "エージェントスキル", "empty": "利用可能なスキルはありません。", "sourceWorkspace": "カスタム", diff --git a/webui/src/i18n/locales/ko/common.json b/webui/src/i18n/locales/ko/common.json index fa8159d0b..2e321e934 100644 --- a/webui/src/i18n/locales/ko/common.json +++ b/webui/src/i18n/locales/ko/common.json @@ -774,6 +774,9 @@ "skills": { "description": "이 에이전트가 대화 중에 불러올 수 있는 지시 스킬을 확인합니다.", "caption": "{{available}}개 사용 가능 · 총 {{total}}개", + "views": "스킬 보기", + "installedTab": "설치됨", + "discoverTab": "탐색", "featured": "에이전트 스킬", "empty": "사용 가능한 스킬이 없습니다.", "sourceWorkspace": "사용자 지정", diff --git a/webui/src/i18n/locales/pt-BR/common.json b/webui/src/i18n/locales/pt-BR/common.json index e3bac6f03..d5ce8ade6 100644 --- a/webui/src/i18n/locales/pt-BR/common.json +++ b/webui/src/i18n/locales/pt-BR/common.json @@ -788,6 +788,9 @@ "skills": { "description": "Revise as skills de instrução que este agente pode carregar durante uma conversa.", "caption": "{{available}} disponíveis · {{total}} no total", + "views": "Visualizações de skills", + "installedTab": "Instaladas", + "discoverTab": "Descobrir", "featured": "Skills do agente", "empty": "Nenhuma skill disponível.", "sourceWorkspace": "Personalizada", diff --git a/webui/src/i18n/locales/vi/common.json b/webui/src/i18n/locales/vi/common.json index 5ae45f6f7..08db17946 100644 --- a/webui/src/i18n/locales/vi/common.json +++ b/webui/src/i18n/locales/vi/common.json @@ -774,6 +774,9 @@ "skills": { "description": "Xem các kỹ năng chỉ dẫn mà agent này có thể tải trong cuộc trò chuyện.", "caption": "{{available}} khả dụng · tổng {{total}}", + "views": "Chế độ xem kỹ năng", + "installedTab": "Đã cài đặt", + "discoverTab": "Khám phá", "featured": "Kỹ năng agent", "empty": "Không có kỹ năng nào khả dụng.", "sourceWorkspace": "Tùy chỉnh", diff --git a/webui/src/i18n/locales/zh-CN/common.json b/webui/src/i18n/locales/zh-CN/common.json index 385f27aae..137bf0512 100644 --- a/webui/src/i18n/locales/zh-CN/common.json +++ b/webui/src/i18n/locales/zh-CN/common.json @@ -788,6 +788,9 @@ "skills": { "description": "查看此 agent 在对话中可以加载的指令技能。", "caption": "{{available}} 个可用 · 共 {{total}} 个", + "views": "技能视图", + "installedTab": "已安装", + "discoverTab": "发现", "featured": "Agent 技能", "empty": "暂无可用技能。", "sourceWorkspace": "自定义", diff --git a/webui/src/i18n/locales/zh-TW/common.json b/webui/src/i18n/locales/zh-TW/common.json index 2052e8ce2..bc8ae966c 100644 --- a/webui/src/i18n/locales/zh-TW/common.json +++ b/webui/src/i18n/locales/zh-TW/common.json @@ -774,6 +774,9 @@ "skills": { "description": "檢閱此 Agent 可在對話期間載入的指令技能。", "caption": "{{available}} 個可用 · 共 {{total}} 個", + "views": "技能檢視", + "installedTab": "已安裝", + "discoverTab": "探索", "featured": "Agent 技能", "empty": "目前沒有可用的技能。", "sourceWorkspace": "自訂", diff --git a/webui/src/tests/app-layout.test.tsx b/webui/src/tests/app-layout.test.tsx index a6d4971af..99754d938 100644 --- a/webui/src/tests/app-layout.test.tsx +++ b/webui/src/tests/app-layout.test.tsx @@ -664,7 +664,9 @@ describe("App layout", () => { await waitFor(() => expect(connectSpy).toHaveBeenCalled()); const sidebar = screen.getByRole("navigation", { name: "Sidebar navigation" }); fireEvent.click(within(sidebar).getByRole("button", { name: "Skills" })); - fireEvent.click(await screen.findByRole("tab", { name: "Discover" })); + const discoverTab = await screen.findByRole("tab", { name: "Discover" }); + expect(discoverTab.querySelector("svg")).toBeNull(); + fireEvent.click(discoverTab); expect(await screen.findByRole("heading", { name: "Trending today" })).toBeInTheDocument(); expect(screen.getByText("find-skills")).toBeInTheDocument(); expect(screen.getByText(/14,481 installs \/ 24h/)).toBeInTheDocument(); diff --git a/webui/src/tests/i18n.test.tsx b/webui/src/tests/i18n.test.tsx index c00c5b72a..880dba082 100644 --- a/webui/src/tests/i18n.test.tsx +++ b/webui/src/tests/i18n.test.tsx @@ -75,6 +75,9 @@ const LOCALIZED_SETTINGS_COPY_KEYS = [ "settings.apps.description", "settings.apps.caption", "settings.apps.restartRequired", + "settings.skills.views", + "settings.skills.installedTab", + "settings.skills.discoverTab", "settings.nanobotFeatures.disable", "settings.nanobotFeatures.ready", "settings.nanobotFeatures.missingDependency", @@ -437,6 +440,8 @@ describe("webui i18n", () => { expect(settings.byok.tabs.webSearch).toBe("网页搜索"); expect(settings.overview.webSearch).toBe("网页搜索"); expect(settings.overview.workspace).toBe("工作区"); + expect(settings.skills.installedTab).toBe("已安装"); + expect(settings.skills.discoverTab).toBe("发现"); }); it("keeps Brazilian Portuguese settings overview copy localized", () => {