[gelöst] Sprache ändern?

Verschiedenes zu Qt
Antworten
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

[gelöst] Sprache ändern?

Beitrag von Marco812 »

Hi,

wie kann ich ein Programm mit mehreren Sprachen erstellen?

Ich weis zwar, das ich die neue Sprache mit QTranslator laden kann und eine Übersetzungsdatei mit Qt Linguist erstellen kann, aber wie das genau funktioniert, weiß ich nicht.

Da ich nicht besonders gut Englisch kann ist die Dokumentation schwer für mich zu verstehen.

Könnte mir mal das jemand mal an einem kleinen Beispiel erklären?

Zum Beispiel ich erstelle im Designer eine Form mit Label (z.B. Hallo Welt), schreibe meine main dazu und erstelle das Programm.

Wie kann ich jetzt eine Übersetzungsdatei erstellen, damit im Label dann Hello World steht?

Gruß

Marco812
Zuletzt geändert von Marco812 am 8. Dezember 2005 23:10, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Sprache ändern?

Beitrag von macman »

Lerne englisch würde ich mal sagen. Ansonsten gibt es auch deutsche Bücher über Qt, wobei ich nicht viel über deren Qualität sagen kann. Da Du mehr der Learning-by-doing-Typ zu sein scheinst, hol dir die Qt 3.3 Sourcen, da ist ein passendes Beispiel dabei (Stichwort i18n).
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

erst mal danke für den Tipp. Die Anleitung (i18n) hat mir etwas weiter geholfen.

Ich habe jetzt mit lupdate Form1.cpp -ts MyApp_en.ts eine Datei für Qt Linguist erstellt. Nun habe ich mit Qt Linguist eine Übersetzung eingefügt und mit lrelease MyApp_en.ts meine Übersetzungsdatei erstellt. Diese habe ich dann in MyApp_en umbenannt und wollte sie jetzt so laden:

QTranslator myapp( 0 );
result = myapp.load "MyApp_"+lang, "./translations"); //lang="en"
app.installTranslator( &myapp ); // QApplication app( argc, argv );

leider kann ich keine Änderung erkennen, obwohl result=1 ist.

Könnte mir jemand sagen wo der Fehler liegt?

Dann hätte ich noch eine Frage kann mir jemand sagen, ob es möglich ist mit lupdate aus allen *.cpp Dateien im Verzeichnis eine *.ts zu erstellen? Es kann ja nicht sein das ich für jeden Dialog eine eigene Datei erzeugen muss!

Gruß

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

Beitrag von macman »

Marco812 hat geschrieben:Könnte mir jemand sagen wo der Fehler liegt?
Mit den bisherigen Informationen? Nein.
Marco812 hat geschrieben:Dann hätte ich noch eine Frage kann mir jemand sagen, ob es möglich ist mit lupdate aus allen *.cpp Dateien im Verzeichnis eine *.ts zu erstellen?
Natürlich. Starte doch mal lupdate ohne Parameter, dann bekommst Du die Anwendung erklärt. Das sollte auch ohne Engischkenntnisse verständlich sein.
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

ich habe schon lupdate ohne Parameter gestartet, aber ich verstehe es nicht. Also sag es mir doch einfach, wenn du es weist.

Was musst du denn wissen, um mir weiterhelfen zu können?

Gruß

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

Beitrag von macman »

Marco812 hat geschrieben:ich habe schon lupdate ohne Parameter gestartet, aber ich verstehe es nicht. Also sag es mir doch einfach, wenn du es weist.
Es bringt nichts wenn man dir alles vorkaut, Du solltest schon verstehen was Du tust. Damit lupdate alle Sourcen nimmt, gib ihm dein Projektfile als Parameter.
lupdate myproject.pro
Marco812 hat geschrieben:Was musst du denn wissen, um mir weiterhelfen zu können?
Keine Ahnung. Ich habe auch mit dem i18n-Beispiel angefangen und bin damit klar gekommen. Um mehr zu deinem Problem sagen zu können, braucht es mehr Code. Zeig doch mal die main.cpp, da erledigt man ja meist das einbinden des Translators.
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

lupdate *.pro nützt mir nichts, da ich nur das Visual Studio Project habe und keine *.pro. Deshalb wollte ich ja aus allen *.cpp eine *.ts erstellen. Das andere war nur ein Beispiel!

Kann ich aus dem Visual Studio Project eine *.pro erstellen?

Gruß

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

Beitrag von macman »

Marco812 hat geschrieben:Kann ich aus dem Visual Studio Project eine *.pro erstellen?
Mit der Kommerzedition von Qt, ja. Ansonsten kannst Du dir ganz einfach von qmake eine entsprechende *.pro erstellen lassen. Wie das geht ist wirklich sehr gut dokumentiert, aber in englisch. Die ganze Doku ist nunmal in englisch und wenn Du wirklich mit Qt programmieren willst, kommst Du um die Sprache nicht herum. Lerne englisch und alles wird einfach :-)
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

wärst du so nett und würdest mir noch etwas weiterhelfen, bis mein Englisch besser ist ;-)

Also eine *.pro zu erstellen (qmake) habe ich hinbekommen und daraus ein VC Project zu erstellen auch. Wie funktioniert es denn mit der Kommerziellen Version, oder wo finde ich das in der Doku?

Leider bekomme ich nach lupdate MyApp.pro folgende Fehlermeldung:

MyApp.cpp:54: Class 'MyApp' lacks Q_OBJECT macro
MyApp2.cpp:21: Class 'MyApp2' lacks Q_OBJECT macro
lupdate warning: Met no 'TRANSLATIONS' entry in project file 'MyApp.pro'

Mit lupdate MyApp.pro -ts MyApp_en.ts erhalte ich ohne Fehler zwar eine *.pro aber im Qt Linguist bekomme ich keine einzige Übersetzung angezeigt, obwohl die in den *.cpp angegeben sind!

Meine *.pro sieht so aus:

######################################################################
# Automatically generated by qmake (1.07a) Do 8. Dez 09:26:01 2005
######################################################################

TEMPLATE = app
INCLUDEPATH += .

# Input
HEADERS += MyApp.h \
MyApp2.h \


SOURCES += MyApp.cpp\
MyApp2.cpp\
main.cpp \


Wo liegt der Fehler kannst du mir weiterhelfen?


Gruß

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

Beitrag von macman »

Marco812 hat geschrieben:Wie funktioniert es denn mit der Kommerziellen Version,
Bei VS6 gibt es ein Plugin, das dir eine zusätzliche Symbolleiste zur Verfügung stellt. Darin gibt es ein Icon zum sichern einer *.pro Datei. Bei neueren VS ist das Ganze über einen zusätzlichen Menüpunkt realisiert und bietet noch mehr Möglichkeiten.
Marco812 hat geschrieben:Leider bekomme ich nach lupdate MyApp.pro folgende Fehlermeldung:
Das Q_OBJECT Makro hat eigentlich nichts in cpp-Dateien zu suchen, da das in die Headerdateieen gehört. Man kann natürlich die Klassenbeschreibung auch in die cpp packen, dann wäre es wieder ok. Besser ist aber das getrennt zu halten.
Marco812 hat geschrieben:lupdate warning: Met no 'TRANSLATIONS' entry in project file 'MyApp.pro'
Du mußt in der *.pro angeben, welche Translations angelegt werden sollen. Es geht nur eins, entweder du übergibst deine Projektdatei oder du übergibst alles einzeln.
Marco812 hat geschrieben:Mit lupdate MyApp.pro -ts MyApp_en.ts erhalte ich ohne Fehler zwar eine *.pro aber im Qt Linguist bekomme ich keine einzige Übersetzung angezeigt, obwohl die in den *.cpp angegeben sind!
lupdate erstellt keine Projektdatei, sondern nutzt sie nur. Ich erklär mal kurz die Funktionsweise:
Du hast eine Projektdatei, welche alle Dateien deines Projekts enthält, sowie die Sprachen, in die es übersetzt werden soll.
lupdate parst diese Datei, holt sich alle zu übersetzenden Texte aus den Sourcen und schreibt sie in eine oder mehrere *.ts.
Mit QLinguist kannst du diese *.ts Dateien bearbeiten und wieder sichern.
lrelease schließlich übergibst du wieder deine Projektdatei und das erstellt dann aus den *.ts Dateien *.qm Dateien. Diese enthalten dann die übersetzten Texte.

Deine *.pro sollte dann so aussehen:

Code: Alles auswählen

TEMPLATE = app
INCLUDEPATH += .

# Input
HEADERS += MyApp.h \
MyApp2.h \
…

SOURCES += MyApp.cpp\
MyApp2.cpp\           
main.cpp \
…

TRANSLATIONS += MyApp_enu.ts\
MyApp_fra.ts\
MyApp_ita.ts\
…
Ich hoffe das hat es jetzt etwas erklärt.
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

vielen Dank für die Tolle Hilfe, es funktioniert jetzt alles!

Ich verspreche, ich werde jetzt auch noch ein bisschen Englisch lernen ;-)

Gruß

Marco812
Antworten