在运行NixOS 19.03的家用笔记本电脑上,在/etc/nixos/configuration.nix
中,我使用默认的语言环境设置:
i18n = {
consoleFont = "Lat2-Terminus16";
consoleKeyMap = "us";
defaultLocale = "en_US.UTF-8";
};
那是我知道的在NixOS中控制语言环境设置的唯一方法,而且它太广泛了。我想要更精细的控制,以便可以混合使用美国英语和哥伦比亚西班牙语。 (这是我工作的结果,而不是个人选择。)特别是,我需要以下设置:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=es_CO.UTF-8
LC_TIME=es_CO.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=es_CO.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=es_CO.UTF-8
LC_NAME=es_CO.UTF-8
LC_ADDRESS=es_CO.UTF-8
LC_TELEPHONE=es_CO.UTF-8
LC_MEASUREMENT=es_CO.UTF-8
LC_IDENTIFICATION=es_CO.UTF-8
LC_ALL=
在我的工作台式机(运行Ubuntu 18.04)上,如果我用bash评估locale
,这就是我所看到的。在我的家庭NixOS系统上,这些变量中的每一个都设置为美式英语,或者什么都不设置:
[jeff@jbb-dell:~/nix-jbb]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
我想也许我应该编辑/etc/locale.conf
,然后将工作系统中的设置复制到其中。但是,当(在NixOS系统上)我将该文件打印到屏幕上时,除了LANG
之外,它不包含上述任何变量:
[jeff@jbb-dell:~/nix-jbb]$ cat /etc/locale.conf
LANG=en_US.UTF-8
[jeff@jbb-dell:~/nix-jbb]$
因此,其他变量,例如LC_NUMERIC
,必须在其他位置进行设置。我担心如果我编辑/etc/locale.conf
会破坏系统。编辑该文件是在NixOS中设置粒度语言环境信息的正确方法吗?如果不是,那是什么?
答案 0 :(得分:1)
选项i18n.extralocalesettings
是设置这些选项的位置。例如:
i18n.extraLocaleSettings = {
LC_MESSAGES = "en_US.UTF-8";
LC_TIME = "de_DE.UTF-8";
}
答案 1 :(得分:0)
我从未见过为此设置NixOS的设置,但是我想您可以通过以下方法解决此问题:
services.xserver.displayManager = {
sessionCommands = ''
export LC_NUMERIC=es_CO.UTF-8
export LC_TIME=es_CO.UTF-8
export LC_MONETARY=es_CO.UTF-8
export LC_PAPER=es_CO.UTF-8
export LC_NAME=es_CO.UTF-8
export LC_ADDRESS=es_CO.UTF-8
export LC_TELEPHONE=es_CO.UTF-8
export LC_MEASUREMENT=es_CO.UTF-8
export LC_IDENTIFICATION=es_CO.UTF-8
'';
};
这应该适用于所有本地(图形)会话。如果您也使用ssh访问此计算机,则可以将相同的导出也添加到~/.bashrc
如果您不想为所有用户设置设置,也可以将导出内容添加到~/.xession
而不是/etc/nixos/configuration.nix
上,如上所示。