Resourcen Umschalten



  • Hallo, ich hab 2 Fragen:

    Ich habe meine Anwendung so erstellt, dass alle String (auch auf den Dialogen) aus der Stringtabelle geladen werden.

    1. Wenn ich eine StringTabelle für deutsch und eine für Englisch erstelle,
    wie kann ich die Sprace umschalten, bzw. beeinflussen welche geladen wird.

    2. Kann ich nur die StringTabelle in eine DLL auslagern (da nur die StringTabelle unterschiedlich sein wird), alle Dialoge usw. aber in .exe behalten?

    Vielen vielen Dank für Eure Hilfe...


  • Mod





  • @Martin Richter

    Vielen Dank für den LINK, habe aber noch ein Frage:

    Meine Anwendung ist seither deutsch. Jetzt habe ich dort alle Resource auf Neutral gestellt.
    Jetzt erstelle ich eine prim. SprachDLL mit den def. NEU und DEU. Muss ich in diese DLL alle Resource der .exe kopieren.

    Reicht es für die anderen SprachDLL nur noch z.B. die StringTable einzufügen (dann mit ENU)?


  • Mod

    Hängt davon ab wie Dein MFC Programm funktioniert.
    Zuerst wird in der AfxGetResourceHandle DLL gesucht, danach noch in allen anderen Komponenten einschließlich der EXE.
    Es gibt also eine Art Fallback. Das heißt aber auch, dass zuerst (vergeblich) in der DLL gescuht wird.

    Ich ergänze grundsätzlich alle Resourcen in der Resource DLL. Und im allgemenen hat meine EXE gar keine Ressourcen mehr außer einem Icon und eben den neutralen Resourcen.



  • das bedeutet aber, das dann für 4 Sprachen auch (in jeweils getrennten DLLS) alle Resource dupliziert werden müssen....

    Eigentlich wollte ich nur einen Ort für DialogResourcen haben. Ich habe mir eine Dialogklasse geschrieben, die automatisch alle String aus der StringTable holt, und ersetzt. Deshalb wollte ich eigentlich nur die StringTable auslagen.
    Leider geht es aber so nicht. Wenn ich es probiere, startet meine Anwendung nicht mehr!



  • Dann lege doch die Strings in eine Textdatei (INI, XML) und lade sie von dort.


  • Mod

    AnTri schrieb:

    das bedeutet aber, das dann für 4 Sprachen auch (in jeweils getrennten DLLS) alle Resource dupliziert werden müssen....

    Eigentlich wollte ich nur einen Ort für DialogResourcen haben. Ich habe mir eine Dialogklasse geschrieben, die automatisch alle String aus der StringTable holt, und ersetzt. Deshalb wollte ich eigentlich nur die StringTable auslagen.
    Leider geht es aber so nicht. Wenn ich es probiere, startet meine Anwendung nicht mehr!

    Dialogressourcen haben in unterschiedlichen Sprachen andere Anordnungen und Größen! Und ob Du nun die Dialoge pflegst oder die Stringressourcen macht den Bock auch nicht fett.



  • @Martin Richter

    Hallo,

    sorry 😕 das ich nochmal das Thema aufwärme, nur nochmal das ich es richtig verstanden habe...

    Gibt also KEINE Möglichkeit die Dialoge in der .exe zu lassen, und nur die StringTable und das Menü in eine ResourcenDLL "auszulagern"? Ich hatte seither immer gedacht, dass alle Resourcen die in der DLL nicht gefunden werden, automatisch von der .exe geladen werden.
    Ich habe mir eigentlich nur zu diesem Weg entschieden, dass falls sich ein Dialog ändert (und das kommt ja öfters vor), ich nicht alle 4 Sprachversionen ändern muss...

    Bei meinen nächsten Projekten werde ich es dann sicher gleich richtig anfangen, da aber das jetzige kurz vor fertig ist....


  • Mod

    Hmmm. IMHO gibt es keinen Fallback.

    AfxFindResourceHandle ist dafür verantwortlich. Zuerst wird in mit AfxGetResourceHandle gesucht, dann in allen Extension Modulen. Dann ist IMHO Schluss.

    Linkst Du statisch wird nur in AfxGetResourceHandle gesucht.

    Du kannst Dir eine eigene DLL Basisklasse schaffen, die selbst sich das Template sucht, bzw. die immer in einem bestimmten HINSTANCE das Template sucht.



  • @Martin Richter

    http://www.mpdvc.de/artikel/MultilingualeProgramme.htm

    Ich habe mir Dein Skript nochmals genau durchgelesen. Was ich da nicht verstehe>
    Du beschreibst dass bestimmte Resource doch in der .exe bleiben sollen (z.B. Icons, Version). Werden diese dann auch aus der .exe geladen? Dann könnte ich ja noch meine Sprachneutralen Dialoge dort lassen, oder?


Log in to reply