Jak ominac problem ustawien regionalnych danego komptera?

0

Mam program obliczeniowy napisany w Windowsie ze standardowymi ustawieniami regionalnymi - tzn. liczby sa wyswietlane z przecinkami. Potem sprawdzalem ten program pod Vista ktora miala ustawienia regionalne ze Stanow tzn. liczby byly z kropkami. (i problem byl taki ze wartosci domysle do obliczen byly zle traktowane bo system pomijal przecinki) . I teraz pytanie - program musi byc uniwerslany - dzialac na kazdym komie przy roznych ustawieniach regionalnych. Czy jest mozliwosc zeby on nie korzystal z ustawien regionalnych komputera na ktorym jest otwierany, tylko za kazdym razem ze swoich wewnetrznych ustawien przy ktorych zawsze bedzie uznawal przecinek???
Chodzi o jakies lokalne ustawienia programu niezalezne potem od ustawien danego kompa???

0

przyjrzyj się temu:

// format float to string
float num = 1.5f;
string str  = num.ToString(CultureInfo.InvariantCulture.NumberFormat);         // "1.5"
string str2 = num.ToString(CultureInfo.GetCultureInfo("en-US").NumberFormat); // "1.5"
string str3 = num.ToString(CultureInfo.GetCultureInfo("pl-PL").NumberFormat); // "1,5"
// parse float from string
float num2 = float.Parse("1.5", CultureInfo.InvariantCulture.NumberFormat);
float num3 = float.Parse("1.5", CultureInfo.GetCultureInfo("en-US").NumberFormat);
float num4 = float.Parse("1,5", CultureInfo.GetCultureInfo("pl-PL").NumberFormat);
0

W internecie znalazłem taką metodę na ustawienie Culture dla głównego wątku:

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

Nie było by lepiej poprawić program, by działał dobrze niezależnie od ustawień regionalnych?

0

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

Ktos: pamiętaj, że to może działać.. ale tylko dla tego wątku. Gdyby przyszło więcej wątków w aplikacji - jesteśmy w punkcie wyjścia (ewentualnie ustawić dla każdego :| ). Więc chyba rozwiązanie słabe.

Rozwiązanie średnie : przy parsowaniu / czytaniu itd używać z góry określonego CultureInfo (jak napisał rafal-st, lub użyć web/app - config).

Rozwiązanie najlepsze: napisać tak program, aby używał zawsze bieżącego CultureInfo i nie miał z tym problemów.

0

Po to są ustawienia regionalne, żeby nie było problemów z uniwersalnością aplikacji. Dzięki temu można napisać jeden program dla całego świata, księgowa w Polsce będzie mogła wstawiać przecinek, księgowa w USA kropkę, a w Chinach jakiś śmieszny znaczek.

plapius napisał(a)

(i problem byl taki ze wartosci domysle do obliczen byly zle traktowane bo system pomijal przecinki)

Więc wstawiaj wartości domyślne zgodne z ustawieniami regionalnymi. Przecież nie byłeś taki fajny, żeby wpisać je do TextBoxów, lecz trzymasz w kodzie aplikacji jako zmienne liczbowe i przy uruchamianiu aplikacji uzupełniasz nimi interfejs. PRAWDA?

To co teraz robisz, to próbujesz znaleźć obejście WŁASNEGO błędu i niepoprawnego myślenia.

0

Spoko - wszystko zalatwilem w ten sposob wymuszjac przecinek jako oddzielenie czescie dziesietnej:)

        string currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
        CultureInfo ci = new CultureInfo(currentCulture);
        ci.NumberFormat.NumberDecimalSeparator = ",";
        System.Threading.Thread.CurrentThread.CurrentCulture = ci;
0

string currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
CultureInfo ci = new CultureInfo(currentCulture);
ci.NumberFormat.NumberDecimalSeparator = ",";
System.Threading.Thread.CurrentThread.CurrentCulture = ci;

Beznadzieja :)

0

Zastosuj sie raczej do rady somekind'a, dobrze prawi :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1