需依次检查“语言与地区”中简体中文是否标“已安装”、locale命令输出LANG/LC_ALL/LC_CTYPE值是否为zh_CN.UTF-8、locale -a是否列出zh_CN.UTF-8、env -i LANG=zh_CN.UTF-8 locale能否生效,四步缺一不可。

想确认 macOS 是否已正确安装简体中文语言包、系统 locale 名称是否可用、终端里 LANG 变量是否生效,不能只看“语言与地区”界面——那里显示的是偏好,不是实际加载状态。
查系统已启用的语言列表
打开“系统设置”→“通用”→“语言与地区”,点击左下角“添加语言”按钮。页面顶部会显示当前已启用的语言,每项右侧有灰色小字标注如“已安装”或“需下载”。【只有标“已安装”的语言,才可能被 locale 命令识别】。若“简体中文”旁写的是“下载”,说明语言包尚未落地,locale -a 里大概率搜不到 zh_CN.UTF-8。
点击任意已启用语言右侧的“⋯”→“移除”,再重新添加并拖到顶部,可强制触发系统校验和按需补装语言资源。
查终端实际生效的 locale 设置
打开终端,直接执行:locale
重点看三行:LANG=、LC_ALL=、LC_CTYPE=。如果 LANG 显示为空(LANG=),而 LC_CTYPE 是 zh_CN.UTF-8,说明 LANG 未设,但局部类别被其他进程覆盖——这常见于 iTerm2 启动时未继承 GUI 环境。
执行 echo $LANG 和 echo $LC_ALL 单独检查。若 LC_ALL 非空(如 LC_ALL=zh_CN.UTF-8),它会彻底屏蔽 LANG 和所有 LC_*,这是最常导致 locale 行为异常的硬性覆盖点。
查系统是否支持目标 locale 名称
终端中运行:locale -a | grep -i "zh_cn\|en_us"
输出应包含类似 zh_CN.UTF-8、en_US.UTF-8 的完整名称。注意大小写和下划线:macOS 不认 zh-Hans、zh_CN.utf8(小写 utf8)、zh_CN@utf-8 这类变体。【若无任何 zh_CN.* 输出,说明该 locale 未生成,即使系统设置了中文界面,终端和命令行工具也无法正确处理中文路径、排序或日期】。
验证某个 locale 是否能真正初始化:运行 locale -c LC_CTYPE -k charclass。若报错 “Cannot set LC_CTYPE to default locale”,就坐实了 locale 名称存在但底层未启用。
查语言包对应文件是否存在
终端中执行:ls /usr/share/locale/zh_CN.UTF-8
返回 “No such file or directory” 是正常现象——macOS 不把 locale 数据放这里。真正的多语言资源藏在 /System/Library/LinguisticData/ 和 /System/Library/Services/AppleLanguages.service/ 下,用户不可见也不应手动操作。
但可以验证关键语言支持文件是否存在:ls /System/Library/InputMethods/CharacterPalette.app。若报错,说明基础字符调色板组件缺失,往往伴随整个中文输入与渲染链路异常。
临时测试 locale 是否真能生效
方法一:用干净 shell 测试
在终端中输入:env -i LANG=zh_CN.UTF-8 locale
这条命令清空所有环境变量,仅设 LANG 后运行 locale。若输出中 LC_CTYPE 等全变成 zh_CN.UTF-8,说明系统底层支持完好;若仍回退为 C 或 en_US,说明该 locale 名称未被系统注册。
方法二:用 Python 快速验证
运行:python3 -c "import locale; locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8'); print(locale.getlocale())"
成功时打印 ('zh_CN', 'UTF-8');失败则抛出 Error: unsupported locale setting —— 这比 shell 的静默 fallback 更早暴露问题。

















