i18n-ally 插件调试常见问题及解决:路径未识别致禁用、动态 key 漏检、热重载失效需手动重启 extension host,并确保配置生效与插件冲突规避。

调试 i18n-ally 插件时找不到语言文件
常见现象是插件右下角显示 i18n Ally: disabled,或侧边栏不出现语言资源面板。根本原因通常是插件没识别到项目中的 locales 目录结构。
检查以下三点:
- 确保语言文件路径在工作区根目录下,且符合插件默认扫描规则:
locales/en.json、locales/zh-CN.json(不是src/locales或i18n/) - 若使用自定义路径(如
src/i18n),必须在项目根目录添加.i18nrc.json,内容至少包含:{"locales": ["src/i18n/**"]} - 确认文件扩展名是
.json或.yaml;.ts文件仅支持读取,无法编辑或同步,插件会静默跳过
断点调试插件自身逻辑(extension.js/ts)
想验证 key 收集是否准确、路径解析是否递归到位,不能只靠 UI 表现——得进插件源码里加断点。
操作步骤:
- 克隆官方 i18n-ally 仓库(
https://github.com/antfu/i18n-ally),用 VSCode 打开 - 在
src/core/collect.ts中找到collectKeysFromAst或类似函数,在关键行(如解析t('xxx')的位置)打上断点 - 按
Ctrl+Shift+P→ “Developer: Toggle Developer Tools”,再运行Debug: Select and Start Debugging→ 选 “Extension” 配置 - 启动后,打开你的测试项目,触发插件命令(如右键“Extract i18n keys”),断点就会在插件进程里命中
注意:插件运行在独立的 Extension Host 进程中,主 VSCode 窗口的 DevTools 看不到它的 console.log,必须用 Extension Development Host 窗口调试。
测试动态 key 拼接场景(如 t(`error.${code}`))
i18n-ally 默认不分析字符串拼接,这类 key 会被漏检,但你可以在测试阶段主动暴露问题。
验证方法:
- 在测试组件中写一个明显拼接的调用:
t(`form.${type}.label`) - 观察插件是否在“Missing keys”列表里把它标为未使用(它不会报错,但也不会出现在“Used keys”中)
- 如果希望覆盖这类 case,需在
.i18nrc.json中启用实验性配置:{"experimental": {"dynamicKeys": true}},不过该选项对复杂表达式仍有限制 - 真正可靠的方案是配合单元测试:用
@intlify/test-utils或自定义 mock,断言运行时 key 是否存在
插件热重载失败导致测试结果滞后
改完插件代码保存后,发现新逻辑没生效,甚至旧行为还在——大概率是 Extension Host 没重启。
这不是 bug,是设计机制:
- VSCode 不会自动 reload 正在调试的插件;每次修改后,必须手动按
Ctrl+Shift+P→ “Developer: Restart Extension Host” - 如果用了
npm run watch自动编译 TypeScript,确保out/目录已更新,且package.json的main字段指向的是编译后路径(如./out/extension.js) - 调试期间关闭其他可能冲突的 i18n 插件(比如 du-i18n 或 i18n Mage),避免多个插件同时监听同一文件事件
最易忽略的一点:插件配置变更(如改了 .i18nrc.json)也需要重启 Extension Host 才能生效,光刷新窗口没用。











