Adds q2 repos to migrate

This commit is contained in:
torsten committed 2026-07-14 12:07:36 +02:00
1 parent ad1f62c4ee
commit 17f1c61c9e
991 files changed
+178451

No files matched your search

+22
View File
@@ -0,0 +1,22 @@
#
# ngltranslator lib
# $Id$
# $HeadURL$
# $Author$
#
SET(my_SRCS
ngltranslator.cpp
ngltranslator.h
ngltranslator_export.h
)
NGL_ADD_LIBRARY(ALL ngltranslator SHARED ${my_SRCS})
NGL_TARGET_LINK_LIBRARIES(ngltranslator
PUBLIC
Qt5::Core
)
NGL_TARGET_INCLUDE_DIRECTORIES(ngltranslator
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/..
)
NGL_INSTALL_TARGET(ngltranslator)
+222
View File
@@ -0,0 +1,222 @@
#include "ngltranslator.h"
#include "ngltranslator_p.h"
#include <QCoreApplication>
#include <QDir>
#include <QTranslator>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QLibraryInfo>
#include <QLocale>
#include <QDebug>
namespace NGL
{
struct TranslationData
{
QByteArray isoCode;
QString qmPrefix;
QTranslator qtTranslator;
QTranslator kdReportsTranslator;
QTranslator ltsTranslator;
Translator dynamicTranslator;
TranslationData()
{
QCoreApplication::installTranslator(&qtTranslator);
QCoreApplication::installTranslator(&kdReportsTranslator);
QCoreApplication::installTranslator(&ltsTranslator);
QCoreApplication::installTranslator(&dynamicTranslator);
}
~TranslationData()
{
if (qApp)
{
QCoreApplication::removeTranslator(&qtTranslator);
QCoreApplication::removeTranslator(&kdReportsTranslator);
QCoreApplication::removeTranslator(&ltsTranslator);
QCoreApplication::removeTranslator(&dynamicTranslator);
}
}
};
Q_GLOBAL_STATIC(TranslationData, s_translationData)
Translator::Translator(QObject *parent)
: QTranslator(parent)
{}
void Translator::setTranslationCatalog(const TranslationCatalog &catalog)
{
m_catalog = catalog;
m_md5Sum.clear();
isoCodeChanged(s_translationData()->isoCode);
}
bool Translator::setTranslationDataJson(const QByteArray &jsonData, const QByteArray &md5Sum, bool bCompressed)
{
if (m_md5Sum == md5Sum)
return true;
const QJsonObject jObj = QJsonDocument::fromBinaryData(bCompressed ? qUncompress(jsonData) : jsonData).object();
const QString translationKey(QStringLiteral("translations"));
if (jObj.empty() ||
!jObj.contains(translationKey) ||
!jObj.value(translationKey).isArray())
return false;
const QJsonArray arr = jObj[translationKey].toArray();
m_catalog.clear();
m_catalog.reserve(arr.size());
TranslationEntry te;
for (const QJsonValue &element : arr)
{
const QJsonObject obj = element.toObject();
te.isoCode = obj.value(QStringLiteral("isoCode")).toString().toUtf8();
te.context = obj.value(QStringLiteral("context")).toString().toUtf8();
te.key = obj.value(QStringLiteral("key")).toString().toUtf8();
te.disambiguation = obj.value(QStringLiteral("disambiguation")).toString().toUtf8();
te.translation = obj.value(QStringLiteral("translation")).toString();
m_catalog += te;
}
m_md5Sum = md5Sum;
isoCodeChanged(s_translationData()->isoCode);
return false;
}
QString Translator::translate(const char *context,
const char *sourceText,
const char *disambiguation,
int n) const
{
if (n != -1)
return QString();
const auto itCtx = m_translationLookup.find(QByteArray::fromRawData(context, strlen(context)));
if (itCtx == m_translationLookup.end())
return QString();
const auto itKey = itCtx.value().find(QByteArray::fromRawData(sourceText, strlen(sourceText)));
if (itKey == itCtx.value().end())
return QString();
const auto itDis = itKey.value().find(disambiguation ? QByteArray::fromRawData(disambiguation, strlen(disambiguation)) : QByteArray());
if (itDis == itKey.value().end())
return QString();
return itDis.value();
}
void Translator::isoCodeChanged(const QByteArray &isoCode)
{
m_translationLookup.clear();
for (const TranslationEntry &te : qAsConst(m_catalog))
{
if (te.isoCode != isoCode)
continue;
m_translationLookup[te.context][te.key][te.disambiguation] = te.translation;
}
}
void setTranslationCatalog(const TranslationCatalog &catalog)
{
s_translationData()->dynamicTranslator.setTranslationCatalog(catalog);
}
bool setTranslationDataJson(const QByteArray &jsonData, const QByteArray &md5Sum, bool bCompressed)
{
return s_translationData()->dynamicTranslator.setTranslationDataJson(jsonData, md5Sum, bCompressed);
}
bool setTranslationLocale(const QByteArray &isoCode, const QString &qmPrefix)
{
if (s_translationData()->isoCode == isoCode &&
s_translationData()->qmPrefix == qmPrefix)
return true;
s_translationData()->isoCode = isoCode;
s_translationData()->qmPrefix = qmPrefix;
const QString relTranslationPath = QLatin1Char('/') + QString::fromLatin1(isoCode) + QLatin1Char('/');
const QStringList possiblePaths = { QCoreApplication::applicationDirPath() + QStringLiteral("/translations/"),
QCoreApplication::applicationDirPath() + QStringLiteral("/../translations/"),
QDir::homePath() + QStringLiteral("/translations/")
};
const QString qm(QStringLiteral(".qm"));
QString ltsQmPath;
for (const QString &path : possiblePaths)
{
const QString absPath = path + relTranslationPath;
if (!QDir(absPath).exists())
continue;
if (QTranslator().load(qmPrefix + qm, absPath))
{
ltsQmPath = absPath + qmPrefix + qm;
break;
}
}
QString kdReportsQmPath;
const QString kdReportsPrefix(QStringLiteral("kdreports"));
for (const QString &path : possiblePaths)
{
const QString absPath = path + relTranslationPath;
if (!QDir(absPath).exists())
continue;
if (QTranslator().load(kdReportsPrefix + qm, absPath))
{
kdReportsQmPath = absPath + kdReportsPrefix + qm;
break;
}
}
QStringList isoCodeList(QString::fromLatin1(isoCode).split(QLatin1Char('_')));
if (isoCodeList.count() == 2)
{
s_translationData->qtTranslator.load(QLatin1String("qt_") + isoCodeList.at(0),
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
}
else
{
qWarning() << "translation iso code not compatible with qt translations";
}
s_translationData->kdReportsTranslator.load(kdReportsQmPath);
s_translationData->ltsTranslator.load(ltsQmPath);
s_translationData->dynamicTranslator.isoCodeChanged(isoCode);
return !s_translationData->ltsTranslator.isEmpty();
}
QByteArray translationLocale()
{
return s_translationData()->isoCode;
}
}
+40
View File
@@ -0,0 +1,40 @@
#pragma once
#include "ngltranslator_export.h"
#include <QByteArray>
#include <QString>
#include <QVector>
namespace NGL
{
struct TranslationEntry
{
QByteArray isoCode;
QByteArray context;
QByteArray key;
QByteArray disambiguation;
QString translation;
};
using TranslationCatalog = QVector<TranslationEntry>;
NGLTRANSLATOR_EXPORT void setTranslationCatalog(const TranslationCatalog &catalog);
NGLTRANSLATOR_EXPORT bool setTranslationDataJson(const QByteArray &jsonData, const QByteArray &md5Sum, bool bCompressed);
NGLTRANSLATOR_EXPORT bool setTranslationLocale(const QByteArray &isoCode, const QString &qmPrefix = QStringLiteral("tds"));
NGLTRANSLATOR_EXPORT QByteArray translationLocale();
}
+19
View File
@@ -0,0 +1,19 @@
#pragma once
#ifndef NGLTRANSLATOR_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define NGLTRANSLATOR_EXPORT
# else
# ifdef WIN32
# ifdef MAKE_NGLTRANSLATOR_LIB
# define NGLTRANSLATOR_EXPORT __declspec(dllexport)
# else
# define NGLTRANSLATOR_EXPORT __declspec(dllimport)
# endif
# else
# define NGLTRANSLATOR_EXPORT __attribute__((visibility("default")))
# endif
# endif
#endif
+34
View File
@@ -0,0 +1,34 @@
#pragma once
#include "ngltranslator.h"
#include <QHash>
#include <QTranslator>
namespace NGL
{
class Translator final : public QTranslator
{
Q_OBJECT
public:
explicit Translator(QObject *parent = nullptr);
QString translate(const char *context,
const char *sourceText,
const char *disambiguation = nullptr,
int n = -1) const override;
void setTranslationCatalog(const TranslationCatalog &catalog);
bool setTranslationDataJson(const QByteArray &jsonData, const QByteArray &md5Sum, bool bCompressed);
void isoCodeChanged(const QByteArray &isoCode);
private:
QHash<QByteArray, QHash<QByteArray, QHash<QByteArray, QString>>> m_translationLookup;
TranslationCatalog m_catalog;
QByteArray m_md5Sum;
};
}