QTranslator wechseln?

Alles rund um die Programmierung mit Qt
Antworten
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

QTranslator wechseln?

Beitrag von Whitefurrows »

Hi,

wie kann ich Dynamisch den QTranslator wechseln? So habe ich es schon versucht, leider werden die Texte in tr() und auch nicht die in den ui-Files übersetzt.

Code: Alles auswählen

static QTranslator* translator=0;

if (translator)
{
	qApp->removeTranslator(translator);
	delete translator;
}

translator = new QTranslator(0);

if (language =="en")
{
	translator->load(":/translation/language + ".qm");
	qApp->installTranslator( translator );
}
Vaaco
Beiträge: 21
Registriert: 12. Oktober 2006 11:51

Beitrag von Vaaco »

Hi,
du musst natürlich noch die retranslateUi -Funktion aufrufen, bzw. alle Strings neu setzen. D.h. alle strings die zum Zeitpunkt des Translatorwechsels existieren, Strings in Dialogboxen, etc. die noch nicht angezeigt werden sollte automatisch übersetzt werden.
Die retranslateUi - Funktion befindet sich in der generierten ui_xyz.h Datei.

Code: Alles auswählen

static QTranslator* translator=0; 

if (translator) 
{ 
   qApp->removeTranslator(translator); 
   delete translator; 
} 

translator = new QTranslator(0); 

if (language =="en") 
{ 
   translator->load(":/translation/language + ".qm"); 
   qApp->installTranslator( translator ); 
retranslateUi();
}
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Hi,

ok das mit der retranslateUi() ist mir jetzt klar und funktioniert auch. Was kann ich aber mit einer funktion machen, die so aussieht:

Code: Alles auswählen

void AnyWidget::anyFunction()
{
   QString html; 
   html.append("<table border=\"0\" width=\"100%\">");
   html.append("<tr><td>" + tr("Text zum Übersetzen 1") + "</td>");
   html.append("<td>" + tr("Text zum Übersetzen 2") + "</td></tr>");
   html.append("</table>"); 
   myTextEdit->document()->setHtml(html);
}
Wie kann ich da den Text übersetzen, das funktioniert mir retranslateUi() nicht!?

Gruß

Whitefurrows
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Texte die Du schon geschrieben hast und die nicht in retranslateUi stehen, musst Du halt nochmal schreiben. Texte die erst noch geschrieben werden, werden passend übersetzt.

Hmm, liest sich jetzt blöd, hoffe es ist klar was gemeint ist.
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Hallo,

danke für den Tipp, aber leider verstehe ich es nicht. Ich habe ein Beispiel angefügt, vielleicht kannst du mir zeigen wie es funktioniert.

Gruß

Whitefurrows
Dateianhänge
example.zip
(4.96 KiB) 151-mal heruntergeladen
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Dazu fehlt mir etwas die Zeit. Was funktioniert denn nicht? Werden die anderen Texte übersetzt und nur der im HTML-Kontext nicht?
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Hallo,

ja mit den Texten der Controls (QLabel, QPushButton, etc.) bzw. Widgets funktioniert es wunderbar. Die Texte kann ich dann im changeEvent mit retranslateUi oder einer eigenen Funktion übersetzen. Mir ist aber nicht klar, wie das mit einem Text funktionieren soll, der z.B. in einem QTextEdit angezeigt wird. Ich habe zum Beispiel eine Funktion die mir mehrere Werte in einem QTextEdit anzeigt:

Länge a = 5
Länge b = 5
Fläche = 25

Die Werte a und b sind Eingaben, die Fläche wird berechnet und alles im QTextEdit angezeigt. Wenn der Benutzer jetzt die Sprache wechselt, wird zwar die Sprache der Oberfläche geändert, aber der Text im QTextEdit bleibt unverändert.

Kannst du mir einen Tipp geben wie es möglich ist, auch den Text im QTextEdit während der Laufzeit zu übersetzen?

Gruß

Whitefurrows
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du musst schon QTextedit neu füllen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Oh, der Tipp war gut, so funktioniert es, aber leider kann ich das nicht so einfach machen. Der angezeigte Text beruht auf einer Abfrage, Berechnung usw. je nach Widget. Diese Aktionen kann ich nicht bei einem Sprachwechsel erneut ausführen, welche Möglichkeit habe ich dennoch die Sprache dynamisch zu wechseln?

Gruß

Whitefurrows
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Tja, dann mußt du halt den Inhalt des Textedits in einer Sprachunabhängigen Struktur speichern und beim Sprachenwechsel neu ausgeben.

Andererseits: Hast du des öfteren vor, die Sprache zu wechseln?
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Hallo,

wie meinst du das in einer Sprachunabhängigen Struktur speichern und beim Sprachenwechsel neu ausgeben, wie soll das funktionieren?

Kann ich dir leider nicht sagen wie oft die Sprache gewechselt werden soll, aber es ist eine Anforderung an das Programm die erfüllt werden muss.

Gruß

Whitefurrows
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wenn du unbedingt ein QTextEdit verwenden willst, kannst du ja jedem Textsegment eine eigene ID zuweisen. Beim neuübersetzen parst du halt das Document übersetzt anhand der ID, die Zahlen bleiben ja (hoffentlich) gleich...
Antworten