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
相关产品推荐
相关产品推荐

