每当我为 nix 包管理器运行命令(例如 nix-channel --update)时,我都会收到以下警告:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "",
LC_ALL = "en_US.UTF-8",
LC_CTYPE = "en_US.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
我怀疑它在某种程度上与 nix 有关,因为其他 perl 脚本没有显示这种行为(我尝试过perl -e exit
使用 WWW::Curl )。
更改区域设置确实会反映在警告的输出中,但我能想到的每种配置都会显示警告。
操作系统是openSUSE。
我能做些什么?
答案1
显然这是nix中的一个问题。有一个GitHub 上的问题与提议的解决方法通过设置LOCALE_ARCHIVE
变量。
如果你已经安装了 nix,只需执行以下操作:
nix-env -iA nixpkgs.glibcLocales
在你的 bash 配置文件中:
export LOCALE_ARCHIVE="$(nix-env --installed --no-name --out-path --query glibc-locales)/lib/locale/locale-archive"
(全部为一行)。
答案2
我export LC_ALL=C
实际上摆脱了警告。
这更多的是一种解决方法(因为 LC_ALL 也被强烈反对),但我的猜测是这种行为的原因在于 nix 对系统上的语言环境所做的假设不适用于 openSUSE。
答案3
在搜索过程中发现了这个并认为我会给出解决方案。
您只需在环境中提供LOCALE_ARCHIVE
指向locale-archive
.
选项1
使用以前安装的系统locale-archive
。
确保它确实存在
# should find the file
ls /lib/locale/locale-archive
将其添加到您的/etc/.profile
and/or~/.bashrc/
和/or中~/.zshrc
,使其始终设置在您的 shell 中:
export LOCALE_ARCHIVE="/lib/locale/locale-archive"
选项 2a:不支持 flake + 子命令
(来源:上述 cyraxjoehttps://unix.stackexchange.com/a/243189/119561)
从 nix 安装语言环境支持。
nix-env -iA nixpkgs.glibcLocales
确保您可以找到它:
# should give you a path to a folder in your /nix/store
nix-env --installed --no-name --out-path --query glibc-locales
# should find the file
ls $(nix-env --installed --no-name --out-path --query glibc-locales)/lib/locale/locale-archive
将其添加到您的/etc/.profile
and/or~/.bashrc/
和/or中~/.zshrc
,使其始终设置在您的 shell 中:
export LOCALE_ARCHIVE="$(nix-env --installed --no-name --out-path --query glibc-locales)/lib/locale/locale-archive"
选项 2b:带有 flake + 子命令支持
从 nix 安装语言环境支持。
nix profile install nixpkgs#glibcLocales
确保您可以找到它:
# should give you a path to a folder in your /nix/store
nix profile list | grep glibcLocales | tail -n1 | cut -d ' ' -f4
# should find the file
ls $(nix profile list | grep glibcLocales | tail -n1 | cut -d ' ' -f4)/lib/locale/locale-archive
将其添加到您的/etc/.profile
and/or~/.bashrc/
和/or中~/.zshrc
,使其始终设置在您的 shell 中:
export LOCALE_ARCHIVE="$(nix profile list | grep glibcLocales | tail -n1 | cut -d ' ' -f4)/lib/locale/locale-archive"