Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

de 语言包 20 个值把德语开引号 „ 和 ASCII 直引号 " 配成一对(正确配对的只有 21 个),德语用户看到的收尾引号是错的 #3876

Closed

Description

@yinlianghui

在 #3546 切片七回填 empty.interfacePageSourceMissing 时,照抄同族邻键 empty.objectNotFoundDescription 的引号风格,发现 de 包该值写的是 „{{name}}" —— 开引号是德语低九分号 U+201E,收引号是 ASCII 直引号 U+0022。不是孤例。

实测

packages/i18n/src/locales/de.ts,全包扫描:

形态 数量
错配 „…"(U+201E … U+0022) 20
正确配对 „…“(U+201E … U+201C) 21

也就是说这个包里两种写法几乎各占一半,不存在"本包约定就是这样"的解释 —— 21 个值证明约定是 „…“。

错配的 20 个 key:

lookup.createNamed
console.objectView.objectNotFoundDescription
console.objectView.deleteViewConfirm
console.objectView.viewTypeUnavailable
console.objectView.ufShowAllRecords
home.gettingStarted.description
search.resultsCount
search.resultsCountPlural
empty.objectNotFoundDescription
empty.pageNotFoundDescription
empty.dashboardNotFoundDescription
empty.reportNotFoundDescription
navigationSync.addedPage
navigationSync.addedDashboard
navigationSync.removedPage
navigationSync.removedDashboard
navigationSync.renamedPage
navigationSync.renamedDashboard
marketplace.install.localSuccess
preview.empty.notReadyTitle

几个现场(德语用户今天就看到收尾直引号):

empty.pageNotFoundDescription = "Die Seite „{{name}}" wurde nicht gefunden. …"
console.objectView.ufShowAllRecords = "Registerkarte „Alle Datensätze" anzeigen"
search.resultsCount = "{{count}} Ergebnis für „{{query}}""
home.gettingStarted.description = "… wird automatisch unter „Zuletzt geöffnet" angezeigt."

search.resultsCount 尤其明显:结尾是 „{{query}}"",连着两个直引号(一个是错配的收引号,一个是 TS 字符串的结束符,源码里写成 \")。

为什么三道 i18n 门禁都看不见

  • all-locales-key-parity.test.ts 比键名集合与占位符形状,不读引号;
  • check-i18n-call-site-keys.mjs 只判 key 在不在;
  • check-i18n-en-drift.mjs 只在 en 值变化时要求九包跟着改 —— 这些值从落地起就是错的,没有"变化"事件。

建议修法

把 20 个值的收引号从 \" 改成 “。可顺带落一条断言:de 包里 „ 的数量必须等于 “ 的数量(今天是 41 : 21)。同类检查对其他包也成立(fr «/»、zh “/”、ja 「/」),不过其余包实测未见错配。

未在 #3546 切片七里修

切片七的围栏是"只新增 key,⛔ 不改任何既有语言包值"(与在飞的 #3844 / #3875 共用 es/de 文件,避免合并面)。新增的 empty.interfacePageSourceMissing de 值刻意写成正确配对的 „{{name}}“ 而不是照抄邻键的错配形态,并在测试里把这处刻意分歧写明,所以那条断言就是这一单落地时必须回头看的地方。

关联:#3546(切片七)、#3866(同类"取证方法本身出错"的先例)。

Activity

  1. claude commented on Aug 8, 2026

    @claude
    Contributor

    Triage: pm:queue — concrete defect, enumerated key list, mechanical fix plus a proposed pairing assertion; German users see the wrong closing quote today.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 9, 2026
  3. yinlianghui commented on Aug 9, 2026

    @yinlianghui
    ContributorAuthor

    🔒 分诊 + 认领(objectui shard PM 亲跑分诊轮,session session_01GTRjn8xBqp75dk7kFupVRt)

    定级:concrete —— 切片七 dev 立卡带实测(de 包 20 个值把德语开引号 „ 与 ASCII 直引号 " 配对,正确配对仅 21 个),德语用户可见的排印错误;三道 i18n 门禁按设计都看不见(不读引号/只判 key/只在 en 变化时触发)。


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions