locale - Beschreibung der Unterstützung für mehrere
Sprachen
ÜBERSICHT
#include <locale.h>
Eine Locale ist ein Satz von kulturellen und sprachlichen Regeln.
Die Regeln behandeln Aspekte wie die Sprache für Meldungen,
unterschiedliche Zeichensätze, lexikografische Konventionen usw. Um
in unterschiedlichen Kulturen eingesetzt werden zu können, muss ein
Programm in der Lage sein, die Locale zu ermitteln und deren Regeln
anzuwenden.
Die Header-Datei <locale.h> deklariert für
diese Aufgabe hilfreiche Datentypen, Funktionen und Makros.
Sie deklariert die Funktionen setlocale(3) für das
Setzen der aktuellen Locale und localeconv(3), welche Informationen
über Zahlenformate beschafft.
Es gibt unterschiedliche Kategorien für sprachspezifische
Informationen, die ein Programm benötigt. Sie sind als Makros
deklariert. Wenn sie als erstes Argument für setlocale(3)
benutzt werden, ist es möglich, eine dieser Kategorien auf die
gewünschte Locale zu setzen:
- LC_ADDRESS
(GNU-Erweiterung, seit Glibc 2.2)
- Mit diesem Makro können Sie die Einstellungen ändern, welche
die Formate beschreiben (zum Beispiel Postanschriften), die Orte und
sonstige Objekte mit geografischem Bezug ändern. Anwendungen,
welche diese Informationen benötigen, können
nl_langinfo(3) verwenden, um den Inhalt von
Nicht-Standardelementen, wie _NL_ADDRESS_COUNTRY_NAME
(Landesbezeichnung in der Sprache der jeweiligen Locale) und
_NL_ADDRESS_LANG_NAME (Sprachbezeichnung in der Sprache der
jeweiligen Locale), welche Zeichenketten wie »Deutschland«
und »Deutsch« (für deutsche Spracheinstellungen)
zurückliefern, zu ermitteln. Weitere Elementnamen werden in
<langinfo.h> aufgelistet.
- LC_COLLATE
- Diese Kategorie legt die Vergleichsregeln für das Sortieren sowie
reguläre Ausdrücke fest, einschließlich
Äquivalenzklassen für Zeichen und die Sortierreihenfolge
für Elemente, die aus mehreren Zeichen bestehen. Diese Kategorie
ändert das Verhalten der Funktionen strcoll(3) und
strxfrm(3), mit denen Zeichenketten gemäß des lokalen
Alphabets verglichen werden. Zum Beispiel wird das deutsche scharfe s
(ß) wie »ss« sortiert.
- LC_CTYPE
- Diese Kategorie legt die Interpretation von Bytesequenzen als Zeichen fest
(beispielsweise Einzelbyte- oder Multibyte-Zeichen), die Einteilung von
Zeichen (beispielsweise Buchstabe oder Ziffer) sowie das Verhalten von
Zeichenklassen. Auf Glibc-Systemen legt diese Kategorie außerdem
die Transliterationsregeln für iconv(1) und iconv(3)
fest. Sie ändert das Verhalten von zeichenorientierten und
Klassifizierungs-Funktionen wie isupper(3) und toupper(3)
sowie Funktionen für die Bearbeitung von Multibyte-Zeichen wie
mblen(3) oder wctomb(3).
- LC_IDENTIFICATION
(GNU-Erweiterung, seit Glibc 2.2)
- Mit diesem Makro ändern Sie Einstellungen der Metadaten für
die Locale. Anwendungen, welche diese Informationen benötigen,
können nl_langinfo(3) verwenden, um den Inhalt von
Nicht-Standardelementen, wie _NL_IDENTIFICATION_TITLE (Titel dieses
Locale-Dokuments) und _NL_IDENTIFICATION_TERRITORY (geografisches
Territorium, für das dieses Locale-Dokument anwendbar ist), welche
Zeichenketten wie »English Locale for the USA« und
»USA« zurückliefern, zu ermitteln. Weitere
Elementnamen werden in <langinfo.h> aufgelistet.
- LC_MONETARY
- Diese Kategorie bestimmt die für monitäre numerische Werte
verwandte Formatierung. Dies ändert die Informationen, die von
localeconv(3) zurückgegeben werden. Sie beschreiben das
Format, in dem Zahlen normalerweise ausgegeben werden, inklusive Details
wie Dezimalpunkt bzw. Dezimalkomma. Diese Informationen werden intern von
der Funktion strfmon(3) benutzt.
- LC_MESSAGES
- Diese Kategorie beeinflusst die Sprache, in der Meldungen angezeigt werden
und das Aussehen positiver oder negativer Antworten. Um die Anwendung
dieser Informationen zu vereinfachen, stellt die GNU-C-Bibliothek die
Funktionen gettext(3), ngettext(3) und rpmatch(3)
bereit. Die Funktionenfamilie GNU gettext richtet sich nach der
Umgebungsvariable LANGUAGE (enthält eine durch Doppelpunkte
getrennte Liste von Locales), wenn die Kategorie auf eine gültige,
von »C« verschiedene Locale gesetzt ist. Diese
Kategorie beeinflusst auch das Verhalten von catopen(3).
- LC_MEASUREMENT
(GNU-Erweiterung, seit Glibc 2.2)
- Dies ändert die Einstellungen des Einheitensystems in der Locale
(zum Beispiel metrisches oder angloamerikanisches Maßsystem).
Anwendungen können nl_langinfo(3) verwenden, um den Inhalt
des Nicht-Standard-Elements _NL_MEASUREMENT_MEASUREMENT zu
ermitteln, welches einen Zeiger auf ein Zeichen zurückgibt, das
entweder den Wert 1 (metrisches Maßsystem) oder 2
(angloamerikanisches Maßsystem) hat.
- LC_NAME
(GNU-Erweiterung, seit Glibc 2.2)
- Dies ändert die Einstellungen, welche die für
Personenadressen verwendeten Formate beschreiben. Anwendungen, welche
diese Information benötigen, können nl_langinfo(3)
verwenden, um den Inhalt von Nicht-Standard-Elementen, wie
_NL_NAME_NAME_MR (allgemeine Anrede für männliche
Personen) und _NL_NAME_NAME_MS (allgemeine Anrede für
weibliche Personen), zu ermitteln. Diese geben beispielsweise im in der
deutschen Locale-Einstellung »Herr« und »Frau«
zurück. Weitere Elementnamen sind in <langinfo.h>
aufgelistet.
- LC_NUMERIC
- Diese Kategorie bestimmt die für nichtmonitäre numerische
Werte verwandte Formatierung – beispielsweise das
Tausender-Trennzeichen und den Dezimaltrenner (ein Punkt in den meisten
englischsprachigen Ländern, in vielen anderen Regionen aber ein
Komma). Sie beeinflusst Funktionen wie printf(3), scanf(3)
und strtod(3). Diese Informationen können auch mit der
Funktion localeconv(3) ausgelesen werden.
- LC_PAPER
(GNU-Erweiterung, seit Glibc 2.2)
- Dies ändert die Einstellungen der Abmessungen des Standardpapiers
(zum Beispiel US-Letter oder A4). Anwendungen, welche diese Abmessungen
benötigen, können nl_langinfo(3) verwenden, um den
Inhalt der Nicht-Standard-Elemente _NL_PAPER_WIDTH und
_NL_PAPER_HEIGHT zu ermitteln, wobei int-Werte
zurückgegeben werden, die die Abmessungen in Millimetern
angeben.
- LC_TELEPHONE
(GNU-Erweiterung, seit Glibc 2.2)
- Dies ändert Einstellungen bezüglich der für
Telefoniedienste verwendeten Formate. Anwendungen, welche diese
Informationen benötigen, können nl_langinfo(3) zum
Ermitteln der Inhalte von Nicht-Standard-Elementen verwenden, wie
_NL_TELEPHONE_INT_PREFIX (internationales Präfix, das zum
Anrufen von Nummern in diese Locale verwendet wird, was für
Deutschland »49« zurückliefert). Weitere Elementnamen
sind in <langinfo.h> aufgelistet.
- LC_TIME
- Diese Kategorie regelt die für Datums- und Uhrzeitwerte verwandte
Formatierung. Beispielsweise verwendet der Großteil von Europa eine
24-Stunden-Uhr während eine 12-Stunden-Uhr in den Vereinigten
Staaten verwandt wird. Die Einstellung dieser Kategorie betrifft das
Verhalten von Funktionen wie strftime(3) and
strptime(3).
- LC_ALL
- alles bisherige
Wenn das zweite Argument von setlocale(3) für die
vorgegebene Locale eine leere Zeichenkette (empty string)
"" ist, wird sie mit den folgenden Schritten ermittelt:
- (1)
- Wenn eine nicht leere Umgebungsvariable LC_ALL existiert, wird der
Wert von LC_ALL benutzt.
- (2)
- Wenn eine nicht leere Umgebungsvariable mit dem gleichen Namen wie eine
der oben genannten Kategorien existiert, wird ihr Wert für die
gleichnamige Kategorie verwendet.
- (3)
- Wenn eine nicht leere Umgebungsvariable LANG existiert, wird ihr
Wert benutzt.
Informationen über die lokale Formatierung von Zahlen
liefert die Funktion localeconv(3) in der Datenstruktur struct
lconv. Sie ist wie folgt deklariert:
struct lconv {
/* Numerische (nicht währungsbezogene) Informationen */
char *decimal_point; /* Dezimal-Trennzeichen */
char *thousands_sep; /* Tausender-Trennzeichen */
char *grouping;
/* Jedes Element entspricht der Anzahl von Ziffern in jeder
Gruppe. Elemente mit einem höheren Index stehen weiter.
links. Ein Element mit dem Wert CHAR_MAX bedeutet, dass
keine weitere Gruppierung mehr stattfindet. Ein Element
mit einem Wert von 0 bedeutet, dass das vorherige Element
für alle Gruppen weiter links benutzt wird. */
/* Die restlichen Felder enthalten Währungsinformationen. */
/* Die ersten drei Zeichen stellen das Währungszeichen gemäß ISO
4217 dar. Das vierte Zeichen ist das Trennzeichen, das fünfte
Zeichen ist »\0«. */
char *int_curr_symbol;
char *currency_symbol; /* lokales Währungssymbol */
char *mon_decimal_point; /* Dezimal-Trennzeichen */
char *mon_thousands_sep; /* Tausender-Trennzeichen */
char *mon_grouping; /* Wie das »Grouping«-Element (oben) */
char *positive_sign; /* Vorzeichen für positive Werte */
char *negative_sign; /* Vorzeichen für negative Werte */
char int_frac_digits; /* internationale Zeichen für Brüche */
char frac_digits; /* lokale Zeichen für Brüche */
/* 1 wenn currency_symbol einem positiven Wert vorangestellt wird,
0 wenn es nachgestellt wird */
char p_cs_precedes;
/* 1 wenn ein Leerzeichen currency_symbol von einem positiven
Wert trennt */
char p_sep_by_space;
/* 1 wenn currency_symbol einem negativen Wert vorangestellt wird,
0 wenn es nachgestellt wird */
char n_cs_precedes;
/* 1 wenn ein Leerzeichen currency_symbol von einem negativen
Wert trennt. */
char n_sep_by_space;
/* Positionen positiver und negativer Vorzeichen:
0 Klammern umgeben die Menge und currency_symbol.
1 Das Vorzeichen wird der Menge und currency_symbol vorangestellt.
2 Das Vorzeichen wird der Menge und currency_symbol nachgestellt.
3 Das Vorzeichen wird currency_symbol unmittelbar vorangestellt.
4 Das Vorzeichen wird currency_symbol unmittelbar nachgestellt. */
char p_sign_posn;
char n_sign_posn;
};
In POSIX.1-2008 ist eine Reihe von Erweiterungen der Locale-API
standardisiert, basierend auf Implementationen, die erstmals in Glibc 2.3
erschienen sind. Diese Erweiterungen sollen das Problem beheben, dass
traditionelle Locale-APIs nur eingeschränkt mit
Multithread-Anwendungen und mit Anwendungen, die mehrere Locales verwenden,
zusammenarbeiten.
Die Erweiterungen haben die Form neuer Funktionen zum Erstellen
und Manipulieren von Locale-Objekten (newlocale(3),
freelocale(3), duplocale(3) und uselocale(3)) und
diverser neuer Bibliotheksfunktionen mit dem Suffix »_l« (zum
Beispiel toupper_l(3)), welche die traditionellen
Locale-abhängigen APIS erweitern (zum Beispiel toupper(3)), um
die Spezifizierung eines Locale-Objekts zu ermöglichen, das beim
Ausführen der Funktion angewendet werden soll.
Die folgende Umgebungsvariable wird von newlocale(3) und
setlocale(3) verwandt und betrifft daher alle unprivilegierten
lokalisierten Programme:
- LOCPATH
- Eine Liste von durch Doppelpunkt (»:«) getrennten Pfadnamen,
die zum Auffinden von Locale-Daten benutzt werden sollen. Falls diese
Variable gesetzt ist, werden nur die individuell kompilierten
Locale-Datendateien aus LOCPATH und die Systemvorgabepfade for
Locale-Data verwandt; andere verfügbare locale Archive werden nicht
verwandt (siehe localedef(1)). Die individuell kompilierten
Locale-Datendateien werden unter Unterverzeichnissen gesucht, die von der
aktuell verwandten Locale abhängen. Wird beispielsweise
en_GB.UTF-8 als eine Kategorie verwandt, dann werden die folgenden
Unterverzeichnisse in dieser Reihenfolge durchsucht: en_GB.UTF-8,
en_GB.utf8, en_GB, en.UTF-8, en.utf8 und
en.
- /usr/lib/locale/locale-archive
- Gewöhnlicher Standardort des Locale-Archivs.
- /usr/lib/locale
- Gewöhnlicher Standard-Vorgabeort für kompilierte
individuelle Locale-Dateien.
iconv(1), locale(1), localedef(1),
catopen(3), gettext(3), iconv(3), localeconv(3),
mbstowcs(3), newlocale(3), ngettext(3),
nl_langinfo(3), rpmatch(3), setlocale(3),
strcoll(3), strfmon(3), strftime(3), strxfrm(3),
uselocale(3), wcstombs(3), locale(5),
charsets(7), unicode(7), utf-8(7)
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Martin Schulze <joey@infodrom.org>, Martin Eberhard Schauer
<Martin.E.Schauer@gmx.de>, Mario Blättermann
<mario.blaettermann@gmail.com> und Dr. Tobias Quathamer
<toddy@debian.org> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General
Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite
finden, schicken Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer.