wxProgressDialog erweitern?
-
Zum Thema internationalisierung findest du auch im wxWidget Buch etwas.
Hier der Link zum wxWidget Buch!
http://www.informit.com/content/images/0131473816/downloads/0131473816_book.pdf
-
Danke!
Toll, dass es da sogar ein ganzes Buch über wxWidgets gibt.
Hm..., wxLocale heißt das also. Ich hab zwar nach wxI16n gesucht, aber darauf wär ich nicht gekommen. Auch Googel hat da nicht weitergeholfen.
Es ist immer noch das Beste die Profis zu fragen.
Mfg
-
guenni81 schrieb:
Zum Thema internationalisierung findest du auch im wxWidget Buch etwas.
Hier der Link zum wxWidget Buch!
http://www.informit.com/content/images/0131473816/downloads/0131473816_book.pdfHi,
gibt es auch noch andere Beispiele für die Internationalisierung, als das Buch und die Doku?
Ich hab mich mit dem Beispiel in diesem Buch beschäftigt, allerdings funzt es nicht so ganz. Die Bibliothek wird zwar korrekt geladen ( es wird true zurückgegeben) aber wenn ich dann die Labels neu aufbaue, findet das Programm diese nicht in der Datei. Auch wenn ich direkt mit GetString() versuche, die Übersetzung zu holen, wird nur der Original String zurückgegeben, nicht die Übersetzung. Ich hab die Datei manuell geöffnet, und die Übersetzung ist vorhanden!
Vielleicht hab ich irgendetwas wichtiges vergessen?
Wenn ich ein anderes Beispiel hätte, könnte ich das nochmal prüfen.Mfg
-
Ein weiteres Beispiel findest du in %wxdir%/samples/internat/
-
Hast du in dem Verzeichnis auch die aktualisierte .mo- oder nur die aktuelle .po-Datei?
Mich irritiert die Aussage "Ich hab die Datei manuell geöffnet, und die Übersetzung ist vorhanden" etwas, da die .mo Datei eigentlich im Binärformat ist. Man kann zwar die einzelnen Strings trotzdem sehen aber nicht so schnell erkennen was wozu gehört.
Anonsten könntest du noch überprüfen ob der zu übersetzende Text richtig markiert ist ( _() o. wxGetTranslation()).
Stimmt die Reihenfolge: erst Katalog laden, dann Dialoge erzeugen?
Wenn das immer noch nicht tut könnte ich mir das nur so erklären, dass du beim Programmstart nicht die richtige Sprache auswählst.Ich nutze poEdit zum Erstellen der Lokalisierungsdateien und das funktioniert ganz gut. Ich habe mich dabei am Beispiel aus dem Buch orientiert.
-
Gordon73 schrieb:
Hast du in dem Verzeichnis auch die aktualisierte .mo- oder nur die aktuelle .po-Datei?
Mich irritiert die Aussage "Ich hab die Datei manuell geöffnet, und die Übersetzung ist vorhanden" etwas, da die .mo Datei eigentlich im Binärformat ist. Man kann zwar die einzelnen Strings trotzdem sehen aber nicht so schnell erkennen was wozu gehört.
Anonsten könntest du noch überprüfen ob der zu übersetzende Text richtig markiert ist ( _() o. wxGetTranslation()).
Stimmt die Reihenfolge: erst Katalog laden, dann Dialoge erzeugen?
Wenn das immer noch nicht tut könnte ich mir das nur so erklären, dass du beim Programmstart nicht die richtige Sprache auswählst.Ich nutze poEdit zum Erstellen der Lokalisierungsdateien und das funktioniert ganz gut. Ich habe mich dabei am Beispiel aus dem Buch orientiert.
Jo, ich hab mich auch genau an das Buch gehalten und benutze poEdit.
bool MyApp::OnInit() { m_locale = new wxLocale( wxLANGUAGE_ENGLISH); //private Variable von MyApp bool c = m_locale->AddCatalog( wxT("lang")); //c = true -> Katalog wird geladen wxString s = m_locale->GetString(_("Signal senden")); //Hier kommt der Originalstring zurück SignalFrame* frame = new SignalFrame( 0L, wxT("Signal") ); frame->SetIcon( wxICON( amain ) ); frame->Show(); return true; }
Ich schau mir mal das Beispiel von wxWidgets an.
Mfg
-
Hm, im Buch stehts so:
m_locale = NULL; SelectLanguage( wxLANGUAGE_DEFAULT ); MyFrame *frame = new MyFrame(_(“i18n wxWidgets App”)); frame->Show(true); return true;
Aber ich denke das du das auch schon ausprobiert hast.
-
Ja. Die Methode SelectLanguage macht nichts anderes als m_locale deleten und neu zu initialisieren und dann den Katalog zu laden. Ich hab's halt ohne eigene Methode gemacht, um mögliche Fehlerquellen so gering wie möglich zu halten.
Ich versuche jetzt mal das Beispiel von wxWidgets in Gang zu bringen und dann schau'mer mal.
Mfg
-
Ok, es funktioniert.
Die Implementation war wohl richtig, es lag anscheinend an den .mo Dateien.bool MyApp::OnInit() { // don't use wxLOCALE_LOAD_DEFAULT flag so that Init() doesn't return // false just because it failed to load wxstd catalog if ( !m_locale.Init(wxLANGUAGE_FRENCH, wxLOCALE_CONV_ENCODING) ) { wxLogError(_T("This language is not supported by the system.")); return false; } // normally this wouldn't be necessary as the catalog files would be found // in the default locations, but when the program is not installed the // catalogs are in the build directory where we wouldn't find them by // default // wxLocale::AddCatalogLookupPathPrefix(wxT(".")); // Initialize the catalogs we'll be using bool success = m_locale.AddCatalog(wxT("internat")); wxString s = m_locale.GetString(wxT("&File")); // in s steht "&Fichier" return true; }
Jetzt hat nur noch poEdit ein Problem mit meinen Sourcedateien.
FehlerMeldung:
Failed to convert file "C:\...\poe248.tmp" to Unicode.
Ich hab die Codierung auf ISO 8859 - 1 gestellt und bei meiner main.cpp funzt es , aber die anderen Dateien schmecken ihm wohl nicht.
Gibt's da noch ein anderes Programm für Windows?
-
Also, ich weiß jetzt, warum er die Dateien nicht nimmt.
Ich hab da 'ä' und 'ö' in den Strings drin.
Falls ihr euch mit poEdit auskennt, wisst ihr vielleicht, welche Codierung ich für die Quelltexte wählen muss, damit er mit diesen Buchstaben in Unicode zurechtkommt?Mfg