"Lokalisierung" bedeutet in unserem Kontext die Anpassung eines (Computer-) Systems an lokale Eigenarten.
In einem anderen Kontext mag Lokalisierung die Ortsbestimmung per GPS bedeuten, oder eine politische Richtung bei Kommunalreformen.
Darum geht es hier nicht.
Worum es geht
Sprache, Datum, Währung
Lokalisierung ist die Anpassung eines Computers an unterschiedliche lokale Gewohnheiten in unterschiedlichen Gebieten der Erde. Dazu gehören zum Beispiel:
- Sprache
- Zeichensatz
- Datum- und Zeitangaben
- Formate von Zahlen und Währungen
- und noch so Einiges
Diese lokale Anpassung erfolgt in der Regel schon bei der Installation eines Linux Systems. Da wird man nach Sprache und der Tastatur gefragt. Manchmal auch nach der Region. Mit den gewählten Werten wird das System installiert.
Nahezu immer war's das und man hat danach nichts mehr Lokalisierung zu tun.
Es gibt aber seltene Situationen, die eine Anpassung erfordern.
- Man möchte nachträglich, nachdem das System installiert ist, Sprache und regionale Einstellungen ändern.
- Man möchte die Oberfläche in einer Sprache haben, die regionalen Einstellungen aber unabhängig von der Sprache vornehmen.
- Man möchte für unterschiedlichen Benutzer unterschiedliche lokale Einstellungen vornehmen.
In solchen Fällen muss man sich mit dem Thema "Lokalisierung" auseinandersetzen. Ansonsten kann man sich die - durchaus ärgerliche - Beschäftigung mit damit schenken. Zusammen mit dem Rest des Artikels.
Lokalisierung ist ein sperriges Thema.
Diffus, widersprüchlich, inkonsistent
- Die Implementierung von "Lokalisierung" in Unix oder Linux Systemen ist im Laufe von Jahrzehnten Stück für Stück entstanden, "gewachsen".
- Es gibt bis heute keine umfassenden Standards, wie Lokalisierung umzusetzen ist.
- Es gibt bis heute keine vernünftige Dokumentation.
Microsoft hat einen Ansatz, Apple hat einen Ansatz und die Unix Welt hat gleich mehrere.
Im Gegensatz zu Apple und Microsoft, wo eine Firma für ihre Systeme einfach festlegen kann, wie etwas umgesetzt wird, ist das in der Unix-Welt nicht so einfach. Jede Firma, jede Distribution und jede Desktopumgebung trägt etwas dazu bei, rührt in dem Topf, interpretiert und erfindet etwas.
Es gibt aber durchaus gangbare Wege, ein GNU/Linux System nachträglich zu lokalisieren, ohne dass man all zu viele graue Haare bekommt.
Wer nachträglich das System "lokalisieren" will, braucht nur stumpf den Anleitungen im Abschnitt Systemlokalisierung bzw. Benutzerlokalisierung zu folgen und bekommt in 80% der Fälle ein vernünftiges Ergebnis.
Technisches
Einleitung, Begriffe und Hintergrund
"i18n" und "l10n"
Aufbau von Programmen
Ganz früher war die IT sprachlich noch schön einfach. Alles war Englisch. Programme wurden monolithisch geschrieben, die Anwenderschnittstelle und die Programmlogik waren zusammen in einem Block.
Um so etwas wie lokale Anpassungen einer Software überhaupt möglich zu machen, musste bei der Softwareentwicklung so etwas wie ein Paradigmenwechsel stattfinden. Diejenigen Teile eines Programms, die mit der Benutzerführung zu tun haben, mussten von den Teilen mit der Programmlogik getrennt werden. Außerdem mussten die Teile mit der Benutzerführung so gebaut werden, dass von Außen bestimmt werden kann, wie die Programmoberfläche für Anwender aussieht.
Hier kommen zwei Schlagworte ins Spiel:
- Internationalisierung (engl. "internationalization") und
- Lokalisierung (engl. "localization")
Die Worte sind so sperrig, wie das Thema. Und lang. Vielleicht hat schon mal jemand die merkwürdigen Kürzel "i18n" oder "l10n" gesehen? Wenn man die Buchstaben von "internationalization" zählt, kommt man auf 20: ein "i", dann 18 andere, zum Schluss ein "n". Das Gleiche gilt entsprechend für "localization": 12 Buchstaben, zuerst ein "l", dann 10 andere, dann ein "n". So sind sie, die Amis.
- Internationalisierung
- bedeutet, dass ein Programm so geschrieben wird, dass es überhaupt in der Lage ist, regionale Eigenarten zu berücksichtigen.
- Lokalisierung
- ist der zweite Teil, in dem die Internationalisierung verwendet wird. Ein konkretes System wird so an die existieren lokalen Gegebenheiten angepasst, dass "i18n" Programme darin sauber funktionieren.
In diesem Artikel geht es um den zweiten Teil: Die Anpassung.
Formales und Begriffe
Im Englischen gibt es den Begriff locale
. Dafür gibt es im Deutschen kein Gegenstück.
Ein locale
ist ein Informationspaket, das die Sprache, die Region und den verwendeten Zeichensatz definiert.
Das Format, das sich in der Computerwelt für locales
durchgesetzt hat, ist: "xx_YY.code", mit
xx
= SpracheYY
= Regioncode
= Zeichensatz
Beispiele:
"de_DE.ISO-8859-15" oder "en_US.UTF-8" oder "en_GB.ISO-8859-1". (Das Letzte geht erst seit dem Brexit wieder.).
Was den Zeichensatz angeht, ist außer dem ISO-8859 mit seinen Erweiterungen und dem UTF-8 Format fast nichts anderes mehr wichtig. Insbesondere im Web schreibt die Welt alles in UTF-8 auf. (Anteil Webpages mit UTF-8 : > 97%)
Die beiden locales, mit denen wir es in der IT in Deutschland zu tun haben, sind:
- de_DE.UTF-8 und
- en_US.UTF-8
Lokalisierungsvariablen
Die Definition der Lokalisierung erfolgt im Wesentlichen und normalerweise über "shell Variablen", die im Environment - der Laufzeitumgebung - existieren.
Mit dem Kommando locale kann man die in dem Moment gültige Konfiguration abfragen.
Aktuelle Konfiguration mit locale anzeigen
localeLANG=en-US.UTF-8 LC_CTYPE="en-US.UTF-8" LC_NUMERIC=de-DE.UTF-8 LC_TIME=de-DE.UTF-8 LC_COLLATE="en-US.UTF-8" LC_MONETARY=de-DE.UTF-8 LC_MESSAGES="en-US.UTF-8" LC_PAPER=de-DE.UTF-8 LC_NAME="en-US.UTF-8" LC_ADDRESS="en-US.UTF-8" LC_TELEPHONE="en-US.UTF-8" LC_MEASUREMENT=de-DE.UTF-8 LC_IDENTIFICATION="en-US.UTF-8" LC_ALL=
Hier wird generell amerikanisches Englisch gesprochen, insbesondere sind die Fehlermeldungen auf Englisch, die Darstellung von Datum, Währung etc. folgt aber deutschen Konventionen.
Das Kommando locale
wird in einem Terminal abgesetzt und zeigt die aktuelle Belegung für den aktuellen Anwender an.
Die Variablen LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES sind POSIX konform, d.h sie sind in jedem Unix System vorhanden. Die Restlichen sind durch GNU eingeführt worden.
Besondere Bedeutung haben die Variablen "LANG" und "LC_ALL". Das muss man im Kopf behalten.
- LANG
- LANG definiert die global benutzte "locale". Der in LANG gesetzte Wert wird für alle Variablen genutzt, denen nicht explizit ein Wert zugewiesen wurde.
- LC_ALL
-
LC_ALL ist auch ein globaler Wert. Allerdings ist die Logik dahinter gegenüber LANG umgedreht.
Für LANG gilt: Wenn Einzelwert nicht gesetzt, nimm LANG.
Für LC_ALL gilt: Wenn LC_ALL nicht gesetzt, nimm Einzelwert.
Der Wert von LC_ALL überschreibt alle anderen Variablen. Das ist nur in Not- oder Testfällen sinnvoll. Daher ist die Variable auch meist leer.
Die Variablen LC_CTYPE und LC_COLLATE dienen der Sortierung und Umwandlung von Text und sollten nach meiner Erfahrung immer auf die Systemsprache gesetzt sein.
Nachlesen
IBM
Understanding locale environment variables
Liefert einen Überblick mit weiterführenden Infos.
man pages
man 5 locale
man setlocale
Konfiguration
Lokalisierung durchführen
Systemlokalisierung
Lokalisierung auf Systemebene.
Die Lokalisierung auf Systemebene erfolgt durch das Setzen der genannten Umgebungsvariablen. Damit die Konfiguration systemweit greift, muss sie abgelegt werden, wo sie beim Hochfahren des Systems auch ausgewertet werden kann.
Die Definitionen werden je nach Distribution an unterschiedliche Orten gespeichert.
- /etc/default/locale bei RedHat Systemen
- /etc/locale.conf bei Debian Systemen
Tja. Da konnte man sich mal wieder nicht einigen.
Es gibt allerdings das Kommando localectl, das übergreifend verfügbar ist und die genaue Ablage für einen erledigt.
localectl kann sowohl zum Ansehen als auch zum Setzen der Konfiguration verwendet werden.
Zum Ansehen der aktuellen Konfiguration auf Systemebene benutzt man das Kommando localectl status.
Beispiel der Anzeige der System-"locales" mit localectl
localectl statusSystem Locale: LANG=en_US.UTF-8 LC_NUMERIC=de_DE.UTF-8 LC_TIME=de_DE.UTF-8 LC_MONETARY=de_DE.UTF-8 LC_PAPER=de_DE.UTF-8 LC_ADDRESS=de_DE.UTF-8 LC_MEASUREMENT=de_DE.UTF-8 VC Keymap: (unset) X11 Layout: de X11 Model: pc105
Die Ausgabe zeigt die System-"locales" an. Immer angezeigt wird der Fehlwert LANG. Danach kommen die Variablen, die vom Fehlwert abweichen
Die unteren drei Einträge beziehen sich auf die Konfiguration der Tastatur.
Man kann localectl auch zur Konfiguration der Tastatur verwenden. Das kommt aber recht selten vor und wird hier nicht beschrieben. Wer es braucht: Bitte in dem man pages nachsehen.
Zum Setzen einer "locale" wird die Direktive set-locale von localectl verwendet.
Syntax von localectl für "locales"
sudo localectl set-locale localeName=localeIn einem System, dass für Entwicklung gebraucht wird, möchte man vielleicht eine grundsätzlich englische Oberfläche haben und vor allem Meldungen im Original sehen, aber die restlichen Konventionen sollen unseren lokalen Sehgewohnheiten entsprechen.
Beispielkonfiguration mit localectl
sudo localectl set-locale LANG=en_US.UTF-8sudo localectl set-locale LC_NUMERIC=de_DE.UTF-8
sudo localectl set-locale LC_TIME=de_DE.UTF-8
sudo localectl set-locale LC_MONETARY=de_DE.UTF-8
sudo localectl set-locale LC_PAPER=de_DE.UTF-8
sudo localectl set-locale LC_MEASUREMENT=de_DE.UTF-8
sudo localectl set-locale LC_NAME=de_DE.UTF-8
sudo localectl set-locale LC_ADDRESS=de_DE.UTF-8
sudo localectl set-locale LC_TELEPHONE=de_DE.UTF-8
sudo localectl set-locale LC_IDENTIFICATION=de_DE.UTF-8
Mit dieser Sequenz von Befehlen wird einem System beigebracht, alles in amerikanischem Englisch darzustellen, bis auf die Aspekte, die danach gezielt auf "Deutsch" gesetzt werden.
Der Rechner muss neu gestartet werden, damit die Änderungen wirksam werden.
Man kann auch mehrere Variablen in einem Kommando anpassen.
Das Ganze nochmal in kompakter Form.
sudo localectl set-locale LANG=en_US.UTF-8 LC_NUMERIC=de_DE.UTF-8 LC_TIME=de_DE.UTF-8 LC_MONETARY=de_DE.UTF-8 LC_PAPER=de_DE.UTF-8 LC_NAME=de_DE.UTF-8 LC_ADDRESS=de_DE.UTF-8 LC_TELEPHONE=de_DE.UTF-8 LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=de_DE.UTF-8Es kann etwas dauern, bis der Befehl umgesetzt ist.
Benutzerlokalisierung
Lokalisierung für unterschiedliche Benutzer
Will man die Sprache und regionale Einstellungen für einzelne Benutzer unterschiedlich setzen, müssen die Variablen in der Datei ~/.profile gesetzt werden. Das Tilde-Zeichen "~" vor dem "/" bedeutet, dass die Datei im HOME-Verzeichnis des Benutzers liegt. Der Punkt "." vor dem Dateinamen bedeutet, dass die Datei normalerweise per ls oder in einem Dateimanager nicht zu sehen ist. Um solche versteckten Dateien zu sehen, gibt man in einem Terminal ls -a ein oder wählt im Dateimanager "Versteckte Dateien anzeigen" aus. Wenn die Datei nicht da ist, muss man sie anlegen.
In die ~/.profile trägt man die Zuweisungen wie gehabt ein. Es ist ziemlich egal, an welcher Stelle in der Datei die Anweisungen landen. Persönliche Änderungen kommen normalerweise ans Ende.
Lokalisierung in der ~/.profile
#...
export LANG=en-US.UTF-8
export LC_NUMERIC=de_DE.UTF-8
export LC_TIME=de_DE.UTF-8
export LC_MONETARY=de_DE.UTF-8
export LC_MEASUREMENT=de_DE.UTF-8
export LC_PAPER=de_DE.UTF-8
export LC_NAME=de-DE.UTF-8
export LC_TELEPHONE=de_DE.UTF-8
export LC_ADDRESS=de_DE.UTF-8
export LC_IDENTIFICATION=de_DE.UTF-8
#....
Das Kommando "export" vor den einzelnen Zeilen sorgt dafür, dass der Wert auch außerhalb der gerade geöffneten shell erhalten bleibt.
Das Vorgehen ist hässlich, aber es funktioniert. Es funktioniert mit der Einschränkung, das die Variablen erst gültig werden, wenn der Benutzer sich tatsächlich anmeldet. Alles was vorher passiert, passiert mit den Systemwerten.
-
Wenn eine Datei ~/.bash-profile existiert, muss man dort die modifizierte ~/.profile einbinden, um sicherzustellen, dass auch die bash die Variablen lädt.
-
Die ~/.profile wird beim Login gelesen und wirkt sich auch auf die GUI aus. Will man in der GUI und im Terminal unterschiedliche "locales" haben, muss man die Definitionen noch einmal in der ./bashrc vornehmen.
Sonstiges
Weitere Möglichkeiten
Desktop lokalisieren
Kontrolle der Lokalisierung durch den Desktop.
Alle mir bekannten Desktop Umgebungen bieten eine Möglichkeit, Sprache und Region über einen Eintrag in den "Einstellungen" zu setzen.
Welche Auswirkungen diese Konfiguration hat, ist stark abhängig von der jeweiligen Desktop Umgebung. Man kann aber davon ausgehen, dass der Desktop selber und die meisten aus der Desktop Umgebung heraus aufgerufenen Programme, diese Einstellungen berücksichtigen.
Leider ist es so, dass jede Desktopumgebung ihr eigenes Süppchen kocht. Schlimmer noch, jede DU bietet manchmal unterschiedliche Möglichkeiten, je nachdem mit welcher Distribution sie ausgeliefert wird.
Aber zum Glück ist es auch so, dass die meisten DU's auf die Einstellungen des Betriebssystems hören und sich entsprechend anpassen, wenn man auf der Ebene Änderungen vorgenommen hat.
Programme lokalisieren
Kontrolle der Lokalisierung durch eine konkrete Anwendung
Die Idee hinter dem Konzept "i18n" in Verbindung mit "l10n" ist, dass Programme die gesetzten Variablen auslesen und sich entsprechend verhalten.
Es kann aber sein, dass Programme, die dafür konzipiert sind, in unterschiedlichsten Umgebungen zu laufen, eigene Mechanismen zu Lokalisierung enthalten.
Manche benutzen die Umgebungsvariablen, manche orientieren sich nur zögerlich bis gar nicht an einer außerhalb gesetzten Konfiguration.
Beispielsweise wird bei LibreOffice die LANG Variable als Fehlwert genommen, alle anderen regionalen Anpassungen muss man aber noch einmal vornehmen. Thunderbird dagegen bietet die Möglichkeit, entweder die Regionaleinstellungen aus den System-"locales" zu beziehen oder der Sprache der Anwendung zu benutzen.
Hier muss man dem Handbuch der Anwendung folgen und "irgendwo" die Einstellungen anpassen, wenn man an der Sprache oder den Regionaleinstellungen etwas ändern möchte.
Wörterbücher
hunspell
und aspell
Unter GNU/Linux sind die beiden spelling engines
aspell und hunspell weit verbreitet.
Diese sollten zusammen mit den gewünschten Wörterbüchern installiert sein. Beide Programme benutzen Wörterbücher in einem eigenen Format. Natürlich sind die Formate nicht kompatibel.
Viele GUI und die meisten Konsole-Anwendungen nutzen direkt oder indirekt eines der beiden Programme und damit auch die mitgelieferten Wörterbücher, um eine Rechtschreibprüfung anzubieten.
Sonstige Wörterbücher
Viele Anwendungen, wie Browser und Office Programme, bringen ihre eigenen Wörterbücher mit. Meistens sind sie im hunspell Format. Aber selbst dann heißt das nicht, dass dafür die im System installierten Wörterbücher benutzt werden. Man muss den Anweisungen in der Hilfe des jeweiligen Programms folgen, wenn man weitere Wörterbücher für eine Anwendung installieren will.