问题
仓库里有 14 个文件各自手搓了一套"中文 or 英文"的私有解析器,完全绕开 @object-ui/i18n 与语言包。典型形态:
// packages/app-shell/src/console/diagnostics/CloudAiModelStatus.tsx:50-54
function pick(label: I18n): string {
const lang = document.documentElement.getAttribute('lang') || 'en';
return lang.toLowerCase().startsWith('zh') ? label.zh : label.en;
}
后果有两层,第二层更麻烦:
- ja / ko / de / fr / es / pt / ru / ar 八种语言硬回退英文——只判断了
zh
- 译文烧死在组件里,不进语言包。也就是说不改代码就永远补不了这八种语言的翻译,翻译流程对这些文案完全失效
这是本仓库近期已经修过两次的同一类缺陷(静默回退到英文、看起来"只是没翻完")再下沉一层。
命中文件(实测 14 个)
已确认携带 {en, zh} 内联文案 + 私有 pick() 的:
| 文件 |
备注 |
packages/app-shell/src/console/diagnostics/CloudAiModelStatus.tsx:50 |
8 组 {en,zh};:59,61,63,137,153,158,163,170,172,179 |
packages/app-shell/src/console/home/CloudOnboardingNext.tsx:66 |
5 组;:149,153,171,176,181 |
packages/app-shell/src/.../ExcelImportBar.tsx:43 |
6 组 |
另有 startsWith('zh') / === 'zh' 形态的同类判断散布在 metadata-admin / studio-design 一族:
packages/app-shell/src/views/studio-design/StudioAiCopilot.tsx:130
packages/app-shell/src/views/metadata-admin/previews/ObjectFormCanvas.tsx:80
packages/app-shell/src/views/metadata-admin/i18n.ts:2895
packages/app-shell/src/views/metadata-admin/StudioHomePage.tsx:115
packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx:61,165
完整清单:grep -rln "startsWith('zh')\|startsWith(\"zh\")\|=== 'zh'" packages/*/src apps/console/src → 14 个文件。
注:metadata-admin/i18n.ts 是 Studio 自己的一套独立词表(TYPE_LABELS_EN / zh + t(key, locale)),有既有测试 studio-locale.i18n.test.tsx 覆盖。它是有意的双语词表还是同样该并入语言包,需要先定性——不要一刀切改掉。
建议做法
- 先分类:哪些是"应该进语言包的产品文案",哪些是 Studio 刻意维护的独立词表
- 前者迁移到
packages/i18n/src/locales/*.ts,组件改用 useObjectTranslation();10 个语言包一次补齐
- 加一条 lint 规则或测试,禁止在组件里新增
startsWith('zh') 式的语言分支(仓库已有 eslint-rules/ 目录,可放这里)
第 3 步是关键——否则这个模式会继续被复制。
发现来源
objectstack#3589 收尾时的全仓库 i18n 覆盖排查。相关:objectui#2870(P0 全屏拦截层未国际化)、语言包 key 缺口 issue。
问题
仓库里有 14 个文件各自手搓了一套"中文 or 英文"的私有解析器,完全绕开
@object-ui/i18n与语言包。典型形态:后果有两层,第二层更麻烦:
zh这是本仓库近期已经修过两次的同一类缺陷(静默回退到英文、看起来"只是没翻完")再下沉一层。
命中文件(实测 14 个)
已确认携带
{en, zh}内联文案 + 私有pick()的:packages/app-shell/src/console/diagnostics/CloudAiModelStatus.tsx:50{en,zh};:59,61,63,137,153,158,163,170,172,179packages/app-shell/src/console/home/CloudOnboardingNext.tsx:66:149,153,171,176,181packages/app-shell/src/.../ExcelImportBar.tsx:43另有
startsWith('zh')/=== 'zh'形态的同类判断散布在 metadata-admin / studio-design 一族:packages/app-shell/src/views/studio-design/StudioAiCopilot.tsx:130packages/app-shell/src/views/metadata-admin/previews/ObjectFormCanvas.tsx:80packages/app-shell/src/views/metadata-admin/i18n.ts:2895packages/app-shell/src/views/metadata-admin/StudioHomePage.tsx:115packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx:61,165完整清单:
grep -rln "startsWith('zh')\|startsWith(\"zh\")\|=== 'zh'" packages/*/src apps/console/src→ 14 个文件。建议做法
packages/i18n/src/locales/*.ts,组件改用useObjectTranslation();10 个语言包一次补齐startsWith('zh')式的语言分支(仓库已有eslint-rules/目录,可放这里)第 3 步是关键——否则这个模式会继续被复制。
发现来源
objectstack#3589 收尾时的全仓库 i18n 覆盖排查。相关:objectui#2870(P0 全屏拦截层未国际化)、语言包 key 缺口 issue。