Qual è la differenza tra le proprietà CurrentCulture e CurrentUICulture di CultureInfo in .NET?

In .NET esiste la class CultureInfo nello spazio System.Globalization 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é?

CurrentCulture è la rappresentazione .NET delle impostazioni locali dell’utente predefinite del sistema. Controlla la formattazione di numeri e date predefinita e simili.

CurrentUICulture fa riferimento alla lingua dell’interfaccia utente predefinita, un’impostazione introdotta in Windows 2000. Ciò riguarda principalmente la parte di localizzazione / traduzione dell’interfaccia utente della tua app.

Qualunque siano le opzioni regionali che il sistema è configurato per avere saranno i valori “Corrente” nella tua app. NET.

Spesso sono entrambi uguali. Ma sul mio sistema sarebbero diversi: preferisco i miei numeri e le date nel formato tedesco, quindi CurrentCulture sarebbe tedesco, ma preferisco anche tutte le mie applicazioni in inglese, quindi CurrentUICulture sarebbe inglese.

C’è un bell’articolo sull’argomento: Ordinare tutto fuori: Perché abbiamo sia CurrentCulture che CurrentUICulture

Questo è un trucco semplice che uso per ricordare quale usare:

 (date, currency, double).tostring = CurrentCulture resource.fr-CA.resx file = currentUICulture 

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 la configurazione del server web. Ad esempio, se l’applicazione Web ASP.NET è ospitata in Germania, il valore di CutlureInfo.CurrentCulture probabilmente sarà de-DE . Pertanto, la formattazione .ToString() predefinita per i tipi IFormattable utilizza le formattazioni tedesche predefinite o quelle che sono state impostate sul sistema operativo del server come predefinite.

  • CurrentUICulture può essere catturato dall’agente utente e può rappresentare la cultura dell’interfaccia utente del client che si connette 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 sono sicuro per Chrome e FireFox), la CurrenUICulture rappresenterebbe ru-RU . Ciò farà sì che tutte le risorse come le stringhe localizzate recuperate tramite ResourceManager o le espressioni di localizzazione nei file ASP.NET aspx / ascx siano in russo (se le traduzioni sono disponibili).

Vale la pena notare che CurrentUICulture supporta localizzazioni specifiche di paesi diversi come “en” (culture neutrali) mentre CurrentCulture supporta solo local country specifici come “en-GB”. Impostando CurrentCulture su una cultura neutrale verrà generata ArgumentException .

Presumo che ciò sia dovuto al fatto che formati come date e valuta sono più strettamente collegati al paese stesso, ma la lingua visualizzata è spesso intercambiabile tra i paesi.

differenze:

  1. CurrentCulture serve per la formattazione di date e valuta mentre CurrentUICulture va con la lingua / le traduzioni. Verrà utilizzato da ResourceManager per cercare risorse per cultura.
  2. Lo spazio dei nomi della class CurrentCulture trova in System.Globalization mentre CurrentUICulture proviene da System.Threading .
  3. CurrentCulture viene mantenuto su diverse richieste nella sessione mentre CurrentUICulture deve essere impostato con ogni richiesta.

Somiglianza:

Entrambe sono istanze System.Globalization.CultureInfo .