Seite 1 von 1
Sprachwechsel, Translator
Verfasst: 19. Februar 2010 12:39
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
Verfasst: 19. Februar 2010 12:52
von Mani99
Warum erstellst du nicht auch eine sprachdatei für deutsch?
Verfasst: 19. Februar 2010 13:00
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!
Verfasst: 19. Februar 2010 13:27
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?
Verfasst: 22. Februar 2010 09:47
von AuE
Nein, der Text in dem Label ist doch dann "Update erfolgreich" und nicht mehr "Update Ok"
Verfasst: 22. Februar 2010 09:54
von Mani99
Irgendwie reden wir aneinander vorbei?
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.
Verfasst: 22. Februar 2010 10:31
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?)
Verfasst: 22. Februar 2010 12:48
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.
Verfasst: 22. Februar 2010 12:57
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.
Verfasst: 22. Februar 2010 14:10
von AuE
Wie funktioniert das denn Qt seitig (also mit den Buttons)?
Verfasst: 22. Februar 2010 14:22
von Christian81
Die Buttons werden alle per retranslateUi() neu übersetzt. Siehe Header-File welches aus den ui-Files generiert wird.
Verfasst: 22. Februar 2010 14:43
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));
Verfasst: 22. Februar 2010 14:55
von Christian81
Es kommt drauf an wie dynamisch sie sind - siehe QT_TR_NOOP & friends
Verfasst: 22. Februar 2010 15:01
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

Verfasst: 22. Februar 2010 15:03
von Christian81
Wie sollte sowas gehen? Irgendwo muss der Text ja übersetzt werden...
