在新安装的 CentOS 7 环境中,执行 yum 时提示:
Failed to set locale, defaulting to C用 locale 查看当前语言环境,也有报错:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=zh_CN.UTF-8
LC_CTYPE=zh_CN.UTF-8
LC_MESSAGES=zh_CN.UTF-8
LC_ALL=当前会话使用的是 zh_CN.UTF-8,但系统无法加载对应的 locale。先检查已经安装的语言环境:
LC_ALL=C locale -a如果列表中有 zh_CN.utf8,说明中文 UTF-8 的 locale 已经存在;如果没有,需要先补齐语言数据。
补齐语言数据
CentOS 7 的相关数据由 glibc-common 提供。以 root 执行,未安装时使用:
LC_ALL=C yum install glibc-common如果已经安装,但语言数据缺失,可以重新安装:
LC_ALL=C yum reinstall glibc-common命令前的 LC_ALL=C 只对这一次命令生效,让 yum 暂时使用 C locale。
再次运行 locale -a 检查。如果仍然没有 zh_CN.utf8,可以用 localedef 生成:
LC_ALL=C localedef -i zh_CN -f UTF-8 zh_CN.UTF-8这里需要的是系统的 locale 数据,无需为了这个报错安装 KDE 桌面的中文语言包。
设置默认语言
查看系统配置:
cat /etc/locale.conf这里原来是 LANG="en_US.UTF-8",和当前会话中的设置不同。准备使用中文环境,就把 /etc/locale.conf 中的 LANG 修改为:
LANG="zh_CN.UTF-8"保存后退出并重新登录,再执行:
locale
locale charmap确认不再出现前面的报错,字符集为 UTF-8,然后重新执行 yum。
如果登录后的值仍与配置文件不同,再检查用户的 shell 配置及 SSH 客户端传入的 LANG、LC_* 环境变量,它们可能覆盖系统默认值。