diff options
Diffstat (limited to 'src/qml/common/qqmltranslation.cpp')
-rw-r--r-- | src/qml/common/qqmltranslation.cpp | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/qml/common/qqmltranslation.cpp b/src/qml/common/qqmltranslation.cpp new file mode 100644 index 0000000000..7120071b1a --- /dev/null +++ b/src/qml/common/qqmltranslation.cpp @@ -0,0 +1,125 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "private/qqmltranslation_p.h" + +QQmlTranslation::QQmlTranslation(const Data &d) : data(d) { } +QQmlTranslation::QQmlTranslation() : data(nullptr) { } + +QString QQmlTranslation::translate() const +{ + return std::visit( + [](auto &&arg) -> QString { + using T = std::decay_t<decltype(arg)>; + if constexpr (!std::is_same_v<T, std::nullptr_t>) + return arg.translate(); + else { + Q_ASSERT_X(false, "QQmlTranslation", "Uninitialized Translation"); + return {}; + } + }, + data); +} + +QString QQmlTranslation::serializeForQmltc() const +{ + return std::visit( + [](auto &&arg) -> QString { + using T = std::decay_t<decltype(arg)>; + if constexpr (!std::is_same_v<T, std::nullptr_t>) + return arg.serializeForQmltc(); + else { + Q_ASSERT_X(false, "QQmlTranslation", "Uninitialized Translation"); + return {}; + } + }, + data); +} + +QString QQmlTranslation::idForQmlDebug() const +{ + return std::visit( + [](auto &&arg) -> QString { + using T = std::decay_t<decltype(arg)>; + if constexpr (!std::is_same_v<T, std::nullptr_t>) + return arg.idForQmlDebug(); + else { + Q_ASSERT_X(false, "QQmlTranslation", "Uninitialized Translation"); + return {}; + } + }, + data); +} + +QQmlTranslation::QsTrData::QsTrData(const QString &context, const QString &text, + const QString &comment, int number) + : context(context.toUtf8()), text(text.toUtf8()), comment(comment.toUtf8()), number(number) +{ +} + +QString QQmlTranslation::contextFromQmlFilename(const QString &qmlFilename) +{ + int lastSlash = qmlFilename.lastIndexOf(QLatin1Char('/')); + QStringView contextView = (lastSlash > -1) + ? QStringView{ qmlFilename }.mid(lastSlash + 1, qmlFilename.size() - lastSlash - 5) + : QStringView(); + return contextView.toString(); +} + +QString QQmlTranslation::QsTrData::translate() const +{ +#if !QT_CONFIG(translation) + return QString(); +#else + return QCoreApplication::translate(context, text, comment, number); +#endif +} + +QString QQmlTranslation::QsTrData::idForQmlDebug() const +{ + return QString::fromUtf8(text); +} + +QString QQmlTranslation::QsTrData::serializeForQmltc() const +{ + QString result = QStringLiteral(R"(QQmlTranslation(QQmlTranslation::QsTrData( + QStringLiteral("%1"), + QStringLiteral("%2"), + QStringLiteral("%3"), + %4)))") + .arg(QString::fromUtf8(context), QString::fromUtf8(text), + QString::fromUtf8(comment)) + .arg(number); + + return result; +} + +QQmlTranslation::QsTrIdData::QsTrIdData(const QString &id, int number) + : id(id.toUtf8()), number(number) +{ +} + +QString QQmlTranslation::QsTrIdData::translate() const +{ +#if !QT_CONFIG(translation) + return QString(); +#else + return qtTrId(id, number); +#endif +} + +QString QQmlTranslation::QsTrIdData::serializeForQmltc() const +{ + QString result = QStringLiteral(R"(QQmlTranslation(QQmlTranslation::QsTrIdData( + QStringLiteral("%1"), + %4)))") + .arg(QString::fromUtf8(id)) + .arg(number); + + return result; +} + +QString QQmlTranslation::QsTrIdData::idForQmlDebug() const +{ + return QString::fromUtf8(id); +} |