是什么导致 debian 中的语言环境问题?

是什么导致 debian 中的语言环境问题?

我的问题不是如何修复它,而是关于在执行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-genlocaledef是 Debian 特定的配置文件包装脚本/etc/locale.gendpkg-reconfigure locales更新/etc/locale.gen然后只需调用locale-gen.

请注意,Ubuntu 有相同的命令locale-gen,但其实现似乎与 Debian 有很大不同。它可以查看/var/lib/locales/supported.d/配置,但dpkg-reconfigure locales对 Ubuntu 没有影响。也可以看看社区 wiki 说明

与语言环境相关的变量由各种程序在您的环境中显式或隐式设置。它们通常由pam_env.sowith/etc/default/locale~/.pam_environment在会话开始时初始化。更值得注意的是,ssh在 Debian/Ubuntu 中,默认情况下会自动将本地区域设置发送到远程主机会话。您可以/etc/ssh/ssh_configssh_config手册页中看到以下行。

    SendEnv LANG LC_*

相关内容