LOCALE(7)

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 */

  char *decimal_point;		/* tizedespont karakter  */
  char *thousands_sep;		/* 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;
  char *currency_symbol;	/* a helyi pénznem jele  */
  char *mon_decimal_point;	/* tizedespont karakter  */
  char *mon_thousands_sep;	/* az ezreseket elválasztó karakter  */
  char *mon_grouping;		/* mint a `grouping' elem (lásd fent) */
  char *positive_sign;		/* pozitív előjel  */
  char *negative_sign;		/* negatív előjel  */
  char int_frac_digits;		/* nemzetközi tört számjagyek  */
  char frac_digits;		/* 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@freemail.hu>