vs code报错默认英文与界面语言无关,因错误由语言服务器(如ts server)生成,需单独配置typescript.locale为zh-cn并重启ts server才能实现报错中文。

VS Code 里代码报错默认是英文,装了中文语言包也改不了——这不是插件没生效,而是你混淆了「界面语言」和「语言服务的错误提示语言」。两者完全独立,必须分别配置。
为什么 Configure Display Language 不影响报错文字
VS Code 的 locale 设置(比如 zh-cn)只控制菜单、设置项、命令面板等 UI 文本。而代码报错(如 TypeScript 的 Cannot find name 'xxx'、Python 的 NameError 提示)是由对应语言服务器(TS Server、Pylance、ESLint 等)生成的原始输出,VS Code 只负责显示,不翻译。
- 界面汉化 ≠ 报错汉化
- 装完
Chinese (Simplified) Language Pack for VS Code后,菜单变中文,但 Problems 面板里的 TS 错误仍是英文 - 外部工具(如
tsc命令行、python解释器、eslint)的输出永远是它们自己决定的语言,VS Code 无法干预
typescript.locale 是唯一能改 TS 中文报错的配置
TypeScript 官方支持 locale 切换,只要让 TS Server 启动时带上 zh-cn,它的诊断信息(hover、Problems、错误波浪线)就会自动变成中文。
- 打开设置(
Ctrl+,),搜索typescript.locale - 下拉选择
zh-cn(不要手输,避免拼写错误) - 必须执行
Developer: Restart TS Server(Ctrl+Shift+P输入后回车),仅重启 VS Code 不够 - 确认生效:打开一个 .ts 文件,故意写个
console.log(undeclaredVar),看 hover 或 Problems 里是否出现「找不到名称“undeclaredVar”」
Error Lens 显示的还是英文?它不翻译,只渲染
Error Lens 插件本身不做任何翻译,它只是把语言服务器或 linter 返回的原始错误文本,以更醒目的方式(比如行尾/行首标签)贴到代码旁边。所以:
- 如果 TS 报错已经是中文,
Error Lens就显示中文;如果是英文,它就原样显示英文 - 它对 ESLint、Prettier、Volar 等第三方工具的提示完全无感——那些提示语言取决于各自配置,比如 ESLint 要靠
eslint-plugin-i18n或本地化规则包 - 别在
Error Lens设置里找“中文开关”,那不存在
Code Runner 中文乱码不是语言问题,是编码问题
当你用 Code Runner 运行 Java/Go 等程序,控制台报错中文变问号或方块,这跟 locale 无关,是终端输出编码没对齐。
- 根本原因是 JVM 或 Go runtime 默认没用 UTF-8 输出中文(尤其 Windows cmd)
- 最稳解法:系统级加环境变量
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8(Java)或GODEBUG=madvdontneed=1+ 终端设 UTF-8(Go) - 临时绕过:在
settings.json里设"code-runner.runInTerminal": true,让输出走 VS Code 内置终端(它默认 UTF-8) - 注意:
code-runner.executorMap自定义命令里如果用了cmd /c,要显式加chcp 65001 > nul &
真正难的不是配哪个开关,而是分清「谁在说话」:VS Code UI、TS Server、ESLint、JVM、终端——每个环节都有自己的语言和编码策略,混在一起就全乱。盯住具体哪一行报错、来自哪个工具、在哪个面板看到,才能对症下药。











