Qual è la differenza tra le proprietà CurrentCulture e CurrentUICulture di CultureInfo in .NET?
-
11-07-2019 - |
Domanda
In .NET esiste la classe CultureInfo
nello spazio dei nomi System.Globalization
. Ha due proprietà simili che restituiscono entrambi i valori del tipo CultureInfo
: CurrentCulture
e CurrentUICulture
.
Qual è la differenza tra loro?
Quale dovrei usare quando e perché?
Soluzione
CurrentCulture
è la rappresentazione .NET delle impostazioni internazionali predefinite dell'utente del sistema. Controlla il numero predefinito e la formattazione della data e simili.
CurrentUICulture
si riferisce alla lingua dell'interfaccia utente predefinita, un'impostazione introdotta in Windows 2000. Si tratta principalmente della parte relativa alla localizzazione / traduzione dell'interfaccia utente della tua app.
Qualunque opzione regionale per cui il sistema è configurato sarà la "corrente" valori nell'app .NET.
Spesso sono entrambi uguali. Ma sul mio sistema sarebbero diversi: preferisco i miei numeri e le mie date nel formato tedesco, quindi il CurrentCulture
sarebbe tedesco, ma preferisco anche tutte le mie applicazioni in inglese, quindi il CurrentUICulture
sarebbe inglese.
C'è un bell'articolo sull'argomento: Ordinamento di tutto: perché noi hanno sia CurrentCulture che CurrentUICulture
Altri suggerimenti
Questo è un semplice trucco che uso per ricordare quale usare:
(date, currency, double).tostring = CurrentCulture
resource.fr-CA.resx file = currentUICulture
Differenze:
-
CurrentCulture
è per la formattazione di date e valuta mentreCurrentUICulture
va con lingua / traduzioni. Sarà utilizzato daResourceManager
cercare risorse per cultura. - Spazio dei nomi di
CurrentCulture
class è inSystem.Globalization
mentreCurrentUICulture
proviene daSystem.Threading
. -
CurrentCulture
è persistente tra le diverse richieste nella sessione mentreCurrentUICulture
deve essere impostato con ogni richiesta.
Figura:
Entrambi sono System.Globalization.CultureInfo
istanze.
Un buon modo per fare la differenza oltre alle belle spiegazioni fatte dagli altri utenti e un aspetto importante nello sviluppo di applicazioni web è il seguente:
CurrentCulture
rappresenta l'installazione del web server. Ad esempio, se l'applicazione Web ASP.NET è ospitata in Germania, il valore diCutlureInfo.CurrentCulture
molto probabilmente sarebbede-DE
. Pertanto, la formattazione.ToString ()
predefinita per i tipiIFormattable
userebbe le formattazioni tedesche predefinite, o quelle che sono state impostate sul sistema operativo del server come impostazioni predefinite.CurrentUICulture
può essere acquisito dall'agente utente e può rappresentare la cultura dell'interfaccia utente del client che si collega al sito Web. Ad esempio, se carichi quel sito Web dalla Russia, le tue impostazioni locali sono impostate per utilizzare la lingua russa e il tuo agente utente invia le impostazioni locali al server (Opera e IE lo fanno automaticamente, non sicuro per Chrome e FireFox), < code> CurrenUICulture rappresenterebberu-RU
. Ciò farà sì che qualsiasi risorsa come le stringhe localizzate recuperate tramite ResourceManager o le espressioni di localizzazione nei file ASP.NET aspx / ascx siano in russo (se sono disponibili traduzioni).
Vale la pena notare che il CurrentUICulture
supporta locali non specifici del paese come 'en' (Culture neutre) mentre CurrentCulture
supporta SOLO locali specifici del paese come 'en -GB'. L'impostazione di CurrentCulture
su una cultura neutra genererà un ArgumentException
.
Suppongo che ciò sia dovuto al fatto che formati come date e valuta sono più fortemente legati al paese stesso, ma la lingua visualizzata è spesso intercambiabile tra i paesi.