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

StackOverflow https://stackoverflow.com/questions/329033

  •  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é?

È stato utile?

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:

  1. CurrentCulture è per la formattazione di date e valuta mentre CurrentUICulture va con lingua / traduzioni. Sarà utilizzato da ResourceManager cercare risorse per cultura.
  2. Spazio dei nomi di CurrentCulture class è in System.Globalization mentre CurrentUICulture proviene da System.Threading .
  3. CurrentCulture è persistente tra le diverse richieste nella sessione mentre CurrentUICulture 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 di CutlureInfo.CurrentCulture molto probabilmente sarebbe de-DE . Pertanto, la formattazione .ToString () predefinita per i tipi IFormattable 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 rappresenterebbe ru-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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top