locale.json保存失败提示“eacces: permission denied”是文件系统权限问题,非vscode故障;需检查目录/文件权限、确保utf-8无bom编码、路径无中文或空格,并完全退出后重启vscode。

locale.json 保存失败时提示 “EACCES: permission denied”
这不是 VS Code 故障,而是文件系统拒绝写入——locale.json 所在目录或文件本身权限不对,VS Code 启动后连尝试写入的机会都没有。
常见现象包括:执行 Configure Display Language 后无反应、点 zh-cn 没弹重启提示、手动保存 locale.json 失败、文件内容为空或乱码。
- Windows 下检查
%APPDATA%\Code\User\locale.json文件属性 → 取消勾选“只读”,再点“应用”到整个“User”文件夹 - Linux/macOS 运行:
chmod u+w ~/.config/Code/User/locale.json;若ls -l显示属主是root,则先执行:sudo chown -R $USER:$GROUPS ~/.config/Code/User/ - 别用记事本直接保存:它默认 UTF-16 或带 BOM,必须用 VS Code、Notepad++ 或 Vim 以 UTF-8 无 BOM 编码保存
- 确保路径中不含中文字符或空格(如
C:\用户\code或~/My Projects/Code),这类路径会导致 VS Code 静默跳过 locale 加载
locale.json 写入后仍不生效的三个硬性条件
写进去了 ≠ 被读到。VS Code 对 locale.json 的加载有三道硬校验,缺一不可:
- 内容必须严格为单行 JSON:
{"locale":"zh-cn"}(注意:双引号、小写、短横线、冒号后无空格、无逗号、无注释) - 文件必须放在正确路径:
~/.config/Code/User/locale.json(Linux/macOS)、%APPDATA%\Code\User\locale.json(Windows),不能放在.vscode/工作区目录下 - VS Code 必须完全退出再启动:任务管理器杀掉所有
Code.exe和Code Helper进程,macOS 用户还要确认活动监视器里没有残留进程
任何一项不满足,VS Code 就会静默回退到英文,且不报错、不提示。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
WSL 中 locale.json 总是 Permission denied
你在 Windows 资源管理器里通过 \wsl$\Ubuntu\home\user\.config\Code\User\ 打开并编辑?这正是问题根源——DrivFS 驱动默认不透传 POSIX 权限,chmod 和 chown 全部失效。
- 正确做法:用 Remote-WSL 扩展打开新窗口(
Ctrl+Shift+P→Remote-WSL: New Window),再导航至~/.config/Code/User/编辑 - 补救挂载配置:在 WSL 终端编辑
/etc/wsl.conf,加入:[automount] options = "metadata,uid=1000,gid=1000,umask=022"
然后运行:wsl --shutdown,再重启 WSL - 验证是否生效:
ls -l ~/.config/Code/User/locale.json应显示正常 uid/gid,且echo '{"locale":"zh-cn"}' > locale.json不报错
插件更新后 locale.json 突然写不进去了
不是 locale.json 被锁,而是某扩展(尤其是语言类、远程类)在启动时劫持了用户数据目录的访问逻辑,导致 VS Code 写配置前就被拦截。
- 典型诱因:Remote-SSH、Remote-WSL、Settings Sync 插件更新后,会强制将
locale.json重定向到远程机器或云端路径,本地文件变成只读镜像 - 快速验证:关闭所有文件夹(
File > Close Folder),再执行Configure Display Language—— 如果这时能成功写入,说明是工作区或远程插件干扰 - 临时绕过:禁用 Remote-SSH / Remote-WSL / Settings Sync,再试;长期方案是确保远程机器上也存在合法的
locale.json(路径为~/.vscode-server/data/Machine/[hash]/locale.json) - 别忽略缓存:插件更新后旧缓存可能污染 locale 解析流程,删掉
~/.cache/Code(Linux/macOS)或%APPDATA%\Code\Cache(Windows)再试
最常被忽略的是:locale.json 生效不依赖插件启用状态,但它的写入过程极度依赖插件未抢占用户数据目录控制权——哪怕一个没显式操作 locale 的插件,只要在激活阶段调用了 vscode.workspace.getConfiguration().update(),就可能意外锁定写入通道。










