Filed from the #3880 dispatch (PR #5971). Unassigned, and deliberately not a re-file of #3880's de half — the shape it described no longer exists, and what replaced it is a different decision.
What changed under the card
#3880 recorded a two-key de typo: common.loadingWird geladen... against detail.loadingLaden..., both with an ASCII ellipsis, and its 2026-08-09 triage queued exactly those two values while fencing off "every U+2026 variant" as #3878's territory.
#3878 then landed (PR #4378) and converged all ten packs on U+2026. Both of those keys are named in that pass's own census — CONVERGED_KEYS in packages/i18n/src/__tests__/ellipsis-glyph-3878.test.ts — and there is now no ASCII ... in any value of any pack (that test gates it repo-wide).
The side effect nobody re-measured: the ASCII group and the U+2026 group merged. The en value Loading… was 8 keys; it is now 10, and the two keys #3880 named are inside it. So the card's fence ("fix the ASCII pair, leave the U+2026 variants alone") no longer partitions anything — the pair is U+2026 variants now.
Measured on main @ 2aff580b5
Every key whose en value is byte-identically Loading…, grouped by flattening all ten packs and comparing exact values:
| key | de | ko | ar |
|---|
lookup.loading | Wird geladen… | 로딩 중… | جارٍ التحميل… |
common.loading | Wird geladen… | 로딩 중… | جاري التحميل… |
fields.recipient.loading | Wird geladen… | 불러오는 중… | جارٍ التحميل… |
grid.import.historyLoading | Wird geladen… | 불러오는 중… | جارٍ التحميل… |
grid.bulk.loading | Wird geladen… | 불러오는 중… | جارٍ التحميل… |
detail.loading | Laden… | 로딩 중… | جاري التحميل… |
report.loading | Laden… | 로딩 중… | جارٍ التحميل… |
dashboard.loading | Wird geladen… | 로딩 중… | جارٍ التحميل… |
auth.device.loading | Lade… | 로딩 중… | جارٍ التحميل… |
approvalsInbox.loadingMore | Lädt… | 불러오는 중… | جارٍ التحميل… |
Tallies:
- de — four spellings:
Wird geladen… ×6 · Laden… ×2 · Lade… ×1 · Lädt… ×1 - ko — two:
로딩 중… ×6 · 불러오는 중… ×4 - ar — two:
جارٍ التحميل… ×8 · جاري التحميل… ×2 (a diacritic difference — جارٍ vs جاري — on common.loading and detail.loading, which may be a third, separate class) - es, fr, pt, ru, ja, zh: unanimous ×10
Why this was not fixed under #3880
Fixing only detail.loading, the key the card named, would leave report.loading — the identical German spelling at an equally same-context site — untouched. That is an arbitrary half-pass over a group the 2026-08-09 adjudication never saw.
And the argument that settles #3880's Done group cleanly does not transfer here. There, all four call sites were the same dialog-footer button and all nine other packs were unanimous, so a 3:1 majority vote was safe. Here six packs are unanimous but three split three different ways, which is much weaker evidence of a typo, and at least one member has a plausible genuine context:
approvalsInbox.loadingMore — the key name says "loading more" (a continuation load, not an initial one) even though its en value is plain Loading…. de Lädt… and ko 불러오는 중… may be deliberate for that. Whether the en value is the real defect here — an initial-load string reused for a continuation — is worth deciding before touching any translation.auth.device.loading — de Lade… (first person) is a distinct register from Wird geladen… (passive) and may be intentional on a device-pairing screen.
That is exactly the trap #3880 exists to record: 58% of shared en strings in this repo are translated differently per key on purpose, so a sweep is the wrong default. This one needs a decision per member, not a majority vote.
Suggested disposition
Triage as one decision covering the whole 10-key group, in this order:
- Decide whether
approvalsInbox.loadingMore's en value should stay Loading… or become its own string (Loading more…). If it changes, it leaves this group and check-i18n-en-drift.mjs will ask the nine packs to follow. - Decide whether
auth.device.loading's register is intentional. - Only then converge the remainder — de, ko and ar — on their majority.
Doing 3 before 1 and 2 bakes in whatever the answer turns out to be.
Related
Filed from the #3880 dispatch (PR #5971). Unassigned, and deliberately not a re-file of #3880's de half — the shape it described no longer exists, and what replaced it is a different decision.
What changed under the card
#3880 recorded a two-key de typo:
common.loadingWird geladen...againstdetail.loadingLaden..., both with an ASCII ellipsis, and its 2026-08-09 triage queued exactly those two values while fencing off "every U+2026 variant" as #3878's territory.#3878 then landed (PR #4378) and converged all ten packs on U+2026. Both of those keys are named in that pass's own census —
CONVERGED_KEYSinpackages/i18n/src/__tests__/ellipsis-glyph-3878.test.ts— and there is now no ASCII...in any value of any pack (that test gates it repo-wide).The side effect nobody re-measured: the ASCII group and the U+2026 group merged. The en value
Loading…was 8 keys; it is now 10, and the two keys #3880 named are inside it. So the card's fence ("fix the ASCII pair, leave the U+2026 variants alone") no longer partitions anything — the pair is U+2026 variants now.Measured on
main@2aff580b5Every key whose
envalue is byte-identicallyLoading…, grouped by flattening all ten packs and comparing exact values:lookup.loadingcommon.loadingfields.recipient.loadinggrid.import.historyLoadinggrid.bulk.loadingdetail.loadingreport.loadingdashboard.loadingauth.device.loadingapprovalsInbox.loadingMoreTallies:
Wird geladen…×6 ·Laden…×2 ·Lade…×1 ·Lädt…×1로딩 중…×6 ·불러오는 중…×4جارٍ التحميل…×8 ·جاري التحميل…×2 (a diacritic difference — جارٍ vs جاري — oncommon.loadinganddetail.loading, which may be a third, separate class)Why this was not fixed under #3880
Fixing only
detail.loading, the key the card named, would leavereport.loading— the identical German spelling at an equally same-context site — untouched. That is an arbitrary half-pass over a group the 2026-08-09 adjudication never saw.And the argument that settles #3880's
Donegroup cleanly does not transfer here. There, all four call sites were the same dialog-footer button and all nine other packs were unanimous, so a 3:1 majority vote was safe. Here six packs are unanimous but three split three different ways, which is much weaker evidence of a typo, and at least one member has a plausible genuine context:approvalsInbox.loadingMore— the key name says "loading more" (a continuation load, not an initial one) even though itsenvalue is plainLoading…. deLädt…and ko불러오는 중…may be deliberate for that. Whether theenvalue is the real defect here — an initial-load string reused for a continuation — is worth deciding before touching any translation.auth.device.loading— deLade…(first person) is a distinct register fromWird geladen…(passive) and may be intentional on a device-pairing screen.That is exactly the trap #3880 exists to record: 58% of shared
enstrings in this repo are translated differently per key on purpose, so a sweep is the wrong default. This one needs a decision per member, not a majority vote.Suggested disposition
Triage as one decision covering the whole 10-key group, in this order:
approvalsInbox.loadingMore'senvalue should stayLoading…or become its own string (Loading more…). If it changes, it leaves this group andcheck-i18n-en-drift.mjswill ask the nine packs to follow.auth.device.loading's register is intentional.Doing 3 before 1 and 2 bakes in whatever the answer turns out to be.
Related
Listoat all fourDonesites (#3880) #5971 — the [finding] 「同一 en 字符串必须同一译文」不能做成门禁:281 组共享 en 值里 164 组至少有一个包刻意分开译 —— 记下分母,并点出其中两组像是笔误 #3880 dispatch, which delivered the esDonehalf and reported this half's premise as falsified.