tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
1355
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    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
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    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
     

  4. #4
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    Hat keiner eine Idee, wie man die Sprache in allen aktiven Formen ändert ?
     

  5. #5
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  6. #6
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Schau mal hier:
    http://www.dotnetcasts.com/Static.aspx?=livecast006

    Sollte ein wenig weiterhelfen.
     

  7. #7
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    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
     

  8. #8
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi, du sollst auch nicht den ResourceManager nutzen sondern den ComponentResourceManager
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  9. #9
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    Hä, noch nie gehört Muß mich erstmal einlesen und ein bischen versuchen
     

  10. #10
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    Vielen Dank für den Tipp

    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
     

  11. #11
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Was wahrscheinlich daran liegt, dass der Aufruf nicht rekursiv ist.

    PS: Bitte poste deinen Code in die entsprechenden Code-Tags (code, vbnet, csharp, sql, ...). Das macht die Angelegenheit erheblich lesbarer
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  12. #12
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    Einen schönen guten Morgen Niggo,

    kannste mal einen kurzen Tipp geben, wie ich dies Rekursiv machen kann. Hab jetzt ne ganze Zeit rumprobiert, krieg das aber irgendwie nich hin

    Danke

    Czemmel
     

  13. #13
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    Habs hinbekommen

    jetzt fehlen mir nur noch meine ToolStripMenueItem
     

  14. #14
    czemmel czemmel ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Ort
    Bad Rappenau
    Beiträge
    94
    Einen schönen guten Tag zusammen

    habe versucht mein Menü (MenuStrip mit MenuToolStripItem) mit einzubauen.
    kann mir mal einer helfen.
    Hier mein Code indem ich es versucht habe

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
        Public Sub SetMenuStripTexts(ByVal itm As ToolStripMenuItem, ByVal trans As System.ComponentModel.ComponentResourceManager)
     
         If TypeOf itm Is ToolStripItem Then 'Testen, ob auch ein Toolstrip/*Menu*/Item vorliegt
                With DirectCast(itm, ToolStripMenuItem)
                    For Each itmRecurse As ToolStripItem In .DropDownItems
                        trans.ApplyResources(itmRecurse, itmRecurse.Name)
                        SetMenuStripTexts(itmRecurse, trans)
                    Next
                End With
            End If
     
        End Sub
        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 thiscontrol.Controls
                            trans.ApplyResources(thisctr, thisctr.Name)
                        Next thisctr
                    End If
     
                Next thiscontrol
     
            Next
            For Each Frm As System.Windows.Forms.Form In System.Windows.Forms.Application.OpenForms
     
                If Frm.MainMenuStrip IsNot Nothing Then
                    'Menübeschriftung
                    For Each itm As System.Windows.Forms.ToolStripMenuItem In Frm.MainMenuStrip.Items
                        Call SetMenuStripTexts(itm, trans)
                    Next
                Else
                    'Throw New Exception(String.Concat("""", Frm.Name, """hat gar kein Menü!"))
                End If
            Next
     
        End Sub

    Wo liegt denn hier der Fehler, dass er mein Menü nicht mitübersetzt ?

    Danke für jede Hilfe
    Gruß
    Czemmel
     

  15. #15
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Hast du schon mal debugged um zu überprüfen, ob er überhaupt Items findet?
    Gibt es in den Resourcen auch Text für die entsprechende Sprache?
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

Ähnliche Themen

  1. Excel Daten in MSSQL 2005 importiern mit vb 2005
    Von fanxin im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 18.04.08, 13:05
  2. nDoc für .Net 2005 und VS 2005
    Von Freak2k im Forum .NET Café
    Antworten: 9
    Letzter Beitrag: 23.10.07, 14:34
  3. Antworten: 1
    Letzter Beitrag: 21.06.07, 00:10
  4. .Net 2.0 + Visual Studio 2005 + SQL Server 2005 released
    Von Nico Graichen im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 28.10.05, 16:00