NixOS:如何精细地配置语言环境设置?
NixOS: How to granularly configure locale settings?
在我的家用笔记本电脑 运行 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 中设置精细区域设置信息的正确方法?如果不是,那是什么?
我从来没有见过 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
,如上所示。
选项 i18n.extralocalesettings
是设置这些的地方。例如:
i18n.extraLocaleSettings = {
LC_MESSAGES = "en_US.UTF-8";
LC_TIME = "de_DE.UTF-8";
}
在我的家用笔记本电脑 运行 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 中设置精细区域设置信息的正确方法?如果不是,那是什么?
我从来没有见过 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
,如上所示。
选项 i18n.extralocalesettings
是设置这些的地方。例如:
i18n.extraLocaleSettings = {
LC_MESSAGES = "en_US.UTF-8";
LC_TIME = "de_DE.UTF-8";
}