2013-07-10 16 views
8

Sto scrivendo un'app WPF e sto avendo qualche difficoltà con le culture.Dove viene impostata la cultura predefinita in un'applicazione .NET

Mi piacerebbe sapere dove le applicazioni .NET prendono il valore per CurrentThread.CurrentCulture quando nessun valore è impostato in modo esplicito. Non è tratto dalle informazioni sulla cultura di Windows perché l'ho modificato da en-US a en-GB senza notare alcun cambiamento nell'applicazione durante l'esecuzione.

Si prega di aiuto!

Mark

+0

un'occhiata qui http://stackoverflow.com/questions/2764615/wpf-stringformat-0c-showing-as-dollars questo dovrebbe risolvere il tuo problema –

risposta

6

Da the fine manual:

vedere la proprietà CultureInfo.CurrentCulture per imparare la cultura di default di un thread è determinato, e in che modo agli utenti di impostare le informazioni cultura per i loro computer.

One laborious click later...

come la cultura di un thread viene determinato

Quando viene avviato un filo, la sua cultura è inizialmente determinato come segue:

  • Recuperando la cultura che è specificato dalla proprietà DefaultThreadCurrentCulture nel dominio dell'applicazione in cui è in esecuzione il thread, se la proprietà va lue non è null.

  • Chiamando la funzione Windows GetUserDefaultLocaleName.

Si noti che se si imposta una cultura specifica che è diverso dalla cultura installato sistema o di cultura preferito dell'utente, e l'applicazione si avvia più thread, l'attuale cultura di quei fili sarà la cultura che viene restituito con la funzione GetUserDefaultLocaleName, a meno che non si assegni una cultura alla proprietà DefaultThreadCurrentCulture nel dominio dell'applicazione in cui il thread è in esecuzione.

Per ulteriori informazioni su come viene determinata la cultura di un thread, vedere la sezione "Cultura e discussioni" nell'argomento CultureInfo.

I didn't budget for another click, but clicked anyway.

cultura e Filati

Quando viene avviato un nuovo thread dell'applicazione, la cultura attuale e lingua dell'interfaccia utente corrente sono definiti dalla cultura sistema attuale, e non dalla cultura thread corrente. Il seguente esempio illustra la differenza. Imposta la cultura corrente e la cultura corrente dell'interfaccia utente di un thread dell'applicazione nella cultura francese (Francia) (fr-FR). Se la cultura corrente è già fr-FR, l'esempio la imposta sulla cultura inglese (Stati Uniti) (en-US). Visualizza tre numeri casuali come valori di valuta e quindi crea un nuovo thread, che, a sua volta, visualizza altri tre numeri casuali come valori di valuta. Tuttavia, come mostra l'output dell'esempio, i valori di valuta visualizzati dal nuovo thread non riflettono le convenzioni di formattazione della cultura francese (Francia), diversamente dall'output dal thread dell'applicazione principale.

Nota che si dice quando un nuovo thread applicazione viene avviata. Quindi, dato che tu dici:

Non è da informazioni di cultura di Windows perché ho cambiato da en-US a en-GB senza notare alcuna modifica nell'applicazione durante l'esecuzione.

Si consiglia di rivedere this answer.

+0

Grazie per questo, non ho visto questo informazioni quando ho consultato per la prima volta MSDN. – serlingpa

+0

@ user343159 Non leggere troppo nel mio sarcasmo. Spero che la risposta alla tua domanda sia in uno dei link che ho incluso. –

0

Se non è stata specificata una coltura specifica o se si utilizza una stringa vuota al posto del nome della coltura, viene utilizzato InvariantCulture.

È associato alla lingua inglese ma non a qualsiasi paese/regione.

Problemi correlati