You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
在 #3876 数 de 包引号时撞上的:de.ts 里有两个值用英文风格的 “…” 而不是德语的 „…“,查下去发现它们根本没被翻译 —— 是 en 的英文原文照搬。顺着量了整个 grid.import 已存映射(saved mapping)簇。
实测(main@2937bcf7d,builtInLocales 逐键比对,不是抽样)
5 个键,每个都在 7 / 9 个非 en 包里与 en 逐字节相同:
key
与 en 逐字节相同的包
grid.import.savedMapping
ko, de, fr, es, pt, ru, ar
grid.import.chooseSavedMapping
ko, de, fr, es, pt, ru, ar
grid.import.manualMapping
ko, de, fr, es, pt, ru, ar
grid.import.savedMappingHint
ko, de, fr, es, pt, ru, ar
grid.import.savedMappingPreviewNote
ko, de, fr, es, pt, ru, ar
只有 zh 和 ja 真的译了。合计 35 个值(5 键 × 7 包)在用户界面上是英文。
de 侧原文(packages/i18n/src/locales/de.ts 行 445-450):
445: savedMapping: 'Saved mapping:',
446: chooseSavedMapping: 'Choose a saved mapping…',
447: manualMapping: '— Map columns manually —',
449: savedMappingHint: 'Mapping “{{name}}” applies rename + transforms + type coercion on the server. Column mapping is read-only.',
450: savedMappingPreviewNote: 'The preview shows your source columns; on import, mapping “{{name}}” applies rename, transforms and type coercion on the server.',
在 #3876 数 de 包引号时撞上的:
de.ts里有两个值用英文风格的“…”而不是德语的„…“,查下去发现它们根本没被翻译 —— 是 en 的英文原文照搬。顺着量了整个grid.import已存映射(saved mapping)簇。实测(main@2937bcf7d,
builtInLocales逐键比对,不是抽样)5 个键,每个都在 7 / 9 个非 en 包里与 en 逐字节相同:
grid.import.savedMappinggrid.import.chooseSavedMappinggrid.import.manualMappinggrid.import.savedMappingHintgrid.import.savedMappingPreviewNote只有 zh 和 ja 真的译了。合计 35 个值(5 键 × 7 包)在用户界面上是英文。
de 侧原文(
packages/i18n/src/locales/de.ts行 445-450):对照 zh(证明这不是「刻意不译的术语」):
这不是占位符类的合理不译。同批扫描里
auth.*.emailPlaceholder(name@example.com)、fields.image.counter({{current}} / {{total}})、grid.import.templateFileName({{object}}-import-template)、collaboration.userStatusTitle({{name}} ({{status}}))确实在多包里相同 —— 那些是纯格式/专名,理应相同。grid.import这 5 个是完整的英文句子,其中两句还是多子句的说明文字。为什么门禁看不见
all-locales-key-parity只比键名集合与占位符形状 —— 键在、占位符在,英文原文完美通过。check-i18n-en-drift.mjs只在 en 值变化时要求九包跟随;这些键是落地时就带着英文进的九包,从没有过「变化」事件。check-i18n-call-site-keys.mjs只判 key 能否解析。三道门都是值域盲的,#3876 的正文也是这么写的。修法与建议
savedMappingHint/savedMappingPreviewNote里的引号按各包排印约定落(de →„…“,fr →«…»,zh →“…”,ja →「…」,其余 ASCII ——residue-namespaces-3546.test.tsx701 行已钉住这套约定);副作用:它解释了 #3876 那条不变量为什么不能写成 count(„) == count(“)
#3876 卡片建议钉
count(„) === count(“)。在正确修完的 de 上那条是假的(45 vs 47),多出来的 2 个“正是savedMappingHint/savedMappingPreviewNote这两句英文里的开引号。PR #3918 因此改钉配对本身 + 恒等式count(“) === count(„) + count(”)—— 本单把这两个值译成德语后,那条恒等式依然成立(47 === 47 + 0),不需要回头改钉子。关联:#3876(PR #3918)、#3880(共享 en 值的同族分析)。