Nelle applicazioni web gestire la localizzazione, ovvero l' implementazione multi-lingua, è cosa semplice.
Cosa complicata è gestirla e run-time, ovvero durante l' esecuzione della stessa applicazione.
Il problema principale è che la classe Page, dalla quale poi ereditano tutte le nostre pagine asp.net, consente la modifica della lingua
solamente all' interno dell' evento: Protected Overrides Sub InitializeCulture(). Peccato pero' che non possiamo implementare il metodo nel codice di una pagina asp.net, ma solamente da una classe che eredita direttamente dalla classe Page.
Quindi per ovviare a questo problema ho dovuto implementare una classe che ereditasse da Page e gestire il cambio della lingua nel seguente modo :
Protected Overrides Sub InitializeCulture()
MyBase.InitializeCulture()
'*** preleviamo la lingua scelta
Dim LinguaScelta As String = ""
Dim cls As New Impostazioni(Server.MapPath("Lingue.xml"))
LinguaScelta = cls.leggiLinguaUI
'*** controlliamo se la lingua è stata scelta
If (LinguaScelta IsNot Nothing) AndAlso _
(LinguaScelta <> "Auto") Then
'*** assegnamo la lingua per le risorse
Me.UICulture = LinguaScelta
'*** assegnamo una cultura idonea
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(LinguaScelta)
End If
End Sub
A questo punto possiamo costruire tutte le nostre pagine asp.net partendo da questa classe e non dalla classe Page.
Questa soluzione pero' presenta una grossa pecca, per poter essere sicuri di visualizzare subito la lingua scelta, ad ogni cambio della lingua bisognerà forzare un PostBack della pagina stessa.
Nota: ho provato anche a lavorare sull' evento Application:BeginRequest presente nel file global.asax ma non sono comunque riuscito ad ottenere lo stesso risultato.
Ho speso tutta la Domenica per questa piccola soluzione ...