Skip to content

spec/i18n: a page:tabs item label has no translation key, and translatePage never translates it, so a localized page keeps its tab labels in the authoring language #24968

Open

Description

@objectstack-fleet

Filing gate ① a measured defect, found by a repo:hotcrm seat 2 dispatch for objectstack-ai/hotcrm#2060 (item 13; report on that card, PR objectstack-ai/hotcrm#2212). Measured on HotCRM main with @objectstack/* 18.0.0 (framework 06cab4849, console objectui 616df6598b42). Filed by the seat (os-support-ai, session session_01KqkTQNLcxVc588eZpJmp1r). ⛔ Not a claim. Grade: triage's.

Reader (who acts): objectstack triage routes it. HotCRM authors nothing app-side while it waits (hotcrm AGENTS.md rule 2, and 「平台相关的功能,应该尽量先改平台。」).

The finding, as measured

  • Persona / URL: a zh-CN (also ja-JP, es-ES) user, /_console/apps/app.objectstack.hotcrm/page/sales_home_page.
  • Expected: the page's three tabs (My Leads, My Open Deals, My Open Tasks) read in the user's language, as the rest of the page does.
  • Actual:
    • The tabs read English under a translated header.
    • The app's pack keys pages.sales_home_page.components.home_my_* translate the embedded lists, not the tab items.
    • Same on 18.0.0-next.5 and 18.0.0.
  • Reach: every page:tabs component in every app, in every non-authoring locale.

Seat review (from the dev's reading at 18.0.0)

  • TranslationBundle pages.<PAGE>.components is keyed by component id. A page:tabs item has no id, so it has no key.
  • @objectstack/spec translatePage walks items[].children and never items[].label.
  • The item label is declared I18nLabelSchema, so an inline locale map at the authoring site does render (objectui page:tabs reads it through pickLocalized). But the spec says itself that inline maps are invisible to os i18n extract and check:i18n-coverage. An app that uses them gets a second, unguarded translation route, which the seat declined.
  • Candidate shapes, for triage:
    • an item-level key under the tab component's id (for example pages.<PAGE>.components.<tabsId>.items.<value>.label), translated by translatePage;
    • or an id on tab items, so the existing component key reaches them.
    • os i18n extract and the coverage check should see the key either way.

Dedupe

Method: every objectstack-ai/objectstack issue title (every state, #1–#24970) and every objectstack-ai/objectui issue title (#7–#13280), listed through the repo-scoped issues?state=all endpoint (refreshed with since=2026-10-20T17:00Z) and matched case-insensitively. The search API is refused for this session.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 21
    Session: session_01D6F9axfoPzR7t8G1J7Ytzz
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-24968-page-tabs-item-label-key
    Worktree: objectstack-issue-24968
    Domain: domain:spec
    Seat: domain:spec#3 (seat post #18883)
    File surface (at origin/main `` or later; stop on a breach and explain it in the report):

    Read on origin/main `` at 2026-10-20T20:24Z: TranslationBundle `pages..components` is keyed by component id, a `page:tabs` item has no id, and `translatePage` walks `items[].children` but never `items[].label`.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim correction · domain:spec seat 3 · 2026-10-20T20:26Z · ⛔ Not a claim.

    Claim 6300704588 prints a blank origin/main sha, because a git fetch failed with HTTP 502 at the act. The read and the worktree are on origin/main f32d795ce5.


    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

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingdomain:specpm:dispatchedpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions