Seite 1 von 1
Übersetzung
Verfasst: 16. Dezember 2010 15:06
von darkshine
Hallo,
ich bin begeistert, wie einfach mit Qt eine andere Sprachversion erstellt werden kann. Bis jetzt waren es "nur" Buttons, Menüs usw.
Jetzt habe ich aber ein Problem.
Ich habe eine Klasse in der angeschlossene Geräte erkannt werden.
z.B Gerät "Katze" und "Hund"
Diese würde ich gerne übersetzen, in einen String schreiben und einer anderen Klasse nutzen.
In der anderen Klasse soll in diesem String dann nicht "Katze" sondern "Cat" stehen.
Dies funktioniert bei mir (bis jetzt) leider nicht

tr()
Verfasst: 16. Dezember 2010 16:13
von softwaremaker
z.B. QString meintext = QString("Katze");
dann umklammere den Text mit tr( )
-> QString meintext = QString(tr("Katze"));
mit lupdate wird die ts-Datei erstellt, die im Linguist übersetzt werden kann:
lupdate -noobsolete ..\Source\MeinProg.pro -ts MeinProg.ts
(benötigt pro-Datei um Qellcode-Dateien zu ermitteln)
Verfasst: 16. Dezember 2010 16:15
von RavenIV
Das wird mit Bordmitteln nicht so leicht sein.
der Qt-Translator kann nur statische Texte (Buttons, Menu, usw.) übersetzen.
Wir haben das mit einer Lookuptabelle (map) gemacht.
Links steht der zu Übersetzende Text, rechts steht die Anweisung zum Übersetzen.
z.B. (("dry", translate("Code", "dry"), (...), ...)
Dann kann aus der Tabelle herausholen, wie der übersetzte Text heisst.
Nachteil ist halt, dass Du im Voraus wissen musst, was übersetzt werden soll.
Der Rest ist die Denkaufgabe für Dich.
ts
Verfasst: 16. Dezember 2010 16:59
von softwaremaker
@RavenIV:
schau dir mal folgendes an:
http://doc.qt.nokia.com/4.5/i18n.html
geht doch viel einfacher mit .ts
Verfasst: 16. Dezember 2010 17:07
von darkshine
"Qt-Translator kann nur statische Texte (Buttons, Menu, usw.) übersetzen."
Genau hier liegt,glaub ich, auch mein Problem.
Den Link von softwaremaker werde ich mir gleich mal anschauen. Es sind im Augenblick "nur" 5 Geräte. Aber für die Übersicht wäre es schon wenn ich alles in einen String schreiben könnte um Diesen danach beliebig zu benutzen.
Verfasst: 16. Dezember 2010 17:23
von darkshine
Um ein wenig Quellcode zu zeigen.
So war es ursprünglich. Bei "modelleigenschaften" handelt es sich um eine QStringList die man sich von dem Objekt holen kann.
QStringlist modelleigenschaften = hund->getmodelleigenschaften();
An der Stelle 0 steht der Name. Ich schaffe es nun nicht "dog" anzeigen zu lassen.
Nur über diesen Umweg
Code: Alles auswählen
if(modelleigenschaften.at(0)=="hund")
ui.geraetlabel_2->setText(tr("hund"));
Jetzt kann ich hund normal übersetzen.
Wie gesagt, bei 5 Geräten noch machbar, aber es könnten auch schnell mehr werden.
Verfasst: 17. Dezember 2010 08:48
von darkshine
Ich konnte das Problem jetzt eingrenzen.
In meiner MainWindow-Klasse:
QString uebersetzung = (tr("Hund"));
qDebug() << uebersetzung;
------------->Ausgabe: dog
In meine Geraeteerkennungsklasse (von QThread abgeleitet):
QString uebersetzung = (tr("Hund"));
qDebug() << uebersetzung;
------------->Ausgabe: Hund
Wo mache ich da einen Fehler?
Verfasst: 17. Dezember 2010 10:23
von darkshine
Ich habe das Problem gelöst. Allerdings bleibt mir der Grund schleierhaft.
Also vorher:
In meine Geraeteerkennungsklasse (von QThread abgeleitet):
QString uebersetzung = (tr("Hund"));
qDebug() << uebersetzung;
------------->Ausgabe: Hund
Jetzt:
In meine Geraeteerkennungsklasse (von QThread abgeleitet):
QString uebersetzung = (QObject::tr("Hund"));
qDebug() << uebersetzung;
------------->Ausgabe: dog
Ich habe also explizit den Klassennamen QObject angegeben. Dabei ist QThread doch selber von QObject abgeleitet. Aber so funktioniert ist.
Allerdings kann QLinguist den Quellcode nicht mehr lesen, aber dies stört mich nicht weiter.
Aber ich verstehe den Grund für QObject:: einfach nicht.
context
Verfasst: 17. Dezember 2010 10:48
von softwaremaker
Das hat wohl was mit dem Context zu tun
http://doc.qt.nokia.com/4.5/qtranslator.html (Looking up Translations)
Vielleicht gehts wenn du im Thread Q_OBJECT definierst
Verfasst: 17. Dezember 2010 11:57
von darkshine
Super !!!!!
Daran hat es gelegen. Vielen Dank !!!