Mein kleines HowTo für QT Linguist

Alles rund um die Programmierung mit Qt
Antworten
topek
Beiträge: 17
Registriert: 8. September 2006 11:00

Mein kleines HowTo für QT Linguist

Beitrag von topek »

Hallo,
da ich selber Probleme mit Qt Linguist habe. Hier ein kleines HowTo wie mit Qt Linguist die Dateien "übersetzen"
Die GUI, die mit Qt Designer erstellt wurde ist auf folgende Art und Weise „übersetzbar“.

1. Wir haben mit Qt Designer eine Datei erstellt. z.B. gui.ui
2. Nach dem qmake –project wird eine Project-Datei gui.pro erstellt.
3. In der gui.pro Datei muss manuell folgendes eingefügt werden:
TRANSLATIONS = *.ts (wobei * beliebige Dateiname sein darf, z.B.: gui_de.ts)
4. Dann führen wir einen Befehl in Konsole aus: lupdate.exe gui.pro
lupdate ist ein Tool was unsere gui.ui Datei durchgeht und nach übersetzbaren Strings sucht.
Es wird automatisch unsere *.ts Datei erstellt: z.B: gui_de.ts
5. Die *.ts Datei lässt sich in Qt Linguist aufmachen und dann übersetzen.
Mann kann entweder jede Übersetzung manuell eingeben oder ein Wörterbuch benutzen.
6. Wörterbücher für einige Sprachen sind bereits in Qt Paket drin. Zu finden unter: C:\Qt\4.1.4\tools\linguist\phrasebooks
Um ein Wörterbuch zu laden geht man in Qt Linguist so: Phrases > Open Phrase Book oder Strg + h
7. Dann speichert man die ganze Übersetzung und geht: File > Release… Es wird eine *.qm Datei erstellt, z.B. : gui_de.qm
Die *.qm Datei ist dann ein fertiges Binary was man im Programm benutzen kann.
8. In main.cpp muss folgendes eingefügt werden:

QTranslator translator;
translator.load("editor_de");
app.installTranslator(&translator);

9. Die gui_de.qm muss im selben Verzeichniss drin sein wo sich gui.exe befindet.


10. Jetzt Code:

10.1 main.cpp:

Code: Alles auswählen

#include "ui_gui.h"
#include <QDialog>
#include <QtGui/QtGui>
#include <QMainWindow>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QTranslator translator;
translator.load("gui_de");
app.installTranslator(&translator);

app.setQuitOnLastWindowClosed(true);
QMainWindow *mainWindow = new QMainWindow;
Ui::frmTcGeneralInfo ui;
ui.setupUi(mainWindow);
mainWindow->show();
mainWindow->showMaximized();
return app.exec();
}
Man muss drauf achten dass richtige Objekt-Name für gui.ui Datein im main.cpp Code verwendet wird. In meinem Fall ist das: frmTcGeneralInfo und es muss vom Typ MainWindow sein.

10.2 gui.pro

Code: Alles auswählen

TEMPLATE = app
FORMS += gui.ui
TRANSLATIONS = gui_de.ts 

CONFIG *= debug_and_release debug_and_release_target
QT *=
HEADERS =
SOURCES = main.cpp
Ich hoffe, dass das jemand irgendwann brauchen wird :)


Schöne Grüße
topek
Sym
Beiträge: 139
Registriert: 15. Mai 2006 15:38
Wohnort: Bremen

Beitrag von Sym »

Cool, das werde ich zu Hause mal ausprobieren. Ich hatte nämlich gerade vor, meine Applikation ins Deutsch zu übersetzen.

Ich berichte dann, ob es bei mir klappt.
-Marco-
Beiträge: 47
Registriert: 4. April 2006 16:35

Beitrag von -Marco- »

mmh, fehlt doch noch was, das Wechseln der Sprache während des Betriebs und, was ich interessant finden würde, das Übersetzen in Bibliotheken ohne jeden einzelnen String einzeln anzufassen. ;)
Gruß Marco
Undefined
Beiträge: 34
Registriert: 19. Oktober 2006 17:12

Beitrag von Undefined »

Das macht qt von alleine siehe lupdate
/usr/bin/lupdate -verbose $PWD/src -ts locale/myapp_de.ts
Das hier - Automatische Auswahl der Sprache - Funktioniert nur mit Unix und Mac, win32 kennt die Umgebungs Variable LANG nicht. Dafür ist die Settings dann vorhanden.

Code: Alles auswählen

#include <iostream>
#include <stdlib.h>

#include <QtCore>
#include <QApplication>
#include <QMessageBox>

#if defined Q_OS_UNIX
#include <QX11Info>
#endif

#include "Version.h"
#include "myapp.h"

int main(int argc, char *argv[])
{
        Q_INIT_RESOURCE(myapp);
        QT_REQUIRE_VERSION( argc, argv, REQUIRED_QT_VERSION )

        QApplication app( argc, argv, true );

        QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "UTF-8" ) );
        QTextCodec::setCodecForLocale( QTextCodec::codecForName("UTF-8") );
        QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8") );

        // set application main directory
        QString  AppsPath( QCoreApplication::applicationDirPath() );
        AppsPath.append( QDir::separator() );
        AppsPath.append( "locale" );

        // set Translation file
        QSettings *conf = new QSettings( QSettings::IniFormat, QSettings::UserScope, "myapp" );
        QString setLang( "myapp_" );
        setLang.append( conf->value( "APPLICATION/language", getenv( "LANG" ) ).toString() );
        setLang = setLang.toLocal8Bit();

        // init locale
        QTranslator translator(0);
        translator.load( setLang, AppsPath, "_" );
        app.installTranslator(&translator);

        // notification for help users to rename myapp_*.qm
        qDebug() << "Search for Locale: " << setLang << ".qm";

        myapp mainWin;
        mainWin.show();
        return app.exec();
}
QtBerserker
Beiträge: 71
Registriert: 15. Mai 2006 09:07

Beitrag von QtBerserker »

lt. Doku kann bei lupdate auch ein Project File angegeben werden. Kann es sein, das lupdate jedoch nicht die mit included foo.pri durchsucht?? SOndern stur im *.pro die TRANSLATIONS Angabe erwartet?

Grüße
Olaf
bassjupp2oo8
Beiträge: 47
Registriert: 17. Juli 2008 09:45

Beitrag von bassjupp2oo8 »

Hat es jemand schon mal hinbekommen, die Sprache während der Laufzeit zu ändern?
Ich bin grad am Rumprobieren.

Und für alle, die den Qt Creator benutzen und sich fragen, wie sie lupdate xxx.pro und lrelease xxx.pro ausführen sollen:
Unter Start -> alle Programme -> Qt... (wo auch der Creator, der Linguist,... sind) dort gibt es auch Qt Command Prompt. Dieses anklicken!
in den Projektordner wechseln und dann die oben genannten Kommandos eintippen!
Antworten