Localizzare delle windows form probabilmente sarà una prassi nota ai più. In ogni caso mi segno sul blog la serie di semplici step che permettono di creare una applicazione Windows Forms localizzata.
Quando si aggiunge una Wondows Form all'applicazione si deve impostare la proprietà Localizable a True.
Le caption che vengono impostate sulla Form verranno quindi salvate all'interno del file di risorse di default, con nome NomeForm.resx quindi nel nostro esempio Pippo.resx.
Attenzione: questo file di risorse è quello che l'applicazione userà se non troverà il file di lingua specifico; al suo interno vanno quindi inserite le caption nella lingua considerata di default per la nostra applicazione.
Per tradurre quindi l'applicazione si può procedere in più modi: innanzittutto si deve considerare che per ogni lingua o coppia lingua cultura che intendiamo gestire verrà creato il file di risorse specifico con nome NomeForm.lingua-cultura.resx. Se per esempio traduciamo il form Pippo in inglese il file generato sarà Pippo.en.resx, mentre se lo traduciamo in inglese specificando la cultura statunitense il file risulterà essere Pippo.en-US.resx.
Questi file li possiamo creare a mano, modificare con un qualsiasi tool, ed aggiungere al nostro progetto. L'ambiente ci viene però incontro dandoci la possibilità di lavorare direttamente sul designer; selezionando nella finestra delle proprietà la combinazione lingua e cultura desiderata (proprietà Langauge del form) l'ambiente si occupa di creare il file specifico e possiamo quindi cambiare le proprietà dei nostri controlli (per esempio Text per le caption) direttamente dal desinger; in più ci è consentito di localizzare anche proprietà come la lunghezza, per permettere di modificare leggermente l'aspetto grafico dell'applicazione, adattandolo ad eventuali caption più lunghe.
In esecuzione il file di risorse corretto viene caricato in base alla proprietà CurrentUICulture del Thread corrente. Se il file specifico lingua-cultura non viene trovato si prova col file generale di lingua e se non si trova nemmeno quello si usa il file di default.
Vediamo con un paio di esempi il risultato:
Esecuzione con CurrentUICulture impostata a "en-US": il file usato sarà Pippo.en-US.resx.
Esecuzione con CurrentUICulture impostata a "en-GB": il file usato sarà Pippo.en.resx, perchè non viene trovato il file Pippo.en-GB.resx.
Esecuzione con CurrentUICulture impostata a "fr": il file usato sarà Pippo.resx, perchè non viene trovato il file Pippo.fr.resx.
Per la messaggistica del form io mi sono implementato un sistema a parte per non legare un messaggio direttamente ad una form; in questo modo ho un file di risorse unico che contiene tutti i messaggi per l'utente condividendoli tra tutti i form dell'applicazione. Il meccanismo è lo stesso: tralasciando il come implementare l'accesso a queste risorse, è sufficiente usare le stesse regole di naming anche per questo file. In questo modo l'applicazione carica "gratis" il file corretto in base alla solita proprietà CurrentUICulture.
Per concludere lo stesso meccanismo può essere applicato alle immagini del sistema: se per esempio un requisito fosse quello di mostare icone diversi in base alla lingua è sufficiente inserire le Icone all'interno di un file di risorse ed applicare ancora una volta le stesse regole di naming.
Matteo