C/Standardikirjastot/locale.h
#include <locale.h>
Sisältää maa-asetusten käyttöön liittyviä asioita.
Maa-asetukset ovat yksi C-kirjaston hankalimpia osia, sillä ne aiheuttavat usein ongelmia ulkoisten kirjastojen kanssa. Tämän lisäksi maa-asetukset määritellään standardissa ohjelmanlaajuisesti, joten ne aiheuttavat pulmia myös monisäikeisten ohjelmien kanssa. Viisainta lieneekin monimutkaisemmissa ohjelmissa olla käyttämättä C:n maa-asetuksia lainkaan ja antaa kaiken käyttää oletusasetuksia.
Oletusmaa-asetukset ovat niin sanotut "C-asetukset" (engl. C locale).
struct lconv
on tietue, joka sisältää lukujen esittämiseen liittyviä tietoja. Siinä on (ainakin) seuraavat kentät:
char *decimal_point; /* desimaalierotin C-asetuksilla "." */ char *thousands_sep; /* tuhaterotin C-asetuksilla "" */ char *grouping; /* numeroiden ryhmittely C-asetuksilla "" */ char *int_curr_symbol; /* rahayksikön kansainvälinen koodi C-asetuksilla "" */ char *currency_symbol; /* rahayksikön merkki C-asetuksilla "" */ char *mon_decimal_point; /* desimaalierotin rahamäärissä C-asetuksilla "" */ char *mon_thousands_sep; /* tuhaterotin rahamäärissä C-asetuksilla "" */ char *mon_grouping; /* numeroiden ryhmittely rahamäärissä C-asetuksilla "" */ char *positive_sign; /* positiivinen etumerkki rahamäärissä C-asetuksilla "" */ char *negative_sign; /* negatiivinen etumerkki rahamäärissä C-asetuksilla "" */ char int_frac_digits; /* desimaalien lukumäärä kans.väl. rahamäärissä C-asetuksilla CHAR_MAX */ char frac_digits; /* desimaalien lukumäärä rahamäärissä C-asetuksilla CHAR_MAX */ char p_cs_precedes; /* onko rahayksikön merkki edellä, kun määrä >= 0 C-asetuksilla CHAR_MAX */ char p_sep_by_space; /* onko rahayksikön merkki edellä, kun määrä < 0 C-asetuksilla CHAR_MAX */ char n_cs_precedes; /* onko rahayksikön merkillä väli, kun määrä >= 0 C-asetuksilla CHAR_MAX */ char n_sep_by_space; /* onko rahayksikön merkillä väli, kun määrä < 0 C-asetuksilla CHAR_MAX */ char p_sign_posn; /* etumerkin paikka rahamäärissä kun määrä >= 0 C-asetuksilla CHAR_MAX */ char n_sign_posn; /* etumerkin paikka rahamäärissä kun määrä < 0 C-asetuksilla CHAR_MAX */
grouping ja mon_grouping ovat merkkijonoja, jossa merkin koodi ilmaisee numeroiden määrän; esim "\1\2\3" tarkoittaa, että numerot ryhmitellään oikealta 1 numeron, 2 numeron ja sen jälkeen 3 numeron ryhmiin (123 456 87 9). Tyhjä merkkijono ilmaisee, ettei numeroita ryhmitellä lainkaan.
*_sign_posn on 0, jos rahayksikön merkki ja määrä on suluissa, 1 jos etumerkki on ennen merkkiä ja määrää, 2 jos niiden jälkeen, 3 jos etumerkki on juuri ennen rahayksikön merkkiä, 4 jos juuri sen jälkeen.
char-tyyppisten kenttien arvo on CHAR_MAX, jos arvo on tuntematon.
Lisäksi määritellään makrot
LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC LC_TIME
jotka vastaavat maa-asetuksia tietyin osin (kaikki osat, merkkien järjestys, merkkien luokittelu, rahamäärien esittäminen, lukujen esittäminen, päivämäärät ja kellonajat).
char *setlocale(int luokka, const char *asetukset);
vaihtaa tai tarkistaa maa-asetukset. luokka on jokin LC_:llä alkavista makroista. Jos asetus on NULL, maa-asetusta ei muuteta. Jos se on tyhjä merkkijono, otetaan käyttöön järjestelmän oletusasetukset. Jos se on merkkijono, jossa on vain kirjain C, otetaan käyttöön C-asetukset. Muussa tapauksessa järjestelmä säätää, mikä oikea muoto on.
Funktio palauttaa merkkijonon, joka vastaa nykyisiä maa-asetuksia. Jos maa-asetuksia yrittää muuttaa ja tämä epäonnistuu, setlocale palauttaa NULL:in.
struct lconv *localeconv(void);
palauttaa sisäisessa puskurissa olevan struct lconv -tietueen, joka täytetään nykyisten maa-asetusten mukaisesti.