locale -a 列出的是已生成的可用 locale,非已安装语言包;若未生成,即使装了 language-pack-zh-hans 等包也不会显示,需在 debian/ubuntu 执行 sudo dpkg-reconfigure locales,在 rhel/centos 运行 sudo localedef -c -i zh_cn -f utf-8 zh_cn.utf-8。

直接用 locale -a 列出所有已生成的 locale
这不是“安装包列表”,而是系统当前实际可用的语言环境(locale)集合。只要某个 locale 被生成(generate),它就出现在 locale -a 输出里;没生成的,哪怕语言包已装,也不会显示。
常见错误现象:运行 apt install language-pack-zh-hans 或 yum install kde-l10n-Chinese 后,locale -a | grep zh_CN 仍无输出——说明只是装了源文件,还没生成 locale。
- Debian/Ubuntu 系统需额外执行:
sudo dpkg-reconfigure locales,勾选zh_CN.UTF-8并确认 - CentOS/RHEL 7+ 需手动编辑
/etc/locale.conf后运行:sudo localedef -c -i zh_CN -f UTF-8 zh_CN.UTF-8 - Arch Linux 默认不预生成 locale,必须用
sudo locale-gen(配合/etc/locale.gen中取消注释)
dpkg -l | grep language-pack 或 rpm -qa | grep -i lang 查的是语言包,不是可用 locale
这类命令只反映软件包管理器层面的安装状态,和实际能否用无关。比如 Ubuntu 装了 language-pack-zh-hans-base,但若没运行 dpkg-reconfigure locales,zh_CN.UTF-8 就不会出现在 locale -a 里。
不同发行版对应包名差异明显:
- Ubuntu:
language-pack-zh-hans(简体)、language-pack-zh-hant(繁体) - CentOS:
kde-l10n-Chinese、glibc-common(含基础 locale 模板) - Fedora:
glibc-langpack-zh(自 Fedora 27 起统一用此命名)
为什么 echo $LANG 显示中文,但 locale -a 找不到对应条目?
这是典型“配置生效但底层缺失”问题。$LANG 是环境变量,可以任意设成 zh_CN.UTF-8,但若该 locale 未被生成,程序启动时会 fallback 到 C 或报错(如 locale: Cannot set LC_ALL to default locale: No such file or directory)。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
验证方法:
- 运行
locale—— 若出现大量LC_*显示zh_CN.UTF-8但提示 “Cannot set...”,说明 locale 缺失 - 运行
locale -a | grep ^zh_CN—— 空输出即确认未生成 - 检查
/usr/lib/locale/zh_CN.utf8/(glibc 目录)是否存在,不存在则 locale 确实没建好
桌面环境图形界面看到的语言选项,不一定对应命令行可用 locale
GNOME/KDE 的“区域与语言”设置会调用 localectl 或写入 /etc/default/locale,但它只负责设置变量,不自动触发 locale 生成。用户在 GUI 里勾选“中文”,不代表 zh_CN.UTF-8 已存在于 locale -a 输出中。
真正起作用的只有两件事:
- 包已安装(
apt/rpm/dnf层面) - locale 已生成(
localedef或locale-gen层面)
缺一不可。很多运维人员卡在第二步,反复重装包却无效,就是忽略了生成环节。










