选项1

选项1

每当我为 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,只需执行以下操作:

  1. nix-env -iA nixpkgs.glibcLocales

  2. 在你的 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/.profileand/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/.profileand/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/.profileand/or~/.bashrc/和/or中~/.zshrc,使其始终设置在您的 shell 中:

export LOCALE_ARCHIVE="$(nix profile list | grep glibcLocales | tail -n1 | cut -d ' ' -f4)/lib/locale/locale-archive"

相关内容