已合并
fix(web): 清除中文界面残留硬编码英文与内部术语(Issue #98) #149
fix(web): 清除中文界面残留硬编码英文与内部术语(Issue #98) #149
已合并
hugoxk创建于 9月19日
hugoxk
9月19日

What type of PR is this?

/kind bug


What does this PR do / why do we need it:

修复 Issue #98:中文界面残留硬编码英文与内部技术术语(Unauthorized 提示、M1 Skill 召回、Git Head 等)。

问题分析(基于最新 upstream/main fcd9690 逐项核实):

Issue 报告的四类问题中,两类已在 main 上被 5be7934(streamline local access token onboarding)修复——401 Unauthorized Toast 已路由到「连接设置」弹窗(setError 对 isAuthFailure 提前返回)、令牌说明段落已重写为双语;cgroupDelegated / noNewPrivileges 仅存在于 runner /health 响应 JSON,API 只透传 state/version,从不出现在 Web UI。本 PR 修复其余三类真实残留问题:

1. 内部术语(M1 Skill 召回 / Git Head):

  • 真实出处在 packages/skill/src/web.tsx(scoped 设置的 Skill 库选择器)与 apps/web/src/SkillManager.tsx:874(库卡片)。
  • settings.skillLibrariesPickerHint:删除 "M1 skill recall / M1 Skill 召回" 内部流水线名称 → "选择此范围可使用的 Skill 库"。
  • settings.skillLibraryHead / skillLibrary.head:git "Head {hash}" 徽章 → "最新版本 {id}"(en+zh 双语)。
  • zh settings.skillLibraryLimit "召回上限" → "Skill 数量上限"(en "Limit" → "Skill limit")。

2. 运行错误白话化:

  • run-failure.ts 原输出 [rate-limited] 429 Too Many Requests 式内部 token + 底层原文。
  • 现在 6 个 RunFailureCode(rate-limited / semantic-error / server-error / timeout / transport-error / unauthorized)各渲染一条本地化白话原因 + 可行恢复动作(en+zh 新增 runFailure.* 键),原始报错保留在 · 分隔符之后供诊断;无分类的失败保持原文(旧记录兼容)。

3. 硬编码英文("部分字符串未进入翻译目录而是硬编码在组件中"):

  • IdeaTreeExplorer / IdeaTreeCanvas / IdeaTreeView:约 40 处硬编码英文(空态提示、13 个字段标签、Hypothesis/Insight/Result/Prune reason 标题、头部与查找栏、画布提示、加载/保存错误、revision/nodes 统计行)全部迁入目录(en+zh 新增 ideaTree.* 键);needs_retry 等裸状态枚举经共享 ideaTreeStatusLabel(IdeaResearchLabels.ts,沿用既有 ideaResearch 状态模式)渲染为本地化词;node.searchStatus(active/pruned)同样经 ideaTreeSearchStatusLabel + ideaTree.search.* 键本地化,避免「搜索」标签旁出现裸英文 token。
  • 其余零散硬编码:App.tsx(代理设置加载、Idea Tree 保存失败)、RunTimeline(回放截断 ×2、留存策略事件移除、Run ${status} 回退)、ScientificArtifacts(标注保存错误,以及预览兜底 ×3——"Loading JSON content…" 新增 artifact.loadingJson;两处 "Binary artifact: use the version content endpoint to inspect it." 复用既有 artifact.binaryNote 文案,顺带消除内部 endpoint 术语)、UsagePage(Run 标签 / 独立调用)、api/artifacts(WebPage 内容 404/加载错误,走 translateActive)、ReviewerPanel(来源核验 aria-label)——均改为目录键。
  • App.tsx setError:useCallback 依赖补上 t,修复运行时切换语言后 Toast 标题仍回放旧语言的问题(issue 截图中 "Request error" 出现在中文界面的成因之一)。

回归测试(8 个新增用例):I18n.test.tsx(术语清除断言 + 触及键 zh-CN 完整性 + 状态词本地化)、RunFailure.test.tsx(新格式 + 无分类回退 + zh-CN 全覆盖)、IdeaTreeCanvas.test.tsx(旧版浏览器面板跟随读者语言);SkillManager.test.tsx 的 /Head version/ 断言同步更新。


Which issue(s) this PR fixes:

Fixes #98


Test Plan and Test result:What scenarios were tested, and what were the verification results(Function, performance, reliability, etc.):

验证提交:356c5e4(16 files, +387/-76,单 commit,基于最新 upstream/main fcd9690;review 意见的 searchStatus / ArtifactModal 兜底文案修复已 amend 进同一提交)

  • Web 单元测试:794 passed / 0 failed / 0 skipped(786 存量 + 8 新增回归,含新格式 run-failure、双语渲染断言)
  • skill 包测试:2 passed / 0 failed(消费被改文案键的 packages/skill/src/web.tsx 无需代码改动)
  • Web typecheck:通过,0 错误;vite build:通过
  • pnpm architecture:check:通过(275 个包源文件边界检查)
  • pnpm ci:catalog:check:通过(UT host=9 / guest=1 目录完整)
  • pnpm ci:ut 层在 CodeArts(Linux runner)上将随 MR 正常执行 ut:host + st。
  • E2E:本 PR 仅改 UI 文案与错误格式化,无行为变更;触及字符串的既有 e2e 断言已核查(e2e-auth.spec.ts / journey-local-token-onboarding.spec.ts 断言的 Unauthorized 缺席行为不变;gateway-token-recovery.spec.ts 属 legacy 隔离区不在 mocked 子集内)。

Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)

likedislike
Pull Request已成功合入, 合并人@openJiuwen-bot
(感谢 hugoxk 的贡献)
Hhugoxk
9月19日 关联了issue:[Bug]: 中文界面残留硬编码英文与内部技术术语(Unauthorized 提示、M1 Skill 召回、Git Head 等)
atomgit-bot
atomgit-bot
9月19日 评论:

变更摘要

本 PR 修复 Issue #98,清理中文界面残留的硬编码英文与内部技术术语,属于纯文案与错误格式化层面的国际化清理。核心改动集中在三方面:将 Skill 库选择器与库卡片中的内部流水线名称("M1 Skill 召回")和 git 术语("Head {hash}")替换为面向用户的表述;把 formatRunFailure 从输出 [rate-limited] 429 Too Many Requests 式内部 token 改为按 6 个 RunFailureCode 渲染本地化白话原因加恢复动作、原始报错保留在 · 之后;并将 IdeaTreeExplorer / IdeaTreeCanvas / IdeaTreeView 等组件中约 40 处硬编码英文字符串迁入 apps/web/src/i18n/messages.ts 的 en / zh-CN 目录。同时新增 ideaTreeStatusLabel 使裸状态枚举渲染为本地化词,并为 setError 的 useCallback 补上 t 依赖。

主要改动

  • 内部术语清除: settings.skillLibrariesPickerHint 去掉 "M1 skill recall / M1 Skill 召回",settings.skillLibraryHead 与 skillLibrary.head 由 "Head {hash}" 改为 "最新版本 {id}" / "Latest version {id}",settings.skillLibraryLimit 由 "召回上限" 改为 "Skill 数量上限"。
  • 运行失败白话化: run-failure.ts 新增 FAILURE_MESSAGE_KEYS 映射 6 个 RunFailureCode 到 runFailure.* 键,formatRunFailure 改为输出本地化原因与恢复动作、再以 · 拼接原始报错,无分类时回退为原文。
  • Idea Tree 文案迁入目录: IdeaTreeExplorer、IdeaTreeCanvas、IdeaTreeView 中的空态提示、13 个字段标签、Hypothesis/Insight/Result/Prune reason 标题、画布提示、加载/保存错误与统计行等改用 ideaTree.* 目录键,IdeaTreeCanvas 的 Depth/Score 改为带参数的 ideaTree.canvas.depth / depthScore。
  • 状态枚举本地化: 新增 ideaTreeStatusLabel(IdeaResearchLabels.ts)映射 pending/running/done/needs_retry/failed 到 ideaTree.status.*,替代此前直接渲染裸枚举或 status.replace("_", " ") 的做法。
  • 零散硬编码与依赖修正: App.tsx、RunTimeline、ScientificArtifacts、UsagePage、api/artifacts、ReviewerPanel 的硬编码英文改为目录键,且 App.tsx 的 setError 依赖数组补入 t,使切换语言后 Toast 标题不再回放旧语言。
likedislike
不准确?
atomgit-bot
atomgit-bot
9月19日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
openJiuwen-bot成员
9月19日 评论:

欢迎来到 openJiuwen 社区

Hey @hugoxk , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。

likedislike
OopenJiuwen-bot成员
9月19日 添加了label:openJiuwen-cla/yes
此处折叠了44条消息 查看更多
OopenJiuwen-bot成员
9月20日 合入了pull request
openJiuwen-bot成员
9月20日 评论:

✅ 自动合并完成(由 @wang_cheng_zhao 的 /merge 评论触发)。

PR !149 已以 rebase 方式合并到 main:3cb3570..73015b2(1 个提交)

GitCode 的审批规则尚未满足(审批人:hong-ye-zhou,wang_cheng_zhao,yi-zhang95),已按 CODEOWNERS 授权强制合入。

likedislike
openJiuwen-bot成员
9月20日 评论:

✅ 流水线 36ea961e21414051955efcc2da6539fb 执行成功。

可在 https://gitcode.com/openJiuwen/sciencediscovery/pull/149/check 查看完整构建日志。

在 PR 评论中发送 rerun 可重新触发 CI 流水线。

任务名称子任务状态详情
代码检查SCA(开源合规)PASSED点此跳转
Anti-poison(防投毒)PASSED点此跳转
CodeCheck(静态检查)PASSED点此跳转
Blacklist(禁用词)PASSED点此跳转
UThost tierPASSED公开日志
guest tier (QEMU TCG sandbox)PASSED公开日志
ST-PASSED公开日志
Binaryx86_64 debug packagePASSEDbinary · SHA256SUMS
aarch64 debug packagePASSEDbinary · SHA256SUMS
likedislike
OopenJiuwen-bot成员
9月20日 添加了label:ci-successful
OopenJiuwen-bot成员
9月20日 删除了label:ci-running