Inhaltsverzeichnis
$LANG
"
Multilingualisation (M17N) oder native Sprachunterstützung (die Anpassung eines Software-Produkts zur Unterstützung mehrerer Sprachen) wird in zwei Schritten durchgeführt:
Internationalisierung (I18N): eine Software so einrichten, dass sie grundsätzlich verschiedene Gebietsschemata (Locales) unterstützt.
Lokalisierung (L10N): eine Software für die Unterstützung eines bestimmten Gebietsschemas anpassen.
![]() |
Tipp |
---|---|
Bei den englischen Begriffen Multilingualization, Internationalization und Localization sind 17, 18 oder 10 Buchstaben zwischen "m" und "n", "i" und "n" bzw. "l" und "n", was M17N, I18N und L10N entspricht. |
Moderne Software wie GNOME oder KDE ist für die Unterstützung verschiedener Sprachen ausgerüstet. Sie ist mittels UTF-8 internationalisiert und über die Bereitstellung übersetzter Texte über die gettext(1)-Infrastruktur lokalisiert. Übersetzte Texte werden teilweise als separate Lokalisierungspakete bereitgestellt und können ausgewählt werden, indem entsprechende Umgebungsvariablen auf den Wert für die zugehörige Locale gesetzt werden.
Die einfachste Darstellung von Textdaten ist über ASCII, was für Englisch passend ist und weniger als 127 Zeichen enthält (abzubilden mit 7 Bits). Um für internationale Unterstützung erheblich mehr Zeichen zur Verfügung zu haben, wurden viele verschiedene Zeichenkodierungssysteme eingeführt. Das modernste und vernünftigste Kodierungssystem ist UTF-8, welches mit nahezu allen dem Menschen bekannten Zeichen umgehen kann (lesen Sie dazu Abschnitt 8.3.1, „Grundlagen der Kodierung“).
Details hierzu finden Sie unter Introduction to i18n.
Internationale Hardware-Unterstützung wird über lokalisierte Hardware-Konfigurationsdaten realisiert.
![]() |
Warnung |
---|---|
Dieses Kapitel ist überholt, da es auf dem in 2013 veröffentlichten Debian
7.0 ( |
Das Debian-System kann mittels der
keyboard-configuration
- und
console-setup
-Pakete so konfiguriert werden, dass es mit
vielen internationalen Tastaturkonfigurationen funktioniert:
# dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup
Damit wird die Tastatur für die Linux-Konsole konfiguriert und Parameter für
das X-Window-System in "/etc/default/keyboard
" und
"/etc/default/console-setup
" aktualisiert. Es wird auch
die Schriftart für die Linux-Konsole festgelegt.
Viele nicht-ASCII-Zeichen, inklusive akzentuierte Zeichen, die in europäischen Sprachen verwendet werden, sind über Tottaste, AltGr-Taste und Compose-Taste zugänglich.
Für asiatische Sprachen benötigen Sie Unterstützung für aufwändigere Eingabemethoden wie IBus, die im folgenden behandelt werden.
Mehrsprachige Eingaben für Anwendungen werden wie hier dargestellt verarbeitet:
Tastatur Anwendung | ^ | | +-> Linux-Kernel -> Eingabemethode -> Gtk, Qt oder X
Die Einrichtung multilingualer Eingabemethoden wird auf dem Debian-System
durch die Verwendung der IBus-Pakete und des
im-config
-Pakets erheblich vereinfacht. Hier eine Liste
der IBus-Pakete:
Tabelle 8.1. Liste der unterstützten Eingabemethoden mit IBus
Paket | Popcon | Größe | unterstütztes Gebietsschema |
---|---|---|---|
ibus | V:7, I:10 | 1937 | Eingabemethoden-Rahmenwerk, das dbus verwendet |
ibus-mozc | V:0, I:1 | 879 | Japanisch |
ibus-anthy | V:1, I:2 | 746 | " |
ibus-kkc | V:0, I:0 | 266 | " |
ibus-skk | V:0, I:0 | 274 | " |
ibus-pinyin | V:0, I:2 | 1402 | Chinesisch (für zh_CN) |
ibus-chewing | V:0, I:0 | 388 | " (für zh_TW) |
ibus-hangul | V:0, I:0 | 224 | Koreanisch |
ibus-table | V:0, I:1 | 821 | Tabellen-Engine für IBus |
ibus-table-thai | I:0 | 69 | Thailändisch |
ibus-unikey | V:0, I:0 | 239 | Vietnamesisch |
ibus-m17n | V:0, I:0 | 163 | Multilingual: Indisch, Arabisch und andere |
Die kinput2-Methode und andere locale-abhängige Eingabemethoden für klassische asiatische Sprachen existieren zwar noch, werden aber für moderne UTF-8-Umgebungen nicht mehr empfohlen. Die SCIM- und uim-Werkzeuge sind ein geringfügig älteres Vorgehen für internationale Eingabemethoden in modernen UTF-8-Umgebungen.
Ich finde diese japanische Eingabemethode, beginnend in einer englischen
Umgebung ("en_US.UTF-8
"), sehr nützlich. Hier ein
Beispiel, wie ich dies mit IBus für GNOME3 eingerichtet habe:
Installieren Sie das ibus-anthy
-Paket für das japanische
Eingabewerkzeug mit seinen Paketempfehlungen wie
z.B. im-config
.
Führen Sie "im-config
" auf der Shell des Benutzers aus
und wählen Sie als Eingabemethode "ibus
".
Wählen Sie dann "Einstellungen" → "Tastatur" → "Eingabequellen", klicken Sie
bei den "Eingabequellen" auf "+
" → "Japanisch" →
"Japanisch (anthy)" und dann "Hinzufügen".
Wählen Sie "Japanisch" und klicken Sie "Hinzufügen", um die japanische Tastaturbelegung ohne Zeichenkonvertierung auszuwählen. (Sie möchten vielleicht ebenso viele Eingabequellen auswählen.)
Melden Sie sich am Benutzerkonto neu an.
Kontrollieren Sie nochmals die Einstellung durch Ausführen von
"im-config
".
Richten Sie die Eingabequelle durch einen Rechtsklick auf das Icon in der GUI-Werkzeugleiste ein.
Wählen Sie zwischen den installierten Eingabequellen mittels SUPERTASTE+LEERTASTE (die SUPERTASTE ist normalerweise die Windows-Taste).
Bitte beachten Sie folgendes:
im-config(8) verhält sich unterschiedlich abhängig davon, ob es von root ausgeführt wurde oder nicht.
im-config(8) aktiviert standardmäßig ohne weiteres Agieren des Benutzers die beste Eingabemethode auf dem System.
Der Eintrag für im-config(8) im GUI-Menü ist standardmäßig deaktiviert, um ein Aufblähen des Menüs zu vermeiden.
Falls Sie bei der Eingabe kein XIM ( Mechanismus, der von X genutzt wird)
verwenden möchten, setzen Sie während des Programmstarts den Wert von
"$XMODIFIERS
" auf "none". Dies könnte sinnvoll sein, wenn
Sie die japanische Eingabe-Infrastruktur egg
in
emacs(1)
nutzen und dazu ibus
deaktivieren möchten. Führen Sie
dazu auf der Shell folgendes aus:
$ XMODIFIERS=none emacs
Um einen Befehl, der aus dem Debian-Menü ausgeführt wird, anzupassen, legen
Sie eine benutzerspezifische Konfiguration in
"/etc/menu/
" an; folgen Sie dabei der in
"/usr/share/doc/menu/html
" beschriebenen Methode.
Die Linux-Konsole kann nur eine beschränkte Anzahl an Zeichen anzeigen. (Sie benötigen ein spezielles Terminal-Programm wie jfbterm(1), um nicht-europäische Sprachen in der Konsole außerhalb von X anzuzeigen.)
X-Window kann jegliche Zeichen in UTF-8 anzeigen, sofern die benötigten Schriftdaten existieren. (Die Kodierung der Original-Schriftdaten wird durch das X-Window-System und für den Benutzer transparent erledigt.)
Die folgenden Informationen beziehen sich auf das Gebietsschema für Anwendungen, die in der durch gdm3(1) gestarteten X-Window-Umgebung laufen.
Die Umgebungsvariable "LANG=xx_YY.ZZZZ
" setzt das
Gebietsschema auf den Sprachcode "xx
", den Ländercode
"yy
" und die Kodierung "ZZZZ
" (Näheres
in Abschnitt 1.5.2, „Die "$LANG
"-Variable“).
Das aktuelle Debian-System setzt das Gebietsschema normalerweise auf
"LANG=xx_YY.UTF-8
". Dadurch wird die UTF-8-Kodierung mit dem Unicode-Zeichensatz verwendet. Diese UTF-8-Kodierung ist ein Multibyte-Code-System und nutzt
intelligent die enthaltenen Codepunkte. ASCII-Daten, die lediglich aus 7 Bit breiten Codes
bestehen, sind immer auch gültige UTF-8-Daten, die aber 1 Byte pro Zeichen
belegen.
In früheren Debian-Systemen wurde das Gebietsschema auf
"LANG=C
" oder "LANG=xx_YY
" (ohne
".UTF-8
") gesetzt.
Für "LANG=C
" oder "LANG=POSIX
" wird
der ASCII-Zeichensatz benutzt.
Für "LANG=xx_YY
" wird in Unix das traditionelle
Kodierungssystem benutzt.
Das tatsächliche Kodierungssystem, das für "LANG=xx_YY
"
verwendet wird, kann über "/usr/share/i18n/SUPPORTED
"
identifiziert werden. Zum Beispiel nutzt "en_US
" die
"ISO-8859-1
"-Kodierung und
"de_DE@euro
" nutzt "ISO-8859-15
".
![]() |
Tipp |
---|---|
Informationen zur Bedeutung der Werte für die verschiedenen Kodierungen finden Sie in Tabelle 11.2, „Liste von Werten für die Zeichenkodierung und deren Verwendung“. |
Der Unicode-Zeichensatz kann nahezu alle dem Menschen bekannten Zeichen mit Codepunkten aus dem Bereich von 0 bis 10FFFF in hexadezimaler Darstellung abbilden. Seine Speicherung erfordert mindestens 21 Bit.
Das Zeichenkodierungssystem UTF-8 passt Unicode-Codepunkte in einen 8 Bit breiten Datenstrom ein, der zum ASCII-Datenverarbeitungssystem kompatibel ist. UTF steht für Unicode Transformation Format.
Ich empfehle, ein UTF-8-Gebietsschema für das
Arbeitsplatzsystem zu verwenden,
z.B. "LANG=de_DE.UTF-8
". Der erste Teil des
Gebietsschemas repräsentiert Texte, die von Anwendungen angezeigt werden. So
kann zum Beispiel
gedit(1)
(der Texteditor des GNOME-Desktops) mit
"LANG=de_DE.UTF-8
" chinesische Zeichen anzeigen und
editieren (solange die benötigten Schriftarten und Eingabemethoden
installiert sind), wobei die Menüs in Deutsch angezeigt werden.
Ich empfehle außerdem, das Gebietsschema nur mittels der Umgebungsvariable
"$LANG
" zu setzen. Ich sehe keinen großen Gewinn darin,
bei einer UTF-8-Locale eine komplizierte Kombination aus
"LC_*
"-Variablen zu setzen (lesen Sie dazu
locale(1)).
Sogar reiner Text in Englisch kann nicht-ASCII-Zeichen enthalten, so sind z.B. die leicht geschweiften rechten und linken Anführungszeichen in ASCII nicht enthalten:
“Dieser Text mit doppelten Anführungszeichen” ist kein reiner ASCII-Text, "dieser hingegen schon." ‘Dieser Text mit einfachen Anführungszeichen’ ist kein reiner ASCII-Text, 'dieser hingegen schon.'
Wenn reiner Text in ASCII nach UTF-8 konvertiert wird, hat er exakt den gleichen Inhalt und die gleiche Größe wie die ASCII-Variante. Daher verlieren Sie nichts beim Einsatz des UTF-8-Gebietsschemas.
Einige Programme verbrauchen mehr Speicher, wenn sie I18N unterstützen. Das kommt daher, weil sie für die Unicode-Unterstützung intern UTF-32(UCS4) verwenden (zwecks Geschwindigkeitsoptimierung; dabei werden 4 Bytes für jedes ASCII-Zeichen genutzt, unabhängig vom gewählten Gebietsschema). Nochmals: Sie verlieren nichts, wenn Sie ein UTF-8-Gebietsschema einsetzen.
Die alten herstellerspezifischen nicht-UTF-8-Kodierungssysteme neigen dazu, kleine, aber nervige Unterschiede bei einigen Zeichen zu enthalten, wie zum Beispiel grafische Differenzen für viele Länder. Der Einsatz des UTF-8-Systems durch moderne Betriebssysteme löst diese Konflikte.
Damit das System auf ein bestimmtes Gebietsschema zugreifen kann, müssen die
Locale-Daten aus der Locale-Datenbank kompiliert werden. (Auf dem
Debian-System sind nicht alle verfügbaren
Gebietsschemata vorkonfiguriert vorhanden, außer Sie installieren das Paket
locales-all
.) Die vollständige Liste der Gebietsschemata,
die zur Kompilierung verfügbar sind, finden Sie in
"/usr/share/i18n/SUPPORTED
". Dort sind alle exakten
Locale-Namen aufgeführt. Der folgende Befehl listet alle verfügbaren
UTF-8-Gebietsschemata auf, die bereits in binäre Form kompiliert vorliegen:
$ locale -a | grep utf8
Durch Ausführung des folgenden Befehls wird das
locales
-Paket neu konfiguriert:
# dpkg-reconfigure locales
Dieser Prozess besteht aus drei Schritten:
die Liste verfügbarer Gebietsschemata aktualisieren;
diese in die binäre Form kompilieren;
den Wert des systemweiten Standard-Gebietsschemas in
"/etc/default/locale
" setzen, damit er durch PAM genutzt
werden kann (lesen Sie dazu auch Abschnitt 4.5, „PAM und NSS“).
Die Liste verfügbarer Gebietsschemata sollte
"en_US.UTF-8
" sowie alle für Sie interessanten Sprachen
mit "UTF-8
" enthalten.
Das empfohlene Standard-Gebietsschema ist "en_US.UTF-8
"
für US-amerikanisches Englisch. Für andere Sprachen stellen Sie bitte
sicher, dass Sie ein Gebietsschema mit "UTF-8
" auswählen,
für Deutsch z.B. "de_DE.UTF-8
". Bei all diesen
Locales-Einstellungen werden jegliche internationale Zeichen unterstützt.
![]() |
Anmerkung |
---|---|
Obwohl das Setzen des Gebietsschemas auf " |
Der Wert der Umgebungsvariable "$LANG
" wird durch viele
Anwendungen gesetzt und verändert:
wird anfänglich gesetzt durch den PAM-Mechanismus von login(1) für die lokalen Linux-Konsolenprogramme;
wird anfänglich gesetzt durch den PAM-Mechanismus des Displaymanagers für alle X-Programme;
wird anfänglich gesetzt durch den PAM-Mechanismus von ssh(1) für die fernen Konsolenprogramme;
wird verändert durch einige Displaymanager wie gdm3(1) für alle X-Programme;
wird verändert durch den Startcode der X-Sitzung via
"~/.xsessionrc
" für alle X-Programme;
wird verändert durch den Shell-Startcode,
z.B. "~/.bashrc
" für alle Konsolenprogramme.
![]() |
Tipp |
---|---|
Es ist eine gute Idee, zwecks maximaler Kompatibilität als systemweites
Gebietsschema " |
Über eine Anpassung von PAM können Sie ein spezifisches Gebietsschema nur für X-Window wählen, unabhängig vom systemweiten Standard-Gebietsschema (lesen Sie auch Abschnitt 4.5, „PAM und NSS“).
Diese Einstellung sollte zu besten Ergebnissen und höchster Stabilität führen. Sie haben Zugriff auf ein funktionsfähiges textbasiertes Terminal mit verständlichen Meldungen, selbst wenn das X-Window-System nicht läuft. Dies ist essentiell wichtig für Sprachen, die nicht-romanische Zeichen verwenden, wie z.B. Chinesisch, Japanisch und Koreanisch.
![]() |
Anmerkung |
---|---|
Es könnte auch noch andere Wege geben, wie die Verbesserung des X-Sitzungsmanager-Pakets, aber bitte lesen Sie hier weiter bezüglich allgemeiner und grundlegender Methoden zum Einrichten des Gebietsschemas. Bei gdm3(1) weiß ich, dass man das Gebietsschema der X-Sitzung über das Menü festlegen kann. |
Folgende Zeile in der PAM-Konfigurationsdatei
(z.B. "/etc/pam.d/gdm3
) definiert den Speicherort der
Datei für die Sprachumgebung:
auth required pam_env.so read_env=1 envfile=/etc/default/locale
Ändern Sie dies wie folgt:
auth required pam_env.so read_env=1 envfile=/etc/default/locale-x
Für Japanisch erzeugen Sie eine
"/etc/default/locale-x
"-Datei mit den Rechten
"-rw-r--r-- 1 root root
", die folgendes enthält:
LANG="ja_JP.UTF-8"
Behalten Sie die Standarddatei "/etc/default/locale
" für
andere Programme mit folgendem Inhalt bei:
LANG="en_US.UTF-8"
Dies ist die grundlegendste Technik zur Anpassung des Gebietsschemas und führt dazu, dass selbst der Menüauswahldialog von gdm3(1) lokalisiert ist.
Alternativ hierzu können Sie das Gebietsschema auch einfach über eine
Änderung der Datei "~/.xsessionrc
" anpassen.
Für den Datenaustausch über verschiedene Plattformen hinweg (Näheres in Abschnitt 10.1.7, „Wechseldatenträger“) müssen Sie unter Umständen beim Einbinden einiger Dateisysteme bestimmte Kodierungen vorwählen. Zum Beispiel wird beim Einbinden eines vfat-Dateisystems durch mount(8) die CP437-Kodierung genutzt, wenn nichts anderes angegeben ist. Sie müssen eine explizite mount-Option angeben, wenn UTF-8 oder CP932 als Kodierung für die Dateinamen genutzt werden soll.
![]() |
Anmerkung |
---|---|
Wenn ein während des Betrieb eingesteckter USB-Stick in einer modernen Arbeitsplatzumgebung wie GNOME automatisch eingebunden wird, können Sie solche mount-Optionen möglicherweise durch einen Rechtsklick auf das Icon auf der Arbeitsfläche vorwählen. Klicken Sie auf die Lasche "Laufwerk", klappen Sie per Mausklick die Liste der "Einstellungen" auf und geben Sie dann "utf8" bei den "Mount-Optionen:" ein. Wenn der USB-Stick das nächste Mal eingesteckt wird, ist das Einbinden mit UTF-8 aktiviert. |
![]() |
Anmerkung |
---|---|
Beim Hochrüsten eines Systems oder wenn Sie Laufwerke von älteren nicht-UTF-8-Systemen verwenden, könnten Dateinamen mit nicht-ASCII-Zeichen in historischen und überholten Kodierungen wie ISO-8859-1 oder eucJP kodiert sein. Bitte suchen Sie die Hilfe von Textkonvertierungswerkzeugen, um diese in UTF-8 zu konvertieren. Details hierzu finden Sie in Abschnitt 11.1, „Werkzeuge für Textkonvertierung“. |
Samba verwendet für neuere Clients (Windows NT,
200x, XP und später) standardmäßig Unicode, aber bei älteren für DOS und
Windows 9x/Me wird per Voreinstellung CP850
eingesetzt. Dieser Standard für ältere Clients kann mittels "dos
charset
" in der Datei "/etc/samba/smb.conf
"
geändert werden, CP932 zum Beispiel für
Japanisch.
Für viele Textmeldungen und Dokumente, die im Debian-System angezeigt werden, wie z.B. Fehlermeldungen, Standard-Programmausgaben, Menüs und Handbuchseiten, existieren Übersetzungen. Die GNU-gettext(1)-Werkzeuge werden für die meisten Übersetzungsaktivitäten als Backend-Programme im Hintergrund verwendet.
aptitude(8) bietet unter "Tasks" → "Lokalisierung" eine ausführliche Liste nützlicher Binärpakete, die lokalisierte Meldungen für Anwendungen und übersetzte Dokumentation enthalten.
So können Sie übersetzte Handbuchseiten (manpages) in Deutsch erhalten,
indem Sie das manpages-de
-Paket installieren. Um z.B. die
deutsche Handbuchseite für <programmname> aus
"/usr/share/man/de/
" zu lesen (falls für dieses Programm
eine übersetzte Handbuchseite existiert), führen Sie folgendes aus:
LANG=de_DE.UTF-8 man <programmname>
Durch die Sprachauswahl im Gebietsschema wird die Sortierreihenfolge von Zeichen mit sort(1) beeinflußt. In den Gebietsschemata für Spanisch und Englisch beispielsweise wird unterschiedlich sortiert.
Das Gebietsschema wirkt sich auch auf das Datumsformat von
ls(1)
aus. Die Ausgaben des Datumsformats von "LANG=C ls -l
"
und "LANG=en_US.UTF-8
" z.B. sind unterschiedlich (Näheres
in Abschnitt 9.2.5, „Angepasste Anzeige von Datum und Zeit“).
Die Zahlen-Interpunktion unterscheidet sich ebenfalls abhängig vom
Gebietsschema. Zum Beispiel wird ein-tausend-eins-komma-eins im englischen
Gebietsschema "1,000.1
" geschrieben, im deutschen
hingegen "1.000,1
". Sie können den Unterschied in einem
Tabellenkalkulationsprogramm sehen.