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 leksykograficzne itd. Program musi
umieć określić swoje locale i zachowywać
się odpowiednio, aby można go było
przenieść do innych kultur.
The header
<locale.h> declares data types, functions, and macros
which are useful in this task.
Funkcje deklarowane to
setlocale(3), ustawiająca
bieżące locale, i
localeconv(3), 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 pierwszego argumentu funkcji
setlocale(3), możliwe jest ustawienie poniższych
informacji regionalnych:
-
LC_ADDRESS (rozszerzenie GNU, od glibc 2.2)
- Zmienia ustawienia opisujące formaty (np. adresy
pocztowe) służące do opisywania
położenia i rzeczy okołogeograficznych. Aplikacje
wymagające tej informacji mogą korzystać z
nl_langinfo(3) do pozyskania niestandardowych elementów,
takich jak _NL_ADDRESS_COUNTRY_NAME (nazwa kraju w danym
języku) i _NL_ADDRESS_LANG_NAME (nazwa języka w danym
języku), które zwracają przykładowo
łańcuchy "Deutschland" i "Deutsch" (dla
niemieckich locale). Inne nazwy elementów są wypisane w
<langinfo.h>.)
- LC_COLLATE
- Kategoria obejmuje zasady zestawiania używane do
sortowania i wyrażeń regularnych, w tym klasy
ekwiwalentów znaków i zestawiania elementów
wieloznakowych. Ta kategoria locale zmienia zachowanie funkcji
strcoll(3) i strxfrm(3), porównujących
łańcuchy znaków w alfabecie lokalnym. Na
przykład niemieckie scharfes S sortowane jest jako
"ss".
- LC_CTYPE
- Kategoria określa interpretację sekwencji
bajtów jako znaków (np. znaki jednobajtowe albo
wielobajtowe), klasyfikację znaków (np. alfabetyczna lub
numeryczna) i zachowanie klas znaków. W systemach glibc ta
kategoria określa również reguły
transliteracji znaków do iconv(1) i iconv(3). Zmienia
zachowanie operacji na znakach i funkcji klasyfikacyjnych, takich jak
isupper(3) i toupper(3), oraz znakowych funkcji
wielobajtowych, takich jak mblen(3) i wctomb(3).
-
LC_IDENTIFICATION (rozszerzenie GNU, od glibc
2.2)
- Zmienia ustawienia powiązane z metadanymi locale.
Aplikacje wymagające tej informacji mogą korzystać z
nl_langinfo(3) do pozyskania niestandardowych elementów
takich jak _NL_IDENTIFICATION_TITLE (tytuł tego dokumentu
locale) i _NL_IDENTIFICATION_TERRITORY (terytorium geograficzne do
którego odnosi się ten dokument locale), które
mogą zwrócić łańcuchy takie jak
"English locale for the USA" i "USA". Inne nazwy
elementów są wypisane w <langinfo.h>.
- LC_MONETARY
- Kategoria określa formatowanie używane do
wartości numerycznych związanych z pieniędzmi.
Zmienia informację zwracaną przez localeconv(3),
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(3).
- LC_MESSAGES
- Kategoria wpływa na język, w którym
wyświetlane są komunikaty, oraz to, jak wygląda
odpowiedź twierdząca i przecząca. Biblioteka GNU C
zawiera funkcje gettext(3), ngettext(3) oraz
rpmatch(3), ułatwiające użycie tych
informacji. Funkcje GNU z rodziny gettext biorą pod uwagę
również zmienną środowiska LANGUAGE
(zawierającą rozdzieloną dwukropkami listę
ustawień językowych), jeśli bieżące
ustawienia językowe są poprawne i różne od
"C". Ta kategoria wpływa również na
zachowanie catopen(3).
-
LC_MEASUREMENT (rozszerzenie GNU, od glibc 2.2)
- Zmienia ustawienia związane z systemem miar w locale
(np. metryczny albo jednostki używane w USA). Aplikacje mogą
korzystać z nl_langinfo(3) do pozyskania niestandardowego
elementu _NL_MEASUREMENT_MEASUREMENT, który zwraca
wskaźnik do znaku który ma wartość 1 (system
metryczny) lub 2 (system imperialny).
-
LC_NAME (rozszerzenie GNU, od glibc 2.2)
- Zmienia ustawienia opisujące formy
grzecznościowe. Aplikacje wymagające tej informacji
mogą korzystać z nl_langinfo(3) do pozyskania
niestandardowych elementów takich jak _NL_NAME_NAME_MR
(forma grzecznościowa dla panów) i _NL_NAME_NAME_MS
(forma grzecznościowa dla pań), które zwracają
łańcuchy takie jak "Herr" i "Frau" (dla
niemieckich ustawień regionalnych). Inne nazwy elementów
są wypisane w <langinfo.h>.
- LC_NUMERIC
- This category determines the formatting rules used for
nonmonetary numeric values—for example, the thousands separator and
the radix character (a period in most English-speaking countries, but a
comma in many other regions). It affects functions such as
printf(3), scanf(3), and strtod(3). This information
can also be read with the localeconv(3) function.
-
LC_PAPER (rozszerzenie GNU, od glibc 2.2)
- Zmienia ustawienia związane z wymiarami
standardowego rozmiaru papieru (np. letter albo A4). Aplikacje
wymagające wymiarów mogą je pozyskać
korzystając z nl_langinfo(3), aby otrzymać
niestandardowe elementy _NL_PAPER_WIDTH i _NL_PAPER_HEIGHT,
które zwrócą wartości int
określające wymiary w milimetrach.
-
LC_TELEPHONE (rozszerzenie GNU, od glibc 2.2)
- Zmienia ustawienia opisujące formaty używane
w telefonii. Aplikacji potrzebujące tej informacji mogą
korzystać z nl_langinfo(3) aby pobrać niestandardowe
elementy takie jak _NL_TELEPHONE_INT_PREFIX (międzynarodowy
prefiks używany do wybrania numerów w tym locale),
który zwróci przykładowo "49" (dla
Niemiec). Inne elementy są wypisane w
<langinfo.h>.
- LC_TIME
- Kategoria określa formatowanie wartości daty
i czasu. Przykładowo większość Europy
używa zegara 24-godzinnego, a w USA korzysta się z zegara
12-godzinnego. Ustawienie w tej kategorii wpływa na zachowanie
funkcji takich jak strftime(3) i strptime(3).
- LC_ALL
- Wszystko powyższe.
If the second argument to
setlocale(3) is an empty string,
"", for the default locale, it is determined using the
following steps:
- (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(3).
lconv ma następującą
deklarację:
struct lconv {
/* Informacja numeryczna (niewalutowa) */
char *decimal_point; /* Radix character */
char *thousands_sep; /* Separator for digit groups to left
of radix character */
char *grouping; /* Each element is the number of digits in
a group; elements with higher indices
are further left. An element with value
CHAR_MAX means that no further grouping
is done. An element with value 0 means
that the previous element is used for
all groups further left. */
/* Pozostałe pola zawierają informacje o walucie */
char *int_curr_symbol; /* First three chars are a currency
symbol from ISO 4217. Fourth char
is the separator. Fifth char
is '\0'. */
char *currency_symbol; /* Local currency symbol */
char *mon_decimal_point; /* Radix character */
char *mon_thousands_sep; /* Like thousands_sep above */
char *mon_grouping; /* Like grouping above */
char *positive_sign; /* Sign for positive values */
char *negative_sign; /* Sign for negative values */
char int_frac_digits; /* International fractional digits */
char frac_digits; /* Local fractional digits */
char p_cs_precedes; /* 1 if currency_symbol precedes a
positive value, 0 if succeeds */
char p_sep_by_space; /* 1 if a space separates
currency_symbol from a positive
value */
char n_cs_precedes; /* 1 if currency_symbol precedes a
negative value, 0 if succeeds */
char n_sep_by_space; /* 1 if a space separates
currency_symbol from a negative
value */
/* Positive and negative sign positions:
0 Parentheses surround the quantity and currency_symbol.
1 The sign string precedes the quantity and currency_symbol.
2 The sign string succeeds the quantity and currency_symbol.
3 The sign string immediately precedes the currency_symbol.
4 The sign string immediately succeeds the currency_symbol. */
char p_sign_posn;
char n_sign_posn;
};
POSIX.1-2008 standardized a number of extensions to the locale API, based on
implementations that first appeared in glibc 2.3. These extensions are
designed to address the problem that the traditional locale APIs do not mix
well with multithreaded applications and with applications that must deal with
multiple locales.
Rozszerzenia zajmują się formą nowych funkcji do tworzenia
i działania na obiektach locale (
newlocale(3),
freelocale(3),
duplocale(3) i
uselocale(3)) oraz
różnymi nowymi funkcjami bibliotycznymi z przyrostkiem
"_l" (np.
toupper_l(3)), które rozszerzają
tradycyjne, zależne od ustawień regionalnych API (np.
toupper(3)) pozwalając na określenie obiektu locale
który ma zostać zastosowany przy wykonywaniu funkcji.
Następujące zmienne środowiskowe są używane
przez
newlocale(3) i
setlocale(3) wpływając na
wszystkie nieuprzywilejowane zlokalizowane programy:
- LOCPATH
- A list of pathnames, separated by colons (':'), that should
be used to find locale data. If this variable is set, only the individual
compiled locale data files from LOCPATH and the system default
locale data path are used; any available locale archives are not used (see
localedef(1)). The individual compiled locale data files are
searched for under subdirectories which depend on the currently used
locale. For example, when en_GB.UTF-8 is used for a category, the
following subdirectories are searched for, in this order:
en_GB.UTF-8, en_GB.utf8, en_GB, en.UTF-8,
en.utf8, and en.
- /usr/lib/locale/locale-archive
- Zwykle domyślne położenie archiwum
locale.
- /usr/lib/locale
- Zwykle domyślna ścieżka dla
skompilowanych indywidualnie plików locale.
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)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Gwidon S. Naskrent <
[email protected]>, Robert Luberda
<
[email protected]> i Michał Kułach
<
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]