根本原因是插件未在package.json的contributes.configuration中为每个配置项的title和description显式声明zh-cn键值对,仅靠语言包或nls文件无法覆盖设置项文案。

为什么插件设置项还是英文?
根本原因不是语言包没装,而是插件自己没声明中文文案。VS Code 不会自动翻译 package.json 里 contributes.configuration 下的 title 和 description —— 它只读你写的字面量。
常见现象:用户已安装官方中文语言包、locale.json 正确、命令面板和菜单都是中文,但插件的设置项标题/说明仍显示英文。
- 必须在
package.json的每个配置项 property 内,为title和description显式提供zh-cn键,例如:"title": {"zh-cn": "启用日志输出", "en": "Enable logging"} - 仅靠
package.nls.json或package.nls.zh-cn.json文件无法覆盖配置项文案;VS Code 在读取 settings UI 时只认package.json中内联的多语言结构 - 如果用了
vscode.l10n.t()动态翻译命令提示等,那是另一套逻辑,不影响配置项静态展示
调试时 vscode.l10n.t() 返回乱码或空字符串?
这通常不是 VS Code 问题,而是插件工程中语言文件路径、编码或调用方式不合规。
-
package.nls.json和package.nls.zh-cn.json必须保存为 UTF-8 无 BOM 编码;BOM 会导致 JSON 解析失败,vscode.l10n.t()回退为空 -
package.nls.zh-cn.json中的 key 必须与package.nls.json完全一致(包括大小写和标点),value 才能被正确映射 - TypeScript 中调用必须传字面量字符串:
vscode.l10n.t("saveSuccess")✅,不能是变量拼接:vscode.l10n.t(key + "Success")❌(编译期无法提取) - 调试时可在 Developer Tools Console 中打印
vscode.env.language确认当前语言环境是否为zh-cn
插件发布后用户看到英文设置项?
大概率是打包时漏掉了 package.nls.zh-cn.json,或者它没放在插件根目录下。
- VS Code 插件加载 i18n 资源时,只扫描插件根目录下的
package.nls.*.json文件;放在i18n/子目录下不会被识别 - 运行
vsce package打包前,用unzip -l your-extension.vsix | grep nls检查压缩包内是否包含package.nls.zh-cn.json - 若使用 Webpack 构建,需确保
copy-webpack-plugin显式拷贝了这些 JSON 文件,否则它们不会进入最终产物 - 用户本地
locale.json是zh-cn,但插件未提供对应翻译时,VS Code 默认回退到en,不会报错也不会提示缺失
远程开发(SSH/WSL)中插件多语言失效?
不是插件问题,而是远程端语言环境未同步 —— VS Code 的插件多语言依赖客户端(remote)进程读取其自身的 locale 设置,而非本地窗口。
- 连接 Remote-SSH 后,必须在远程窗口中再次执行
Configure Display Language并选zh-cn,再重启远程窗口 - 远程机器上无需额外安装语言包,但必须确保远程 VS Code Server 版本 ≥ 1.70(旧版不支持远程 locale 传递)
- 检查远程窗口右下角语言码:如果是
en,点击它切换;若列表无zh-cn,说明远程端未加载语言资源,需确认远程插件已启用且未被禁用 - 某些企业 SSH 环境会强制设置
LANG=C,可能干扰 VS Code 启动时的语言探测,此时需在远程~/.bashrc中加export LANG=zh_CN.UTF-8并重连
zh-cn 文案且用户语言是 zh-cn,它就该显示中文——反之亦然。验证时别只看设置面板,直接打开命令面板搜插件命令,看提示文字是否匹配预期。











