Lokalisierungs-Leitfaden
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. |
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.
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.
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
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.
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.
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.
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.
export LANG="de_DE.UTF-8"
export LC_COLLATE="C.UTF-8"
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:
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.
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).
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.
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:
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
- Konfiguration der Locale (Gentoo Handbuch)
- section-#Keyboard_layout innerhalb des Evdev-Artikels
- X resources
- Localization/Guide/The Euro symbol — how to display the Euro symbol (€) for the console and in X.
Quellenangaben
- Locales and Internationalization (gnu.org)
- L10N USE_EXPAND variable replacing LINGUAS
- Michał Górny: How LINGUAS are thrice wrong!
- [gentoo-dev] [RFC] How to deal with LINGUAS mess?
- [gentoo-dev] [RFC] Masterplan for solving LINGUAS problems
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.