vscode插件中文支持必须用vscode-nls而非i18n-ally:前者是官方推荐方案,需配合vscode-nls-dev生成package.nls.json并声明localization字段;后者仅作编辑辅助,不支持插件运行时语言包加载与marketplace发布要求。

VSCode 插件开发中,中文支持不是开箱即用的,必须手动集成语言包或国际化框架。直接硬编码中文会导致多语言切换失败、无法热更新、i18n 提示缺失等问题——所以别写死 "保存成功",得走标准流程。
vscode-nls vs i18n-ally:本地化方案选哪个
vscode-nls 是 VS Code 官方推荐的底层库,专为插件设计,支持编译时提取、.nls.json 格式、语言包按需加载;i18n-ally 是通用前端国际化插件,不原生支持 VS Code 插件的 package.nls.json 构建流程,也无法在 activate() 中正确 resolve 语言包路径。
-
vscode-nls必须配合vscode-nls-devCLI 工具生成package.nls.json,否则中文不会出现在「设置 → 区域设置 → 显示语言」列表里 -
i18n-ally在插件项目里只能当编辑辅助用(比如翻译提示、key 检查),不能替代vscode-nls的运行时逻辑 - 如果你的插件要上架 Marketplace,必须用
vscode-nls,否则中文语言包无法被 VS Code 主程序识别
中文语言包文件命名和存放位置
VS Code 插件只认特定路径和命名格式的语言包,错一个字符就加载失败。
- 主语言包文件名必须是
package.nls.json,放在插件根目录(和package.json同级) - 其他语言包如中文简体,要放在
./nls/zh-cn/package.nls.json,注意是小写zh-cn,不是zh_CN或zh-Hans -
package.nls.json内容必须是纯 key-value 对象,不能有注释、不能嵌套,例如:{"extension.name": "我的插件", "command.save": "保存"} - 所有 key 必须和代码中
nls.localize('extension.name', '...')的第一个参数完全一致
vscode-nls 本地调试中文不生效的常见原因
即使文件放对了、key 对上了,中文仍可能显示为英文,通常卡在这几个环节:
- 没在
package.json的contributes里声明"localization": ["zh-cn"](VS Code 1.80+ 强制要求) - 启动调试时没加
--locale=zh-cn参数,VS Code 默认用系统语言,而插件语言包不会自动 fallback -
vscode-nls-dev版本太新(如 v5.x),但插件 target 的 VS Code 版本太老(nls 结构不兼容 - 使用了
vscode-nls的loadMessageBundle()手动加载,却忘了调用nls.config({ locale: 'zh-cn' })初始化
最易忽略的一点:VS Code 插件的中文语言包必须随插件一起打包发布,不能靠用户单独安装 i18n-ally 来“补救”——它压根不参与插件的 activate 生命周期。想让用户看到中文,就得把 nls/zh-cn/ 目录打进 .vsix。











