插件开发界面仍为英文是因为调试窗口不继承主vscode语言设置,需在launch.json中添加--locale=zh-cn参数;插件内消息显示中文需本地化配置package.nls.json及对应翻译文件,并在package.json中声明localizations。

为什么装了中文语言包,插件开发界面还是英文?
因为插件开发环境(如 vscode-test 启动的测试实例、Extension Development Host 窗口)默认不继承主编辑器的 locale 设置,它会按系统语言或硬编码 fallback 到 en。你改了主 VSCode 的 settings.json,对插件调试窗口完全无效。
实操建议:
- 在插件项目根目录下创建
.vscode/launch.json,为Extension Development Host配置显式 locale 参数 - 确保
runtimeArgs包含--locale=zh-cn,且该参数位于args之外(args是传给 extension 的,不是传给 Code 进程的) - 若用
vscode-test写单元测试,需在测试脚本中通过launchOptions.env.VSCODE_CLI或直接拼接启动命令注入--locale=zh-cn - 验证方式:启动 Extension Development Host 后,按
Ctrl+Shift+P,看命令面板顶部是否显示「配置显示语言」而非「Configure Display Language」
如何让插件里调用的 vscode.window.showInformationMessage 显示中文?
这取决于消息文本本身是否本地化,而不是界面语言。VS Code 插件 API 不自动翻译你传进去的字符串——showInformationMessage("保存成功") 就是中文,showInformationMessage("Saved successfully") 就是英文。
但如果你依赖 VS Code 内置提示(比如 vscode.workspace.saveAll() 的返回文案),或想适配多语言,就得走官方国际化流程:
- 插件项目必须包含
package.nls.json(主语言)和package.nls.zh-cn.json(中文翻译文件) -
package.json中的contributes.commands[].title、contributes.menus等字段值,必须写成%command.title%这类 key 引用形式 - 运行时 VS Code 会根据当前
locale自动加载对应nls.*.json文件,匹配 key 返回译文 - 漏掉
nls.zh-cn.json或 key 拼错(比如写成%command.titile%),就会回退到英文原文
vscode-test 启动的测试窗口中文乱码或字体发虚?
这是 Windows 下常见渲染问题:测试窗口使用的是独立 Electron 实例,未继承主 VSCode 的字体配置,且默认未启用 DirectWrite 渲染引擎,导致中文字体 hinting 失效、笔画粘连或偏细。
解决路径很窄,只有两个有效动作:
- 在插件项目的
test/runTest.ts启动逻辑中,给code进程增加--disable-gpu和--font-render-hinting=medium参数(注意不是--font-render-hinting=none,后者反而更糊) - 强制指定测试窗口使用的中文字体:在
.vscode/launch.json的env字段加入"VSCODE_FONT_FAMILY": "Microsoft YaHei, sans-serif"(Windows 推荐;macOS 用"PingFang SC",Linux 用"WenQuanYi Micro Hei") - 不要试图在
settings.json里改editor.fontFamily—— 测试窗口不读用户设置,只认启动参数和环境变量
插件发布后用户看到的界面仍是英文,但本地调试是中文?
核心原因:你没把 package.nls.zh-cn.json 打包进 vsix。VS Code 插件市场(Marketplace)不会自动收集 nls 文件,它们必须显式声明在 package.json 的 contributes.localizations 字段里,并确保文件路径被 vsce package 包含。
检查清单:
-
package.json必须有:"contributes": { "localizations": [ { "languageId": "zh-cn", "languageName": "Chinese (Simplified)", "localizedLanguageName": "简体中文", "translations": [{ "id": "vscode", "path": "./nls/zh-cn.json" }] } ] } -
nls/zh-cn.json路径要和translations.path完全一致(区分大小写,不能是NLS或zh_CN) - 执行
vsce package前,先unzip -l your-extension-1.0.0.vsix | grep zh,确认输出里真有extension/nls/zh-cn.json - 如果用了 webpack 构建,确保
copy-webpack-plugin把nls/**目录明确 copy 进 output,否则打包时被过滤
最常被忽略的一点:本地调试用的是源码里的 nls 文件,而 vsix 里必须是构建后产物里的同名文件——二者路径结构稍有差异就直接失效。











