String Tables



  • Hallo,

    ich will "statische Mehrsprachigkeit" erzeugen, also nicht zur Laufzeit, sondern beim Kompilieren. Dazu benutze ich String table-Resources, die ich zusätzlich noch benutze, um Sprachstrings einem anderem Modul (DLL) zur Laufzeit zu schicken (dieses Modul ist selbstständig und sprachunabhängig, bekommt also von meiner MFC-Anwendung bei Anfrage einen String:

    CString GetString(const int nID)
    {
      return CString((LPCSTR)g_stringmap[nID]);
    }
    

    wobei "g_stringmap" die ID, die mein Modul gibt mit der Resource-ID meines String-Tables verknüpft.
    So, nun gibt's ein Problem: ich habe beim Anwendungsassistenten am Anfang "englisch" als Sprache eingegeben, es wurde also ein engl. default-string-table erstellt. Wenn ich nun einen deutschen string-table erstelle, funktioniert alles prima (ich muss zwar string für string ersetzten aber sowohl in der MFC-Anwedung werden die richtigen Strings benutzt wie auch im Modul). Falls ich aber irgend eine andere Sprache benutze (sowohl bei der string-table Resource als auch bei der Resourcen-Einstellung für die Kompilierung), also Französisch, Spanisch oder sonst irgend was, FUNKTIONIERTS NICHT MEHR! Es wird immer die letztbenutze Spracheinstellung verwendet, also englisch oder deutsch, aber alle anderen Sprachen funktionieren nicht. Es werden einfach nicht die zugehörigen Strings benutzt, sowohl in der MFC-Anwendung als auch im Modul!

    Wer kann mir dabei helfen, ich habe noch nicht viel Ahnung von MFC und Resourcen?



  • Hallo!

    bevor du deine Funktion GetString(const int nID) aufrufst, muss du die Spracheinstellung setzen, z.B.:
    SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), SORT_DEFAULT));

    dann soll alles funktionieren 😉

    Gruß



  • Danke, es funktioniert jetzt soweit, dass die richtigen Strings angezeigt werden (Modul und MFC). Aber nun noch zwei Fragen:

    Kann ich erreichen, dass immer mit aktueller Spracheinstellung (bei Projekt->Einstellungen für die Resourcen) kopmiliert wird?
    Wie kann ich es schaffen, dass auch die Dateiattribute bei Version->Sprache geändert werden. Es muss doch wohl auch zur Kompilationszeig funktionieren (sonst gäbe es doch nicht die verschiedenen Resourcen je Sprache wie VERSION_INFO und die string-tables. Und warum funktioniert das ohne

    SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), SORT_DEFAULT));
    

    bei ebglisch und deutch, nicht aber bei anderen Sprachen?

    nochmal Danke,
    Till


Anmelden zum Antworten