
Ich habe meine eigenen benutzerdefinierten locale
Variablen erstellt und in die Variablen eingefügt /etc/locale.conf
, die erfolgreich wirksam werden, wenn ich mich an einer virtuellen Konsole anmelde (Strg+Alt+F2). In meiner Gnome3-Sitzung sind diese Variablen jedoch nicht festgelegt. Für Terminalanwendungen könnte ich sie einfach in die Variablen einfügen, .bashrc
aber das hilft mir bei grafischen Anwendungen wie Thunderbird und Pidgin nicht weiter.
Ich habe versucht, diese Hinweise zu befolgen:Gebietsschemaeinstellungen bei der Shell-Initialisierung werden von der GNOME-Sitzung nicht verwendetund emulierte sogar den Fehler inGebietsschema – ArchWikidurch Erstellen einer .pam_environment
Datei, aber die locale
s sind immer noch die von Gnome3 festgelegten. In den Gnome-Einstellungen gibt es einen Konfigurationsdialog, der jedoch nur die Festlegung einer sehr begrenzten Anzahl vordefinierter locale
Kombinationen erlaubt und keine Möglichkeit bietet, diese anzupassen.
Die relevanten Dateien in meinem Home-Verzeichnis:
user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc
lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf
lrwxrwxrwx. 1 user user 9 13. Jun 11:22 .xsessionrc -> .xsession
-rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile
user@localhost:~$ cat .profile
source /etc/locale.conf
Die Inhalte von /etc/locale.conf
:
LANG="en_US.utf8"
LC_TIME="de_MY.utf8" # NB: de_MY
LC_MONETARY="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
Weiß jemand, wie man locale
in Gnome3 benutzerdefinierte Zeichensätze einstellt?
Antwort1
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 muss klar sein, dass die GNOME-Desktopumgebung die systemweiten Gebietsschemadefinitionen überschreibt und daher nicht davon betroffen ist /etc/locale.conf
. Darüber hinaus gibt es möglicherweise Anwendungen, die ihre eigene Gebietsschemakonfiguration haben und die System- oder GNOME-Einstellungen überhaupt nicht verwenden. In dieser Anleitung beschreibe ich eine Möglichkeit, die Gebietsschemaeinstellungen an Ihre Bedürfnisse anzupassen, damit GNOME und das System aus der Gebietsschemaperspektive konsistent sind.
Überprüfen des aktuellen Gebietsschemastatus
Systemweite Einstellungen
AusFedora 21 - Handbuch für Systemadministratoren:
Systemweite Gebietsschemaeinstellungen werden in der
/etc/locale.conf
Datei gespeichert, die beim frühen Booten vomsystemdDaemon. Die in konfigurierten Gebietsschemaeinstellungen/etc/locale.conf
werden von jedem Dienst oder Benutzer übernommen, sofern sie nicht von einzelnen Programmen oder Benutzern überschrieben werden.
Um den aktuellen Gebietsschemastatus anzuzeigen, 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 dieQuellcode des Gnome-Control-Centerses scheint, dass beim set_localed_locale()
Aufrufen der Funktion alle folgenden Kategorien (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) auf dasselbe in definierte Gebietsschema gesetzt werden org.gnome.system.locale region
.
Das Mischen unterschiedlicher Gebietsschemaeinstellungen scheint ohne die Erstellung eines benutzerdefinierten Gebietsschemas unmöglich, aber glücklicherweise handelt es sich dabei nicht um eine sehr komplexe Aufgabe.
Erstellen eines benutzerdefinierten Gebietsschemas
Ich denke, der einfachste Weg, dies anhand eines Beispiels zu erklären. In meinem speziellen Fall wollte ich ein benutzerdefiniertes Gebietsschema haben, das hauptsächlich auf Hebräisch basiert (er_IL), aber mit LC_NAME, LC_MESSAGES vonde_DEund LC_TIME (mit modifiziertem first_weekday
und first_workday
) vonde_DE.
Abrufen von Gebietsschemadefinitionsdateien
Sie sollten eine Vorstellung davon haben, welche Gebietsschemas Sie mischen möchten. Zuerst müssen wir die zugehörigen Definitionsdateien finden, die sich unter befinden /usr/share/i18n/locales/
. Zurück zu meinem Beispiel: Ich brauchte Folgendes:er_IL,de_DEUndde_DE. Ich habe zu Hause einen Arbeitsordner eingerichtet und die benötigten Dateien dorthin kopiert:
$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
Erstellen einer neuen Definitionsdatei
Ich beschloss, meinen Ort anzurufenhc_ILund nahmer_ILals Grundlage. Die folgenden Zeilen erzeugen eine neue Datei hc_IL
mit dem Inhalt von he_IL
und ersetzen dabei alle Vorkommen eines Stringser_ILin der Datei mithc_IL.
$ 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 verwendevim(es verfügt über eine ordnungsgemäße Syntaxhervorhebung für Gebietsschemadefinitionsdateien):
$ vim ~/custom-locale/hc_IL
Für diejenigen, die ihren Lieblingseditor noch nicht gewählt haben undvimist nicht ihr Ding, können verwendengedit:)
$ gedit ~/custom-locale/hc_IL
Die Dateistruktur ist nicht sehr kompliziert. Im Wesentlichen besteht sie aus Abschnitten. VonGebietsschema(5)Manpages:
Die Gebietsschemadefinition hat einen Teil für jede Gebietsschemakategorie. Jeder Teil kann aus 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 DefinitionKopierengefolgt vom Namen des Gebietsschemas, das kopiert werden soll.
Der BegriffKopierenist sehr nützlich. Es spart Zeit und die resultierende Datei ist klar und prägnant. Anstatt beispielsweise ganze Abschnitte zu kopieren, können Sie Folgendes verwenden:
LC_MESSAGES
copy "en_US"
END LC_MESSAGES
Auf die vollständige Dokumentation einer Gebietsschemadefinitionsdatei kann zugegriffen werden über:
$ man 5 locale
Wenn Sie jedoch lediglich ein benutzerdefiniertes Gebietsschema erstellen möchten, das aus einer Mischung vorhandener Schemata besteht, müssen Sie nicht jedes Detail verstehen.
In meinem Fall habe ich folgende Kategorien und Schlüsselwörter geändert:
LC_IDENTIFIKATION
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"
Notiz:All die "Kategorie.." Zeilen in derLC_IDENTIFIKATIONAbschnitt wurden während der Dateierstellung mit geändert
sed
. Wir müssen sie also nicht mehr bearbeiten.LC_ZEIT
Ich habe den kompletten Abschnitt kopiert vonde_DEund nur die Zeilen geändert, die den ersten Wochentag und den ersten Arbeitstag angeben:
first_weekday 1 first_workday 1
Die restlichen Kategorien habe ich so gelassen wie sie sind oder ihren Inhalt durch dieKopierenRichtlinie wie in:
LC_NAME copy "en_US" END LC_NAME
Das war's, die Definitionsdatei ist fertig. Vergessen Sie nicht, die Datei zu speichern :)
Kompilieren und Kopieren des neuen Gebietsschemas
Die Kompilierung des neuen Gebietsschemas erfolgt mit dem folgenden Befehl alsWurzeloder mitsudo. 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 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 so konfigurieren, dass das neue Gebietsschema verwendet wird.
Systemweite Einstellungen
Bearbeiten Sie die /etc/locale.conf
Datei alsWurzelund legen Sie jede Zeile, die mit beginnt, LC_
auf Ihr neues Gebietsschema fest. Beispiel:
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
Um das neue Gebietsschema in GNOME zu aktivieren, führen Sie den folgenden Befehl aus. Ersetzen Sie es 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 für mich ein Neustart am einfachsten.
- Lesen Sie den Abschnitt „Überprüfen des aktuellen Gebietsschemastatus“, um zu überprüfen, ob die Systemkonfiguration korrekt ist.
Verwenden Sie GNOME Shell und lokalabhängige Anwendungen (Grafik und Konsole) und prü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 validieren:$ date +%x 21/04/15
Notiz:Alles wurde auf Fedora 21 mit GNOME 3.14 getestet. Bei anderen Linux-Distributionen sind möglicherweise zusätzliche oder andere Schritte erforderlich.
Bitte kommentieren Sie, wenn Sie Probleme mit den Anweisungen haben.