A programjaink esetén fontos koncepció a lokalizáció, fÅ‘leg számok, illetve a dátum és idÅ‘ megjelenÃtésekor.
A printf, scanf és a strftime fel van készÃtve lokalizációra. Alapértelmezetten ha nem állÃtunk lokalizációt, akkor a programok angolt felteleznek. Ezt megváltoztatni a programunkban a setlocale hÃvással tudjuk. Ennek az elsÅ‘ paramétere azt határozza meg, hogy mit akarunk lokalizálni, a második paramétere pedig azt, hogy milyen nyelven szeretnénk azt.
MINGW esetén az elérhető lokalizációs listát a következő parancs kiadásával tudjuk lekérdezni:
locale -a
A setlocale első paramétere az alábbi felsorolás értékek egyike lehet:
| Érték | Jelentés |
|---|---|
LC_ALL |
Minden lokalizálása |
LC_COLLATE |
Csak a strcoll és strxfrm lokalizálása |
LC_CTYPE |
Csak a karakterkezelő függvények lokalizálása |
LC_MONETARY |
Pénznemre vonatkozó információkra van hatással a localeconv függvényben |
LC_NUMERIC |
Csak a számok formázásának lokalizálása |
LC_TIME |
Idő lokalizálása |
Nézzünk egy példát:
#include <stdio.h>
#include <time.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "hungarian");
time_t unixTime;
struct tm *localTime;
time(&unixTime);
localTime = localtime(&unixTime);
double szam = 1.41;
char buffer[80];
strftime(buffer, sizeof(buffer) / sizeof(char), "%c", localTime);
printf("%f\r\n", szam);
printf("Unix ido: %lld\r\n", unixTime);
printf("Helyi ido: %s\r\n", buffer);
struct lconv * lc = localeconv();
printf("Penznem: %s\r\n", lc->currency_symbol);
printf("Nemzetkozi penznem: %s\r\n", lc->int_curr_symbol);
return (0);
}
A program kimenete valami hasonló lesz:
1,410000
Unix ido: 1699808982
Helyi ido: 2023. 11. 12. 18:09:42
Penznem: Ft
Nemzetkozi penznem: HUF
A setlocale hÃvás második paramétereként fordÃtó és operációs rendszer függÅ‘, hogy mit tudunk megadni. GCC és MINGW esetén a teljes névvel tudtam elérni a kÃvánt hatást. Ezen hÃvás, ahogy emlÃtettem hatással lesz a dátum és idÅ‘ megjelenÃtésére, valamint a számok formázására. Mindkét esetben a magyar beállÃtásoknak megfelelÅ‘ formátumban történik a kiÃrás.
A localeconv függvény meghÃvásával információkat szerezhetünk a jelenlegi nyelvi beállÃtásokról. Ezt egy lconv struktúrában kapjuk vissza, ami szintén nem a typedef kulcsszóval lett definiálva, ezért a struct kulcsszót ki kell tennünk használatakor.
Az lconv struktúra tartalma platformonként kiegészülhet további elemekkel, de ezeket biztosan tartalmaznia kell:
char *decimal_point; /*tizedes elválasztó*/
char *thousands_sep; /*ezres elválasztó*/
char *int_curr_symbol; /*Nemzetközi valuta szimbólum*/
char *currency_symbol; /*Valulta szimbólum*/
char *mon_decimal_point; /*Pénz esetén tizedes elválasztó*/
char *mon_thousands_sep; /*Pénz esetén ezres elválasztó*/