Hallo an alle,
gettext ist ja an sich ne feine Sache, funktioniert auch bei mir, aber leider nur in einer Datei, naemlich in der main.cpp.
Das ganze gestaltet sich so: i18n.h: #ifndef I18N_H #define I18N_H
#include <libintl.h> #define _(x) gettext(x)
#endif
Diese Datei binde ich in main.cpp,fileio.cpp und menu.cpp ein. Die String sind richtig markiert. Auch im Uebersetzungsverzeichnis klappt das ganze Erstellen (Strings werden erkannt, Binaerdatei erstellt und richtig installiert als .mo-Datei), alles kein Problem, nur leider wird beim Aufruf des Programms nur der Teil _uebersetzt angezeigt_ der in der main.cpp steht.
Irgendwo steckt doch bestimmt ein Schusselfehler, nur leider find ich den ewig nicht. Hat vielleicht jemand von euch eine _Vermutung_ oder aehnliches? Den Quelltext kann ich auch schicken, als tar.gz fasst das ganze aber 159kb(wegen dem ganzen autotools-kram) und das war mir leicht zu viel fuer die Liste.
Danke fuer Tipps,
Sebastian
On Sunday 11 August 2002 20:22, Sebastian Roth wrote:
Diese Datei binde ich in main.cpp,fileio.cpp und menu.cpp ein. Die String sind richtig markiert. Auch im Uebersetzungsverzeichnis klappt das ganze Erstellen (Strings werden erkannt, Binaerdatei erstellt und richtig installiert als .mo-Datei), alles kein Problem, nur leider wird beim Aufruf des Programms nur der Teil _uebersetzt angezeigt_ der in der main.cpp steht.
nach letzten Erkenntnissen kann ich jetzt sogar noch praeziser werden: menu.cpp:
Menu::Menu(char name[50]) { ... std::cout<<_("Translate me!")<<std::endl; // klappt ... }
Menu::SetActive() { ... std::cout<<_("your input: "); // klappt nicht ... }
Und das gibt mir ein Unverstaendliches Raetsel auf! Am fehlendem std::endl bei "your input:" liegts nicht, hab ich schon probiert.
Weiss vielleicht jetzt jemand etwas mehr?
Sebastian
On Sunday 11 August 2002 21:42, Sebastian Roth wrote:
Und das gibt mir ein Unverstaendliches Raetsel auf! Am fehlendem std::endl bei "your input:" liegts nicht, hab ich schon probiert.
und jetzt bin ich am verzweifeln :( :
void Menu::Show(void) { std::cout<<_("What now?")<<std::endl;
MenuItem *temp =root;
// display title and line std::cout <<menuname<<std::endl; for(unsigned int c=0;c<strlen(menuname);c++) std::cout<<"-"; std::cout<<std::endl;
// display contents do{ std::cout<<temp->GetCurrentId()<<". "<<temp->GetItemName()<<std::endl; temp = temp->GetNextItem(); }while(temp != NULL); //for(int i=0;i<50;std::cout<<"-",i++); std::cout<<std::endl; std::cout<<_("What now?")<<std::endl; }
Und jetzt wird nur das erste "What now?" uebersetzt!!!
Nagut, ich geh ins Bett, das reicht mir :(
Gute Nacht,
Sebastian, der sich ueber jeden Tipp freuen wuerde!
On Sun, Aug 11, 2002 at 08:22:57PM +0200, Sebastian Roth wrote:
Hallo an alle,
gettext ist ja an sich ne feine Sache, funktioniert auch bei mir, aber leider nur in einer Datei, naemlich in der main.cpp.
Das ganze gestaltet sich so: i18n.h: #ifndef I18N_H #define I18N_H
#include <libintl.h> #define _(x) gettext(x)
#endif
Wie hast du die strings extrahiert und wo liegt die mo-Datei?
Ciao, Tobias -- In a world without walls and fences who needs Windows and Gates???
Hallo Tobias,
On Monday 12 August 2002 11:08, Tobias Koenig wrote:
Wie hast du die strings extrahiert und wo liegt die mo-Datei?
im Verzeichnis po/ geb ich ein: make physics.pot Dann geschieht das: sebbi@athlon770:~/hacks/cpp/physics-0.1-newstr/po> make physics.pot make physics.pot-update make[1]: Entering directory `/home/sebbi/hacks/cpp/physics-0.1-newstr/po' sed -e '/^#/d' remove-potcdate.sin > t-remove-potcdate.sed mv t-remove-potcdate.sed remove-potcdate.sed /usr/bin/xgettext --default-domain=physics --directory=.. \ --add-comments=TRANSLATORS: --keyword=_ --keyword=N_ \ --files-from=./POTFILES.in \ --copyright-holder='Free Software Foundation, Inc.' test ! -f physics.po || { \ if test -f ./physics.pot; then \ sed -f remove-potcdate.sed < ./physics.pot > physics.1po && \ sed -f remove-potcdate.sed < physics.po > physics.2po && \ if cmp physics.1po physics.2po >/dev/null 2>&1; then \ rm -f physics.1po physics.2po physics.po; \ else \ rm -f physics.1po physics.2po ./physics.pot && \ mv physics.po ./physics.pot; \ fi; \ else \ mv physics.po ./physics.pot; \ fi; \ } make[1]: Leaving directory `/home/sebbi/hacks/cpp/physics-0.1-newstr/po'
ein make update-po updated dann die de.po. Klappt auch, alle Strings werden richtig erkannt.
die mo-Datei liegt unter: $prefix/share/locale/de/LC_MESSAGES/physics.mo
ein kurzer blick darain zeigt mir auch das die strings alle da sein muessten.
Leider hat mir auch ein gettext-Update nicht geholfen. 0.11.4 funktioniert bei mir auch nicht viel besser :(
achja, gcc 3.1 und autoconf 2.53 und autmake 1.6.3
sollte ich evtl den gcc auf 3.1.1 updaten?
Ciao, Tobias
Sebastian
On Tue, Aug 13, 2002 at 11:20:47AM +0200, Sebastian Roth wrote:
Hallo Tobias,
Hi Sebastian,
Wie hast du die strings extrahiert und wo liegt die mo-Datei?
<schnipp>
ein make update-po updated dann die de.po. Klappt auch, alle Strings werden richtig erkannt.
die mo-Datei liegt unter: $prefix/share/locale/de/LC_MESSAGES/physics.mo
Da stimmt also alles...
sollte ich evtl den gcc auf 3.1.1 updaten?
Sollte nicht nötig sein.
Ich hatte mal ein ähnliches Problem mit gettext()/PHP, wo einmal der Text übersetzt wurde und beim nächsten Laden der Seite nicht mehr.
Du kannst ja mal dein Programm soweit abspecken, bis entweder das Programm aus
int main() { gettext("Hallo Welt"); }
besteht (=> gettext ist buggy), oder bis es funktioniert.
BTW: ersetzt das Makro mal durch eine Funktion
Ciao, Tobias
On Tuesday 13 August 2002 17:13, Tobias Koenig wrote:
Hi Sebastian,
Hi Tobias,
Ich hatte mal ein ähnliches Problem mit gettext()/PHP, wo einmal der Text übersetzt wurde und beim nächsten Laden der Seite nicht mehr.
Du kannst ja mal dein Programm soweit abspecken, bis entweder das Programm aus
int main() { gettext("Hallo Welt"); }
besteht (=> gettext ist buggy), oder bis es funktioniert.
Bevor ich deine eMail las (bevor sie bei mir war), hatte ich die letzte Mail schon weggeschickt, es hat sich also erledigt. Danke trotzdem! ;)
BTW: ersetzt das Makro mal durch eine Funktion
Ciao, Tobias
Sebastian
Hallo,
ok, ich moechte die Selbstdiskussion jetzt mal zu Ende bringen... die Loesung erscheint mir sehr merkwuerdig, haette ich nicht erwartet.
Also so sieht die Methode Menu::Show() jetzt aus (auszugsweise): ... while(temp!=NULL){ // std::cout << temp->GetCurrentId() << std::endl; printf("%i.",temp->GetCurrentId()); std::cout << temp->GetItemName() << std::endl; temp = temp->GetNextItem(); }; ...
temp->GetCurrentId() liefert einen Integer zurueck, das macht anscheinend gettext bzw. std::cout Stress und deswegen hatte es auch vorher nicht funktioniert. printf war also mein Retter. Hoffentlich hat mein Code nicht noch mehr solche Probleme ... ;)
Jetzt kann ich mich endlich wieder den eigentlichen Dingen widmen...
Sebastian
lug-dd@mailman.schlittermann.de