如何修复Perl中的本地设置警告

822
当我运行perl时,出现以下警告信息:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
如何解决?

当您检查了区域设置,就像错误消息告诉您的那样,发生了什么情况? - brian d foy
4
不必安装本地化设置,您也可以更改本地化设置。在我的Ubuntu电脑上,通过编辑“~/.pam_environment”为一个用户完成此操作。 - Janus Troelsen
在我的运行Ubuntu的ODROID-C1上,问题确实是~/.pam_environment文件。其中一些变量是es_US.UTF-8而不是en_US.UTF-8。谢谢。 - f1vefour
1
我在Cygwin\Babun上遇到了这个问题。只有重新安装perl才解决了它。 - Lucas Soares
48个回答

3
在使用英国键盘和区域设置的Arch Linux上,我遇到了以下错误:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.utf8"
  • /etc/profile中导出我的本地语言设置并没有解决问题。

  • 然而,我通过编辑/etc/locale.gen来解决这个问题,同时启用了en_US.utf8语言环境,这是perl期望找到的,并运行local-gen

(我使用pac-manager,它使用了很多来自AURperl模块,因此在我的情况下重新安装perl会很麻烦。)


3
在我的情况下,这是输出内容:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....

解决方案是:

sudo locale-gen ro_RO.UTF-8

我还看到 LANGUAGE = (unset),但没有 locale-gen 命令。 - PatS

3
LC_ALL="en_GB.utf8"添加到/etc/environment中,然后重新启动。就这些。

3

3
perl -e exit
sudo localedef -i en_US -f UTF-8 en_DE.UTF-8
#                                   DE = German
# Use your country code en lieu of  DE

# The second "perl" should then not complain any more
perl -e exit

localectl list-locales # Just make sure it is OK

请注意,之后您可能会遇到以下问题:“kwin_xkbcommon:XKB:在KDE上找不到区域设置“en_DE.UTF-8”的组合文件”,但Perl对此非常满意。 - dotbit
谢谢您的这篇文章。对我来说,奇怪的是,在运行与我的登录有关的任何perl命令之前,在我的.bashrc中设置环境变量并没有起作用。这个解决方案确实起作用了,所以非常感谢。 - PatS

3
在我的情况下,使用Debian 8.6 (Jessie),我需要更改以下设置:
/etc/ssh/ssh_config` for `#AcceptEnv LANG LC_*

并且

sshd_config用于#SendEnv LANG LC_*

然后重新启动ssh服务。

最后,我执行了:

locale-gen en_US.UTF-8dpkg-reconfigure locales


2

一如既往,细节决定成败...

Mac OS X v10.7.5(Lion)上,为了解决一些Django错误,在我的~/.bash_profile中设置了以下内容:

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

我使用Perl时长时间收到了这个警告。

我的错!我后来意识到,我的系统是en_US.UTF-8编码!我通过更改以下内容进行了修复:

export LANG=en_EN.UTF-8

为了

export LANG=en_US.UTF-8

2

之前的答案都是错误的。信息很明显——缺少区域设置。解决方法是添加适当的区域设置。您可以通过编辑/etc/locale.gen文件来实现,删除报告缺失区域设置的#号,然后发出以下命令:

$ sudo locale-gen

这将实际生成/etc/locale.gen中指定的语言环境,因此不会显示消息。

这只是最佳答案,并且在我古老的Debian(6)上运行良好。所有其他方法都过于复杂且有些偏离轨道。 - Dave Everitt

2

我有多个用户使用不同的shell,因此在我的情况下,这样解决了问题:

  • 检查使用的shell
    echo $0
  • 如果是bash
    echo "# 设置地区信息\nLC_CTYPE=en_US.UTF-8\nLC_ALL=en_US.UTF-8" >> .bashrc
  • 如果是zsh
    echo "# 设置地区信息\nLC_CTYPE=en_US.UTF-8\nLC_ALL=en_US.UTF-8" >> .zshrc

2
如果您在MacOS上使用iTerm2,则可以通过取消选中此设置来解决此问题:iTerm2 > 设置 > 概要 > 终端 > 自动设置区域变量。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接