Seite 1 von 1
[gelöst] QFileDialog übersetzen
Verfasst: 20. Mai 2009 08:51
von Tom_Tom
Hallo, ich habe folgendes Problem:
Ich möchte mein QFileDialog übersetzen:
Soweit auch kein Problem, da ich die Beschriftung im Dialog an sich selbst setzen kann.
Jetzt ist es aber so, dass wenn ich den QFileDialog zum speichern einer Datei benutze, die bereits existert, bekomme ich nen neuen Dialog auf, der mich fragt, ob ich die Datei ersetzen möchte. Und genau diesen Dialog, der da aufgeht, den möchte ich übersetzen/Text ändern. Gibt es dort eine Möglichkeit für?
Lieben Gruß!
Verfasst: 20. Mai 2009 09:15
von franzf
Verfasst: 20. Mai 2009 09:27
von Tom_Tom
Habe mir das angeguckt, aber hilft mir nicht weiter.
Ich benutze ja den Translator, aber Der Dialog, der fragt, ob ich die Datei überschreiben möchte, taucht im Linguisten leider nicht auf.
Verfasst: 20. Mai 2009 09:37
von franzf
Du sollst das ja auch nicht selber übersetzen! Die Übersetzungen existieren schon von Qt-Seite.
Code: Alles auswählen
$ ls /usr/share/qt4/translations/ | grep qt_
qt_ar.qm
qt_de.qm
qt_es.qm
qt_fr.qm
qt_help_de.qm
qt_help_pl.qm
qt_help_zh_CN.qm
qt_help_zh_TW.qm
qt_iw.qm
qt_ja_JP.qm
qt_pl.qm
qt_pt.qm
qt_ru.qm
qt_sk.qm
qt_sv.qm
qt_uk.qm
qt_zh_CN.qm
qt_zh_TW.qm
qt_de ist die, welche du einfach laden musst! Dann sollten alle qt-eigenen Strings (und dazu gehört der Löschen-Dialog) übersetzt werden.
// edit:
Hier mal das was ich schnell in der python-Console getestet hab. Funktioniert gar prächtelig!
Code: Alles auswählen
>>> from PyQt4.Qt import *
>>> import sys
>>> app = QApplication(sys.argv)
>>> dlg = QFileDialog()
>>> trans = QTranslator()
>>> trans.load("qt_de", QLibraryInfo.location(QLibraryInfo.TranslationsPath))
True
>>> app.installTranslator(trans)
>>> dlg.show()
Verfasst: 20. Mai 2009 09:54
von Tom_Tom
Ok. danke für die Hilfe. Es funktioniert an sich auch.
Aber jetzt kommt das nächste Problem.
Was mache ich, wenn ich noch eine eigene Übersetzungsdatei einbinden möchte?
Code: Alles auswählen
if(this->translator.load(QApplication::applicationDirPath() + "/language/de")) {
app->installTranslator(&translator);
this->ui.retranslateUi(this);
}
Ich kann ja keine 2 Übersetzungsdateien laden... oder?
Verfasst: 20. Mai 2009 09:58
von Christian81
Verfasst: 20. Mai 2009 10:06
von Tom_Tom
@Christian81 <- deine Antwort ist unbrauchbar, da dort nichts zu meiner Fragestellung drin steht. Außerdem glaube ich, dass jeder Forum-User erst einmal die Doku liest und sich hier nur meldet, wenn er dort nicht fündig wurde und daher Hilfe benötigt.
Verfasst: 20. Mai 2009 10:12
von franzf
void QCoreApplication::installTranslator ( QTranslator * translationFile ) [static]
Adds the translation file translationFile to the list of translation files to be used for translations.
Multiple translation files can be installed. Translations are searched for in the last installed translation file on, back to the first installed translation file. The search stops as soon as a matching translation is found.
Installing or removing a QTranslator, or changing an installed QTranslator generates a LanguageChange event for the QCoreApplication instance. A QApplication instance will propagate the event to all toplevel windows, where a reimplementation of changeEvent can re-translate the user interface by passing user-visible strings via the tr() function to the respective property setters. User-interface classes generated by Qt Designer provide a retranslateUi() function that can be called.
Verfasst: 20. Mai 2009 10:15
von Christian81
Tom_Tom hat geschrieben:@Christian81 <- deine Antwort ist unbrauchbar, da dort nichts zu meiner Fragestellung drin steht. Außerdem glaube ich, dass jeder Forum-User erst einmal die Doku liest und sich hier nur meldet, wenn er dort nicht fündig wurde und daher Hilfe benötigt.
Wie franzf gezeigt hat ist dies wohl nicht immer der Fall
Wenn ich schon einen Link auf die Doku poste hat dies meistens einen Sinn... das es in diesem Fall nicht genau auf die Stelle gezeigt hat wo die Info stand... naja - aus dem Kindergarten sind wir ja raus.
Verfasst: 20. Mai 2009 10:27
von Tom_Tom
Ich habe mir die Doku schon mehrfach durchgelesen. Das ganze bringt mich aber alles nicht weiter.
Ich schaffe es eben nicht 2 *.qm-Dateien gleichzeitig zu laden.
Verfasst: 20. Mai 2009 10:41
von franzf
Dann hilft es nicht, musst dein Programm mal auf der Console starten, dann sollten Meldungen kommen, was alles falsch läuft.
Insbesondere lass dir ausgeben (per qDebug()) ob das Laden der Übersetzung erfolgreich war.
Des weiteren kannst du uns mal mehr Infos posten, wann die Übersetzungen geladen werden. Incl. betreffendem Code.
Verfasst: 20. Mai 2009 10:55
von Tom_Tom
Folgendermaßen sieht der Code aus.
Code: Alles auswählen
void Hauptfenster::on_actionLanguageGerman_triggered() {
if(this->translator.load(QApplication::applicationDirPath() + "/language/de")) {
QTranslator x; //habe ich zum testen hinzugefügt
x.load(QApplication::applicationDirPath() + "/language/qt_de");
app->installTranslator(&translator);
app->installTranslator(&x);
this->ui.retranslateUi(this);
}
else {
QMessageBox * messageBox = new QMessageBox(QMessageBox::Critical,this->windowTitle(), "Language-File not found. Programm will be closed");
messageBox->exec();
}
}
Und er lädt mir ja auch meine Sprachdateien. Das funktioniert ja auch alles.
Allerdings kann ich nur eine Übersetzung durchführen. Also entweder ich verwende die von Qt, dass ich meine Dialog übersetzt habe
oder aber ich verwende meine eigene, die mir alles Andere übersetzt.
Wäre cool, wenn du da irgendwie eine Lösung wüsstest.
Verfasst: 20. Mai 2009 11:12
von Christian81
Und wie lange lebt "QTranslator x" ?
Verfasst: 20. Mai 2009 11:12
von franzf
Hast du denn den qt_de in dein application-dir kopiert?!?
Und ganz entscheidend: Der QTranslator ist futsch, nach deiner Methode, denn er ist nicht dynamisch erzeugt!!!!!!!!
Also den QTranslator in der Methode mit new anlegen dann sollte es passen.
Verfasst: 20. Mai 2009 11:45
von Tom_Tom
Hey danke an euch beiden.
Jetzt funktioniert es. =)