diff options
Diffstat (limited to 'qmake/generators/symbian/symbiancommon.cpp')
-rw-r--r-- | qmake/generators/symbian/symbiancommon.cpp | 63 |
1 files changed, 28 insertions, 35 deletions
diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index c9ffa11..2c4373a 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -953,12 +953,15 @@ bool SymbianCommonGenerator::parseTsContent(const QString &tsFilename, SymbianLo static QString messageElement = QLatin1String("message"); static QString sourceElement = QLatin1String("source"); static QString translationElement = QLatin1String("translation"); - static QString shortCaptionId = QLatin1String("Application short caption"); - static QString longCaptionId = QLatin1String("Application long caption"); - static QString pkgDisplayNameId = QLatin1String("Package name"); - static QString installerPkgDisplayNameId = QLatin1String("Smart installer package name"); - static QString languageAttribute = QLatin1String("language"); - static QChar underscoreChar = QLatin1Char('_'); + static QString idAttribute = QLatin1String("id"); + static QString shortCaptionId = QLatin1String("qtn_short_caption_"); + static QString longCaptionId = QLatin1String("qtn_long_caption_"); + static QString pkgDisplayNameId = QLatin1String("qtn_package_name_"); + static QString installerPkgDisplayNameId = QLatin1String("qtn_smart_installer_package_name_"); + static QString shortCaptionSource = QLatin1String("Application short caption"); + static QString longCaptionSource = QLatin1String("Application long caption"); + static QString pkgDisplayNameSource = QLatin1String("Package name"); + static QString installerPkgDisplayNameSource = QLatin1String("Smart installer package name"); enum CurrentContext { ContextUnknown, @@ -991,6 +994,7 @@ bool SymbianCommonGenerator::parseTsContent(const QString &tsFilename, SymbianLo if (xml.name() == messageElement) { QString source; QString translation; + QString id = xml.attributes().value(idAttribute).toString(); while (xml.readNextStartElement()) { if (xml.name() == sourceElement) { source = xml.readElementText(); @@ -1005,35 +1009,24 @@ bool SymbianCommonGenerator::parseTsContent(const QString &tsFilename, SymbianLo xml.skipCurrentElement(); } } - - if (source == shortCaptionId) { - if (loc->shortCaption.isEmpty()) { - loc->shortCaption = translation; - } else { - fprintf(stderr, "Warning: Duplicate application short caption defined in (%s).\n", - qPrintable(tsFilename)); - } - } else if (source == longCaptionId) { - if (loc->longCaption.isEmpty()) { - loc->longCaption = translation; - } else { - fprintf(stderr, "Warning: Duplicate application long caption defined in (%s).\n", - qPrintable(tsFilename)); - } - } else if (source == pkgDisplayNameId) { - if (loc->pkgDisplayName.isEmpty()) { - loc->pkgDisplayName = translation; - } else { - fprintf(stderr, "Warning: Duplicate package display name defined in (%s).\n", - qPrintable(tsFilename)); - } - } else if (source == installerPkgDisplayNameId) { - if (loc->installerPkgDisplayName.isEmpty()) { - loc->installerPkgDisplayName = translation; - } else { - fprintf(stderr, "Warning: Duplicate smart installer package display name defined in (%s).\n", - qPrintable(tsFilename)); - } + // Interesting translations can be identified either by id attribute + // of the message or by the source text. + // Allow translations with correct id to override translations + // detected by source text, as the source text can accidentally + // be the same in another string if there are non-interesting + // translations added to same context. + if (id.startsWith(shortCaptionId) + || (loc->shortCaption.isEmpty() && source == shortCaptionSource)) { + loc->shortCaption = translation; + } else if (id.startsWith(longCaptionId) + || (loc->longCaption.isEmpty() && source == longCaptionSource)) { + loc->longCaption = translation; + } else if (id.startsWith(pkgDisplayNameId) + || (loc->pkgDisplayName.isEmpty() && source == pkgDisplayNameSource)) { + loc->pkgDisplayName = translation; + } else if (id.startsWith(installerPkgDisplayNameId) + || (loc->installerPkgDisplayName.isEmpty() && source == installerPkgDisplayNameSource)) { + loc->installerPkgDisplayName = translation; } } else { xml.skipCurrentElement(); |