Hintergrundinformation
Ich habe die Lösung auf Fedora 21 mit GNOME Shell 3.14.4 getestet, glaube aber, dass sie auch auf andere Versionen angewendet werden kann.
Zunächst ist zu verstehen, dass die GNOME-Desktop-Umgebung die systemweiten Gebietsschemadefinitionen überschreibt und daher nicht davon betroffen ist /etc/locale.conf
. Darüber hinaus gibt es möglicherweise Anwendungen mit einer eigenen Ländereinstellungskonfiguration, die die System- oder GNOME-Einstellungen überhaupt nicht verwenden. In diesem Handbuch beschreibe ich eine Möglichkeit, die Gebietsschemaeinstellungen an Ihre Bedürfnisse und GNOME anzupassen, und das System wird aus der Perspektive des Gebietsschemas konsistent sein.
Überprüfen des aktuellen Gebietsschemastatus
Systemweite Einstellungen
Aus dem Fedora 21-Systemverwalterhandbuch :
Systemweite Gebietsschemaeinstellungen werden in der /etc/locale.conf
Datei gespeichert , die vom systemd- Daemon beim frühen Start gelesen wird . Die in konfigurierten Gebietsschemaeinstellungen /etc/locale.conf
werden von jedem Dienst oder Benutzer übernommen, es sei denn, einzelne Programme oder einzelne Benutzer überschreiben sie.
Um den aktuellen Gebietsschemastatus zu sehen, können wir Folgendes ausführen:
$ localectl status
System Locale: LANG=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
VC Keymap: us
X11 Layout: us
GNOME-Einstellungen
$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'
GNOME hat nur eine Einstellung. Ein kurzer Blick auf den Quellcode von gnome-control-center zeigt, dass beim set_localed_locale()
Aufruf der Funktion alle folgenden Kategorien (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) auf dasselbe Gebietsschema gesetzt werden, das in definiert istorg.gnome.system.locale region
.
Das Mischen verschiedener Gebietsschemaeinstellungen scheint unmöglich zu sein, ohne ein benutzerdefiniertes Gebietsschema zu erstellen, aber zum Glück ist es keine sehr komplexe Aufgabe.
Benutzerdefiniertes Gebietsschema erstellen
Ich denke, der einfachste Weg, das zu erklären, ist das Beispiel. In meinem speziellen Fall wollte ich ein benutzerdefiniertes Gebietsschema haben, das hauptsächlich auf Hebräisch ( he_IL ), aber mit LC_NAME, LC_MESSAGES von en_US und LC_TIME (mit modified first_weekday
und first_workday
) von en_GB basiert .
Abrufen von Definitionsdateien für das Gebietsschema
Sie sollten eine Idee haben, welche Locales Sie mischen möchten. Zuerst müssen wir die zugehörigen Definitionsdateien suchen, die in zu finden sind /usr/share/i18n/locales/
. In meinem Beispiel benötigte ich Folgendes: he_IL , en_US und en_GB . Ich habe in meinem Zuhause einen Arbeitsordner eingerichtet und die erforderlichen Dateien in diesen Ordner kopiert:
$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
Neue Definitionsdatei erstellen
Ich beschloss, mein Gebietsschema hc_IL zu nennen und nahm er_IL als Grundlage. Die folgenden Zeilen erstellen eine neue Datei, hc_IL
deren Inhalt von he_IL
und auf dem Weg alle Vorkommen einer Zeichenfolge he_IL in der Datei durch hc_IL ersetzen .
$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
Ändern der neuen Definitionsdatei
Jetzt können wir das neue Gebietsschema an unsere Bedürfnisse anpassen. Öffnen Sie die neu erstellte Datei ~/custom-locale/hc_IL
mit Ihrem bevorzugten Texteditor. Ich verwende vim (es hat die richtige Syntax-Hervorhebung für die Definitionsdateien des Gebietsschemas):
$ vim ~/custom-locale/hc_IL
Für diejenigen, die ihren Lieblingseditor noch nicht ausgewählt haben und vim nicht ihr Ding ist, kann gedit verwendet werden :)
$ gedit ~/custom-locale/hc_IL
Die Dateistruktur ist nicht sehr kompliziert. Im Wesentlichen besteht es aus Abschnitten. Aus locale (5) -Manpages:
Die Gebietsschemadefinition besteht aus einem Teil für jede Gebietsschemakategorie. Jeder Teil kann von einem anderen vorhandenen Gebietsschema kopiert oder von Grund auf neu definiert werden. Wenn die Kategorie kopiert werden soll, ist das einzige gültige Schlüsselwort in der Definition copy, gefolgt vom Namen des Gebietsschemas, das kopiert werden soll.
Der Begriff Kopie ist sehr nützlich. Das spart Zeit und die resultierende Datei ist klar und präzise. Anstatt beispielsweise ganze Abschnitte zu kopieren, haben Sie folgende Möglichkeiten:
LC_MESSAGES
copy "en_US"
END LC_MESSAGES
Auf die vollständige Dokumentation zu einer Gebietsschemadefinitionsdatei kann zugegriffen werden über:
$ man 5 locale
Wenn Sie jedoch nur ein benutzerdefiniertes Gebietsschema erstellen möchten, bei dem es sich um eine Mischung aus vorhandenen handelt, müssen Sie nicht jedes Detail verstehen.
In meinem Fall habe ich die folgenden Kategorien und Schlüsselwörter geändert:
LC_IDENTIFICATION
title "Custom Hebrew locale"
source "mydomain.ws"
address "http:////www.mydomain.ws"
contact ""
email "[email protected]"
tel ""
fax ""
language "Hebrew"
territory "Israel"
revision "1.0"
date "2015-04-21"
Hinweis: Alle " category .. " - Zeilen im Abschnitt LC_IDENTIFICATION wurden während der Dateierstellung mit geändert sed
. Wir müssen sie also nicht mehr berühren.
LC_TIME
Ich habe den gesamten Abschnitt von en_GB kopiert und nur die Zeilen geändert, die den ersten Wochentag und den ersten Arbeitstag angeben:
first_weekday 1
first_workday 1
Der Rest der Kategorien I belassen , wie sie sind oder ersetzt dessen Inhalt mit der Kopie Richtlinie wie in:
LC_NAME
copy "en_US"
END LC_NAME
Das war's, die Definitionsdatei ist fertig. Vergiss nicht die Datei zu speichern :)
Kompilieren und kopieren Sie das neue Gebietsschema
Die Kompilierung des neuen Gebietsschemas erfolgt mit dem folgenden Befehl als root oder mit sudo . Ersetzen Sie hc_IL
durch Ihr Gebietsschema:
$ sudo localedef -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8
Wenn die Kompilierung erfolgreich ist, werden die kompilierten Gebietsschemadaten zur Archivdatei hinzugefügt /usr/lib/locale/locale-archive
.
Kopieren Sie die neue Gebietsschemadefinitionsdatei in das Verzeichnis mit den Gebietsschemadefinitionen. Ersetzen Sie hc_IL
durch Ihr Gebietsschema:
$ sudo cp -v hc_IL /usr/share/i18n/locales/
Aktivieren des neuen Gebietsschemas
In diesem Schritt möchten wir das System und GNOME für die Verwendung des neuen Gebietsschemas konfigurieren.
Systemweite Einstellungen
Bearbeiten Sie die /etc/locale.conf
Datei als root und setzen Sie jede Zeile, die mit LC_
Ihrem neuen Gebietsschema beginnt . Beispielsweise:
LANG=en_US.UTF-8
LC_NUMERIC=hc_IL.utf8
LC_TIME=hc_IL.utf8
LC_MONETARY=hc_IL.utf8
LC_PAPER=hc_IL.utf8
LC_MEASUREMENT=hc_IL.utf8
GNOME-Einstellungen
Führen Sie den folgenden Befehl aus, um das neue Gebietsschema in GNOME zu aktivieren. Ersetzen Sie hc_IL
durch Ihr Gebietsschema:
$ gsettings set org.gnome.system.locale region "hc_IL.utf8"
Überprüfen der neuen Einstellungen
Der letzte Schritt besteht darin, zu überprüfen, ob alles wie erwartet funktioniert. Um alle Einstellungen neu zu laden, war es für mich am einfachsten, einen Neustart durchzuführen.
- Überprüfen Sie im Abschnitt "Überprüfen des aktuellen Gebietsschemastatus", ob die Systemkonfiguration korrekt ist.
Verwenden Sie von der GNOME-Shell und dem Gebietsschema abhängige Anwendungen (Grafik- und Konsolenanwendungen) und überprüfen Sie, ob sie sich mit dem neuen Gebietsschema wie erwartet verhalten. Wenn Sie beispielsweise LC_TIME angepasst haben, können Sie den date
Befehl ausführen , um das Datumsformat zu überprüfen :
$ date +%x
21/04/15
Hinweis: Alles wurde unter Fedora 21 mit GNOME 3.14 getestet. Andere Linux-Distributionen erfordern möglicherweise zusätzliche oder andere Schritte.
Bitte kommentieren Sie, wenn Sie Probleme mit der Anleitung haben.