mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-11 04:05:40 +03:00
i18n: Add charset related settings (#408307)
This commit is contained in:
commit
a4e8e74c36
4 changed files with 87 additions and 15 deletions
|
@ -374,6 +374,7 @@
|
||||||
- `i18n.extraLocales` should now be the preferred way to install additional locales.
|
- `i18n.extraLocales` should now be the preferred way to install additional locales.
|
||||||
- `i18n.supportedLocales` is now considered an implementation detail and will be hidden from the documentation. But the option will still continue to work.
|
- `i18n.supportedLocales` is now considered an implementation detail and will be hidden from the documentation. But the option will still continue to work.
|
||||||
- `i18n.supportedLocales` will now trigger a warning when it omits any locale set in `i18n.defaultLocale`, `i18n.extraLocales` or `i18n.extraLocaleSettings`.
|
- `i18n.supportedLocales` will now trigger a warning when it omits any locale set in `i18n.defaultLocale`, `i18n.extraLocales` or `i18n.extraLocaleSettings`.
|
||||||
|
- The options `i18n.defaultCharset` & `i18n.localeCharsets` were added, and they complement `i18n.defaultLocale` & `i18n.extraLocaleSettings` respectively - allowing to control the character set used per locale setting.
|
||||||
|
|
||||||
- `titaniumenv`, `titanium`, and `titanium-alloy` have been removed due to lack of maintenance in Nixpkgs []{#sec-nixpkgs-release-25.05-incompatibilities-titanium-removed}.
|
- `titaniumenv`, `titanium`, and `titanium-alloy` have been removed due to lack of maintenance in Nixpkgs []{#sec-nixpkgs-release-25.05-incompatibilities-titanium-removed}.
|
||||||
|
|
||||||
|
|
|
@ -5,15 +5,19 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
sanitizeUTF8Capitalization =
|
||||||
|
lang: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] lang);
|
||||||
aggregatedLocales =
|
aggregatedLocales =
|
||||||
(builtins.map
|
[
|
||||||
(l: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] l) + "/UTF-8")
|
"${config.i18n.defaultLocale}/${config.i18n.defaultCharset}"
|
||||||
(
|
]
|
||||||
[ config.i18n.defaultLocale ]
|
++ lib.pipe config.i18n.extraLocaleSettings [
|
||||||
++ (lib.optionals (builtins.isList config.i18n.extraLocales) config.i18n.extraLocales)
|
(lib.mapAttrs (n: v: (sanitizeUTF8Capitalization v)))
|
||||||
++ (lib.attrValues (lib.filterAttrs (n: v: n != "LANGUAGE") config.i18n.extraLocaleSettings))
|
(lib.mapAttrsToList (LCRole: lang: lang + "/" + (config.i18n.localeCharsets.${LCRole} or "UTF-8")))
|
||||||
)
|
]
|
||||||
)
|
++ (builtins.map sanitizeUTF8Capitalization (
|
||||||
|
lib.optionals (builtins.isList config.i18n.extraLocales) config.i18n.extraLocales
|
||||||
|
))
|
||||||
++ (lib.optional (builtins.isString config.i18n.extraLocales) config.i18n.extraLocales);
|
++ (lib.optional (builtins.isString config.i18n.extraLocales) config.i18n.extraLocales);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
@ -48,16 +52,24 @@ in
|
||||||
default = "en_US.UTF-8";
|
default = "en_US.UTF-8";
|
||||||
example = "nl_NL.UTF-8";
|
example = "nl_NL.UTF-8";
|
||||||
description = ''
|
description = ''
|
||||||
The default locale. It determines the language for program
|
The default locale. It determines the language for program messages,
|
||||||
messages, the format for dates and times, sort order, and so on.
|
the format for dates and times, sort order, and so on. Setting the
|
||||||
It also determines the character set, such as UTF-8.
|
default character set is done via {option}`i18n.defaultCharset`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
defaultCharset = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "UTF-8";
|
||||||
|
example = "ISO-8859-8";
|
||||||
|
description = ''
|
||||||
|
The default locale character set.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
extraLocales = lib.mkOption {
|
extraLocales = lib.mkOption {
|
||||||
type = lib.types.either (lib.types.listOf lib.types.str) (lib.types.enum [ "all" ]);
|
type = lib.types.either (lib.types.listOf lib.types.str) (lib.types.enum [ "all" ]);
|
||||||
default = [ ];
|
default = [ ];
|
||||||
example = [ "nl_NL.UTF-8" ];
|
example = [ "nl_NL.UTF-8/UTF-8" ];
|
||||||
description = ''
|
description = ''
|
||||||
Additional locales that the system should support, besides the ones
|
Additional locales that the system should support, besides the ones
|
||||||
configured with {option}`i18n.defaultLocale` and
|
configured with {option}`i18n.defaultLocale` and
|
||||||
|
@ -74,9 +86,24 @@ in
|
||||||
LC_TIME = "de_DE.UTF-8";
|
LC_TIME = "de_DE.UTF-8";
|
||||||
};
|
};
|
||||||
description = ''
|
description = ''
|
||||||
A set of additional system-wide locale settings other than
|
A set of additional system-wide locale settings other than `LANG`
|
||||||
`LANG` which can be configured with
|
which can be configured with {option}`i18n.defaultLocale`. Note that
|
||||||
{option}`i18n.defaultLocale`.
|
the `/UTF-8` suffix used in {option}`i18n.extraLocales` indicates a
|
||||||
|
character set, and it must not be added manually here. To use a
|
||||||
|
non-`UTF-8` character set such as ISO-XXXX-8, the
|
||||||
|
{option}`i18n.localeCharsets` can be used.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
localeCharsets = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
default = { };
|
||||||
|
example = {
|
||||||
|
LC_MESSAGES = "ISO-8859-15";
|
||||||
|
LC_TIME = "ISO-8859-1";
|
||||||
|
};
|
||||||
|
description = ''
|
||||||
|
Per each {option}`i18n.extraLocaleSettings`, choose the character set
|
||||||
|
to use for it. Essentially defaults to UTF-8 for all of them.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -994,6 +994,7 @@ in
|
||||||
orthanc = runTest ./orthanc.nix;
|
orthanc = runTest ./orthanc.nix;
|
||||||
owncast = handleTest ./owncast.nix { };
|
owncast = handleTest ./owncast.nix { };
|
||||||
outline = handleTest ./outline.nix { };
|
outline = handleTest ./outline.nix { };
|
||||||
|
i18n = runTest ./i18n.nix;
|
||||||
image-contents = handleTest ./image-contents.nix { };
|
image-contents = handleTest ./image-contents.nix { };
|
||||||
openvscode-server = handleTest ./openvscode-server.nix { };
|
openvscode-server = handleTest ./openvscode-server.nix { };
|
||||||
open-webui = runTest ./open-webui.nix;
|
open-webui = runTest ./open-webui.nix;
|
||||||
|
|
43
nixos/tests/i18n.nix
Normal file
43
nixos/tests/i18n.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
name = "glibLocales-custom-builds";
|
||||||
|
meta.maintainers = with lib.maintainers; [ doronbehar ];
|
||||||
|
|
||||||
|
nodes = {
|
||||||
|
nonUTF8Charset = {
|
||||||
|
i18n = {
|
||||||
|
defaultLocale = "en_US";
|
||||||
|
defaultCharset = "ISO-8859-1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraLocales1 = {
|
||||||
|
i18n = {
|
||||||
|
defaultLocale = "en_US.UTF-8";
|
||||||
|
extraLocales = [
|
||||||
|
"nl_NL.UTF-8/UTF-8"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraLocaleSettings = {
|
||||||
|
i18n = {
|
||||||
|
defaultLocale = "en_US.UTF-8";
|
||||||
|
extraLocaleSettings = {
|
||||||
|
LC_MESSAGES = "en_US.UTF-8";
|
||||||
|
LC_TIME = "de_DE.UTF-8";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
localeCharsets = {
|
||||||
|
i18n = {
|
||||||
|
defaultLocale = "en_US.UTF-8";
|
||||||
|
extraLocaleSettings = {
|
||||||
|
LC_TIME = "de_DE";
|
||||||
|
};
|
||||||
|
localeCharsets = {
|
||||||
|
LC_TIME = "ISO-8859-1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testScript = { nodes, ... }: "";
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue