一天突然发现在 Konsole 里面列表文件夹内容的时候所有中文文件名里的汉字都变成了 ?
。也就是突然无法显示中文了。实在想不起来最近做了什么更改导致的,还以为是最近 openSUSE Tumbleweed 的更新出了什么问题。费了半天劲儿才发现是系统语言/区域设置出了问题。
然后紧接着又发现运行 sudo snapper ls
查看 BtrFS 系统快照的时候出错,提示,
Failed to set locale. Fix your system.
这下确定是系统的本地化语言配置出了故障了。也许是之前增加第二语言的时候弄坏了。
然后按照网上的提示运行指令检查 locale。
$ locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory ...
所以这更明确地说我的区域本地化设置有问题了。这还真是很出乎意料的事情,毕竟从来没想过一个系统的语言设置居然如此脆弱,可能是因为这个东西比我想象的要复杂太多了。其实还有另一个语言设置在 /etc/locale.conf
中。可惜的是我已经记不起来那个错误的样子了。
然后我就想,openSUSE 有 YaST 这个备受赞誉的图形化系统管理工具呢。然后就进去将主要语言设置改成另一种,等 YaST 完成任务之后重新打开,再改回自己需要的美国英语。然后似乎问题就解决了。
正确的应该是类似下面这个样子(这里个人桌面设置里的区域设置是英国英语)。
$ locale LANG=en_GB.UTF-8 LC_CTYPE=en_GB.UTF-8 LC_NUMERIC="en_GB.UTF-8" LC_TIME="en_GB.UTF-8" LC_COLLATE="en_GB.UTF-8" LC_MONETARY="en_GB.UTF-8" LC_MESSAGES="en_GB.UTF-8" LC_PAPER="en_GB.UTF-8" LC_NAME="en_GB.UTF-8" LC_ADDRESS="en_GB.UTF-8" LC_TELEPHONE="en_GB.UTF-8" LC_MEASUREMENT="en_GB.UTF-8" LC_IDENTIFICATION="en_GB.UTF-8" LC_ALL=
然后系统语言是,
$ cat /etc/locale.conf LANG=en_US.UTF-8
只能依稀记得出错的时候,这系统语言似乎是 GB 和 US 的混合。©
本文发表于水景一页。永久链接:<http://cnzhx.net/blog/break-then-fix-locale-setting-in-opensuse/>。转载请保留此信息及相应链接。
记得是要改两个地方。一个是local.conf,改完之后还要改另一个。
是命令行选[*],用debian时选了中文都是方框,改成en_us就好了。
具体改哪里还真是个问题,害怕需要改多个地方,所以就用系统自带的程序来弄了。
选了中文都是方框是不是因为没有安装中文字体或者是中文字体没有被加入通用的 sans-serif 或者 serif 属性?