locale - Beschreibung der Unterstützung für mehrere Sprachen
#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.
POSIX.1-2001.
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)
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze
<
[email protected]>, Martin Eberhard Schauer
<
[email protected]>, Mario Blättermann
<
[email protected]> und Dr. Tobias Quathamer
<
[email protected]> 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