拓冰建站拓冰建站
首页 / 资讯中心 / 正文

OpenScreen 如何用 i18n:check 脚本校验各语言翻译文件没有缺失键?

OpenScreen 如何用 i18n:check 脚本校验各语言翻译文件没有缺失键【免费下载链接】openscreenCreate stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio.项目地址: https://gitcode.com/GitHub_Trending/open/openscreen如果你在 OpenScreen 中新增了一个界面文案、改动了某个翻译键或者维护某门语言的翻译文件就需要确认src/i18n/locales下 13 个语言目录的翻译文件结构与英文基线完全一致——既不缺键、也不多键。OpenScreen 提供了一个独立的校验脚本npm run i18n:check它会以en为基线对每个语言的每个命名空间文件做键结构比对并在发现差异时以非零退出码失败可以直接用在本地提交流程或 CI 中。校验脚本检查的是什么脚本本体是 scripts/i18n-check.mjspackage.json 中对应的入口定义在第 21 行i18n:check: node scripts/i18n-check.mjs它的行为可以从脚本源码直接确认基线语言固定为enBASE_LOCALE enen目录本身不参与比对只作为参照。命名空间列表不是写死的而是扫描src/i18n/locales/en目录下的所有.json文件得到当前仓库中是 src/i18n/config.ts 里I18N_NAMESPACES声明的 7 个common、dialogs、editor、launch、settings、shortcuts、timeline。待比对的语言是src/i18n/locales下除en外的所有子目录当前为ar、es、fr、it、ja-JP、ko-KR、pt-BR、ru、tr、vi、zh-CN、zh-TW共 12 个。键是递归展开后按点号拼接的完整路径例如tutorial.title嵌套对象层级不一致也会被检出翻译值本身不参与比对只比键结构。运行校验在仓库根目录下执行npm run i18n:check等价于直接运行node scripts/i18n-check.mjs。脚本只用到node:fs和node:path两个内置模块不依赖其他第三方包。package.json的engines声明项目使用node 22.22.1/npm 10.9.4建议在符合该声明的环境中运行。脚本没有任何参数不能只检查某一个语言或某一个命名空间每次运行都会全量比对所有语言与所有命名空间。如何判断结果脚本通过process.exit的退出码表达结果成功退出码为 0任何缺失都会使退出码为 1。全部通过时标准输出会给出类似如下的示例结果数量随仓库中实际的语言和命名空间变化i18n check PASSED — all 12 locales match en across 7 namespaces.发现问题时错误按三类分别输出到标准错误流MISSING: ko-KR/dialogs.json does not exist MISSING in fr/editor.json: - export.title EXTRA in es/common.json: legacyKeyMISSING: locale/namespace.json does not exist该语言目录里整个命名空间文件缺失。MISSING in locale/namespace.json:后面逐行以- key列出英文有、该语言没有的键。EXTRA in locale/namespace.json:后面逐行以 key列出该语言有、英文没有的多余键。只要出现以上任意一类末尾都会输出i18n check FAILED — translation files are out of sync.并伴随退出码 1。修复缺失键拿到失败输出后修正方式直接对应报告里的路径都在 src/i18n/locales 目录内文件级缺失MISSING: locale/namespace.json does not exist表示要在该语言目录下补齐对应的namespace.json。键级缺失打开src/i18n/locales/locale/namespace.json按- key列出的点号路径补上对应键取值翻译为目标语言。多余键对 key列出的键删除该语言中多出来的键或确认该键应加回en基线。修改完成后重新执行npm run i18n:check看到i18n check PASSED且退出码为 0 即完成。注意脚本只比键结构不校验翻译值是否为空或是否仍为英文值的质量需要自行审查。与单元测试中的键覆盖检查的关系除了这个独立脚本仓库还有一条并行的保障src/i18n/__tests__/tutorialHelpTranslations.test.ts是一个 Vitest 单元测试它导入 src/i18n/config.ts 的SUPPORTED_LOCALES逐一断言每个语言目录中dialogs.json的tutorial段落覆盖了固定的一组键。按 docs/tests/writing-tests.md 的说明它归入 i18n 键覆盖类单元测试用npm run test运行。脚本是全量、跨所有命名空间的键结构比对这个测试是针对dialogs.json内 tutorial 相关键的针对性断言两者可以同时存在、互不替代。另外src/i18n/loader.ts 在运行时还会做一层兜底缺少任一必需命名空间的语言目录会被整体排除在可用语言列表之外并向控制台打印[i18n] Incomplete locale folders were excluded:及缺失的命名空间文件名。也就是说漏掉一个命名空间文件时用户端的表现是该语言整个消失而i18n:check的作用就是在开发阶段就把这类不同步拦下来。【免费下载链接】openscreenCreate stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio.项目地址: https://gitcode.com/GitHub_Trending/open/openscreen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门