Nächste: Dienste, Vorige: Tastaturbelegung, Nach oben: Systemkonfiguration [Inhalt][Index]
Eine Locale legt die kulturellen Konventionen einer bestimmten Sprache
und Region auf der Welt fest (siehe Locales in Referenzhandbuch
der GNU-C-Bibliothek). Jede Locale hat einen Namen, der typischerweise von
der Form Sprache_Gebiet.Kodierung
– z.B.
benennt fr_LU.utf8
die Locale für französische Sprache mit den
kulturellen Konventionen aus Luxemburg unter Verwendung der UTF-8-Kodierung.
Normalerweise werden Sie eine standardmäßig zu verwendende Locale für die
Maschine vorgeben wollen, indem Sie das locale
-Feld der
operating-system
-Deklaration verwenden (siehe locale
).
Die ausgewählte Locale wird automatisch zu den dem System bekannten
Locale-Definitionen hinzugefügt, falls nötig, und ihre Kodierung wird
aus dem Namen hergeleitet – z.B. wird angenommen, dass
bo_CN.utf8
als Kodierung UTF-8
verwendet. Zusätzliche
Locale-Definitionen können im Feld locale-definitions
vom
operating-system
festgelegt werden – das ist zum Beispiel dann
nützlich, wenn die Kodierung nicht aus dem Locale-Namen hergeleitet werden
konnte. Die vorgegebene Menge an Locale-Definitionen enthält manche weit
verbreiteten Locales, aber um Platz zu sparen, nicht alle verfügbaren
Locales.
Um zum Beispiel die nordfriesische Locale für Deutschland hinzuzufügen, könnte der Wert des Feldes wie folgt aussehen:
(cons (locale-definition
(name "fy_DE.utf8") (source "fy_DE"))
%default-locale-definitions)
Um Platz zu sparen, könnte man auch wollen, dass locale-definitions
nur die tatsächlich benutzen Locales aufführt, wie etwa:
(list (locale-definition
(name "ja_JP.eucjp") (source "ja_JP")
(charset "EUC-JP")))
Die kompilierten Locale-Definitionen sind unter
/run/current-system/locale/X.Y verfügbar, wobei X.Y
die
Version von libc bezeichnet. Dies entspricht dem Pfad, an dem eine von Guix
ausgelieferte GNU libc standardmäßig nach Locale-Daten sucht. Er kann
überschrieben werden durch die Umgebungsvariable LOCPATH
(siehe
LOCPATH
und Locale-Pakete).
Die locale-definition
-Form wird vom Modul (gnu system locale)
zur Verfügung gestellt. Details folgen unten.
Dies ist der Datentyp einer Locale-Definition.
name
Der Name der Locale. Siehe Locale Names in Referenzhandbuch der GNU-C-Bibliothek für mehr Informationen zu Locale-Namen.
source
Der Name der Quelle der Locale. Typischerweise ist das der Teil
Sprache_Gebiet
des Locale-Namens.
charset
(Vorgabe: "UTF-8"
)Der „Zeichensatz“ oder das „Code set“, d.h. die Kodierung dieser Locale, wie die IANA sie definiert.
Eine Liste häufig benutzter UTF-8-Locales, die als Vorgabewert des
locale-definitions
-Feldes in operating-system
-Deklarationen
benutzt wird.
Diese Locale-Definitionen benutzen das normalisierte Codeset für den
Teil des Namens, der nach dem Punkt steht (siehe normalisiertes Codeset in Referenzhandbuch der
GNU-C-Bibliothek). Zum Beispiel ist uk_UA.utf8
enthalten, dagegen
ist etwa uk_UA.UTF-8
darin nicht enthalten.
operating-system
-Deklarationen verfügen über ein
locale-libcs
-Feld, um die GNU libc-Pakete anzugeben, die zum
Kompilieren von Locale-Deklarationen verwendet werden sollen (siehe
operating-system
-Referenz). „Was interessiert mich das?“, könnten Sie
fragen. Naja, leider ist das binäre Format der Locale-Daten von einer
libc-Version auf die nächste manchmal nicht miteinander kompatibel.
Zum Beispiel kann ein an die libc-Version 2.21 gebundenes Programm keine mit
libc 2.22 erzeugten Locale-Daten lesen; schlimmer noch, das Programm
terminiert, statt einfach die inkompatiblen Locale-Daten zu
ignorieren31. Ähnlich kann ein an libc 2.22 gebundenes Programm die
meisten, aber nicht alle, Locale-Daten von libc 2.21 lesen (Daten zu
LC_COLLATE
sind aber zum Beispiel inkompatibel); somit schlagen
Aufrufe von setlocale
vielleicht fehl, aber das Programm läuft
weiter.
Das „Problem“ mit Guix ist, dass Nutzer viel Freiheit genießen: Sie können wählen, ob und wann sie die Software in ihren Profilen aktualisieren und benutzen vielleicht eine andere libc-Version als sie der Systemadministrator benutzt hat, um die systemweiten Locale-Daten zu erstellen.
Glücklicherweise können „unprivilegierte“ Nutzer ohne zusätzliche
Berechtigungen dann zumindest ihre eigenen Locale-Daten installieren und
GUIX_LOCPATH
entsprechend definieren (siehe GUIX_LOCPATH
und Locale-Pakete).
Trotzdem ist es am besten, wenn die systemweiten Locale-Daten unter
/run/current-system/locale für alle libc-Versionen erstellt werden,
die auf dem System noch benutzt werden, damit alle Programme auf sie
zugreifen können – was auf einem Mehrbenutzersystem ganz besonders
wichtig ist. Dazu kann der Administrator des Systems mehrere libc-Pakete im
locale-libcs
-Feld vom operating-system
angeben:
(use-package-modules base) (operating-system ;; … (locale-libcs (list glibc-2.21 (canonical-package glibc))))
Mit diesem Beispiel ergäbe sich ein System, was Locale-Definitionen sowohl für libc 2.21 als auch die aktuelle Version von libc in /run/current-system/locale hat.
Versionen 2.23 von GNU libc und neuere werden inkompatible Locale-Daten nur mehr überspringen, was schon einmal eine Verbesserung ist.
Nächste: Dienste, Vorige: Tastaturbelegung, Nach oben: Systemkonfiguration [Inhalt][Index]