Skip to content

feat(i18n): translate system account & messaging surfaces (zh-CN/ja-JP/es-ES)#2906

Merged
os-zhuang merged 2 commits into
mainfrom
claude/sys-tables-account-i18n-07d2b2
Jul 14, 2026
Merged

feat(i18n): translate system account & messaging surfaces (zh-CN/ja-JP/es-ES)#2906
os-zhuang merged 2 commits into
mainfrom
claude/sys-tables-account-i18n-07d2b2

Conversation

@baozhoutao

@baozhoutao baozhoutao commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Localizes the sys_user / sys_organization / sys_business_unit / sys_team list & detail pages, the account:profile_card page and the sys_inbox_message mine view (user request). Framework side of a two-repo change — companion PR: objectui#2489.

  • spec: ObjectTranslationDataSchema / ObjectTranslationNodeSchema accept _views.<view>.emptyState.{title,message} so list-view empty states are translatable.
  • cli: os i18n extract emits _views.<view>.emptyState keys when a view declares an empty state.
  • platform-objects:
    • fill every missing zh-CN/ja-JP/es-ES translation for sys_user, sys_organization, sys_business_unit (fields, options, views, actions);
    • replace hardcoded English tab/section/action labels in the sys_user / sys_organization / sys_position detail pages with inline { en, 'zh-CN', 'ja-JP', 'es-ES' } i18n objects;
    • rebuild the sys_user Security tab on record:quick_actions + actionNames so change-password / change-email / 2FA / delete-account buttons resolve object action translations.
  • service-messaging: new ADR-0029 D8 MessagingTranslations bundle covering the seven sys_* messaging objects, registered on kernel:ready; zh-CN fully translated, ja-JP/es-ES cover sys_inbox_message (incl. the mine view empty state).

⚠️ Rollout dependency

The inline i18n label objects only render localized once objectui#2489 lands — the console previously normalized the runtime locale to a bare base code (zh) and pickLocalized couldn't upgrade back to the zh-CN metadata keys. After that PR merges, run pnpm objectui:refresh here to pull the fix into the vendored /_console.

Tests

  • packages/platform-objects: 80/80 ✅ (pnpm -F @objectstack/platform-objects test)
  • objectui side: i18n 177/177, plugin-detail 185/185, app-shell 1278/1278, plugin-tree 6/6 ✅

Live UI verification (real backend, Playwright, locales zh-CN / ja / es)

Backend from this branch's platform-objects dist on :18742, console dev server (with objectui#2489) on :5190. Full screenshot set: gist.

sys_user list sys_user detail Security tab
zh user list zh user detail zh security
sys_organization detail sys_business_unit list sys_business_unit detail
zh org zh bu list zh bu detail
sys_team list sys_team detail inbox mine (zh)
zh team list zh team detail zh inbox
profile_card (zh) ja sys_user detail es sys_user detail
zh profile ja user es user

Verified in all three locales:

  • sys_user 详情:alert「邮箱未验证 / 重新发送验证邮件」、tabs「岗位|会话|关联账号|组织|OAuth 应用|安全|API 密钥」、「分配岗位」
  • 安全 tab:「修改密码|修改邮箱|启用双因素认证|重发验证邮件|删除我的账号」
  • org 详情:「成员|邀请|团队|添加成员|所有者」;业务单元树列头「名称/类型/业务单元负责人/启用」
  • inbox mine:列头/空态/行内编辑(ja:「インライン編集」)

Known remaining English (out of scope)

  • Builder toolbar "Unpublished app…" banner + History/Publish buttons (objectui builder chrome).
  • Platform role raw value user (field data value, not a label).
  • Activity-feed audit strings (Created sys_team "…", server-generated).

Changeset

.changeset/sys-tables-account-i18n.md — minor for @objectstack/spec / @objectstack/cli / @objectstack/service-messaging, patch for @objectstack/platform-objects.

@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 14, 2026 8:14am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:system tooling size/xl labels Jul 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 4 package(s): @objectstack/cli, @objectstack/platform-objects, packages/services, @objectstack/spec.

104 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via packages/cli, @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/data-flow.mdx (via @objectstack/cli)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/cli, packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via packages/services, @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/cli)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/audit-service.mdx (via packages/services)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/cli)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli, packages/services, packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/settings-service.mdx (via packages/services)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/cli, @objectstack/platform-objects, packages/services, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/i18n-standard.mdx (via packages/services, @objectstack/spec)
  • content/docs/protocol/objectos/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/plugin-spec.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/protocol/objectos/realtime-protocol.mdx (via @objectstack/cli)
  • content/docs/protocol/objectos/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via packages/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via packages/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/platform-objects, @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

…P/es-ES)

- spec: allow _views.<view>.emptyState.{title,message} in object translation schema
- cli: extract emptyState keys in 'os i18n extract'
- platform-objects: fill missing zh-CN/ja-JP/es-ES for sys_user/sys_organization/sys_business_unit
- service-messaging: new ADR-0029 D8 MessagingTranslations bundle (7 sys_* objects), registered on kernel:ready
@os-zhuang os-zhuang merged commit bb71321 into main Jul 14, 2026
17 checks passed
@os-zhuang os-zhuang deleted the claude/sys-tables-account-i18n-07d2b2 branch July 14, 2026 10:55
- sys-user.page.ts: tab/section/alert/add-button labels become inline
  { en, zh-CN, ja-JP, es-ES } objects; Security tab rebuilt on
  record:quick_actions with actionNames so the change-password /
  change-email / 2FA / delete-account buttons resolve object action
  translations.
- sys-organization.page.ts / sys-position.page.ts: remaining hardcoded
  tab titles and add labels get the same inline i18n objects.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:system size/xl tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants