背景
界面上对象名与部分字段名显示英文(Assessment Plan、Plan Name、Period Type、Status、Entry Sheet、Final Score 等),用户已选中文仍然如此。成因(2026-09-03 复核):应用元数据标签直接用中文书写,只随附一个 en 翻译包、没有 zh-CN 翻译包;平台运行时查标签走「zh-CN 包 → en 包 → 元数据原文」,zh-CN 包没有 kpi 对象词条,于是凡 en 包覆盖的标签一律英文。平台的 os i18n check 又把中文原文算作默认语言已覆盖,工具与运行时口径不一致,已上报 objectstack-ai/objectstack#14882 待裁定。
平台文档(objectstack-i18n skill)的正式写法是每个支持的语言各带一个翻译包,默认语言的包由 os i18n extract 从元数据标签生成。本单按正式写法整改,不等平台。
范围
- 用
os i18n extract --locales=zh-CN --no-metadata-forms --out=src/translations 生成 zh-CN 包(dry-run 结果:1290 个词条,全部由元数据中文标签自动填充,不需要人工翻译),按平台生成文件的约定落在 src/translations/(生成文件名保留工具默认,如 zh-CN.objects.generated.ts)。
- 在
src/translations/index.ts 注册 'zh-CN' 包;en 包原样保留。
CLAUDE.md「项目约定」中「用户可见文案默认中文(对象/字段 label 直接中文;zh-CN 翻译包只补 en 回退)」一句改为正式写法:label 直接中文,zh-CN 包由 os i18n extract 生成并随元数据改动重新生成,en 包补英文回退。只改这一句。
package.json 增加脚本 i18n:extract(生成命令)与在 verify 中加入 objectstack i18n extract --check(平台文档的新鲜度门禁,保证标签改了包也跟着改);若 --check 在本仓库不可用,如实记录并只加生成脚本。
不做
不改任何对象/字段的 label 文案;不改 en 包内容;不动 src/data/、scripts/、README、docs/;不修改平台包。
验收标准
curl -H "Accept-Language: zh-CN" /api/v1/meta/object/kpi_entry_sheet 返回 label = 填报单、fields.name = 填报单名称、fields.status = 状态、fields.total_score = 最终得分;/api/v1/meta/app/kpi_app 返回「KPI 考核管理」。
Accept-Language: en 请求仍返回 Entry Sheet / Sheet / Status / Final Score(en 包不受影响)。
- 浏览器(中文)下:方案版本列表、填报单列表与详情、指标库详情的对象名、列头、相关列表标题全部中文;填报明细相关列表不再出现「指标 / Indicator」两列并存(应为「指标 / 指标名称」)。截图前后对比 ≥ 4 张。
pnpm verify 绿;os i18n check 默认语言零错误;新增的新鲜度门禁通过。
- 生成文件只由工具产出,PR 中不得手改词条;评审能用
os i18n extract --check 或重跑生成对账。
测试计划草稿
T1 生成前后 diff 只含生成文件、index.ts、CLAUDE.md、package.json | T2 API zh-CN 标签断言(验收 1) | T3 API en 标签断言(验收 2) | T4 UI 四个页面截图对比 | T5 pnpm verify + i18n check + extract --check
依赖与风险
背景
界面上对象名与部分字段名显示英文(Assessment Plan、Plan Name、Period Type、Status、Entry Sheet、Final Score 等),用户已选中文仍然如此。成因(2026-09-03 复核):应用元数据标签直接用中文书写,只随附一个
en翻译包、没有zh-CN翻译包;平台运行时查标签走「zh-CN 包 → en 包 → 元数据原文」,zh-CN 包没有 kpi 对象词条,于是凡 en 包覆盖的标签一律英文。平台的os i18n check又把中文原文算作默认语言已覆盖,工具与运行时口径不一致,已上报 objectstack-ai/objectstack#14882 待裁定。平台文档(objectstack-i18n skill)的正式写法是每个支持的语言各带一个翻译包,默认语言的包由
os i18n extract从元数据标签生成。本单按正式写法整改,不等平台。范围
os i18n extract --locales=zh-CN --no-metadata-forms --out=src/translations生成 zh-CN 包(dry-run 结果:1290 个词条,全部由元数据中文标签自动填充,不需要人工翻译),按平台生成文件的约定落在src/translations/(生成文件名保留工具默认,如zh-CN.objects.generated.ts)。src/translations/index.ts注册'zh-CN'包;en包原样保留。CLAUDE.md「项目约定」中「用户可见文案默认中文(对象/字段 label 直接中文;zh-CN翻译包只补 en 回退)」一句改为正式写法:label 直接中文,zh-CN 包由os i18n extract生成并随元数据改动重新生成,en 包补英文回退。只改这一句。package.json增加脚本i18n:extract(生成命令)与在verify中加入objectstack i18n extract --check(平台文档的新鲜度门禁,保证标签改了包也跟着改);若--check在本仓库不可用,如实记录并只加生成脚本。不做
不改任何对象/字段的 label 文案;不改 en 包内容;不动
src/data/、scripts/、README、docs/;不修改平台包。验收标准
curl -H "Accept-Language: zh-CN" /api/v1/meta/object/kpi_entry_sheet返回label= 填报单、fields.name= 填报单名称、fields.status= 状态、fields.total_score= 最终得分;/api/v1/meta/app/kpi_app返回「KPI 考核管理」。Accept-Language: en请求仍返回 Entry Sheet / Sheet / Status / Final Score(en 包不受影响)。pnpm verify绿;os i18n check默认语言零错误;新增的新鲜度门禁通过。os i18n extract --check或重跑生成对账。测试计划草稿
T1 生成前后 diff 只含生成文件、index.ts、CLAUDE.md、package.json | T2 API zh-CN 标签断言(验收 1) | T3 API en 标签断言(验收 2) | T4 UI 四个页面截图对比 | T5 pnpm verify + i18n check + extract --check
依赖与风险
src/data/、scripts/、README);CLAUDE.md 两单各改不同位置,合并时若冲突由后合者在自己分支解决。