语言
概述
Linux 系统的语言环境配置(Locale)影响系统界面、日志输出和字符编码,对多语言环境下的运维操作有重要影响。本文档涵盖 Alpine、Ubuntu/Debian、CentOS 7 和 Rocky Linux 9 四种主流系统的语言配置方法。
适用场景:
- 系统界面和错误信息本地化(中文化)
- 应用程序日志输出语言设置
- 字符编码问题修复(如乱码)
- 容器或服务器国际化部署
Alpine 系统
查看当前语言
# 查看当前系统语言
echo $LANG
# 示例输出:en_US.UTF-8
# 查看已安装的语言包
locale -a
# 示例输出:C、en_US.utf8、POSIX(如未安装中文语言包,不显示 zh_CN)安装并配置中文语言
Alpine 默认仅支持英文语言包,中文需要额外安装:
# 步骤1:安装中文语言包
apk add -U musl-locales musl-locales-lang
# 步骤2:设置系统语言环境变量
echo "export LANG=zh_CN.UTF-8" >> /etc/profile.d/lang.sh
echo "export LANGUAGE=zh_CN.UTF-8" >> /etc/profile.d/lang.sh
# 步骤3:使环境变量立即生效
source /etc/profile.d/lang.sh验证修改结果
echo $LANG
# 正确输出示例:zh_CN.UTF-8
locale
# 正确输出示例:LANG=zh_CN.UTF-8,LC_ALL未设置时继承LANG值Ubuntu & Debian 系统
Ubuntu/Debian 使用 locale 和 locale-gen 命令管理语言环境:
查看当前语言
# 查看当前系统语言
echo $LANG
# 示例输出:en_US.UTF-8
# 查看当前生效的完整语言环境
locale
# 示例输出:所有 LC_* 变量值安装并配置中文语言
# 步骤1:安装中文语言包
sudo apt update
sudo apt install -y language-pack-zh-hans
# 步骤2:生成中文语言环境
sudo locale-gen zh_CN.UTF-8
# 步骤3:设置系统默认语言
sudo update-locale LANG=zh_CN.UTF-8
sudo update-locale LANGUAGE="zh_CN.UTF-8"验证修改结果
locale
# 正确输出示例:LANG=zh_CN.UTF-8
echo $LANG
# 正确输出示例:zh_CN.UTF-8临时切换语言(当前会话有效)
export LANG=en_US.UTF-8 # 切换至英文
export LANG=zh_CN.UTF-8 # 切换至中文CentOS 7 系统
CentOS 7 通过 /etc/locale.conf 文件管理系统语言配置:
查看当前语言
# 查看当前系统语言
echo $LANG
# 示例输出:en_US.UTF-8
# 查看 locale.conf 配置
cat /etc/locale.conf
# 示例输出:LANG="en_US.UTF-8"安装并配置中文语言
# 步骤1:检查可用中文语言包
yum list installed | grep -i chinese
locale -a | grep zh_CN
# 步骤2:若未安装,安装中文支持
sudo yum install -y glibc-langpack-zh
# 步骤3:设置系统语言
sudo localectl set-locale LANG=zh_CN.UTF-8
# 步骤4:使配置生效(或重启系统)
source /etc/locale.conf验证修改结果
locale
# 正确输出示例:LANG=zh_CN.UTF-8
cat /etc/locale.conf
# 正确输出示例:LANG="zh_CN.UTF-8"临时切换语言(当前会话有效)
export LANG=en_US.UTF-8
export LANG=zh_CN.UTF-8Rocky Linux 9 系统
Rocky Linux 9 基于 RHEL 9,同样使用 locale.conf 管理语言配置:
查看当前语言
echo $LANG
# 示例输出:en_US.UTF-8
cat /etc/locale.conf
# 示例输出:LANG="en_US.UTF-8"安装并配置中文语言
# 步骤1:安装中文支持
sudo dnf install -y glibc-langpack-zh
# 步骤2:检查中文语言包是否可用
locale -a | grep zh_CN
# 步骤3:设置系统语言
sudo localectl set-locale LANG=zh_CN.UTF-8
# 步骤4:使配置生效
source /etc/locale.conf验证修改结果
locale
# 正确输出示例:LANG=zh_CN.UTF-8
echo $LANG
# 正确输出示例:zh_CN.UTF-8各系统命令速查表
| 操作 | Alpine | Ubuntu/Debian | CentOS 7 | Rocky 9 |
|---|---|---|---|---|
| 查看当前语言 | echo $LANG |
echo $LANG |
echo $LANG |
echo $LANG |
| 查看所有语言包 | locale -a |
locale -a |
locale -a |
locale -a |
| 安装中文包 | apk add musl-locales |
apt install language-pack-zh-hans |
yum install glibc-langpack-zh |
dnf install glibc-langpack-zh |
| 生成中文语言 | 无需生成 | locale-gen zh_CN.UTF-8 |
无需生成 | 无需生成 |
| 设置系统语言 | 写入 /etc/profile.d/lang.sh |
update-locale LANG=zh_CN.UTF-8 |
localectl set-locale LANG=zh_CN.UTF-8 |
localectl set-locale LANG=zh_CN.UTF-8 |
| 配置生效 | source /etc/profile.d/lang.sh |
source /etc/default/locale |
source /etc/locale.conf |
source /etc/locale.conf |
常见问题与注意事项
修改后无法显示中文
检查是否已安装中文字体(尤其是 Web 应用和终端显示):
# Ubuntu/Debian
apt install -y fonts-wqy-microhei fonts-wqy-zenhei
# CentOS / Rocky
yum install -y wqy-microhei-fonts wqy-zenhei-fonts
# Alpine
apk add font-wqy-microheilocale 命令报错
# 报错示例:locale: Cannot set LC_CTYPE to default locale: No such file or directory
# 解决方案:重新生成语言包
sudo locale-gen zh_CN.UTF-8SSH 会话仍显示英文
退出当前会话重新登录,或检查 /etc/ssh/sshd_config 中是否配置了 AcceptEnv LANG LC_*,如有则注释后重启 SSH。
容器内语言配置持久化
在 Dockerfile 中添加:
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8或在 docker-compose.yaml 中:
environment:
- LANG=zh_CN.UTF-8
- LANGUAGE=zh_CN:zh
- LC_ALL=zh_CN.UTF-8