kdecore: actually install the KDETranslator

was non-operational code due to QT_NO_TRANSLATION being defined in the
kglobal source file for some reason, it has a huge impact on performance
ofcourse because anything Katie will attempt to translate will go trough it

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-11-02 10:57:24 +02:00
parent 95ee157d51
commit b8b37e01a3
4 changed files with 63 additions and 58 deletions

View file

@ -33,9 +33,10 @@
#include <unistd.h> // umask
#include <QThread>
#include <QtCore/qatomic.h>
#include <QtCore/QList>
#include <QtCore/QSet>
#include <QAtomicInt>
#include <QList>
#include <QSet>
#include <QCoreApplication>
#include <kaboutdata.h>
#include <kconfig.h>
@ -43,12 +44,8 @@
#include <kcharsets.h>
#include <kstandarddirs.h>
#include <kcomponentdata.h>
#undef QT_NO_TRANSLATION
#include <QtCore/QCoreApplication>
#define QT_NO_TRANSLATION
#include <QtCore/QDebug>
#include <QtCore/QTextCodec>
#include "kcmdlineargs.h"
#include "kcatalog_p.h"
mode_t s_umsk;
@ -58,6 +55,9 @@ class KGlobalPrivate
inline KGlobalPrivate()
: locale(0),
charsets(0),
#ifndef QT_NO_TRANSLATION
translator(0),
#endif
localeIsFromFakeComponent(false)
{
// the umask is read here before any threads are created to avoid race conditions
@ -68,6 +68,10 @@ class KGlobalPrivate
inline ~KGlobalPrivate()
{
#ifndef QT_NO_TRANSLATION
delete translator;
translator = 0;
#endif
delete locale;
locale = 0;
delete charsets;
@ -78,6 +82,9 @@ class KGlobalPrivate
KComponentData mainComponent; // holds a refcount
KLocale *locale;
KCharsets *charsets;
#ifndef QT_NO_TRANSLATION
KDETranslator* translator;
#endif
bool localeIsFromFakeComponent;
QStringList catalogsToInsert;
@ -173,7 +180,10 @@ KLocale *KGlobal::locale()
" takes care of this. If not using KApplication, call KGlobal::locale() during initialization.");
#ifndef QT_NO_TRANSLATION
} else {
QCoreApplication::installTranslator(new KDETranslator(coreApp));
delete d->translator;
d->translator = 0;
d->translator = new KDETranslator();
QCoreApplication::installTranslator(d->translator);
#endif
}
}

View file

@ -32,7 +32,8 @@ namespace KGlobal
#include "kglobal.h"
#include "klocale.h"
#include <QtCore/QTranslator>
#include <QTranslator>
#ifndef QT_NO_TRANSLATION
class KDETranslator : public QTranslator

View file

@ -24,30 +24,14 @@
#include <QFile>
#include <QTranslator>
static QByteArray translationData(const QByteArray &localeDir, const QByteArray &language, const QByteArray &name)
{
QByteArray translationpath = localeDir;
translationpath.append('/');
translationpath.append(language);
translationpath.append('/');
translationpath.append(name);
translationpath.append(".tr");
QFile translationfile(QFile::decodeName(translationpath));
if (!translationfile.open(QFile::ReadOnly)) {
return QByteArray();
}
return translationfile.readAll();
}
class KCatalogPrivate
{
public:
KCatalogPrivate();
~KCatalogPrivate();
QByteArray language;
QByteArray name;
QByteArray localeDir;
QString language;
QString name;
#ifndef QT_NO_TRANSLATION
QTranslator* translator;
@ -66,20 +50,19 @@ KCatalogPrivate::~KCatalogPrivate()
QDebug operator<<(QDebug debug, const KCatalog &c)
{
return debug << c.d->language << " " << c.d->name << " " << c.d->localeDir;
return debug << c.d->language << " " << c.d->name;
}
KCatalog::KCatalog(const QString &name, const QString &language)
: d(new KCatalogPrivate())
{
d->language = QFile::encodeName(language);
d->name = QFile::encodeName(name);
d->localeDir = QFile::encodeName(catalogLocaleDir(name, language));
d->language = language;
d->name = name;
#ifndef QT_NO_TRANSLATION
d->translator = new QTranslator();
d->translator->loadFromData(translationData(d->localeDir, d->language, d->name));
// kDebug() << << name << language << localeDir;
d->translator->loadFromData(catalogData(d->name, d->language));
// kDebug() << << name << language;
#endif
}
@ -88,11 +71,10 @@ KCatalog::KCatalog(const KCatalog &rhs)
{
d->language = rhs.d->language;
d->name = rhs.d->name;
d->localeDir = rhs.d->localeDir;
#ifndef QT_NO_TRANSLATION
d->translator = new QTranslator();
d->translator->loadFromData(translationData(d->localeDir, d->language, d->name));
d->translator->loadFromData(catalogData(d->name, d->language));
#endif
}
@ -100,10 +82,9 @@ KCatalog & KCatalog::operator=(const KCatalog & rhs)
{
d->language = rhs.d->language;
d->name = rhs.d->name;
d->localeDir = rhs.d->localeDir;
#ifndef QT_NO_TRANSLATION
d->translator->loadFromData(translationData(d->localeDir, d->language, d->name));
d->translator->loadFromData(catalogData(d->name, d->language));
#endif
return *this;
}
@ -116,23 +97,33 @@ KCatalog::~KCatalog()
QString KCatalog::catalogLocaleDir(const QString &name,
const QString &language)
{
QString relpath = QString::fromLatin1("%1/%2.tr").arg(language).arg(name);
const QString relpath = QString::fromLatin1("%1/%2.tr").arg(language).arg(name);
return KGlobal::dirs()->findResourceDir("locale", relpath);
}
QByteArray KCatalog::catalogData(const QString &name, const QString &language)
{
const QString relpath = QString::fromLatin1("%1/%2.tr").arg(language).arg(name);
const QString translationpath = KGlobal::dirs()->locate("locale", relpath);
if (translationpath.isEmpty()) {
return QByteArray();
}
QFile translationfile(translationpath);
if (!translationfile.open(QFile::ReadOnly)) {
return QByteArray();
}
return translationfile.readAll();
}
QString KCatalog::name() const
{
return QFile::decodeName(d->name);
return d->name;
}
QString KCatalog::language() const
{
return QFile::decodeName(d->language);
}
QString KCatalog::localeDir() const
{
return QFile::decodeName(d->localeDir);
return d->language;
}
QString KCatalog::translate(const char * msgid) const

View file

@ -42,17 +42,17 @@ public:
* @param name The name of the catalog
* @param language The language of this catalog
*/
KCatalog( const QString &name, const QString &language );
KCatalog(const QString &name, const QString &language);
/**
* Copy constructor.
*/
KCatalog(const KCatalog & rhs);
KCatalog(const KCatalog &rhs);
/**
* Assignment operator.
*/
KCatalog & operator = ( const KCatalog & rhs);
KCatalog& operator=(const KCatalog &rhs);
/**
* Destructor.
@ -67,8 +67,18 @@ public:
*
* @return The locale directory if found, QString() otherwise.
*/
static QString catalogLocaleDir( const QString &name,
const QString &language );
static QString catalogLocaleDir(const QString &name, const QString &language);
/**
* Finds the catalog file for the given catalog in given language, reads it
* and returns its data.
*
* @param name The name of the catalog
* @param language The language of this catalog
*
* @return The catalog data if found, QByteArray() otherwise.
*/
static QByteArray catalogData(const QString &name, const QString &language);
/**
* Returns the name of the catalog.
@ -84,13 +94,6 @@ public:
*/
QString language() const;
/**
* Returns locale directory of the catalog.
*
* @return The locale directory of the catalog.
*/
QString localeDir() const;
/**
* Retrieves a translation of the specified message id.
*