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.