Wir wird ein GNU/Linux-System in einer anderen Sprache als Englisch lokalisiert? Warum ist LANG=C in Shell-Scripten hilfreich? Auf diese und weitere Fragen möchte ich in diesem Artikel eingehen.
Andere Länder, andere Formate. Damit wir mit einem System in unterschiedlichen Ländern arbeiten können, sind einige Parameter veränderlich. Dazu gehört die Zeitzone (damit die Hardware-Uhr immer auf UTC eingestellt sein kann), das Zeit/Datums-Format, das Papierformat, die Währung usw.. Diese Parameter können dann jeweils bei Bedarf von den laufenden Programmen abgefragt werden.
Weitere wichtige Punkte sind die Tastaturbelegung und die Zeichensätze. Die Zeichensätze gehören dabei zu einem der problematischen Fachgebiete, da bei der Verwendung falscher Zeichensätze teilweise Zeichen falsch oder gar nicht angezeigt werden. Bei uns in der Schweiz, Österreich und in Deutschland wären speziell die Umlaute zu Erwähnen, die Probleme machen können.
Zeitzoneneinstellung
Normalerweise wird man bereits bei der Installation eines Systems nach der gewünschten Zeitzone gefragt. Wenn man diese später ändern möchte, kommt das Programm „tzselect“ zum Einsatz. Ich merke mir das Programm anhand von „tz“=TimeZone und „select“=Auswahl. Wird das Programm gestartet, durchläuft man ein paar Fragen, die mit der entsprechenden Zahl zur Auswahl ausgewählt werden.
Das Programm tzselect verwendet die Dateien im Verzeichnis „/usr/share/zoneinfo“, wo man ein Verzeichnisbaum vorfindet, der den Auswahlmöglichkeiten in tzselect entspricht. Die meisten Dateien liegen dort in binärer Form vor, können also nicht einfach als Text betrachtet werden. Schlussendlich wird nichts anderes gemacht, als die Datei „/etc/localtime“ mit der korrespondierenden Stadt im erwähnten Verzeichnis verlinkt oder überschrieben. Übrigens sollte man aus Kompatibilitätsgründen zu „hwclock“ das Kopieren/Überschreiben bevorzugen.
Hier ein gekürzter Auszug aus dem Verzeichnis-Listing unterhalb von /usr/share/zoneinfo auf meinem LinuxMint Testsystem:
ls -l /usr/share/zoneinfo/ total 176 drwxr-xr-x 2 root root 4096 Mär 28 13:50 Africa drwxr-xr-x 6 root root 20480 Mär 28 13:50 America drwxr-xr-x 2 root root 4096 Mär 28 13:50 Antarctica drwxr-xr-x 2 root root 4096 Mär 28 13:50 Arctic drwxr-xr-x 2 root root 12288 Mär 28 13:50 Asia drwxr-xr-x 2 root root 4096 Mär 28 13:50 Atlantic drwxr-xr-x 2 root root 4096 Mär 28 13:50 Australia drwxr-xr-x 2 root root 4096 Mär 28 13:50 Brazil drwxr-xr-x 2 root root 4096 Mär 28 13:50 Canada lrwxrwxrwx 1 root root 9 Mär 14 01:07 CET -> posix/CET drwxr-xr-x 2 root root 4096 Mär 28 13:50 Chile -rw-r--r-- 1 root root 2294 Mär 14 01:07 CST6CDT lrwxrwxrwx 1 root root 20 Mär 14 01:07 Cuba -> posix/America/Havana lrwxrwxrwx 1 root root 9 Mär 14 01:07 EET -> posix/EET lrwxrwxrwx 1 root root 11 Mär 14 01:07 Egypt -> posix/Egypt lrwxrwxrwx 1 root root 19 Mär 14 01:07 Eire -> posix/Europe/Dublin lrwxrwxrwx 1 root root 9 Mär 14 01:07 EST -> posix/EST lrwxrwxrwx 1 root root 13 Mär 14 01:07 EST5EDT -> posix/EST5EDT drwxr-xr-x 2 root root 4096 Mär 28 13:50 Etc drwxr-xr-x 2 root root 4096 Mär 28 13:50 Europe lrwxrwxrwx 1 root root 13 Mär 14 01:07 Factory -> posix/Factory ... GEKÜRZT
In der Konfigurationsdatei „/etc/timezone“ muss die Zeitzone ebenfalls definiert werden. Hier ein Blick in meine Datei:
mgblog@X201 ~ $ cat /etc/timezone Europe/Zurich
Dies entspricht eigentlich dem Pfad unterhalb von „/usr/share/zoneinfo“.
Die Anzeige auf der Shell erfolgt mit dem Befehl „date“. Ohne Option gibt dieser die aktuelle Zeit und das Datum aus. Will man die Ausgabe als UTC sehen, wird der Befehl mit der Option „-u“ ausgeführt. Hier ein Beispiel:
mgblog@X201 ~ $ date Mon Aug 4 14:42:19 CEST 2014 mgblog@X201 ~ $ date -u Mon Aug 4 12:42:24 UTC 2014
Bei Sommerzeit in der Schweiz ist somit die lokale Zeit zwei Stunden vor der UTC-Zeit.
Umgebungsvariablen (zur Lokalisation)
Viele Anwendungen benötigen regionale Informationen. Dazu gehören Währung, Papierformate, Telefonnummernformate und Datums – und Uhrzeitformate.
de_CH,de_DE,de_AT,en_US,en_GB
- überschreibt alle LC_* Variablen wie LC_MESSAGES, LC_CTYPE, LC_COLLATE, LC_MONETARRY, LC_NUMERIC, LC_TIME
- falls diese Variable gesetzt ist, werden alle anderen Werte ignoriert.
- Formatierung von Adressen und Ortsangaben.
- kommt ä nach a oder nach z
- Zeichenklassifizierung und Gross und Kleinschreibung
- legt die Interpretation von Sequenzen von Bytes als Character fest
- **tolower() toupper() isalpah()**
- Formatierung von Geldbeträgen
- Formatierung von Masseinheiten
- Nachrichten und Meldungen die ein Programm ausgibt inklusive kulturellen Konventionen
- Formatierung von Eigennamen
- Formatierung von Zahlen Beispiel (0.1 oder 0,1)
- Papierformat (US-Letter, A4)
- Formatierung von Telefonnummer (03077777, 030/7777, 030.7777 )
- → Formatierung von Datums und Zeitangaben entsprechend der kulturellen Konventionen
Mit dem Befehl „locale“ können die momentan aktiven (für den angemeldeten Benutzer) Einstellungen aufgelistet werden:
mgblog@X201 $ locale LANG=de_CH.UTF-8 LANGUAGE=de_CH:de LC_CTYPE="de_CH.UTF-8" LC_NUMERIC="de_CH.UTF-8" LC_TIME="de_CH.UTF-8" LC_COLLATE="de_CH.UTF-8" LC_MONETARY="de_CH.UTF-8" LC_MESSAGES="de_CH.UTF-8" LC_PAPER="de_CH.UTF-8" LC_NAME="de_CH.UTF-8" LC_ADDRESS="de_CH.UTF-8" LC_TELEPHONE="de_CH.UTF-8" LC_MEASUREMENT="de_CH.UTF-8" LC_IDENTIFICATION="de_CH.UTF-8" LC_ALL=
Zusätzlich unterstützt der Befehl „locale“ die Option „-a“ (all), mit der alle verfügbaren Lokalisationen angezeigt werden:
mgblog@X201 ~ $ locale -a C C.UTF-8 de_CH.utf8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 POSIX
Um eine Liste der Zeichensätze anzuzeigen, kann die Option „-m“ (charmap) verwendet werden:
mgblog@X201 ~ $ locale -m ANSI_X3.110-1983 ANSI_X3.4-1968 ARMSCII-8 ASMO_449 BIG5 BIG5-HKSCS BRF BS_4730 BS_VIEWDATA CP10007 CP1125 CP1250 CP1251 CP1252 CP1253 CP1254 CP1255 CP1256 CP1257 CP1258 CP737 CP770 CP771 CP772 ... GEÜRZT
Dem Thema „Zeichensätze“ und dem Programm „iconv“, zum konvertieren zwischen verschiedenen Zeichensätzen, werde ich ein eigener Artikel widmen.
Pingback: Die Systemzeit unter GNU/Linux verwalten | MG BLOG