2009-04-04 5 views
6

Negli Stati Uniti, si utilizza un "." come separatore, ma in Germania si usa un ",". Sto provando a verificare se la mia logica è abbastanza intelligente da gestire uno dei due, ma sembra che non riesca a mettere il mio computer Windows 2000 in modalità tedesca.Come posso (un americano) verificare se la mia app ASP.NET/SQL Server gestisce correttamente i decimali per la Germania

Sono passato al Pannello di controllo, Opzioni internazionali e ho cambiato "Le impostazioni internazionali" in "Germania". Ho quindi riavviato IIS e SQL Server. Ma i miei cambiamenti non sembrano aver avuto effetto.

Queste righe mostrano ancora "." essere il separatore.

System.Globalization.CultureInfo CI = new System.Globalization.CultureInfo ( System.Threading.Thread.CurrentThread.CurrentCulture.Name);

Response.Write (ci.NumberFormat.NumberDecimalSeparator);

Cosa sto sbagliando?

+0

Sembra che pochi di noi veramente * * conoscono la risposta a questo ... così dannatamente bella domanda! ;-) – Cerebrus

+0

Una volta ho dovuto lavorare con le impostazioni locali giapponesi su Windows 2000. È stato un incubo. Condivido il tuo dolore. –

risposta

6

Il modo migliore per verificare questo è quello di aggiungere un elemento di globalizzazione al vostro web.config, per esempio:

<system.web> 
    <globalization culture="de-DE" uiCulture="en-US" /> 
</system.web> 

Cambiare la cultura di de-DE influenzerà la data e formati numerici: si potrebbe anche cambiare se uiCulture vuoi, lasciando uiCulture come en-US significa che otterrai messaggi di eccezione nell'inglese americano.

+0

Ha funzionato. Grazie. –

0

Penso che quello che stai cercando è la scheda Formati (la prima lì).

+0

C'è una scheda "Numeri" e mostra il mio "Simbolo decimale" come ",". Quindi il pannello di controllo sembra corretto, ma ASP.NET pensa ancora che sia negli Stati Uniti. C'è un altro posto che devo cambiare? –

0

È possibile impostare la lingua corrente in tedesco.

penso che sarebbe più facile che passare le impostazioni internazionali

3

Quando si imposta i vostri Impostazioni internazionali, hai la certezza di "Applica tutte le impostazioni all'account utente corrente e al profilo utente predefinito" (scheda Avanzate)?

Questo dovrebbe farlo nella maggior parte dei casi. Suppongo anche che la tua cultura non sia preimpostata su "en-us" nell'elemento globalization di Web.config.

Sembra che tu non voglia farlo impostando manualmente le impostazioni di Cultura nel codice, piuttosto che le vuoi ereditate dalle impostazioni di Sistema. Questo, IMO, è un buon modo di verificare poiché le tue modifiche dovrebbero essere propagate anche al server SQL.

+0

Nessuna cosa del genere sulla mia macchina W2K. –

+0

Oops! Ho perso la parte relativa al W2K. Il mio è XP SP2. Tuttavia, ci dovrebbe essere un modo per applicare tutte le impostazioni anche su Win 2K. Fammi vedere. – Cerebrus

+0

+1. In W2K penso che devi modificare manualmente il registro per modificare le impostazioni regionali del profilo predefinito: guarda HKEY_USERS/.DEFAULT/Pannello di controllo/Internazionale. Ma è più semplice aggiungere un elemento di globalizzazione a web.config. – Joe

0

Se vuoi davvero colpire questo ... Le Macchine Virtuali sono tuoi amici. Ma hai davvero bisogno di un abbonamento msdn per ottenere la versione tedesca di un sistema operativo.

Caricare un sistema operativo (WinXP o Vista) in una macchina virtuale, quindi accedere al sito Web.

0

Non credo che IIS utilizzi le impostazioni della regione. Devi impostare CultureInfo esplicitamente nel tuo codice.

0

Se si sta solo testando l'unica volta, si potrebbe cambiare la linea di leggere questo:

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("de-DE"); 

e cambiare di nuovo in seguito. Potresti usare stringhe del genere se vuoi fare un sacco di test unitari.

1

Di solito è la soluzione sbagliata per gestire i problemi di formattazione di un sito Web come il separatore decimale dipendente dalle impostazioni internazionali del server Web. Ciò aggiunge un problema di configurazione del server che può rendere più difficile la distribuzione della tua app, anche se in realtà non fornisce necessariamente all'utente finale ciò che desidera. Ad esempio, potresti voler installare una distribuzione francese e una inglese della stessa app su un singolo server (canadese!).

È anche abbastanza comune che le impostazioni internazionali del sistema siano impostate su qualcosa di inappropriato a causa di problemi legacy (ad esempio app che funzionano solo in giapponese o server di produzione in tutto il mondo che eseguono en-US come "versione canonica di Windows"). ').

Normalmente è meglio gestirlo nel livello applicazione, con una sola opzione locale per la distribuzione del codice del sito o (se necessario) un'opzione locale per utente del sito. Quindi chiunque può accedere all'app e ottenere la formattazione del numero appropriato.

Infine, se l'interfaccia della tua app è esclusivamente inglese, potrebbe essere più appropriato attenersi comunque alla formattazione del numero in inglese. I tedeschi si saranno abituati a questo; potrebbe essere in realtà di più che confonde l'idea di unire insieme le convenzioni UI in inglese e tedesco. IMO: localizzare a fondo, o per niente.

0

Posso solo chiarire qualcosa, vuoi mettere la tua macchina in modalità tedesca per testare la tua applicazione web, che sembra essere in esecuzione sulla stessa macchina del browser?

Quando questo è reale, possiamo supporre che il server possa essere ospitato al di fuori della Germania (o forse in Germania, ma su una macchina installata in un locale degli Stati Uniti - accade molto). Se così si imposta la cultura sul server non è proprio ciò che si desidera, e probabilmente non sarà in grado di farlo quando si distribuisce comunque.

Hai anche un altro problema, non esiste un modo infallibile per scoprire quale cultura desideri utilizzare. È possibile rilevare tutti i tipi di informazioni dalle intestazioni HTTP, effettuare una ricerca di dominio sull'indirizzo IP, ma cosa accadrebbe se un oratore tedesco volesse utilizzare il tuo sito dagli Stati Uniti o un americano fosse in Germania e volesse vedere "." e non "," per il separatore decimale?

Per dirla in un altro modo, sto dicendo che non importa quale cultura usi il PC del tuo cliente - non è rilevante perché una volta che vai sul web tutte le scommesse sono spente - anche se la tua app ha rilevato la tua cultura correttamente potrebbe non essere ciò che il tuo utente desidera!

Quindi, il modo in cui farei questo è chiedere all'utente quale lingua desiderano e quindi impostare esplicitamente la locale nell'applicazione in fase di esecuzione. Ciò significa chiedere all'utente di scegliere una langague, ma è l'unico modo per essere sicuri di utilizzare le impostazioni internazionali corrette per l'utente. Se tutti i tuoi utenti sono tedeschi, non devi chiedere, puoi semplicemente programmarlo. Se il suo approccio suona come potrebbe funzionare allora c'è un buon codice di esempio qui: http://msdn.microsoft.com/en-us/library/bz9tc508.aspx.

Buona fortuna, o meglio Viel Glück!

Problemi correlati