digiKam
Loading...
Searching...
No Matches
donlinetranslator.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2018-02-22
7 * Description : A text translator using web-services.
8 *
9 * SPDX-FileCopyrightText: 2018-2022 by Hennadii Chernyshchyk <genaloner at gmail dot com>
10 * SPDX-FileCopyrightText: 2021-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QMap>
21#include <QPointer>
22#include <QVector>
23#include <QJsonObject>
24#include <QJsonArray>
25#include <QStringList>
26
27// Local includes
28
29#include "digikam_export.h"
30
31class QStateMachine;
32class QState;
33class QNetworkAccessManager;
34class QNetworkReply;
35
36namespace Digikam
37{
38
83struct DIGIKAM_EXPORT DOnlineTranslatorOption
84{
88 QString word;
89
93 QString gender;
94
98 QStringList translations;
99
105 QJsonObject toJson() const
106 {
107 QJsonObject object
108 {
109 { QLatin1String("gender"), gender },
110 { QLatin1String("translations"), QJsonArray::fromStringList(translations) },
111 { QLatin1String("word"), word },
112 };
113
114 return object;
115 }
116};
117
118// ------------------------------------------------------------------
119
123class DIGIKAM_EXPORT DOnlineTranslator : public QObject
124{
125 Q_OBJECT
126 Q_DISABLE_COPY(DOnlineTranslator)
127
128public:
129
134 {
135 NoLanguage = -1,
261 Zulu
262 };
263 Q_ENUM(Language)
264
265
276 Q_ENUM(Engine)
277
278
308 Q_ENUM(TranslationError)
309
310
318 explicit DOnlineTranslator(QObject* const parent = nullptr);
319 ~DOnlineTranslator() override;
320
330 void translate(const QString& text,
331 Engine engine = Google,
332 Language translationLang = Auto,
333 Language sourceLang = Auto,
334 Language uiLang = Auto);
335
342 void detectLanguage(const QString& text,
343 Engine engine = Google);
344
348 void abort();
349
355 bool isRunning() const;
356
362 QJsonDocument toJson() const;
363
369 QString source() const;
370
376 QString sourceTranslit() const;
377
383 QString sourceTranscription() const;
384
390 QString sourceLanguageName() const;
391
397 Language sourceLanguage() const;
398
402 static QString engineName(Engine engine);
403
405 // Properties methods (donlinetranslator_properties.cpp)
406
410 static QString fromRFC3066(Engine engine, const QString& langCodeRFC3066);
411
415 static QStringList supportedRFC3066(Engine engine);
416
422 QString translation() const;
423
429 QString translationTranslit() const;
430
436 QString translationLanguageName() const;
437
443 Language translationLanguage() const;
444
451 QMap<QString, QVector<DOnlineTranslatorOption> > translationOptions() const;
452
459 static QString languageCode(Language lang);
460
467 static Language language(const QString& langCode);
468
478 TranslationError error() const;
479
487 QString errorString() const;
488
494 bool isSourceTranslitEnabled() const;
495
501 bool isTranslationTranslitEnabled() const;
502
508 bool isSourceTranscriptionEnabled() const;
509
516 bool isTranslationOptionsEnabled() const;
517
523 void setSourceTranslitEnabled(bool enable);
524
530 void setTranslationTranslitEnabled(bool enable);
531
537 void setSourceTranscriptionEnabled(bool enable);
538
545 void setTranslationOptionsEnabled(bool enable);
546
556 void setEngineUrl(Engine engine, const QString& url);
557
566 void setEngineApiKey(Engine engine, const QByteArray& apiKey);
567
569
571 // Conversion tables (donlinetranslator_tables.cpp)
572
579 static Language language(const QLocale& locale);
580
587 static QString languageName(Language lang);
588
596 static bool isSupportTranslation(Engine engine, Language lang);
597
598private:
599
603 static bool isSupportTranslit(Engine engine, Language lang);
604 static bool isSupportDictionary(Engine engine, Language sourceLang, Language translationLang);
605
607
608Q_SIGNALS:
609
616
617private Q_SLOTS:
618
619 void slotSkipGarbageText();
620
629
630private Q_SLOTS:
631
632 void slotRequestGoogleTranslate();
633 void slotParseGoogleTranslate();
634
635private:
636
637 void buildGoogleStateMachine();
638 void buildGoogleDetectStateMachine();
639
641
643
644
645private Q_SLOTS:
646
647 void slotRequestYandexKey();
648 void slotParseYandexKey();
649
650 void slotRequestYandexTranslate();
651 void slotParseYandexTranslate();
652
653 void slotRequestYandexSourceTranslit();
654 void slotParseYandexSourceTranslit();
655
656 void slotRequestYandexTranslationTranslit();
657 void slotParseYandexTranslationTranslit();
658
659 void slotRequestYandexDictionary();
660 void slotParseYandexDictionary();
661
662private:
663
664 void buildYandexStateMachine();
665 void buildYandexDetectStateMachine();
666
670 void requestYandexTranslit(Language language);
671 void parseYandexTranslit(QString& text);
672
674
676
677
678private Q_SLOTS:
679
680 void slotRequestBingCredentials();
681 void slotParseBingCredentials();
682
683 void slotRequestBingTranslate();
684 void slotParseBingTranslate();
685
686 void slotRequestBingDictionary();
687 void slotParseBingDictionary();
688
689private:
690
691 void buildBingStateMachine();
692 void buildBingDetectStateMachine();
693
695
697
698
699private Q_SLOTS:
700
701 void slotRequestLibreLangDetection();
702 void slotParseLibreLangDetection();
703
704 void slotRequestLibreTranslate();
705 void slotParseLibreTranslate();
706
707private:
708
709 void buildLibreStateMachine();
710 void buildLibreDetectStateMachine();
711
713
715
716
717private Q_SLOTS:
718
719 void slotRequestLingvaTranslate();
720 void slotParseLingvaTranslate();
721
722private:
723
724 void buildLingvaStateMachine();
725 void buildLingvaDetectStateMachine();
726
728
729private:
730
734 void buildSplitNetworkRequest(QState* const parent,
735 void (DOnlineTranslator::*requestMethod)(),
736 void (DOnlineTranslator::*parseMethod)(),
737 const QString& text,
738 int textLimit);
739 void buildNetworkRequestState(QState* const parent,
740 void (DOnlineTranslator::*requestMethod)(),
741 void (DOnlineTranslator::*parseMethod)(),
742 const QString& text = QString());
743
744
745 void resetData(TranslationError error = NoError, const QString& errorString = QString());
746
747
748 // Other
749
753 static QString languageApiCode(Engine engine, Language lang);
754
758 static Language language(Engine engine, const QString& langCode);
762 static int getSplitIndex(const QString& untranslatedText, int limit);
763
764 static bool isContainsSpace(const QString& text);
765
766 static void addSpaceBetweenParts(QString& text);
767
768private:
769
770 class Private;
771 Private* const d = nullptr;
772
773 friend class DOnlineTts;
774};
775
776// -------------------------------------------------------------------------------------------
777
792class DIGIKAM_EXPORT DOnlineTts : public QObject
793{
794 Q_OBJECT
795 Q_DISABLE_COPY(DOnlineTts)
796
797public:
798
804 enum Voice
805 {
806 // All
807 NoVoice = -1,
808
809 // Yandex
815 Omazh
816 };
817 Q_ENUM(Voice)
818
819
825 {
826 // All
827 NoEmotion = -1,
828
829 // Yandex
832 Evil
833 };
834 Q_ENUM(Emotion)
835
836
862 Q_ENUM(TtsError)
863
864
872 explicit DOnlineTts(QObject* const parent = nullptr);
873 ~DOnlineTts() override;
874
886 void generateUrls(const QString& text,
889 Voice voice = NoVoice,
890 Emotion emotion = NoEmotion);
891
897 QList<QUrl> media() const;
898
908 TtsError error() const;
909
917 QString errorString() const;
918
925 static QString voiceCode(Voice voice);
926
935 static QString emotionCode(Emotion emotion);
936
945 static Emotion emotion(const QString& emotionCode);
946
955 static Voice voice(const QString& voiceCode);
956
957private:
958
959 void setError(TtsError error, const QString& errorString);
960
961 QString languageApiCode(DOnlineTranslator::Engine engine, DOnlineTranslator::Language lang);
962 QString voiceApiCode(DOnlineTranslator::Engine engine, Voice voice);
963 QString emotionApiCode(DOnlineTranslator::Engine engine, Emotion emotion);
964
965private:
966
967 class Private;
968 Private* const d = nullptr;
969};
970
971} // namespace Digikam
Definition donlinetranslator_p.h:41
Provides translation data.
Definition donlinetranslator.h:124
TranslationError
Indicates all possible error conditions found during the processing of the translation.
Definition donlinetranslator.h:282
@ ServiceError
Definition donlinetranslator.h:301
@ NetworkError
Definition donlinetranslator.h:296
@ NoError
Definition donlinetranslator.h:286
@ ParametersError
Definition donlinetranslator.h:291
Engine
Represents online engines.
Definition donlinetranslator.h:269
@ LibreTranslate
Definition donlinetranslator.h:273
@ Google
Definition donlinetranslator.h:270
@ Yandex
Definition donlinetranslator.h:271
@ Bing
Definition donlinetranslator.h:272
Language
Represents all languages for translation.
Definition donlinetranslator.h:134
@ Tongan
Definition donlinetranslator.h:246
@ Slovenian
Definition donlinetranslator.h:233
@ LevantineArabic
Definition donlinetranslator.h:198
@ Mari
Definition donlinetranslator.h:208
@ Sundanese
Definition donlinetranslator.h:236
@ Spanish
Definition donlinetranslator.h:235
@ Uighur
Definition donlinetranslator.h:251
@ Punjabi
Definition donlinetranslator.h:219
@ TraditionalChinese
Definition donlinetranslator.h:247
@ Cantonese
Definition donlinetranslator.h:149
@ Kannada
Definition donlinetranslator.h:186
@ Marathi
Definition donlinetranslator.h:207
@ Indonesian
Definition donlinetranslator.h:181
@ Ukrainian
Definition donlinetranslator.h:252
@ Lao
Definition donlinetranslator.h:195
@ Polish
Definition donlinetranslator.h:217
@ Hausa
Definition donlinetranslator.h:172
@ French
Definition donlinetranslator.h:164
@ HillMari
Definition donlinetranslator.h:175
@ Hungarian
Definition donlinetranslator.h:178
@ Irish
Definition donlinetranslator.h:182
@ Kinyarwanda
Definition donlinetranslator.h:189
@ Maltese
Definition donlinetranslator.h:205
@ Urdu
Definition donlinetranslator.h:253
@ YucatecMaya
Definition donlinetranslator.h:260
@ Igbo
Definition donlinetranslator.h:180
@ Russian
Definition donlinetranslator.h:222
@ Sinhala
Definition donlinetranslator.h:231
@ Hawaiian
Definition donlinetranslator.h:173
@ Khmer
Definition donlinetranslator.h:188
@ Korean
Definition donlinetranslator.h:192
@ Xhosa
Definition donlinetranslator.h:257
@ Malay
Definition donlinetranslator.h:203
@ Chichewa
Definition donlinetranslator.h:152
@ Basque
Definition donlinetranslator.h:144
@ Croatian
Definition donlinetranslator.h:154
@ Danish
Definition donlinetranslator.h:156
@ Bashkir
Definition donlinetranslator.h:143
@ Kurdish
Definition donlinetranslator.h:193
@ KlingonPlqaD
Definition donlinetranslator.h:191
@ Tamil
Definition donlinetranslator.h:242
@ Esperanto
Definition donlinetranslator.h:159
@ SerbianLatin
Definition donlinetranslator.h:226
@ Slovak
Definition donlinetranslator.h:232
@ Norwegian
Definition donlinetranslator.h:212
@ Persian
Definition donlinetranslator.h:216
@ Myanmar
Definition donlinetranslator.h:210
@ Tatar
Definition donlinetranslator.h:243
@ Pashto
Definition donlinetranslator.h:215
@ SerbianCyrillic
Definition donlinetranslator.h:225
@ Papiamento
Definition donlinetranslator.h:214
@ Swedish
Definition donlinetranslator.h:238
@ HaitianCreole
Definition donlinetranslator.h:171
@ Macedonian
Definition donlinetranslator.h:201
@ Vietnamese
Definition donlinetranslator.h:255
@ Lithuanian
Definition donlinetranslator.h:199
@ Nepali
Definition donlinetranslator.h:211
@ Armenian
Definition donlinetranslator.h:141
@ Yoruba
Definition donlinetranslator.h:259
@ Yiddish
Definition donlinetranslator.h:258
@ Galician
Definition donlinetranslator.h:166
@ Oriya
Definition donlinetranslator.h:213
@ Klingon
Definition donlinetranslator.h:190
@ Tahitian
Definition donlinetranslator.h:240
@ Welsh
Definition donlinetranslator.h:256
@ Frisian
Definition donlinetranslator.h:165
@ Dutch
Definition donlinetranslator.h:157
@ Bengali
Definition donlinetranslator.h:146
@ Malayalam
Definition donlinetranslator.h:204
@ Latvian
Definition donlinetranslator.h:197
@ Bosnian
Definition donlinetranslator.h:147
@ Samoan
Definition donlinetranslator.h:223
@ Cebuano
Definition donlinetranslator.h:151
@ Catalan
Definition donlinetranslator.h:150
@ Hindi
Definition donlinetranslator.h:176
@ Uzbek
Definition donlinetranslator.h:254
@ Latin
Definition donlinetranslator.h:196
@ Tagalog
Definition donlinetranslator.h:239
@ Mongolian
Definition donlinetranslator.h:209
@ ScotsGaelic
Definition donlinetranslator.h:224
@ Corsican
Definition donlinetranslator.h:153
@ Azerbaijani
Definition donlinetranslator.h:142
@ German
Definition donlinetranslator.h:168
@ Finnish
Definition donlinetranslator.h:163
@ Kyrgyz
Definition donlinetranslator.h:194
@ Gujarati
Definition donlinetranslator.h:170
@ Maori
Definition donlinetranslator.h:206
@ Thai
Definition donlinetranslator.h:245
@ Malagasy
Definition donlinetranslator.h:202
@ QueretaroOtomi
Definition donlinetranslator.h:220
@ Japanese
Definition donlinetranslator.h:184
@ Amharic
Definition donlinetranslator.h:139
@ Bulgarian
Definition donlinetranslator.h:148
@ Filipino
Definition donlinetranslator.h:162
@ Tajik
Definition donlinetranslator.h:241
@ Greek
Definition donlinetranslator.h:169
@ Czech
Definition donlinetranslator.h:155
@ Udmurt
Definition donlinetranslator.h:250
@ SimplifiedChinese
Definition donlinetranslator.h:229
@ English
Definition donlinetranslator.h:158
@ Portuguese
Definition donlinetranslator.h:218
@ Fijian
Definition donlinetranslator.h:161
@ Sindhi
Definition donlinetranslator.h:230
@ Swahili
Definition donlinetranslator.h:237
@ Georgian
Definition donlinetranslator.h:167
@ Italian
Definition donlinetranslator.h:183
@ Afrikaans
Definition donlinetranslator.h:137
@ Turkmen
Definition donlinetranslator.h:249
@ Kazakh
Definition donlinetranslator.h:187
@ Turkish
Definition donlinetranslator.h:248
@ Icelandic
Definition donlinetranslator.h:179
@ Belarusian
Definition donlinetranslator.h:145
@ Auto
Definition donlinetranslator.h:136
@ Estonian
Definition donlinetranslator.h:160
@ Hebrew
Definition donlinetranslator.h:174
@ Javanese
Definition donlinetranslator.h:185
@ Somali
Definition donlinetranslator.h:234
@ Romanian
Definition donlinetranslator.h:221
@ Albanian
Definition donlinetranslator.h:138
@ Hmong
Definition donlinetranslator.h:177
@ Telugu
Definition donlinetranslator.h:244
@ Shona
Definition donlinetranslator.h:228
@ Sesotho
Definition donlinetranslator.h:227
@ Luxembourgish
Definition donlinetranslator.h:200
@ Arabic
Definition donlinetranslator.h:140
void signalFinished()
Translation finished.
Provides TTS URL generation.
Definition donlinetranslator.h:793
TtsError
Indicates all possible error conditions found during the processing of the URLs generation.
Definition donlinetranslator.h:840
@ UnsupportedLanguage
Definition donlinetranslator.h:852
@ UnsupportedVoice
Definition donlinetranslator.h:856
@ NoError
Definition donlinetranslator.h:844
@ UnsupportedEngine
Definition donlinetranslator.h:848
@ UnsupportedEmotion
Definition donlinetranslator.h:860
Voice
Defines voice to use.
Definition donlinetranslator.h:805
@ Oksana
Definition donlinetranslator.h:813
@ Ermil
Definition donlinetranslator.h:811
@ Jane
Definition donlinetranslator.h:812
@ Alyss
Definition donlinetranslator.h:814
@ Zahar
Definition donlinetranslator.h:810
Emotion
Defines emotion to use.
Definition donlinetranslator.h:825
@ Neutral
Definition donlinetranslator.h:830
@ Good
Definition donlinetranslator.h:831
Definition datefolderview.cpp:34
Contains translation options for a single word.
Definition donlinetranslator.h:84
QStringList translations
Associated translations for the word.
Definition donlinetranslator.h:98
QString word
Word that specified for translation options.
Definition donlinetranslator.h:88
QJsonObject toJson() const
Converts the object to JSON.
Definition donlinetranslator.h:105
QString gender
Gender of the word.
Definition donlinetranslator.h:93