Hallo,
ich möchte folgendes machen: Eine Aplikation soll in Englisch und Deutsch laufen.
Das Programm soll auf allen Betriebsystem schauen, ob es in Deutsch oder Englisch ist. Je nach dem, was nun für eine Sprach vor liegt, soll dann eine Stringtabelle geladen werden.
Wie kann ich das machen?
Also das ist ganz einfach: wenn du deine Ressourcen (in der IDE) komplett kopierst und den kopierten Ressourcen eine andere Sprache (z.B. Englisch) zuweist (und den Inhalt natürlich dementsprechend änderst), dann sind beide Ressourcen-Pakete (alles in einer rc-Datei!) nachher in der EXE. Je nachdem, welche Sprache das OS hat, wird dann die entprechende Ressource (z.B. String-Tabelle) geladen.
Und dann die zweite Frage: Wie kann ich es machen, dass in den Dialog ein String aus so einer tabelle geladen wird?
Mit CString::LoadString, hier:
CString::LoadString
BOOL LoadString( UINT nID );
throw( CMemoryException );
Return Value
Nonzero if resource load was successful; otherwise 0.
Parameters
nID
A Windows string resource ID.
Remarks
Reads a Windows string resource, identified by nID, into an existing CString object.
Example
The following example demonstrates the use of CString::LoadString.
// example for CString::LoadString
#define IDS_FILENOTFOUND 1
CString s;
if (! s.LoadString( IDS_FILENOTFOUND ))
{
AfxMessageBox("Error Loading String: IDS_FILENOTFOUND");
...
}
Aber ehrlich gesagt, brauchst du das in einem Dialog meistens gar nicht, da du nicht nur unterschiedliche String-Tabellen erstellst (für untersch. Sprachen), sondern ja auch unterschiedliche Dialoge, wo dann der Text direkt reingeschrieben wird!
Oder kennt ihr eine andere möglichkeit?
Ja, natürlich! Man kann die Sprache auch zur Laufzeit laden (wenn du z.B. willst, dass man auch in einem deutschen OS englische Sprache haben kann), indem man die Ressourcen wir oben erwähnt kopiert, sprachlich verändert und dann
in einem neuen DLL-Projekt als Ressource einbindet, mit den gleichen IDs (Resource.h) natürlich! Dann kannst du
zur Laufzeit mit "SetResourceHandle" das Handle der entsprechenden Sprach-DLL setzten und promt verändert sich die "Sprachversion", wobei man bei den Menüs aufpassen muss (neu erstellen lassen, und zwar manuell!).