Qt Linguist und QtDesigner - nicht alles übersetzt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Hallo Alle,
ich habe ein Problem beim Übersetzen meiner PyQt Anwendung. Es wird im Grunde alles übersetzt, außer 7 Strings, welche alle hintereinander erstellt wurden und sich in einer GroupBox befinden.
Erstellt wurde die GUI über den QtDesigner, mit pyuic umgewandelt und dann mit Qt Linguist übersetzt. Im Qt Linguist werden die Strings auch angezeigt und übersetzt. Nur im Programm werden sie einfach nicht übersetzt.

Die betreffende Zeile in der von pyuic erstellten Python Datei:

Code: Alles auswählen

self.bday.setText(QtGui.QApplication.translate("MainWindow", "Dienstag:  ", None, QtGui.QApplication.UnicodeUTF8))
Geladen werden die Einstellung so:

Code: Alles auswählen

translator = QtCore.QTranslator()
translator.load(de_DE.qm', './translation/')
app.installTranslator(translator)
Der Fehler wird wohl aber wo ganz anders stecken - aber wo?
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Sorry, das war ein ganz blöder Fehler von mir! Ich hatte dummer Weise vergessen, dass sich der Inhalt der Labels während dem durchlauf des Programmes noch verändern können. Es konnte also garnicht funktionieren. :oops:

Dabei ist mir nun leider aufgefallen, dass die Strings in der Hauptdatei,die ja nicht durch pyuic4 erstellt wurde, nicht übersetzt werden. Das heißt, dass sie erst gar nicht in meinem erstellten .ts File auftauchen.

Dabei war ich mir mit meinem Vorgehen ziemlich sicher:

Code: Alles auswählen

self.tr(u"Montag:")
Hat jemand eine Idee was ich falsch mache??
lunar

@Trubinial Guru: Lässt Du denn pylupdate4 auch über den Quelltext laufen? Falls ja, dann zeige am besten mal ein minimales Projekt, bei welchem der Fehler auftritt auf Github oder BitBucket.
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Ich habe jetzt nen sehr kleines Beispiel erzeugt:
https://gist.github.com/1349846

beispiel.py ist dabei das Hauptprogramm, in welches die vom Qt Designer erstellte rightorwrong.py importiert wird. Die rightorwrong.py habe ich nicht hochgeladen, da sie bei dem ganzen Problem unwichtig sein dürfte.

Die Projektdatei projekt.pro wird über pylubpdate4 aufgerufen, jedoch erscheint in der erstellten de_DE.ts kein zu übersetzender String.
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Ich konnte das Problem lösen!
Statt

Code: Alles auswählen

self.tr(u'Kontrolliere deine Antwort')
sollte man

Code: Alles auswählen

unicode(self.tr('Kontrolliere deine Antwort'))
benutzen. Dann wird alles richtig erkannt,
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Die vorher gepostete Lösung hat doch nicht so funktioniert, wie sie sollte, da sie natürlich einen Fehler gemeldet hat, sobald ein Umlaut im String enthalten war.

Nachdem auch trUTF8() nicht richtig funktioniert hat bin ich darauf gestoßen, dass man die Codierung von tr() festlegen kann:

Code: Alles auswählen

QTextCodec.setCodecForTr(QTextCodec.codecForName("UTF-8"))
Wenn ich mich nicht schon wieder irre, funktioniert dann alles, wenn man ganz normal tr() benutzt.
Liebe Grüße
Antworten