Sprachabhängige Resourcen auswählen



  • Hallo Freunde!
    Ich habe in meinem Programm jede Resource doppelt, einmal in Deutsch und einmal in Englisch. Derzeit werden jedoch nur die deutschen Resourcen angezeigt.

    Wie kann ich es machen, dass nur die Englischen Resourcen angezeigt werden?

    Beste Grüße, Lothar.



  • Um während der Laufzeit die Sprachen zu wechseln gibt es eigentlich nur eine saubere Lösung.

    1. Beim Programmstart die Resourcen als Dlls laden .

    In der h Datei:

    private:
    	HINSTANCE hGermanResources;
    	HINSTANCE hEnglishResources;
    	HINSTANCE hFrenchResources;
    

    In der cpp Datei im InitInstance:

    #ifdef _DEBUG
    	hGermanResources		= LoadLibraryEx("Languages/LanguageGermanD.dll", NULL, 0);
    	hEnglishResources		= LoadLibraryEx("Languages/LanguageEnglishD.dll", NULL, 0);
    	hFrenchResources		= LoadLibraryEx("Languages/LanguageFrenchD.dll", NULL, 0);
    #else
    	hGermanResources		= LoadLibraryEx("Languages/LanguageGerman.dll", NULL, 0);
    	hEnglishResources		= LoadLibraryEx("Languages/LanguageEnglish.dll", NULL, 0);
    	hFrenchResources		= LoadLibraryEx("Languages/LanguageFrench.dll", NULL, 0);
    #endif
    // Mit folgender Zeile startet dein Programm zb. immer zuerst in der deutschen Sprache. 
    AfxSetResourceHandle(hGermanResources);
    

    2. Dann am besten in dein Menü eine Auswahl der Sprachen machen. Beim Message Handler der Menüeinträge machst folgendes für jede Sprache:

    AfxSetResourceHandle(hGermanResources);
    	SetMenu((*m_pMainWnd),
    LoadMenu(CYourApp::hGermanResources,MAKEINTRESOURCE(IDR_MAINFRAME) ));
    	m_myDocument->UpdateAllViews(NULL);
    

    3. In der ExitInstance() deiner App:

    FreeLibrary(hGermanResources);
    	FreeLibrary(hEnglishResources);
    	FreeLibrary(hFrenchResources);
    

    Wichtig ist das alle Resource dlls die selben Elemente, Strings, IDs !! beinhalten und das bei jeden Element die Sprache richtig gesetzt ist.

    Viel Erfolg

    daSickboy



  • Hallo daSickboy!

    Vielen Dank, für Deine Antwort.

    Ich habe schon befürchtet, dass das benutzerabhängige Nutzen sprachabhängiger Resourcen am besten über DLLs zu realisieren ist. Wenn sprachabhängige Resourcen im Programm direkt vorhanden sind, werden nur die Resourcen vom Programm verwendet, die der Sprache des Betriebssystems entsprechen.

    Wer sich für eine detailliertere Anleitung interessiert, dem sei
    http://www.codeproject.com/cpp/mult_lang_support.asp
    empfohlen.

    Bye, Lothar.


Anmelden zum Antworten