Von Harald Nikolisin am Di, 25. März 2003 um 17:23 #
weiss jemand wie man die locales unter C abfragt?
mir fällt nur ein mit: char *lang = getenv("LANG");
die umgebungsvariable abzufragen, das geht bestimmt auch eleganter. in der glibc doku hab ich allerdings nur gefunden, wie man mit setlocale() diese verändert.
Zu empfehlen ist dieses Vorgehen aber nicht. Einige Programme bringt so eine Konstellation aus dem Tritt.
"locale"s sind hochgrading Systemabhängig deswegen solltest Du Dir die passenden man-pages durchlesen, wie setlocale(3). Das nervigste an der Sache ist vor allem die teils wahllose Bezeichnung der "codesets" (z.B. ISO-8859-15 o. ISO8859-15 oder gar ISO885915, et cetera)
mir fällt nur ein mit:
char *lang = getenv("LANG");
die umgebungsvariable abzufragen, das geht bestimmt auch eleganter. in der glibc doku hab ich allerdings nur gefunden, wie man mit setlocale() diese verändert.
"A locale argument of NULL causes setlocale() to return the current locale"
und unter linux scheint es auch so:
"The setlocale() function is used to set or query the program's current locale."
Beachte, dass LANG, LC_ALL, LANGAUGE Vorrang vor allen anderen spezifischen LC_* Einstellungen haben, wenn sie parallel gestzt sind.
Bsp.:
Umgebungsvariablen sind gesetzt auf:
LC_ALL=de_DE.ISO8859-15
LC_COLLATE=en_US.US-ASCII
Dein Programm sollte nur LC_ALL auswerten und somit auch LC_COLLATE auf de_DE.ISO8859-15 setzen.
Viel Erfolg
beizubehalten.
thx
Deine Umgebungsvariablen könnten dann z.B. ungefähr so aussehen (FreeBSD):
LC_TIME=de_DE.ISO8859-15
LC_NUMERIC=de_DE.ISO8859-15
LC_MONETARY=de_DE.ISO8859-15
LC_CTYPE=en_US.US-ASCII
LC_COLLATE=en_US.US-ASCII
LC_MESSAGES=en_US.US-ASCII
Zu empfehlen ist dieses Vorgehen aber nicht. Einige Programme bringt so eine Konstellation aus dem Tritt.
"locale"s sind hochgrading Systemabhängig deswegen solltest Du Dir die passenden man-pages durchlesen, wie setlocale(3). Das nervigste an der Sache ist vor allem die teils wahllose Bezeichnung der "codesets" (z.B. ISO-8859-15 o. ISO8859-15 oder gar ISO885915, et cetera)
man 3 setlocale für SuSE7.3