Festlegen benutzerdefinierter Ländereinstellungen in Gnome3 (unter Fedora 20)

15

Ich habe meine eigenen benutzerdefinierten locales erstellt und platziert, /etc/locale.confdie erfolgreich wirksam werden, wenn ich mich an einer virtuellen Konsole anmelde (Strg + Alt + F2). In meiner Gnome3-Sitzung werden diese Variablen jedoch nicht gesetzt. Für Terminal-Anwendungen könnte ich sie einfach in das platzieren, .bashrcaber das hilft mir bei grafischen Anwendungen wie Thunderbird und Pidgin nicht.

Ich habe versucht, diesen Hinweisen zu folgen: Locale-Einstellungen in der Shell-Initialisierung, die nicht von der GNOME-Sitzung verwendet werden, und sogar den Fehler in Locale-ArchWiki durch Erstellen einer .pam_environmentDatei emuliert , aber die locales sind immer noch die von Gnome3 festgelegten. In den Gnome-Einstellungen gibt es einen Konfigurationsdialog, in dem jedoch nur eine sehr begrenzte Anzahl vordefinierter localeKombinationen festgelegt werden kann. Sie können jedoch nicht angepasst werden.

Die relevanten Dateien in meinem Homeverzeichnis:

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

Der Inhalt 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 benutzerdefinierte locales in Gnome3 einstellt?

Perseiden
quelle

Antworten:

9

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.confDatei gespeichert , die vom systemd- Daemon beim frühen Start gelesen wird . Die in konfigurierten Gebietsschemaeinstellungen /etc/locale.confwerden 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_weekdayund 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_ILderen Inhalt von he_ILund 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_ILmit 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_ILdurch 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_ILdurch 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.confDatei 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_ILdurch 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 dateBefehl 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.

dchrome
quelle
Ich kann bestätigen, dass dies auf Fedora 22 mit Cinnamon funktioniert. Es wird höchstwahrscheinlich auch mit GNOME funktionieren.
Dee'Kej
1
Ich bin sicher, wenn sie sich wirklich anstrengen, könnten sie das Einrichten benutzerdefinierter Gebietsschemas noch ein bisschen schwieriger machen.
5heikki
Ich liebe GNOME, aber das ist lächerlich. Überlassen Sie den Hauptbenutzern zumindest die Möglichkeit, ihre Gebietsschemaeinstellungen nach Belieben festzulegen. Ich möchte für die meisten Dinge ein US-Gebietsschema, aber mein Drucker verwendet A4-Papier ...
static_rtti