MFC: Sprache 'Englisch' erzwingen?



  • Hallo,

    wie kann ich erzwingen, dass die englischen MFC-Ressourcen verwendet werden, sprich: dass MFC90ENU.dll statt MFC90DEU.dll geladen wird?

    Hintergrund:

    Die von mir entwickelte MFC-Anwendung enthält derzeit nur englischsprachige Ressourcen. Später soll ggfs. noch eine deutsche Version released werden, aber aus Zeitgründen existiert vorerst alles nur in Englisch.

    Nun wird aber auf einem deutschen OS auch die deutsche MFCLOC-Dll (MFC90DEU.dll) geladen, so dass es zu einer unschönen & zu vermeidenden Mischung kommt.

    Wie kann ich MFC nun anweisen, nicht die MFCLOC-Dll in der OS- bzw. User-Sprache, sondern hardcoded/erzwungen Englisch zu laden?

    Ich vermute, dass es dafür eine Präprozessor- oder Compiler-Option geben muss, habe aber nach langer Suche keinen Hinweis gefunden 😢

    Hinweis: Es geht mir nicht um meine EIGENEN Ressourcen, sondern die in MFC integrierten Ressourcen.

    Vielen Dank im Voraus

    Kuwe



  • Wenn ich dich richtig verstanden habe, dann musst du im Projektmappen-Explorer mit der rechten Maustaste auf die deine eigene *.rc Datei klicken, und "Code anzeigen" auswählen.
    Dort findest du solche Dinge wie z.B.:
    #include "l.DEU\afxres.rc" usw...
    Dort sollten dann die "l.DEU\" entfernt werden.
    (Du kannst dir auch eine 'leere' MFC-App erstellen, und nachsehen wie die Syntax ist 😉 )
    --> Diese Anweisungen stehen in deiner eigenen Ressource.



  • Hallo Becher,

    zuerst einmal Danke für die schnelle Antwort!

    Leider führt dein Ansatz aber nicht zum Ziel - weder in meinem aktuellen noch in einem neuen leeren Projekt bekomme ich eine Referenz auf "l.DEU", die ich entfernen könnte...

    Es gibt in meiner VS-Installation auch keinen Ordner "l.ENU", den ich stattdessen referenzieren könnte...

    Außerdem werden auf einem englischen Rechner auch englische MFC-Ressourcen geladen, ohne daß ich meinen Code oder #includes ändern müsste.

    Es muss also einen Weg geben, mit MFC90ENU.dll statt MFC90deu.dll zu linken, bzw. eine Anweisung (Präprozessor- oder Compiler-Option), dynamisch die eine statt die andere zu laden... Hoffe ich zumindest 🙂

    Mein OS: Vista :-'(
    Mein VS: VS 2008 (9.0 SP)

    Thx anyway!

    Kuwe



  • Hier mal ein paar Beispiele, welche "Ressourcen" (insbesondere Strings) ich meine:

    CDockablePane:

    Button "Pfeil nach Unten"
    - Deutsch: Fensterposition
    - English: Window Position

    Button "Pin"
    - Deutsch: Automatisch im Hintergrund
    - English: Auto Hide

    CDocument:

    Msg "Speichern"?
    - Deutsch: Änderungen in %1 speichern?
    - English: Save changes to %1?

    - - -

    Die o.a. Strings scheinen weder aus afxres.rc (und co.) noch aus MFCLOC zu kommen. Meine App lässt sich auch mit umbenannten "l.DEU"-Ressourcenordner compilieren, und auf einem Testrechner ohne VS auch ohne MFCLOC (MFC90ENU.dll und MFC90DEU.dll) starten...

    - - -

    Kommen diese Strings überhaupt nicht von MFC, sondern vom OS?

    - - -

    Kuwe


  • Mod

    Wie man das laden der entsprechenden DLLs beeinflussen kann steht in diesem Artikel:
    http://www.richter-family.com/articles/howto multilinguale programme.htm



  • Hallo Martin,

    vielen Dank für den Link!

    Das beschriebene Verfahren ist mir jedoch zu aufwändig, da ich das gesamte (inzwischen recht komplexe) Projekt umstrukturieren müsste.
    Und da im Endausbau nur 2 Sprachen (Deutsch und Englisch) unterstützt werden sollen, halte ich lieber 2 Sprachversionen aller Resourcen direkt in der EXE und den Modul-DLLs vor...

    Stattdessen #include ich nun innerhalb meiner .RC2-Datei folgendes:

    #undef _AFXDLL
    #undef _AFX_NO_FILECMD_RESOURCES
    #define _AFX_INTL_RESOURCES
    #include "afxres.rc"
    #include "afxribbon.rc"
    

    In VS2008 / MFC 9.0 wird die MFCLOC.dll (also MFC90DEU.dll) bereits vor InitInstance() geladen, nämlich aus DLLMain() [???] der MFC90UD.dll heraus.

    Außerdem stammen beispielsweise die Tooltip-Texte der CDockablePane-Buttons ("Fensterposition", "Automatisch im Hintergrund" etc.) scheinbar überhaupt nicht aus MFCLOC, sondern aus "afxribbon.rc". Das ist insofern interessant, als dass ich die VS2005-UI und nicht die Fluent-UI (sprich: keine Ribbons) verwende ...

    Begriffen habe ich die Funktionweise und die Herkunft so mancher deutscher String-Ressourcen ehrlicherweise nicht, aber mit o.a. Lösung scheinen alle deutschen Strings eliminiert zu sein...

    Danke an alle & Gruß

    Kuwe


  • Mod

    Laerdris schrieb:

    In VS2008 / MFC 9.0 wird die MFCLOC.dll (also MFC90DEU.dll) bereits vor InitInstance() geladen, nämlich aus DLLMain() [???] der MFC90UD.dll heraus.

    Eben! Und mein Code zeigt auc, wie man hier ene andere laden kann...
    Mehr wollte ich nicht schreiben...


Anmelden zum Antworten