#3546 从切片二起有一条落值纪律:en 字符串已在别处逐字节存在时,复用邻键的既有译文,不另造 —— 否则同一句英文在同一种语言里会有两个说法。切片七给 common.done / common.record / common.retry / dashboard.loading / detail.add / organization.invitations.status.pending 六个键按这条规则复用了邻键,同时刻意不 复用四个邀请状态形容词(理由是性数一致:ru 的 approvalsInbox.statusRejected 是阳性 Отклонён 配「请求」,而「приглашение」是中性要 Отклонено)。
顺手把这条规则的分母 量了出来,结论是:它永远不能变成一道门禁 。
实测(十包全量)
项
数
被 ≥2 个 key 共用的 en 字符串
281 组
其中至少一个包把它们译成两种以上
164 组
也就是 58% 的共享 en 值在某个语言里是分开译的。抽样看,绝大多数是正当的 :
Design in Studio @ topbar.designInStudio / perm.facet.designInStudioHint / console.ai.designBuiltApp —— zh 把第三个译成 进入 Studio 继续完善(agent 刚建好应用后的"继续完善"),切片六已在 PR fix(i18n): 回填 perm + home 两命名空间 14 个缺失语言 key,十包补齐(#3546 切片六) #3868 里立此存照;
Clear @ 5 个 key —— ja 的 grid.bulkClear 是 選択解除(清除选择 )而其余是 クリア;
Save @ 8 个 key —— form.saveRecord 各包都带宾语(レコードを保存 / Datensatz speichern);
{{count}} records @ 4 个 key —— ru 的 lookup.recordCount 是「名词: {{count}}」而其余是「{{count}} 名词」;
Delete @ 11 个 key —— ru 的 layout.activityFeed.typeDelete 是名词 Удаление(活动流的事件类型)而其余是动词 Удалить。
所以一道"同 en 必同译"的门禁会产生 164 个假红。 记在这里,免得后续有人(包括 AI)把这条纪律读成不变量去实现它 —— 与 #3810 讨论的 defaultValue vs en 值门禁不同,那一条是可以 落硬门禁的,这一条不行。选择只能一次次在 PR 里做,而 #3546 各切片测试文件里的 REUSED 清单就是这些选择唯一被记录的地方。
其中两组看起来确实是笔误(可单独修)
Done @ view.done / form.fullscreen.done / grid.bulk.done —— es 分别是 Listo / Listo / Hecho 。三处都是"完成/收工"按钮,没有语境差别。(切片七的 common.done 取了 Listo,2:1 的多数派。)
Loading... @ common.loading / detail.loading —— de 分别是 Wird geladen... / Laden... 。同一个字符串、同样没有语境差别。顺带:Loading…(U+2026 版,8 个 key)在 de 里有 Wird geladen… / Laden… / Lädt… 三种,在 ko 里有 로딩 중… / 불러오는 중… 两种 —— 见 [finding] en 包 32 个值用 ASCII "..." 结尾、113 个用 U+2026 "…" —— 同一屏上省略号两种字形,且九包各自跟着抄 #3878 的字形分歧。
这两组是"改一个值就完事"的量级,但都属改既有语言包值 ,与在飞的 #3844 / #3875 (es)有文件相交风险,所以未在 #3546 切片七里动。
关联:#3546 (切片七,发现路径)、#3810 (可以落门禁的那一类)、#3878 (省略号字形)、#3844 / #3875 (在飞的既有值修正)。
#3546 从切片二起有一条落值纪律:en 字符串已在别处逐字节存在时,复用邻键的既有译文,不另造 —— 否则同一句英文在同一种语言里会有两个说法。切片七给
common.done/common.record/common.retry/dashboard.loading/detail.add/organization.invitations.status.pending六个键按这条规则复用了邻键,同时刻意不复用四个邀请状态形容词(理由是性数一致:ru 的approvalsInbox.statusRejected是阳性Отклонён配「请求」,而「приглашение」是中性要Отклонено)。顺手把这条规则的分母量了出来,结论是:它永远不能变成一道门禁。
实测(十包全量)
也就是 58% 的共享 en 值在某个语言里是分开译的。抽样看,绝大多数是正当的:
Design in Studio@topbar.designInStudio/perm.facet.designInStudioHint/console.ai.designBuiltApp—— zh 把第三个译成进入 Studio 继续完善(agent 刚建好应用后的"继续完善"),切片六已在 PR fix(i18n): 回填 perm + home 两命名空间 14 个缺失语言 key,十包补齐(#3546 切片六) #3868 里立此存照;Clear@ 5 个 key —— ja 的grid.bulkClear是選択解除(清除选择)而其余是クリア;Save@ 8 个 key ——form.saveRecord各包都带宾语(レコードを保存/Datensatz speichern);{{count}} records@ 4 个 key —— ru 的lookup.recordCount是「名词: {{count}}」而其余是「{{count}} 名词」;Delete@ 11 个 key —— ru 的layout.activityFeed.typeDelete是名词Удаление(活动流的事件类型)而其余是动词Удалить。所以一道"同 en 必同译"的门禁会产生 164 个假红。 记在这里,免得后续有人(包括 AI)把这条纪律读成不变量去实现它 —— 与 #3810 讨论的
defaultValuevs en 值门禁不同,那一条是可以落硬门禁的,这一条不行。选择只能一次次在 PR 里做,而 #3546 各切片测试文件里的REUSED清单就是这些选择唯一被记录的地方。其中两组看起来确实是笔误(可单独修)
Done@view.done/form.fullscreen.done/grid.bulk.done—— es 分别是Listo/Listo/Hecho。三处都是"完成/收工"按钮,没有语境差别。(切片七的common.done取了Listo,2:1 的多数派。)Loading...@common.loading/detail.loading—— de 分别是Wird geladen.../Laden...。同一个字符串、同样没有语境差别。顺带:Loading…(U+2026 版,8 个 key)在 de 里有Wird geladen…/Laden…/Lädt…三种,在 ko 里有로딩 중…/불러오는 중…两种 —— 见 [finding] en 包 32 个值用 ASCII "..." 结尾、113 个用 U+2026 "…" —— 同一屏上省略号两种字形,且九包各自跟着抄 #3878 的字形分歧。这两组是"改一个值就完事"的量级,但都属改既有语言包值,与在飞的 #3844 / #3875(es)有文件相交风险,所以未在 #3546 切片七里动。
关联:#3546(切片七,发现路径)、#3810(可以落门禁的那一类)、#3878(省略号字形)、#3844 / #3875(在飞的既有值修正)。