localization function
Főnév
localization function (tsz. localization functions)
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::localehaszná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! 🌍🚀
- localization function - Szótár.net (en-hu)
- localization function - Sztaki (en-hu)
- localization function - Merriam–Webster
- localization function - Cambridge
- localization function - WordNet
- localization function - Яндекс (en-ru)
- localization function - Google (en-hu)
- localization function - Wikidata
- localization function - Wikipédia (angol)