Czy ktoś mógłby mi podać więcej informacji na temat różnicy między Culture
i UICulture
w ramach .NET? Co robią i kiedy używać czego?Jaka jest różnica między kulturą a UICulture?
Odpowiedz
Culture
wpływa na sposób wyświetlania danych zależnych od kultury (daty, waluty, liczby itd.). Oto kilka przykładów:
var date = new DateTime(2000, 1, 2);
var number = 12345.6789;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(date); // 02.01.2000 00:00:00
Console.WriteLine(number.ToString("C")); // 12.345,68 €
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine(date); // 2000-01-02 00:00:00
Console.WriteLine(number.ToString("C")); // 12 345,68 $
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine(date); // 1/2/2000 12:00:00 AM
Console.WriteLine(number.ToString("C")); // $12,345.68
Kultura wpływa także parsowanie danych wprowadzonych przez użytkownika w taki sam sposób:
const string numberString = "12.345,68";
decimal money;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // OK!
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // FormatException is thrown, TryParse would return false
Strzeż przypadkach, gdy parsowanie wszystko działa ale wynik nie jest to, czego można się spodziewać że jest to.
const string numberString = "12.345";
decimal money;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // 12345
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // 12.345, where the . is a decimal point
UICulture
wpływa który plik zasobów (zasoby. lang .resx) zostanie załadowany przez aplikację.
Aby załadować zasoby niemieckie (prawdopodobnie tekst zlokalizowany), ustawisz UICulture
na niemiecką kulturę i wyświetlisz formatowanie niemieckie (bez wpływu na załadowane zasoby), aby ustawić Culture
.
Własność UICulture może się zmienić dla każdej przeglądarki internetowej, podczas gdy Kultura pozostaje stała.
Wartość Kultury można ustawić tylko dla określonych kultur, na przykład en-US lub en-GB. Zapobiega to wymogowi identyfikacji prawidłowego symbolu waluty używanego w en, gdzie en-US i en-GB mają różne symbole walut. Użytkownicy mogą ustawić kulturę i kulturę interfejsu użytkownika w swoich przeglądarkach.
Tylko niewielka sprawa do rozważenia oprócz niesamowitego wyjaśnienia @ Vache: Możesz ustawić zarówno UICulture, jak i Culture na (poziomie strony i poziomie aplikacji).
Aby ustawić je na poziomie aplikacji, wystarczy dodać sesji Globalizacja w web.config
przykład <globalization uiCulture="es" culture="es-MX" />
i ustawić je na poziomie strony, co jest dobre, aby dodać na konkretnej stronie (indywidualne), ustaw Kultura i UIculture atrybutów w dyrektywie @ strony
przykład <%@ Page UICulture="es" Culture="es-MX" %>
Culture and UICulture
Wartości są pary ciągów dwóch liter, pierwszy jest do określenia języka, a drugi dla określenia regionu. Przykład:
en-GB
tutaj en
reprezentuje English
i GB
reprezentuje Great Briton
en-US
tutaj en
reprezentuje English
i US
reprezentuje United States
Zastosowanie Culture
dla funkcji zależnych kultura jak data, godzina. i UICulture
służy do prawidłowego ładowania pliku zasobów.
Co oznacza, że możesz mieć angielskie etykiety i interfejs użytkownika (angielski UICulture) oraz norweską walutę, datę, godzinę i formatowanie liczb (norweski Kultura). W terminach Windows pomyśl o tym, że masz zainstalowany pakiet językowy dla menu i okna dialogowe (UICulture), ale działające z norweskimi ustawieniami regionalnymi (Culture.) –
Aby podkreślić konsekwencje tego: Nawet jeśli nie obsługujesz języka użytkownika, upewnij się, że wspierasz jego kulturę, do formatowania! Widziałem błędy, w których aplikacja cofa się do "en-US", zarówno jeśli chodzi o kulturę, jak i język, gdy trzeba tylko zmienić język. – ToolmakerSteve
Jaki jest sens używania całego obiektu 'CultureInfo' tylko do określenia pliku zasobu, w którym wystarczy napis' string'? (Np. Własność 'Language' w' FrameworkElement') – Wouter