我的问题不是如何修复它,而是关于在执行apt-get install
.我发现解决这个问题最简单的方法是:
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen
dpkg-reconfigure locales
完成此操作后,apt-get install --reinstall
不再发出有关未设置区域设置的警告。
我想知道是什么原因导致这个问题?我是在全新安装后发生的。为了测试目的,我在虚拟框中进行了大量安装。而且每次安装都有这个问题。而且,重启后问题又回来了? ubuntu上也有这种情况。
那么,谁能告诉我是什么导致了区域设置问题?
答案1
众所周知,当 Perl 在启动时无法在您在环境变量(和其他变量)中指定的语言环境中找到已编译的语言环境数据时,它会/usr/lib/locale/.../
大声/usr/lib/locale/locale-archive
抱怨LANG
。它很容易重现,如下所示:
$ LANG=xyz perl /dev/null
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ja_JP.UTF-8",
LC_ADDRESS = "ja_JP.UTF-8",
LC_MONETARY = "ja_JP.UTF-8",
LC_NUMERIC = "ja_JP.UTF-8",
LC_TELEPHONE = "ja_JP.UTF-8",
LC_IDENTIFICATION = "ja_JP.UTF-8",
LC_MEASUREMENT = "ja_JP.UTF-8",
LC_TIME = "ja_JP.UTF-8",
LC_NAME = "ja_JP.UTF-8",
LANG = "xyz"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
因此,基本上,当您看到上面的警告时,您应该检查系统中的可用区域设置以及环境变量中的区域设置。
您可以使用locale -a
查看所有可用的语言环境,或localedef
列出/添加/删除locale-archive
.
$ localedef --list-archive
en_US.utf8
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
locale-gen
localedef
是 Debian 特定的配置文件包装脚本/etc/locale.gen
。 dpkg-reconfigure locales
更新/etc/locale.gen
然后只需调用locale-gen
.
请注意,Ubuntu 有相同的命令locale-gen
,但其实现似乎与 Debian 有很大不同。它可以查看/var/lib/locales/supported.d/
配置,但dpkg-reconfigure locales
对 Ubuntu 没有影响。也可以看看社区 wiki 说明。
与语言环境相关的变量由各种程序在您的环境中显式或隐式设置。它们通常由pam_env.so
with/etc/default/locale
或~/.pam_environment
在会话开始时初始化。更值得注意的是,ssh
在 Debian/Ubuntu 中,默认情况下会自动将本地区域设置发送到远程主机会话。您可以/etc/ssh/ssh_config
在ssh_config
手册页中看到以下行。
SendEnv LANG LC_*