dxgettext
-
Hallo, vermutlich stelle ich wohl nur zu blöd aber ganz so einfach kann es nicht sein...
Habe mir unter http://dxgettext.po.dk/Home das Windows Tool geladen und versucht zum laufen zu kriegen - leider völlig erfolglos.
Die .pas Datei kann ich zwar meinem Projekt hinzufügen aber compilieren geht dann nicht mehr (fehlerhafte Definition etc.)Jetzt suche ich eine Anleitung - idealerweise Schritt für Schritt - wie ich das GNU Gettext in das CodeGear RAD Studio 2009 integriere. Benutze den C++ Builder (VCL).
Kann mir da jemand helfen, wäre super!
-
Hallo, ich weiß nicht genau was dein Problem ist, aber mir hat unter BCB6 folgendes geholfen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-268637-and-highlight-is-dxgettext.html
Des weiteren ist zu beachten das in der bisherigen, aber auch aktuellen Version von dxgettext ein Bug ist, wobei keine cpp-Dateien verarbeitet werden, bzw erst, wenn die po-Datei schon geschrieben ist, was dann keinen Effekt hat.
Workaround:
Man benutzt "xgettext" manuell. Dazu habe ich dieses Batch-Sript gemacht:echo "Starte C++ String Extraktion:" echo "" call xgettext --directory="G:\c_builder_progs\SleepTimerUltimate112_englisch" --files-from="xgettext-input.TXT" --output=generic.po --c++ --from-code=UTF-8 -k_ pause
Zu beachten ist, soweit ich mich erinnere, dass in den Pfaden keine Leerzeichen enthalten sein dürfen.
--files-from: legt eine Datei fest, in der alle zu verwendenden cpps als Dateiname enthalten sind.
-k_: legt fest, dass nur Strings innerhalb des _("") in die PO aufgenommen werden.Dadurch hast du dann zwei po-Files. Mit "UseTextDomain" oder so ähnlich kannst du dann mehrere im Programm nutzen.
Ratsam ist die im Netz zu findende fertige po für VCL Dialoge zusätzlich zu benutzen.
dxgettext ist manchmal etwas störrisch, deswegen sollte man bestimmte Klassen aussen vor lassen, durch "TP_GlobalIgnoreClass(__classid(TFont));" z.B..
Mich hat es einige Tage debugging gekostet, dass im Endeffekt ein leerer nicht benutzer Column in einer TListView zufälliges Fehlerverhalten mit EAccessViolations erzeugt hat. Durch Aktivieren des debugging des dxgettext-Moduls kam ich schon weiter. Allerdings hat es mal bei TFont, TPen oder sonst was gecrasht, etwas, was gar nicht benutzt wurde in dem Sinne. Deshalb zu viel wie möglich "ignorieren".
Wenn man das alles beachtet, sollte es klappen. Man muss sich schon darum kümmern, aber dafür wird man auch belohnt, durch leicht erweiterbare Übersetzungen, die man zur Laufzeit hin- und herschalten kann. Sehr performant.
Man sollte auch die Basisversion der zu übersetzenden Software in englisch machen, dann deutsch mitliefern, denn dxgettext hat öfter Probleme Strings mit Umlauten zu extrahieren. Umgekehrt hingegen geht es.
Man sollte auch generell WideStrings im Programm verwenden bzw was jetzt gerade im RAD Studio aktuell ist, ich habe halt im BCB6 auf AnsiStrings verzichtet. Hilfreich ist auch MessageBoxW() anstatt, MessageBox(), dann erspart man sich das konvertieren der Strings.
Die dxgettext.pas einfach ins Projekt "reinziehen" oder hinzufügen. Der Header wird durch c Builder automatisch generiert. Den dann einfach includieren.
Alles Nähere steht im manual.
Have fun!