Qualche tempo fa' mi sono dovuto cimentare nel creare un software multilingua per un mio cliente, a tal fine ho creato un modulo che inserisco nelle mie applicazioni e che mi permette di gestire semplicemente la lingua editando un file ini appositamente creato.
questo è il link http://www.nsmsolutions.it/site/Download/GestioneLingua.zip
è composto sostanzialmente da una classe chiamata GestioneLingua che espone i seguenti metodi:
Messaggi(ByVal Maschera As String, ByVal Evento As String, Optional ByVal Lingua As String = "Italiano", Optional ByVal Opzione As Byte = 0, Optional ByVal Valore As String = "") As String
LabelNomi(ByVal Maschera As String, ByVal Elemento As String, Optional ByVal Lingua As String = "Italiano", Optional ByVal Opzione As Byte = 0, Optional ByVal Valore As String = "") As String
RichiamaLingua(ByVal FormOrigine As Form)
(ByVal OggettoOrigine As Control)
(ByVal MenuOrigine As MenuStrip, ByVal OggettoOrigine As Form)
(ByVal BarraOrigine As ToolStrip, ByVal OggettoOrigine As Form, Optional ByVal Visibile As Boolean = True)
(ByVal BarraOrigine As ToolStripSplitButton, ByVal OggettoOrigine As Form)
(ByVal MenuOrigine As ToolStripDropDownItem, ByVal OggettoOrigine As Form)
(ByVal SBOrigine As StatusStrip, ByVal OggettoOrigine As Form)
NumeriDateOre()
ho dichiarato anche queste strutture Pubbliche per la gestione di date e numeri
Public Structure TipoDateOre
Dim DataBreve As String
Dim DataLunga As String
Dim DataEstensa As String
Dim OraBreve As String
Dim OraLunga As String
Dim SQL As String
End Structure
Public Structure TipoNumeri
Dim Generico As String
Dim Decimale1 As String
Dim Decimale2 As String
Dim Decimale4 As String
Dim Perc1 As String
Dim Perc2 As String
Dim Perc3 As String
Dim Valuta As String
End Structure
Public LinguaSistema As String = "Italiano", FormatoNumeri As TipoNumeri, FormatoDate As TipoDateOre
In pratica può essere usato in questa maniera:
al caricamento (meglio come prima riga del FormLoad o comunque non prima di InizializateComponent del New) del form richiamate la funzione GestioneLingua.RichiamaLingua(Me) questa funzione farà un controllo dell'intera maschera, comprendendo Label, ControlPannel, Check/Options Box, etc., e li inserirà in un file Ini denominato in base all'impostazione della variabile LinguaSistema nella stessa cartella dell'eseguibile (NB.: A tal proposito ricordatevi di includere il file creato nella distribuzione del programma).
(se non diversamente specificato il programma creerà automaticamente un file Italiano.Ini)
La prima volta che avviate il form il caricamento vi sembrerà più lento del previsto, ma è solo perchè farà un controllo delle varie voci e non trovandole le dovrà creare perdendo un po' di tempo, in seguito il problema sarà impercettibile.
Di base verranno inseriti nel file i testi che avete dato in fase di progettazione
Es.: se avete inserito una Label1 che come valore Text ha "pippo" nel Form1 all'interno del File ini troverete:
[Form1]
NomeForm=Form1
Label1=pippo
NB.: Una volta usata questa funzione ricordatevi che per cambiare il testo di un qualsiasi oggetto dovrete farlo nel file INI e non più direttamente nella progettazione maschera.
Per LabelNomi e Messaggi ho tenuto come impostazione Maschera come nome del form origine (me.name) in modo da raggruppare nella medesima sezione tutti i messaggi e le label derivanti dal medesimo Form.
Se opportunamente usato è semplice riuscire poi a termine della fase di progettazione trasformare l'intero programma in qualsiasi lingua semplicemente facendo 3 quasi semplici operazioni:
1)Rinominare il file inizialmente creato;
2)Cambiare la voce Maschera sotto la sezione [Lingua];
3)Tradurre le varie voci del file ini lasciando inalterate le chiavi (operazione lunga e noiosa, ma relativamente semplice).
Pur non essendo commentato (hai me mia brutto vizio) il codice credo che sia abbastanza chiaro, se qualcuno volesse fare delle correzioni migliorative ben libero di farlo e magari condividere con gli altri le proprie migliorie.
Spero che vi possa risultare utile.
Ho aperto anche un forum su sociale.microsoft.comall'indirizzo http://social.microsoft.com/Forums/it-IT/visualbasicit/thread/3a646ee9-1c8d-4a27-95d6-b540d8ccf795
Aspetto i vostri Feedback in merito.