Multilanguages



  • 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



  • würde mich auch über testprog freuen,
    sega1601@aol.com

    danke ******* 🙂



  • So, habs auf der Arbeit noch hinbekommen...auch mit dem Zeiger..

    Ich werde hier ne komplette Lösung posten ok, das kommt dann in die FAQ!



  • @ <Brainstalker> und WeiseCoder
    Schaut mal in eure Post.

    @ C-O-M-M-A-N-D-E-R
    Soll ich eine Zusammenfassung schreiben? Ich hätte heute Zeit dazu.

    MFG
    Kai



  • Hallo
    auch ich haette grosses Interesse an Eurem Testprogramm
    Vielen Dank schon mal



  • @ sport
    Die Post ist da.

    @ all
    Wenn noch jemand das Testprog. haben will, per Mail oder heir melden (ich habe nocheimal ein neues Testprog. geschrieben).

    MFG
    Kai



  • ja kannst du machen KaeI..
    poste sie hier einfach, und ich packs dann in die FAQ..



  • Programme in mehreren Sprachen erstellen

    Hierfür gibt es zwei Varianten:
    **1. Für jede Sprache eine eigene Version erstellen.
    2. Nur eine Version erstellen, wobei die sprachspezifischen Sachen in Dlls untergebracht werden.

    Grundlagen:

    Dialoge:**
    1. Dialoge können für jede Sprache extra erstellt werden (übersichtlicher). Dabei ist jedem Dialog eine Sprache zuzuweisen (Resourcen View -> Rechtsklick auf den Dialog -> Eigenschaften -> Sprache).

    2. Es ist aber auch möglich nur einen Dialog für alle Sprachen zu Erstellen (schneller). Hierbei werden alle Sprachabhängigen Dinge, wie Beschreibung für Editboxen etc., aus dem Stringtable geladen.

    Einen String aus dem Stringtable laden:

    CString  str;
    // Die ID ist die ID aus dem StringTable
    str. LoadString(IDS_ IDSTRING _AUS_STRINGTABLE);
    

    1. Für jede Sprache eine eigene Version erstellen.

    Für jede Sprache wird ein Stringtable erstellt. Hierbei ist es wichtig jedem Stringtable die richtige Sprache zuzuweisen (Resourcen View ->Rechtsklick auf den Stringtable -> Eigenschaften -> Sprache).

    Vor dem Erstellen einfach noch die gewünschte Sprache einstellen (Projekt -> Einstellungen -> Resourcen -> Sprache) und fertig.

    2. Nur eine Version erstellen, wobei die sprachspezifischen Sachen in Dlls untergebracht werden.

    Für jede Sprache wird eine Dll erstellt. Die Dll enthält den StringTable und vielleicht noch die Dialoge.
    Während dem Programmstart wird nur die Dll für die gewünschte Sprache geladen. Danach wird der Resourcenhandle auf die Dll gesetzt. Nun kann man die Strings (und Dialoge) aus der Dll Laden.
    Bsp.:

    HINSTANCE hDll;             // Handle für Dll
    hDll = AfxLoadLibrary(strLanguage); // Dll laden
    ASSERT(hDll);               // Ist Dll geladen?
    AfxSetResourceHandle(hDll); // Resourcenhandle auf Dll setzen
    // Resource laden
    // Die ID ist die ID aus dem StringTable
    m_strTest.LoadString(IDS_IDSTRING_AUS_STRINGTABLE);
    AfxFreeLibrary(hDll);           // Dll wieder freigeben
    

    Achtung: bevor man eine Resource aus der Exe laden kann, muss der Resourcenhandle mittels "AfxSetResourceHandle" wieder umgesetzt werden.

    Was noch beachtet werden muss: die IDs für die einzelnen Strings müssen in allen Dlls und der Exe gleich sein!! Die IDs sind in der Resource.h zu finden. Sind die IDs nicht gleich, wird bei LoadString ein leerer string zurückgegeben.

    MFG
    Kai

    [ Dieser Beitrag wurde am 15.03.2002 um 10:20 Uhr von KaiE editiert. ]



  • Das sieht doch gut aus....

    Trotzdem noch ne ergänzung:

    HINSTANCE hExe;
    hExe = AfxGetInstanceHandle(); //ermittelt die EXE des Programms
    AfxSetResourceHandle(hExe); // Setzt den Zeiger wieder um
    

    So damit könnte man es auch lösen images/smiles/icon_wink.gif

    Ab damit in die FAQ...

    over and out
    commander images/smiles/icon_cool.gif


Anmelden zum Antworten