Domanda

In passato ho lavorato con le impostazioni di globalizzazione ma non nell'ambiente .NET, che è l'argomento di questa domanda.Ciò che vedo è sicuramente dovuto a conoscenze che devo ancora apprendere, quindi apprezzerei un'illuminazione su quanto segue.


Impostare:La mia lingua predefinita è l'inglese (in particolare en-us).Ho aggiunto una seconda lingua (danese) sul mio sistema di sviluppo (WinXP) e poi ho aperto la barra della lingua in modo da poterla selezionare a piacimento.


Ho selezionato il danese sulla barra della lingua, quindi ho aperto il Blocco note e ho scoperto che la lingua era tornata all'inglese sulla barra della lingua.Capisco che l'impostazione della lingua è per applicazione, quindi sembrava che Blocco note ripristinasse l'impostazione predefinita in inglese.(L'ho trovato strano dal momento che Windows e quindi Blocco note è utilizzato in tutto il mondo.) La chiusura di Blocco note ha ripristinato l'impostazione della barra della lingua in danese.Ho quindi lanciato la mia applicazione WinForm personalizzata aperta, che so non imposta la lingua, e così Anche ripristinato dall'inglese al danese quando viene aperto, quindi di nuovo al danese quando viene terminato!

Domanda n. 1A: Come posso fare in modo che la mia applicazione WinForm all'avvio erediti l'impostazione corrente della barra della lingua?Il mio esperimento sembra indicare che ogni applicazione si avvia con l'impostazione predefinita del sistema e richiede all'utente di modificarla manualmente una volta che l'app è in esecuzione: questo sembrerebbe un grosso inconveniente per chiunque voglia lavorare con più di una lingua!

Domanda n. 1B: Se è necessario, infatti, impostare manualmente la lingua in uno scenario multilingua, come faccio a cambiare la mia lingua di sistema predefinita (es.al danese) per poter testare il lancio della mia app in un'altra lingua?


Ho aggiunto una visualizzazione della lingua corrente nella mia applicazione per il prossimo esperimento.Nello specifico ho impostato a MouseEnter gestore su un'etichetta su cui è impostata la descrizione comando CultureInfo.CurrentCulture.Name quindi ogni volta che passo il mouse sopra ho pensato che avrei dovuto vedere l'impostazione della lingua corrente.Poiché l'impostazione della lingua prima di avviare la mia app non ha funzionato, l'ho avviata e ho impostato la lingua su danese.Ho scoperto che alcune cose (come digitare in una casella di testo) onoravano questa impostazione danese.Ma passare il mouse sull'etichetta strumentata mostrava ancora en-us!

Domanda n. 2A: Perché lo fa CultureInfo.CurrentCulture.Name non riflette la modifica nella barra della lingua mentre altre parti della mia app sembrano riconoscere la modifica?(Provando CultureInfo.CurrentUICulture.Name ha prodotto lo stesso risultato.)

Domanda n. 2B: Esiste un evento che si attiva in seguito alle modifiche sulla barra della lingua in modo da poter riconoscere all'interno della mia app quando cambia l'impostazione della lingua?


Aggiornamento 13.05.2010

Le brevi ma piacevoli informazioni fornite da Eric di Microsoft (vedi la sua risposta di seguito) hanno affrontato direttamente solo una delle mie quattro domande (n. 2A), ma hanno fornito proprio lo slancio di cui avevo bisogno per approfondire e capire il resto.A beneficio di altri che potrebbero essere confusi da questo, ecco cosa ho scoperto:

Risposta n. 1A: Un'applicazione eredita l'impostazione della lingua di input predefinita, non la lingua specificata nella barra della lingua.Una volta che l'applicazione è in esecuzione, cambia sulla barra della lingua Volere fatti notare immediatamente dalla tua app.

Risposta n. 1B: L'impostazione della lingua di input predefinita viene effettuata tramite il pannello di controllo Opzioni internazionali e della lingua >> scheda Lingue >> Dettagli >> scheda Impostazioni >> lingua di input predefinita.

Risposta n. 2A: Risponde Eric, la cultura attuale è distinta dall'attuale lingua di input che si riflette sulla barra della lingua;la digitazione in una casella di testo è influenzata solo dalla lingua di input corrente.

Risposta n. 2B: Non esiste alcun evento predefinito per la notifica della lingua di input o della modifica della cultura corrente.Un fatto importante da notare qui è che i cambiamenti della lingua di input vengono automaticamente riconosciuti immediatamente mentre i cambiamenti della cultura attuale non lo sono.È necessario riavviare la richiesta affinché un cambiamento culturale attuale abbia effetto, a meno che tu non possa notare il cambiamento e agire di conseguenza.A tal fine ho trovato un articolo MSDN (I tanti volti della classe CultureInfo) che fornisce proprio un tale gancio per notare il cambiamento.

È stato utile?

Soluzione

Ci sono tre impostazioni linguistiche separate in gioco.La barra della lingua controlla la lingua di input (Lingua di inserimento) che è distinto dal linguaggio per la visualizzazione dell'interfaccia utente (CurrentUICulture) che è distinto dal linguaggio per l'ordinamento/formattazione/analisi (CurrentCulture).

È vero che questo crea confusione.

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