必须在插件中手动配置本地化:在package.json声明占位符,提供package.nls.json和package.nls.zh-cn.json文件,api调用需按vscode.env.language动态加载文案,菜单项须满足占位符、键名一致、插件激活三条件,离线环境需显式将nls文件加入files列表打包。

插件里怎么让命令面板显示中文?
VS Code 插件的命令名、描述、提示文字默认走英文,即使宿主编辑器已汉化,你的插件仍可能显示英文。根本原因是插件没提供本地化资源,VS Code 不会自动翻译你写的字符串。
必须手动在 package.json 中声明本地化支持,并配套提供 package.nls.json 和 package.nls.zh-cn.json 文件:
-
package.json里加"contributes": { "commands": [ { "title": "%command.hello%", ... } ] }—— 用占位符而非直写中文 - 同级目录建
package.nls.json(默认英文),内容为{ "command.hello": "Hello World" } - 再建
package.nls.zh-cn.json,内容为{ "command.hello": "你好世界" } - 发布前运行
vsce package,确保两个 nls 文件被打包进 vsix
为什么插件弹窗还是英文?
常见于 vscode.window.showInformationMessage() 或 vscode.window.showQuickPick() 这类 API 的参数字符串。它们不走 nls 系统,直接渲染传入的字符串。
正确做法是:先用 vscode.env.language 获取当前 locale,再按需加载对应语言的文案对象:
const messages = {
'zh-cn': { ok: '确定', cancel: '取消' },
'en': { ok: 'OK', cancel: 'Cancel' }
};
const lang = vscode.env.language || 'en';
vscode.window.showInformationMessage(messages[lang].ok);
注意:vscode.env.language 返回的是小写带连字符的值(如 zh-cn),不是 ZH-CN 或 zh_CN,大小写或分隔符错就查不到键。
菜单项汉化失败的三个硬伤
右键菜单、编辑器上下文菜单、设置页里的插件配置项,最容易漏掉本地化。不是写了中文就生效,而是要满足三重条件:
- 菜单项 title 必须用
%menu.item%占位符,不能硬编码中文 -
package.json的contributes.menus段必须和package.nls.*.json键完全一致 - 插件激活后,VS Code 才会加载 nls 文件;如果插件没激活(比如依赖未满足),菜单项就永远显示英文占位符
%menu.item%
验证方式:打开命令面板,输入 Developer: Toggle Developer Tools,看 Console 是否报 Cannot find message for key menu.item —— 有这句说明 nls 文件路径错或 key 对不上。
离线环境怎么保证中文正常?
内网或 air-gapped 环境下,VS Code 可能无法动态下载语言包,导致插件中文文案 fallback 到英文。这不是插件问题,而是 VS Code 自身资源加载机制限制。
唯一可靠方案:把插件所需的 package.nls.zh-cn.json 直接打进插件安装包,且确保它和 package.json 在同一层级。VS Code 启动时会优先读取插件自带的 nls 文件,不依赖网络拉取。
容易被忽略的点:vsce package 默认不会打包 .nls.*.json 文件,必须在 package.json 的 files 字段显式声明:
"files": [ "extension.js", "package.json", "package.nls.json", "package.nls.zh-cn.json" ]
漏掉这一行,插件装到离线机器上就只剩英文。











