如何在 debian 终端上显示中文?

2021-10-16 06:52:51 +08:00
 nbweb
安装了全新的 debian11 之后,发现在 ssh 的终端上,不显示中文了。

1,在终端里输入 export LC_ALL=zh_CN.utf-8 之后,可以显示,但是关闭终端再打开,又不行了。
2,在.bashrc 的最后加上 export LC_ALL=zh_CN.utf-8,全部都可以显示了。
3,locale 显示如下
root@debian:~# locale
LANG=
LANGUAGE=
LC_CTYPE="zh_CN.utf-8"
LC_NUMERIC="zh_CN.utf-8"
LC_TIME="zh_CN.utf-8"
LC_COLLATE="zh_CN.utf-8"
LC_MONETARY="zh_CN.utf-8"
LC_MESSAGES="zh_CN.utf-8"
LC_PAPER="zh_CN.utf-8"
LC_NAME="zh_CN.utf-8"
LC_ADDRESS="zh_CN.utf-8"
LC_TELEPHONE="zh_CN.utf-8"
LC_MEASUREMENT="zh_CN.utf-8"
LC_IDENTIFICATION="zh_CN.utf-8"
LC_ALL=zh_CN.utf-8

但是,第 2 条貌似不是正规的做法,有没有在系统里永久改变?默认是英文,但是在终端才显示中文的?第三条显的正规,但是不生效。是不是要重启一下才行?
6723 次点击
所在节点    Linux
16 条回复
Yadomin
2021-10-16 07:46:36 +08:00
dpkg-reconfigure locales
nbweb
2021-10-16 08:33:12 +08:00
@Yadomin 添加了,不行
raysonx
2021-10-16 08:38:37 +08:00
怀疑你本地的 ssh 客户端将本地的 LC_*环境变量带到远程了。建议检查本地 ssh_config 文件。
la9998372
2021-10-16 08:54:17 +08:00
hingle
2021-10-16 09:18:09 +08:00
nbweb
2021-10-16 09:37:22 +08:00
@la9998372 用了这个不行,ssh 终端还是不显示中文。

奇怪,另外一新安装的 debian11 虚拟机是 ok 的。
skys215
2021-10-16 09:55:36 +08:00
有安装中文 /utf8 包吗
nbweb
2021-10-16 09:56:49 +08:00
@skys215 要怎么安装?在.bashrc 的最后加上 export LC_ALL=zh_CN.utf-8 就 ok,删了就不行了。
bao3
2021-10-16 10:28:34 +08:00
你的终端也要调整的,并不是只调整 server 端。
aristolochic
2021-10-16 11:27:13 +08:00
不考虑 ssh 的话(因为你没说你用的是什么),服务端设置 locale 的正确做法是在 locale.conf 写入

```
LANG=zh_CN.UTF-8
```

locale.conf 可以是 /etc/locale.conf 、~/.config/locale.conf 、$XDG_CONFIG_HOME/locale.conf 或 $HOME/.config/locale.conf,依据你希望应用的范围和是否修改了默认 HOME 和 XDG_CONFIG_HOME 而定。

locale.conf 的变更会在下次登录时生效,要立刻应用新的设置的话,可以运行:

``` sh
$ unset LANG
$ source /etc/profile.d/locale.sh
```

注意到只设置了 LANG 这一个环境变量,这是因为这个变量的值会覆盖掉所有未设置的 LC_* 变量的值。

如果你希望做更加细粒度的控制,去看 manpage 。

你也可以额外设置一个 LANGUAGE,如果上述的 LANG 没有将其设置的话,因为使用 gettext 翻译的软件会按照 LANGUAGE 选择使用的语言。当然现在也不一定,在我常用的 Arch 和 Ubuntu 20.04 中,只设置 LANG 是可以给 LANGUAGE 提供默认值的。

不建议使用 LC_ALL,这个是为了测试和排错使用的临时值,尤其是它不能出现在 locale.conf 文件中。这个变量的值会覆盖掉 LANG 和所有 LC_* 变量的值,无论它们是否设置。

---

或者运行

``` sh
# localectl set-locale LANG=zh_CN.UTF-8
```

如果有 locale.alias 文件的话,理论上你也可以用别名,但考虑到不是所有系统都有,在此不作展开。
aristolochic
2021-10-16 11:32:39 +08:00
另外再提一句,如果你的系统有奇怪的 pam 的话,pam_environment 是有可能覆盖 locale.conf 设置的本地化相关环境变量的。如果有 X 相关的东西的话,那更加有可能被 DE/DM 覆盖,这个就得自己找了,先看看 xinitrc,再看看 DM,再看看 DE 。
billlee
2021-10-16 11:49:45 +08:00
在 ~/.profile 里设置是正规的做法,linux 本来就可以不同用户有不同 locale.
liuxu
2021-10-16 16:25:06 +08:00
debian 一般默认是安装好了 locale 包的

1. 查看当前 locale 以及系统支持的语言
# locale
# localectl list-localesC.UTF-8
en_US.UTF-8
很明显此时你没有 zh_CN.UTF-8

2. 取消 /etc/locale.gen 中的“zh_CN.UTF8 UTF8”的注释,并让系统加载
# vim /etc/locale.gen
# locale-gen

3. 此时可以看到已经有了 zh_CN.UTF-8
root@li1604-45:~# localectl list-locales
C.UTF-8
en_US.UTF-8
zh_CN.UTF-8

4. 使用 zh_CN.UTF-8
# localectl set-locale zh_CN.UTF-8

5. 重新 ssh 登录,此时环境变量全部 zh_CN.UTF-8
root@li1604-45:~# locale
LANG=zh_CN.UTF-8
LANGUAGE=
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=


6.一般情况你还需要手动设置 LC_ALL,所以在~/.bashrc 里面添加
LC_ALL=zh_CN.UTF-8

然后加载
# source ~/.bashrc
liuxu
2021-10-16 16:27:27 +08:00
1 中排版有问题,更正一下:

1. 查看当前 locale 以及系统支持的语言
# locale
# localectl list-locales
C.UTF-8
en_US.UTF-8
很明显此时你没有 zh_CN.UTF-8
ZeroDu
2021-10-18 10:46:49 +08:00
同样遇到了,我直接换成英文的了
cstj0505
2021-10-18 17:16:48 +08:00
命令行中文觉得有点别扭

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/808156

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX