Sprachwechsel, Translator

Alles rund um die Programmierung mit Qt
Antworten
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Sprachwechsel, Translator

Beitrag von AuE »

Hi,

stehe grade vor folgendem Problem. Bei Sprachwechsel muss ich die Strings ja alle übersetzen. Jetzt habe ich zB ein LineEdit in dem "fertig" geschrieben wurde weil etwas beendet wurde. Im Translator file ist aber ja nur finished hinterlegt. Wie re-übersetzt ihr sowas? Also wie komme ich an den "Ursprungstext"???

Greetz
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Warum erstellst du nicht auch eine sprachdatei für deutsch?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Hab ich doch!

Habe alle Sprachfiles drin. Im Fall eines Updates zum beispiel werte ich das ergebnis aus. Dann steht in nen Label zum Beispiel: "Update erfolgreich" -> das resultiert aber aus label->setText(tr("update ok"));

Das bedeutet das "Update erfolgreich" nirgends gefunden wird. Ich muss also irgendwie an "update ok" kommen. Damit ich beim Sporachwechsel (zB auf Spanish) dann wieder beim LanguageChangeEvent ein setText(tr("update ok")) machen kann. retranslateUI fängt das ja nicht ab, da ja für "update erfolgreich keine Übersetzung voliegt!
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Ich komm da nicht ganz mit. In deiner sprachdatei steht folgender string:

"update ok" und die übersetzung dafür ist auf deutsch "Update erfolgreich".

Du übersetzt alle widgets und der text müsste doch vom spanischen ins deutsche anhand des strings "update ok" aus der sprachdatei gefunden werden?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Nein, der Text in dem Label ist doch dann "Update erfolgreich" und nicht mehr "Update Ok"
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Irgendwie reden wir aneinander vorbei?

Code: Alles auswählen

deinLabel->setText(QObject::tr("Update OK"));
Jetzt hast du z.b. drei sprachdateien:

translation_en
translation_es
translation_de

In allen drei wird "Update OK" als key geführt, und jetzt musst du als übersetzung halt auch "Update OK" angeben, oder eben auf spanisch.

Poste doch mal den inhalt (die zeile mit "update ...") aus deinen sprachfiles und die stelle im source wo das verwendet wird.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

genau.... ich glaube auch wir reden aneinander vorbei ;-)

Ich versuchs nocnmal besser zu beschreiben:

0) Sprache steht auf deutsch
1) Der Update Process (QProcess) kehrt mit Exitcode "0" zurück woraufhin ich ein label->setText(tr"Update Ok"); mache was dazu führt das das Label aus den Translator mit "Update erfolgreich" gefüttert wird.
2) Der Benutzer schaltet die Sprache um (sagen wir Spanisch)

Genau hier kommt mein Problem -> im label steht "Update erfolgreich", das kommt aber nirgends vor. Was ich quasi in dem Fall brauche wäre der Sourcetext, der dazu geführt hat das dort "Update erfolgreich" steht. Denn nur dieser ist in allen anderen Translationfiles verfügbar.

Verstehst du worauf ich hinaus möchte? Ich weiß nicht was in dem Label steht (bzw was dort drin steht kann ich nicht re-übersetzen und hilft mir ja so nichts oder?)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich finde diese Art von Übersetzung nun wirklich übertrieben. Das ist ja fast so als müsste man alle Debugausgaben nach dem Sprachwechsel übersetzen...
Wenn es wirklich sein muss musst Du Dir wohl merken was Du in das Label geschrieben hast und es dann per tr() neu reinschreiben.
MfG Christian

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

Beitrag von franzf »

Alternativ (weil Strings viel Speicher brauchen) kannst du dir deinen State mit enums (oder auch const int 's, wie dir beliebt) speichern, und entsprechend den Text setzen.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Wie funktioniert das denn Qt seitig (also mit den Buttons)?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die Buttons werden alle per retranslateUi() neu übersetzt. Siehe Header-File welches aus den ui-Files generiert wird.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Ok.... wir sind da an die Grenzen gestoßen..... Das überserten scheint dann nur für statische Texte zu gehen:

Aus der ui:

Code: Alles auswählen

textLabel_warnings->setText(QApplication::translate("MainWidget", "Warnings:", 0, QApplication::UnicodeUTF8));
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es kommt drauf an wie dynamisch sie sind - siehe QT_TR_NOOP & friends
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

naja.... nicht so dynamisch wie ich sie gerne hätte ;-)

Cool wäre es wenn ich irgendwie so etwas machen könnte

label->setText( tr(label->srcText())); Wobei srcText halt einfach den setText Wert enthält und nicht den, den tr zurückliefert - bin da wohl etwas verwöhnt ;-)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie sollte sowas gehen? Irgendwo muss der Text ja übersetzt werden... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten