NÉV
locale − a többnyelvűség támogatásának leírása
ÁTTEKINTÉS
#include <locale.h>
LEÍRÁS
A locale nyelvi és kultúrális szabályok összesége. Magában foglalja az a programok üzeneteinek nyelvét, különféle karakterkészleteket, ábécésorrendet, stb. A programoknak meg kell tudniuk állapítani, hogy milyen locale alatt futnak, és ennek megfelelően kell viselkedniük, annak érdekében, hogy különböző kultúrák között hordozhatóak legyenek.
A <locale.h> fejlécfájl olyan adattípusokat, függvényeket és makrókat deklarál, amelyek segítenek ezt a feladatot megoldani.
A setlocale() függvénnyel állíthatjuk be az aktuális locale-t. A localeconv() függvény adja vissza számok formázásával kapcsolatos információt.
A program
által igényelt lokalizációs
információk több
kategóriába sorolhatók, ezeket
makróként deklarálták. A
setlocale() függvény első
argumentumaként megadva lehet ezeket
beállítani:
LC_COLLATE
Ez a strcoll() és a strxfrm(), függvények viselkedését befolyásolja, amelyek két karakterláncot hasonlítanak össsze a helyi ábácé szerint. Például a német "ß" az abécében az "ss" betűkapcsolatnak felel meg.
LC_CTYPE
Ez a karakterkezelő és karakterosztályozó függvények viselkedését változtatja meg, például az isupper() és a toupper(), és a több-bájtos karaktereket kezelő függvényekét, például az mblen() vagy az wctomb().
Az |
LC_MONETARY a localeconv() által visszadott értéket változtatja meg, amely a számok nyomtatásának módját határozza meg, például hogy tizedesvesszőt vagy tizedespontot használ-e az adott locale. Ezt az információt az strfmon() függvény is használja. | ||
Az |
LC_MESSAGES megváltoztatja az üzenetek nyelvét, és a beleegyező illetve az elutasító válasz megjelenését. A GNU-C könyvtár rpmatch() függvénye megkönnyíti ezeknek az információknak a használatát. | ||
Az |
LC_NUMERIC a printf() és a scanf() függvénycsalád által használt információkat változtatja meg, ha figyelembe vetetjük velük a locale beállítását. Ezt az információt a localeconv() függvénnyel is kiolvashatjuk. | ||
Az |
LC_TIME az strftime() függvény viselkedését változtatja meg annak érdekében, hogy az időt az adott helynek megfelelő formában írja ki. Például a legtöbb európai országban 24 órás rendszerben mérik az időt, míg az USA-ban a 12 órás rendszert használják. | ||
LC_ALL |
Minden, ami eddig felsorolásra került. |
Ha a setlocale() második argumentuma üres karakterlánc, "", akkor a használandó locale a következő lépések szerint kerül meghatározásra:
1. |
Ha létezik az LC_ALL környezeti változó, és az értéke nem üres karakterlánc, akkor az LC_ALL értékét fogja a függvény használni. | ||
2. |
Ha létezik egy a fenti kategóriákkal megegyező nevű környezeti változó, és az értéke nem üres karakterlánc, akkor annak az értékét fogja a függvény használni arra a kategóriára. | ||
3. |
Ha létezik a LANG környezeti változó, és az értéke nem üres karakterlánc, akkor a LANG értékét fogja a függvény használni. |
A számok
formátumát az struct lconv
struktúrából olvashatjuk ki, amelyet a
localeconv() függvény ad vissza. A
struktúra deklarációja a
következő:
struct lconv
{
/* Numerikus (nem pénzügyi)
információk */
/* tizedespont karakter */ | |||||
/* az ezreseket elválasztó karakter */ |
/* Minden elem az adott
csoportban lévő számjegyek
számát adja meg,
jobbról balra. Ha egy elem értéke
CHAR_MAX, az azt jelenti, hogy nincs
további csoportosítás. Ha egy elem
értéke 0, az azt jelenti, hogy az
előző elem értéket kell
használni az ettől balra eső csoportokra.
*/
char *grouping;
/* Pénzügyi információk */
/* Az első
három karakter a pénznem jele az ISO 4217
szerint.
A negyedik karakter az elválasztó, az
ötödik ’ ’. */
char *int_curr_symbol;
/* a helyi pénznem jele */ |
/* tizedespont karakter */ | |||||
/* az ezreseket elválasztó karakter */
| ||||||
/* mint a ’grouping’ elem (lásd fent)
*/ | ||||||
/* pozitív előjel */ | ||||||
/* negatív előjel */ | ||||||
/* nemzetközi tört számjagyek */ | ||||||
/* helyi tört számjegyek */ |
/* 1 ha a currency_symbol a
pozitív érték előtt van, 0 ha
mögötte. */
char p_cs_precedes;
/* 1 ha a currency_symbol és a pozitív
érték között van szóköz.
*/
char p_sep_by_space;
/* 1 ha a currency_symbol a negatív
érték előtt van, 0 ha mögötte.
*/
char n_cs_precedes;
/* 1 ha a currency_symbol és a negatív
érték között van szóköz.
*/
char n_sep_by_space;
/* A pozitív és negatív előjel
pozíciója:
0 a mennyiség és a currency_symbol
zárójelben van.
1 Az előjel a mennyiség és a
currency_symbol előtt van.
2 Az előjel a mennyiség és a
currency_symbol mögött van.
3 Az előjel közvetlenül a mennyiség
és a currency_symbol előtt van.
4 Az előjel közvetlenül a mennyiség
és a currency_symbol mögött van. */
char p_sign_posn;
char n_sign_posn;
};
MEGFELELÉS
POSIX.1
LÁSD MÉG
setlocale(3), localeconv(3), locale(1), localedef(1), rpmatch(3), strfmon(3), strcoll(3), strxfrm(3), strftime(3)
MAGYAR FORDÍTÁS
Tímár András <timar_a [AT] freemail.hu>