Adds q2 repos to migrate
This commit is contained in:
1 parent
ad1f62c4ee
commit
17f1c61c9e
991 files changed
+178451
No files matched your search
Executable
+22
@@ -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)
|
||||
Executable
+222
@@ -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(<sTranslator);
|
||||
QCoreApplication::installTranslator(&dynamicTranslator);
|
||||
}
|
||||
~TranslationData()
|
||||
{
|
||||
if (qApp)
|
||||
{
|
||||
QCoreApplication::removeTranslator(&qtTranslator);
|
||||
QCoreApplication::removeTranslator(&kdReportsTranslator);
|
||||
QCoreApplication::removeTranslator(<sTranslator);
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Executable
+40
@@ -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();
|
||||
|
||||
}
|
||||
Executable
+19
@@ -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
|
||||
Executable
+34
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user