Dieses Handbuch wird mit freundlicher Genehmigung von Sebastian Hetze auf den Servern der Linux Information Systems AG gehosted.

next up previous contents index
Next: Erzeugung und Installation der Up: Locales und Native Language Previous: Überblick

Anwendung von Locales

Weil die Locales bereits auf der Ebene der Standard-C-Library von einigen wichtigen Funktionen benutzt werden, können prinzipiell alle Programme, die solche Funktionen benutzen, in den oben genannten Kategorien an die jeweiligen nationalen Konventionen angepaßt werden.

Außerdem stehen Locales auch jedem Anwenderprogramm über bestimmte Datenstrukturen direkt zur Verfügung. Damit ist es möglich, ein Programm auch über den von den Bibliotheksfunktionen abgedeckten Bereich hinaus an nationale Konventionen anzupassen.

Damit bestimmte nationale Locales wirksam werden, müssen zuerst die Locales allgemein aktiviert und dann ein spezielles Locale durch entsprechende Umgebungsvariablen ausgewählt werden.

Die Aktivierung der Locales muß in jedem Fall durch das Programm selbst geschehen. Das heißt, auch wenn ein Programm mit Funktionen aus der Standard-C-Bibliothek arbeitet, die Locales unterstützen, muß innerhalb des Programms durch einen Aufruf der Funktion setlocale(3) die Verwendung der Locales ausdrücklich angefordert werden. Wenn die Locales nicht aktiviert sind, arbeiten die Bibliotheksfunktionen nach den vom POSIX-Standard definierten internationalen Regeln für C-Programme.

Ob ein bestimmtes Binärprogramm mit Locales arbeitet oder nicht, läßt sich nur durch einen Versuch ermitteln. Bei allen Programmen, zu denen Sie die Sourcen haben, können Sie natürlich die Verwendung von Locales durch entsprechende Ergänzungen im Quelltext aktivieren.

Wenn ein Programm Locales unterstützt und aktiviert, erfolgt die Auswahl eines bestimmten nationalen Regelsatzes für eine oder mehr Kategorien normalerweise[*] durch bestimmte Umgebungsvariablen. Neben den oben genannten Bezeichnungen der 7 verschiedenen Kategorien können noch die Variablen LC_ALL  und LANG zur Bestimmung der Regelsätze beitragen.

Die Bezeichnung für einen bestimmten nationalen Regelsatz ist installationsabhängig. Im POSIX-Standard sind lediglich die beiden Namen C und POSIX gleichbedeutend für den Standardregelsatz ohne nationale Anpassungen fest vorgeschrieben. In der Praxis werden die Namen für die nationalen Regelsätze aus drei Teilen zusammengesetzt. Der erste Teil bezeichnet die Sprache, der zweite das Territorium und der dritte die Zeichencodierung.

Die Namen aller auf Ihrem System installierten Locales erfahren Sie vom locale-Kommando:[*]

$ locale -a
C
ISO-8859-1
de_AT.88591
de_BE.88591
de_CH.88591
de_DE.88591
de_LU.88591
it_IT.88591
fr_BE.88591
fr_CA.88591
fr_CH.88591
fr_FR.88591
fr_LU.88591
$ _

Beispielsweise ist de_CH.88591 das Locale für die deutschsprachige Schweiz mit Verwendung der Latin-1-Zeichencodierung, de_DE.88591 ist das entsprechende Locale für die BRD.

Sie können alle Programme, die mit Locales der Kategorie LC_TIME arbeiten, auf den schweizerischen Regelsatz umstellen, indem Sie der Umgebungsvariablen LC_TIME den Wert de_CH.88591 zuweisen. In der bash geschieht das durch das Shellkommando export(1):
$ export LC_TIME=de_CH.88591
$ _

Um gleichzeitig einen Regelsatz für alle Kategorien zu bestimmen, kann der Name des gewünschten Satzes in der Umgebungsvariablen LC_ALL oder LANG gespeichert werden. Die Priorität von LC_ALL ist höher als die der einzelnen Kategorien LC_TIME, LC_CTYPE etc., die Priorität von LANG dagegen niedriger als alle anderen. Wenn LC_ALL gesetzt ist, werden die für einzelne Kategorien gesetzten Umgebungsvariablen also ignoriert; wenn LANG gesetzt ist, wird der darin bezeichnete Regelsatz nur verwendet, sofern er nicht durch eine der anderen Variablen näher bestimmt wird.

Wenn Sie das locale-Kommando ohne Schalter aufrufen, erhalten Sie eine Liste aller Kategorien mit den aktuellen Locales.

$ export LANG=de_DE.88591
$ export LC_TIME=de_CH.88591
$ export LC_MESSAGES=C
$ locale 
LANG=de_DE.88591
LC_COLLATE="de_DE.88591"
LC_CTYPE="de_DE.88591"
LC_MONETARY="de_DE.88591"
LC_NUMERIC="de_DE.88591"
LC_TIME=de_CH.88591
LC_MESSAGES=C
LC_RESPONSE="de_DE.88591"
LC_ALL=
$ _

Die in Anführungszeichen eingeschlossenen Belegungen sind nicht explizit definiert, sondern aus anderen Umgebungsvariablen, hier LANG, abgeleitet.


next up previous contents index
Next: Erzeugung und Installation der Up: Locales und Native Language Previous: Überblick

Das Linux Anwenderhandbuch
(C) 1997 LunetIX