MVC3 i Polskie CultureInfo

0

Hej.

Pytanie Jak Ogarnąć dobrze Polską i Angielską Kulturę w Dużym projekcie MVC?

Mamy dość sporą Aplikację MVC3 w której do tej pory nie były używanie przecinki i kropki tylko liczby całkowite, a daty były z Datepickerów więc Każdy miał temat globalizacji Gdzieś ;)
Problem się pojawił teraz gdy trzeba wpisywać faktycznie przecinki i kropki do Textboxów, oraz wiemy że mogą się zdarzyć użytkownicy "Angielscy"
Wklejam Screena z załącznikiem.
W textboxie jest z kropką - MVC sam sobie przypina w ten sposób, natomiast stringa obok sami parsujemy.
jak wpiszecie z Przecinkiem to sypie błędem walidacji.

próbowałem tego postu : http://afana.me/post/aspnet-mvc-internationalization-part-2.aspx
lecz niestety nie pomogło. musimy pilnować za kazdym razem czy jest kropka czy przecinek, bawić się JS lub Przy Parse sprawdzać w jakiej kulturze dany wpis jest, co jest lekko mówiąc upierdliwe

Bardzo bym prosił o Wasze realne doświadczenia, Linki ze Stacka nie pomagają, chyba ze czegoś nie wykonuję ;)

0

My robimy takie podejście, że kopiowane jest aktualne CultureInfo, natomiast formaty wewn. inputów i formaty dat są stałe.
Inputy z liczbami zmiennoprzecinkowymi są z kropkami, a daty w formacie jak PL.
Jest tak w miejscach gdzie następują jakieś wprowadzanie danych/edycja.
Właśnie po to, żeby nie było problemów z javascriptem.

string cultureName = this.LanguageService.GetLanguageCultureNameForCurrentUser();
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
customCulture.NumberFormat.NumberDecimalSeparator = ".";
customCulture.NumberFormat.PercentDecimalSeparator = ".";
customCulture.NumberFormat.CurrencyDecimalSeparator = ".";
customCulture.DateTimeFormat = CultureInfo.CreateSpecificCulture("pl-PL").DateTimeFormat;
Thread.CurrentThread.CurrentCulture = customCulture;

Natomiast, tam gdzie liczby mają wartość jedynie informacyjną (bez możliwości wprowadzania, przykładowo wyświetlanie ceny produktu, to jest formatowanie zależne od obecnego CultureInfo) odpowiednio przyjaźnie sformatowane dla warstwy prezentacji (separator zgodny z aktualną kulturą, separatory tysięczne itd.).
Prosty przykład metody formatującej liczbę w warstwie prezentacji do ładnego wyświetlania ceny:

public string GetCurrencyFormattedValue(decimal value)
{
      return value.ToString("N", System.Globalization.CultureInfo.GetCultureInfo(System.Globalization.CultureInfo.CurrentCulture.Name));
}
0

Odpowiadaj na posta pod postem proszę, a nie w komentarzach.
Metoda ta zwraca nazwę CultureInfo, czyli np. "pl-PL", czy "en-US" wybranego przez użytkownika języka w swoich danych profilowych. Jeżeli nie ustawiał sobie języka albo jest niezalogowany, to zwracany jest pierwszy element z Request.UserLanguages, a gdy i jego brak to w ostateczności zwracana jest nazwa CultureInfo, która została ustawiona w ustawieniach aplikacji jako domyślna.
Na inputy zmiennoprzecinkowe zawsze można sobie javascriptem nałożyć maski takie, że nawet jak ktoś wciśnie przecinek to pojawia się kropka.
A co do formatu dat, to np. jquery datepicker ma możliwość zmiany formatu daty na podstawie nazwy CultureInfo, więc dla dat można też w prosty sposób używać formatów powiązanych z CultureInfo, jeżeli jest taka potrzeba.
Wtedy tylko ustawiasz sobie separatory jako kropki, a reszta jest dostosowana do odwiedzającego.

0

hej. Dzięki ci bardzo, Jest to jakiś patent. Szczególnie z tymi filtrami JS :) Tak jak pisałem datapickery są juz ogarnięte dlatego jedynie z textboxami mamy Problem. Spróbuje Twoją Drogą

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