2012-02-29 33 views

Odpowiedz

128

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.

+36

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.) –

+1

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

+0

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

-4

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.

0

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" %>

1

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.