Übersetzung

Alles rund um die Programmierung mit Qt
Antworten
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Übersetzung

Beitrag 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 :(
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

tr()

Beitrag 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)
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag 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.
Linux, das längste Text-Adventure aller Zeiten
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

ts

Beitrag von softwaremaker »

@RavenIV:
schau dir mal folgendes an:
http://doc.qt.nokia.com/4.5/i18n.html
geht doch viel einfacher mit .ts
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag 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.
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag von darkshine »

Um ein wenig Quellcode zu zeigen.

Code: Alles auswählen

ui.geraetlabel_2->setText(modelleigenschaften.at(0));
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.
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag 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?
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag 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.
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

context

Beitrag 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

Code: Alles auswählen

class MeinThread : public QThread
{
    Q_OBJECT
...
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag von darkshine »

Super !!!!!

Daran hat es gelegen. Vielen Dank !!!
Antworten