插件中命令或配置项的key必须为ASCII字符,中文命名会导致静默失效;用户可见的中文名称需通过package.nls.json本地化文件配合英文key实现。

为什么插件里用中文命名命令或配置项会失效
VSCode 的插件系统对 command、contributes 中的 key(如 command ID、configuration 属性名)强制要求 ASCII 字符,不允许直接使用中文。一旦在 package.json 的 contributes.commands 或 contributes.configuration.properties 里写 "命令名称": {...},VS Code 启动时会静默忽略该条目,调试窗口看不到注册日志,Ctrl+Shift+P 也搜不到——不是报错,而是根本没加载。
- 命令 ID 必须是小写字母、数字、连字符和点号组合,例如
"my-extension.say-hello",不能含中文、空格、下划线或大写字母 - 配置项 key 同样受限,
"myExtension.启用中文提示"会解析失败;正确写法是"myExtension.enableChineseHint" - 语言包(
package.nls.json)才是放中文的地方:把用户看到的“显示欢迎消息”映射到英文 key 上
如何让命令面板显示中文名称
命令本身 ID 必须英文,但用户看到的标题可以是中文——靠 package.nls.json + package.json 联动实现。这是唯一合规且稳定的方式。
- 在
package.json的contributes.commands中写英文 ID 和占位符描述:"commands": [{ "command": "my-extension.show-welcome", "title": "%welcome.title%", "category": "%welcome.category%" }] - 新建
package.nls.json(根目录),写:{ "welcome.title": "显示欢迎消息", "welcome.category": "我的插件" } - 如果还要支持英文用户,再建
package.nls.zh-cn.json和package.nls.en-us.json,VS Code 会自动按系统 locale 加载对应文件
插件配置项(settings)里怎么支持中文说明
配置项的 description 和 properties 的 description 字段,同样必须通过 nls 文件翻译,不能硬编码中文字符串。
-
package.json中这样写:"configuration": { "type": "object", "properties": { "myExtension.enableLog": { "type": "boolean", "default": true, "description": "%enableLog.description%" } } } - 对应
package.nls.json添加:"enableLog.description": "启用操作日志输出"
- 注意:VS Code 读取
package.nls.json时默认用 UTF-8 编码,保存时务必禁用 BOM,否则中文乱码或整个文件被跳过
调试时中文提示不显示?检查三个硬性条件
即使写了 nls 文件,中文仍不出现,大概率卡在这三个地方:
-
package.nls.json文件名拼写错误,必须是全小写、带点号、无空格:package.nls.json✅,package.nls.zh.json❌(应为package.nls.zh-cn.json) - 插件未重新激活:改完
nls文件后,必须重启插件宿主窗口(按Ctrl+Shift+P→Developer: Reload Window),仅重载扩展无效 - locale 设置未生效:宿主 VS Code 的
locale不是"zh-cn",可在settings.json确认,或运行Configure Display Language命令再选一次
真正生效的只有 package.nls.*.json + 英文 key + 正确 locale 三者闭环,任何一环断开,中文就出不来。别试图在代码里拼接中文字符串覆盖 UI 文本,那会绕过本地化机制,且被 VS Code 版本更新反复破坏。


















