Symptom
On a zh-CN console, several Setup surfaces show English:
- The org record page's Invite user dialog lists the four membership roles as 所有者 / 管理员 / Delegated Admin / 成员.
- A team record page shows the field label MEMBER COUNT.
Mechanism
These are not missing keys. packages/platform-objects/src/apps/translations/zh-CN.objects.generated.ts carries the key with the English source string as its value. For example:
sys_member.fields.role.options.delegated_admin = "Delegated Admin", and the same value on sys_invitation.fields.role.options.delegated_admin.
sys_team.fields.member_count.label = "Member Count".
A walk of the en and zh-CN object bundles at objectstack 3cf6449389 finds 338 zh-CN strings byte-equal to the English source, and 192 of them are label or options.* values. Some are legitimately untranslated, such as brand and protocol names (Google, GitHub, JWKS). Most are ordinary field labels an admin reads. For example:
sys_session.fields.last_activity_at.label = "Last Activity At"
sys_organization.fields.parent_organization_id.label = "Parent Organization"
sys_invitation.fields.positions.label = "Placement Positions"
sys_two_factor.fields.locked_until.label = "Locked Until"
sys_member._views.mine.label = "My Memberships"
scripts/i18n-coverage-baseline.json records 0 for packages/platform-objects/scripts/i18n-extract.config.ts. So a translated-locale value that is a copy of the source string reads to the coverage ratchet as translated, and nothing flags it.
Reproduction
- Boot the showcase:
objectstack dev --no-seed-admin on a fresh DB, then create the owner through /_console/setup.
- With the console locale
zh, open Setup → 组织 → the org record → 邀请用户, and open the 角色 select. Delegated Admin is listed in English.
- Create a team (
POST /api/v1/auth/organization/create-team) and open its record. The member_count label reads MEMBER COUNT.
Expected
- The user-facing labels and options carry zh-CN values, and the brand and protocol names that should stay in English are declared as such.
- The coverage ratchet can tell a copied source string from a translation, so this state cannot re-accumulate silently.
Symptom
On a zh-CN console, several Setup surfaces show English:
Mechanism
These are not missing keys.
packages/platform-objects/src/apps/translations/zh-CN.objects.generated.tscarries the key with the English source string as its value. For example:sys_member.fields.role.options.delegated_admin="Delegated Admin", and the same value onsys_invitation.fields.role.options.delegated_admin.sys_team.fields.member_count.label="Member Count".A walk of the
enandzh-CNobject bundles at objectstack3cf6449389finds 338 zh-CN strings byte-equal to the English source, and 192 of them arelabeloroptions.*values. Some are legitimately untranslated, such as brand and protocol names (Google,GitHub,JWKS). Most are ordinary field labels an admin reads. For example:sys_session.fields.last_activity_at.label="Last Activity At"sys_organization.fields.parent_organization_id.label="Parent Organization"sys_invitation.fields.positions.label="Placement Positions"sys_two_factor.fields.locked_until.label="Locked Until"sys_member._views.mine.label="My Memberships"scripts/i18n-coverage-baseline.jsonrecords0forpackages/platform-objects/scripts/i18n-extract.config.ts. So a translated-locale value that is a copy of the source string reads to the coverage ratchet as translated, and nothing flags it.Reproduction
objectstack dev --no-seed-adminon a fresh DB, then create the owner through/_console/setup.zh, open Setup → 组织 → the org record → 邀请用户, and open the 角色 select.Delegated Adminis listed in English.POST /api/v1/auth/organization/create-team) and open its record. Themember_countlabel readsMEMBER COUNT.Expected