Debian配置系统中文语言及环境

21,705 阅读5分钟

在网上购买的服务器有的没有安装中文环境,这样除了显示的系统提示是英文的之外,还会导致中文乱码。

今天以Debian系统为例,分享一下Linux上中文语言及其环境配置。

1,安装本地化管理工具和语言包

首先我们需要安装locales这个软件包,这是本地化管理工具:

sudo apt install locales

如果你是用的是Debian系统,则安装了locales通常就可以了。如果你是用的是Ubuntu Server或基于Ubuntu的发行版,则还需要安装语言翻译包,以中文为例:

# 可以用 apt list 'language-pack-*' 列出所有语言包
sudo apt install language-pack-zh-hans

2,配置语言环境

这里将介绍交互式非交互式配置语言环境的方法,大家选其一即可。

(1) 交互式配置

交互式配置可通过locales的TUI进行选择于配置,相对来说操作更简单直观。

执行下列命令配置语言环境:

sudo dpkg-reconfigure locales

出现配置界面如下:

image.png

在这里选择要安装的语言环境,通常我们不需要全部选择安装,选择需要的即可

语言项非常多,通过鼠标滚轮、PageUp或者PageDown可以上下翻页,有的终端也可以用HomeEnd跳转到开头或者结尾,上下键逐个移动光标,翻到最下面可以找到中文语言环境:

image.png

按下空格即可选择,前面带星号(*)即被选中,通常中文选择如图的zh_CN.GBK GBKzh_CN.UTF-8 UTF-8这两个即可,最后按下回车确定。

然后就是默认语言设置:

image.png

在这里推荐Linux环境下使用zh_CN.UTF-8这一项,回车确定,这样就配置完成了!

然后注销重新登录,或者重连服务器,语言配置就生效了。

(2) 非交互配置

对于一些服务器配置或运维场景,非交互配置能够实现自动化地完成语言环境配置工作,可通过编写脚本一键配置需求。

首先可以查看系统支持配置哪些语言和环境,使用下列命令:

# 查看全部
cat /usr/share/i18n/SUPPORTED

# 或者过滤输出中文环境
cat /usr/share/i18n/SUPPORTED | grep 'zh_CN'

如图:

image-20260321160049825

其中每一行就是一个语言及其编码环境组合,例如:

# 形式:语言.字符集 生成的字符集
zh_CN.UTF-8 UTF-8

一般情况下,推荐使用中文环境以及UTF-8编码,也就是zh_CN.UTF-8 UTF-8这个。

确定了要使用的语言环境和字符集,我们使用localedefupdate-locale命令,生成对应的语言和字符集文件,并应用语言字符集即可:

# 生成中文语言、UTF-8的字符集的语言环境二进制文件
# 命令格式:localedef -i <语言> -f <字符集> <生成的语言环境二进制文件名>
# 生成的语言环境二进制文件名通常应当写作:'语言.字符集'的形式
sudo localedef -i zh_CN -f UTF-8 zh_CN.UTF-8

# 应用对应的语言字符集文件
sudo update-locale LANG=zh_CN.UTF-8

到此就自动化配置完成了!重启或重连服务器生效。

3,配置后仍然不生效问题

在绝大多数情况下,完成上述配置,注销或者重启后,或者是重新连接服务器后配置就生效了,无需再做下面的操作,少数情况不生效可以通过环境变量再设置一下即可。

下面介绍locale命令并提供几个方案,大家视情况选择其一即可。

(1) locale命令基本使用

首先执行下列命令查看已安装的语言环境:

locale -a

image.png

然后就是查看当前系统语言环境变量配置:

locale

image.png

(2) 临时改变语言环境

在终端中设定LANG环境变量即可,例如我要临时改变语言环境为C.UTF-8

export LANG=C.UTF-8

这样会立即生效,但是重启或者重新登录后失效。

(3) 永久改变当前用户语言环境

进入用户目录,编辑.bashrc即可:

cd ~
vim .bashrc

例如永久改变我当前用户的语言环境为C.UTF-8,则在.bashrc文件末尾加入:

export LANG=C.UTF-8

image.png

(4) 永久改变系统全局语言环境

/etc/profile.d中增加一个set-lang.sh文件(可以自定义文件名),并在其中写上上述设定语言环境变量的命令即可。

cd /etc/profile.d
touch set-lang.sh
chmod +x set-lang.sh

比如说要设定系统语言环境为zh_CN.utf8,则编辑set-lang.sh内容如下并保存:

#!/bin/bash
export LANG=zh_CN.utf8

重启即可。

可见这几种方式虽然作用域不同,但是都是通过环境变量即可完成设定。

(5) 如果还是不生效

如果尝试了上述所有方法,发现仍然不生效,打印LANG环境变量总是得到C,这就说明这个环境变量很可能被某个配置覆盖了

检查下列配置文件内容:

  • /etc/environment
  • /etc/profile
  • ~/.bashrc~/.profile(仅对当前用户生效)

检查其中是否包含LANG=XXX或者export LANG=xxx的语句(上述你自己设定的除外),如果有则删除掉,例如我这里~/.profile中就存在LANG=C语句:

image.png

把这两行删掉,重新启动或者重连服务器即可。

5,Docker容器内乱码问题

使用Docker容器的话配置locales还是很麻烦的,因此不建议在容器中使用上述方式,只需要设定容器内语言环境变量为C.UTF-8即可。

若是自己制作镜像,在Dockerfile中加入:

ENV LANG C.UTF-8

若是创建一个容器,加上如下环境变量参数:

-e LANG=C.UTF-8

这样,容器内的中文就可以正常显示了!