You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NixOS添加多语言区域支持遇问题求助

NixOS添加第二语言后Perl locale设置失败问题排查

问题重现

使用最新稳定版NixOS,尝试通过configuration.nix的i18n.supportedLocales添加韩语支持,配置如下:

i18n.supportedLocales = [
  "ko_KR.UTF-8/UTF-8"
];

其余区域设置:

# Set your time zone.
time.timeZone = "Australia/Melbourne";

# Select internationalisation properties.
i18n.defaultLocale = "en_AU.UTF-8";

i18n.extraLocaleSettings = {
  LC_ADDRESS = "en_AU.UTF-8";
  LC_IDENTIFICATION = "en_AU.UTF-8";
  LC_MEASUREMENT = "en_AU.UTF-8";
  LC_MONETARY = "en_AU.UTF-8";
  LC_NAME = "en_AU.UTF-8";
  LC_NUMERIC = "en_AU.UTF-8";
  LC_PAPER = "en_AU.UTF-8";
  LC_TELEPHONE = "en_AU.UTF-8";
  LC_TIME = "en_AU.UTF-8";
};

执行sudo nixos-rebuild switch --flake .时,出现Perl locale错误:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_ADDRESS = "en_AU.UTF-8",
    LC_NAME = "en_AU.UTF-8",
    LC_MONETARY = "en_AU.UTF-8",
    LC_PAPER = "en_AU.UTF-8",
    LC_IDENTIFICATION = "en_AU.UTF-8",
    LC_TELEPHONE = "en_AU.UTF-8",
    LC_MEASUREMENT = "en_AU.UTF-8",
    LC_TIME = "en_AU.UTF-8",
    LC_NUMERIC = "en_AU.UTF-8",
    LANG = "en_AU.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
setting up /etc...
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_ADDRESS = "en_AU.UTF-8",
    LC_NAME = "en_AU.UTF-8",
    LC_MONETARY = "en_AU.UTF-8",
    LC_PAPER = "en_AU.UTF-8",
    LC_IDENTIFICATION = "en_AU.UTF-8",
    LC_TELEPHONE = "en_AU.UTF-8",
    LC_MEASUREMENT = "en_AU.UTF-8",
    LC_TIME = "en_AU.UTF-8",
    LC_NUMERIC = "en_AU.UTF-8",
    LANG = "en_AU.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

解决方案

1. 包含默认locale到supportedLocales

当前仅配置了韩语locale,但系统默认的en_AU.UTF-8未被加入supportedLocales,导致系统未生成该locale的相关文件,Perl调用时找不到对应资源而报错。修改配置:

i18n.supportedLocales = [
  "en_AU.UTF-8/UTF-8"
  "ko_KR.UTF-8/UTF-8"
];

2. 配置LANGUAGE环境变量

错误提示LANGUAGE = (unset),这会影响locale的加载优先级。在extraLocaleSettings中添加该变量:

i18n.extraLocaleSettings = {
  LC_ADDRESS = "en_AU.UTF-8";
  LC_IDENTIFICATION = "en_AU.UTF-8";
  LC_MEASUREMENT = "en_AU.UTF-8";
  LC_MONETARY = "en_AU.UTF-8";
  LC_NAME = "en_AU.UTF-8";
  LC_NUMERIC = "en_AU.UTF-8";
  LC_PAPER = "en_AU.UTF-8";
  LC_TELEPHONE = "en_AU.UTF-8";
  LC_TIME = "en_AU.UTF-8";
  LANGUAGE = "en_AU:ko_KR"; # 新增:优先英文,其次韩语
};

3. 强制生成locale缓存(可选)

如果重建系统后问题依旧,手动执行以下命令生成完整的locale缓存:

sudo locale-gen

原因说明

NixOS通过i18n.supportedLocales指定需要预生成的locale文件,未在列表中的locale不会被系统构建。之前的配置仅生成了韩语locale,而默认的en_AU.UTF-8缺失,导致Perl无法加载对应的locale数据,最终触发警告。

内容的提问来源于stack exchange,提问作者Ethan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:00:35