Czy ktoś mógłby mi udzielić nieco więcej informacji na temat różnic między platformą .NET Culture
iw UICulture
jej ramach? Co robią i kiedy czego używać?
126
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, gdziestring
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
tutajen
reprezentujeEnglish
iGB
reprezentujeGreat Briton
en-US
tutajen
reprezentujeEnglish
iUS
reprezentujeUnited States
Użyj
Culture
dla funkcji zależnych od kultury, takich jak data, godzina. iUICulture
służy do prawidłowego ładowania pliku zasobów.źródło
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" %>
źródło
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.
źródło