Jaka jest różnica między Culture a UICulture?

126

Czy ktoś mógłby mi udzielić nieco więcej informacji na temat różnic między platformą .NET Cultureiw UICulturejej ramach? Co robią i kiedy czego używać?

Niklas
źródło

Odpowiedzi:

148

Culturewpływa na sposób prezentowania danych kulturowych (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 również na analizowanie danych wejściowych użytkownika w ten 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

Uważaj na przypadki, w których parsowanie powiedzie się, ale wynik nie jest taki, jakiego byś się spodziewał.

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

UICulturewpływa na to, do którego pliku zasobów (Resources. lang .resx) będzie ładowana aplikacja.

Tak więc, aby załadować niemieckie zasoby (prawdopodobnie zlokalizowany tekst), należy ustawić UICulturekulturę niemiecką i wyświetlić niemieckie formatowanie (bez wpływu na to, które zasoby są ładowane), które należy ustawić Culture.

dee-see
źródło
39
Oznacza to, że możesz mieć angielskie etykiety i interfejs użytkownika (angielski UICulture) oraz norweską walutę, datę, godzinę i formatowanie liczb (kultura norweska). W terminach Windows należy o tym myśleć jak o zainstalowaniu pakietu językowego dla menu i okien dialogowych (UICulture), ale działa z norweskimi ustawieniami regionalnymi (Culture.)
Lasse V. Karlsen
2
Aby podkreślić konsekwencje tego: Nawet jeśli nie obsługujesz języka użytkownika, upewnij się, że wspierasz jego kulturę, formatowanie! Widziałem błędy polegające na tym, że aplikacja wraca do wersji „en-US” zarówno pod względem kultury, jak i języka, gdy wymagała tylko powrotu do języka.
ToolmakerSteve,
1
Jaki jest sens używania całego CultureInfoobiektu tylko do określenia pliku zasobów, gdzie stringwystarczyłoby? (Np. LanguageWłasność FrameworkElement)
Wouter
2

Culture and UICulture

Wartości to pary dwuliterowych ciągów, pierwsza służy do definiowania języka, a druga do definiowania regionu. Przykład:

en-GBtutaj enreprezentuje Englishi GBreprezentujeGreat Briton

en-UStutaj enreprezentuje Englishi USreprezentujeUnited States

Użyj Culturedla funkcji zależnych od kultury, takich jak data, godzina. i UICulturesłuży do prawidłowego ładowania pliku zasobów.

Broń X
źródło
0

Tylko mała sprawa do rozważenia oprócz niesamowitego wyjaśnienia @ Vache: możesz ustawić zarówno UICulture, jak i Culture na (poziom strony i poziom aplikacji).

Aby ustawić je na poziomie aplikacji, wystarczy dodać sesję globalizacji w web.config

na przykład <globalization uiCulture="es" culture="es-MX" />

Aby ustawić je na poziomie strony, co dobrze jest dodać na określonej (indywidualnej) stronie, ustaw atrybuty Culture i UICulture w ramach dyrektywy @ page

na przykład <%@ Page UICulture="es" Culture="es-MX" %>

Hooman
źródło
-4

Właściwość UICulture może ulec zmianie dla każdej przeglądarki sieci Web, podczas gdy Culture pozostaje niezmienna.

Wartość Culture można ustawić tylko na określone kultury, takie jak en-US lub en-GB. Zapobiega to wymogowi identyfikacji prawidłowego symbolu waluty, który ma być używany dla 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.

Mohammed Nazer
źródło