debian11 zsh 设置中文无效

就那样吧。我有了思路准备暑假开始干活,用hackrf配合计算机系统实现对应的歌词显示对应的应援色。实现效果:START:DASH!! - µ's [FULL ENG/ROM LYRICS + COLOR CODED] | Love Live! - YouTube
不知道你能不能上Youtube,看到我想整活的呈现效果。这个学期太忙了,根本没有时间来搞我想搞的东西。

1 个赞

wiki 似乎有一些有用的信息,但是其中提到的 /etc/default/locale/etc/locale.gen 均正常

你用文本编辑器在bashrc里面搜索一下en_US.UTF-8看看有没有环境变量override。

不行,搜不到
另外我日常用 zsh (已测试 bashzsh 均为英文)

/etc 和 ~ 下多找找?

麻烦看一下这位博主的文章,我觉得他讲得很清楚:

1 个赞

我看了,但是他似乎没有提到怎么修改

你说终端是无效的指的是,桌面环境下终端模拟器里无效吗?

是的,桌面环境是正常的

那你可能是 shell 的配置上把 LANG 这个环境变量改了

dpkg-reconfigure locales 应该是配置系统全局的语言设置,这个设置中文会使得在 tty 中使用中文。一般这个会设置成英文,因为 tty 中无法显示中文字体。

桌面环境启动的时候会带一个 LANG 环境变量(覆盖系统配置的 locale),以控制运行在桌面环境下的的程序使用对应的语言。

目前来看到桌面环境为止都是对的(你桌面环境是中文),只有终端是英文,说明你的 shell 配置覆盖掉了桌面环境的配置的 LANG

但是我看了 bashzsh 的配置,没看到什么语言相关的

大概就是在这个范围了。

不过我的机子上默认情况下是没有 LC_ALL 这个变量的。但是我看到你的 locale 输出是有这个变量的,鉴于你是手动 export LANGUAGE 都没用,应该是这个 LCD_ALL 被设置为 enUS 的问题。定位下在哪里设置了这个变量

这就是现在主要的问题了,排查了很久一直不知道是哪里影响了 LC_ALL

LC_ALL优先级是最高的。
grep搜索一下吧。

etc 里面搜吗?

❯ sudo grep -r -n LC_ALL /etc/
/etc/init.d/x11-common:57:    case "$(LC_ALL=C stat -c '%u %g %a %F' "$DIR")" in
/etc/init.d/cron:44:         for var in LANG LANGUAGE LC_ALL LC_CTYPE; do
/etc/grub.d/20_linux_xen:36:  CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
/etc/grub.d/30_os-prober:162:  CLASS="--class $(echo "${LABEL}" | LC_ALL=C sed 's,[[:digit:]]*$,,' | cut -d' ' -f1 | tr 'A-Z' 'a-z' | LC_ALL=C sed 's,[^[:alnum:]_],_,g')"
/etc/grub.d/10_linux:48:  CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"

在你可能修改过的所有文件里搜索。
这些都不是,从你上面给出的配置看,LC_ALL被赋值为en_US.UTF-8了。

破案了,都是 zsh 的锅
~/.zshrc 里面设置了语言为英文 :sweat_smile:

那是你自己配置的锅。这锅 zsh 可不背。

真无语,浪费时间。

不是,我刚换电脑,这应该是zsh的默认配置