Qual'è la differenza tra Culture e UICulture?


126

Qualcuno potrebbe darmi qualche informazione in più sulla differenza tra Culturee UICultureall'interno del framework .NET? Cosa fanno e quando usare cosa?

Risposte:


148

Cultureinfluenza la modalità di presentazione dei 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 influenza anche l'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.

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

UICultureinfluisce su quale file di risorse (Resources. lang .resx) verrà caricato dall'applicazione.

Quindi per caricare risorse tedesche (presumibilmente testo localizzato) dovresti impostare UICulturela cultura tedesca e visualizzare la formattazione tedesca (senza alcun impatto su quali risorse vengono caricate) che imposteresti Culture.


39
Ciò significa che puoi avere etichette in inglese e UI (UICulture inglese), e la valuta norvegese, la data, l'ora e la formattazione dei numeri (cultura norvegese). In termini di Windows, pensa a come avere un language pack installato per i menu e le finestre di dialogo (UICulture), ma in esecuzione con le impostazioni regionali norvegesi (Cultura.)
Lasse V. Karlsen,

2
Per sottolineare le implicazioni di ciò: anche se non supporti la lingua di un utente, assicurati di supportare la sua cultura, per la formattazione! Ho visto errori in cui un'app torna a "en-US" sia per la cultura che per la lingua, quando è necessario solo il fallback per la lingua.
ToolmakerSteve

1
Qual è lo scopo nell'uso di un intero CultureInfooggetto solo per determinare il file di risorse dove stringsarebbe sufficiente? (Ad esempio, la Languageproprietà del FrameworkElement)
Wouter,

2

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-GBqui enrappresenta Englishe GBrappresentaGreat Briton

en-USqui enrappresenta Englishe USrappresentaUnited States

Utilizzare Cultureper funzioni dipendenti dalla cultura come data, ora. ed UICultureè per il corretto caricamento del file di risorse.


0

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

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

per esempio <globalization uiCulture="es" culture="es-MX" />

E per impostarli a livello di pagina, che è utile aggiungere in una pagina specifica (individuale), impostare gli attributi Cultura e UICulture nella direttiva @ page

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


-4

La proprietà UICulture potrebbe cambiare per ciascun browser Web, mentre la cultura rimane costante.

Il valore Cultura può essere impostato solo su culture specifiche, come en-US o en-GB. Ciò impedisce l'obbligo 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 loro browser.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.