Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Guillaume_G:WSL
mingw64-kconfig
0001-Translate-desktop-entries-using-gettext.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Translate-desktop-entries-using-gettext.patch of Package mingw64-kconfig
From ae4f5ed6892b3a61b4ad89c77e5ca81e63490a53 Mon Sep 17 00:00:00 2001 From: Not sure who <> Date: Fri, 8 Jul 2022 10:08:55 +0200 Subject: [PATCH 1/5] Translate desktop entries using gettext For the desktop-file-translations mechanism: https://github.com/openSUSE/desktop-file-translations --- src/core/kconfig.cpp | 13 +++++++++++++ src/core/kconfig_p.h | 1 + src/core/kconfigdata.h | 13 +++++++++++++ src/core/kconfiggroup.cpp | 12 ++++++++++++ src/core/kconfiggroup.h | 5 +++++ src/core/kdesktopfile.cpp | 37 +++++++++++++++++++++++++++++++------ src/core/kdesktopfile.h | 2 ++ 7 files changed, 77 insertions(+), 6 deletions(-) diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp index 92c05ba..8890ea9 100644 --- a/src/core/kconfig.cpp +++ b/src/core/kconfig.cpp @@ -1011,6 +1011,19 @@ QByteArray KConfigPrivate::lookupData(const QByteArray &group, const char *key, return it->mValue; } +QByteArray KConfigPrivate::lookupExactData(const QByteArray &group, const char *key, + KEntryMap::SearchFlags flags) const +{ + if (bReadDefaults) { + flags |= KEntryMap::SearchDefaults; + } + const KEntryMapConstIterator it = entryMap.findExactEntry(group, key, flags); + if (it == entryMap.constEnd()) { + return QByteArray(); + } + return it->mValue; +} + QString KConfigPrivate::lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, bool *expand) const { diff --git a/src/core/kconfig_p.h b/src/core/kconfig_p.h index 917872f..8c119f3 100644 --- a/src/core/kconfig_p.h +++ b/src/core/kconfig_p.h @@ -34,6 +34,7 @@ public: QString lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, bool *expand) const; QByteArray lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const; + QByteArray lookupExactData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const; void putData(const QByteArray &group, const char *key, const QByteArray &value, KConfigBase::WriteConfigFlags flags, bool expand = false); diff --git a/src/core/kconfigdata.h b/src/core/kconfigdata.h index 2f36b1b..1b22cb6 100644 --- a/src/core/kconfigdata.h +++ b/src/core/kconfigdata.h @@ -175,6 +175,19 @@ public: Iterator findExactEntry(const QByteArray &group, const QByteArray &key = QByteArray(), SearchFlags flags = SearchFlags()); + ConstIterator findExactEntry(const QByteArray &group, const QByteArray &key = QByteArray(), + SearchFlags flags = SearchFlags()) const + { + KEntryKey theKey(group, key, false, bool(flags & SearchDefaults)); + + // try the localized key first + if (flags & SearchLocalized) { + theKey.bLocal = true; + return find(theKey); + } + return find(theKey); + } + Iterator findEntry(const QByteArray &group, const QByteArray &key = QByteArray(), SearchFlags flags = SearchFlags()); diff --git a/src/core/kconfiggroup.cpp b/src/core/kconfiggroup.cpp index cc4f8d0..af2e5a5 100644 --- a/src/core/kconfiggroup.cpp +++ b/src/core/kconfiggroup.cpp @@ -1199,6 +1199,18 @@ bool KConfigGroup::hasKey(const char *key) const return !config()->d_func()->lookupData(d->fullName(), key, flags).isNull(); } +bool KConfigGroup::hasTranslatedKey(const char *key) const +{ + Q_ASSERT_X(isValid(), "KConfigGroup::hasTranslatedKey", "accessing an invalid group"); + + KEntryMap::SearchFlags flags = KEntryMap::SearchLocalized; + if (config()->readDefaults()) { + flags |= KEntryMap::SearchDefaults; + } + + return !config()->d_func()->lookupExactData(d->fullName(), key, flags).isNull(); +} + bool KConfigGroup::hasKey(const QString &key) const { return hasKey(key.toUtf8().constData()); diff --git a/src/core/kconfiggroup.h b/src/core/kconfiggroup.h index 620f04c..718dbf5 100644 --- a/src/core/kconfiggroup.h +++ b/src/core/kconfiggroup.h @@ -717,6 +717,11 @@ public: */ QMap<QString, QString> entryMap() const; + /** + * @internal + */ + bool hasTranslatedKey(const char *key) const; + protected: bool hasGroupImpl(const QByteArray &group) const override; KConfigGroup groupImpl(const QByteArray &b) override; diff --git a/src/core/kdesktopfile.cpp b/src/core/kdesktopfile.cpp index 0dccd2d..5411e48 100644 --- a/src/core/kdesktopfile.cpp +++ b/src/core/kdesktopfile.cpp @@ -16,6 +16,7 @@ #include <QFileInfo> #include <QUrl> #include <QStandardPaths> +#include <libintl.h> #include "kauthorized.h" #include "kconfig_p.h" @@ -165,6 +166,33 @@ bool KDesktopFile::isAuthorizedDesktopFile(const QString &path) return false; } +QString KDesktopFile::translatedEntry(const char *key) const +{ + Q_D(const KDesktopFile); + if (d->desktopGroup.hasTranslatedKey(key)) { + return d->desktopGroup.readEntry(key); + } + + if (d->desktopGroup.hasKey(key)) { + QString value = d->desktopGroup.readEntryUntranslated(key); + QString fName = fileName(); + fName = fName.mid(fName.lastIndexOf(QLatin1Char('/'))+1); + QString po_lookup_key = QString::fromLatin1(key) + QStringLiteral("(") + fName + QStringLiteral("): ") + value; + char *msgid = strdup(po_lookup_key.toUtf8().constData()); + const char *po_value = dgettext("desktop_translations", msgid); + + if (po_value == msgid) { + free(msgid); + return value; + } + + free(msgid); + return QString::fromUtf8(po_value); + } + + return QString(); +} + QString KDesktopFile::readType() const { Q_D(const KDesktopFile); @@ -179,20 +207,17 @@ QString KDesktopFile::readIcon() const QString KDesktopFile::readName() const { - Q_D(const KDesktopFile); - return d->desktopGroup.readEntry("Name", QString()); + return translatedEntry("Name"); } QString KDesktopFile::readComment() const { - Q_D(const KDesktopFile); - return d->desktopGroup.readEntry("Comment", QString()); + return translatedEntry("Comment"); } QString KDesktopFile::readGenericName() const { - Q_D(const KDesktopFile); - return d->desktopGroup.readEntry("GenericName", QString()); + return translatedEntry("GenericName"); } QString KDesktopFile::readPath() const diff --git a/src/core/kdesktopfile.h b/src/core/kdesktopfile.h index 4d81718..d9640ea 100644 --- a/src/core/kdesktopfile.h +++ b/src/core/kdesktopfile.h @@ -244,6 +244,8 @@ protected: // virtual void virtual_hook( int id, void* data ); private: + QString translatedEntry(const char *) const; + Q_DISABLE_COPY(KDesktopFile) Q_DECLARE_PRIVATE(KDesktopFile) -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor