PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KDevelop und Übersetzungen (po und pot)



Boron
05-02-2003, 13:48
Ich wollte heute mal bei einem kleinen KDE-Programm, dessen Oberfläche komplett in Englisch ist, eine deutsche Übersetzung hinzufügen.
Also:
Im Menü auf Projekt -> Neue Übersetzung hinzufügen. Dort dann de ausgewählt und OK geklickt und gewartet bist die Meldungen unten fertig sind.

Es steht zwar ***Erfolg*** ganz unten bei den Meldungen, aber drei Zeilen darüber steht "msgmerge: Öffnen der Datei »santafu.pot« zum Lesen fehlgeschlagen: No such file or directory".
Und es stimmt. In meinem ganzen Projekt gibt es keine santafu.pot (Santafu ist mein Progrämmchen). Es wird aber eine komplett leere de.po agelegt.

Kann man diese pot-Datei nachträglich erstellen?
Ich habe im Netz und bei der KDevelop-Doku zwar einiges zu Internationalisierung gefunden, aber irgendwie gehen die alle davon aus, dass eine pot-Datei vorhanden ist.

Wenn ich dann irgendwann eine solche Datei habe, wie geht es dann genau weiter mit den Übersetzungen?
Mit KBabel die Sprachedatei öffnen und editieren?
Beim Neuerstellen des Projektes wird dann alles "zusammengebastelt", inclusive Übersetzungen?

anda_skoa
05-02-2003, 18:36
Ich glaube das geht mit
Projekt->Meldungen erstellen und verbinden.

Das sollte die .pot Datei erzeugen und die .po Dateien updaten.

Die .po Dateien zB mit KBabel editieren.

Wenn neue Messages hinzukommen, wieder "Meldungen erstellen und verbinden" um die File upzudaten.

Ciao,
_

Boron
06-02-2003, 11:22
Ich habe noch mal noch ein wenig rumgespielt/ausprobiert. Allerdings ohne Erfolg.

Ich habe schon Probleme damit die Strings in das i18n() makro zu packen.
In den Dateien, in denen ich das anwenden will, habe ich die Datei kapp.h inkludiert, dennoch kommt beim Übersetzen der Fehler
santafu.cpp:61: `i18n' undeclared (first use this function)
santafu.cpp:61: (Each undeclared identifier is reported only once for each function it appears in.)wenn ich i18n() auf diese Weise anwende
temperatureBox = new QGroupBox( 2, Horizontal, i18n("Temperatures"), this);

Wenn ich eine Übersetzung hinzufüge, wie schon beschrieben, dann kommt die Meldung
msgmerge: Öffnen der Datei »santafu.pot« zum Lesen fehlgeschlagen: No such file or directoryWenn ich andererseits auf Projekt -> Meldungen erstellen und verbinden gehe, dann kommt auch diese Meldung.

Woher bekommt ich diese ominöse pot-Datei, wenn sie mir KDevelop nicht liefert?

anda_skoa
06-02-2003, 12:58
Original geschrieben von Boron

Ich habe schon Probleme damit die Strings in das i18n() makro zu packen.


Für das i18n Makro brauchst du nur klocale.h



In den Dateien, in denen ich das anwenden will, habe ich die Datei kapp.h


kapp.h ist der alte Header, man sollte kapplication.h benutzen, wenn man KApplication Sachen braucht.



Woher bekommt ich diese ominöse pot-Datei, wenn sie mir KDevelop nicht liefert?

Hmm, probier mal
#> make package-messages

Hast du ein po Directory in deinem Projektverzeichnis?
Wenn ja, ist da ein Makefile drinnen?
Was passiert, wenn du dort make aufrufst?

Ciao,
_

Boron
06-02-2003, 18:26
Für das i18n Makro brauchst du nur klocale.h Jetzt klappt das. Dann lügt allerdings die Doku. Dort steht, man soll kapp.h einbinden.

Hier die komplette Ausgabe von "make package-messages":
mzwick@boron ~/devel/santafu/$ make package-messages
make -f admin/Makefile.common package-messages
make[1]: Wechsel in das Verzeichnis Verzeichnis »/home/mzwick/devel/santafu«
./santafu
make[2]: Wechsel in das Verzeichnis Verzeichnis »/home/mzwick/devel/santafu/santafu«
xgettext: Öffnen der Datei »/include/kde.pot« zum Lesen fehlgeschlagen: No such file or directory
make[2]: *** [messages] Fehler 1
make[2]: Verlassen des Verzeichnisses Verzeichnis »/home/mzwick/devel/santafu/santafu«
make[1]: Verlassen des Verzeichnisses Verzeichnis »/home/mzwick/devel/santafu«
make -C po merge
make[1]: Wechsel in das Verzeichnis Verzeichnis »/home/mzwick/devel/santafu/po«
make -f ../admin/Makefile.common package-merge POFILES="de.po" PACKAGE=santafu
make[2]: Wechsel in das Verzeichnis Verzeichnis »/home/mzwick/devel/santafu/po«
de.po
msgmerge: Öffnen der Datei »santafu.pot« zum Lesen fehlgeschlagen: No such file or directory
make[2]: Verlassen des Verzeichnisses Verzeichnis »/home/mzwick/devel/santafu/po«
make[1]: Verlassen des Verzeichnisses Verzeichnis »/home/mzwick/devel/santafu/po«

Ein make im po-Verzeichnis zeigt dies hier:
mzwick@boron ~/devel/santafu/po/$ make
rm -f de.gmo; /usr/bin/msgfmt -o de.gmo ./de.po
test ! -f de.gmo || touch de.gmo

anda_skoa
06-02-2003, 18:39
Original geschrieben von Boron
Jetzt klappt das. Dann lügt allerdings die Doku. Dort steht, man soll kapp.h einbinden.


Wahrscheinlich veraltet.
Wo steht das genau?

Wegen dem po Problem.
Hilft es, wenn du einfach eine leere Datei mit dem richtigen Namen anlegst?

Ciao,
_

Boron
06-02-2003, 18:52
Wo steht das genau?Recht vom Klassenbaum, im vierten Karteireiter "Dokumentation" -> KDevelop -> The KDevelop Programming Handbook -> Internationalization -> (jetzt rechts im Fenster) 11.2 How KDE supports Internationalization.

Wenn ich mit eine leere santafu.pot anlege wird die völlig ignoriert. Selbe Fehlermeldung beim "erstellen und verbinden von Meldungen".

Boron
07-02-2003, 20:16
So, jetzt habe ich noch was herausgefunden.
Irgendein make, von den vielen, hat im Verzeichnis /include die Datei kde.pot gesucht (die befindet sich aber in /usr/include).
Da es /include nicht gibt habe ich kurzerhand eins angelegt und von dort eine Link nach /usr/include/kde.pot mit Namen kde.pot gesetzt.

"Meldungen erstellen und verbinden" klappt jetzt problemlos.
Auch das Bearbeiten der Datei de.pot in KBabel.

Wenn ich jetzt aber das komplette Projekt neuerstellen lasse, dann bekomme ich meine deutsche Übersetzung nicht angezeigt, obwohl die Sprache von meinem KDE auf Deutsch steht.
Wie denn jetzt?

anda_skoa
07-02-2003, 21:03
Original geschrieben von Boron

Da es /include nicht gibt habe ich kurzerhand eins angelegt und von dort eine Link nach /usr/include/kde.pot mit Namen kde.pot gesetzt.

"Meldungen erstellen und verbinden" klappt jetzt problemlos.
Auch das Bearbeiten der Datei de.pot in KBabel.

Komische Sache.
Vielleicht war da irrtümlich als prefix / angegeben worden.



Wenn ich jetzt aber das komplette Projekt neuerstellen lasse, dann bekomme ich meine deutsche Übersetzung nicht angezeigt, obwohl die Sprache von meinem KDE auf Deutsch steht.
Wie denn jetzt?

Das erzuegte .mo File muss in eines der Verzeichnisse, wo KDE nach Übersetzungen sucht.

Mach mal
#> kde-config --path locale

In einem dieser Verzeichnises in de/LC_MESSAGES

Ich hab für meine in Entwicklung befindlichen KDE Programme ein eigenes Installverzeichnis, dass ich dann in KDEDIRS eingetragen habe.
Dann kann ich make install machen und KDE findet alle Files automatisch.

Ein eigenes Verzeichnis deshalb, weil ich dann ohne root zu sein installieren kann und ich alles mit einem rm -rf "deinstallieren" kann :)

Ciao,
_

Boron
08-02-2003, 12:20
Bei mir wurde nur eine Datei mit Namen de.gmo erstellt. Diese habe ich zum Test mal umbenannt in santafu.mo und nach /usr/share/locale/de/LC_MESSAGES kopiert.

Und... tataaa, das Programm ist in deutscher Sprache *extremfreu*.
Vielen, vielen Dank. Alleine hätte ich das wohl nie geschaft.

Eine (hoffentlich) letzte Frage sei mir noch gegönnt:
Kann ich sicher sein, dass bei einem make install meines Projekts diese de.gmo in santafu.mo und in z.B. /usr/share/locale/de/LC_MESSAGES kopiert wird?

anda_skoa
08-02-2003, 16:06
Original geschrieben von Boron
Eine (hoffentlich) letzte Frage sei mir noch gegönnt:
Kann ich sicher sein, dass bei einem make install meines Projekts diese de.gmo in santafu.mo und in z.B. /usr/share/locale/de/LC_MESSAGES kopiert wird?

Ja, normalerweise ist das Makefile im pro Verzeichnis entsprechend erzeugt worden.

Das nimmt dann auch die Umbennung vor.

Ciao,
_

Boron
08-02-2003, 19:03
Ich hab für meine in Entwicklung befindlichen KDE Programme ein eigenes Installverzeichnis, dass ich dann in KDEDIRS eingetragen habe. Dann kann ich make install machen und KDE findet alle Files automatisch. Ein eigenes Verzeichnis deshalb, weil ich dann ohne root zu sein installieren kann und ich alles mit einem rm -rf "deinstallieren" kann
Das scheint mir echt sinnvoll zu sein.
Würde es dir was ausmachen mir kurz zu erklären wie du das gemacht hast *truer-lieber-hundeblick*?

anda_skoa
08-02-2003, 20:09
Original geschrieben von Boron
Das scheint mir echt sinnvoll zu sein.
Würde es dir was ausmachen mir kurz zu erklären wie du das gemacht hast *truer-lieber-hundeblick*?

Das ist eigentlich ganz einfach.

Zuerst brauchst du ein Verzeichnis, wo du Schreibrechte hast, also zB ein Unterverzeichnis in deinem $HOME.

Ich habe dazu eine eigene Partition, die unter /dvl gemountet ist (ja ich weiß, nicht FHS konform :rolleyes:) und Schreibrechte für die Gruppe devel hat, zu der ich gehöre.

Dort hab ich also ein Unterverzeichnis kde angelegt, also /dvl/kde

Wenn ich ein KDE Programm erstelle, äuft erstmal automatisch ein configure.
Das muss ich dann nochmal händich aufrufen, weil der Default Prefix /usr/local ist, ich aber /dvl/kde möchte.

Also mache ich
#> cd projekt
#> ./configure --prefix=/dvl/kde

Außerdem erweitere ich meine .bashrc
export KDEDIRS=/dvl/kde:$KDEDIRS

Ein make install installiert dann in /dv/kde

Ciao,
_

Das nächste Mal bei "Entwickeln mit anda_skoa":
srcdir != builddir
:D

Boron
08-02-2003, 20:28
Aaaah, einfach herrlich und herrlich einfach.
Jetzt bin ich ein glücklicher Mensch.

Vielen Dank noch mal :).