MFC-Anwendungen in mehreren Sprachen

hphi

Mitglied
Hallo liebes Forum,

wie erstellt man professionell MFC-Anwendungen in mehreren Sprachen.

Ich habe mich auch schon mal versucht.

Zuerst habe ich mehrere Konfigurationen angelegt z.B.

- debug_de
- release_de
- debug_en
- release_en

mit dem define DE und EN.

Dann habe ich meine Resourchen duppliziert und diese defines in Bedingung eingetragen,
sowie die englischen Resourcen übersetzt. Nur bei den String - Tables kann man keine
Bedingungen angeben. Ich muss deshalb jedes mal die Resource - Datei per Hand
editieren und vor den String tables meine defines wieder eintragen, wenn ich die Resourcen mit VC++ bearbeitet hatte.

Also ich muss dann immer ein if - Block vor die String - Tables eintragen z.B.

Code:
#if defined(APSTUDIO_INVOKED) || defined(DE)

...
#endif

#if defined(APSTUDIO_INVOKED) || defined(EN)

...
#endif

Das ist sehr lästig, und überhaupt nicht elegant.
Hat jemand eine bessere Lösung ?

Viele Grüße

hphi
 
Hallo hphi,

also wenn deine Applikation immer die Sprache des Betriebssystems darstellen soll, ist es relativ einfach.

Dann musst du halt nur die jeweiligen Resourcen im Resource-Editor kopieren und pflegen.

Zum Bleistift hast du einen Dialog mit der IDD_MYDLG[Deutsch (Deutschland)].
Du möchtest diesen Dialog auch in Englisch haben, dann drückst du im Kontextmenu des Dialogs 'Kopie einfügen' und wählst von mir aus [Englisch(USA)] aus.

Anschließend pflegst du alle auf dem neuen Dialog vorkommenden Texte.

Bedenke, dass alle Nachrichten in Messageboxen, Statusleiste, Tooltip ebenfalls sprachabhängig gepflegt werden sollten (String Table). Dies ist wirklich keine schöne Arbeit und überlässt man am besten jemanden, der nicht programmieren kann ;-)

Wenn deine Applikation eine Sprache unabhängig vom Betriebssystem darstellen soll, ist es etwas komplizierter.

Dazu kann ich dir mal was mehr schreiben wenn es wirklich der Fall sein sollte.

Bis dahin schöne grüße,

Peter
 
Hallo Peter,

das Programm soll in verschieden Länder ausgeliefert werden. Ich möchte z.B.
eine deutsche exe und eine englische ausliefern. Nur die string - Tables machen mir Probleme. Ich habe VC++ 6.0, also nicht die gerade neuste Version. Und dort kann man bei String - Tables kein define hinterlegen.

Danke für deine schnelle Antwort.

Beste Grüße

hphi
 
Hi,

ich verstehe nicht, warum du mit den defines arbeiten möchtest?

Wenn du die Resourcen so pflegst, wie ich es geschrieben hatte, dann wird die Applikation auf englischen Betriebssystemen auch in Englisch dargestellt.

Es sei denn du möchtest die Ausführbare Datei so klein wie möglich halten.

Dann gibt es noch die Möglichkeit die Resourcen bei Programmstart dynamisch zu laden :

Code:
BOOL CMyApp::InitInstance()
{
   HINSTANCE hRes = NULL;
   if( myLang == "de" ) {
      hRes= LoadLibrary("Resource_de.dll");
   }
   else if ( myLang == "en" ) {
       hRes= LoadLibrary("Resource_en.dll");
   }
   if(hRes)
      AfxSetResourceHandle(hRes);
   //Rest of wizard code
   return CWinApp::InitInstance();
}

Les mal in dieser Richtung in der MSDN weiter.

Viel Erfolg,

Peter
 

Neue Beiträge

Zurück