[Qt-interest] Maybe a bug using Q_DECLARE_TR_FUNCTIONS

Berry Octave octave at octavious.servegame.org
Fri Mar 26 11:24:54 CET 2010


Le jeudi 25 mars 2010, vous avez écrit
> Berry Octave wrote on Wednesday, March 24, 2010 7:38 PM:
> > Hi the list,
> >
> > Working on a project involving a lot of non-Qt classes, I tried to
> > use Q_DECLARE_TR_FUNCTIONS in one of my base classes.
> >
> > This macro is correctly handled by the compiler (ie : using tr in
> > classes is fine).
> > Same about lupdate which correctly extracts the sentences.
> >
> > Once translation done, I loaded them as shown in the documentation.
> >
> > The fact was that QObject classes (or ones using QObject::tr
> > explicitely) were correctly translated, wherhas the ones using
> > Q_DECLARE_TR_FUNCTIONS'tr were shown in untranslated version.
> 
> Make sure that you set the context right in the Q_DECLARE_TR_FUNCTIONS,
>  that when you re-run lupdate that your *.ts is up to date with the proper
>  context and that the proper generated *.qm file is picked up!
> 
> So this works for me on Win XP, Using Qt 4.6.1, VS 2005 Express:
> 
> // MyI18N.h
> #include <QtCore/QCoreApplication>
> 
> class MyI18N {
>     Q_DECLARE_TR_FUNCTIONS(MyI18N)
> 
> public:
>     MyI18N();
>     virtual ~MyI18N();
> 
>     void sayHello();
> };
> 
> // MyI18N.cpp
> #include <QtCore/QObject>
> 
> #include "MyI18N.h"
> 
> MyI18N::MyI18N() {}
> MyI18N::~MyI18N() {}
> 
> void MyI18N::sayHello() {
>     qDebug(qPrintable(tr("Hello. It is a beautiful day!")));
> }
> 
> // main.cpp
> #include <QtCore/QTranslator>
> #include <QtCore/QCoreApplication>
> 
> #include "MyI18N.h"
> 
> int main(int argc, char **argv) {
>     QCoreApplication app(argc, argv);
>     MyI18N myI18N;
> 
>     QTranslator translator;
>     // make sure the *.qm file is in the same directory as the executable
>     translator.load("MyI18N_DE_de.qm");
>     QCoreApplication::installTranslator(&translator);
> 
>     myI18N.sayHello();
>     return 0;
> }
> 
> // i18n.pro
> TEMPLATE = app
> CONFIG += console
> CONFIG -= gui
> TARGET =
> DEPENDPATH += . src
> INCLUDEPATH += .
> 
> TRANSLATIONS += MyI18n_DE_de.ts
> 
> # Input
> HEADERS += src/MyI18N.h
> SOURCES += src/main.cpp src/MyI18N.cpp
> 
> 
> Note that I did the following observation: testwise I added an additional
> 
> void MyI18N::sayHello() {
>     qDebug(qPrintable(tr("Hello. It is a beautiful day!")));
>     qDebug(qPrintable(QObject::tr("Hello. It is a beautiful day!"))); //
>  NEW }
> 
> WITHOUT re-running lupdate. Simply starting the app again would output:
> 
> Hallo. Es ist ein wundervoller Tag!
> Hello. It is a beautiful day!
> 
> So it is the opposite from what you have observed (the text from
>  QObject::tr() remains untranslated)! So make sure the context, as in
> 
>   Q_DECLARE_TR_FUNCTIONS(MyI18N)
> 
> "MyI18N" really matches the class name and that the *.qm is up-to-date!
> 
> Cheers, Oliver
> 

Actually you are right, I am using cmake in order to manage the build and I 
forgot to regenerate the ts files once the conversion to the 
Q_DECLARE_TR_FUNCTIONS'tr done.

Thanks for the help !

Regards

Berry Octave






More information about the Qt-interest-old mailing list