![喘息的语言环境问题 - gnome-control-center 区域因段错误而崩溃](https://linux22.com/image/20206/%E5%96%98%E6%81%AF%E7%9A%84%E8%AF%AD%E8%A8%80%E7%8E%AF%E5%A2%83%E9%97%AE%E9%A2%98%20-%20gnome-control-center%20%E5%8C%BA%E5%9F%9F%E5%9B%A0%E6%AE%B5%E9%94%99%E8%AF%AF%E8%80%8C%E5%B4%A9%E6%BA%83.png)
在过去的几天里,我的所在地遇到了严重的问题。我通常是“en_GB.UTF-8”。运行 apt 时突然出现错误消息:
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 33, in <module>
from ALChacks import *
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module>
sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
NameError: name '_' is not defined
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en_gb",
LC_MONETARY = "en_gb",
LC_MEASUREMENT = "en_gb",
LC_NUMERIC = "en_gb",
LANG = "en_US.utf8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale. at /usr/share/perl5/Debconf/FrontEnd /Gnome.pm line 97, <> line 1.
另外,如果我尝试运行“gnome-control-center区域”,它要么出现段错误,要么出现GUI,但如果我尝试设置任何内容,它就会出现段错误。请注意错误消息中的“en_gb” - 小写“GB”是非法的。另外,我认为 en_US 甚至不作为我的系统上的语言环境存在。当我登录时,一个对话框询问我是否要将目录重命名为“我的语言已更改” - 有点令人不安。我认为它是在更新后开始的,但我确实尝试从 sid 安装 gnome-shell 3.2 (因为我错误地认为它很容易满足其依赖项,并且想要使用 gnome 扩展)。我把它卷了回去,但这会不会导致某些东西变形呢?如果是这样我应该重新安装什么?
/usr/bin/locale 的输出:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=en_gb
LC_TIME=en_gb
LC_COLLATE="en_US.utf8"
LC_MONETARY=en_gb
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=en_gb
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
语言环境 -a 的输出:
C
C.UTF-8
en_GB
en_GB.iso88591
en_GB.utf8
POSIX
答案1
区域设置定义会占用大量磁盘空间(如果将所有可用的不同区域设置相加),因此 Debian 和其他发行版会根据请求生成它们。在 Debian 上,运行dpkg-reconfigure locales
(以 root 身份)并选择您感兴趣的区域设置。请确保选中该框(以及您使用时的en_US.utf8
其他变体)。en_US
此外,某些类别奇怪地声明为en_gb
;en_gb
在配置文件 ( ) 中搜索该字符串grep -r en_gb ~/.[!.]* /etc
并修复有问题的文件。
答案2
终于找到了“en_gb”的来源。 Ran dconf(新的 gconf2 风格的 gnome 配置替换。我应该之前检查过这些设置:-)。在系统->区域设置下,瞧!看哪!就是这样。我将其更改为“en_GB”并重新启动了 Gnome 会话。现在 /usr/bin/locale 的输出与预期完全一致,没有小写语言环境,也没有虚假的 en_US 语言环境。不知道 dconf 设置是如何被错误设置的。我当然不记得自己做过这件事,也想不出为什么我想改变它。 “gnome-control-center区域”现在也工作得很好。没有段错误,一切似乎都工作正常。有点破旧,一个不存在的区域导致它摔倒,当然,更优雅地失败并可能提供一条信息丰富的消息不会太难。感谢吉尔斯的有用建议 - 他对配置方面的看法是正确的,我不知道我是如何错过的。必须看看 dconf 数据是如何实际存储的。