Lokalisierungs-Leitfaden

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Localization/Guide and the translation is 100% complete.

Zeitzonen

Damit die Systemzeit stets gültig ist, ist es notwendig, die Zeitzone des aktuellen Standorts im System zu konfigurieren. Die Anleitungen für OpenRC basierte Systeme und systemd basierte Systeme finden sich im System Time Artikel.

Das Locale System

Was sind Locale?

Ein Locale ist ein Satz von Informationen, der von den meisten Programmen zum Ermitteln von landes- oder sprachspezifischen Einstellungen genutzt wird. Die Locale und ihre Daten sind Teil der System-Bibliotheken und werden auf den meisten Systemen unter dem /usr/share/i18n/locales Verzeichnis gespeichert. Der Name eines Locale folgt dem Schema ab_CD, wobei ab ein zwei- oder dreibuchstabiger Sprachcode nach ISO-639 und CD ein Ländercode nach ISO-3166 ist. Häufig werden Varianten wie @euro oder @latin an den Locale Namen angehängt, also beispielsweise de_DE@euro oder nan_TW@latin. Wenn Sie mehr über Locale erfahren möchten, lesen Sie bitte diesen Wikipedia Artikel und folgen Sie den dort angegebenen Quellen.

Umgebungsvariablen für Locale

Die folgende Tabelle zeigt die Variablen, mit denen verschiedene Aspekte einer Lokalisierung gesteuert werden. Jede Variable kann auf den Namen eines Locale im oben beschriebenen ab_CD Format gesetzt werden.

Name der Variablen Erläuterungen
LANG Setzt alle Locale-Einstellungen auf einmal, kann aber durch Setzen der LC_* Variablen individuell angepasst werden.
LC_COLLATE Steuert die Reihenfolge für alphabetische Sortierung von Strings. Dies beeinflusst beispielsweise die Sortierung von Verzeichnis Listings.
LC_CTYPE Steuert die Behandlung einzelner Zeichen. Etwa welche Zeichen Teil des Alphabets sind, oder welche als numerische Zeichen zählen. Ebenso wird gesteuert, welcher Zeichensatz verwendet wird.
LC_MESSAGES Die Einstellung für Programme, die das gettext-System zur Lokalisierung verwenden (die Mehrheit der GNU-Programme; in den folgenden Kapiteln finden Sie weitere Informationen hierzu).
LC_MONETARY Definiert die Anzeige der Währungseinheiten und ihrer spezifischen Eigenschaften.
LC_NUMERIC Legt die Darstellung der Zahlen fest, wie z.B. das Tausender-Trennzeichen und das Dezimal-Trennzeichen.
LC_TIME Steuert die Anzeige von Datum und Zeit.
LC_PAPER Legt das Standardpapierformat fest.
LC_ALL Eine besondere Variable, die alle anderen LC_-Variablen überschreibt.
Hinweis
Einige Programme erwarten eine traditionelle Sortierung gemäß des englischen Alphabets, während manche Locale eine andere Sortierung benutzen. Aus diesem Grund wird ausdrücklich empfohlen, die Variable LC_COLLATE bei den systemweiten Einstellungen auf den Wert C zu setzen.
Warnung
Von der Benutzung der Variablen LC_ALL wird dringend abgeraten, da sie automatisch alle anderen LC_* Variablen überschreibt (LANG ist davon nicht betroffen). Dies bedeutet, dass Änderungen an den anderen Variablen durch LC_ALL überdeckt werden, bis LC_ALL gelöscht oder auf einen leeren String gesetzt wird. Deshalb sollte man LC_ALL besser nicht in einer Startdatei setzen.

Für gewöhnlich setzen die meisten Anwender nur die LANG Konfigurationsvariable global.

Erzeugen bestimmter Locale

Die meisten Benutzer werden wahrscheinlich ein oder zwei Locale auf ihrem System benutzen. Wenn weitere Locale installiert werden sollen, sind diese in /etc/locale.gen anzugeben.

CODE Hinzufügen weiterer Locales in /etc/locale.gen
en_GB ISO-8859-1
en_GB.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
de_DE.UTF-8 UTF-8
Tipp
Eine Liste aller erlaubten Werte finden Sie in der Datei /usr/share/i18n/SUPPORTED. Bitte achten Sie auf Groß- und Kleinschreibung und verwenden Sie keine anderen Werte.
Tipp
Sie wissen nicht, welche Zeichenkodierung Sie verwenden sollen (ISO-8859-1 oder UTF-8)? Vor 15 Jahren wurde auf Linux-Systemen in Europa häufig ISO-8859-1 oder ISO-8859-15 verwendet. Nach einer langen und schmerzhaften Übergangsphase wird auf Linux-Systemen heute meistens UTF-8 verwendet. Es spricht nichts dagegen, die gewünschte Locale sowohl mit Zeichencodierung ISO-8859-1, als auch mit UTF-8 zu erstellen. Wenn Sie weiter unten eine systemweite oder benutzerspezifische Locale auswählen und setzen (außer "C") und Sie keine Präferenzen für eine Zeichencodierung haben, sollten Sie UTF-8 den Vorzug geben.
Hinweis
Wenn keine UTF-8 Locale benutzt werden soll, empfiehlt es sich, eine Locale mit dem Zusatz @euro aus /usr/share/i18n/SUPPORTED zu benutzen, um die Darstellung des Euro-Symbols (€) möglich zu machen.

Der nächste Schritt ist die Ausführung von locale-gen. Dies erzeugt alle in /etc/locale.gen konfigurierten Locale und schreibt diese in das Locale-Archiv unter /usr/lib/locale/locale-archive.

root #locale-gen
 * Generating 4 locales (this might take a while) with 1 jobs
 *  (1/5) Generating en_GB.ISO-8859-1 ...                       [ ok ]
 *  (2/5) Generating en_GB.UTF-8 ...                            [ ok ]
 *  (3/5) Generating de_DE.ISO-8859-1 ...                       [ ok ]
 *  (4/5) Generating de_DE.ISO-8859-15@euro ...                 [ ok ]
 *  (5/5) Generating de_DE.UTF-8 ...                            [ ok ]
 * Generation complete

Überprüfen Sie die Verfügbarkeit der Locale mit dem Befehl locale -a.

user $locale -a
C
POSIX
de_DE
de_DE.iso88591
de_DE.iso885915@euro
de_DE@euro
de_DE.utf8
deutsch
en_GB
en_GB.iso88591
en_GB.utf8
german

Der Inhalt von /usr/lib/locale/locale-archive kann durch den Befehl localedef angezeigt werden.

user $localedef --list-archive

Eine ungefilterte Anzeige bekommt man durch das Kommando strings.

user $strings /usr/lib/locale/locale-archive | less

Setzen einer Locale

OpenRC

Bei der Benutzung von OpenRC werden die Locale Einstellungen in Umgebungsvariablen gespeichert, die systemweit in /etc/env.d/02locale und benutzerspezifisch in ~/.bashrc eingestellt werden. Weitere Einzelheiten finden sich im Artikel zu UTF-8. Die systemweiten Einstellungen (/etc/env.d/02locale) können durch eselect locale verwaltet werden. Im folgenden Beispiel wird der Wert der Variablen LANG auf den Wert C gesetzt:

root #eselect locale list
Available targets for the LANG variable:
  [1]   C 
  [2]   POSIX
  [3]   en_US
  [4]   en_US.iso885915
  [5]   en_US.utf8
  [ ]   (free form)
root #eselect locale set 1

Natürlich ist es auch möglich, die Datei von Hand zu editieren und die Locale Variablen zu verändern.

Der obige Befehl listet das Suffix in Kleinbuchstaben ohne Bindestriche auf, die Glibc versteht beide Formen des Suffixes, viele andere Programme nicht. Das häufigste Beispiel dafür ist X. Daher ist es am besten, immer UTF-8 anstelle von utf8 zu verwenden.

DATEI /etc/env.d/02localeSetzen der systemweiten Locale in /etc/env.d/02locale
LANG="de_DE.UTF-8"
LC_COLLATE="C.UTF-8"

In Einzelfällen kann es vorkommen, dass Anwender fehlerhafte Darstellungen in nicht-englischen Locale-Umgebungen erhalten. Vor einiger Zeit ist dies beispielsweise bei dem Programm Krusader aufgetreten (siehe https://bugs.kde.org/show_bug.cgi?id=371582). In diesem Fall kann es helfen, eine möglicherweise vorhandene Zeile LC_ALL="" in der Datei /etc/env.d/02locale zu entfernen.

In mehr traditionellen UNIX-Umgebungen ist es gebräuchlich, die globalen Einstellungen unverändert auf der C Locale zu belassen. Die Benutzer können die von ihnen bevorzugte Locale dann in ihrer eigenen Shell-Konfigurationsdatei setzen.

DATEI ~/.bashrcSetzen der Benutzer-Locale
export LANG="de_DE.UTF-8"
export LC_COLLATE="C.UTF-8"
DATEI ~/.profileSetzen der Benutzer-Locale für X-Anwendungen
export LANG="de_DE.UTF-8"
export LC_COLLATE="C.UTF-8"

Eine andere Möglichkeit, das System zu konfigurieren, besteht darin, die Standardeinstellung C beizubehalten, aber gleichzeitig die UTF-8 Zeichencodierung zu aktivieren. Dieses Verhalten wird mit den folgenden Einstellungen in /etc/env.d/02locale erreicht:

CODE Verwenden der traditionellen C Locale mit Zeichencodierung UTF-8
LC_CTYPE=de_DE.UTF-8

Mit dem obigen Snippet können Benutzer lokalisierte Dateinamen richtig sehen, während sie nicht gezwungen werden, die ausgewählte Sprache vollständig zu benutzen.

Sobald die richtige Locale eingerichtet ist, müssen Sie die Umgebungsvariablen aktualisieren, um das System auf die Änderung aufmerksam zu machen.

Für eine Änderung der systemweiten Locale:

root #env-update && source /etc/profile

Für eine Änderung der benutzerspezifischen Locale:

user $source ~/.bashrc

Falls ein X-Server läuft, sind die nächsten Schritte: Beenden des X-Servers durch Ctrl+Alt+Backspace, ausloggen und als User (nicht als root) wieder einloggen.

Prüfen Sie, ob die Änderungen erfolgreich waren:

user $locale

Die Werte von Umgebungsvariablen, die explizit gesetzt wurden, z. B. in einer Export-Anweisung (bei Verwendung von Bash), werden ohne Anführungszeichen aufgeführt. Diejenigen, deren Wert von anderen Umgebungsvariablen des Gebietsschemas geerbt wurde, haben ihre Werte in Anführungszeichen.

systemd

Bei Systemd kommt das localectl Kommando zum Einsatz. Die verfügbaren Locale listet der folgende Befehl auf:

root #localectl list-locales

Setzen der gewünschten Locale:

root #localectl set-locale LANG=de_DE.utf8

Die Änderung überprüfen:

root #localectl | grep "System Locale"
   System Locale: LANG=de_DE.utf8

Tastaturlayout für die Konsole

OpenRC

Das von der Konsole verwendete Tastaturlayout wird durch die Variable keymap in /etc/conf.d/keymaps gesetzt. Gültige Werte finden Sie unter /usr/share/keymaps/YOUR_ARCH/. Das Unterverzeichnis i386 enthält weitere Unterteilungen nach dem Tastatur-Layout (qwerty, zerty, usw.). Für einige Sprachen (wie beispielsweise Deutsch) sind mehrere Varianten verfügbar (beispielsweise de-latin1.map.gz und alternativ de-latin1-nodeadkeys.map.gz). Experimentieren Sie mit den Varianten - dann können Sie entscheiden, welche Ihre Bedürfnisse am besten erfüllt.

DATEI /etc/conf.d/keymapsSetzen des Tastaturlayouts für die Konsole
keymap="de"
#keymap="de-latin1"
#keymap="de-latin1-nodeadkeys"

systemd

Bei systemd kann das Tastaturlayout, das für die Konsole verwendet wird, mit dem Befehl localectl gesetzt werden. Prüfen Sie zunächst die verfügbaren Tastaturlayouts:

root #localectl list-keymaps

Dann setzen Sie das gewünschte Tastaturlayout:

root #localectl set-keymap it

Testen Sie, ob der Befehl erfolgreich war:

root #localectl | grep "VC Keymap"
       VC Keymap: it

Tastaturlayout für den X-Server

OpenRC

Das vom X-Server zu verwendende Tastaturlayout wird in der Variablen XkbLayout in /etc/X11/xorg.conf.d/30-keyboard.conf angegeben. Für Details besuchen Sie den Xorg Guide und den Artikel über Keyboard Layout Switching.

systemd

Bei systemd kann das Tastaturlayout, das für den X11 Server verwendet wird, mit dem Befehl localectl gesetzt werden. Prüfen Sie zunächst die für X11 verfügbaren Tastaturlayout:

root #localectl list-x11-keymap-layouts

Setzen Sie das gewünschte Tastaturlayout:

root #localectl set-x11-keymap it

Testen Sie, ob der Befehl erfolgreich war:

root #localectl | grep "X11 Layout"
      X11 Layout: it

Native Language Support

Viele Linux Programme unterstützen Native Language Support (NLS). Ein großer Teil dieser Programme realisiert NLS mit Hilfe von GNU gettext. Unter Gentoo Linux kann über das USE-Flag nls gesteuert werden, ob die NLS-Funktionen von gettext-basierten Programme auch compiliert und installiert werden. Wenn Sie NLS wünschen, sollten Sie das USE-Flag nls setzen (entweder global in der Datei /etc/portage/make.conf oder für einzelne Pakete in /etc/portage/package.use). Programme, die NLS mit Hilfe von gettext realisieren, benötigen die gettext-Bibliothek. Selbstverständlich wird Portage gettext automatisch installieren, wenn es benötigt wird.

Das gettext-System speichert die Text-Bausteine für die einzelnen Sprachen in /usr/share/locale/<locale>/LC_MESSAGES/<package>.mo.

Nachdem Sie das nls USE-Flag gesetzt haben, müssen vermutlich einige Pakete neu installiert werden:

root #emerge --ask --changed-use --deep --with-bdeps=y @world

LINGUAS

Zumindest bis 2016 hatte die Variable LINGUAS zwei verschiedene Bedeutungen in Gentoo Linux (siehe dieser Blog-Artikel):

  • Zum einen konnte über diese Variable gesteuert werden, welche Lokalisierungen und Sprachpakete der Gentoo Paket-Manager installieren soll.
  • Zum anderen konnte über diese Variable gesteuert werden, welche Lokalisierungen gettext-basierte Pakete beim Compilieren von Paketen generieren und installieren sollen.

Um diese Doppeldeutigkeit zu entfernen, wurde beschlossen, den Gentoo Paket-Manager nicht mehr über die Variable LINGUAS, sondern über die Variable L10N zu steuern. Dabei hat sich auch die Syntax einiger Language Codes geändert. Siehe dieses News-Item

Heute sollte die Steuerung der vom Gentoo Paket-Manager zu installierenden Lokalisierungen über die Variable L10N erfolgen (siehe nächster Abschnitt). Die Variable LINGUAS kann zur Steuerung von gettext verwendet werden (wenn das benötigt wird).

Warnung
Die Verwendung der Variable LINGUAS führt dazu, dass bei dem Compilieren von Paketen verschiedene Sprachen nicht erstellt werden. Der Gentoo Paket-Manager erhält keine Informationen darüber, welche Sprachen nicht erstellt wurden. Dies kann zu Problemen führen, wenn Sie Binär-Pakete bauen und verteilen: das Gentoo Paket bietet dann Sprachvarianten an, die in dem Paket gar nicht vorhanden sind. Nutzen Sie LINGUAS nicht, wenn Sie Binärpakete bauen und verteilen wollen.

Wenn Sie die Variable LINGUAS verwenden wollen, sollten Sie sie am besten in /etc/portage/make.conf definieren. Ihr Wert ist eine "Leerzeichen"-separierte Liste von Language Codes:

root #nano -w /etc/portage/make.conf
## (Add in the LINGUAS variable. For instance, for German, Finnish and English:)
LINGUAS="de fi en"

Bitte beachten Sie, dass es einen großen Unterschied gibt zwischen einer nicht gesetzten Variable LINGUAS und einer, die auf den leeren String gesetzt: nicht gesetzte LINGUAS bedeutet, dass alle verfügbaren Sprachen installiert werden. Im Gegensatz dazu würden die meisten Ebuilds mit LINGUAS="" nur die Standardsprache des Pakets installieren, nicht aber die LC_MESSAGES Dateien.

Hinweis
Eine falsche Einstellung von LINGUAS kann zu einer unvollständigen Übersetzung einiger Anwendungen führen, wie z.B. KDE Plasma und seine Anwendungen. Versuchen Sie, LINGUAS zu entfernen und die entsprechenden Pakete neu zu bauen, wenn dieses Problem auftritt.

L10N

Eine USE_EXPAND Variable namens L10N steuert bei einigen Gentoo Paketen, welche zusätzlichen Lokalisierungen und Sprachpakete heruntergeladen und installiert werden. Ähnlich wie bei der Variable LINGUAS, sollte die Variable in der Datei /etc/portage/make.conf definiert werden. Ihr Wert ist eine "Leerzeichen"-separierte Liste von Language Tags:

root #nano -w /etc/portage/make.conf
## (Add in the L10N variable. For instance, for German and Brazilian Portuguese:)
L10N="de pt-BR"

Sie können die Variable auch für einzelne einzelne Pakete setzen. Editieren Sie dafür die Datei /etc/portage/package.use und setzen Sie die Language Tags mit vorangestelltem "l10n_", wie in folgendem Beispiel:

DATEI /etc/portage/package.use
app-text/aspell l10n_de l10n_pt-BR

Bitte beachten Sie, dass die aus 2 Buchstaben bestehenden Language Codes (beispielsweise de oder fr) sowohl bei LINGUAS, als auch bei L10N verwendet werden können. Komplizierte Einträge haben eine unterschiedliche Syntax:

  • LINGUAS verwendet die im gettext-Handbuch beschriebene Syntax
  • L10N verwendet IETF language tags (aka BCP 47)

So werden beispielsweise die LINGUAS-Einträge pt_BR und sr@latin bei L10N zu pt-BR und sr-Latn.

Eine Liste der erlaubten Werte für die Variable L10N finden Sie in der Datei /var/db/repos/gentoo/profiles/desc/l10n.desc:

user $grep -i portuguese /var/db/repos/gentoo/profiles/desc/l10n.desc
pt - Portuguese
pt-BR - Portuguese (Brazil)
pt-PT - Portuguese (Portugal)

Nachdem Sie die L10N USE_EXPAND Variable gesetzt haben, müssen vermutlich einige Pakete neu installiert werden:

root #emerge --ask --changed-use --deep --with-bdeps=y @world

Weiterführende Informationen

Quellenangaben

Literaturhinweise


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Alexander Holler, Steven Lucy, Benny Chuang, Lars Weiler, Tobias Scherbaum, Flammie Pirinen, , Francisco Blas Izquierdo Riera (klondike)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.