Qual è la differenza tra cultura e UICulture?

Qualcuno potrebbe darmi qualche informazione in più sulla differenza tra Culture e UICulture all’interno del framework .NET? Cosa fanno e quando usare cosa?

Culture influisce sul modo in cui vengono presentati i dati dipendenti dalla cultura (date, valute, numeri e così via). Ecco alcuni esempi:

 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 

La cultura influisce anche sull’analisi dell’input dell’utente allo stesso modo:

 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 

Fai attenzione ai casi in cui l’analisi ha esito positivo, ma il risultato non è quello che ti aspetteresti che sia.

 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 influenza il file di risorse (risorse .ang .resx) che verrà caricato dall’applicazione.

Quindi, per caricare le risorse tedesche (presumibilmente testo localizzato) si imposta UICulture alla cultura tedesca e per visualizzare la formattazione tedesca (senza alcun impatto su quali risorse vengono caricate) si impostare Culture .

Culture and UICulture

I valori sono coppie di stringhe di due lettere, la prima è per la definizione della lingua e la seconda per la definizione della regione. Esempio:

en-GB here en rappresenta l’ English e GB rappresenta il Great Briton

en-US qui en rappresenta l’ English e US United States rappresentano gli United States

Utilizza Culture per le funzioni dipendenti dalla cultura come data, ora. e UICulture è per il corretto caricamento del file di risorse.

Solo una piccola cosa da considerare oltre alla fantastica spiegazione di @ Vache: puoi impostare sia UICulture sia Cultura a (livello di pagina e livello di applicazione).

Per impostarli a livello di applicazione, è sufficiente aggiungere la sessione di globalizzazione in web.config

es.

E per impostarli a livello di pagina, che è opportuno aggiungere su una specifica pagina (singola), impostare gli attributi Cultura e UICultura nella direttiva @ page

es. <%@ Page UICulture="es" Culture="es-MX" %>

La proprietà UICulture potrebbe cambiare per ogni browser Web, mentre la Cultura rimane costante.

Il valore Cultura può essere impostato solo su culture specifiche, ad esempio en-US o en-GB. Ciò impedisce al requisito di identificare il simbolo di valuta corretto da utilizzare per en, dove en-US e en-GB hanno simboli di valuta diversi. Gli utenti possono impostare la cultura e la cultura dell’interfaccia utente nei propri browser.