NixOS:如何精细地配置区域设置?

时间:2019-10-03 03:20:02

标签: locale nixos

在运行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中设置粒度语言环境信息的正确方法吗?如果不是,那是什么?

2 个答案:

答案 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上,如上所示。