Multilanguage
-
//irgendwas.h string[2] MsgText_01; MsgText_01[0] = "This is an english message."; MsgText_01[1] = "Das ist eine deutsche Nachricht."; //..weitere Texte.. int lg; // 0:english; 1:deutsch // "lg" wird am irgendwo definiert, z.B. unter WM_CREATE aus einer EinstellungsDatei ausgelesen //irgendwas.cpp MessageBox(hwnd,MsgText_01[lg].c_str(),"MsgTitle",MB_OK|MB_ICONQUESTION);
vermutlich wird das in der praxis anders gelöst, aber so ganz spontan hätte ich es so versucht..
-
Ich glaube es geht ihm eher um die Buttons als um den Text
"Ok", "Abbrechen", "Ja", "Nein" und sowasVielleicht hilft da SetThreadLocale() oder SetLocaleInfo()
-
Ja, es geht um die Buttons OK, ABBRECHEN usw. Meine eigenen Texte sind klar.
Ich hab mal folgendes probiert:
SetThreadLocale( MAKELCID( MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US) ,SORT_DEFAULT) );
Kommt auch mit TRUE zurück, jedoch ändern tut sich nichts. Bei SetLocaleInfo hab ich mir in der MSDN mal die Typen angeschaut die gesetzt werden können, hab da jedoch nichts gesehen für die Sprache.
Dann hab ich auch mal #pragma setlocale("english") probiert, auch ohne positives Ergebnis. Ist der SetThreadLocale Aufruf von mir überhaupt richtig?
-
Wie hast du denn Buttons erstellt bei dennen du den Text nicht selber festgelegt hast?
-
bei den messageboxen...
-
Hmm, dann fällt mir nur noch ein:
MessageBox selber bauen
-
Ne das ist möglich die auf Englisch zu übersetzen. Der Ansatz von Daminon müsste richtig sein. Ich habe eine Codesnipet von einem Freund, da wird das auch gemacht allerdings für ne Fehlermeldung.
-
Dann gib den Code Snippet.
-
<ironie>wow bist du freundlich</ironie>
mich interessiert das au!!
-
void error() { TCHAR szBuf[80]; LPVOID lpMsgBuf; DWORD dw = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,dw,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL); sprintf(szBuf,"Fehler %d: %s",dw,lpMsgBuf); MessageBox(NULL, szBuf, "Error", MB_OK | MB_ICONERROR); }
Ich weiß nicht ob euch das weiterhilft
-
flammenvogel, ich glaub du hast das Problem nicht verstanden. Der Quelltext hat jedenfalls nicht mit dem Problem zu tun.
-
man sieht schon du bist ein ego...
er hat geschrieben er weiß net ob dir das hilft.
das ist SEIN schnipsel wie er ihn hat...
-
das hat er nacheditiert. :p
-
denk doch was du willst jedenfalls hab ich das gesehn als der post da war..
-
Irgendwas mit dem MAKRELANGID ist auch in dem Versuch von Daminon drin. Aber wie gesagt ich habe keine Ahnung ob das hilft. Die Funktion gibt jedenfalls den letzten WinApi Fehler mit einer deutschen Fehlerbeschreibnung aus. Sonst ist in der WinAPI doch immer alles auf Englisch.
-
-
Aber ich glaube ich weis jetzt warum der Aufruf von SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); nicht funzt.
Bei SetThreadLocal steht: (MSDN)
Windows 2000/XP: Do not use SetThreadLocale to select a UI language. To select the proper resource that is defined with a LANGUAGE statement, use FindResourceEx.
-
Ich habe nochmal in der MSDN geguckt. MessageBoxIndirect kennt den Language Parameter, das gleiche gilt für MessageBoxEx() allerdings ist er dort als reserved angegeben. Ich versuche gerade MessageBoxIndirect zum laufen zu bringen, habs aber noch nicht geschafft. Allerdings müsste es laut MSDN gehen.
-
Die Sprache muss aber auch auf dem System vorhanden sein und MultiLanguage Installationen sind relativ selten
Wenn es denn wirklich wichtig ist: warum machst Du nicht eine eigene MessageBox ???
-
Naja gut, der Tip mit der MessageBoxIndirect funktioniert in der Tat nur wenn die Language Englisch auch installiert ist. Aber immerhin könnten sich so die Leute in England die sowieso ein Englisches Windows haben, dein Programm auf Englisch geniesen.