Kapitel 8. I18N und L10N

Inhaltsverzeichnis

8.1. Die Tastatureingabe
8.1.1. Unterstützung für die Eingabemethode mit IBus
8.1.2. Ein Beispiel für Japanisch
8.1.3. Die Eingabemethode deaktivieren
8.2. Die Bildschirmausgabe
8.3. Das Gebietsschema (Locale)
8.3.1. Grundlagen der Kodierung
8.3.2. Argumentation für UTF-8-Gebietsschemata
8.3.3. Die Neukonfiguration des Gebietsschemas (Locale)
8.3.4. Der Wert der Umgebungsvariable "$LANG"
8.3.5. Spezifisches Gebietsschema nur für X-Window
8.3.6. Dateinamenkodierung
8.3.7. Lokalisierte Meldungen und übersetzte Dokumentation
8.3.8. Auswirkungen des Gebietsschemas

Multilingualisation (M17N) oder native Sprachunterstützung (die Anpassung eines Software-Produkts zur Unterstützung mehrerer Sprachen) wird in zwei Schritten durchgeführt:

[Tipp] 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 internationalisiert, indem UTF-8 genutzt wird, und über die Bereitstellung übersetzter Texte mittels 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.

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" werden 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.

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:

  1. Installieren Sie das ibus-anthy-Paket für das japanische Eingabewerkzeug mit seinen Paketempfehlungen wie z.B. im-config.

  2. Führen Sie "im-config" auf der Shell des Benutzers aus und wählen Sie als Eingabemethode "ibus".

  3. Wählen Sie dann "Einstellungen" → "Tastatur" → "Eingabequellen", klicken Sie bei den "Eingabequellen" auf "+" → "Japanisch" → "Japanisch (anthy)" und dann "Hinzufügen".

  4. 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.)

  5. Melden Sie sich am Benutzerkonto neu an.

  6. Kontrollieren Sie nochmals die Einstellung durch Ausführen von "im-config".

  7. Richten Sie die Eingabequelle durch einen Rechtsklick auf das Icon in der GUI-Werkzeugleiste ein.

  8. 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.

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.)

Das 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 durchschaubar 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 nur 1 Byte pro Zeichen belegen.

Frühere Debian-Systeme pflegten das Gebietsschema auf "LANG=C" oder "LANG=xx_YY" (ohne ".UTF-8") zu setzen.

  • 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 traditionelle 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] 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 Ihr 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 verfügbar.

“Text mit doppelten Anführungszeichen” ist kein "ASCII-Text mit doppelten Anführungszeichen"
‘Text mit einfachen Anführungszeichen’ ist kein 'ASCII-Text mit einfachen Anführungszeichen'

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 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. Jegliche dieser Einstellungen kann mit allen internationalen Zeichen umgehen.

[Anmerkung] Anmerkung

Obwohl das Setzen des Gebietsschemas auf "C" zur Verwendung von Texten in US-amerikanischem Englisch führt, können so nur ASCII-Zeichen genutzt werden.

Ü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 zeichenbasiertes 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] 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 grundsätzlichste 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] Anmerkung

Wenn ein während des Betrieb einzusteckender 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] 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 Textumwandlung“.

Samba verwendet für neuere Clients (Windows NT, 200x, XP) 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 enthalten und übersetzte Dokumentation bereithalten.

Zum Beispiel können Sie lokalisierte Ausführungen von Handbuchseiten (manpages) erhalten, indem Sie das manpages-<LANG>-Paket installieren. Um die italienische Handbuchseite für <programmname> aus "/usr/share/man/it/" zu lesen, führen Sie folgendes aus:

LANG=it_IT.UTF-8 man <programmname>