Sokszor előjön az igény, hogy a kódban használjunk valami lokalizációhoz kötött logikát, ami lehet akár csak egyszerűen egy törtszám értelmezése is stringből vagy esetleg az, hogy egy adott karakterlánc mivel kezdődik. Az ilyen esetekben kézenfekvő választásnak tűnik a CultureInfo.CurrentCulture tulajdonság, hiszen pont erre való: területi beállításokat tartalmaz.
Például Magyarországon egy átlagos magyar nyelvű Windows rendszeren ez tökéletesen működik tört számok értelmezésére:
float number = float.Parse("20,16", CultureInfo.CurrentCulture);
//number = 20,16
Viszont ez a kód hibásan működik az átlagos amerikai Windows verziókban, pontosabban minden olyan környezetben, ahol a területi beállítások között a program készítésekor tesztelt és elvárt formátumértékektől eltérőek vannak beállítva. Ha, mondjuk, valaki Magyarországon egy külföldi verziót használ gyári adatokkal, akkor a fenti kódban a tört számból kihagyja a tizedesvesszőt, mivel azt az ezres szeparátorának tekinti.
A CultureInfo.CurrentCulture az adott szálhoz tartozó CultureInfot adja vissza, ezért .NET 4-ben és az előtti verziókban minden esetben, amikor biztosra akarunk menni, szálanként meg kell adni, hogy milyen lokalizációt használjon. Szerencsére az újabb .NET-ben beállítható application domain szinten is, hogy mi legyen az alapértelmezett a CultureInfo.DefaultThreadCurrentCulture segítségével. Ezzel elegendő egyszer, az alkalmazás indulásakor beállítani a kívánt lokalizációt.
CultureInfo.DefaultThreadCurrentCulture =
CultureInfo.CreateSpecificCulture("hu-HU");
...
float number = float.Parse("20,16", CultureInfo.CurrentCulture);
//number = 20,16
Nincsenek megjegyzések:
Megjegyzés küldése