Skip to content

view.readonlyTooltip 在 8 个语言包里译的是「duplicate to customize」这句已废弃语义 —— 因为它是真译文,任何「值是英文」判据都看不见它 #3625

Description

@yinlianghui

在实施 #3582(console.objectView.systemViewReadonly / expandToPage 八包存英文)时,在相邻命名空间发现的同源缺陷。不在 #3582 的验收项内(那单只修 console.objectView 的两个 key),单独立单。

现象

view.readonlyTooltip 是视图页签上「系统视图」页签的 tooltip,消费点唯一:

packages/plugin-view/src/ViewTabBar.tsx:489
  {view.readonlyReason || viewTabLabel('view.readonlyTooltip', 'System view — defined in code, read-only.')}

十个包在 origin/main(616353a)上的实际值:

包 值 语义
en System view — defined in code, read-only. read-only ✅
zh 系统视图 — 由代码定义,只读。 read-only ✅
ja システムビュー — 複製してカスタマイズしてください。 duplicate to customize ❌
ko 시스템 보기 — 사용자 지정하려면 복제하세요. duplicate to customize ❌
de Systemansicht — zum Anpassen duplizieren. duplicate to customize ❌
fr Vue système — dupliquer pour personnaliser. duplicate to customize ❌
es Vista del sistema — duplique para personalizar. duplicate to customize ❌
pt Exibição do sistema — duplique para personalizar. duplicate to customize ❌
ru Системное представление — скопируйте для настройки. duplicate to customize ❌
ar عرض النظام — انسخ للتخصيص. duplicate to customize ❌

对应行号:en.ts:777 / zh.ts:752 / ja.ts:733 / ko.ts:733 / de.ts:733 / fr.ts:733 / es.ts:738 / pt.ts:733 / ru.ts:733 / ar.ts:733。

为什么这条比 #3582 更难被发现(这才是重点)

#3582 里八个包存的是英文原文,所以有两条判据能抓它:

  1. 值 == en 原文(console.objectView 的 2 个 key 在 8 个语言包里是英文原文,其中 systemViewReadonly 还是与 en 不一致的旧文案(全部门禁皆绿) #3582 的 PR 已把这条写成断言);
  2. 非拉丁包里出现纯 ASCII 英文句子(console.objectView 的 2 个 key 在 8 个语言包里是英文原文,其中 systemViewReadonly 还是与 en 不一致的旧文案(全部门禁皆绿) #3582「建议 2」设想的抽查门禁)。

这一条两条都抓不到。八个包的值是地道的本语言译文 —— ja 是日文、ko 是韩文、ru 是俄文、ar 是阿拉伯文,ASCII 抽查全绿;没有一个等于英文原文,等值判据也全绿;键集合完整,all-locales-key-parity 全绿;key 在 en 里存在,调用点守卫与其棘轮全绿。它们只是译了一句 en 自己已经废弃的旧话。

推论,建议在分诊时一并考虑:#3582 建议 2 的那道 ASCII 门禁即使加了,也看不见这一条。 唯一能表达该不变量的纪律是「en 改文案时,九个译文包必须同批跟改」,而仓里目前没有任何机制表达它 —— 这可能才是这一族缺陷真正缺的那道门禁。

与 #3582 的关系

两处几乎是同一句话(view.readonlyTooltip 与 console.objectView.systemViewReadonly 语义相同,只是一个在页签 tooltip、一个在视图提示),显然是同一次 en 改文案时只更新了 en 侧、九个包漏跟。#3582 修掉了其中露在外面的一半(值是英文,所以被看见了);这一半因为「看起来已经翻译好了」而留下来。

影响面

用户可见:八种语言的视图页签 tooltip 在指引用户走「复制一份来自定义」这条产品已不提供的路径。严重度请分诊裁定,我不自评。

修法建议

八个包按 en 当前的 read-only 语义重译,不要照抄包里那句过期文案。各包词汇现成、无需自创:

#3582 的 PR 刚好为同一句话在同样八个包里落了译文(console.objectView.systemViewReadonly),可直接对齐,保证两处措辞一致。

关联:#3582(同源,已修 console.objectView 两个 key)、#3546(缺 key 存量账,不同类)、#3530 / PR #3547(调用点 key 守卫)。

发现于 #3582 的实施过程,未在该 PR 中修改 —— 越界。

Activity

  1. self-assigned this
    on Aug 7, 2026
  2. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    认领(PM 派发)。


    Generated by Claude Code

  3. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    验收 ACCEPT → PR #3642(session_01GTRjn8xBqp75dk7kFupVRt)。

    已核:八文件各 1 行 +8/−8 严格对称,en/zh 零改动;CI 18 项 0 失败;逆向验证 10 红与预测逐条吻合(de 重合断言的反向红如实分账)。

    裁决记录:

    1. 邻域纪律的精确行使记入方法库:es 用破折号而非 fix(i18n): 八包补上 console.objectView 两个 key 的真译,systemViewReadonly 按 en 当前的 read-only 语义 (#3582) #3627 的冒号 — 冒号是 console.objectView 局部惯例,view 命名空间同类 tooltip(subscribedTooltip)用破折号;邻域按 key 所在命名空间取,不跨命名空间照搬。
    2. de 重合接受:en 区分两 key 只靠破折号落点,多数语言承载不了;「同义即可同文」有 fix(i18n): 八包补上 console.objectView 两个 key 的真译,systemViewReadonly 按 en 当前的 read-only 语义 (#3582) #3627 逐字节对齐先例;钉成事实记录(重合状况变化会浮出)而非为造差异改写 — 对。
    3. 派单词干表错误被修正(es/pt duplic 漏 dupliqu)— 以包内实际旧值为准,正确。
    4. 不立孪生单正确:「en 改文案九包同批跟改」的不变量已两处记录;本 PR 在本 key 上机械化(en 字面量钉)。仓级门禁卡由 PM 立(即将开出,引用本单与 console.objectView 的 2 个 key 在 8 个语言包里是英文原文,其中 systemViewReadonly 还是与 en 不一致的旧文案(全部门禁皆绿) #3582/fix(i18n): 八包补上 console.objectView 两个 key 的真译,systemViewReadonly 按 en 当前的 read-only 语义 (#3582) #3627 的三处记录)。
    5. 口径修正收录:objectui 的控制字符门禁是 scripts/check-control-bytes.mjs(check-nul-bytes 是 objectstack 名字),后续派单直接用本仓名。

    ⚠️ #3546 切片三串行等本 PR 落 main。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions