Multilanguages



  • Hiho,
    ich bräucht wohl mal hilfe, und zwar wie kann ich es anstellen, das ich in meinem Programm verschiedene Sprachen benutzten kann?
    Also ich stelle ein das ich es auf Englisch haben will, dann zeigt er mir jeden nur erdenklich Text (auch buttons etc.) im Dialog auf englisch, umgekehrt auf deutsch. das ganze ist für ne Dialog Anwendung! Wie muss ich da vorgehen??



  • Das Stichwort lautet STRINGTABLE .
    Dazu findest du sicher was images/smiles/icon_wink.gif



  • Hallo,

    du mußt wie schon von CMatt angedeudet für jede Sprache ein Stringtable erstellen (nicht vergessen dem Stringtable eine Sprache zuzuweisen). Den Dialog mußt du auch für jede Sprache erstellen. Dann noch in den Einstellungen unter Resourcen die gewünsche Sprache einstellen. Nun sollte es eigentlich funktionieren.

    MFG
    Kai



  • Ich muss doch nicht jeden Dialog sooft erstellen ie ich sprachen hab oder?? du müsstes dann ja bei 10 sprachen 10 mal den dialog erstellen, bei 5 dilaogen in einem projekt wären das ja 50 dialog nur um die sprachen hinzubekommen! das muss doch einfacher gehen!

    Könnt ihr mir das mit den Stringtbales mal erklären...



  • Nein, eben nicht !
    Du kannst dir für jede Sprachen eine eigene Strintabelle erstellen, in der alle für den User sichtbaren Strings gespeichert sind. Du lädst nun alle Wörter und Sätze aus dieser Stingtabelle. Willst du nun deine Anwendung in einer anderen Sprache, lade einfach eine andrer Stingtabelle images/smiles/icon_wink.gif



  • Original erstellt von CMatt:
    Du kannst dir für jede Sprachen eine eigene Strintabelle erstellen, in der alle für den User sichtbaren Strings gespeichert sind. Du lädst nun alle Wörter und Sätze aus dieser Stingtabelle. Willst du nun deine Anwendung in einer anderen Sprache, lade einfach eine andrer Stingtabelle images/smiles/icon_wink.gif

    Ok wenn du das sagst wird das so sein. Dann wundert es mich nur das bei mir in der Firma für jede Sprache ein extra Dlg erstellt wird. Naja keiner kann alles wissen.

    @C-O-M-M-A-N-D-E-R

    Du legst ein Stringtable an und schreibst jeden String der in deinem Prog. vorkommt hinein. Das tust du für jede Sprache. Nun kannst du mit der Methode "LoadString" von CString über die ID jeden String laden. Um nun dein Prog. in der jeweiligen Sprache zu erstellen einfach in den Einstellungen unter Ressourcen die gewünschte Sprache einstellen. Aber nicht vergessen dem jeweiligen Stringtable eine Sprache zuzuweisen(Im Ressourcen View Rechtsklick auf den Stringtable und sprachen einstellen).

    MFG
    Kai



  • @KaiE:
    lol
    Du hast dir grad selbst die Lösung verraten images/smiles/icon_biggrin.gif
    Warum für jede Sprachen einen eigenen Dialog !?!? Eine #define kann das alles, wofür du bei einem großen Prog in 20 Sprachen einen Monat brauchst images/smiles/icon_biggrin.gif



  • Ok Ok ich gebe mich geschlagen. images/smiles/icon_biggrin.gif



  • Also zur String Table:

    Die ID, ist die des Elemts das geändert werden soll richtig?
    Der Wert die ihm zugewiesen soll richtig?

    Wenn ich nun das ganze mit DLL´s mache, dann erstell ich mir einfach mit dem Wizard ne DLL die ne StringTable mit den ganzen ID´s etc enthält und bind die dann in mein Tool?

    Erstmal ne Global Variable HINSTANCE hDll dann den Code

    hDll = AfxLoadLibrary("germann.dll"); //hatte hier nen schreibfehler, daher tat es nicht...
    ASSSERT(hDll);
    AfxSetResourceHandle(hDll);
    

    Ist das richtig??
    Bracuh erklärung zum Thema Dll erstellung..THX
    UND AN DIESEM FEHLER HAB NEN HALBEN VORMITTAG GESSESEN... images/smiles/icon_sad.gif

    [ Dieser Beitrag wurde am 14.03.2002 um 13:28 Uhr von C-O-M-M-A-N-D-E-R editiert. ]



  • So ich habs jetzt soweit geschafft, erstelle immer ne Kopie vom Projekt als DLL und bearbeite die Felder. Aber einfacher wär es ja jetzt mit den String Tables und #define oder nicht??

    Aber wie funktioniert das, gut die Stringtabel erstellen sollte ja kein Problem sein

    Werte:

    ID = ID Wert des Elemtens
    Wert = Autonummer
    Title = den wert den er annehmen soll!

    loß wie sag ich ihm jetzt das er die Stringtable laden soll??



  • Durch die ID gibst du an welchen String du laden willst.
    z.B.

    // StringTable German
    // ID Value
    ID_YES ja
    ID_NO nein
    //********************

    // StringTable Englisch
    // ID Value
    ID_YES yes
    ID_NO no
    //********************

    Wenn du nun ein String benötigst lädst du ihn einfach:

    CString str
    str.LoadString(ID_YES);
    

    Nun kommt es darauf an, welche Sprache du eingestellt hast.
    Ist es Deutsch, dann hast du ein "ja" in str, ist es Englisch dann hast du ein "yes".

    So kannst du dir verschiedene Sprachversionen Erstellen.

    Aus deiner Frage zu der Dll schließe ich das du erst zur Laufzeit die Sprache kennst. Damit habe ich leider nur wenig Erfahrung, aber so wie du das beschrieben hast sollte es Funktionieren.

    MFG
    Kai



  • mhhh das heisst ich brauch nix weiter als ne StringTable in der DLL und nicht ne ganze kopie der Dialoge??



  • @ C-O-M-M-A-N-D-E-R
    Ich habe das was du beschrieben hast ausprobiert, und es funktioniert.
    Allerdings nur!! wenn die Konstanten in den verschiedenen DLLs die selbe nummer haben (z.B.ID_TEST muss immer in der Rescourece.h bei allen Sprachen den selben Wert haben!!).

    MFG
    Kai



  • Also ich brauche nur die Stringtable anlegen?

    mhh also irgendwie klappt das noch nicht ganz so wie ich will!

    Kannst du mir vieleicht mal deinen test schicken??

    brauwers@stadt.meppen.de

    wäre cool



  • Die Post ist da!!

    für weitere Fragen komm doch mal in den Chat.

    MFG
    Kai



  • JUHU JETZT FUNZT ES....DANKE KaiE...*ohh gott und jetzt alles Transformieren hehe*

    So ich werd glaub ich nacher mal ne Ausführlich Anleitung hier postenund in die FAQ schieben, kann ganz nützlich sein..



  • Hab noch nen Bug gefunden...
    Wenn man mit geladener DLL versucht nen Dialog auf zu rufen, klappt es nicht wenn man diese nicht auch in der DLL hat...
    Also muss man wohl doch die Dialoge übertragen..

    naja hauptsache das mit der Stringtable klappt!



  • Das das nicht geht ist logisch.
    Denn du hast mit "AfxSetResourceHandle" den RecourcenZeiger umgesetzt.
    Wenn du ein Dialog aus deiner exe anzeigen willst musst du den Zeiger wieder umsetzen(auf die exe). Dann aollte es fuktionieren.

    MFG
    Kai



  • wie bekomme ich den zeiger den wieder auf die exe??

    ich weiss sind dumme fragen, hab bloss heute zu lange vorm proggen gesessen, doch chefs sind auf der cebit, da bleibt viel zeit und hier gabs nix zu tun images/smiles/icon_biggrin.gif



  • Kann mir vielleicht auch jemand das testprog zusenden?? Wär echt nett. Wenn dann bitte an brainstalker@firemail.de THX


Anmelden zum Antworten