Applicazione "Localizable"...

di il
4 risposte

Applicazione "Localizable"...

Cia a tutti...

Dopo aver creato un nuovo progetto con Vb.Net Express, ho impostato la proprietà "Localizable" della Form1 su "True".
A questo punto, per prova, ho impostato la proprietà "Language" su "English (United Kingdom)" e ho cambiato la proprietà "Text" di tutti i controlli presenti sulla Form1, affinchè fossero tutti in Inglese...
Ripristinata la proprietà "Language" su "Default", le proprietà "Text" dei vari controlli ritornano quelle originali...
A questo punto ho creato un "Bottone" che avvierà il codice che servirà per passare da una lingua all'altra, quì sotto riportato:

...
'Se la "CurrentUICulture" è "it-IT" passa a "en-GB"
If System.Globalization.CultureInfo.CurrentUICulture.ToString = "it-IT" Then
System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en-GB")
Else
System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("it-IT")
End If

Resources.ApplyResources(Me.Button1, "Button1")
resources.ApplyResources(Me.Button2, "Button2")
resources.ApplyResources(Me.TabControl1, "TabControl1")
resources.ApplyResources(Me.TabPage1, "TabPage1")
resources.ApplyResources(Me.Button9, "Button9")
resources.ApplyResources(Me.Button6, "Button6")
resources.ApplyResources(Me.TabPage2, "TabPage2")
resources.ApplyResources(Me.Button5, "Button5")
resources.ApplyResources(Me.Button4, "Button4")
resources.ApplyResources(Me.Button3, "Button3")
resources.ApplyResources(Me.TabPage3, "TabPage3")
resources.ApplyResources(Me.Button7, "Button7")
resources.ApplyResources(Me.TabPage4, "TabPage4")
resources.ApplyResources(Me.Button8, "Button8")
resources.ApplyResources(Me, "$this")

Me.Text = Applicazione & " - " & Versione
...

A questo punto la mia considerazione: finchè i controlli sono in numero ragionevole, la soluzione adottata potrebbe essere anche accettabile (forse...), ma se i controlli sono tantissimi???
Forse si potrebbe fare un ciclo tipo

...
dim i as integer
For i = 0 to "NumeroControlliSullaForm" -1
Resources.ApplyResources("Controllo(i)", "ProprietàText")
Next i
...

Qualora quest'ultimo ragionamento fosse corretto, come si fa a detterminare il "NumeroControlliSullaForm"?

In caso contrario, conoscete un altro modo per ottentere lo stesso risultato relativamente alla gestione "Resources"?

Grazie a tutti.

4 Risposte

  • Re: Applicazione "Localizable"...

    Ciao, non utilizzo la versione .net di visual basic..quindi non so se potrò fornirti un aiuto valido..comunque per stabilire quanti controlli son presenti sul form..in VB6 sarebbe..

    Dim nc As Integer
    nc = 0
    For Each Control In Me.Controls
    nc = nc + 1
    Next


    così, se riesci a sistemartelo un pochino, con nc hai quel che volevi..
    buona fortuna

    (Human > CPU) ? (return 0) : (return -1);­
  • Re: Applicazione "Localizable"...

    Ciao ethaniel...
    Il tuo aiuto è stato preziosissimo: GRAZIE INFINITE!!!
    Questo è il codice, funzionante, nel caso in cui all'interno della Form1 alcuni controlli siano "nidificati" in un TabControl...
    Il codice andrà sicuramente migliorato perchè potrebbero esserci più di una TabControl o altri controlli "Nidificati", ma sembrerebbe un ottimo spunto...

    GRAZIE ANCORA!!

    ...
    If System.Globalization.CultureInfo.CurrentUICulture.ToString = "it-IT" Then
    System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en-GB")
    Else
    System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("it-IT")
    End If

    'Resources per i componenti presenti nel Form1
    Dim nc As Integer
    Dim Ctrl As Control
    nc = 0
    For Each Ctrl In Me.Controls
    resources.ApplyResources(Me.Controls(nc), Ctrl.Name.ToString)
    nc = nc + 1
    Next

    'Resources per le Tab presenti nel TabControl1
    nc = 0
    For Each Ctrl In Me.TabControl1.Controls
    resources.ApplyResources(Me.TabControl1.Controls(nc), Ctrl.Name.ToString)
    nc = nc + 1
    Next

    'Resources per i componenti presenti nelle Tab del TabControl1
    Dim i As Integer
    'Seleziono le Teb una per una...
    For i = 0 To Me.TabControl1.TabPages.Count - 1
    Me.TabControl1.SelectedIndex = i
    nc = 0
    For Each Ctrl In Me.TabControl1.SelectedTab.Controls
    resources.ApplyResources(Me.TabControl1.SelectedTab.Controls(nc), Ctrl.Name.ToString)
    nc = nc + 1
    Next

    Next i
    'Seleziono il Tab iniziale
    Me.TabControl1.SelectedIndex = 0
    ...
  • Re: Applicazione "Localizable"...

    Grazie al suggerimento di un Amico (amdbook) ecco risolto il problema con una routine ricorsiva sfruttando la proprietà Controls a disposizione da ogni controllo...

    Questo il codice da scrivere nel bottone che cambia la lingua
    ....
    If System.Globalization.CultureInfo.CurrentUICulture.ToString = "it-IT" Then
    System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en-GB")
    Else
    System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("it-IT")
    End If
    Dim nc As Integer
    Dim Ctrl As Control
    nc = 0
    For Each Ctrl In Me.Controls
    CambiaRisorsa(Ctrl)
    nc = nc + 1
    Next
    ...


    Questa la routine ricorsiva...
    ...
    Private Sub CambiaRisorsa(ByVal containerControl As Control)

    Dim ctrl As Control = Nothing
    For Each ctrl In containerControl.Controls
    resources.ApplyResources(ctrl, ctrl.Name)
    If (ctrl.Controls.Count > 0) Then
    CambiaRisorsa(ctrl)
    End If
    Next
    ...


    Spero possa essere utile per qualcuno.

    Ancora grazie a ethaniel!
  • Re: Applicazione "Localizable"...

    Figurati.. è stato un piacere

    (Human > CPU) ? (return 0) : (return -1);­
Devi accedere o registrarti per scrivere nel forum
4 risposte