multilanguage: andere methode als loadstring()



  • Hallo,

    ich möchte gern eine Application (SDI DocView Modell) schreiben, welche mittles satellite dlls in mehreren Sprachen vorhanden sein soll.

    In meinen Dialogboxen befinden sich sehr viele Buttons Checkboxen etc. welche beim Wechsel der Sprache ihren Text ändern müssen (anpassen an die jeweilige aktive Sprache); Dazu muss man wissen, dass die Sprache on-the-fly ohne Systemrestart geändert werden soll!

    Jetzt kenn ich die Methode, jedes einzelne Button-Objekt von jedem Dialogfeld mit Loadstring explizit aufzurufen und aus der aktiven StringTable den passenden String herauszusuchen und hinzuzufügen: Gibt es hier nicht auch eine Möglichkeit das ganze intuitiver zu gestalten ohne dem ganzen Aufwand der LoadString() calls?

    CStatic m_MyStaticControl;  
    // Set its text (string loaded from string table)  
    CString text;  
    text.LoadString( IDS_INSERT_DATA );  
    m_MyStaticControl.SetWindowText( text );
    

    Eigentlich möchte ich gern eine Methode haben, die beim ändern der Sprache / laden einer neuen DLL Datei, sofort ohne diesem ganzen Code (Loadstring() etc.) allen Items aller Dialoge die jeweiligen passenden Strings neu zuordnet.

    Hat da jmd vielleicht einen Hint für mich parat, oder andere Vorgehensweisen?

    Gruß
    Steffen



  • ja erstell eine funktion und übergieb die ID des Windows (Button oder was weis ich) und die ID des Textes



  • CTecS schrieb:

    ja erstell eine funktion und übergieb die ID des Windows (Button oder was weis ich) und die ID des Textes

    kannst du mir deine Vorgehensweise etwas präziser formulieren bzw. vielleicht ein einfaches beispiel zeigen?

    Oder meinst du:

    cbutton1.FunktionTextLangChange(ID_BTN_CB1, ID_ACTUAL_WINDOW)
    

    Und in dieser Funktion anschließend den entsprechenden String aus einer CSV oder der StringTabelle auslesen?



  • Na woher du die Texte holst ist erstmal dein Problem, kann eine Resourcen-DLL sei, dann haste ID´s oder eine CSV dann haste Textkennungen, aber im Prinzip das gleiche

    void SetLaguage(int ID, CString &Text) //bei recourcen-Dll dann int TextID
    {
        CWnd *wnd = GetDlgIten(ID);
        CString temp = GetTextausCSV(Text); //hier entsprechend Text aus datei oder Recource laden
        wnd->SertWindowText(temp);
    }
    

    und fertig, die ganze geschichte für jeden text aufrufen der geändert werden muss


  • Mod

    - Neue Satellite DLL laden.
    - Dialog schließen und einfach mit DoModal neu starten...

    BTW: Ich erlaube Sprachumschaltung (wie auch VS und andere) erst nach Programmneustart.


Log in to reply