2009-12-10 9 views
6

In questo momento sto facendo:C'è un modo per dire se l'utente preferirebbe metrica o imperiale senza chiedere in C#?

bool UseMetricByDefault() { 
    return TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalHours >= 0; 
} 

Questo funziona per distinguere USA dall'Europa e dall'Asia, ma ignora il Sud America.

C'è un modo migliore?

+2

Vorrei anche ignorarmi, se fossi in un internet café a Londra. Apprezzerei molto un'opzione per ignorare l'ipotesi. –

+0

Ovviamente ci sarebbe un override. Quindi "ByDefault" nel nome della funzione. –

+0

Hmm, c'è un'impostazione di "Sistema di misura" in Opzioni internazionali e della lingua in Pannello di controllo (dietro il pulsante Personalizza). Mi chiedo a cosa sia mappato in .NET. –

risposta

20

utilizzare la classe RegionInfo nella System.Globalization namespace:

bool isMetric = RegionInfo.CurrentRegion.IsMetric; 

Se si desidera una regione specifica, è possibile utilizzare una delle seguenti opzioni:

// from a CultureInfo 
CultureInfo culture = ...; 
RegionInfo r = new RegionInfo(culture.Name); 

// from a string 
RegionInfo r = new RegionInfo("us"); 
+0

Impressionante. Grazie. –

2

Sembra che ci sia già un'implementazione in System.Globalization.RegionInfo (regionInfo.IsMetric).

Si potrebbe utilizzare il CultureInfo class che può restituire il Culture del sistema operativo che si sta eseguendo il - di solito nel formato en-USen-GBde-DE ecc culture sono più spesso utilizzati per applicazioni che traducono da una lingua all'altra a seconda sulla cultura del sistema operativo.

Questo è tutto per la localizzazione specificata: è possibile che si desideri leggere alcuni tutorial e articoli relativi (es. here).

+0

Non intendi la classe RegionInfo? CultureInfo ottiene questo relativo alla lingua - RegionInfo ha le cose lingua, misura e valuta. –

+0

Sì, sì. Ho lasciato informazioni su 'CultureInfo' in là comunque, sembra che potrei fare con una pausa per una mezz'ora o così ... –

3

Parte del problema è che anche se si utilizza RegionInfo, non tutti in una regione utilizzano lo stesso sistema. Negli Stati Uniti, gli scienziati usano spesso la metrica nella loro ricerca, e qui in Canada, è un po 'un mix, dal momento che riceviamo un sacco di imballaggi alimentari dagli Stati Uniti, ma insegniamo ai nostri figli in metrica (ma solo da poco tempo - i miei genitori pensa ancora in imperiale).

Detto questo, puoi fare una giusta ipotesi usando la classe RegionInfo.

+0

Una bella ipotesi è abbastanza buona per me, ma grazie per il suggerimento. –

2

Si tratta di una proprietà sulla classe RegionInfo:

// en-US, en-GB, de-DE etc. 
string cultureName = CultureInfo.CurrentCulture.Name; 
RegionInfo regionInfo = new RegionInfo(cultureName); 
Console.WriteLine("You prefer to see {0}", regionInfo.IsMetric ? "metric" : "imperial"); 
0

Per un "salto nel buio" le informazioni RegionInfo è abbastanza buono.

Tuttavia, in pratica, luoghi come il Regno Unito hanno eccezioni. Per esempio: il traffico

  • tutto ciò che riguarda è imperiale
  • temperature per tempo sono metrica, ma alcune persone preferiscono imperiale
  • misure delle attrezzature sono metrica ... soprattutto

Molto dipende dalla generazione in cui sei e la tua attitudine a cambiare.

Quindi, in pratica, fornire entrambi, fare un'ipotesi su un valore predefinito accettabile, ma se è importante impostare in modo da ignorare la preferenza e assicurarsi che tali modifiche vengano memorizzate.

Problemi correlati