Jump to content

Locales: Difference between revisions

From NixOS Wiki
Roland (talk | contribs)
Document Locales with nix profile
Jooooscha (talk | contribs)
Add a note about the syntactic differences in setting the supported locales and the extra locale settings
Line 1: Line 1:
== Notes when setting supportedLocales and extraLocaleSettings ==
Beaware when setting up your locale variables. The setting <code>i18n.supportedLocales</code> requires a different format to <code>i18n.extraLocaleSettings</code>.
The setting <code>i18n.supportedLocales</code> requries the requires the language string '''with''' the added <code>/UTF-8</code>
<syntaxhighlight lang="bash">
"en_US.UTF-8/UTF-8"
"nl_NL.UTF-8/UTF-8"
</syntaxhighlight>
The setting <code>i18n.extraLocaleSettings</code>, however, requires the language string '''without''' any suffix.
<syntaxhighlight lang="bash">
LC_MESSAGES = "en_US.UTF-8"
LC_TIME = "de_DE.UTF-8"
</syntaxhighlight>Otherwise, your locale settings will likely not work.
== Troubleshooting when using nix on non-NixOS linux distributions ==
== Troubleshooting when using nix on non-NixOS linux distributions ==



Revision as of 22:55, 21 January 2025

Notes when setting supportedLocales and extraLocaleSettings

Beaware when setting up your locale variables. The setting i18n.supportedLocales requires a different format to i18n.extraLocaleSettings.

The setting i18n.supportedLocales requries the requires the language string with the added /UTF-8

"en_US.UTF-8/UTF-8"
"nl_NL.UTF-8/UTF-8"

The setting i18n.extraLocaleSettings, however, requires the language string without any suffix.

LC_MESSAGES = "en_US.UTF-8"
LC_TIME = "de_DE.UTF-8"

Otherwise, your locale settings will likely not work.

Troubleshooting when using nix on non-NixOS linux distributions

You may need to set the environmental variable LOCALE_ARCHIVE to point to your system's locale-archive. The following can be added to your .zshenv (zsh) or .profile (bash) and applies to Debian, Red Hat, and Arch derivatives:

export LOCALE_ARCHIVE=/usr/lib/locale/locale-archive

And if that file from the local system is somehow broken:

# May require a one-time installation with:
nix profile install nixpkgs#glibcLocales
# Using nix profile
export LOCALE_ARCHIVE="$(nix profile list --json | jq '.elements[] | select(.attrPath? and (.attrPath | type == "string") and (.attrPath | endswith("glibcLocales"))) | .storePaths[0]')/lib/locale/locale-archive"

# Legacy usage with `nix-env`: May require a one-time installation with: nix-env -iA nixpkgs.glibcLocales
export LOCALE_ARCHIVE="$(nix-env --installed --no-name --out-path --query glibc-locales)/lib/locale/locale-archive"

Enable locale support in Nix shell

To support locales within a Nix shell, for example to get localised command output, you need to do something similar:

pkgs.mkShell {
  # [other code omitted]
  LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive";
}