LOCALE(7) Podręcznik linuksowego programisty LOCALE(7)
locale - opis obsługi wielu języków
#include <locale.h>
Locale to zestaw reguł językowych i kulturalnych. Obejmują one aspekty
takie, jak język komunikatów, różne zestawy znaków, konwencje leksyko-
graficzne itd. Program musi umieć określić swoje locale i zachowywać
się odpowiednio, aby można go było przenieść do innych kultur.
Nagłówek <locale.h> deklaruje typy danych, funkcje i makra przydatne w
tym przedsięwzięciu.
Funkcje deklarowane to setlocale(), ustawiająca bieżące locale, i
localeconv(), pobierająca informacje o formatowaniu liczb.
Istnieją różne kategorie informacji regionalnych, których potrzebować
może program; zadeklarowane są one jako makra. Używając ich jako pier-
wszy argument funkcji setlocale(), możliwe jest ustawienie na żądane
locale jednego z poniższych makr:
LC_COLLATE
Używane do zmiany zachowania funkcji strcoll() i strxfrm(),
które używane są do porównywania łańcuchów w alfabecie lokalnym.
Na przykład niemieckie scharfes s sortowane jest jako "ss".
LC_CTYPE
Zmienia zachowanie operacji na znakach i funkcji klasyfika-
cyjnych, takich jak isupper() i toupper(), oraz znakowych
funkcji wielobajtowych, takich jak mblen() i wctomb().
LC_MONETARY
Zmienia informację zwracaną przez localeconv(), która opisuje
sposób, w jaki zwykle drukowane są liczby, ze szczegółami takimi
jak kropka dziesiętna kontra przecinek dziesiętny. Informacja ta
jest używana wewnętrznie przez funkcję strfmon().
LC_MESSAGES
Zmienia język, w którym wyświetlane są komunikaty, oraz to, jak
wygląda odpowiedź twierdząca i przecząca. Biblioteka GNU C zaw-
iera funkcje gettext(), ngettext() oraz rpmatch(), ułatwiające
użycie tych informacji. Funkcje GNU z rodziny gettext biorą pod
uwagę również zmienną środowiska LANGUAGE.
LC_NUMERIC
Zmienia informacje używane przez rodzinę funkcji printf() i
scanf(), kiedy radzi im się, żeby używały ustawień locale.
Informacja ta może być także odczytana funkcją localeconv().
LC_TIME
Zmienia zachowanie funkcji strftime(), wyświetlającej bieżący
czas w formie lokalnie akceptowalnej; na przykład, większość
Europy używa zegara 24-godzinnego, podczas gdy w USA używa się
12-godzinnego.
LC_ALL Wszystko powyżej.
Jeśli drugim argumentem setlocale() jest łańcuch pusty "" oznaczający
locale domyślne, ustala się je wedle poniższych kroków:
1. Jeśli istnieje niepusta zmienna środowiskowa LC_ALL, używana
jest wartość LC_ALL
2. Jeśli istnieje i jest niepusta zmienna środowiskowa o tej samej
nazwie co jedna z kategorii powyżej, dla tej kategorii używana
jest jej wartość.
3. Jeśli istnieje niepusta zmienna środowiskowa LANG, używana jest
wartość LANG
Wartości dotyczące lokalnego formatowania dostępne są w strukturze
lconv, zwracanej przez funkcję localeconv(). lconv ma następującą
deklarację:
struct lconv {
/* Informacja numeryczna (nie-walutowa) */
char *decimal_point; /* Znak dziesiętny */
char *thousands_sep; /* Separator tysięcy */
char *grouping; /* Każdy element to liczba cyfr w danej grupie,
elementy z większymi indeksami są bardziej
na lewo. Element o wartości CHAR_MAX oznacza,
że nie następuje dalsze grupowanie. Element
o wartości 0 oznacza, że dla wszystkich
grup bardziej na lewo używany jest element
poprzedni. */
/* Pozostałe pola zawierają informacje o walucie */
char *int_curr_symbol; /* Pierwsze trzy znaki to symbol waluty
z ISO 4217. Czwarty znak to
separator. Piąty to ' '. */
char *currency_symbol; /* Symbol lokalnej waluty */
char *mon_decimal_point; /* Znak dziesiętny */
char *mon_thousands_sep; /* Separator tysięcy */
char *mon_grouping; /* Jak element 'grupujący' (wyżej) */
char *positive_sign; /* Znak dla wartości dodatnich */
char *negative_sign; /* Znak dla wartości ujemnych */
char int_frac_digits; /* Międzynar. cyfry dziesiętne */
char frac_digits; /* Lokalne cyfry dziesiętne */
char p_cs_precedes; /* 1, jeśli symbol waluty poprzedza wartość
dodatnią, 0, jeśli następuje po niej */
char p_sep_by_space; /* 1, jeśli symbol waluty oddziela
od wartości dodatniej spacja */
char n_cs_precedes; /* 1, jeśli symbol waluty poprzedza wartość
ujemną, 0 jeśli następuje po niej */
char n_sep_by_space; /* 1, jeśli symbol waluty oddziela
od wartości ujemnej spacja */
/* Dodatnie i ujemne pozycje znaku:
0 Wartość i symbol waluty w nawiasach.
1 Znak poprzedza wartość i symbol waluty.
2 Znak następuje po wartości i symbolu waluty.
3 Znak następuje tuż przez symbolem waluty.
4 Znak następuje tuż po symbolu waluty. */
char p_sign_posn;
char n_sign_posn;
};
POSIX.1
Funkcje GNU gettext są zdefiniowane w LI18NUX2000.
locale(1), localedef(1), gettext(3), localeconv(3), ngettext(3),
nl_langinfo(3), rpmatch(3), setlocale(3), strcoll(3), strfmon(3),
strftime(3), strxfrm(3)
Linux 1993-04-24 LOCALE(7)