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


359

In .NET c'è la CultureInfoclasse nello System.Globalizationspazio dei nomi. Ha due proprietà simili che restituiscono entrambi i valori del CultureInfotipo: CurrentCulturee CurrentUICulture.

Qual'è la differenza tra loro?

Quale dovrei usare quando e perché?


28
Ricorda che Microsoft, nella sua saggezza, non separa le culture dell'interfaccia utente dall'inglese americano e dall'inglese (britannico) o da altri inglesi. Non esiste una MUI per l'inglese, il che significa che CurrentUICulturesarà sempre en-US su una macchina in lingua inglese, indipendentemente da CurrentCulture, che può essere impostata per localizzare le impostazioni regionali.
nicodemus13,

11
Sì. Sono nel Regno Unito e trovo CurrentCulture'en-GB', ma CurrentUICultureè 'en-US'.
Colonnello Panic,

Ho appena trovato questo articolo che spiega questo in dettaglio: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

Risposte:


347

CurrentCultureè la rappresentazione .NET della locale dell'utente predefinita del sistema. Questo controlla il numero predefinito e la formattazione della data e simili.

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

Indipendentemente dalle opzioni regionali che il sistema è configurato, saranno i valori "Attuali" nell'app .NET.

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

C'è un bell'articolo sull'argomento: risolvere tutto: perché abbiamo sia CurrentCulture che CurrentUICulture


5
In realtà questa potrebbe essere una buona alternativa per una spiegazione approfondita: forums.asp.net/post/1080435.aspx
Michael12345

@ Michael12345 Grazie per il suggerimento. Ho aggiornato il link. Anche il post a cui ti colleghi è decente, forse anche meglio.
Tomalak,

5
Questi sono nomi terribili, quindi, poiché CurrentUICulture significa davvero CurrentLanguageCulture e CurrentCulture significa davvero CurrentDataCulture.
Pxtl,

2
@Pxtl: opterei per CurrentFormattingCulture piuttosto che CurrentDataCulture . Tuttavia, nota che questi potrebbero non essere così ovviamente disgiunti come suggeriscono anche i tuoi nomi. Ad esempio, direi che il formato di data lunga ( D) può contenere un po 'di "lingua": en-USrestituisce "Venerdì 6 aprile 2018", mentre ru-RUrestituisce "6 agosto 2018 г.".
OR Mapper

107

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

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Se i commenti di nicodemus13 e del colonnello Panic sono affidabili, sembrerebbe che la seconda parte del tuo trucco non dovrebbe funzionare.
OR Mapper

15

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:

  • CurrentCulturerappresenta la configurazione del server Web. Ad esempio, se l'applicazione Web ASP.NET è ospitata in Germania, CutlureInfo.CurrentCulturemolto probabilmente il valore di sarebbe de-DE. Pertanto, la .ToString()formattazione predefinita per i IFormattabletipi utilizzerà le formattazioni tedesche predefinite o quelle che sono state impostate sul sistema operativo del server come impostazioni predefinite.

  • CurrentUICulturepuò essere acquisito dall'agente utente e può rappresentare la cultura dell'interfaccia utente del client che si collega al sito Web. Ad esempio, se si carica quel sito dalla Russia, le impostazioni locali sono impostate per utilizzare la lingua russa, e il vostro agente utente invia le tue impostazioni locali al server (Opera e IE fanno automaticamente, non è sicuro per Chrome e Firefox), l' CurrenUICultureavrebbe rappresentare 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).


13

differenze:

  1. CurrentCultureè per la formattazione di date e valuta mentre CurrentUICultureva con la lingua / traduzioni. Sarà usato ResourceManagerper cercare risorse per cultura.
  2. Lo spazio dei nomi della CurrentCultureclasse è presente System.Globalizationmentre CurrentUICultureviene System.Threading.
  3. CurrentCultureè persistente tra le diverse richieste nella sessione mentre CurrentUICulturedeve essere impostato con ogni richiesta.

Somiglianza:

Entrambi sono System.Globalization.CultureInfoesempi.


8

Vale la pena notare che CurrentUICulturesupporta locali non specifici per paese come 'en' (culture neutre) mentre CurrentCultureSOLO supporta locali specifici per paese come 'en-GB'. L'impostazione CurrentCulturesu una cultura neutrale genererà un ArgumentException.

Presumo 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.

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.