vb 2005 Menübeschriftung

czemmel

Mitglied
Hallo zusammen,
ich arbeite mehrsprachig über resourcen-Datein.
Meine labels, Panels und Buttons habe ich über Control beschriftet.

Jetzt mein Problem: ich möchte auch das Menü evtl. so beschrifte. hat einer irgend eine Idee.
Hier mein vb-Code zur Beschriftung der Labels usw.

Public Sub fuellencontrolls(ByVal obj As System.Windows.Forms.Control)

'// Abruf aller lbl, btn , und geschachtelte Panel zur Beschriftung
'// Beschriftung mittes ResourcenManager (translate.getString)

For Each thisControl As System.Windows.Forms.Control In obj.Controls
thisControl.Text = translate.GetString(thisControl.Name.ToString)

' Anzeigen des Namen wenn kein Text hinterlegt
If thisControl.Text = "" Then
thisControl.Text = thisControl.Name.ToString
End If

If thisControl.HasChildren Then
For Each thisctr As System.Windows.Forms.Control In thisControl.Controls
thisctr.Text = translate.GetString(thisctr.Name.ToString)
Next thisctr
End If

Next thisControl
 
Hi

Die Lokalisierung von Controls kannst du so vornehmen, dass du für die Form da Property Localizable auf True setzt und anschließend unter Language die bevorzugte Sprache auswählst.
Anschließend den entsprechenden Text ändern.
Vorsicht: da alle Properties localizable sind kannst du sie auch in zwei Sprachen an 2 unterschiedlichen Stellen platzieren. Wenn du das nicht willst, musst du darauf achten, dass du Änderungen, die für alle Sprachen gelten sollen unter der Auswahl {Default} stattfinden.
 
Ja, das funktioniert ja auch.
Jedesmal wenn ich das Projekt neu starte ist die Sprache die ich eingestellt habe auch korrekt.
ich möchte aber die Sprache in meinem Eigenschaftsfenster ändern und dann soll ein sog. Refresh über alle offenen formen laufen um die neue Sprache einzustellen.

Anmerkung: nach der Auswahl der neuen Sprache setze ich als erste eine neue sprache und einen neuen ResourcenManager (str= Spracheinstellung)

Public Sub einlesen_Sprache()
Thread.CurrentThread.CurrentUICulture = New CultureInfo(str)

translate = New ResourceManager("IDCweb.Resources", System.Reflection.Assembly.GetCallingAssembly())

End Sub
 
Hi


Du musst als erstes die UICulture (ggf. auch die normale Culture, je nachdem was deine Anwendung macht) neu setzen.
Anschließend musst du mit dem ComponentResourceManager rekurviv über alle Controls in allen instanzierten Fenstern laufen.
 
Ich versuche dies ja, aber irgendwie funktioniert dies nicht. Der Resourcenmanager greift nicht auf die resx-Dateien zu, sonder will immer nur auf die Resourcen-Datei zugreifen

Hier mein Code mit dem ich es versuche:

1. Aufruf:
Public Sub einlesen_Sprache()
' setzen einer Sprachkultur, Daten aus der Globalini
Thread.CurrentThread.CurrentUICulture = New CultureInfo(g_iwAllg.strSprache)

translate = New ResourceManager("IDCweb.Resources", System.Reflection.Assembly.GetCallingAssembly())

End Sub

2. Aufruf:
Public Sub fuellencontrolls(ByVal obj As System.Windows.Forms.Control)
'// Abruf aller lbl, btn , und geschachtelte Panel zur Beschriftung
'// Beschriftung mittels ResourcenManager (translate.getString)

For Each thisControl As System.Windows.Forms.Control In obj.Controls
Dim strtmp As String = translate.GetString(thisControl.Name.ToString)
If strtmp <> "" Then thisControl.Text = strtmp
'thisControl.Text = IIf(strtmp <> "", strtmp, thisControl.Text)
'// Beschriftung von Panels mit mehreren Labels usw.
If thisControl.HasChildren Then
For Each thisctr As System.Windows.Forms.Control In thisControl.Controls
thisctr.Text = translate.GetString(thisctr.Text)
Next thisctr
End If
Next
End Sub


Gruß
czemmel
 
Vielen Dank für den Tipp :p

Habe nun nur noch ein ganz kleines Problem, mein Menü und mein Panel wird nicht aktualisiert

hier mein Code in der Hoffnung ich bin auf dem richtigen weg:

Public Sub formneuzeichnen()
'Nach allen geöffneten Formen suchen
For Each Frm As System.Windows.Forms.Form In System.Windows.Forms.Application.OpenForms

'anlegen eines Component ResourcenManager
trans = New System.ComponentModel.ComponentResourceManager(Frm.GetType)

'Position der Form speichern
Dim ptlocation As Point = Frm.Location

'Resourcen übernehmen
trans.ApplyResources(Frm, Frm.Name.ToString)

'Position setzen
Frm.Location = ptlocation

'Resourcen für alle Controlls übernehmen
For Each thiscontrol As System.Windows.Forms.Control In Frm.Controls
trans.ApplyResources(thiscontrol, thiscontrol.Name)

If thiscontrol.HasChildren Then

For Each thisctr As Control In Frm.Controls
trans.ApplyResources(thisctr, thisctr.Name)
Next thisctr
End If

Next thiscontrol
Next
End Sub
 

Neue Beiträge

Zurück