[gelöst] QFileDialog übersetzen

Alles rund um die Programmierung mit Qt
Antworten
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

[gelöst] QFileDialog übersetzen

Beitrag 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ß!
Zuletzt geändert von Tom_Tom am 20. Mai 2009 11:48, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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()
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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 :roll:

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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wie lange lebt "QTranslator x" ?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Zuletzt geändert von franzf am 20. Mai 2009 12:03, insgesamt 1-mal geändert.
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag von Tom_Tom »

Hey danke an euch beiden.

Jetzt funktioniert es. =)
Antworten