Added force rotate translators option.

This commit is contained in:
Gres 2018-02-22 21:31:24 +03:00
parent fe16cbe669
commit 4499e94c44
9 changed files with 108 additions and 77 deletions

View File

@ -31,6 +31,7 @@ namespace settings_names {
const QString translationGroup = "Translation";
const QString doTranslation = "doTranslation";
const QString ignoreSslErrors = "ignoreSslErrors";
const QString forceRotateTranslators = "forceRotateTranslators";
const QString sourceLanguage = "source_language";
const QString translationLanguage = "translation_language";
const QString translationTimeout = "translation_timeout";
@ -69,6 +70,7 @@ namespace settings_values {
//! Translation
const bool doTranslation = true;
const bool ignoreSslErrors = false;
const bool forceRotateTranslators = false;
const QString sourceLanguage = "auto";
const QString translationLanguage = "ru";
const int translationTimeout = 15; // secs

View File

@ -129,6 +129,7 @@ void SettingsEditor::saveSettings () const {
settings.beginGroup (translationGroup);
settings.setValue (doTranslation, ui->doTranslationCheck->isChecked ());
settings.setValue (ignoreSslErrors, ui->ignoreSslCheck->isChecked ());
settings.setValue (forceRotateTranslators, ui->forceRotateCheck->isChecked ());
settings.setValue (translationDebugMode, ui->translatorDebugCheck->isChecked ());
QString trLanguage = dictionary_.translateUiToCode (ui->translateLangCombo->currentText ());
settings.setValue (translationLanguage, trLanguage);
@ -218,6 +219,7 @@ void SettingsEditor::loadSettings () {
settings.beginGroup (settings_names::translationGroup);
ui->doTranslationCheck->setChecked (GET (doTranslation).toBool ());
ui->ignoreSslCheck->setChecked (GET (ignoreSslErrors).toBool ());
ui->forceRotateCheck->setChecked (GET (forceRotateTranslators).toBool ());
ui->translatorDebugCheck->setChecked (GET (translationDebugMode).toBool ());
QString trLanguage = dictionary_.translateCodeToUi (GET (translationLanguage).toString ());
ui->translateLangCombo->setCurrentText (trLanguage);

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>553</width>
<height>456</height>
<height>483</height>
</rect>
</property>
<property name="windowTitle">
@ -378,24 +378,7 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="translatorDebugCheck">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображает окно переводчика. Следует использовать только для разработки переводчиков.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Режим отладки</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="ignoreSslCheck">
<property name="text">
<string>Игнорировать ошибки SSL</string>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="3" column="0">
<widget class="QLabel" name="label_9">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Максимальное время, которое может быть затрачено на перевод, чтобы он не считался &amp;quot;зависшим&amp;quot;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -405,14 +388,17 @@
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<item row="3" column="1" colspan="2">
<widget class="QSpinBox" name="translateTimeoutSpin">
<property name="suffix">
<string> сек.</string>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="4" column="1" colspan="2">
<widget class="QComboBox" name="translateLangCombo"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Язык, на который осуществляется перевод.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -425,10 +411,7 @@
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QComboBox" name="translateLangCombo"/>
</item>
<item row="3" column="0" colspan="3">
<item row="5" column="0" colspan="3">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Переводчики:</string>
@ -438,7 +421,7 @@
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<item row="6" column="0" colspan="3">
<widget class="QListWidget" name="translatorList">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображены в порядке убывания приоритета.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@ -454,6 +437,30 @@
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QCheckBox" name="translatorDebugCheck">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображает окно переводчика. Следует использовать только для разработки переводчиков.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Режим отладки</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="ignoreSslCheck">
<property name="text">
<string>Игнорировать ошибки SSL</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QCheckBox" name="forceRotateCheck">
<property name="text">
<string>Принудительно менять переводчики</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>

View File

@ -7,7 +7,7 @@
#include "Settings.h"
TranslatorHelper::TranslatorHelper ()
: translatorsDir_ ("translators"), currentIndex_ (0) {
: translatorsDir_ ("translators"), currentIndex_ (0), triesLeft_ (0) {
translatorsDir_ = QApplication::applicationDirPath () + QDir::separator () + translatorsDir_;
}
@ -58,19 +58,25 @@ void TranslatorHelper::loadScripts () {
scripts_ = enabledTranslatorScripts ();
}
void TranslatorHelper::newItem () {
currentIndex_ = 0;
}
QString TranslatorHelper::currentScript () const {
return (currentIndex_ < scripts_.size () ? scripts_.at (currentIndex_) : QString ());
void TranslatorHelper::newItem (bool forceRotate) {
triesLeft_ = scripts_.size ();
currentIndex_ = forceRotate ? currentIndex_ + 1 : 0;
}
QString TranslatorHelper::nextScript () {
++currentIndex_;
--triesLeft_;
if (++currentIndex_ >= scripts_.size ()) {
currentIndex_ = 0;
}
return currentScript ();
}
QString TranslatorHelper::currentScript () const {
return (triesLeft_ > 0 ? scripts_.at (currentIndex_) : QString ());
}
bool TranslatorHelper::gotScripts () const {
return !scripts_.isEmpty ();
}

View File

@ -13,15 +13,16 @@ class TranslatorHelper {
void setEnabledTranslators (const QStringList &enabled) const;
void loadScripts ();
void newItem ();
QString currentScript () const;
void newItem (bool forceRotate);
QString nextScript ();
QString currentScript () const;
bool gotScripts () const;
private:
QString translatorsDir_;
QStringList scripts_;
int currentIndex_;
int triesLeft_;
};
#endif // TRANSLATORHELPER_H

View File

@ -15,7 +15,8 @@ WebTranslator::WebTranslator ()
: QObject (),
proxy_ (new WebTranslatorProxy (this)), view_ (new QWebView),
translatorHelper_ (new TranslatorHelper), isReady_ (true),
ignoreSslErrors_ (settings_values::ignoreSslErrors){
ignoreSslErrors_ (settings_values::ignoreSslErrors),
forceRotateTranslators_ (settings_values::forceRotateTranslators) {
view_->settings ()->setAttribute (QWebSettings::AutoLoadImages, false);
view_->settings ()->setAttribute (QWebSettings::DeveloperExtrasEnabled, true);
@ -60,7 +61,7 @@ void WebTranslator::translate (ProcessingItem item) {
void WebTranslator::translateQueued () {
if (isReady_ && !queue_.isEmpty ()) {
translatorHelper_->newItem ();
translatorHelper_->newItem (forceRotateTranslators_);
proxy_->setItem (queue_.first ());
if (!tryNextTranslator (true)) {
return;
@ -145,7 +146,8 @@ void WebTranslator::applySettings () {
bool debugMode = GET (translationDebugMode).toBool ();
setDebugMode (debugMode);
ignoreSslErrors_ = GET(ignoreSslErrors).toBool ();
ignoreSslErrors_ = GET (ignoreSslErrors).toBool ();
forceRotateTranslators_ = GET (forceRotateTranslators).toBool ();
#undef GET
}

View File

@ -50,6 +50,7 @@ class WebTranslator : public QObject {
QVector<ProcessingItem> queue_;
bool isReady_;
bool ignoreSslErrors_;
bool forceRotateTranslators_;
QTimer translationTimeout_;
};

View File

@ -736,27 +736,27 @@ Key modifiers what capturing :
<translation>Result</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="50"/>
<location filename="../ResultDialog.cpp" line="49"/>
<source>Распознать другой язык</source>
<translation>Recognize another language</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="51"/>
<location filename="../ResultDialog.cpp" line="50"/>
<source>Перевести на другой язык</source>
<translation>Translate to another language</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="52"/>
<location filename="../ResultDialog.cpp" line="51"/>
<source>Скопировать в буфер</source>
<translation>Copy to clipboard</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="53"/>
<location filename="../ResultDialog.cpp" line="52"/>
<source>Скопировать рисунок в буфер</source>
<translation>Copy image to clibpoard</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="54"/>
<location filename="../ResultDialog.cpp" line="53"/>
<source>Исправить распознанный текст</source>
<translation>Correct recognized text</translation>
</message>
@ -846,7 +846,7 @@ Key modifiers what capturing :
</message>
<message>
<location filename="../SettingsEditor.ui" line="277"/>
<location filename="../SettingsEditor.cpp" line="154"/>
<location filename="../SettingsEditor.cpp" line="155"/>
<source>Путь к tessdata</source>
<translation>Tessdata path</translation>
</message>
@ -990,52 +990,57 @@ Key modifiers what capturing :
<translation>Translate text</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="384"/>
<location filename="../SettingsEditor.ui" line="443"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображает окно переводчика. Следует использовать только для разработки переводчиков.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Displays translator&apos;s window. Should me used only for new translators development.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="387"/>
<location filename="../SettingsEditor.ui" line="446"/>
<source>Режим отладки</source>
<translation>Debug mode</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="394"/>
<location filename="../SettingsEditor.ui" line="453"/>
<source>Игнорировать ошибки SSL</source>
<translation>Ignore SSL errors</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="401"/>
<location filename="../SettingsEditor.ui" line="460"/>
<source>Принудительно менять переводчики</source>
<translation>Force rotate translators</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="384"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Максимальное время, которое может быть затрачено на перевод, чтобы он не считался &amp;quot;зависшим&amp;quot;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Max time of translation process.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="404"/>
<location filename="../SettingsEditor.ui" line="387"/>
<source>Максимальное время перевода:</source>
<translation>Max translation time:</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="418"/>
<location filename="../SettingsEditor.ui" line="404"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Язык, на который осуществляется перевод.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Translated text language.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="421"/>
<location filename="../SettingsEditor.ui" line="407"/>
<source>Язык результата:</source>
<translation>Translation language:</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="434"/>
<location filename="../SettingsEditor.ui" line="417"/>
<source>Переводчики:</source>
<translation>Translators:</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="411"/>
<location filename="../SettingsEditor.ui" line="394"/>
<source> сек.</source>
<translation>secs.</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="444"/>
<location filename="../SettingsEditor.ui" line="427"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображены в порядке убывания приоритета.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Sorted by priority descending.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
@ -1451,17 +1456,17 @@ Change dirs permissions and try again or perform manual update.</translation>
<context>
<name>WebTranslator</name>
<message>
<location filename="../WebTranslator.cpp" line="88"/>
<location filename="../WebTranslator.cpp" line="92"/>
<source>Перевод отменен по таймауту.</source>
<translation>Translation timed out.</translation>
</message>
<message>
<location filename="../WebTranslator.cpp" line="96"/>
<location filename="../WebTranslator.cpp" line="100"/>
<source>Ошибка загрузки страницы (%1) для перевода.</source>
<translation>Page (%1) load failed.</translation>
</message>
<message>
<location filename="../WebTranslator.cpp" line="140"/>
<location filename="../WebTranslator.cpp" line="144"/>
<source>Нет сценариев для перевода. Измените настройки.</source>
<translation>Not found any translators. Change settings.</translation>
</message>

View File

@ -741,27 +741,27 @@
<translation>Результат</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="50"/>
<location filename="../ResultDialog.cpp" line="49"/>
<source>Распознать другой язык</source>
<translation>Распознать другой язык</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="51"/>
<location filename="../ResultDialog.cpp" line="50"/>
<source>Перевести на другой язык</source>
<translation>Перевести на другой язык</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="52"/>
<location filename="../ResultDialog.cpp" line="51"/>
<source>Скопировать в буфер</source>
<translation>Скопировать в буфер</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="53"/>
<location filename="../ResultDialog.cpp" line="52"/>
<source>Скопировать рисунок в буфер</source>
<translation>Скопировать рисунок в буфер</translation>
</message>
<message>
<location filename="../ResultDialog.cpp" line="54"/>
<location filename="../ResultDialog.cpp" line="53"/>
<source>Исправить распознанный текст</source>
<translation>Исправить распознанный текст</translation>
</message>
@ -851,7 +851,7 @@
</message>
<message>
<location filename="../SettingsEditor.ui" line="277"/>
<location filename="../SettingsEditor.cpp" line="154"/>
<location filename="../SettingsEditor.cpp" line="155"/>
<source>Путь к tessdata</source>
<translation>Путь к tessdata</translation>
</message>
@ -995,52 +995,57 @@
<translation>Переводить текст</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="384"/>
<location filename="../SettingsEditor.ui" line="443"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображает окно переводчика. Следует использовать только для разработки переводчиков.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображает окно переводчика. Следует использовать только для разработки переводчиков.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="387"/>
<location filename="../SettingsEditor.ui" line="446"/>
<source>Режим отладки</source>
<translation>Режим отладки</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="394"/>
<location filename="../SettingsEditor.ui" line="453"/>
<source>Игнорировать ошибки SSL</source>
<translation>Игнорировать ошибки SSL</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="401"/>
<location filename="../SettingsEditor.ui" line="460"/>
<source>Принудительно менять переводчики</source>
<translation>Принудительно менять переводчики</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="384"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Максимальное время, которое может быть затрачено на перевод, чтобы он не считался &amp;quot;зависшим&amp;quot;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Максимальное время, которое может быть затрачено на перевод, чтобы он не считался &amp;quot;зависшим&amp;quot;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="404"/>
<location filename="../SettingsEditor.ui" line="387"/>
<source>Максимальное время перевода:</source>
<translation>Максимальное время перевода:</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="418"/>
<location filename="../SettingsEditor.ui" line="404"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Язык, на который осуществляется перевод.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Язык, на который осуществляется перевод.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="421"/>
<location filename="../SettingsEditor.ui" line="407"/>
<source>Язык результата:</source>
<translation>Язык результата:</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="434"/>
<location filename="../SettingsEditor.ui" line="417"/>
<source>Переводчики:</source>
<translation>Переводчики:</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="411"/>
<location filename="../SettingsEditor.ui" line="394"/>
<source> сек.</source>
<translation> сек.</translation>
</message>
<message>
<location filename="../SettingsEditor.ui" line="444"/>
<location filename="../SettingsEditor.ui" line="427"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображены в порядке убывания приоритета.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Отображены в порядке убывания приоритета.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
@ -1460,17 +1465,17 @@
<context>
<name>WebTranslator</name>
<message>
<location filename="../WebTranslator.cpp" line="88"/>
<location filename="../WebTranslator.cpp" line="92"/>
<source>Перевод отменен по таймауту.</source>
<translation>Перевод отменен по таймауту.</translation>
</message>
<message>
<location filename="../WebTranslator.cpp" line="96"/>
<location filename="../WebTranslator.cpp" line="100"/>
<source>Ошибка загрузки страницы (%1) для перевода.</source>
<translation>Ошибка загрузки страницы (%1) для перевода.</translation>
</message>
<message>
<location filename="../WebTranslator.cpp" line="140"/>
<location filename="../WebTranslator.cpp" line="144"/>
<source>Нет сценариев для перевода. Измените настройки.</source>
<translation>Нет сценариев для перевода. Измените настройки.</translation>
</message>