diff options
author | Kai Koehne <kai.koehne@qt.io> | 2018-07-05 17:12:18 +0200 |
---|---|---|
committer | Kai Koehne <kai.koehne@qt.io> | 2018-07-12 08:54:33 +0000 |
commit | 9146432dc66d41f22548bbb425b61458d241d28e (patch) | |
tree | ea864d9e75532ae56906a0fa874d1ccc56519a7e /src/corelib/kernel | |
parent | 4e0404a6d2952ccb2c70d8dac95cd1b978779e4f (diff) |
Allow loading of empty translation files
Do not return false for loading an empty .qm file - that is, a valid
file without any translations. We're already shipping empty .qm
files for English translations of Qt since a while, mainly as a
stop for the QTranslator::load(const QLocale &, ...) logic.
Note that QCoreApplication::installTranslator() will still return
false for an empty translation file - which is ok, because it
arguably does not make much sense to install it.
[ChangeLog][QtCore][QTranslator] It is now possible to load qm files
without any translations. This is particularly useful for the
language the untranslated strings are written in; logic to
load translations can now handle the source language like all
other languages.
Task-number: QTBUG-31031
Change-Id: Ibcb84aa755538cb2fa21b14f8635295a58440bbb
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qtranslator.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index 23985eb2e9..744bbfbff5 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -533,7 +533,7 @@ bool QTranslatorPrivate::do_load(const QString &realname, const QString &directo // memory, so no need to use QFile to copy it again. Q_ASSERT(!d->resource); d->resource = new QResource(realname); - if (resource->isValid() && !resource->isCompressed() && resource->size() > MagicLength + if (resource->isValid() && !resource->isCompressed() && resource->size() >= MagicLength && !memcmp(resource->data(), magic, MagicLength)) { d->unmapLength = resource->size(); d->unmapPointer = reinterpret_cast<char *>(const_cast<uchar *>(resource->data())); @@ -553,7 +553,7 @@ bool QTranslatorPrivate::do_load(const QString &realname, const QString &directo return false; qint64 fileSize = file.size(); - if (fileSize <= MagicLength || quint32(-1) <= fileSize) + if (fileSize < MagicLength || quint32(-1) <= fileSize) return false; { @@ -858,8 +858,6 @@ bool QTranslatorPrivate::do_load(const uchar *data, int len, const QString &dire data += blockLen; } - if (dependencies.isEmpty() && (!offsetArray || !messageArray)) - ok = false; if (ok && !isValidNumerusRules(numerusRulesArray, numerusRulesLength)) ok = false; if (ok) { @@ -1138,8 +1136,8 @@ QString QTranslator::translate(const char *context, const char *sourceText, cons bool QTranslator::isEmpty() const { Q_D(const QTranslator); - return !d->unmapPointer && !d->unmapLength && !d->messageArray && - !d->offsetArray && !d->contextArray && d->subTranslators.isEmpty(); + return !d->messageArray && !d->offsetArray && !d->contextArray + && d->subTranslators.isEmpty(); } QT_END_NAMESPACE |