Repository navigation
fix(views): zh-CN Leads and Opportunities column headers follow the field labels - #2098
Merged
objectstack-fleet[bot] merged 2 commits intoOct 14, 2026
Merged
Conversation
…umns The All Leads list gave each of its nine columns its own English `label:`, and both Opportunities grids did the same for the Account column. A column label is served verbatim in every locale (the translation schema has no per-column key), so zh-CN showed those headers in English. Without the override the header is the field label, which all four locale packs carry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv
… changeset The lead scoring section said the list views show the rating in a *Score* column. With the All Leads override gone, every list shows the field label, Lead Score (zh-CN 线索评分), so the three locale pages say that. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
This was referenced Oct 14, 2026
This was referenced Oct 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #2094
Clause-②: no
What changed
The All Leads list (
src/sales/views/lead.view.ts) gave all nine of its columns their own Englishlabel:. Both Opportunities grids (src/sales/views/opportunity.view.ts, Open Deals and All Opportunities) did the same for the Account column. A columnlabel:is the spec's "Display label override", and the renderer serves it verbatim in every locale. The translation schema has no per-column key, so nothing could translate these headers. This PR removes all 11 overrides. Each header is now the field's label, which all four locale packs already translate. The other lists already work this way.The 11 overrides removed here were the only column-level
label:s in the app. An enumeration over the fourviewsbarrels finds 11 before this change and 0 after.content/docs/sales/leads{,.zh-Hans,.zh-Hant}.mdxsaid the list views show the rating in a Score column. Without the override, every list shows the field label (Lead Score, zh-CN 线索评分), so those three sentences now say that. This is the only doc text the change made false.Per column (measured,
sales.manager, console on this branch)label:)Five en headers are unchanged. Five (bold) now read exactly the field label. That is the acceptance's second branch: "measured equal to the field labels".
crm_lead.statusisLead Statuson the object, but the en pack carriesStatus, and the console serves the pack's value. So that en header does not change.No column needed a wording its field label cannot carry.
Est. Amountwas the candidate. At the authored 130 px, the grid widens the column to 144 px to fitEstimated Amount. A DOM probe found no header text clipped (scrollWidth == clientWidthon every header's text element) in en-US, es-ES or zh-CN. So no field label moves, no width changes, and no platform gap blocks this card.Measurement (DOM probe, header
textContent, Playwright +/opt/pw-browsers/chromium)Before (
2f3d898d), zh-CN:Name · Company · Email · Status · Score · Source · Need Type · Est. Amount · Owner商机名称 · Account · 阶段 · 金额 · 成交概率 (%) · 预期收入 · 预计成交日期商机名称 · Account · 阶段 · … · 商机负责人After (
bd4f2204), zh-CN:全名 · 公司 · 邮箱 · 状态 · 线索评分 · 线索来源 · 需求类型 · 预计金额 · 线索负责人商机名称 · 所属客户 · 阶段 · 金额 · 成交概率 (%) · 预期收入 · 预计成交日期商机名称 · 所属客户 · 阶段 · … · 商机负责人After, the other packs:
Nombre Completo · Empresa · Correo Electrónico · Estado · Puntuación de Prospecto · Origen del Prospecto · Tipo de Necesidad · Importe Estimado · Propietario氏名 · 会社名 · メール · ステータス · リードスコア · リードソース · ニーズ種別 · 予想金額 · リード所有者Cuentaand ja-JP reads取引先.The card's mechanism, re-measured
label:renders its field's translated label. On the same Opportunities grids, before this change,stage/amount/close_date(no override) already read 阶段 / 金额 / 预计成交日期 next to the EnglishAccount. objectui'splugin-gridObjectGrid.tsxpicks the authored label first, and uses the translated field label only when there is none.@objectstack/spec18.0.0-next.0. Indist/translation.zod-CQy34Ce1.d.ts, the_viewsrecord value is a strict object oflabel,description,emptyStateandbulkActions, with no column slot. objectstackmainb5b1bf72is the same.I18nLabelSchemaalso authorizes an inline locale map. As a one-off experiment, I gave the Est. Amount column the label{ en: 'MAPEN Est', 'zh-CN': 'MAPZH 预计' }and rebuilt. The marker reacheddist/objectstack.json(1 hit). The header still read the field label:预计金额in zh-CN andEstimated Amountin en. I restored the file fromHEADand proved the restore withgit diff HEADempty and the blob hash equal to HEAD's (2493440a). This is reported for the seat to file upstream, and it does not block this card.Verification (head
a16ea2ae)pnpm validate:✓ Validation passed. os-verify-lock reportsVERDICT command-exit 0.pnpm typecheck: exit 0.pnpm lint: exit 0, with18 suggestion(s).pnpm lint:i18n-gate:✓ i18n lint gate: 0 i18n/missing-* issues.pnpm hygiene:✓ source hygiene clean.pnpm hygiene:tokens:✓ source token ratchet clean. The src/sales interaction layer went from ~28,377 to ~28,311 tokens, and the authored total from ~102,599 to ~102,532.pnpm build:✓ Build complete. os-verify-lock reportsVERDICT command-exit 0.pnpm test:Test Files 179 passed (179),Tests 3659 passed | 1 skipped (3660). os-verify-lock reportsVERDICT command-exit 0.Playwright e2e is left to CI.
Acceptance notes (observed, not filed)
crm_lead.fields.status.labelisStatus, whilelead.object.tssaysLead Status. The console serves the pack's value. This was already true before this PR.content/docs/sales/pipeline-management.mdxL49 says All Opportunities "carries an Owner column". That column never had an override, and its header readsOpportunity Ownerin en. This was already true before this PR.os lint's i18n coverage says nothing about a plain-string columnlabel:that has no translation slot.lint:i18n-gateread 0 onmainwith all 11 overrides present. A rule for that would be a new gate, so it is recorded here and not filed.Generated by Claude Code