File indexing completed on 2025-04-27 03:58:38

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2018-02-22
0007  * Description : A text translator using web-services - Properties methods.
0008  *
0009  * SPDX-FileCopyrightText: 2018-2022 by Hennadii Chernyshchyk <genaloner at gmail dot com>
0010  * SPDX-FileCopyrightText: 2021-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  *
0012  * SPDX-License-Identifier: GPL-2.0-or-later
0013  *
0014  * ============================================================ */
0015 
0016 #include "donlinetranslator_p.h"
0017 
0018 namespace Digikam
0019 {
0020 
0021 bool DOnlineTranslator::isSourceTranslitEnabled() const
0022 {
0023     return d->sourceTranslitEnabled;
0024 }
0025 
0026 void DOnlineTranslator::setSourceTranslitEnabled(bool enable)
0027 {
0028     d->sourceTranslitEnabled = enable;
0029 }
0030 
0031 bool DOnlineTranslator::isTranslationTranslitEnabled() const
0032 {
0033     return d->translationTranslitEnabled;
0034 }
0035 
0036 void DOnlineTranslator::setTranslationTranslitEnabled(bool enable)
0037 {
0038     d->translationTranslitEnabled = enable;
0039 }
0040 
0041 bool DOnlineTranslator::isSourceTranscriptionEnabled() const
0042 {
0043     return d->sourceTranscriptionEnabled;
0044 }
0045 
0046 void DOnlineTranslator::setSourceTranscriptionEnabled(bool enable)
0047 {
0048     d->sourceTranscriptionEnabled = enable;
0049 }
0050 
0051 bool DOnlineTranslator::isTranslationOptionsEnabled() const
0052 {
0053     return d->translationOptionsEnabled;
0054 }
0055 
0056 void DOnlineTranslator::setTranslationOptionsEnabled(bool enable)
0057 {
0058     d->translationOptionsEnabled = enable;
0059 }
0060 
0061 void DOnlineTranslator::setEngineUrl(Engine engine, const QString& url)
0062 {
0063     switch (engine)
0064     {
0065         case LibreTranslate:
0066             d->libreUrl  = url;
0067             break;
0068 
0069         case Lingva:
0070             d->lingvaUrl = url;
0071             break;
0072 
0073         default:
0074             break;
0075     }
0076 }
0077 
0078 void DOnlineTranslator::setEngineApiKey(Engine engine, const QByteArray& apiKey)
0079 {
0080     switch (engine)
0081     {
0082         case LibreTranslate:
0083             d->libreApiKey = apiKey;
0084             break;
0085 
0086         default:
0087             break;
0088     }
0089 }
0090 
0091 QJsonDocument DOnlineTranslator::toJson() const
0092 {
0093     QJsonObject translationOptions;
0094 
0095     for (auto it = d->translationOptions.cbegin() ; it != d->translationOptions.cend() ; ++it)
0096     {
0097         QJsonArray arr;
0098 
0099         for (const DOnlineTranslatorOption& option : it.value())
0100         {
0101             arr.append(option.toJson());
0102         }
0103 
0104         translationOptions.insert(it.key(), arr);
0105     }
0106 
0107     QJsonObject object
0108     {
0109         { QLatin1String("source"),               d->source                   },
0110         { QLatin1String("sourceTranscription"),  d->sourceTranscription      },
0111         { QLatin1String("sourceTranslit"),       d->sourceTranslit           },
0112         { QLatin1String("translation"),          d->translation              },
0113         { QLatin1String("translationOptions"),   qMove(translationOptions)  },
0114         { QLatin1String("translationTranslit"),  d->translationTranslit      },
0115     };
0116 
0117     return QJsonDocument(object);
0118 }
0119 
0120 QString DOnlineTranslator::source() const
0121 {
0122     return d->source;
0123 }
0124 
0125 QString DOnlineTranslator::sourceTranslit() const
0126 {
0127     return d->sourceTranslit;
0128 }
0129 
0130 QString DOnlineTranslator::sourceTranscription() const
0131 {
0132     return d->sourceTranscription;
0133 }
0134 
0135 QString DOnlineTranslator::sourceLanguageName() const
0136 {
0137     return languageName(d->sourceLang);
0138 }
0139 
0140 DOnlineTranslator::Language DOnlineTranslator::sourceLanguage() const
0141 {
0142     return d->sourceLang;
0143 }
0144 
0145 QString DOnlineTranslator::translation() const
0146 {
0147     return d->translation;
0148 }
0149 
0150 QString DOnlineTranslator::translationTranslit() const
0151 {
0152     return d->translationTranslit;
0153 }
0154 
0155 QString DOnlineTranslator::translationLanguageName() const
0156 {
0157     return languageName(d->translationLang);
0158 }
0159 
0160 DOnlineTranslator::Language DOnlineTranslator::translationLanguage() const
0161 {
0162     return d->translationLang;
0163 }
0164 
0165 QMap<QString, QVector<DOnlineTranslatorOption>> DOnlineTranslator::translationOptions() const
0166 {
0167     return d->translationOptions;
0168 }
0169 
0170 DOnlineTranslator::TranslationError DOnlineTranslator::error() const
0171 {
0172     return d->error;
0173 }
0174 
0175 QString DOnlineTranslator::errorString() const
0176 {
0177     return d->errorString;
0178 }
0179 
0180 QString DOnlineTranslator::languageCode(Language lang)
0181 {
0182     return DOnlineTranslator::Private::s_genericLanguageCodes.value(lang);
0183 }
0184 
0185 DOnlineTranslator::Language DOnlineTranslator::language(const QString& langCode)
0186 {
0187     return DOnlineTranslator::Private::s_genericLanguageCodes.key(langCode, NoLanguage);
0188 }
0189 
0190 } // namespace Digikam