大家好,CentOS 7系统默认语言为`en_US.UTF-8`,若想切换为中文,仅修改一处是不够的。你需要先确认中文语言包已正确安装,然后才能全局配置`LANG`变量,否则终端、日志及命令输出仍会显示英文,甚至出现乱码。整个过程并不复杂,但有几个关键细节需要留意。

首先检查系统中是否存在zh_CN.UTF-8语言环境
直接执行locale -a | grep zh_CN.UTF-8查看结果。如果返回为空,说明当前系统未安装中文支持;若返回zh_CN.UTF-8,则表示语言包已就绪,可跳过安装步骤。
一个常见误区是:执行locale显示LANG=en_US.UTF-8,但locale -a却找不到zh_CN.UTF-8。此时即使强行修改配置文件也不起作用,localectl或/etc/locale.conf会静默失败,无法生效。
- CentOS 7官方源中,中文语言包主要包含在
kde-l10n-Chinese或glibc-common里,但单独安装glibc-common并不足够,它仅提供基础字符集,缺乏本地化规则。 - 推荐使用
yum groupinstall "Chinese Support",该命令会自动拉取kde-l10n-Chinese、字体、输入法框架等全套组件,一步全部完成。 - 如果yum报错“No package Chinese Support a vailable”,说明仓库未启用或镜像源版本过旧,可临时更换为阿里云或清华源再试。
永久设定LANG=zh_CN.UTF-8的两种等效方法
只要zh_CN.UTF-8已存在,以下两种方式选择一种即可,效果完全相同:
- 使用
localectl set-locale LANG=zh_CN.UTF-8——这是systemd推荐的方式,会自动写入/etc/locale.conf,并立即影响新启动的shell。 - 手动编辑
/etc/locale.conf,添加一行:LANG=zh_CN.UTF-8(注意:不要加引号,写成LANG="zh_CN.UTF-8"会导致解析失败)。
不要修改/etc/sysconfig/i18n——那是CentOS 6的路径,CentOS 7会忽略它。也不要更改用户级的~/.bashrc,那样只会临时生效,不作用于系统服务、cron任务及systemd单元。
验证修改是否真正生效
重启终端或重新登录后,执行locale,确认输出中LANG=zh_CN.UTF-8,并且所有LC_*变量都未被覆盖(例如LC_TIME、LC_MESSAGES应继承LANG的值)。
以下几个常见陷阱值得注意:
locale显示正确,但ls列出中文文件名时仍显示乱码——检查文件系统是否为UTF-8编码。ext4默认支持,但NFS或旧挂载点可能未默认启用iocharset=utf8。- 图形界面(GNOME)已变成中文,但
journalctl日志依然为英文——确认LANG是系统级设置,而非仅用户级。某些服务(如sshd)可能缓存旧locale,需要执行systemctl restart sshd。 - 执行
date显示英文星期/月份——说明LC_TIME被单独设为了英文,只需删除/etc/locale.conf中多余的LC_TIME=...行即可。
最容易忽略的一点是:更改语言后,man手册页默认仍然是英文——因为man包是独立安装的,需要额外执行yum install man-pages-zh-CN才能查看中文手册。
