From 2480bdf27ae13b2bf0554d7a357b4a2262c98fa9 Mon Sep 17 00:00:00 2001 From: Ziya Date: Mon, 31 Aug 2026 17:42:16 +0800 Subject: [PATCH] feat(web): clarify Workspace Write Chinese label (#3345) Co-authored-by: ZiyaZhang <199893125+ZiyaZhang@users.noreply.github.com> --- apps/web/tests/access-confirmation.e2e.ts | 2 +- apps/web/tests/expected/settings-chrome/dialog.expected.md | 4 ++-- apps/web/tests/settings-chrome.e2e.ts | 4 ++-- packages/client/ui-conversation/src/client/locales.ts | 2 +- .../client/ui-conversation/tests/input-bar.client.spec.tsx | 6 +++--- packages/client/ui-permission-presets/README.i18n.yaml | 4 ++-- packages/client/ui-permission-presets/README.md | 2 +- packages/client/ui-permission-presets/README.zh.md | 2 +- packages/client/ui-permission-presets/src/client/locales.ts | 4 ++-- .../tests/browser-plugin.client.spec.ts | 2 +- .../tests/permission-presets-row.client.spec.tsx | 6 +++--- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/apps/web/tests/access-confirmation.e2e.ts b/apps/web/tests/access-confirmation.e2e.ts index e5595c94a8..cd64d98110 100644 --- a/apps/web/tests/access-confirmation.e2e.ts +++ b/apps/web/tests/access-confirmation.e2e.ts @@ -50,7 +50,7 @@ describe('web e2e: Full access confirmation', () => { const access = page.locator('button[aria-label^="访问模式"]').first() await access.waitFor({ timeout: 10_000 }) - expect(await access.getAttribute('aria-label')).toBe('访问模式,当前:可写入工作区') + expect(await access.getAttribute('aria-label')).toBe('访问模式,当前:工作区内修改') await access.click() await page.getByRole('menuitem', { name: '完全权限' }).click() diff --git a/apps/web/tests/expected/settings-chrome/dialog.expected.md b/apps/web/tests/expected/settings-chrome/dialog.expected.md index 9ff9301454..45ad145095 100644 --- a/apps/web/tests/expected/settings-chrome/dialog.expected.md +++ b/apps/web/tests/expected/settings-chrome/dialog.expected.md @@ -18,8 +18,8 @@ - img - text: 关闭 - text: 权限 选择新会话的默认权限模式 - - button "可写入工作区": - - text: 可写入工作区 + - button "工作区内修改": + - text: 工作区内修改 - img - text: 语言 - button "中文": diff --git a/apps/web/tests/settings-chrome.e2e.ts b/apps/web/tests/settings-chrome.e2e.ts index 4b8fd7495f..f86f5c0964 100644 --- a/apps/web/tests/settings-chrome.e2e.ts +++ b/apps/web/tests/settings-chrome.e2e.ts @@ -62,7 +62,7 @@ describe('web e2e: settings modal and General preferences', () => { expect(await trigger.getAttribute('aria-expanded')).toBe('true') // General is active by default; Permission, Language and Appearance are functional. expect(await dialog.getByRole('button', { name: '通用设置' }).getAttribute('aria-current')).toBe('true') - await dialog.getByRole('button', { name: '可写入工作区' }).waitFor({ timeout: 10_000 }) + await dialog.getByRole('button', { name: '工作区内修改' }).waitFor({ timeout: 10_000 }) await expect.poll(() => dialog.getByText('语言', { exact: true }).count(), { timeout: 5_000 }).toBe(1) await expect.poll(() => dialog.getByText('外观', { exact: true }).count(), { timeout: 5_000 }).toBe(1) const openDocument = dialog.getByRole('button', { name: '打开配置文件' }) @@ -150,7 +150,7 @@ describe('web e2e: settings modal and General preferences', () => { await page.getByRole('button', { name: '设置', exact: true }).click() const dialog = page.getByRole('dialog', { name: '设置' }) await dialog.waitFor({ timeout: 10_000 }) - const selector = dialog.getByRole('button', { name: '可写入工作区' }) + const selector = dialog.getByRole('button', { name: '工作区内修改' }) await selector.waitFor({ timeout: 10_000 }) await expect.poll(() => selector.isEnabled(), { timeout: 5_000 }).toBe(true) await selector.click() diff --git a/packages/client/ui-conversation/src/client/locales.ts b/packages/client/ui-conversation/src/client/locales.ts index 0e8ba381f4..296f95b33a 100644 --- a/packages/client/ui-conversation/src/client/locales.ts +++ b/packages/client/ui-conversation/src/client/locales.ts @@ -56,7 +56,7 @@ export const zh = { 'settings.enter.queue': '排队发送', 'settings.enter.steer': '插话发送', 'access.preset.readOnly': '仅可查看', - 'access.preset.workspaceWrite': '可写入工作区', + 'access.preset.workspaceWrite': '工作区内修改', 'access.preset.fullAccess': '完全权限', 'access.confirm.title': '确认启用完全权限?', 'access.confirm.description': '启用完全权限后,智能体将减少确认步骤,并且可以直接执行更多操作,包括敏感操作、文件修改或外部命令。仅建议在你信任当前任务时使用。', diff --git a/packages/client/ui-conversation/tests/input-bar.client.spec.tsx b/packages/client/ui-conversation/tests/input-bar.client.spec.tsx index d616c34a43..94aec70bbf 100644 --- a/packages/client/ui-conversation/tests/input-bar.client.spec.tsx +++ b/packages/client/ui-conversation/tests/input-bar.client.spec.tsx @@ -1335,11 +1335,11 @@ describe('command launcher chrome and control seats', () => { .every(icon => icon.closest('[aria-hidden="true"]') !== null)).toBe(true) fireEvent.click(trigger) const items = view.getAllByRole('menuitem') - expect(items.map(o => o.textContent)).toEqual(['仅可查看', '可写入工作区', '完全权限']) + expect(items.map(o => o.textContent)).toEqual(['仅可查看', '工作区内修改', '完全权限']) fireEvent.click(items[1]!) // Optimistic pick + disable until admission resolves (command stub resolves true). const busy = view.getByLabelText(/^访问模式/) as HTMLButtonElement - expect(busy.textContent).toBe('可写入工作区') + expect(busy.textContent).toBe('工作区内修改') expect(busy.disabled).toBe(true) expect(command).toHaveBeenCalledWith('/permission workspace-write') await act(async () => {}) @@ -1413,7 +1413,7 @@ describe('command launcher chrome and control seats', () => { fireEvent.click(view.getByRole('checkbox')) fireEvent.click(view.getByRole('button', { name: '取消' })) expect(command).not.toHaveBeenCalled() - expect((view.getByLabelText(/^访问模式/) as HTMLButtonElement).textContent).toBe('可写入工作区') + expect((view.getByLabelText(/^访问模式/) as HTMLButtonElement).textContent).toBe('工作区内修改') openConfirmation() expect((view.getByRole('checkbox') as HTMLInputElement).checked).toBe(false) diff --git a/packages/client/ui-permission-presets/README.i18n.yaml b/packages/client/ui-permission-presets/README.i18n.yaml index 44382511cf..5ae75b98f1 100644 --- a/packages/client/ui-permission-presets/README.i18n.yaml +++ b/packages/client/ui-permission-presets/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/ui-permission-presets/README.md -README.md: 6a82ebe45edb7e6055bf4c69a2e90bf21255696c -README.zh.md: bd5588b13cc55d856163ff3eadf04f8059b2f7a9 +README.md: a88c241b8d93228b19d40569f67b4311a550a7c7 +README.zh.md: a20d237f2a67f6f0aa085c3e0784a1e0f25c0c1c diff --git a/packages/client/ui-permission-presets/README.md b/packages/client/ui-permission-presets/README.md index 6a82ebe45e..a88c241b8d 100644 --- a/packages/client/ui-permission-presets/README.md +++ b/packages/client/ui-permission-presets/README.md @@ -29,7 +29,7 @@ Mount this plugin alongside the settings and commands packages; the permission r ### The picker -A pick submits the `/permission ` command line. The argued path (`/permission ` typed directly) still switches directly; the decoration replaces only the bare invocation. The built-in labels are `Read Only`, `Workspace Write`, and `Full access` in English and `仅可查看`, `可写入工作区`, and `完全权限` in Chinese; `custom` is display state, never a target. +A pick submits the `/permission ` command line. The argued path (`/permission ` typed directly) still switches directly; the decoration replaces only the bare invocation. The built-in labels are `Read Only`, `Workspace Write`, and `Full access` in English and `仅可查看`, `工作区内修改`, and `完全权限` in Chinese; `custom` is display state, never a target. ### The Settings row diff --git a/packages/client/ui-permission-presets/README.zh.md b/packages/client/ui-permission-presets/README.zh.md index bd5588b13c..a20d237f2a 100644 --- a/packages/client/ui-permission-presets/README.zh.md +++ b/packages/client/ui-permission-presets/README.zh.md @@ -29,7 +29,7 @@ kind: "package-reference" ### 选择器 -选中即提交 `/permission ` 命令行。带参路径(直接键入 `/permission `)仍直接切换;装饰只替换裸调用。内置标签在英文界面中是 `Read Only`、`Workspace Write` 和 `Full access`,在中文界面中是「仅可查看」「可写入工作区」和「完全权限」;`custom` 只是显示状态,绝非目标。 +选中即提交 `/permission ` 命令行。带参路径(直接键入 `/permission `)仍直接切换;装饰只替换裸调用。内置标签在英文界面中是 `Read Only`、`Workspace Write` 和 `Full access`,在中文界面中是「仅可查看」「工作区内修改」和「完全权限」;`custom` 只是显示状态,绝非目标。 ### 设置行 diff --git a/packages/client/ui-permission-presets/src/client/locales.ts b/packages/client/ui-permission-presets/src/client/locales.ts index 8a1ec2049c..43cd7695b6 100644 --- a/packages/client/ui-permission-presets/src/client/locales.ts +++ b/packages/client/ui-permission-presets/src/client/locales.ts @@ -7,7 +7,7 @@ export const zh = { 'loading': '加载中', 'unavailable': '不可用', 'preset.readOnly': '仅可查看', - 'preset.workspaceWrite': '可写入工作区', + 'preset.workspaceWrite': '工作区内修改', 'preset.fullAccess': '完全权限', 'confirm.title': '确认启用完全权限?', 'confirm.description': '启用完全权限后,新会话将减少确认步骤,并且可以直接执行更多操作,包括敏感操作、文件修改或外部命令。仅建议在你信任后续任务时使用。', @@ -38,7 +38,7 @@ export const en = { /** Simplified Chinese dictionary for the current-session popup gate. */ export const accessZh = { 'preset.readOnly': '仅可查看', - 'preset.workspaceWrite': '可写入工作区', + 'preset.workspaceWrite': '工作区内修改', 'preset.fullAccess': '完全权限', 'confirm.title': '确认启用完全权限?', 'confirm.description': '启用完全权限后,智能体将减少确认步骤,并且可以直接执行更多操作,包括敏感操作、文件修改或外部命令。仅建议在你信任当前任务时使用。', diff --git a/packages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts b/packages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts index 4ad456b47f..e6f9cd39f8 100644 --- a/packages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts +++ b/packages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts @@ -128,7 +128,7 @@ describe('ui-permission browser plugin', () => { }) b.locale.setLocale('zh') const localized = await c.ui.options(proj, new AbortController().signal) - expect(localized.map(option => option.label)).toEqual(['仅可查看', '可写入工作区', '完全权限']) + expect(localized.map(option => option.label)).toEqual(['仅可查看', '工作区内修改', '完全权限']) expect(localized.find(option => option.id === 'danger-full-access')?.confirmation).toEqual({ title: '确认启用完全权限?', description: accessZh['confirm.description'], diff --git a/packages/client/ui-permission-presets/tests/permission-presets-row.client.spec.tsx b/packages/client/ui-permission-presets/tests/permission-presets-row.client.spec.tsx index 13693a4e4d..b083a4074a 100644 --- a/packages/client/ui-permission-presets/tests/permission-presets-row.client.spec.tsx +++ b/packages/client/ui-permission-presets/tests/permission-presets-row.client.spec.tsx @@ -94,8 +94,8 @@ describe('PermissionRow', () => { fireEvent.click(screen.getByRole('menuitem', { name: '仅可查看' })) expect(mutate).not.toHaveBeenCalled() fireEvent.click(button) - fireEvent.click(screen.getByRole('menuitem', { name: '可写入工作区' })) - await screen.findByRole('button', { name: '可写入工作区' }) + fireEvent.click(screen.getByRole('menuitem', { name: '工作区内修改' })) + await screen.findByRole('button', { name: '工作区内修改' }) expect(mutate).toHaveBeenCalledOnce() }) @@ -166,7 +166,7 @@ describe('PermissionRow', () => { describe.resolve(ok({ writable: true, hasDocument: false, namespaces: [view('read-only')] })) const button = await screen.findByRole('button', { name: '仅可查看' }) fireEvent.click(button) - fireEvent.click(screen.getByRole('menuitem', { name: '可写入工作区' })) + fireEvent.click(screen.getByRole('menuitem', { name: '工作区内修改' })) expect((await screen.findByRole('alert')).textContent).toBe('changed elsewhere') }) })