Ugrás a tartalomhoz

localization function

A Wikiszótárból, a nyitott szótárból
(localization functions szócikkből átirányítva)


Főnév

localization function (tsz. localization functions)

  1. (informatika)

Lokalizációs függvények C++ nyelven

Bevezetés

A lokalizáció (localization, l10n) a programok nyelvi és területi beállításokhoz történő igazítása. C++ nyelven a locale osztály és a <clocale> illetve <locale> fejlécek biztosítják a lokalizációs funkciókat.

A lokalizáció hatással van például: - Dátum és idő formátumokra - Számformázásra (tizedesvessző vagy tizedespont) - Pénznemkezelésre - Karakterkészletek kezelésére

A C++ kétféle módon támogatja a lokalizációt: 1. C-stílusú lokalizáció (setlocale(), <clocale>) 2. C++ std::locale osztály (<locale>)



1. C-stílusú lokalizáció (setlocale())

A C-stílusú lokalizáció az LC_ALL, LC_NUMERIC, LC_TIME, stb. konstansokat használja. A setlocale() függvény segítségével beállíthatjuk a kívánt területi beállításokat.

1.1. setlocale() használata

#include <iostream>
#include <clocale> // C-stílusú lokalizációhoz szükséges
using namespace std;

int main() {
    setlocale(LC_ALL, "hu_HU.UTF-8"); // Magyar lokalizáció beállítása

    cout << "Lokalizáció beállítva magyarra!" << endl;
    return 0;
}

📌 Megjegyzés:
- "hu_HU.UTF-8" – magyar nyelvi beállítás (Linux/MacOS).
- Windows esetén "Hungarian" vagy "hu_HU" próbálható meg.
- Az elérhető lokalizációkat a rendszer locale -a paranccsal listázhatja ki.



1.2. setlocale() és számformátumok

#include <iostream>
#include <clocale>
using namespace std;

int main() {
    setlocale(LC_NUMERIC, "de_DE.UTF-8"); // Német lokalizáció beállítása

    double szam = 12345.67;
    cout << "Szám német lokalizációval: " << szam << endl;

    return 0;
}

📌 Német lokalizációban a tizedespont helyett tizedesvessző (12345,67) jelenik meg.



2. C++ std::locale osztály (<locale>)

A C++ lokalizáció az std::locale osztályon alapul. Ez több mint a setlocale(), mert karakterfeldolgozást, számformázást és pénznemkezelést is támogat.

2.1. std::locale alapvető használata

#include <iostream>
#include <locale>
using namespace std;

int main() {
    locale magyar("hu_HU.UTF-8"); // Magyar lokalizáció beállítása
    cout.imbue(magyar);  // A cout kimenetére alkalmazzuk

    cout << "Magyar lokalizáció beállítva!" << endl;
    return 0;
}

📌 Az imbue() függvény segítségével a cout használja a beállított lokalizációt.



2.2. Számformázás std::locale segítségével

#include <iostream>
#include <locale>
using namespace std;

int main() {
    locale magyar("hu_HU.UTF-8"); // Magyar lokalizáció
    cout.imbue(magyar); // Számformázás alkalmazása

    cout << "Formázott szám: " << 1234567.89 << endl;
    return 0;
}

📌 Ha a rendszer támogatja a magyar lokalizációt, akkor a szám így fog kinézni: 1 234 567,89



2.3. String karakterkonverzió (toupper() és tolower()) lokalizációval

Az std::locale lehetővé teszi, hogy a karaktereket a nyelvi szabályoknak megfelelően alakítsuk át nagy- vagy kisbetűssé.

#include <iostream>
#include <locale>
using namespace std;

int main() {
    locale magyar("hu_HU.UTF-8"); // Magyar nyelv beállítása
    string szoveg = "árvíztűrő tükörfúrógép";

    for (char &c : szoveg) {
        c = use_facet<ctype<char>>(magyar).toupper(c);
    }

    cout << "Nagybetűs változat: " << szoveg << endl;
    return 0;
}

📌 use_facet<ctype<char>>(locale).toupper(c): A lokalizált nagybetűsítés biztosítása.



2.4. Dátum és idő formázás (std::time_get)

A std::time_get és std::time_put használható dátumok formázására lokalizáció szerint.

#include <iostream>
#include <locale>
#include <ctime>
using namespace std;

int main() {
    locale magyar("hu_HU.UTF-8");
    cout.imbue(magyar);

    time_t most = time(nullptr);
    tm* idopont = localtime(&most);

    cout << "Aktuális dátum és idő: " << put_time(idopont, "%c") << endl;
    return 0;
}

📌 A %c formátum automatikusan alkalmazza a magyar dátumformázást, pl.:
2024. március 1. 12:34:56



2.5. Pénznemkezelés (std::money_put)

A pénznemformázás is testreszabható lokalizációval.

#include <iostream>
#include <locale>
#include <iomanip>
using namespace std;

int main() {
    locale magyar("hu_HU.UTF-8");
    cout.imbue(magyar);

    cout << "Formázott pénznem: " << put_money(1234567.89) << endl;
    return 0;
}

📌 Ha a rendszer támogatja, akkor így nézhet ki a kimenet:
1 234 567,89 Ft



3. Összegzés

Módszer Előnyök Hátrányok
setlocale() Egyszerű, kompatibilis C-vel Nem támogat komplex formázásokat
std::locale Hatékonyabb, támogat karakterkonverziót, dátumot, pénznemet Bonyolultabb, OS-függő

Legfontosabb függvények és osztályok

Függvény/osztály Leírás
setlocale(LC_ALL, "hu_HU.UTF-8") C-stílusú lokalizáció beállítása
std::locale l("hu_HU.UTF-8") C++ lokalizáció objektum létrehozása
cout.imbue(l) Kimenet formázása lokalizációval
use_facet<ctype<char>>(l).toupper(c) Lokalizált nagybetűs konverzió
put_money(amount) Pénznemformázás
put_time(timeptr, "%c") Dátum- és időformázás

Ajánlott használat

  • Ha egyszerűbb feladatokat végzünk, setlocale() elég lehet.
  • Ha összetettebb műveletekre van szükség, például karakter- vagy pénznemkezelésre, akkor az std::locale használata ajánlott.

C++ lokalizációs funkcióival rugalmasan kezelhetjük a különböző nyelvi és területi beállításokat! 🌍🚀