diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 6cf355aeaa9..180b8955906 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -2165,9 +2165,12 @@ void QCoreApplicationPrivate::quit() generated by \QD provide a \c retranslateUi() function that can be called. - The function returns \c true on success and false on failure. + The function returns \c true on success and \c false on failure. \note QCoreApplication does \e not take ownership of \a translationFile. + It is the responsibility of the application to ensure that, if the + function returned \c true, the \a translationFile object is alive until + either \l removeTranslator() is called for it, or the application exits. \sa removeTranslator(), translate(), QTranslator::load(), {Writing Source Code for Translation#Prepare for Dynamic Language Changes}{Prepare for Dynamic Language Changes} @@ -2180,16 +2183,15 @@ bool QCoreApplication::installTranslator(QTranslator *translationFile) if (!QCoreApplicationPrivate::checkInstance("installTranslator")) return false; + QCoreApplicationPrivate *d = self->d_func(); { QWriteLocker locker(&d->translateMutex); d->translators.prepend(translationFile); } -#ifndef QT_NO_TRANSLATION_BUILDER if (translationFile->isEmpty()) - return false; -#endif + return true; #ifndef QT_NO_QOBJECT QEvent ev(QEvent::LanguageChange); diff --git a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp index eedf59a7c99..66dcac85f6b 100644 --- a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp +++ b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp @@ -75,6 +75,7 @@ private slots: void loadLocale_data(); void loadLocale(); void threadLoad(); + void install(); void testLanguageChange(); void plural(); void translate_qm_file_generated_with_msgfmt(); @@ -285,6 +286,30 @@ void tst_QTranslator::threadLoad() QVERIFY(thread.wait(10 * 1000)); } +void tst_QTranslator::install() +{ + { + // normal translation + QTranslator tor; + QVERIFY(tor.load("hellotr_la.qm")); + QCOMPARE(qApp->installTranslator(&tor), true); + QCOMPARE(qApp->removeTranslator(&tor), true); + } + { + // empty translation + QTranslator tor; + QVERIFY(tor.load("hellotr_empty.qm")); + QCOMPARE(qApp->installTranslator(&tor), true); + QCOMPARE(qApp->removeTranslator(&tor), true); + } + { + // nullptr + QCOMPARE(qApp->installTranslator(nullptr), false); + QCOMPARE(qApp->removeTranslator(nullptr), false); + } + +} + void tst_QTranslator::testLanguageChange() { languageChangeEventCounter = 0;