C++:Ressourcedateien einbinden

Hallo Leute,

ich möchte mein Programm in mehreren Sprachen anbieten.Dafür habe ich 3 verschiedene Ressourcedateien erstellt, mit dem Text in der jeweiligen Sprache(Deutsch, Englisch, Französisch).

Nun meine Frage:
Ist es möglich, alle Ressourcedateien mit zu vertreiben und aus dem Programm heraus den Benutzer auswählen zu lassen, welche Sprache verwendet wird(über einen Menüpunkt „Sprache“ oder ähnlich), so dass immer die Ressourcedatei verwendet wird, welche die Einträge in der gewählten Sprache enthält.

Über Quellcode-Beispiele oder Tutorials zu diesem Thema wäre ich sehr erfreut.

Danke,
Max

Hallo Swen,

ich kenne da erst mal nur den ‚gottgegebenen‘ (Bill’s :wink: Weg:
All deine Menus, Statics, etc werden via LoadString gesetzt. LoadString lädt zu einer vorgegebenen Resourcen-Id aus einer (dort mit anzugebenden) Dll den dort in den Resourcen innerhalb der Stringtable hinterlegten String… Oh mein Deutsch tut weh!
Also nochmal von vorne:
Hinterlege jeden anzuzeigenden Text in einer Stringtable, versehe sie mit einer eindeutigen ID und beim Aufbau der Informationen lade diese Information via LoadString. Diese Resourcen packst du in eine Dll, die auch ansonsten nichts tut! (also reine Resourcendll), läßt diese übersetzten und bekommst für jede Sprache eine passende Resourcendll. Innerhalb der Programmlogik lädst du einfach nur die jeweils gewünschte Resourcen-Dll, die du gerade brauchst und Voilà - on parle francais :wink:

hmm … bestimmt nicht ganz einfach zuz verstehen, aber der Weg sollte klar sein.

noch eine Alternative
Hallo Swen,

mir ist noch eine Alternative aufgefallen, die auch tut (allerdings ist man da auf MFC/MS VC festgelegt):

1.) du schreibst dein Programm as usual …
2.) Nach Fertigstellung baust du dir eine MFC-Erweiterungsdll
3.) In dieser DLL legts du all die sprachabhängigen Ressourcen wieder an (ACHTUNG: auf ID’s achten!!!)
4.) aus deinem Programm wirfst du alle sprachabhängigen Ressourcen raus (und auch aus der resource.h), includierst dann die resource.h deiner DLL
5.)diese DLL (mit den so definierten Resourcen) kannst du jetzt beliebig übersetzten lassen, in all die Sprachen, die du möchtest… (natürlich verschiedene Namen, aber gleiche ResourcenID-s)
6.) In deinem Programm (bevor du irgendetwas sprachabhängiges anzeigst) lade die entsprechende Resourcendll mit AfxLoadLibrary (WICHTIG: nicht mit LoadLibraryEx -> sonst Absturz in CreateDlgIndirect() )
7.) via AfxSetResourceHandle() kannst du dann CWinApp-Objekt dazu überreden, seine Resourcen (auch Dialogvorlagen!) in dem vorher geladenen Modul zu suchen.

Vorteil dieser Methode gegenüber dem Setzten der Resourcenstrings ist einfach, daß man sich nicht alles haarklein berechnen muß und das statics nicht beschnitten werden, wenn man einen zu langen Text hat. Ein Dialog in Französisch sieht eben anders aus als einer in Englisch oder Thai :wink:

Bei Interesse schick ich auch gerne ein Mini-demo-Projekt zu:wink:

Gruß Patrick