Hintergrundinformation

Hintergrundinformation

Ich habe meine eigenen benutzerdefinierten localeVariablen 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, .bashrcaber 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_environmentDatei, aber die locales 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 localeKombinationen 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 localein 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.confDatei gespeichert, die beim frühen Booten vomsystemdDaemon. Die in konfigurierten Gebietsschemaeinstellungen /etc/locale.confwerden 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_weekdayund 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_ILmit dem Inhalt von he_ILund 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_ILmit 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_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 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 so konfigurieren, dass das neue Gebietsschema verwendet wird.

Systemweite Einstellungen

Bearbeiten Sie die /etc/locale.confDatei 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_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 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 dateBefehl 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.

verwandte Informationen