Odpowiedzi:
Culture
wpł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
UICulture
wpł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ć UICulture
kulturę niemiecką i wyświetlić niemieckie formatowanie (bez wpływu na to, które zasoby są ładowane), które należy ustawić Culture
.
CultureInfo
obiektu tylko do określenia pliku zasobów, gdzie string
wystarczyłoby? (Np. Language
Własność FrameworkElement
)
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-GB
tutaj en
reprezentuje English
i GB
reprezentujeGreat Briton
en-US
tutaj en
reprezentuje English
i US
reprezentujeUnited States
Użyj Culture
dla funkcji zależnych od kultury, takich jak data, godzina. i UICulture
służy do prawidłowego ładowania pliku zasobów.
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" %>
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.