1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "private/qqmltranslation_p.h"
5
6QT_BEGIN_NAMESPACE
7
8QQmlTranslation::QQmlTranslation(const Data &d) : data(d) { }
9QQmlTranslation::QQmlTranslation() : data(nullptr) { }
10
11QString QQmlTranslation::translate() const
12{
13 return std::visit(
14 visitor: [](auto &&arg) -> QString {
15 using T = std::decay_t<decltype(arg)>;
16 if constexpr (!std::is_same_v<T, std::nullptr_t>)
17 return arg.translate();
18 else {
19 Q_ASSERT_X(false, "QQmlTranslation", "Uninitialized Translation");
20 return {};
21 }
22 },
23 variants: data);
24}
25
26QString QQmlTranslation::serializeForQmltc() const
27{
28 return std::visit(
29 visitor: [](auto &&arg) -> QString {
30 using T = std::decay_t<decltype(arg)>;
31 if constexpr (!std::is_same_v<T, std::nullptr_t>)
32 return arg.serializeForQmltc();
33 else {
34 Q_ASSERT_X(false, "QQmlTranslation", "Uninitialized Translation");
35 return {};
36 }
37 },
38 variants: data);
39}
40
41QString QQmlTranslation::idForQmlDebug() const
42{
43 return std::visit(
44 visitor: [](auto &&arg) -> QString {
45 using T = std::decay_t<decltype(arg)>;
46 if constexpr (!std::is_same_v<T, std::nullptr_t>)
47 return arg.idForQmlDebug();
48 else {
49 Q_ASSERT_X(false, "QQmlTranslation", "Uninitialized Translation");
50 return {};
51 }
52 },
53 variants: data);
54}
55
56QQmlTranslation::QsTrData::QsTrData(const QString &context, const QString &text,
57 const QString &comment, int number)
58 : context(context.toUtf8()), text(text.toUtf8()), comment(comment.toUtf8()), number(number)
59{
60}
61
62QString QQmlTranslation::contextFromQmlFilename(const QString &qmlFilename)
63{
64 int lastSlash = qmlFilename.lastIndexOf(c: QLatin1Char('/'));
65 QStringView contextView = (lastSlash > -1)
66 ? QStringView{ qmlFilename }.mid(pos: lastSlash + 1, n: qmlFilename.size() - lastSlash - 5)
67 : QStringView();
68 return contextView.toString();
69}
70
71QString QQmlTranslation::QsTrData::translate() const
72{
73#if !QT_CONFIG(translation)
74 return QString();
75#else
76 return QCoreApplication::translate(context, key: text, disambiguation: comment, n: number);
77#endif
78}
79
80QString QQmlTranslation::QsTrData::idForQmlDebug() const
81{
82 return QString::fromUtf8(ba: text);
83}
84
85QString QQmlTranslation::QsTrData::serializeForQmltc() const
86{
87 QString result = QStringLiteral(R"(QQmlTranslation(QQmlTranslation::QsTrData(
88 QStringLiteral("%1"),
89 QStringLiteral("%2"),
90 QStringLiteral("%3"),
91 %4)))")
92 .arg(args: QString::fromUtf8(ba: context), args: QString::fromUtf8(ba: text),
93 args: QString::fromUtf8(ba: comment))
94 .arg(a: number);
95
96 return result;
97}
98
99QQmlTranslation::QsTrIdData::QsTrIdData(const QString &id, int number)
100 : id(id.toUtf8()), number(number)
101{
102}
103
104QString QQmlTranslation::QsTrIdData::translate() const
105{
106#if !QT_CONFIG(translation)
107 return QString();
108#else
109 return qtTrId(id, n: number);
110#endif
111}
112
113QString QQmlTranslation::QsTrIdData::serializeForQmltc() const
114{
115 QString result = QStringLiteral(R"(QQmlTranslation(QQmlTranslation::QsTrIdData(
116 QStringLiteral("%1"),
117 %4)))")
118 .arg(a: QString::fromUtf8(ba: id))
119 .arg(a: number);
120
121 return result;
122}
123
124QString QQmlTranslation::QsTrIdData::idForQmlDebug() const
125{
126 return QString::fromUtf8(ba: id);
127}
128
129QT_END_NAMESPACE
130

source code of qtdeclarative/src/qml/common/qqmltranslation.cpp