Added the translator plug-in to the core plug-ins.

Sun, 10 Dec 2017 16:23:29 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 10 Dec 2017 16:23:29 +0100
changeset 6018
1c858879d3d0
parent 6017
dab01678626d
child 6019
58ecdaf0b789

Added the translator plug-in to the core plug-ins.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
APIs/Python3/eric6.bas file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.PluginTranslator.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.Translator.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.Translator.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.Plugins.html file | annotate | diff | comparison | revisions
Plugins/PluginTranslator.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/ConfigurationPage/__init__.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/Translator.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/__init__.py file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/deepl.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/glosbe.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/googlev1.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/googlev2.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/microsoft.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/mymemory.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/promt.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/engines/yandex.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flag.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/af.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ar.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/be.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/bg.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/bs.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ca.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/cs.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/da.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/de.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/el.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/en.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/es.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/et.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/fi.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/fr.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ga.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/gl.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/he.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/hi.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/hr.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/hu.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/id.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/is.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/it.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/iw.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ja.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ka.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ko.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/lt.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/lv.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/mk.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/mt.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/nl.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/no.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/pl.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/pt.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ro.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/ru.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/sk.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/sl.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/sq.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/sr.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/sv.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/th.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/tl.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/tr.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/uk.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/vi.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/zh-CN.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/flags/zh-TW.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/pronounce.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/swap.png file | annotate | diff | comparison | revisions
Plugins/UiExtensionPlugins/Translator/icons/translate.png file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
i18n/eric6_cs.qm file | annotate | diff | comparison | revisions
i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
i18n/eric6_de.qm file | annotate | diff | comparison | revisions
i18n/eric6_de.ts file | annotate | diff | comparison | revisions
i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
i18n/eric6_en.ts file | annotate | diff | comparison | revisions
i18n/eric6_es.qm file | annotate | diff | comparison | revisions
i18n/eric6_es.ts file | annotate | diff | comparison | revisions
i18n/eric6_fr.qm file | annotate | diff | comparison | revisions
i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
i18n/eric6_it.qm file | annotate | diff | comparison | revisions
i18n/eric6_it.ts file | annotate | diff | comparison | revisions
i18n/eric6_pt.qm file | annotate | diff | comparison | revisions
i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
i18n/eric6_ru.qm file | annotate | diff | comparison | revisions
i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
i18n/eric6_tr.qm file | annotate | diff | comparison | revisions
i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
i18n/eric6_zh_CN.qm file | annotate | diff | comparison | revisions
i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Sun Dec 10 14:51:54 2017 +0100
+++ b/APIs/Python3/eric6.api	Sun Dec 10 16:23:29 2017 +0100
@@ -4448,6 +4448,31 @@
 eric6.Plugins.PluginTabnanny.python2Compatible?7
 eric6.Plugins.PluginTabnanny.shortDescription?7
 eric6.Plugins.PluginTabnanny.version?7
+eric6.Plugins.PluginTranslator.TranslatorPlugin.PreferencesKey?7
+eric6.Plugins.PluginTranslator.TranslatorPlugin.activate?4()
+eric6.Plugins.PluginTranslator.TranslatorPlugin.deactivate?4()
+eric6.Plugins.PluginTranslator.TranslatorPlugin.getPreferences?4(key)
+eric6.Plugins.PluginTranslator.TranslatorPlugin.getPreferencesDefault?4(key)
+eric6.Plugins.PluginTranslator.TranslatorPlugin.setPreferences?4(key, value)
+eric6.Plugins.PluginTranslator.TranslatorPlugin.updateLanguages?7
+eric6.Plugins.PluginTranslator.TranslatorPlugin?1(ui)
+eric6.Plugins.PluginTranslator.author?7
+eric6.Plugins.PluginTranslator.autoactivate?7
+eric6.Plugins.PluginTranslator.className?7
+eric6.Plugins.PluginTranslator.createTranslatorPage?4(configDlg)
+eric6.Plugins.PluginTranslator.deactivateable?7
+eric6.Plugins.PluginTranslator.error?7
+eric6.Plugins.PluginTranslator.getConfigData?4()
+eric6.Plugins.PluginTranslator.longDescription?7
+eric6.Plugins.PluginTranslator.name?7
+eric6.Plugins.PluginTranslator.needsRestart?7
+eric6.Plugins.PluginTranslator.packageName?7
+eric6.Plugins.PluginTranslator.prepareUninstall?4()
+eric6.Plugins.PluginTranslator.pyqtApi?7
+eric6.Plugins.PluginTranslator.python2Compatible?7
+eric6.Plugins.PluginTranslator.shortDescription?7
+eric6.Plugins.PluginTranslator.translatorPluginObject?7
+eric6.Plugins.PluginTranslator.version?7
 eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.MercurialDefaults?7
 eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.activate?4()
 eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.deactivate?4()
@@ -4850,6 +4875,96 @@
 eric6.Plugins.UiExtensionPlugins.PipInterface.PipSearchDialog.PipSearchDialog.on_searchButton_clicked?4()
 eric6.Plugins.UiExtensionPlugins.PipInterface.PipSearchDialog.PipSearchDialog.on_searchEdit_textChanged?4(txt)
 eric6.Plugins.UiExtensionPlugins.PipInterface.PipSearchDialog.PipSearchDialog?1(pip, plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.TranslatorPage.on_defaultButton_clicked?4()
+eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.TranslatorPage.on_languagesList_itemChanged?4(item)
+eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.TranslatorPage.on_setButton_clicked?4()
+eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.TranslatorPage.save?4()
+eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.TranslatorPage?1(plugin)
+eric6.Plugins.UiExtensionPlugins.Translator.Translator.Translator.activate?4()
+eric6.Plugins.UiExtensionPlugins.Translator.Translator.Translator.deactivate?4()
+eric6.Plugins.UiExtensionPlugins.Translator.Translator.Translator.getAppIcon?4(name)
+eric6.Plugins.UiExtensionPlugins.Translator.Translator.Translator?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.DeepLEngine.MaxTranslationTextLen?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.DeepLEngine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.DeepLEngine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.DeepLEngine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.DeepLEngine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.DeepLEngine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.GlosbeEngine.TranslatorLimit?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.GlosbeEngine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.GlosbeEngine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.GlosbeEngine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.GlosbeEngine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.GlosbeEngine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.TextToSpeechLimit?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.TextToSpeechUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.getTextToSpeechData?4(requestObject, text, language)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.hasTTS?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.GoogleV1Engine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.GoogleV2Engine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.GoogleV2Engine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.GoogleV2Engine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.GoogleV2Engine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.GoogleV2Engine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.AccessTokenUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.TextToSpeechUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.getTextToSpeechData?4(requestObject, text, language)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.hasTTS?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.MicrosoftEngine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.MyMemoryEngine.TranslatorLimit?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.MyMemoryEngine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.MyMemoryEngine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.MyMemoryEngine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.MyMemoryEngine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.MyMemoryEngine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.PromtEngine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.PromtEngine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.PromtEngine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.PromtEngine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.PromtEngine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.TranslationEngine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.TranslationEngine.getTextToSpeechData?4(requestObject, text, language)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.TranslationEngine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.TranslationEngine.hasTTS?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.TranslationEngine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.TranslationEngine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.YandexEngine.TranslatorLimit?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.YandexEngine.TranslatorUrl?7
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.YandexEngine.engineName?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.YandexEngine.getTranslation?4(requestObject, text, originalLanguage, translationLanguage)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.YandexEngine.supportedLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.YandexEngine?1(plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.engineDisplayName?4(name)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.getEngineIcon?4(name)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.getKeyUrl?4(name)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.getTranslationEngine?4(name, plugin, parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.supportedEngineNames?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.TranslatorLanguagesDb.convertTwoToThree?4(code)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.TranslatorLanguagesDb.getAllLanguages?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.TranslatorLanguagesDb.getLanguage?4(code)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.TranslatorLanguagesDb.getLanguageIcon?4(code)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.TranslatorLanguagesDb?1(parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.TranslatorRequest.get?4(requestUrl, extraHeaders=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.TranslatorRequest.post?4(requestUrl, requestData, dataType="form", extraHeaders=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.TranslatorRequest?1(parent=None)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_clearButton_clicked?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_origEdit_textChanged?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_origLanguageComboBox_currentIndexChanged?4(index)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_pronounceOrigButton_clicked?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_pronounceTransButton_clicked?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_swapButton_clicked?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_transEdit_textChanged?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_transLanguageComboBox_currentIndexChanged?4(index)
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_translateButton_clicked?4()
+eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget?1(plugin, translator, parent=None)
 eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.getData?4()
 eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_extraSearchPathButton_clicked?4()
 eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_pythonExecButton_clicked?4()
--- a/APIs/Python3/eric6.bas	Sun Dec 10 14:51:54 2017 +0100
+++ b/APIs/Python3/eric6.bas	Sun Dec 10 16:23:29 2017 +0100
@@ -125,6 +125,7 @@
 DebuggerPropertiesWriter XMLStreamWriterBase
 DebuggerPython3Page ConfigurationPageBase Ui_DebuggerPython3Page
 DebuggerPythonPage ConfigurationPageBase Ui_DebuggerPythonPage
+DeepLEngine TranslationEngine
 DefaultResolver BaseResolver
 DelayedFileWatcher QFileSystemWatcher
 DeleteFilesConfirmationDialog QDialog Ui_DeleteFilesConfirmationDialog
@@ -302,6 +303,9 @@
 FtpReply QNetworkReply
 FtpSyncHandler SyncHandler
 Function ClbrBaseClasses.Function VisibilityMixin
+GlosbeEngine TranslationEngine
+GoogleV1Engine TranslationEngine
+GoogleV2Engine TranslationEngine
 GotoDialog QDialog Ui_GotoDialog
 Gpg HgExtension
 GpgProjectHelper HgExtensionProjectHelper
@@ -526,6 +530,7 @@
 Message ClbrBaseClasses.Module VisibilityMixin
 MessageBoxWizard QObject
 MessageBoxWizardDialog QDialog Ui_MessageBoxWizardDialog
+MicrosoftEngine TranslationEngine
 MimeTypesPage ConfigurationPageBase Ui_MimeTypesPage
 MiniEditor E5MainWindow
 MiniScintilla QsciScintillaCompat
@@ -539,6 +544,7 @@
 MultiProjectReader XMLStreamReaderBase
 MultiProjectWriter XMLStreamWriterBase
 MultiValueDictResolver DictResolver
+MyMemoryEngine TranslationEngine
 NannyNag Exception
 NavigationBar QWidget
 NavigationContainer QWidget
@@ -653,6 +659,7 @@
 ProjectTaskExtractionThread QThread
 ProjectTranslationsBrowser ProjectBaseBrowser
 ProjectWriter XMLStreamWriterBase
+PromtEngine TranslationEngine
 PropertiesDialog QDialog Ui_PropertiesDialog
 ProtobufPage ConfigurationPageBase Ui_ProtobufPage
 Purge HgExtension
@@ -849,8 +856,15 @@
 Token str
 ToolConfigurationDialog QDialog Ui_ToolConfigurationDialog
 ToolGroupConfigurationDialog QDialog Ui_ToolGroupConfigurationDialog
+TranslationEngine QObject
 TranslationPropertiesDialog QDialog Ui_TranslationPropertiesDialog
 TranslationsDict QObject
+Translator QObject
+TranslatorLanguagesDb QObject
+TranslatorPage ConfigurationPageBase Ui_TranslatorPage
+TranslatorPlugin QObject
+TranslatorRequest QObject
+TranslatorWidget QWidget Ui_TranslatorWidget
 TrayStarter QSystemTrayIcon
 TrayStarterPage ConfigurationPageBase Ui_TrayStarterPage
 UIPreviewer E5MainWindow
@@ -935,6 +949,7 @@
 XbelReader QXmlStreamReader
 XbelWriter QXmlStreamWriter
 XmlEntityResolver QXmlStreamEntityResolver
+YandexEngine TranslationEngine
 ZoomDialog QDialog Ui_ZoomDialog
 ZoomManager QObject
 ZoomValuesDialog QDialog Ui_ZoomValuesDialog
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sun Dec 10 14:51:54 2017 +0100
+++ b/Documentation/Help/source.qhp	Sun Dec 10 16:23:29 2017 +0100
@@ -527,6 +527,27 @@
                 <section title="eric6.Plugins.UiExtensionPlugins.PipInterface.PipRequirementsSelectionDialog" ref="eric6.Plugins.UiExtensionPlugins.PipInterface.PipRequirementsSelectionDialog.html" />
                 <section title="eric6.Plugins.UiExtensionPlugins.PipInterface.PipSearchDialog" ref="eric6.Plugins.UiExtensionPlugins.PipInterface.PipSearchDialog.html" />
               </section>
+              <section title="eric6.Plugins.UiExtensionPlugins.Translator" ref="index-eric6.Plugins.UiExtensionPlugins.Translator.html">
+                <section title="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage" ref="index-eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.html">
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html" />
+                </section>
+                <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines" ref="index-eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.html">
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html" />
+                  <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html" />
+                </section>
+                <section title="eric6.Plugins.UiExtensionPlugins.Translator.Translator" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html" />
+                <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html" />
+                <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html" />
+                <section title="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html" />
+              </section>
               <section title="eric6.Plugins.UiExtensionPlugins.VirtualenvInterface" ref="index-eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.html">
                 <section title="eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvConfigurationDialog" ref="eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvConfigurationDialog.html" />
                 <section title="eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvExecDialog" ref="eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvExecDialog.html" />
@@ -786,6 +807,7 @@
             <section title="eric6.Plugins.PluginPipInterface" ref="eric6.Plugins.PluginPipInterface.html" />
             <section title="eric6.Plugins.PluginSyntaxChecker" ref="eric6.Plugins.PluginSyntaxChecker.html" />
             <section title="eric6.Plugins.PluginTabnanny" ref="eric6.Plugins.PluginTabnanny.html" />
+            <section title="eric6.Plugins.PluginTranslator" ref="eric6.Plugins.PluginTranslator.html" />
             <section title="eric6.Plugins.PluginVcsMercurial" ref="eric6.Plugins.PluginVcsMercurial.html" />
             <section title="eric6.Plugins.PluginVcsPySvn" ref="eric6.Plugins.PluginVcsPySvn.html" />
             <section title="eric6.Plugins.PluginVcsSubversion" ref="eric6.Plugins.PluginVcsSubversion.html" />
@@ -3117,6 +3139,7 @@
       <keyword name="ConfigurationDialog.setPreferences" id="ConfigurationDialog.setPreferences" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.setPreferences" />
       <keyword name="ConfigurationDialog.showConfigurationPageByName" id="ConfigurationDialog.showConfigurationPageByName" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.showConfigurationPageByName" />
       <keyword name="ConfigurationPage (Package)" id="ConfigurationPage (Package)" ref="index-eric6.Plugins.UiExtensionPlugins.PipInterface.ConfigurationPage.html" />
+      <keyword name="ConfigurationPage (Package)" id="ConfigurationPage (Package)" ref="index-eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.html" />
       <keyword name="ConfigurationPage (Package)" id="ConfigurationPage (Package)" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html" />
       <keyword name="ConfigurationPage (Package)" id="ConfigurationPage (Package)" ref="index-eric6.Plugins.VcsPlugins.vcsPySvn.ConfigurationPage.html" />
       <keyword name="ConfigurationPage (Package)" id="ConfigurationPage (Package)" ref="index-eric6.Plugins.VcsPlugins.vcsSubversion.ConfigurationPage.html" />
@@ -3831,6 +3854,12 @@
       <keyword name="DebuggerPythonPage (Constructor)" id="DebuggerPythonPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.DebuggerPythonPage.html#DebuggerPythonPage.__init__" />
       <keyword name="DebuggerPythonPage (Module)" id="DebuggerPythonPage (Module)" ref="eric6.Preferences.ConfigurationPages.DebuggerPythonPage.html" />
       <keyword name="DebuggerPythonPage.save" id="DebuggerPythonPage.save" ref="eric6.Preferences.ConfigurationPages.DebuggerPythonPage.html#DebuggerPythonPage.save" />
+      <keyword name="DeepLEngine" id="DeepLEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine" />
+      <keyword name="DeepLEngine (Constructor)" id="DeepLEngine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.__init__" />
+      <keyword name="DeepLEngine (Module)" id="DeepLEngine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html" />
+      <keyword name="DeepLEngine.engineName" id="DeepLEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.engineName" />
+      <keyword name="DeepLEngine.getTranslation" id="DeepLEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.getTranslation" />
+      <keyword name="DeepLEngine.supportedLanguages" id="DeepLEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.supportedLanguages" />
       <keyword name="DefaultResolver" id="DefaultResolver" ref="eric6.DebugClients.Python.DebugVariables.html#DefaultResolver" />
       <keyword name="DefaultResolver.getDictionary" id="DefaultResolver.getDictionary" ref="eric6.DebugClients.Python.DebugVariables.html#DefaultResolver.getDictionary" />
       <keyword name="DefaultResolver.resolve" id="DefaultResolver.resolve" ref="eric6.DebugClients.Python.DebugVariables.html#DefaultResolver.resolve" />
@@ -6286,8 +6315,28 @@
       <keyword name="Function.addDescription" id="Function.addDescription" ref="eric6.Utilities.ModuleParser.html#Function.addDescription" />
       <keyword name="Function.setEndLine" id="Function.setEndLine" ref="eric6.Utilities.ModuleParser.html#Function.setEndLine" />
       <keyword name="Globals (Package)" id="Globals (Package)" ref="index-eric6.Globals.html" />
+      <keyword name="GlosbeEngine" id="GlosbeEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html#GlosbeEngine" />
+      <keyword name="GlosbeEngine (Constructor)" id="GlosbeEngine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html#GlosbeEngine.__init__" />
+      <keyword name="GlosbeEngine (Module)" id="GlosbeEngine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html" />
+      <keyword name="GlosbeEngine.engineName" id="GlosbeEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html#GlosbeEngine.engineName" />
+      <keyword name="GlosbeEngine.getTranslation" id="GlosbeEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html#GlosbeEngine.getTranslation" />
+      <keyword name="GlosbeEngine.supportedLanguages" id="GlosbeEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html#GlosbeEngine.supportedLanguages" />
       <keyword name="GoogleMailHelp" id="GoogleMailHelp" ref="eric6.E5Network.E5GoogleMail.html#GoogleMailHelp" />
       <keyword name="GoogleMailSendMessage" id="GoogleMailSendMessage" ref="eric6.E5Network.E5GoogleMail.html#GoogleMailSendMessage" />
+      <keyword name="GoogleV1Engine" id="GoogleV1Engine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine" />
+      <keyword name="GoogleV1Engine (Constructor)" id="GoogleV1Engine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine.__init__" />
+      <keyword name="GoogleV1Engine (Module)" id="GoogleV1Engine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html" />
+      <keyword name="GoogleV1Engine.engineName" id="GoogleV1Engine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine.engineName" />
+      <keyword name="GoogleV1Engine.getTextToSpeechData" id="GoogleV1Engine.getTextToSpeechData" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine.getTextToSpeechData" />
+      <keyword name="GoogleV1Engine.getTranslation" id="GoogleV1Engine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine.getTranslation" />
+      <keyword name="GoogleV1Engine.hasTTS" id="GoogleV1Engine.hasTTS" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine.hasTTS" />
+      <keyword name="GoogleV1Engine.supportedLanguages" id="GoogleV1Engine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine.supportedLanguages" />
+      <keyword name="GoogleV2Engine" id="GoogleV2Engine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine" />
+      <keyword name="GoogleV2Engine (Constructor)" id="GoogleV2Engine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine.__init__" />
+      <keyword name="GoogleV2Engine (Module)" id="GoogleV2Engine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html" />
+      <keyword name="GoogleV2Engine.engineName" id="GoogleV2Engine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine.engineName" />
+      <keyword name="GoogleV2Engine.getTranslation" id="GoogleV2Engine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine.getTranslation" />
+      <keyword name="GoogleV2Engine.supportedLanguages" id="GoogleV2Engine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine.supportedLanguages" />
       <keyword name="GotoDialog" id="GotoDialog" ref="eric6.QScintilla.GotoDialog.html#GotoDialog" />
       <keyword name="GotoDialog (Constructor)" id="GotoDialog (Constructor)" ref="eric6.QScintilla.GotoDialog.html#GotoDialog.__init__" />
       <keyword name="GotoDialog (Module)" id="GotoDialog (Module)" ref="eric6.QScintilla.GotoDialog.html" />
@@ -9867,6 +9916,17 @@
       <keyword name="MessageBoxWizardDialog.on_buttonBox_clicked" id="MessageBoxWizardDialog.on_buttonBox_clicked" ref="eric6.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.html#MessageBoxWizardDialog.on_buttonBox_clicked" />
       <keyword name="MessageBoxWizardDialog.on_rAboutQt_toggled" id="MessageBoxWizardDialog.on_rAboutQt_toggled" ref="eric6.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.html#MessageBoxWizardDialog.on_rAboutQt_toggled" />
       <keyword name="MessageBoxWizardDialog.on_rAbout_toggled" id="MessageBoxWizardDialog.on_rAbout_toggled" ref="eric6.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.html#MessageBoxWizardDialog.on_rAbout_toggled" />
+      <keyword name="MicrosoftEngine" id="MicrosoftEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine" />
+      <keyword name="MicrosoftEngine (Constructor)" id="MicrosoftEngine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.__init__" />
+      <keyword name="MicrosoftEngine (Module)" id="MicrosoftEngine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html" />
+      <keyword name="MicrosoftEngine.__getAccessToken" id="MicrosoftEngine.__getAccessToken" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.__getAccessToken" />
+      <keyword name="MicrosoftEngine.__getClientDataAzure" id="MicrosoftEngine.__getClientDataAzure" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.__getClientDataAzure" />
+      <keyword name="MicrosoftEngine.__mapLanguageCode" id="MicrosoftEngine.__mapLanguageCode" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.__mapLanguageCode" />
+      <keyword name="MicrosoftEngine.engineName" id="MicrosoftEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.engineName" />
+      <keyword name="MicrosoftEngine.getTextToSpeechData" id="MicrosoftEngine.getTextToSpeechData" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.getTextToSpeechData" />
+      <keyword name="MicrosoftEngine.getTranslation" id="MicrosoftEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.getTranslation" />
+      <keyword name="MicrosoftEngine.hasTTS" id="MicrosoftEngine.hasTTS" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.hasTTS" />
+      <keyword name="MicrosoftEngine.supportedLanguages" id="MicrosoftEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html#MicrosoftEngine.supportedLanguages" />
       <keyword name="MimeTypes (Module)" id="MimeTypes (Module)" ref="eric6.Utilities.MimeTypes.html" />
       <keyword name="MimeTypesPage" id="MimeTypesPage" ref="eric6.Preferences.ConfigurationPages.MimeTypesPage.html#MimeTypesPage" />
       <keyword name="MimeTypesPage (Constructor)" id="MimeTypesPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.MimeTypesPage.html#MimeTypesPage.__init__" />
@@ -10135,6 +10195,12 @@
       <keyword name="MultiValueDictResolver" id="MultiValueDictResolver" ref="eric6.DebugClients.Python.DebugVariables.html#MultiValueDictResolver" />
       <keyword name="MultiValueDictResolver.getDictionary" id="MultiValueDictResolver.getDictionary" ref="eric6.DebugClients.Python.DebugVariables.html#MultiValueDictResolver.getDictionary" />
       <keyword name="MultiValueDictResolver.resolve" id="MultiValueDictResolver.resolve" ref="eric6.DebugClients.Python.DebugVariables.html#MultiValueDictResolver.resolve" />
+      <keyword name="MyMemoryEngine" id="MyMemoryEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine" />
+      <keyword name="MyMemoryEngine (Constructor)" id="MyMemoryEngine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.__init__" />
+      <keyword name="MyMemoryEngine (Module)" id="MyMemoryEngine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html" />
+      <keyword name="MyMemoryEngine.engineName" id="MyMemoryEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.engineName" />
+      <keyword name="MyMemoryEngine.getTranslation" id="MyMemoryEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.getTranslation" />
+      <keyword name="MyMemoryEngine.supportedLanguages" id="MyMemoryEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.supportedLanguages" />
       <keyword name="NamingStyleChecker" id="NamingStyleChecker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html#NamingStyleChecker" />
       <keyword name="NamingStyleChecker (Constructor)" id="NamingStyleChecker (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html#NamingStyleChecker.__init__" />
       <keyword name="NamingStyleChecker (Module)" id="NamingStyleChecker (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html" />
@@ -11230,6 +11296,7 @@
       <keyword name="PluginRepositoryWindow.__startPluginInstall" id="PluginRepositoryWindow.__startPluginInstall" ref="eric6.PluginManager.PluginRepositoryDialog.html#PluginRepositoryWindow.__startPluginInstall" />
       <keyword name="PluginSyntaxChecker (Module)" id="PluginSyntaxChecker (Module)" ref="eric6.Plugins.PluginSyntaxChecker.html" />
       <keyword name="PluginTabnanny (Module)" id="PluginTabnanny (Module)" ref="eric6.Plugins.PluginTabnanny.html" />
+      <keyword name="PluginTranslator (Module)" id="PluginTranslator (Module)" ref="eric6.Plugins.PluginTranslator.html" />
       <keyword name="PluginUninstallDialog" id="PluginUninstallDialog" ref="eric6.PluginManager.PluginUninstallDialog.html#PluginUninstallDialog" />
       <keyword name="PluginUninstallDialog (Constructor)" id="PluginUninstallDialog (Constructor)" ref="eric6.PluginManager.PluginUninstallDialog.html#PluginUninstallDialog.__init__" />
       <keyword name="PluginUninstallDialog (Module)" id="PluginUninstallDialog (Module)" ref="eric6.PluginManager.PluginUninstallDialog.html" />
@@ -11900,6 +11967,12 @@
       <keyword name="ProjectWriter (Constructor)" id="ProjectWriter (Constructor)" ref="eric6.E5XML.ProjectWriter.html#ProjectWriter.__init__" />
       <keyword name="ProjectWriter (Module)" id="ProjectWriter (Module)" ref="eric6.E5XML.ProjectWriter.html" />
       <keyword name="ProjectWriter.writeXML" id="ProjectWriter.writeXML" ref="eric6.E5XML.ProjectWriter.html#ProjectWriter.writeXML" />
+      <keyword name="PromtEngine" id="PromtEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html#PromtEngine" />
+      <keyword name="PromtEngine (Constructor)" id="PromtEngine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html#PromtEngine.__init__" />
+      <keyword name="PromtEngine (Module)" id="PromtEngine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html" />
+      <keyword name="PromtEngine.engineName" id="PromtEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html#PromtEngine.engineName" />
+      <keyword name="PromtEngine.getTranslation" id="PromtEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html#PromtEngine.getTranslation" />
+      <keyword name="PromtEngine.supportedLanguages" id="PromtEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html#PromtEngine.supportedLanguages" />
       <keyword name="PropertiesDialog" id="PropertiesDialog" ref="eric6.MultiProject.PropertiesDialog.html#PropertiesDialog" />
       <keyword name="PropertiesDialog" id="PropertiesDialog" ref="eric6.Project.PropertiesDialog.html#PropertiesDialog" />
       <keyword name="PropertiesDialog (Constructor)" id="PropertiesDialog (Constructor)" ref="eric6.MultiProject.PropertiesDialog.html#PropertiesDialog.__init__" />
@@ -15086,6 +15159,14 @@
       <keyword name="Tools (Package)" id="Tools (Package)" ref="index-eric6.WebBrowser.Tools.html" />
       <keyword name="Translation" id="Translation" ref="eric6.Tools.TRPreviewer.html#Translation" />
       <keyword name="Translation (Constructor)" id="Translation (Constructor)" ref="eric6.Tools.TRPreviewer.html#Translation.__init__" />
+      <keyword name="TranslationEngine" id="TranslationEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html#TranslationEngine" />
+      <keyword name="TranslationEngine (Constructor)" id="TranslationEngine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html#TranslationEngine.__init__" />
+      <keyword name="TranslationEngine (Module)" id="TranslationEngine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html" />
+      <keyword name="TranslationEngine.engineName" id="TranslationEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html#TranslationEngine.engineName" />
+      <keyword name="TranslationEngine.getTextToSpeechData" id="TranslationEngine.getTextToSpeechData" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html#TranslationEngine.getTextToSpeechData" />
+      <keyword name="TranslationEngine.getTranslation" id="TranslationEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html#TranslationEngine.getTranslation" />
+      <keyword name="TranslationEngine.hasTTS" id="TranslationEngine.hasTTS" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html#TranslationEngine.hasTTS" />
+      <keyword name="TranslationEngine.supportedLanguages" id="TranslationEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html#TranslationEngine.supportedLanguages" />
       <keyword name="TranslationPropertiesDialog" id="TranslationPropertiesDialog" ref="eric6.Project.TranslationPropertiesDialog.html#TranslationPropertiesDialog" />
       <keyword name="TranslationPropertiesDialog (Constructor)" id="TranslationPropertiesDialog (Constructor)" ref="eric6.Project.TranslationPropertiesDialog.html#TranslationPropertiesDialog.__init__" />
       <keyword name="TranslationPropertiesDialog (Module)" id="TranslationPropertiesDialog (Module)" ref="eric6.Project.TranslationPropertiesDialog.html" />
@@ -15114,6 +15195,65 @@
       <keyword name="TranslationsDict.loadTransFile" id="TranslationsDict.loadTransFile" ref="eric6.Tools.TRPreviewer.html#TranslationsDict.loadTransFile" />
       <keyword name="TranslationsDict.reload" id="TranslationsDict.reload" ref="eric6.Tools.TRPreviewer.html#TranslationsDict.reload" />
       <keyword name="TranslationsDict.set" id="TranslationsDict.set" ref="eric6.Tools.TRPreviewer.html#TranslationsDict.set" />
+      <keyword name="Translator" id="Translator" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html#Translator" />
+      <keyword name="Translator (Constructor)" id="Translator (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html#Translator.__init__" />
+      <keyword name="Translator (Module)" id="Translator (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html" />
+      <keyword name="Translator (Package)" id="Translator (Package)" ref="index-eric6.Plugins.UiExtensionPlugins.Translator.html" />
+      <keyword name="Translator.__activateWidget" id="Translator.__activateWidget" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html#Translator.__activateWidget" />
+      <keyword name="Translator.activate" id="Translator.activate" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html#Translator.activate" />
+      <keyword name="Translator.deactivate" id="Translator.deactivate" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html#Translator.deactivate" />
+      <keyword name="Translator.getAppIcon" id="Translator.getAppIcon" ref="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html#Translator.getAppIcon" />
+      <keyword name="TranslatorEngines (Package)" id="TranslatorEngines (Package)" ref="index-eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.html" />
+      <keyword name="TranslatorLanguagesDb" id="TranslatorLanguagesDb" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html#TranslatorLanguagesDb" />
+      <keyword name="TranslatorLanguagesDb (Constructor)" id="TranslatorLanguagesDb (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html#TranslatorLanguagesDb.__init__" />
+      <keyword name="TranslatorLanguagesDb (Module)" id="TranslatorLanguagesDb (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html" />
+      <keyword name="TranslatorLanguagesDb.convertTwoToThree" id="TranslatorLanguagesDb.convertTwoToThree" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html#TranslatorLanguagesDb.convertTwoToThree" />
+      <keyword name="TranslatorLanguagesDb.getAllLanguages" id="TranslatorLanguagesDb.getAllLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html#TranslatorLanguagesDb.getAllLanguages" />
+      <keyword name="TranslatorLanguagesDb.getLanguage" id="TranslatorLanguagesDb.getLanguage" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html#TranslatorLanguagesDb.getLanguage" />
+      <keyword name="TranslatorLanguagesDb.getLanguageIcon" id="TranslatorLanguagesDb.getLanguageIcon" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html#TranslatorLanguagesDb.getLanguageIcon" />
+      <keyword name="TranslatorPage" id="TranslatorPage" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html#TranslatorPage" />
+      <keyword name="TranslatorPage (Constructor)" id="TranslatorPage (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html#TranslatorPage.__init__" />
+      <keyword name="TranslatorPage (Module)" id="TranslatorPage (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html" />
+      <keyword name="TranslatorPage.__checkedLanguageItems" id="TranslatorPage.__checkedLanguageItems" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html#TranslatorPage.__checkedLanguageItems" />
+      <keyword name="TranslatorPage.on_defaultButton_clicked" id="TranslatorPage.on_defaultButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html#TranslatorPage.on_defaultButton_clicked" />
+      <keyword name="TranslatorPage.on_languagesList_itemChanged" id="TranslatorPage.on_languagesList_itemChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html#TranslatorPage.on_languagesList_itemChanged" />
+      <keyword name="TranslatorPage.on_setButton_clicked" id="TranslatorPage.on_setButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html#TranslatorPage.on_setButton_clicked" />
+      <keyword name="TranslatorPage.save" id="TranslatorPage.save" ref="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html#TranslatorPage.save" />
+      <keyword name="TranslatorPlugin" id="TranslatorPlugin" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin" />
+      <keyword name="TranslatorPlugin (Constructor)" id="TranslatorPlugin (Constructor)" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin.__init__" />
+      <keyword name="TranslatorPlugin.__initialize" id="TranslatorPlugin.__initialize" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin.__initialize" />
+      <keyword name="TranslatorPlugin.activate" id="TranslatorPlugin.activate" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin.activate" />
+      <keyword name="TranslatorPlugin.deactivate" id="TranslatorPlugin.deactivate" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin.deactivate" />
+      <keyword name="TranslatorPlugin.getPreferences" id="TranslatorPlugin.getPreferences" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin.getPreferences" />
+      <keyword name="TranslatorPlugin.getPreferencesDefault" id="TranslatorPlugin.getPreferencesDefault" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin.getPreferencesDefault" />
+      <keyword name="TranslatorPlugin.setPreferences" id="TranslatorPlugin.setPreferences" ref="eric6.Plugins.PluginTranslator.html#TranslatorPlugin.setPreferences" />
+      <keyword name="TranslatorRequest" id="TranslatorRequest" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html#TranslatorRequest" />
+      <keyword name="TranslatorRequest (Constructor)" id="TranslatorRequest (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html#TranslatorRequest.__init__" />
+      <keyword name="TranslatorRequest (Module)" id="TranslatorRequest (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html" />
+      <keyword name="TranslatorRequest.get" id="TranslatorRequest.get" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html#TranslatorRequest.get" />
+      <keyword name="TranslatorRequest.post" id="TranslatorRequest.post" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html#TranslatorRequest.post" />
+      <keyword name="TranslatorWidget" id="TranslatorWidget" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget" />
+      <keyword name="TranslatorWidget (Constructor)" id="TranslatorWidget (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__init__" />
+      <keyword name="TranslatorWidget (Module)" id="TranslatorWidget (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html" />
+      <keyword name="TranslatorWidget.__engineComboBoxCurrentIndexChanged" id="TranslatorWidget.__engineComboBoxCurrentIndexChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__engineComboBoxCurrentIndexChanged" />
+      <keyword name="TranslatorWidget.__mediaPlayerStateChanged" id="TranslatorWidget.__mediaPlayerStateChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__mediaPlayerStateChanged" />
+      <keyword name="TranslatorWidget.__originalLanguage" id="TranslatorWidget.__originalLanguage" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__originalLanguage" />
+      <keyword name="TranslatorWidget.__pronounce" id="TranslatorWidget.__pronounce" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__pronounce" />
+      <keyword name="TranslatorWidget.__translate" id="TranslatorWidget.__translate" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__translate" />
+      <keyword name="TranslatorWidget.__translationLanguage" id="TranslatorWidget.__translationLanguage" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__translationLanguage" />
+      <keyword name="TranslatorWidget.__updateClearButton" id="TranslatorWidget.__updateClearButton" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__updateClearButton" />
+      <keyword name="TranslatorWidget.__updateEngines" id="TranslatorWidget.__updateEngines" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__updateEngines" />
+      <keyword name="TranslatorWidget.__updateLanguages" id="TranslatorWidget.__updateLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__updateLanguages" />
+      <keyword name="TranslatorWidget.__updatePronounceButtons" id="TranslatorWidget.__updatePronounceButtons" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.__updatePronounceButtons" />
+      <keyword name="TranslatorWidget.on_clearButton_clicked" id="TranslatorWidget.on_clearButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_clearButton_clicked" />
+      <keyword name="TranslatorWidget.on_origEdit_textChanged" id="TranslatorWidget.on_origEdit_textChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_origEdit_textChanged" />
+      <keyword name="TranslatorWidget.on_origLanguageComboBox_currentIndexChanged" id="TranslatorWidget.on_origLanguageComboBox_currentIndexChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_origLanguageComboBox_currentIndexChanged" />
+      <keyword name="TranslatorWidget.on_pronounceOrigButton_clicked" id="TranslatorWidget.on_pronounceOrigButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_pronounceOrigButton_clicked" />
+      <keyword name="TranslatorWidget.on_pronounceTransButton_clicked" id="TranslatorWidget.on_pronounceTransButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_pronounceTransButton_clicked" />
+      <keyword name="TranslatorWidget.on_swapButton_clicked" id="TranslatorWidget.on_swapButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_swapButton_clicked" />
+      <keyword name="TranslatorWidget.on_transEdit_textChanged" id="TranslatorWidget.on_transEdit_textChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_transEdit_textChanged" />
+      <keyword name="TranslatorWidget.on_transLanguageComboBox_currentIndexChanged" id="TranslatorWidget.on_transLanguageComboBox_currentIndexChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_transLanguageComboBox_currentIndexChanged" />
+      <keyword name="TranslatorWidget.on_translateButton_clicked" id="TranslatorWidget.on_translateButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_translateButton_clicked" />
       <keyword name="TrayStarter" id="TrayStarter" ref="eric6.Tools.TrayStarter.html#TrayStarter" />
       <keyword name="TrayStarter (Constructor)" id="TrayStarter (Constructor)" ref="eric6.Tools.TrayStarter.html#TrayStarter.__init__" />
       <keyword name="TrayStarter (Module)" id="TrayStarter (Module)" ref="eric6.Tools.TrayStarter.html" />
@@ -17038,6 +17178,12 @@
       <keyword name="XmlEntityResolver" id="XmlEntityResolver" ref="eric6.WebBrowser.Bookmarks.XbelReader.html#XmlEntityResolver" />
       <keyword name="XmlEntityResolver.resolveUndeclaredEntity" id="XmlEntityResolver.resolveUndeclaredEntity" ref="eric6.Helpviewer.Bookmarks.XbelReader.html#XmlEntityResolver.resolveUndeclaredEntity" />
       <keyword name="XmlEntityResolver.resolveUndeclaredEntity" id="XmlEntityResolver.resolveUndeclaredEntity" ref="eric6.WebBrowser.Bookmarks.XbelReader.html#XmlEntityResolver.resolveUndeclaredEntity" />
+      <keyword name="YandexEngine" id="YandexEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html#YandexEngine" />
+      <keyword name="YandexEngine (Constructor)" id="YandexEngine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html#YandexEngine.__init__" />
+      <keyword name="YandexEngine (Module)" id="YandexEngine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html" />
+      <keyword name="YandexEngine.engineName" id="YandexEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html#YandexEngine.engineName" />
+      <keyword name="YandexEngine.getTranslation" id="YandexEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html#YandexEngine.getTranslation" />
+      <keyword name="YandexEngine.supportedLanguages" id="YandexEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html#YandexEngine.supportedLanguages" />
       <keyword name="ZoomDialog" id="ZoomDialog" ref="eric6.QScintilla.ZoomDialog.html#ZoomDialog" />
       <keyword name="ZoomDialog (Constructor)" id="ZoomDialog (Constructor)" ref="eric6.QScintilla.ZoomDialog.html#ZoomDialog.__init__" />
       <keyword name="ZoomDialog (Module)" id="ZoomDialog (Module)" ref="eric6.QScintilla.ZoomDialog.html" />
@@ -17286,6 +17432,7 @@
       <keyword name="createMainWidget" id="createMainWidget" ref="eric6.eric6_webbrowser.html#createMainWidget" />
       <keyword name="createPipPage" id="createPipPage" ref="eric6.Plugins.PluginPipInterface.html#createPipPage" />
       <keyword name="createPyWrapper" id="createPyWrapper" ref="eric6.install.html#createPyWrapper" />
+      <keyword name="createTranslatorPage" id="createTranslatorPage" ref="eric6.Plugins.PluginTranslator.html#createTranslatorPage" />
       <keyword name="critical" id="critical" ref="eric6.E5Gui.E5MessageBox.html#critical" />
       <keyword name="crypto (Package)" id="crypto (Package)" ref="index-eric6.Utilities.crypto.html" />
       <keyword name="cursors (Package)" id="cursors (Package)" ref="index-eric6.IconEditor.cursors.html" />
@@ -17314,6 +17461,7 @@
       <keyword name="editMessageFilters" id="editMessageFilters" ref="eric6.E5Gui.E5ErrorMessage.html#editMessageFilters" />
       <keyword name="encode" id="encode" ref="eric6.Utilities.__init__.html#encode" />
       <keyword name="encryptData" id="encryptData" ref="eric6.Utilities.crypto.py3AES.html#encryptData" />
+      <keyword name="engineDisplayName" id="engineDisplayName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#engineDisplayName" />
       <keyword name="ensureUniqueFilename" id="ensureUniqueFilename" ref="eric6.Helpviewer.HelpUtilities.html#ensureUniqueFilename" />
       <keyword name="ensureUniqueFilename" id="ensureUniqueFilename" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#ensureUniqueFilename" />
       <keyword name="eric6 (Module)" id="eric6 (Module)" ref="eric6.eric6.html" />
@@ -17397,6 +17545,7 @@
       <keyword name="getCompleter" id="getCompleter" ref="eric6.QScintilla.TypingCompleters.__init__.html#getCompleter" />
       <keyword name="getConfig" id="getConfig" ref="eric6.eric6config.html#getConfig" />
       <keyword name="getConfigData" id="getConfigData" ref="eric6.Plugins.PluginPipInterface.html#getConfigData" />
+      <keyword name="getConfigData" id="getConfigData" ref="eric6.Plugins.PluginTranslator.html#getConfigData" />
       <keyword name="getConfigData" id="getConfigData" ref="eric6.Plugins.PluginVcsMercurial.html#getConfigData" />
       <keyword name="getConfigData" id="getConfigData" ref="eric6.Plugins.PluginVcsPySvn.html#getConfigData" />
       <keyword name="getConfigData" id="getConfigData" ref="eric6.Plugins.PluginVcsSubversion.html#getConfigData" />
@@ -17424,6 +17573,7 @@
       <keyword name="getEditorLexerAssocs" id="getEditorLexerAssocs" ref="eric6.Preferences.__init__.html#getEditorLexerAssocs" />
       <keyword name="getEditorOtherFonts" id="getEditorOtherFonts" ref="eric6.Preferences.__init__.html#getEditorOtherFonts" />
       <keyword name="getEditorTyping" id="getEditorTyping" ref="eric6.Preferences.__init__.html#getEditorTyping" />
+      <keyword name="getEngineIcon" id="getEngineIcon" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#getEngineIcon" />
       <keyword name="getEnvironmentEntry" id="getEnvironmentEntry" ref="eric6.Utilities.__init__.html#getEnvironmentEntry" />
       <keyword name="getExePath" id="getExePath" ref="eric6.Plugins.PluginPipInterface.html#getExePath" />
       <keyword name="getExecutablePath" id="getExecutablePath" ref="eric6.Utilities.__init__.html#getExecutablePath" />
@@ -17464,6 +17614,7 @@
       <keyword name="getImporters" id="getImporters" ref="eric6.Helpviewer.Bookmarks.BookmarksImporters.__init__.html#getImporters" />
       <keyword name="getImporters" id="getImporters" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.__init__.html#getImporters" />
       <keyword name="getIrc" id="getIrc" ref="eric6.Preferences.__init__.html#getIrc" />
+      <keyword name="getKeyUrl" id="getKeyUrl" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#getKeyUrl" />
       <keyword name="getLanguageIcon" id="getLanguageIcon" ref="eric6.QScintilla.Lexers.__init__.html#getLanguageIcon" />
       <keyword name="getLexer" id="getLexer" ref="eric6.QScintilla.Lexers.__init__.html#getLexer" />
       <keyword name="getMarkupProvider" id="getMarkupProvider" ref="eric6.QScintilla.MarkupProviders.__init__.html#getMarkupProvider" />
@@ -17513,6 +17664,7 @@
       <keyword name="getTemplates" id="getTemplates" ref="eric6.Preferences.__init__.html#getTemplates" />
       <keyword name="getTestFileName" id="getTestFileName" ref="eric6.Utilities.__init__.html#getTestFileName" />
       <keyword name="getTranslatedMessage" id="getTranslatedMessage" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations.html#getTranslatedMessage" />
+      <keyword name="getTranslationEngine" id="getTranslationEngine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#getTranslationEngine" />
       <keyword name="getTrayStarter" id="getTrayStarter" ref="eric6.Preferences.__init__.html#getTrayStarter" />
       <keyword name="getType" id="getType" ref="eric6.DebugClients.Python.DebugVariables.html#getType" />
       <keyword name="getTypeFromTypeName" id="getTypeFromTypeName" ref="eric6.Utilities.ModuleParser.html#getTypeFromTypeName" />
@@ -17690,6 +17842,7 @@
       <keyword name="prepareProcess" id="prepareProcess" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html#prepareProcess" />
       <keyword name="prepareQtMacBundle" id="prepareQtMacBundle" ref="eric6.Utilities.__init__.html#prepareQtMacBundle" />
       <keyword name="prepareUninstall" id="prepareUninstall" ref="eric6.Plugins.PluginPipInterface.html#prepareUninstall" />
+      <keyword name="prepareUninstall" id="prepareUninstall" ref="eric6.Plugins.PluginTranslator.html#prepareUninstall" />
       <keyword name="prepareUninstall" id="prepareUninstall" ref="eric6.Plugins.PluginVcsMercurial.html#prepareUninstall" />
       <keyword name="prepareUninstall" id="prepareUninstall" ref="eric6.Plugins.PluginVcsPySvn.html#prepareUninstall" />
       <keyword name="prepareUninstall" id="prepareUninstall" ref="eric6.Plugins.PluginVcsSubversion.html#prepareUninstall" />
@@ -17845,6 +17998,7 @@
       <keyword name="subversion (Module)" id="subversion (Module)" ref="eric6.Plugins.VcsPlugins.vcsPySvn.subversion.html" />
       <keyword name="subversion (Module)" id="subversion (Module)" ref="eric6.Plugins.VcsPlugins.vcsSubversion.subversion.html" />
       <keyword name="summarize" id="summarize" ref="eric6.DataViews.CodeMetrics.html#summarize" />
+      <keyword name="supportedEngineNames" id="supportedEngineNames" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#supportedEngineNames" />
       <keyword name="syncPreferences" id="syncPreferences" ref="eric6.Preferences.__init__.html#syncPreferences" />
       <keyword name="syntaxAndPyflakesBatchCheck" id="syntaxAndPyflakesBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#syntaxAndPyflakesBatchCheck" />
       <keyword name="syntaxAndPyflakesCheck" id="syntaxAndPyflakesCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#syntaxAndPyflakesCheck" />
@@ -18314,6 +18468,7 @@
       <file>eric6.Plugins.PluginPipInterface.html</file>
       <file>eric6.Plugins.PluginSyntaxChecker.html</file>
       <file>eric6.Plugins.PluginTabnanny.html</file>
+      <file>eric6.Plugins.PluginTranslator.html</file>
       <file>eric6.Plugins.PluginVcsMercurial.html</file>
       <file>eric6.Plugins.PluginVcsPySvn.html</file>
       <file>eric6.Plugins.PluginVcsSubversion.html</file>
@@ -18341,6 +18496,21 @@
       <file>eric6.Plugins.UiExtensionPlugins.PipInterface.PipPackagesInputDialog.html</file>
       <file>eric6.Plugins.UiExtensionPlugins.PipInterface.PipRequirementsSelectionDialog.html</file>
       <file>eric6.Plugins.UiExtensionPlugins.PipInterface.PipSearchDialog.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.Translator.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html</file>
+      <file>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html</file>
       <file>eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvConfigurationDialog.html</file>
       <file>eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.VirtualenvExecDialog.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.Config.html</file>
@@ -19070,6 +19240,9 @@
       <file>index-eric6.Plugins.DocumentationPlugins.html</file>
       <file>index-eric6.Plugins.UiExtensionPlugins.PipInterface.ConfigurationPage.html</file>
       <file>index-eric6.Plugins.UiExtensionPlugins.PipInterface.html</file>
+      <file>index-eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.html</file>
+      <file>index-eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.html</file>
+      <file>index-eric6.Plugins.UiExtensionPlugins.Translator.html</file>
       <file>index-eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.html</file>
       <file>index-eric6.Plugins.UiExtensionPlugins.html</file>
       <file>index-eric6.Plugins.VcsPlugins.html</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.PluginTranslator.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.PluginTranslator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.PluginTranslator</h1>
+<p>
+Module implementing the Translator plugin.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>author</td></tr><tr><td>autoactivate</td></tr><tr><td>className</td></tr><tr><td>deactivateable</td></tr><tr><td>error</td></tr><tr><td>longDescription</td></tr><tr><td>name</td></tr><tr><td>needsRestart</td></tr><tr><td>packageName</td></tr><tr><td>pyqtApi</td></tr><tr><td>python2Compatible</td></tr><tr><td>shortDescription</td></tr><tr><td>translatorPluginObject</td></tr><tr><td>version</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#TranslatorPlugin">TranslatorPlugin</a></td>
+<td>Class implementing the Translator plugin.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#createTranslatorPage">createTranslatorPage</a></td>
+<td>Module function to create the Translator configuration page.</td>
+</tr><tr>
+<td><a href="#getConfigData">getConfigData</a></td>
+<td>Module function returning data as required by the configuration dialog.</td>
+</tr><tr>
+<td><a href="#prepareUninstall">prepareUninstall</a></td>
+<td>Module function to prepare for an uninstallation.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="TranslatorPlugin" ID="TranslatorPlugin"></a>
+<h2>TranslatorPlugin</h2>
+<p>
+    Class implementing the Translator plugin.
+</p>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+<table>
+<tr><td>PreferencesKey</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#TranslatorPlugin.__init__">TranslatorPlugin</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#TranslatorPlugin.__initialize">__initialize</a></td>
+<td>Private slot to (re)initialize the plugin.</td>
+</tr><tr>
+<td><a href="#TranslatorPlugin.activate">activate</a></td>
+<td>Public method to activate this plugin.</td>
+</tr><tr>
+<td><a href="#TranslatorPlugin.deactivate">deactivate</a></td>
+<td>Public method to deactivate this plugin.</td>
+</tr><tr>
+<td><a href="#TranslatorPlugin.getPreferences">getPreferences</a></td>
+<td>Public method to retrieve the various settings.</td>
+</tr><tr>
+<td><a href="#TranslatorPlugin.getPreferencesDefault">getPreferencesDefault</a></td>
+<td>Public method to retrieve the various default settings.</td>
+</tr><tr>
+<td><a href="#TranslatorPlugin.setPreferences">setPreferences</a></td>
+<td>Public method to store the various settings.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="TranslatorPlugin.__init__" ID="TranslatorPlugin.__init__"></a>
+<h4>TranslatorPlugin (Constructor)</h4>
+<b>TranslatorPlugin</b>(<i>ui</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>ui</i></dt>
+<dd>
+reference to the user interface object (UI.UserInterface)
+</dd>
+</dl><a NAME="TranslatorPlugin.__initialize" ID="TranslatorPlugin.__initialize"></a>
+<h4>TranslatorPlugin.__initialize</h4>
+<b>__initialize</b>(<i></i>)
+<p>
+        Private slot to (re)initialize the plugin.
+</p><a NAME="TranslatorPlugin.activate" ID="TranslatorPlugin.activate"></a>
+<h4>TranslatorPlugin.activate</h4>
+<b>activate</b>(<i></i>)
+<p>
+        Public method to activate this plugin.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of None and activation status (boolean)
+</dd>
+</dl><a NAME="TranslatorPlugin.deactivate" ID="TranslatorPlugin.deactivate"></a>
+<h4>TranslatorPlugin.deactivate</h4>
+<b>deactivate</b>(<i></i>)
+<p>
+        Public method to deactivate this plugin.
+</p><a NAME="TranslatorPlugin.getPreferences" ID="TranslatorPlugin.getPreferences"></a>
+<h4>TranslatorPlugin.getPreferences</h4>
+<b>getPreferences</b>(<i>key</i>)
+<p>
+        Public method to retrieve the various settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the value to get
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+the requested setting
+</dd>
+</dl><a NAME="TranslatorPlugin.getPreferencesDefault" ID="TranslatorPlugin.getPreferencesDefault"></a>
+<h4>TranslatorPlugin.getPreferencesDefault</h4>
+<b>getPreferencesDefault</b>(<i>key</i>)
+<p>
+        Public method to retrieve the various default settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the value to get
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+the requested setting
+</dd>
+</dl><a NAME="TranslatorPlugin.setPreferences" ID="TranslatorPlugin.setPreferences"></a>
+<h4>TranslatorPlugin.setPreferences</h4>
+<b>setPreferences</b>(<i>key, value</i>)
+<p>
+        Public method to store the various settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the setting to be set (string)
+</dd><dt><i>value</i></dt>
+<dd>
+the value to be set
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="createTranslatorPage" ID="createTranslatorPage"></a>
+<h2>createTranslatorPage</h2>
+<b>createTranslatorPage</b>(<i>configDlg</i>)
+<p>
+    Module function to create the Translator configuration page.
+</p><dl>
+<dt><i>configDlg</i></dt>
+<dd>
+reference to the configuration dialog
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the configuration page
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getConfigData" ID="getConfigData"></a>
+<h2>getConfigData</h2>
+<b>getConfigData</b>(<i></i>)
+<p>
+    Module function returning data as required by the configuration dialog.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+dictionary containing the relevant data
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="prepareUninstall" ID="prepareUninstall"></a>
+<h2>prepareUninstall</h2>
+<b>prepareUninstall</b>(<i></i>)
+<p>
+    Module function to prepare for an uninstallation.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage</h1>
+<p>
+Module implementing the Time Tracker configuration page.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#TranslatorPage">TranslatorPage</a></td>
+<td>Class implementing the Time Tracker configuration page.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="TranslatorPage" ID="TranslatorPage"></a>
+<h2>TranslatorPage</h2>
+<p>
+    Class implementing the Time Tracker configuration page.
+</p>
+<h3>Derived from</h3>
+ConfigurationPageBase, Ui_TranslatorPage
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#TranslatorPage.__init__">TranslatorPage</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#TranslatorPage.__checkedLanguageItems">__checkedLanguageItems</a></td>
+<td>Private method to get a list of checked language items.</td>
+</tr><tr>
+<td><a href="#TranslatorPage.on_defaultButton_clicked">on_defaultButton_clicked</a></td>
+<td>Private slot to set the default languages.</td>
+</tr><tr>
+<td><a href="#TranslatorPage.on_languagesList_itemChanged">on_languagesList_itemChanged</a></td>
+<td>Private slot to handle the selection of an item.</td>
+</tr><tr>
+<td><a href="#TranslatorPage.on_setButton_clicked">on_setButton_clicked</a></td>
+<td>Private slot to set or unset all items.</td>
+</tr><tr>
+<td><a href="#TranslatorPage.save">save</a></td>
+<td>Public slot to save the Pyramid configuration.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="TranslatorPage.__init__" ID="TranslatorPage.__init__"></a>
+<h4>TranslatorPage (Constructor)</h4>
+<b>TranslatorPage</b>(<i>plugin</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object
+</dd>
+</dl><a NAME="TranslatorPage.__checkedLanguageItems" ID="TranslatorPage.__checkedLanguageItems"></a>
+<h4>TranslatorPage.__checkedLanguageItems</h4>
+<b>__checkedLanguageItems</b>(<i></i>)
+<p>
+        Private method to get a list of checked language items.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of checked language items (list of QListWidgetItem)
+</dd>
+</dl><a NAME="TranslatorPage.on_defaultButton_clicked" ID="TranslatorPage.on_defaultButton_clicked"></a>
+<h4>TranslatorPage.on_defaultButton_clicked</h4>
+<b>on_defaultButton_clicked</b>(<i></i>)
+<p>
+        Private slot to set the default languages.
+</p><a NAME="TranslatorPage.on_languagesList_itemChanged" ID="TranslatorPage.on_languagesList_itemChanged"></a>
+<h4>TranslatorPage.on_languagesList_itemChanged</h4>
+<b>on_languagesList_itemChanged</b>(<i>item</i>)
+<p>
+        Private slot to handle the selection of an item.
+</p><dl>
+<dt><i>item</i></dt>
+<dd>
+reference to the changed item (QListWidgetItem)
+</dd>
+</dl><a NAME="TranslatorPage.on_setButton_clicked" ID="TranslatorPage.on_setButton_clicked"></a>
+<h4>TranslatorPage.on_setButton_clicked</h4>
+<b>on_setButton_clicked</b>(<i></i>)
+<p>
+        Private slot to set or unset all items.
+</p><a NAME="TranslatorPage.save" ID="TranslatorPage.save"></a>
+<h4>TranslatorPage.save</h4>
+<b>save</b>(<i></i>)
+<p>
+        Public slot to save the Pyramid configuration.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.Translator.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.Translator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.Translator</h1>
+<p>
+Module implementing the translator object.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Translator">Translator</a></td>
+<td>Class implementing the translator object.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="Translator" ID="Translator"></a>
+<h2>Translator</h2>
+<p>
+    Class implementing the translator object.
+</p>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Translator.__init__">Translator</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Translator.__activateWidget">__activateWidget</a></td>
+<td>Private slot to handle the activation of the project browser.</td>
+</tr><tr>
+<td><a href="#Translator.activate">activate</a></td>
+<td>Public method to activate the translator.</td>
+</tr><tr>
+<td><a href="#Translator.deactivate">deactivate</a></td>
+<td>Public method to deactivate the time tracker.</td>
+</tr><tr>
+<td><a href="#Translator.getAppIcon">getAppIcon</a></td>
+<td>Public method to get an icon.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="Translator.__init__" ID="Translator.__init__"></a>
+<h4>Translator (Constructor)</h4>
+<b>Translator</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+parent (QObject)
+</dd>
+</dl><a NAME="Translator.__activateWidget" ID="Translator.__activateWidget"></a>
+<h4>Translator.__activateWidget</h4>
+<b>__activateWidget</b>(<i></i>)
+<p>
+        Private slot to handle the activation of the project browser.
+</p><a NAME="Translator.activate" ID="Translator.activate"></a>
+<h4>Translator.activate</h4>
+<b>activate</b>(<i></i>)
+<p>
+        Public method to activate the translator.
+</p><a NAME="Translator.deactivate" ID="Translator.deactivate"></a>
+<h4>Translator.deactivate</h4>
+<b>deactivate</b>(<i></i>)
+<p>
+        Public method to deactivate the time tracker.
+</p><a NAME="Translator.getAppIcon" ID="Translator.getAppIcon"></a>
+<h4>Translator.getAppIcon</h4>
+<b>getAppIcon</b>(<i>name</i>)
+<p>
+        Public method to get an icon.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+name of the icon file (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+icon (QIcon)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine</h1>
+<p>
+Module implementing the DeepL translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#DeepLEngine">DeepLEngine</a></td>
+<td>Class implementing the translation engine for the DeepL translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="DeepLEngine" ID="DeepLEngine"></a>
+<h2>DeepLEngine</h2>
+<p>
+    Class implementing the translation engine for the DeepL
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>MaxTranslationTextLen</td></tr><tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#DeepLEngine.__init__">DeepLEngine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#DeepLEngine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#DeepLEngine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#DeepLEngine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="DeepLEngine.__init__" ID="DeepLEngine.__init__"></a>
+<h4>DeepLEngine (Constructor)</h4>
+<b>DeepLEngine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i> (TranslatorPlugin)</dt>
+<dd>
+reference to the plugin object
+</dd><dt><i>parent</i> (QObject)</dt>
+<dd>
+reference to the parent object
+</dd>
+</dl><a NAME="DeepLEngine.engineName" ID="DeepLEngine.engineName"></a>
+<h4>DeepLEngine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl><a NAME="DeepLEngine.getTranslation" ID="DeepLEngine.getTranslation"></a>
+<h4>DeepLEngine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="DeepLEngine.supportedLanguages" ID="DeepLEngine.supportedLanguages"></a>
+<h4>DeepLEngine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine</h1>
+<p>
+Module implementing the Glosbe translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#GlosbeEngine">GlosbeEngine</a></td>
+<td>Class implementing the translation engine for the Glosbe translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="GlosbeEngine" ID="GlosbeEngine"></a>
+<h2>GlosbeEngine</h2>
+<p>
+    Class implementing the translation engine for the Glosbe
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>TranslatorLimit</td></tr><tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#GlosbeEngine.__init__">GlosbeEngine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#GlosbeEngine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#GlosbeEngine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#GlosbeEngine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="GlosbeEngine.__init__" ID="GlosbeEngine.__init__"></a>
+<h4>GlosbeEngine (Constructor)</h4>
+<b>GlosbeEngine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="GlosbeEngine.engineName" ID="GlosbeEngine.engineName"></a>
+<h4>GlosbeEngine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="GlosbeEngine.getTranslation" ID="GlosbeEngine.getTranslation"></a>
+<h4>GlosbeEngine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="GlosbeEngine.supportedLanguages" ID="GlosbeEngine.supportedLanguages"></a>
+<h4>GlosbeEngine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine</h1>
+<p>
+Module implementing the Google V1 translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#GoogleV1Engine">GoogleV1Engine</a></td>
+<td>Class implementing the translation engine for the old Google translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="GoogleV1Engine" ID="GoogleV1Engine"></a>
+<h2>GoogleV1Engine</h2>
+<p>
+    Class implementing the translation engine for the old Google
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>TextToSpeechLimit</td></tr><tr><td>TextToSpeechUrl</td></tr><tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#GoogleV1Engine.__init__">GoogleV1Engine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#GoogleV1Engine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#GoogleV1Engine.getTextToSpeechData">getTextToSpeechData</a></td>
+<td>Public method to pronounce the given text.</td>
+</tr><tr>
+<td><a href="#GoogleV1Engine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#GoogleV1Engine.hasTTS">hasTTS</a></td>
+<td>Public method indicating the Text-to-Speech capability.</td>
+</tr><tr>
+<td><a href="#GoogleV1Engine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="GoogleV1Engine.__init__" ID="GoogleV1Engine.__init__"></a>
+<h4>GoogleV1Engine (Constructor)</h4>
+<b>GoogleV1Engine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="GoogleV1Engine.engineName" ID="GoogleV1Engine.engineName"></a>
+<h4>GoogleV1Engine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="GoogleV1Engine.getTextToSpeechData" ID="GoogleV1Engine.getTextToSpeechData"></a>
+<h4>GoogleV1Engine.getTextToSpeechData</h4>
+<b>getTextToSpeechData</b>(<i>requestObject, text, language</i>)
+<p>
+        Public method to pronounce the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be pronounced (string)
+</dd><dt><i>language</i></dt>
+<dd>
+language code of the text (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple with pronounce data (QByteArray) or error string (string)
+            and success flag (boolean)
+</dd>
+</dl><a NAME="GoogleV1Engine.getTranslation" ID="GoogleV1Engine.getTranslation"></a>
+<h4>GoogleV1Engine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="GoogleV1Engine.hasTTS" ID="GoogleV1Engine.hasTTS"></a>
+<h4>GoogleV1Engine.hasTTS</h4>
+<b>hasTTS</b>(<i></i>)
+<p>
+        Public method indicating the Text-to-Speech capability.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the Text-to-Speech capability (boolean)
+</dd>
+</dl><a NAME="GoogleV1Engine.supportedLanguages" ID="GoogleV1Engine.supportedLanguages"></a>
+<h4>GoogleV1Engine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine</h1>
+<p>
+Module implementing the Google V2 translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#GoogleV2Engine">GoogleV2Engine</a></td>
+<td>Class implementing the translation engine for the new Google translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="GoogleV2Engine" ID="GoogleV2Engine"></a>
+<h2>GoogleV2Engine</h2>
+<p>
+    Class implementing the translation engine for the new Google
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#GoogleV2Engine.__init__">GoogleV2Engine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#GoogleV2Engine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#GoogleV2Engine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#GoogleV2Engine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="GoogleV2Engine.__init__" ID="GoogleV2Engine.__init__"></a>
+<h4>GoogleV2Engine (Constructor)</h4>
+<b>GoogleV2Engine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="GoogleV2Engine.engineName" ID="GoogleV2Engine.engineName"></a>
+<h4>GoogleV2Engine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="GoogleV2Engine.getTranslation" ID="GoogleV2Engine.getTranslation"></a>
+<h4>GoogleV2Engine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="GoogleV2Engine.supportedLanguages" ID="GoogleV2Engine.supportedLanguages"></a>
+<h4>GoogleV2Engine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine</h1>
+<p>
+Module implementing the Microsoft translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#MicrosoftEngine">MicrosoftEngine</a></td>
+<td>Class implementing the translation engine for the Microsoft translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="MicrosoftEngine" ID="MicrosoftEngine"></a>
+<h2>MicrosoftEngine</h2>
+<p>
+    Class implementing the translation engine for the Microsoft
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>AccessTokenUrl</td></tr><tr><td>TextToSpeechUrl</td></tr><tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#MicrosoftEngine.__init__">MicrosoftEngine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.__getAccessToken">__getAccessToken</a></td>
+<td>Private slot to get an access token.</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.__getClientDataAzure">__getClientDataAzure</a></td>
+<td>Private method to retrieve the client data.</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.__mapLanguageCode">__mapLanguageCode</a></td>
+<td>Private method to map a language code to the Microsoft code.</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.getTextToSpeechData">getTextToSpeechData</a></td>
+<td>Public method to pronounce the given text.</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.hasTTS">hasTTS</a></td>
+<td>Public method indicating the Text-to-Speech capability.</td>
+</tr><tr>
+<td><a href="#MicrosoftEngine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="MicrosoftEngine.__init__" ID="MicrosoftEngine.__init__"></a>
+<h4>MicrosoftEngine (Constructor)</h4>
+<b>MicrosoftEngine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="MicrosoftEngine.__getAccessToken" ID="MicrosoftEngine.__getAccessToken"></a>
+<h4>MicrosoftEngine.__getAccessToken</h4>
+<b>__getAccessToken</b>(<i>requestObject</i>)
+<p>
+        Private slot to get an access token.
+</p><p>
+        If the stored token is no longer valid, get a new one and store it.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+access token (string)
+</dd>
+</dl><a NAME="MicrosoftEngine.__getClientDataAzure" ID="MicrosoftEngine.__getClientDataAzure"></a>
+<h4>MicrosoftEngine.__getClientDataAzure</h4>
+<b>__getClientDataAzure</b>(<i></i>)
+<p>
+        Private method to retrieve the client data.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple giving the API subscription key and a flag indicating
+            validity
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, bool)
+</dd>
+</dl><a NAME="MicrosoftEngine.__mapLanguageCode" ID="MicrosoftEngine.__mapLanguageCode"></a>
+<h4>MicrosoftEngine.__mapLanguageCode</h4>
+<b>__mapLanguageCode</b>(<i>code</i>)
+<p>
+        Private method to map a language code to the Microsoft code.
+</p><dl>
+<dt><i>code</i></dt>
+<dd>
+language code (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+mapped language code (string)
+</dd>
+</dl><a NAME="MicrosoftEngine.engineName" ID="MicrosoftEngine.engineName"></a>
+<h4>MicrosoftEngine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="MicrosoftEngine.getTextToSpeechData" ID="MicrosoftEngine.getTextToSpeechData"></a>
+<h4>MicrosoftEngine.getTextToSpeechData</h4>
+<b>getTextToSpeechData</b>(<i>requestObject, text, language</i>)
+<p>
+        Public method to pronounce the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be pronounced (string)
+</dd><dt><i>language</i></dt>
+<dd>
+language code of the text (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple with pronounce data (QByteArray) or error string (string)
+            and success flag (boolean)
+</dd>
+</dl><a NAME="MicrosoftEngine.getTranslation" ID="MicrosoftEngine.getTranslation"></a>
+<h4>MicrosoftEngine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="MicrosoftEngine.hasTTS" ID="MicrosoftEngine.hasTTS"></a>
+<h4>MicrosoftEngine.hasTTS</h4>
+<b>hasTTS</b>(<i></i>)
+<p>
+        Public method indicating the Text-to-Speech capability.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the Text-to-Speech capability (boolean)
+</dd>
+</dl><a NAME="MicrosoftEngine.supportedLanguages" ID="MicrosoftEngine.supportedLanguages"></a>
+<h4>MicrosoftEngine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine</h1>
+<p>
+Module implementing the MyMemory translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#MyMemoryEngine">MyMemoryEngine</a></td>
+<td>Class implementing the translation engine for the MyMemory translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="MyMemoryEngine" ID="MyMemoryEngine"></a>
+<h2>MyMemoryEngine</h2>
+<p>
+    Class implementing the translation engine for the MyMemory
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>TranslatorLimit</td></tr><tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#MyMemoryEngine.__init__">MyMemoryEngine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#MyMemoryEngine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#MyMemoryEngine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#MyMemoryEngine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="MyMemoryEngine.__init__" ID="MyMemoryEngine.__init__"></a>
+<h4>MyMemoryEngine (Constructor)</h4>
+<b>MyMemoryEngine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="MyMemoryEngine.engineName" ID="MyMemoryEngine.engineName"></a>
+<h4>MyMemoryEngine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="MyMemoryEngine.getTranslation" ID="MyMemoryEngine.getTranslation"></a>
+<h4>MyMemoryEngine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="MyMemoryEngine.supportedLanguages" ID="MyMemoryEngine.supportedLanguages"></a>
+<h4>MyMemoryEngine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine</h1>
+<p>
+Module implementing the Promt translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#PromtEngine">PromtEngine</a></td>
+<td>Class implementing the translation engine for the Promt translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="PromtEngine" ID="PromtEngine"></a>
+<h2>PromtEngine</h2>
+<p>
+    Class implementing the translation engine for the Promt
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#PromtEngine.__init__">PromtEngine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#PromtEngine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#PromtEngine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#PromtEngine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="PromtEngine.__init__" ID="PromtEngine.__init__"></a>
+<h4>PromtEngine (Constructor)</h4>
+<b>PromtEngine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="PromtEngine.engineName" ID="PromtEngine.engineName"></a>
+<h4>PromtEngine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="PromtEngine.getTranslation" ID="PromtEngine.getTranslation"></a>
+<h4>PromtEngine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="PromtEngine.supportedLanguages" ID="PromtEngine.supportedLanguages"></a>
+<h4>PromtEngine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine</h1>
+<p>
+Module implementing the translation engine base class.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#TranslationEngine">TranslationEngine</a></td>
+<td>Class implementing the translation engine base class containing default methods.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="TranslationEngine" ID="TranslationEngine"></a>
+<h2>TranslationEngine</h2>
+<p>
+    Class implementing the translation engine base class containing
+    default methods.
+</p>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#TranslationEngine.__init__">TranslationEngine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#TranslationEngine.engineName">engineName</a></td>
+<td>Public method to get the name of the engine.</td>
+</tr><tr>
+<td><a href="#TranslationEngine.getTextToSpeechData">getTextToSpeechData</a></td>
+<td>Public method to pronounce the given text.</td>
+</tr><tr>
+<td><a href="#TranslationEngine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#TranslationEngine.hasTTS">hasTTS</a></td>
+<td>Public method indicating the Text-to-Speech capability.</td>
+</tr><tr>
+<td><a href="#TranslationEngine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="TranslationEngine.__init__" ID="TranslationEngine.__init__"></a>
+<h4>TranslationEngine (Constructor)</h4>
+<b>TranslationEngine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="TranslationEngine.engineName" ID="TranslationEngine.engineName"></a>
+<h4>TranslationEngine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to get the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="TranslationEngine.getTextToSpeechData" ID="TranslationEngine.getTextToSpeechData"></a>
+<h4>TranslationEngine.getTextToSpeechData</h4>
+<b>getTextToSpeechData</b>(<i>requestObject, text, language</i>)
+<p>
+        Public method to pronounce the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be pronounced (string)
+</dd><dt><i>language</i></dt>
+<dd>
+language code of the text (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple with pronounce data (QByteArray) or error string (string)
+            and success flag (boolean)
+</dd>
+</dl><a NAME="TranslationEngine.getTranslation" ID="TranslationEngine.getTranslation"></a>
+<h4>TranslationEngine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="TranslationEngine.hasTTS" ID="TranslationEngine.hasTTS"></a>
+<h4>TranslationEngine.hasTTS</h4>
+<b>hasTTS</b>(<i></i>)
+<p>
+        Public method indicating the Text-to-Speech capability.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the Text-to-Speech capability (boolean)
+</dd>
+</dl><a NAME="TranslationEngine.supportedLanguages" ID="TranslationEngine.supportedLanguages"></a>
+<h4>TranslationEngine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine</h1>
+<p>
+Module implementing the Yandex translation engine.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#YandexEngine">YandexEngine</a></td>
+<td>Class implementing the translation engine for the Yandex translation service.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="YandexEngine" ID="YandexEngine"></a>
+<h2>YandexEngine</h2>
+<p>
+    Class implementing the translation engine for the Yandex
+    translation service.
+</p>
+<h3>Derived from</h3>
+TranslationEngine
+<h3>Class Attributes</h3>
+<table>
+<tr><td>TranslatorLimit</td></tr><tr><td>TranslatorUrl</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#YandexEngine.__init__">YandexEngine</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#YandexEngine.engineName">engineName</a></td>
+<td>Public method to return the name of the engine.</td>
+</tr><tr>
+<td><a href="#YandexEngine.getTranslation">getTranslation</a></td>
+<td>Public method to translate the given text.</td>
+</tr><tr>
+<td><a href="#YandexEngine.supportedLanguages">supportedLanguages</a></td>
+<td>Public method to get the supported languages.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="YandexEngine.__init__" ID="YandexEngine.__init__"></a>
+<h4>YandexEngine (Constructor)</h4>
+<b>YandexEngine</b>(<i>plugin, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="YandexEngine.engineName" ID="YandexEngine.engineName"></a>
+<h4>YandexEngine.engineName</h4>
+<b>engineName</b>(<i></i>)
+<p>
+        Public method to return the name of the engine.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+engine name (string)
+</dd>
+</dl><a NAME="YandexEngine.getTranslation" ID="YandexEngine.getTranslation"></a>
+<h4>YandexEngine.getTranslation</h4>
+<b>getTranslation</b>(<i>requestObject, text, originalLanguage, translationLanguage</i>)
+<p>
+        Public method to translate the given text.
+</p><dl>
+<dt><i>requestObject</i></dt>
+<dd>
+reference to the request object
+            (TranslatorRequest)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="YandexEngine.supportedLanguages" ID="YandexEngine.supportedLanguages"></a>
+<h4>YandexEngine.supportedLanguages</h4>
+<b>supportedLanguages</b>(<i></i>)
+<p>
+        Public method to get the supported languages.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__</h1>
+<p>
+Package containing the various translation engines.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#engineDisplayName">engineDisplayName</a></td>
+<td>Module function to get a translated name for an engine.</td>
+</tr><tr>
+<td><a href="#getEngineIcon">getEngineIcon</a></td>
+<td>Module function to get the icon of the named engine.</td>
+</tr><tr>
+<td><a href="#getKeyUrl">getKeyUrl</a></td>
+<td>Module function to get an URL to request a user key.</td>
+</tr><tr>
+<td><a href="#getTranslationEngine">getTranslationEngine</a></td>
+<td>Module function to instantiate an engine object for the named service.</td>
+</tr><tr>
+<td><a href="#supportedEngineNames">supportedEngineNames</a></td>
+<td>Module function to get the list of supported translation engines.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="engineDisplayName" ID="engineDisplayName"></a>
+<h2>engineDisplayName</h2>
+<b>engineDisplayName</b>(<i>name</i>)
+<p>
+    Module function to get a translated name for an engine.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+name of a translation engine (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+translated engine name (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getEngineIcon" ID="getEngineIcon"></a>
+<h2>getEngineIcon</h2>
+<b>getEngineIcon</b>(<i>name</i>)
+<p>
+    Module function to get the icon of the named engine.
+</p><dl>
+<dt><i>name</i> (str)</dt>
+<dd>
+name of the translation engine
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+engine icon
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QIcon
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getKeyUrl" ID="getKeyUrl"></a>
+<h2>getKeyUrl</h2>
+<b>getKeyUrl</b>(<i>name</i>)
+<p>
+    Module function to get an URL to request a user key.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+name of the online translation service (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+key request URL (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getTranslationEngine" ID="getTranslationEngine"></a>
+<h2>getTranslationEngine</h2>
+<b>getTranslationEngine</b>(<i>name, plugin, parent=None</i>)
+<p>
+    Module function to instantiate an engine object for the named service.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+name of the online translation service (string)
+</dd><dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent object
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+translation engine (TranslatorEngine)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="supportedEngineNames" ID="supportedEngineNames"></a>
+<h2>supportedEngineNames</h2>
+<b>supportedEngineNames</b>(<i></i>)
+<p>
+    Module function to get the list of supported translation engines.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+names of supported engines (list of string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb</h1>
+<p>
+Module implementing the translation languages database.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#TranslatorLanguagesDb">TranslatorLanguagesDb</a></td>
+<td>Class implementing the translation languages database.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="TranslatorLanguagesDb" ID="TranslatorLanguagesDb"></a>
+<h2>TranslatorLanguagesDb</h2>
+<p>
+    Class implementing the translation languages database.
+</p>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#TranslatorLanguagesDb.__init__">TranslatorLanguagesDb</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#TranslatorLanguagesDb.convertTwoToThree">convertTwoToThree</a></td>
+<td>Public method to convert a two character language code to a thre character code.</td>
+</tr><tr>
+<td><a href="#TranslatorLanguagesDb.getAllLanguages">getAllLanguages</a></td>
+<td>Public method to get a list of the supported language codes.</td>
+</tr><tr>
+<td><a href="#TranslatorLanguagesDb.getLanguage">getLanguage</a></td>
+<td>Public method to get a translated language.</td>
+</tr><tr>
+<td><a href="#TranslatorLanguagesDb.getLanguageIcon">getLanguageIcon</a></td>
+<td>Public method to get a language icon.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="TranslatorLanguagesDb.__init__" ID="TranslatorLanguagesDb.__init__"></a>
+<h4>TranslatorLanguagesDb (Constructor)</h4>
+<b>TranslatorLanguagesDb</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="TranslatorLanguagesDb.convertTwoToThree" ID="TranslatorLanguagesDb.convertTwoToThree"></a>
+<h4>TranslatorLanguagesDb.convertTwoToThree</h4>
+<b>convertTwoToThree</b>(<i>code</i>)
+<p>
+        Public method to convert a two character language code to a
+        thre character code.
+</p><dl>
+<dt><i>code</i></dt>
+<dd>
+two character language code (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+three character language code (string)
+</dd>
+</dl><a NAME="TranslatorLanguagesDb.getAllLanguages" ID="TranslatorLanguagesDb.getAllLanguages"></a>
+<h4>TranslatorLanguagesDb.getAllLanguages</h4>
+<b>getAllLanguages</b>(<i></i>)
+<p>
+        Public method to get a list of the supported language codes.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of supported language codes (list of string)
+</dd>
+</dl><a NAME="TranslatorLanguagesDb.getLanguage" ID="TranslatorLanguagesDb.getLanguage"></a>
+<h4>TranslatorLanguagesDb.getLanguage</h4>
+<b>getLanguage</b>(<i>code</i>)
+<p>
+        Public method to get a translated language.
+</p><dl>
+<dt><i>code</i></dt>
+<dd>
+language code (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+translated language (string)
+</dd>
+</dl><a NAME="TranslatorLanguagesDb.getLanguageIcon" ID="TranslatorLanguagesDb.getLanguageIcon"></a>
+<h4>TranslatorLanguagesDb.getLanguageIcon</h4>
+<b>getLanguageIcon</b>(<i>code</i>)
+<p>
+        Public method to get a language icon.
+</p><dl>
+<dt><i>code</i></dt>
+<dd>
+language code (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+language icon (QIcon)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest</h1>
+<p>
+Module implementing a synchronous network request handler for translation
+requests.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#TranslatorRequest">TranslatorRequest</a></td>
+<td>Class implementing a synchronous network request handler for translation requests.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="TranslatorRequest" ID="TranslatorRequest"></a>
+<h2>TranslatorRequest</h2>
+<p>
+    Class implementing a synchronous network request handler for translation
+    requests.
+</p>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#TranslatorRequest.__init__">TranslatorRequest</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#TranslatorRequest.get">get</a></td>
+<td>Public method to issue a GET request.</td>
+</tr><tr>
+<td><a href="#TranslatorRequest.post">post</a></td>
+<td>Public method to issue a POST request.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="TranslatorRequest.__init__" ID="TranslatorRequest.__init__"></a>
+<h4>TranslatorRequest (Constructor)</h4>
+<b>TranslatorRequest</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="TranslatorRequest.get" ID="TranslatorRequest.get"></a>
+<h4>TranslatorRequest.get</h4>
+<b>get</b>(<i>requestUrl, extraHeaders=None</i>)
+<p>
+        Public method to issue a GET request.
+</p><dl>
+<dt><i>requestUrl</i></dt>
+<dd>
+URL of the request (QUrl)
+</dd><dt><i>extraHeaders=</i></dt>
+<dd>
+list of tuples of additional headers giving
+            header name (string) and header value (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+server response (QByteArray) or error message (string)
+</dd>
+</dl><a NAME="TranslatorRequest.post" ID="TranslatorRequest.post"></a>
+<h4>TranslatorRequest.post</h4>
+<b>post</b>(<i>requestUrl, requestData, dataType="form", extraHeaders=None</i>)
+<p>
+        Public method to issue a POST request.
+</p><dl>
+<dt><i>requestUrl</i></dt>
+<dd>
+URL of the request (QUrl)
+</dd><dt><i>requestData</i></dt>
+<dd>
+data of the request (QByteArray)
+</dd><dt><i>dataType=</i></dt>
+<dd>
+type of the request data (string)
+</dd><dt><i>extraHeaders=</i></dt>
+<dd>
+list of tuples of additional headers giving
+            header name (string) and header value (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of server response (string) and flag indicating
+            success (boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget</h1>
+<p>
+Module implementing the translator widget.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#TranslatorWidget">TranslatorWidget</a></td>
+<td>Class implementing the translator widget.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="TranslatorWidget" ID="TranslatorWidget"></a>
+<h2>TranslatorWidget</h2>
+<p>
+    Class implementing the translator widget.
+</p>
+<h3>Derived from</h3>
+QWidget, Ui_TranslatorWidget
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#TranslatorWidget.__init__">TranslatorWidget</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__engineComboBoxCurrentIndexChanged">__engineComboBoxCurrentIndexChanged</a></td>
+<td>Private slot to handle the selection of a translation service.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__mediaPlayerStateChanged">__mediaPlayerStateChanged</a></td>
+<td>Private slot handling changes of the media player state.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__originalLanguage">__originalLanguage</a></td>
+<td>Private method to return the code of the selected original language.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__pronounce">__pronounce</a></td>
+<td>Private method to pronounce the given text.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__translate">__translate</a></td>
+<td>Private method to translate the given text.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__translationLanguage">__translationLanguage</a></td>
+<td>Private method to return the code of the selected translation language.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__updateClearButton">__updateClearButton</a></td>
+<td>Private slot to set the state of the clear button.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__updateEngines">__updateEngines</a></td>
+<td>Private slot to update the engines combo box.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__updateLanguages">__updateLanguages</a></td>
+<td>Private slot to update the language combo boxes.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.__updatePronounceButtons">__updatePronounceButtons</a></td>
+<td>Private slot to set the state of the pronounce buttons.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_clearButton_clicked">on_clearButton_clicked</a></td>
+<td>Private slot to clear the text fields.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_origEdit_textChanged">on_origEdit_textChanged</a></td>
+<td>Private slot to handle changes of the original text.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_origLanguageComboBox_currentIndexChanged">on_origLanguageComboBox_currentIndexChanged</a></td>
+<td>Private slot to handle the selection of the original language.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_pronounceOrigButton_clicked">on_pronounceOrigButton_clicked</a></td>
+<td>Private slot to pronounce the original text.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_pronounceTransButton_clicked">on_pronounceTransButton_clicked</a></td>
+<td>Private slot to pronounce the translated text.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_swapButton_clicked">on_swapButton_clicked</a></td>
+<td>Private slot to swap the languages.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_transEdit_textChanged">on_transEdit_textChanged</a></td>
+<td>Private slot to handle changes of the translation text.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_transLanguageComboBox_currentIndexChanged">on_transLanguageComboBox_currentIndexChanged</a></td>
+<td>Private slot to handle the selection of the translation language.</td>
+</tr><tr>
+<td><a href="#TranslatorWidget.on_translateButton_clicked">on_translateButton_clicked</a></td>
+<td>Private slot to translate the entered text.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="TranslatorWidget.__init__" ID="TranslatorWidget.__init__"></a>
+<h4>TranslatorWidget (Constructor)</h4>
+<b>TranslatorWidget</b>(<i>plugin, translator, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>plugin</i></dt>
+<dd>
+reference to the plugin object (TranslatorPlugin)
+</dd><dt><i>translator</i></dt>
+<dd>
+reference to the translator object (Translator)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="TranslatorWidget.__engineComboBoxCurrentIndexChanged" ID="TranslatorWidget.__engineComboBoxCurrentIndexChanged"></a>
+<h4>TranslatorWidget.__engineComboBoxCurrentIndexChanged</h4>
+<b>__engineComboBoxCurrentIndexChanged</b>(<i>index</i>)
+<p>
+        Private slot to handle the selection of a translation service.
+</p><dl>
+<dt><i>index</i></dt>
+<dd>
+current index (integer)
+</dd>
+</dl><a NAME="TranslatorWidget.__mediaPlayerStateChanged" ID="TranslatorWidget.__mediaPlayerStateChanged"></a>
+<h4>TranslatorWidget.__mediaPlayerStateChanged</h4>
+<b>__mediaPlayerStateChanged</b>(<i>state</i>)
+<p>
+        Private slot handling changes of the media player state.
+</p><dl>
+<dt><i>state</i></dt>
+<dd>
+media player state (QAudio.State)
+</dd>
+</dl><a NAME="TranslatorWidget.__originalLanguage" ID="TranslatorWidget.__originalLanguage"></a>
+<h4>TranslatorWidget.__originalLanguage</h4>
+<b>__originalLanguage</b>(<i></i>)
+<p>
+        Private method to return the code of the selected original language.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+code of the original language (string)
+</dd>
+</dl><a NAME="TranslatorWidget.__pronounce" ID="TranslatorWidget.__pronounce"></a>
+<h4>TranslatorWidget.__pronounce</h4>
+<b>__pronounce</b>(<i>text, language</i>)
+<p>
+        Private method to pronounce the given text.
+</p><dl>
+<dt><i>text</i></dt>
+<dd>
+text to be pronounced (string)
+</dd><dt><i>language</i></dt>
+<dd>
+language code of the text (string)
+</dd>
+</dl><a NAME="TranslatorWidget.__translate" ID="TranslatorWidget.__translate"></a>
+<h4>TranslatorWidget.__translate</h4>
+<b>__translate</b>(<i>text, originalLanguage, translationLanguage</i>)
+<p>
+        Private method to translate the given text.
+</p><dl>
+<dt><i>text</i></dt>
+<dd>
+text to be translated (string)
+</dd><dt><i>originalLanguage</i></dt>
+<dd>
+language code of the original (string)
+</dd><dt><i>translationLanguage</i></dt>
+<dd>
+language code of the translation (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of translated text (string) and flag indicating
+            success (boolean)
+</dd>
+</dl><a NAME="TranslatorWidget.__translationLanguage" ID="TranslatorWidget.__translationLanguage"></a>
+<h4>TranslatorWidget.__translationLanguage</h4>
+<b>__translationLanguage</b>(<i></i>)
+<p>
+        Private method to return the code of the selected translation language.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+code of the translation language (string)
+</dd>
+</dl><a NAME="TranslatorWidget.__updateClearButton" ID="TranslatorWidget.__updateClearButton"></a>
+<h4>TranslatorWidget.__updateClearButton</h4>
+<b>__updateClearButton</b>(<i></i>)
+<p>
+        Private slot to set the state of the clear button.
+</p><a NAME="TranslatorWidget.__updateEngines" ID="TranslatorWidget.__updateEngines"></a>
+<h4>TranslatorWidget.__updateEngines</h4>
+<b>__updateEngines</b>(<i></i>)
+<p>
+        Private slot to update the engines combo box.
+</p><a NAME="TranslatorWidget.__updateLanguages" ID="TranslatorWidget.__updateLanguages"></a>
+<h4>TranslatorWidget.__updateLanguages</h4>
+<b>__updateLanguages</b>(<i></i>)
+<p>
+        Private slot to update the language combo boxes.
+</p><a NAME="TranslatorWidget.__updatePronounceButtons" ID="TranslatorWidget.__updatePronounceButtons"></a>
+<h4>TranslatorWidget.__updatePronounceButtons</h4>
+<b>__updatePronounceButtons</b>(<i></i>)
+<p>
+        Private slot to set the state of the pronounce buttons.
+</p><a NAME="TranslatorWidget.on_clearButton_clicked" ID="TranslatorWidget.on_clearButton_clicked"></a>
+<h4>TranslatorWidget.on_clearButton_clicked</h4>
+<b>on_clearButton_clicked</b>(<i></i>)
+<p>
+        Private slot to clear the text fields.
+</p><a NAME="TranslatorWidget.on_origEdit_textChanged" ID="TranslatorWidget.on_origEdit_textChanged"></a>
+<h4>TranslatorWidget.on_origEdit_textChanged</h4>
+<b>on_origEdit_textChanged</b>(<i></i>)
+<p>
+        Private slot to handle changes of the original text.
+</p><a NAME="TranslatorWidget.on_origLanguageComboBox_currentIndexChanged" ID="TranslatorWidget.on_origLanguageComboBox_currentIndexChanged"></a>
+<h4>TranslatorWidget.on_origLanguageComboBox_currentIndexChanged</h4>
+<b>on_origLanguageComboBox_currentIndexChanged</b>(<i>index</i>)
+<p>
+        Private slot to handle the selection of the original language.
+</p><dl>
+<dt><i>index</i></dt>
+<dd>
+current index (integer)
+</dd>
+</dl><a NAME="TranslatorWidget.on_pronounceOrigButton_clicked" ID="TranslatorWidget.on_pronounceOrigButton_clicked"></a>
+<h4>TranslatorWidget.on_pronounceOrigButton_clicked</h4>
+<b>on_pronounceOrigButton_clicked</b>(<i></i>)
+<p>
+        Private slot to pronounce the original text.
+</p><a NAME="TranslatorWidget.on_pronounceTransButton_clicked" ID="TranslatorWidget.on_pronounceTransButton_clicked"></a>
+<h4>TranslatorWidget.on_pronounceTransButton_clicked</h4>
+<b>on_pronounceTransButton_clicked</b>(<i></i>)
+<p>
+        Private slot to pronounce the translated text.
+</p><a NAME="TranslatorWidget.on_swapButton_clicked" ID="TranslatorWidget.on_swapButton_clicked"></a>
+<h4>TranslatorWidget.on_swapButton_clicked</h4>
+<b>on_swapButton_clicked</b>(<i></i>)
+<p>
+        Private slot to swap the languages.
+</p><a NAME="TranslatorWidget.on_transEdit_textChanged" ID="TranslatorWidget.on_transEdit_textChanged"></a>
+<h4>TranslatorWidget.on_transEdit_textChanged</h4>
+<b>on_transEdit_textChanged</b>(<i></i>)
+<p>
+        Private slot to handle changes of the translation text.
+</p><a NAME="TranslatorWidget.on_transLanguageComboBox_currentIndexChanged" ID="TranslatorWidget.on_transLanguageComboBox_currentIndexChanged"></a>
+<h4>TranslatorWidget.on_transLanguageComboBox_currentIndexChanged</h4>
+<b>on_transLanguageComboBox_currentIndexChanged</b>(<i>index</i>)
+<p>
+        Private slot to handle the selection of the translation language.
+</p><dl>
+<dt><i>index</i></dt>
+<dd>
+current index (integer)
+</dd>
+</dl><a NAME="TranslatorWidget.on_translateButton_clicked" ID="TranslatorWidget.on_translateButton_clicked"></a>
+<h4>TranslatorWidget.on_translateButton_clicked</h4>
+<b>on_translateButton_clicked</b>(<i></i>)
+<p>
+        Private slot to translate the entered text.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage</h1>
+<p>
+Package implementing the Translator page of the configuration dialog.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage.html">TranslatorPage</a></td>
+<td>Module implementing the Time Tracker configuration page.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines</h1>
+<p>
+Package containing the various translation engines.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html">DeepLEngine</a></td>
+<td>Module implementing the DeepL translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html">GlosbeEngine</a></td>
+<td>Module implementing the Glosbe translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html">GoogleV1Engine</a></td>
+<td>Module implementing the Google V1 translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html">GoogleV2Engine</a></td>
+<td>Module implementing the Google V2 translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MicrosoftEngine.html">MicrosoftEngine</a></td>
+<td>Module implementing the Microsoft translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html">MyMemoryEngine</a></td>
+<td>Module implementing the MyMemory translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.PromtEngine.html">PromtEngine</a></td>
+<td>Module implementing the Promt translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.TranslationEngine.html">TranslationEngine</a></td>
+<td>Module implementing the translation engine base class.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.YandexEngine.html">YandexEngine</a></td>
+<td>Module implementing the Yandex translation engine.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html">TranslatorEngines</a></td>
+<td>Package containing the various translation engines.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.Translator.html	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.UiExtensionPlugins.Translator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<h1>eric6.Plugins.UiExtensionPlugins.Translator</h1>
+<p>
+Package implementing the translator.
+</p>
+
+<h3>Packages</h3>
+<table>
+<tr>
+<td><a href="index-eric6.Plugins.UiExtensionPlugins.Translator.ConfigurationPage.html">ConfigurationPage</a></td>
+<td>Package implementing the Translator page of the configuration dialog.</td>
+</tr><tr>
+<td><a href="index-eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.html">TranslatorEngines</a></td>
+<td>Package containing the various translation engines.</td>
+</tr>
+</table>
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.Translator.html">Translator</a></td>
+<td>Module implementing the translator object.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorLanguagesDb.html">TranslatorLanguagesDb</a></td>
+<td>Module implementing the translation languages database.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorRequest.html">TranslatorRequest</a></td>
+<td>Module implementing a synchronous network request handler for translation requests.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html">TranslatorWidget</a></td>
+<td>Module implementing the translator widget.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.html	Sun Dec 10 14:51:54 2017 +0100
+++ b/Documentation/Source/index-eric6.Plugins.UiExtensionPlugins.html	Sun Dec 10 16:23:29 2017 +0100
@@ -30,6 +30,9 @@
 <td><a href="index-eric6.Plugins.UiExtensionPlugins.PipInterface.html">PipInterface</a></td>
 <td>Package implementing the various pip dialogs and data.</td>
 </tr><tr>
+<td><a href="index-eric6.Plugins.UiExtensionPlugins.Translator.html">Translator</a></td>
+<td>Package implementing the translator.</td>
+</tr><tr>
 <td><a href="index-eric6.Plugins.UiExtensionPlugins.VirtualenvInterface.html">VirtualenvInterface</a></td>
 <td>Package implementing the virtualenv wizard dialogs and data.</td>
 </tr>
--- a/Documentation/Source/index-eric6.Plugins.html	Sun Dec 10 14:51:54 2017 +0100
+++ b/Documentation/Source/index-eric6.Plugins.html	Sun Dec 10 16:23:29 2017 +0100
@@ -74,6 +74,9 @@
 <td><a href="eric6.Plugins.PluginTabnanny.html">PluginTabnanny</a></td>
 <td>Module implementing the Tabnanny plugin.</td>
 </tr><tr>
+<td><a href="eric6.Plugins.PluginTranslator.html">PluginTranslator</a></td>
+<td>Module implementing the Translator plugin.</td>
+</tr><tr>
 <td><a href="eric6.Plugins.PluginVcsMercurial.html">PluginVcsMercurial</a></td>
 <td>Module implementing the Mercurial version control plugin.</td>
 </tr><tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/PluginTranslator.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,210 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Translator plugin.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication, QDateTime, Qt
+
+from E5Gui.E5Application import e5App
+
+import Preferences
+
+from UiExtensionPlugins.Translator.Translator import Translator
+
+import UI.Info
+
+# Start-Of-Header
+name = "Translator Plugin"
+author = "Detlev Offenbach <detlev@die-offenbachs.de>"
+autoactivate = True
+deactivateable = True
+version = UI.Info.VersionOnly
+className = "TranslatorPlugin"
+packageName = "__core__"
+shortDescription = "Translation utility using various translators."
+longDescription = \
+    """This plug-in implements a utility to translate text using""" \
+    """ various online translation services."""
+needsRestart = False
+pyqtApi = 2
+python2Compatible = True
+# End-Of-Header
+
+error = ""
+
+translatorPluginObject = None
+    
+
+def createTranslatorPage(configDlg):
+    """
+    Module function to create the Translator configuration page.
+    
+    @param configDlg reference to the configuration dialog
+    @return reference to the configuration page
+    """
+    from UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage \
+        import TranslatorPage
+    page = TranslatorPage(translatorPluginObject)
+    return page
+    
+
+def getConfigData():
+    """
+    Module function returning data as required by the configuration dialog.
+    
+    @return dictionary containing the relevant data
+    """
+    return {
+        "translatorPage": [
+            QCoreApplication.translate("TranslatorPlugin",
+                                       "Translator"),
+            os.path.join("UiExtensionPlugins", "Translator", "icons",
+                         "flag.png"),
+            createTranslatorPage, None, None],
+    }
+
+
+def prepareUninstall():
+    """
+    Module function to prepare for an uninstallation.
+    """
+    Preferences.Prefs.settings.remove(TranslatorPlugin.PreferencesKey)
+
+
+class TranslatorPlugin(QObject):
+    """
+    Class implementing the Translator plugin.
+    """
+    PreferencesKey = "Translator"
+    
+    updateLanguages = pyqtSignal()
+    
+    def __init__(self, ui):
+        """
+        Constructor
+        
+        @param ui reference to the user interface object (UI.UserInterface)
+        """
+        super(TranslatorPlugin, self).__init__(ui)
+        self.__ui = ui
+        self.__initialize()
+        
+        self.__defaults = {
+            "OriginalLanguage": "en",
+            "TranslationLanguage": "de",
+            "SelectedEngine": "deepl",
+            "EnabledLanguages": ["en", "de", "fr", "cs", "es", "pt",
+                                 "ru", "tr", "zh-CN", "zh-TW"],
+            # service specific settings below
+            # Google
+            "GoogleEnableDictionary": False,
+            "GoogleV2Key": "",
+            # Microsoft
+            "MsTranslatorKey": "",
+            "MsAuthToken": "",
+            "MsAuthTokenExpire": QDateTime(),
+            # MyMemory
+            "MyMemoryKey": "",
+            "MyMemoryEmail": "",
+            # Yandex
+            "YandexKey": "",
+        }
+    
+    def __initialize(self):
+        """
+        Private slot to (re)initialize the plugin.
+        """
+        self.__object = None
+    
+    def activate(self):
+        """
+        Public method to activate this plugin.
+        
+        @return tuple of None and activation status (boolean)
+        """
+        global error
+        error = ""     # clear previous error
+        
+        global translatorPluginObject
+        translatorPluginObject = self
+        
+        self.__object = Translator(self, self.__ui)
+        self.__object.activate()
+        e5App().registerPluginObject("Translator", self.__object)
+        
+        return None, True
+    
+    def deactivate(self):
+        """
+        Public method to deactivate this plugin.
+        """
+        e5App().unregisterPluginObject("Translator")
+        self.__object.deactivate()
+        
+        self.__initialize()
+    
+    def getPreferencesDefault(self, key):
+        """
+        Public method to retrieve the various default settings.
+        
+        @param key the key of the value to get
+        @return the requested setting
+        """
+        return self.__defaults[key]
+    
+    def getPreferences(self, key):
+        """
+        Public method to retrieve the various settings.
+        
+        @param key the key of the value to get
+        @return the requested setting
+        """
+        if key in ["EnabledLanguages"]:
+            return Preferences.toList(
+                Preferences.Prefs.settings.value(
+                    self.PreferencesKey + "/" + key, self.__defaults[key]))
+        elif key in ["GoogleEnableDictionary"]:
+            return Preferences.toBool(
+                Preferences.Prefs.settings.value(
+                    self.PreferencesKey + "/" + key, self.__defaults[key]))
+        elif key in ["MsAuthTokenExpire"]:
+            value = Preferences.Prefs.settings.value(
+                self.PreferencesKey + "/" + key, self.__defaults[key])
+            if isinstance(value, str):
+                if value.startswith("@QDateTime"):
+                    # old value, replace with default
+                    value = self.__defaults[key]
+                else:
+                    value = QDateTime.fromString(value, Qt.ISODate)
+            return value
+        else:
+            return Preferences.Prefs.settings.value(
+                self.PreferencesKey + "/" + key, self.__defaults[key])
+    
+    def setPreferences(self, key, value):
+        """
+        Public method to store the various settings.
+        
+        @param key the key of the setting to be set (string)
+        @param value the value to be set
+        """
+        if key in ["MsAuthTokenExpire"]:
+            Preferences.Prefs.settings.setValue(
+                self.PreferencesKey + "/" + key, value.toString(Qt.ISODate))
+        else:
+            Preferences.Prefs.settings.setValue(
+                self.PreferencesKey + "/" + key, value)
+        
+        if key in ["EnabledLanguages"]:
+            self.updateLanguages.emit()
+
+#
+# eflag: noqa = M801
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,179 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Time Tracker configuration page.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot, Qt
+from PyQt5.QtWidgets import QListWidgetItem
+
+from E5Gui import E5MessageBox
+
+from Preferences.ConfigurationPages.ConfigurationPageBase import \
+    ConfigurationPageBase
+from .Ui_TranslatorPage import Ui_TranslatorPage
+
+from ..TranslatorLanguagesDb import TranslatorLanguagesDb
+from .. import TranslatorEngines
+
+
+class TranslatorPage(ConfigurationPageBase, Ui_TranslatorPage):
+    """
+    Class implementing the Time Tracker configuration page.
+    """
+    def __init__(self, plugin):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object
+        """
+        super(TranslatorPage, self).__init__()
+        self.setupUi(self)
+        self.setObjectName("TranslatorPage")
+        
+        self.__plugin = plugin
+        self.__enableLanguageWarning = True
+        
+        self.googlev2Label.setText(self.tr(
+            """<p>A key is <b>required</b> to use this service."""
+            """ <a href="{0}">Get a commercial API key.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("googlev2")))
+        self.msLabel.setText(self.tr(
+            """<p>A registration of the text translation service is"""
+            """ <b>required</b>. <a href="{0}">Register with Microsoft"""
+            """ Azure.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("microsoft")))
+        self.mymemoryLabel.setText(self.tr(
+            """<p>A key is <b>optional</b> to use this service."""
+            """ <a href="{0}">Get a free API key.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("mymemory")))
+        self.yandexLabel.setText(self.tr(
+            """<p>A key is <b>required</b> to use this service."""
+            """ <a href="{0}">Get a free API key.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("yandex")))
+        
+        # set initial values
+        enabledLanguages = self.__plugin.getPreferences("EnabledLanguages")
+        languages = TranslatorLanguagesDb()
+        for languageCode in languages.getAllLanguages():
+            itm = QListWidgetItem()
+            itm.setText(languages.getLanguage(languageCode))
+            itm.setIcon(languages.getLanguageIcon(languageCode))
+            itm.setData(Qt.UserRole, languageCode)
+            if languageCode in enabledLanguages or not enabledLanguages:
+                itm.setCheckState(Qt.Checked)
+            else:
+                itm.setCheckState(Qt.Unchecked)
+            self.languagesList.addItem(itm)
+        self.languagesList.sortItems()
+        
+        # Google settings
+        self.dictionaryCheckBox.setChecked(
+            self.__plugin.getPreferences("GoogleEnableDictionary"))
+        self.googlev2KeyEdit.setText(
+            self.__plugin.getPreferences("GoogleV2Key"))
+        # Microsoft settings
+        self.msSubscriptionKeyEdit.setText(
+            self.__plugin.getPreferences("MsTranslatorKey"))
+        # MyMemory settings
+        self.mymemoryKeyEdit.setText(
+            self.__plugin.getPreferences("MyMemoryKey"))
+        self.mymemoryEmailEdit.setText(
+            self.__plugin.getPreferences("MyMemoryEmail"))
+        # Yandex settings
+        self.yandexKeyEdit.setText(
+            self.__plugin.getPreferences("YandexKey"))
+    
+    def save(self):
+        """
+        Public slot to save the Pyramid configuration.
+        """
+        enabledLanguages = [
+            itm.data(Qt.UserRole)
+            for itm in self.__checkedLanguageItems()
+        ]
+        self.__plugin.setPreferences(
+            "EnabledLanguages", enabledLanguages)
+        
+        # Google settings
+        self.__plugin.setPreferences(
+            "GoogleEnableDictionary", self.dictionaryCheckBox.isChecked())
+        self.__plugin.setPreferences(
+            "GoogleV2Key", self.googlev2KeyEdit.text())
+        # Microsoft settings
+        self.__plugin.setPreferences(
+            "MsTranslatorKey", self.msSubscriptionKeyEdit.text())
+        # MyMemory settings
+        self.__plugin.setPreferences(
+            "MyMemoryKey", self.mymemoryKeyEdit.text())
+        # Yandex settings
+        self.__plugin.setPreferences(
+            "YandexKey", self.yandexKeyEdit.text())
+    
+    def __checkedLanguageItems(self):
+        """
+        Private method to get a list of checked language items.
+        
+        @return list of checked language items (list of QListWidgetItem)
+        """
+        items = []
+        for index in range(self.languagesList.count()):
+            itm = self.languagesList.item(index)
+            if itm.checkState() == Qt.Checked:
+                items.append(itm)
+        
+        return items
+    
+    @pyqtSlot()
+    def on_setButton_clicked(self):
+        """
+        Private slot to set or unset all items.
+        """
+        self.__enableLanguageWarning = False
+        
+        unset = len(self.__checkedLanguageItems()) > 0
+        for index in range(self.languagesList.count()):
+            itm = self.languagesList.item(index)
+            if unset:
+                itm.setCheckState(Qt.Unchecked)
+            else:
+                itm.setCheckState(Qt.Checked)
+        
+        self.__enableLanguageWarning = True
+    
+    @pyqtSlot()
+    def on_defaultButton_clicked(self):
+        """
+        Private slot to set the default languages.
+        """
+        self.__enableLanguageWarning = False
+        
+        defaults = self.__plugin.getPreferencesDefault("EnabledLanguages")
+        for index in range(self.languagesList.count()):
+            itm = self.languagesList.item(index)
+            if itm.data(Qt.UserRole) in defaults:
+                itm.setCheckState(Qt.Checked)
+            else:
+                itm.setCheckState(Qt.Unchecked)
+        
+        self.__enableLanguageWarning = True
+    
+    @pyqtSlot(QListWidgetItem)
+    def on_languagesList_itemChanged(self, item):
+        """
+        Private slot to handle the selection of an item.
+        
+        @param item reference to the changed item (QListWidgetItem)
+        """
+        if self.__enableLanguageWarning and \
+                len(self.__checkedLanguageItems()) < 2:
+            E5MessageBox.warning(
+                self,
+                self.tr("Enabled Languages"),
+                self.tr("""At least two languages should be selected to"""
+                        """ work correctly."""))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TranslatorPage</class>
+ <widget class="QWidget" name="TranslatorPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>494</width>
+    <height>937</height>
+   </rect>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_3">
+   <item>
+    <widget class="QLabel" name="headerLabel">
+     <property name="text">
+      <string>&lt;b&gt;Configure Translator&lt;/b&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line15">
+     <property name="frameShape">
+      <enum>QFrame::HLine</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Sunken</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Enabled Languages</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QListWidget" name="languagesList">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>250</height>
+         </size>
+        </property>
+        <property name="iconSize">
+         <size>
+          <width>22</width>
+          <height>22</height>
+         </size>
+        </property>
+        <property name="isWrapping" stdset="0">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="setButton">
+          <property name="toolTip">
+           <string>Press to set or unset all entries</string>
+          </property>
+          <property name="text">
+           <string>Set/Unset All</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_3">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="defaultButton">
+          <property name="toolTip">
+           <string>Press to set the default list of enabled languages</string>
+          </property>
+          <property name="text">
+           <string>Set Default</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Google V.1</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QCheckBox" name="dictionaryCheckBox">
+        <property name="toolTip">
+         <string>Select to show the results of the translation dictionary</string>
+        </property>
+        <property name="text">
+         <string>Show dictionary results</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_5">
+     <property name="title">
+      <string>Google V.2</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_3">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Key:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="googlev2KeyEdit">
+        <property name="toolTip">
+         <string>Enter your Google Translate key</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="2">
+       <widget class="QLabel" name="googlev2Label">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+        <property name="openExternalLinks">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_6">
+     <property name="title">
+      <string>Microsoft Azure</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_4">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>Subscription Key:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="msSubscriptionKeyEdit">
+        <property name="toolTip">
+         <string>Enter the subscription key of the text translator service</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="2">
+       <widget class="QLabel" name="msLabel">
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+        <property name="openExternalLinks">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_4">
+     <property name="title">
+      <string>MyMemory</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Email:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="mymemoryEmailEdit">
+        <property name="toolTip">
+         <string>Enter email address to be sent with each request (optional)</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Key:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="mymemoryKeyEdit">
+        <property name="toolTip">
+         <string>Enter your MyMemory key</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" colspan="2">
+       <widget class="QLabel" name="mymemoryLabel">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+        <property name="openExternalLinks">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Yandex</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Key:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="yandexKeyEdit">
+        <property name="toolTip">
+         <string>Enter your Yandex key</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="2">
+       <widget class="QLabel" name="yandexLabel">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+        <property name="openExternalLinks">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>languagesList</tabstop>
+  <tabstop>setButton</tabstop>
+  <tabstop>defaultButton</tabstop>
+  <tabstop>dictionaryCheckBox</tabstop>
+  <tabstop>googlev2KeyEdit</tabstop>
+  <tabstop>msSubscriptionKeyEdit</tabstop>
+  <tabstop>mymemoryEmailEdit</tabstop>
+  <tabstop>mymemoryKeyEdit</tabstop>
+  <tabstop>yandexKeyEdit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/__init__.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing the Translator page of the configuration dialog.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/Translator.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the translator object.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+from PyQt5.QtCore import Qt, QObject
+from PyQt5.QtGui import QKeySequence
+
+from E5Gui.E5Action import E5Action
+
+import UI.PixmapCache
+
+
+class Translator(QObject):
+    """
+    Class implementing the translator object.
+    """
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent parent (QObject)
+        """
+        QObject.__init__(self, parent)
+        
+        self.__plugin = plugin
+        self.__ui = parent
+        
+        self.__widget = None
+    
+    def activate(self):
+        """
+        Public method to activate the translator.
+        """
+        from .TranslatorWidget import TranslatorWidget
+        
+        self.__widget = TranslatorWidget(self.__plugin, self)
+        self.__ui.addSideWidget(
+            self.__ui.BottomSide, self.__widget,
+            UI.PixmapCache.getIcon(
+                os.path.join(os.path.dirname(__file__), "icons", "flag.png")),
+            self.tr("Translator"))
+        
+        self.__activateAct = E5Action(
+            self.tr('Translator'),
+            self.tr('T&ranslator'),
+            QKeySequence(self.tr("Alt+Shift+R")),
+            0, self,
+            'translator_activate')
+        self.__activateAct.setStatusTip(self.tr(
+            "Switch the input focus to the Translator window."))
+        self.__activateAct.setWhatsThis(self.tr(
+            """<b>Activate Translator</b>"""
+            """<p>This switches the input focus to the Translator"""
+            """ window.</p>"""
+        ))
+        self.__activateAct.triggered.connect(self.__activateWidget)
+        
+        self.__ui.addE5Actions([self.__activateAct], 'ui')
+        menu = self.__ui.getMenu("subwindow")
+        menu.addAction(self.__activateAct)
+    
+    def deactivate(self):
+        """
+        Public method to deactivate the time tracker.
+        """
+        menu = self.__ui.getMenu("subwindow")
+        menu.removeAction(self.__activateAct)
+        self.__ui.removeE5Actions([self.__activateAct], 'ui')
+        self.__ui.removeSideWidget(self.__widget)
+    
+    def getAppIcon(self, name):
+        """
+        Public method to get an icon.
+        
+        @param name name of the icon file (string)
+        @return icon (QIcon)
+        """
+        return UI.PixmapCache.getIcon(os.path.join(
+            os.path.dirname(__file__), "icons", name))
+    
+    def __activateWidget(self):
+        """
+        Private slot to handle the activation of the project browser.
+        """
+        if self.__ui.layout == "Toolboxes":
+            self.__ui.hToolboxDock.show()
+            self.__ui.hToolboxDock.setCurrentWidget(self.__widget)
+        elif self.__ui.layout == "Sidebars":
+            self.__ui.bottomSidebar.show()
+            self.__ui.bottomSidebar.setCurrentWidget(self.__widget)
+        else:
+            self.__widget.show()
+        self.__widget.setFocus(Qt.ActiveWindowFocusReason)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the DeepL translation engine.
+"""
+
+from __future__ import unicode_literals
+try:
+    str = unicode
+except NameError:
+    pass
+
+import json
+import re
+
+from PyQt5.QtCore import QUrl, QByteArray
+
+from .TranslationEngine import TranslationEngine
+
+
+class DeepLEngine(TranslationEngine):
+    """
+    Class implementing the translation engine for the DeepL
+    translation service.
+    """
+    TranslatorUrl = "https://deepl.com/jsonrpc"
+    MaxTranslationTextLen = 5000
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object
+        @type TranslatorPlugin
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super(DeepLEngine, self).__init__(plugin, parent)
+        
+        self.__splitPattern = re.compile(r"([^\.!\?;]+[\.!\?;]*)")
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name
+        @rtype str
+        """
+        return "deepl"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes
+        @rtype list of str
+        """
+        return ["de", "en", "es", "fr", "it", "nl", "pl",]
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        if len(text) > self.MaxTranslationTextLen:
+            return self.tr(
+                "Text to be translated exceeds the translation limit of {0}"
+                " characters.").format(self.MaxTranslationTextLen), False
+        
+        sentences = [s for s in self.__splitPattern.split(text) if len(s) > 0]
+        if originalLanguage in self.supportedLanguages():
+            originalLanguageU = originalLanguage.upper()
+        else:
+            originalLanguageU = "auto"
+        payload = {
+            "jsonrpc": "2.0",
+            "method": "LMT_handle_jobs",
+            "id": 1,
+            "params": {
+                "jobs": [{"kind": "default", "raw_en_sentence": s}
+                         for s in sentences
+                ],
+                "lang": {
+                    "user_preferred_langs": [
+                        originalLanguage.upper(),
+                        translationLanguage.upper(),
+                    ],
+                    "source_lang_user_selected": originalLanguageU,
+                    "target_lang": translationLanguage.upper()
+                },
+                "priority": 1,
+            }
+        }
+        request = QByteArray(json.dumps(payload).encode("utf-8"))
+        response, ok = requestObject.post(QUrl(self.TranslatorUrl), request,
+                                          "json")
+        if ok:
+            try:
+                responseDict = json.loads(response)
+            except ValueError:
+                return self.tr("Invalid response received from DeepL"), False
+            
+            if "error" in responseDict:
+                return self.tr("DeepL reported an error.\nMessage: {0}")\
+                    .format(responseDict["error"]["message"]),  False
+            
+            if "result" not in responseDict:
+                return self.tr("DeepL call returned an unknown result"), False
+            
+            if not responseDict["result"]["source_lang"] or \
+               not responseDict["result"]["target_lang"]:
+                return self.tr(
+                    "Unsupported language code given (source: {0},"
+                    " target: {1}).").format(
+                    originalLanguage, translationLanguage), False
+            
+            translations = responseDict["result"]["translations"]
+            if len(translations) == 0:
+                return self.tr("<p>No translation found</p>"), True
+            
+            # show sentence by sentence separated by a line
+            translationStrings = []
+            for translation in translations:
+                translationStrings.append(
+                    "<br/>".join(
+                        [s["postprocessed_sentence"] for s in sorted(
+                            translation["beams"],
+                            key=lambda b: -1 * b["score"])
+                        ]
+                    )
+                )
+            result = "<p>" + "<hr/>".join(translationStrings) + "</p>"
+        
+        else:
+            result = response
+        return result, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Glosbe translation engine.
+"""
+
+from __future__ import unicode_literals
+try:
+    str = unicode
+except NameError:
+    pass
+
+import json
+
+from PyQt5.QtCore import QUrl
+
+from .TranslationEngine import TranslationEngine
+
+
+class GlosbeEngine(TranslationEngine):
+    """
+    Class implementing the translation engine for the Glosbe
+    translation service.
+    """
+    TranslatorUrl = "https://glosbe.com/gapi/translate"
+    TranslatorLimit = 500
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(GlosbeEngine, self).__init__(plugin, parent)
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name (string)
+        """
+        return "glosbe"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return ["ar", "be", "bg", "bs", "ca", "cs", "da", "de", "el", "en",
+                "es", "et", "fi", "fr", "ga", "gl", "hi", "hr", "hu", "id",
+                "is", "it", "iw", "ja", "ka", "ko", "lt", "lv", "mk", "mt",
+                "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr",
+                "sv", "th", "tl", "tr", "uk", "vi", "zh-CN", "zh-TW",
+                ]
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        from ..TranslatorLanguagesDb import TranslatorLanguagesDb
+        languages = TranslatorLanguagesDb(self)
+        
+        params = "?from={0}&dest={1}&format=json&phrase={2}".format(
+            languages.convertTwoToThree(originalLanguage),
+            languages.convertTwoToThree(translationLanguage),
+            text)
+        url = QUrl(self.TranslatorUrl + params)
+        response, ok = requestObject.get(url)
+        response = str(response, "utf-8", "replace")
+        if ok:
+            try:
+                responseDict = json.loads(response)
+            except ValueError:
+                return self.tr("Invalid response received"), False
+            
+            result = ""
+            for translation in responseDict["tuc"]:
+                if "phrase" in translation:
+                    result += "<b>{0}</b>".format(
+                        translation["phrase"]["text"])
+                    if "meanings" in translation:
+                        for meaning in translation["meanings"]:
+                            result += "<br/><i>({0})</i>".format(
+                                meaning["text"])
+                    if translation != responseDict["tuc"][-1]:
+                        result += "<hr/>"
+            if not result:
+                result = self.tr("No translation found.")
+                ok = False
+        else:
+            result = response
+        return result, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Google V1 translation engine.
+"""
+
+from __future__ import unicode_literals
+
+import json
+import re
+
+from PyQt5.QtCore import QByteArray, QUrl
+
+import Utilities
+
+from .TranslationEngine import TranslationEngine
+
+
+class GoogleV1Engine(TranslationEngine):
+    """
+    Class implementing the translation engine for the old Google
+    translation service.
+    """
+    TranslatorUrl = "https://translate.googleapis.com/translate_a/single"
+    TextToSpeechUrl = "https://translate.google.com/translate_tts"
+    TextToSpeechLimit = 100
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(GoogleV1Engine, self).__init__(plugin, parent)
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name (string)
+        """
+        return "googlev1"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return ["ar", "be", "bg", "bs", "ca", "cs", "da", "de", "el", "en",
+                "es", "et", "fi", "fr", "ga", "gl", "hi", "hr", "hu", "id",
+                "is", "it", "iw", "ja", "ka", "ko", "lt", "lv", "mk", "mt",
+                "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr",
+                "sv", "th", "tl", "tr", "uk", "vi", "zh-CN", "zh-TW",
+                ]
+    
+    def hasTTS(self):
+        """
+        Public method indicating the Text-to-Speech capability.
+        
+        @return flag indicating the Text-to-Speech capability (boolean)
+        """
+        return False        # doesn't work reliably
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        params = QByteArray(
+            "client=gtx&sl={0}&tl={1}&dt=t&dt=bd&ie=utf-8&oe=utf-8&q=".format(
+                originalLanguage, translationLanguage).encode("utf-8"))
+        encodedText = QByteArray(Utilities.html_encode(text).encode("utf-8"))\
+            .toPercentEncoding()
+        request = params + encodedText
+        response, ok = requestObject.post(QUrl(self.TranslatorUrl), request)
+        if ok:
+            try:
+                # clean up the response
+                response = re.sub(r',{2,}', ',', response)
+                responseDict = json.loads(response)
+            except ValueError:
+                return self.tr("Invalid response received"), False
+            
+            if isinstance(responseDict, dict):
+                sentences = responseDict["sentences"]
+                result = ""
+                for sentence in sentences:
+                    result += sentence["trans"].replace("\n", "<br/>")
+                
+                if self.plugin.getPreferences("GoogleEnableDictionary") and \
+                        "dict" in responseDict:
+                    dictionary = responseDict["dict"]
+                    for value in dictionary:
+                        result += "<hr/><u><b>{0}</b> - {1}</u><br/>".format(
+                            text, value["pos"])
+                        for entry in value["entry"]:
+                            if "previous_word" in entry:
+                                previous = entry["previous_word"] + " "
+                            else:
+                                previous = ""
+                            word = entry["word"]
+                            reverse = entry["reverse_translation"]
+                            result += "<br/>{0}<b>{1}</b> - {2}".format(
+                                previous, word, ", ".join(reverse))
+                        if value != dictionary[-1]:
+                            result += "<br/>"
+            elif isinstance(responseDict, list):
+                sentences = responseDict[0]
+                result = "".join([s[0] for s in sentences])\
+                    .replace("\n", "<br/>")
+                if self.plugin.getPreferences("GoogleEnableDictionary") and \
+                        len(responseDict) > 2:
+                    if not responseDict[1]:
+                        result = self.tr("No translation found.")
+                        ok = False
+                    else:
+                        for wordTypeList in responseDict[1]:
+                            result += "<hr/><u><b>{0}</b> - {1}</u>".format(
+                                wordTypeList[0], wordTypeList[-2])
+                            for wordsList in wordTypeList[2]:
+                                reverse = wordsList[0]
+                                words = wordsList[1]
+                                result += "<br/><b>{0}</b> - {1}".format(
+                                    reverse, ", ".join(words))
+            else:
+                result = responseDict
+        else:
+            result = response
+        return result, ok
+    
+    def getTextToSpeechData(self, requestObject, text, language):
+        """
+        Public method to pronounce the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be pronounced (string)
+        @param language language code of the text (string)
+        @return tuple with pronounce data (QByteArray) or error string (string)
+            and success flag (boolean)
+        """
+        text = text.split("\n\n", 1)[0]
+        if len(text) > self.TextToSpeechLimit:
+            return (self.tr("Only texts up to {0} characters are allowed.")
+                    .format(self.TextToSpeechLimit), False)
+        
+        url = QUrl(self.TextToSpeechUrl +
+                   "?client=tw-ob&ie=utf-8&tl={0}&q={1}".format(
+                       language, text))
+        return requestObject.get(url)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Google V2 translation engine.
+"""
+
+from __future__ import unicode_literals
+
+import json
+
+from PyQt5.QtCore import QUrl
+
+from .TranslationEngine import TranslationEngine
+
+
+class GoogleV2Engine(TranslationEngine):
+    """
+    Class implementing the translation engine for the new Google
+    translation service.
+    """
+    TranslatorUrl = "https://www.googleapis.com/language/translate/v2"
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(GoogleV2Engine, self).__init__(plugin, parent)
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name (string)
+        """
+        return "googlev2"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return ["ar", "be", "bg", "bs", "ca", "cs", "da", "de", "el", "en",
+                "es", "et", "fi", "fr", "ga", "gl", "hi", "hr", "hu", "id",
+                "is", "it", "iw", "ja", "ka", "ko", "lt", "lv", "mk", "mt",
+                "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr",
+                "sv", "th", "tl", "tr", "uk", "vi", "zh-CN", "zh-TW",
+                ]
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        apiKey = self.plugin.getPreferences("GoogleV2Key")
+        if not apiKey:
+            return self.tr("A valid Google Translate key is required."), False
+        
+        params = "?key={3}&source={0}&target={1}&q={2}".format(
+            originalLanguage, translationLanguage, text, apiKey)
+        url = QUrl(self.TranslatorUrl + params)
+        response, ok = requestObject.get(url)
+        response = str(response, "utf-8", "replace")
+        if ok:
+            try:
+                responseDict = json.loads(response)
+            except ValueError:
+                return self.tr("Invalid response received"), False
+            
+            if "data" not in responseDict or \
+                    "translations" not in responseDict["data"]:
+                return self.tr("No translation available."), False
+            
+            result = ""
+            translations = responseDict["data"]["translations"]
+            for translation in translations:
+                result += translation["translatedText"]
+                if translation != translations[-1]:
+                    result += "<br/>"
+        else:
+            result = response
+        return result, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,204 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Microsoft translation engine.
+"""
+
+from __future__ import unicode_literals
+try:
+    str = unicode
+except NameError:
+    pass
+
+from PyQt5.QtCore import QUrl, QDateTime, QByteArray
+
+from .TranslationEngine import TranslationEngine
+
+
+class MicrosoftEngine(TranslationEngine):
+    """
+    Class implementing the translation engine for the Microsoft
+    translation service.
+    """
+    AccessTokenUrl = \
+        "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"
+    TranslatorUrl = "https://api.microsofttranslator.com/V2/Http.svc/Translate"
+    TextToSpeechUrl = "https://api.microsofttranslator.com/V2/Http.svc/Speak"
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(MicrosoftEngine, self).__init__(plugin, parent)
+        
+        self.__mappings = {
+            "zh-CN": "zh-CHS",
+            "zh-TW": "zh-CHT",
+        }
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name (string)
+        """
+        return "microsoft"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return ["ar", "bg", "ca", "cs", "da", "de", "en",
+                "es", "et", "fi", "fr", "hi", "hu", "id",
+                "it", "ja", "ko", "lt", "lv", "mt",
+                "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl",
+                "sv", "th", "tr", "uk", "vi", "zh-CN", "zh-TW",
+                ]
+    
+    def hasTTS(self):
+        """
+        Public method indicating the Text-to-Speech capability.
+        
+        @return flag indicating the Text-to-Speech capability (boolean)
+        """
+        return True
+    
+    def __mapLanguageCode(self, code):
+        """
+        Private method to map a language code to the Microsoft code.
+        
+        @param code language code (string)
+        @return mapped language code (string)
+        """
+        if code in self.__mappings:
+            return self.__mapping[code]
+        else:
+            return code
+    
+    def __getClientDataAzure(self):
+        """
+        Private method to retrieve the client data.
+        
+        @return tuple giving the API subscription key and a flag indicating
+            validity
+        @rtype tuple of (str, bool)
+        """
+        subscriptionKey = self.plugin.getPreferences("MsTranslatorKey")
+        valid = bool(subscriptionKey)
+        return subscriptionKey, valid
+    
+    def __getAccessToken(self, requestObject):
+        """
+        Private slot to get an access token.
+        
+        If the stored token is no longer valid, get a new one and store it.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @return access token (string)
+        """
+        if self.plugin.getPreferences("MsAuthTokenExpire") > \
+                QDateTime.currentDateTime():
+            return self.plugin.getPreferences("MsAuthToken")
+        
+        # Token expired, get a new one
+        subscriptionKey, valid = self.__getClientDataAzure()
+        if not valid:
+            return ""
+        
+        subscriptionHeader = (b"Ocp-Apim-Subscription-Key",
+                              subscriptionKey.encode("utf-8"))
+        response, ok = requestObject.post(
+            QUrl(self.AccessTokenUrl), QByteArray(b""),
+            extraHeaders=[subscriptionHeader])
+        if ok:
+            self.plugin.setPreferences("MsAuthToken", response)
+            self.plugin.setPreferences(
+                "MsAuthTokenExpire",
+                QDateTime.currentDateTime().addSecs(8 * 60))
+            return response
+        else:
+            return ""
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        subscriptionKey, valid = self.__getClientDataAzure()
+        if not valid:
+            return (self.tr("""You have not registered for the Microsoft"""
+                            """ Translation service."""),
+                    False)
+        
+        accessToken = self.__getAccessToken(requestObject)
+        if not accessToken:
+            return (self.tr("No valid access token available."), False)
+        
+        authHeader = (b"Authorization",
+                      "Bearer {0}".format(accessToken).encode("utf-8"))
+        params = "?appid=&from={0}&to={1}&text={2}".format(
+            self.__mapLanguageCode(originalLanguage),
+            self.__mapLanguageCode(translationLanguage),
+            text)
+        url = QUrl(self.TranslatorUrl + params)
+        response, ok = requestObject.get(url, extraHeaders=[authHeader])
+        response = str(response, "utf-8", "replace")
+        if ok and response.startswith("<string") and \
+                response.endswith("</string>"):
+            result = response.split(">", 1)[1].rsplit("<", 1)[0]
+        else:
+            result = self.tr("No translation available.")
+            ok = False
+        return result, ok
+    
+    def getTextToSpeechData(self, requestObject, text, language):
+        """
+        Public method to pronounce the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be pronounced (string)
+        @param language language code of the text (string)
+        @return tuple with pronounce data (QByteArray) or error string (string)
+            and success flag (boolean)
+        """
+        subscriptionKey, valid = self.__getClientDataAzure()
+        if not valid:
+            return (self.tr("""You have not registered for the Microsoft"""
+                            """ Translation service."""),
+                    False)
+        
+        accessToken = self.__getAccessToken(requestObject)
+        if not accessToken:
+            return (self.tr("No valid access token available."), False)
+        
+        params = "?language={0}&format={1}&options={2}&text={3}".format(
+            self.__mapLanguageCode(language),
+            "audio/wav",
+            "MaxQuality",
+            text)
+        authHeader = (b"Authorization",
+                      "Bearer {0}".format(accessToken).encode("utf-8"))
+        url = QUrl(self.TextToSpeechUrl + params)
+        data, ok = requestObject.get(url, extraHeaders=[authHeader])
+        if not ok:
+            data = self.tr("No Text-to-Speech for the selected language"
+                           " available.")
+        return data, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the MyMemory translation engine.
+"""
+
+from __future__ import unicode_literals
+try:
+    str = unicode
+except NameError:
+    pass
+
+import json
+
+from PyQt5.QtCore import QUrl
+
+from .TranslationEngine import TranslationEngine
+
+
+class MyMemoryEngine(TranslationEngine):
+    """
+    Class implementing the translation engine for the MyMemory
+    translation service.
+    """
+    TranslatorUrl = "http://api.mymemory.translated.net/get"
+    TranslatorLimit = 500
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(MyMemoryEngine, self).__init__(plugin, parent)
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name (string)
+        """
+        return "mymemory"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return ["ar", "be", "bg", "bs", "ca", "cs", "da", "de", "el", "en",
+                "es", "et", "fi", "fr", "ga", "gl", "hi", "hr", "hu", "id",
+                "is", "it", "iw", "ja", "ka", "ko", "lt", "lv", "mk", "mt",
+                "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr",
+                "sv", "th", "tl", "tr", "uk", "vi", "zh-CN", "zh-TW",
+                ]
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        if len(text) > self.TranslatorLimit:
+            return (self.tr("Only texts up to {0} characters are allowed.")
+                    .format(self.TranslatorLimit), False)
+        
+        myMemoryKey = self.plugin.getPreferences("MyMemoryKey")
+        if myMemoryKey:
+            keyParam = "&key={0}".format(myMemoryKey)
+        else:
+            keyParam = ""
+        myMemoryEmail = self.plugin.getPreferences("MyMemoryEmail")
+        if myMemoryEmail:
+            emailParam = "&de={0}".format(myMemoryEmail)
+        else:
+            emailParam = ""
+        params = "?of=json{3}{4}&langpair={0}|{1}&q={2}".format(
+            originalLanguage, translationLanguage, text,
+            keyParam, emailParam)
+        url = QUrl(self.TranslatorUrl + params)
+        response, ok = requestObject.get(url)
+        response = str(response, "utf-8", "replace")
+        if ok:
+            try:
+                responseDict = json.loads(response)
+            except ValueError:
+                return self.tr("Invalid response received"), False
+            result = responseDict["responseData"]["translatedText"]
+        else:
+            result = response
+        return result, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Promt translation engine.
+"""
+
+from __future__ import unicode_literals
+try:
+    str = unicode
+except NameError:
+    pass
+
+import json
+
+from PyQt5.QtCore import QUrl, QByteArray
+
+import Utilities
+
+from .TranslationEngine import TranslationEngine
+
+
+class PromtEngine(TranslationEngine):
+    """
+    Class implementing the translation engine for the Promt
+    translation service.
+    """
+    TranslatorUrl = \
+        "http://www.online-translator.com/services/"\
+        "TranslationService.asmx/GetTranslation"
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(PromtEngine, self).__init__(plugin, parent)
+        
+        self.__mapping = {
+            "de": "g",
+            "en": "e",
+            "es": "s",
+            "fr": "f",
+            "it": "i",
+            "ja": "j",
+            "pt": "p",
+            "ru": "r",
+        }
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name (string)
+        """
+        return "promt"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return ["de", "en", "es", "fr", "it", "ja", "pt", "ru", ]
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        encodedText = str(
+            QUrl.toPercentEncoding(Utilities.html_encode(text + ".")),
+            "utf-8")
+        request = QByteArray(
+            "{{dirCode:'{0}{1}', template:'General', text:'{2}', lang:'de',"
+            " limit:3000, useAutoDetect:true, key:'', ts:'MainSite', tid:''}}"
+            .format(self.__mapping[originalLanguage],
+                    self.__mapping[translationLanguage],
+                    encodedText).encode("utf-8")
+        )
+        response, ok = requestObject.post(QUrl(self.TranslatorUrl), request,
+                                          "json")
+        if ok:
+            try:
+                responseDict = json.loads(response)
+            except ValueError:
+                return self.tr("Invalid response received"), False
+            
+            if "d" in responseDict:
+                responseDict = responseDict["d"]
+            
+            result = responseDict["result"][:-1]    # get rid of stub
+            
+            if responseDict["errCode"] == 0:
+                if responseDict["ptsDirCode"] == "":
+                    result = self.tr(
+                        "This direction of translation is not available.")
+                    ok = False
+            else:
+                result = responseDict["errMessage"]
+                ok = False
+        else:
+            result = response
+        return result, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the translation engine base class.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import QObject
+
+
+class TranslationEngine(QObject):
+    """
+    Class implementing the translation engine base class containing
+    default methods.
+    """
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(TranslationEngine, self).__init__(parent)
+        
+        self.plugin = plugin
+    
+    def engineName(self):
+        """
+        Public method to get the name of the engine.
+        
+        @return engine name (string)
+        """
+        return ""
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return []
+    
+    def hasTTS(self):
+        """
+        Public method indicating the Text-to-Speech capability.
+        
+        @return flag indicating the Text-to-Speech capability (boolean)
+        """
+        return False
+    
+    def getTextToSpeechData(self, requestObject, text, language):
+        """
+        Public method to pronounce the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be pronounced (string)
+        @param language language code of the text (string)
+        @return tuple with pronounce data (QByteArray) or error string (string)
+            and success flag (boolean)
+        """
+        return self.tr("No pronounce data available"), False
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        return self.tr("No translation available"), False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Yandex translation engine.
+"""
+
+from __future__ import unicode_literals
+try:
+    str = unicode
+except NameError:
+    pass
+
+import json
+
+from PyQt5.QtCore import QUrl, QByteArray
+
+import Utilities
+
+from .TranslationEngine import TranslationEngine
+
+
+class YandexEngine(TranslationEngine):
+    """
+    Class implementing the translation engine for the Yandex
+    translation service.
+    """
+    TranslatorUrl = "https://translate.yandex.net/api/v1.5/tr.json/translate"
+    TranslatorLimit = 10000
+    
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param parent reference to the parent object (QObject)
+        """
+        super(YandexEngine, self).__init__(plugin, parent)
+        
+        self.__errors = {
+            401: self.tr("Invalid API key."),
+            402: self.tr("API key has been blocked."),
+            403: self.tr("Daily limit for requests has been reached."),
+            404: self.tr("Daily limit for the volume of translated text"
+                         " reached."),
+            413: self.tr("Text size exceeds the maximum."),
+            422: self.tr("Text could not be translated."),
+            501: self.tr("The specified translation direction is not"
+                         " supported."),
+        }
+    
+    def engineName(self):
+        """
+        Public method to return the name of the engine.
+        
+        @return engine name (string)
+        """
+        return "yandex"
+    
+    def supportedLanguages(self):
+        """
+        Public method to get the supported languages.
+        
+        @return list of supported language codes (list of string)
+        """
+        return ["ar", "be", "bg", "bs", "ca", "cs", "da", "de", "el", "en",
+                "es", "et", "fi", "fr", "ga", "gl", "hi", "hr", "hu", "id",
+                "is", "it", "iw", "ja", "ka", "ko", "lt", "lv", "mk", "mt",
+                "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr",
+                "sv", "th", "tl", "tr", "uk", "vi", "zh-CN", "zh-TW",
+                ]
+    
+    def getTranslation(self, requestObject, text, originalLanguage,
+                       translationLanguage):
+        """
+        Public method to translate the given text.
+        
+        @param requestObject reference to the request object
+            (TranslatorRequest)
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        if len(text) > self.TranslatorLimit:
+            return (self.tr("Only texts up to {0} characters are allowed.")
+                    .format(self.TranslatorLimit), False)
+        
+        apiKey = self.plugin.getPreferences("YandexKey")
+        if not apiKey:
+            return self.tr("A valid Yandex key is required."), False
+        
+        params = QByteArray(
+            "key={0}&lang={1}-{2}&text=".format(
+                apiKey, originalLanguage, translationLanguage).encode("utf-8"))
+        encodedText = QByteArray(Utilities.html_encode(text).encode("utf-8"))\
+            .toPercentEncoding()
+        request = params + encodedText
+        response, ok = requestObject.post(QUrl(self.TranslatorUrl), request)
+        if ok:
+            try:
+                responseDict = json.loads(response)
+            except ValueError:
+                return self.tr("Invalid response received"), False
+            
+            if responseDict["code"] != 200:
+                try:
+                    error = self.__errors[responseDict["code"]]
+                except KeyError:
+                    error = self.tr("Unknown error code ({0}) received.")\
+                        .format(responseDict["code"])
+                return error, False
+            
+            sentences = responseDict["text"]
+            result = ""
+            for sentence in sentences:
+                result += sentence.replace("\n", "<br/>")
+        else:
+            result = response
+        return result, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,130 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package containing the various translation engines.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+from PyQt5.QtCore import QCoreApplication
+from PyQt5.QtGui import QIcon
+
+import UI.PixmapCache
+
+
+def supportedEngineNames():
+    """
+    Module function to get the list of supported translation engines.
+    
+    @return names of supported engines (list of string)
+    """
+    return ["googlev1", "mymemory", "glosbe", "promt", "yandex", "googlev2",
+            "microsoft", "deepl"]
+
+
+def engineDisplayName(name):
+    """
+    Module function to get a translated name for an engine.
+    
+    @param name name of a translation engine (string)
+    @return translated engine name (string)
+    """
+    if name == "googlev1":
+        return QCoreApplication.translate("TranslatorEngines", "Google V.1")
+    elif name == "mymemory":
+        return QCoreApplication.translate("TranslatorEngines", "MyMemory")
+    elif name == "glosbe":
+        return QCoreApplication.translate("TranslatorEngines", "Glosbe")
+    elif name == "promt":
+        return QCoreApplication.translate("TranslatorEngines", "PROMT")
+    elif name == "yandex":
+        return QCoreApplication.translate("TranslatorEngines", "Yandex")
+    elif name == "googlev2":
+        return QCoreApplication.translate("TranslatorEngines", "Google V.2")
+    elif name == "microsoft":
+        return QCoreApplication.translate("TranslatorEngines", "Microsoft")
+    elif name == "deepl":
+        return QCoreApplication.translate("TranslatorEngines", "DeepL")
+    else:
+        return QCoreApplication.translate(
+            "TranslatorEngines", "Unknow translation service name ({0})")\
+            .format(name)
+
+
+def getTranslationEngine(name, plugin, parent=None):
+    """
+    Module function to instantiate an engine object for the named service.
+    
+    @param name name of the online translation service (string)
+    @param plugin reference to the plugin object (TranslatorPlugin)
+    @param parent reference to the parent object
+    @return translation engine (TranslatorEngine)
+    """
+    if name == "googlev1":
+        from .GoogleV1Engine import GoogleV1Engine
+        engine = GoogleV1Engine(plugin, parent)
+    elif name == "mymemory":
+        from .MyMemoryEngine import MyMemoryEngine
+        engine = MyMemoryEngine(plugin, parent)
+    elif name == "glosbe":
+        from .GlosbeEngine import GlosbeEngine
+        engine = GlosbeEngine(plugin, parent)
+    elif name == "promt":
+        from .PromtEngine import PromtEngine
+        engine = PromtEngine(plugin, parent)
+    elif name == "yandex":
+        from .YandexEngine import YandexEngine
+        engine = YandexEngine(plugin, parent)
+    elif name == "googlev2":
+        from .GoogleV2Engine import GoogleV2Engine
+        engine = GoogleV2Engine(plugin, parent)
+    elif name == "microsoft":
+        from .MicrosoftEngine import MicrosoftEngine
+        engine = MicrosoftEngine(plugin, parent)
+    elif name == "deepl":
+        from .DeepLEngine import DeepLEngine
+        engine = DeepLEngine(plugin, parent)
+    else:
+        engine = None
+    return engine
+
+
+def getEngineIcon(name):
+    """
+    Module function to get the icon of the named engine.
+    
+    @param name name of the translation engine
+    @type str
+    @return engine icon
+    @rtype QIcon
+    """
+    if name in supportedEngineNames():
+        return UI.PixmapCache.getIcon(os.path.join(
+            os.path.dirname(__file__), "..", "icons", "engines",
+            "{0}.png".format(name)))
+    else:
+        return QIcon()
+
+
+def getKeyUrl(name):
+    """
+    Module function to get an URL to request a user key.
+    
+    @param name name of the online translation service (string)
+    @return key request URL (string)
+    """
+    if name == "mymemory":
+        return "http://mymemory.translated.net/doc/keygen.php"
+    elif name == "yandex":
+        return "http://api.yandex.com/key/form.xml?service=trnsl"
+    elif name == "googlev2":
+        return "https://console.developers.google.com/"
+    elif name == "microsoft":
+        return "https://portal.azure.com"
+    else:
+        return ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,179 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the translation languages database.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+from PyQt5.QtCore import QObject
+
+import UI.PixmapCache
+
+
+class TranslatorLanguagesDb(QObject):
+    """
+    Class implementing the translation languages database.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object (QObject)
+        """
+        super(TranslatorLanguagesDb, self).__init__(parent)
+        
+        self.__languages = {
+            "af": self.tr("Afrikaans"),
+            "ar": self.tr("Arabic"),
+            "be": self.tr("Belarusian"),
+            "bg": self.tr("Bulgarian"),
+            "bs": self.tr("Bosnian"),
+            "ca": self.tr("Catalan"),
+            "cs": self.tr("Czech"),
+            "da": self.tr("Danish"),
+            "de": self.tr("German"),
+            "el": self.tr("Greek"),
+            "en": self.tr("English"),
+            "es": self.tr("Spanish"),
+            "et": self.tr("Estonian"),
+            "fi": self.tr("Finnish"),
+            "fr": self.tr("French"),
+            "ga": self.tr("Irish"),
+            "gl": self.tr("Galician"),
+            "he": self.tr("Hebrew (he)"),
+            "hi": self.tr("Hindi"),
+            "hr": self.tr("Croatian"),
+            "hu": self.tr("Hungarian"),
+            "id": self.tr("Indonesian"),
+            "is": self.tr("Icelandic"),
+            "it": self.tr("Italian"),
+            "iw": self.tr("Hebrew (iw)"),
+            "ja": self.tr("Japanese"),
+            "ka": self.tr("Georgian"),
+            "ko": self.tr("Korean"),
+            "lt": self.tr("Lithuanian"),
+            "lv": self.tr("Latvian"),
+            "mk": self.tr("Macedonian"),
+            "mt": self.tr("Maltese"),
+            "nl": self.tr("Dutch"),
+            "no": self.tr("Norwegian"),
+            "pl": self.tr("Polish"),
+            "pt": self.tr("Portuguese"),
+            "ro": self.tr("Romanian"),
+            "ru": self.tr("Russian"),
+            "sk": self.tr("Slovak"),
+            "sl": self.tr("Slovenian"),
+            "sq": self.tr("Albanian"),
+            "sr": self.tr("Serbian"),
+            "sv": self.tr("Swedish"),
+            "th": self.tr("Thai"),
+            "tl": self.tr("Filipino"),
+            "tr": self.tr("Turkish"),
+            "uk": self.tr("Ukrainian"),
+            "vi": self.tr("Vietnamese"),
+            "zh-CN": self.tr("Chinese S"),
+            "zh-TW": self.tr("Chinese T"),
+        }
+        
+        self.__toThreeCharacterCode = {
+            "af": "afr",
+            "ar": "ara",
+            "be": "bel",
+            "bg": "bul",
+            "bs": "bos",
+            "ca": "cat",
+            "cs": "ces",
+            "da": "dan",
+            "de": "deu",
+            "el": "ell",
+            "en": "eng",
+            "es": "spa",
+            "et": "est",
+            "fi": "fin",
+            "fr": "fra",
+            "ga": "gle",
+            "gl": "glg",
+            "he": "heb",
+            "hi": "hin",
+            "hr": "hrv",
+            "hu": "hun",
+            "id": "ind",
+            "is": "isl",
+            "it": "ita",
+            "iw": "heb",
+            "ja": "jpn",
+            "ka": "kat",
+            "ko": "kor",
+            "lt": "lit",
+            "lv": "lav",
+            "mk": "mkd",
+            "mt": "mlt",
+            "nl": "nld",
+            "no": "nor",
+            "pl": "pol",
+            "pt": "por",
+            "ro": "ron",
+            "ru": "rus",
+            "sk": "slk",
+            "sl": "slv",
+            "sq": "sqi",
+            "sr": "srp",
+            "sv": "swe",
+            "th": "tha",
+            "tl": "tgl",
+            "tr": "tur",
+            "uk": "ukr",
+            "vi": "vie",
+            "zh-CN": "zho",
+            "zh-TW": "zho",
+        }
+    
+    def getLanguageIcon(self, code):
+        """
+        Public method to get a language icon.
+        
+        @param code language code (string)
+        @return language icon (QIcon)
+        """
+        return UI.PixmapCache.getIcon(os.path.join(
+            os.path.dirname(__file__), "icons", "flags",
+            "{0}.png".format(code)))
+    
+    def getLanguage(self, code):
+        """
+        Public method to get a translated language.
+        
+        @param code language code (string)
+        @return translated language (string)
+        """
+        try:
+            return self.__languages[code]
+        except KeyError:
+            return ""
+    
+    def getAllLanguages(self):
+        """
+        Public method to get a list of the supported language codes.
+        
+        @return list of supported language codes (list of string)
+        """
+        return list(self.__languages.keys())
+    
+    def convertTwoToThree(self, code):
+        """
+        Public method to convert a two character language code to a
+        thre character code.
+        
+        @param code two character language code (string)
+        @return three character language code (string)
+        """
+        try:
+            return self.__toThreeCharacterCode[code]
+        except KeyError:
+            return ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a synchronous network request handler for translation
+requests.
+"""
+
+from __future__ import unicode_literals
+try:
+    str = unicode
+except NameError:
+    pass
+
+from PyQt5.QtCore import qVersion, QObject, QEventLoop, QByteArray
+from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, \
+    QNetworkReply
+
+from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired
+
+
+class TranslatorRequest(QObject):
+    """
+    Class implementing a synchronous network request handler for translation
+    requests.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object (QObject)
+        """
+        super(TranslatorRequest, self).__init__(parent)
+        
+        self.__contentTypes = {
+            "form": b"application/x-www-form-urlencoded",
+            "json": b"application/json",
+        }
+        
+        self.__networkManager = QNetworkAccessManager(self)
+        self.__networkManager.proxyAuthenticationRequired.connect(
+            proxyAuthenticationRequired)
+        
+        self.__loop = QEventLoop()
+        self.__networkManager.finished.connect(self.__loop.quit)
+    
+    def get(self, requestUrl, extraHeaders=None):
+        """
+        Public method to issue a GET request.
+        
+        @param requestUrl URL of the request (QUrl)
+        @keyparam extraHeaders list of tuples of additional headers giving
+            header name (string) and header value (string)
+        @return server response (QByteArray) or error message (string)
+        """
+        request = QNetworkRequest(requestUrl)
+        request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True)
+        if extraHeaders:
+            for name, value in extraHeaders:
+                request.setRawHeader(name, value)
+        reply = self.__networkManager.get(request)
+        if not self.__loop.isRunning():
+            self.__loop.exec_()
+        if reply.error() != QNetworkReply.NoError:
+            return reply.errorString(), False
+        else:
+            return reply.readAll(), True
+    
+    def post(self, requestUrl, requestData, dataType="form",
+             extraHeaders=None):
+        """
+        Public method to issue a POST request.
+        
+        @param requestUrl URL of the request (QUrl)
+        @param requestData data of the request (QByteArray)
+        @keyparam dataType type of the request data (string)
+        @keyparam extraHeaders list of tuples of additional headers giving
+            header name (string) and header value (string)
+        @return tuple of server response (string) and flag indicating
+            success (boolean)
+        """
+        request = QNetworkRequest(requestUrl)
+        request.setRawHeader(b"User-Agent",
+                             b"Mozilla/5.0")
+        request.setRawHeader(b"Content-Type",
+                             self.__contentTypes[dataType])
+        request.setRawHeader(b"Content-Length",
+                             QByteArray.number(requestData.size()))
+        if qVersion() >= "5.6.0":
+            request.setAttribute(QNetworkRequest.FollowRedirectsAttribute,
+                                 True)
+        if extraHeaders:
+            for name, value in extraHeaders:
+                request.setRawHeader(name, value)
+        reply = self.__networkManager.post(request, requestData)
+        if not self.__loop.isRunning():
+            self.__loop.exec_()
+        if reply.error() != QNetworkReply.NoError:
+            return reply.errorString(), False
+        else:
+            return str(reply.readAll(), "utf-8", "replace"), True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,386 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the translator widget.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot, QTemporaryFile
+from PyQt5.QtWidgets import QWidget
+try:
+    from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
+    MULTIMEDIA_AVAILABLE = True
+except ImportError:
+    MULTIMEDIA_AVAILABLE = False
+
+from E5Gui import E5MessageBox
+
+from .Ui_TranslatorWidget import Ui_TranslatorWidget
+
+from .TranslatorLanguagesDb import TranslatorLanguagesDb
+from . import TranslatorEngines
+
+import UI.PixmapCache
+
+
+class TranslatorWidget(QWidget, Ui_TranslatorWidget):
+    """
+    Class implementing the translator widget.
+    """
+    def __init__(self, plugin, translator, parent=None):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object (TranslatorPlugin)
+        @param translator reference to the translator object (Translator)
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(TranslatorWidget, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.__plugin = plugin
+        self.__translator = translator
+        
+        self.__languages = TranslatorLanguagesDb(self)
+        
+        self.__translatorRequest = None
+        self.__translationEngine = None
+        
+        self.__mediaPlayer = None
+        self.__mediaFile = None
+        
+        audioAvailable = (MULTIMEDIA_AVAILABLE and
+                          bool(QMediaPlayer.hasSupport("audio/mpeg")))
+        self.pronounceOrigButton.setVisible(audioAvailable)
+        self.pronounceTransButton.setVisible(audioAvailable)
+        
+        self.pronounceOrigButton.setIcon(
+            self.__translator.getAppIcon("pronounce.png"))
+        self.pronounceTransButton.setIcon(
+            self.__translator.getAppIcon("pronounce.png"))
+        self.swapButton.setIcon(
+            self.__translator.getAppIcon("swap.png"))
+        self.translateButton.setIcon(
+            self.__translator.getAppIcon("translate.png"))
+        self.clearButton.setIcon(UI.PixmapCache.getIcon("editDelete.png"))
+        
+        self.translateButton.setEnabled(False)
+        self.clearButton.setEnabled(False)
+        self.pronounceOrigButton.setEnabled(False)
+        self.pronounceTransButton.setEnabled(False)
+        
+        selectedEngine = self.__plugin.getPreferences("SelectedEngine")
+        origLanguage = self.__plugin.getPreferences("OriginalLanguage")
+        transLanguage = self.__plugin.getPreferences("TranslationLanguage")
+        
+        self.__updateEngines()
+        engineIndex = self.engineComboBox.findData(selectedEngine)
+        self.engineComboBox.setCurrentIndex(engineIndex)
+        self.__engineComboBoxCurrentIndexChanged(engineIndex)
+        # this calls self.__updateLanguages() implicitly
+        self.origLanguageComboBox.setCurrentIndex(
+            self.origLanguageComboBox.findData(origLanguage))
+        self.transLanguageComboBox.setCurrentIndex(
+            self.transLanguageComboBox.findData(transLanguage))
+        
+        self.engineComboBox.currentIndexChanged.connect(
+            self.__engineComboBoxCurrentIndexChanged)
+        self.__plugin.updateLanguages.connect(self.__updateLanguages)
+    
+    def __updateLanguages(self):
+        """
+        Private slot to update the language combo boxes.
+        """
+        supportedCodes = self.__translationEngine.supportedLanguages()
+        origLanguage = self.origLanguageComboBox.itemData(
+            self.origLanguageComboBox.currentIndex())
+        transLanguage = self.transLanguageComboBox.itemData(
+            self.transLanguageComboBox.currentIndex())
+        self.origLanguageComboBox.clear()
+        self.transLanguageComboBox.clear()
+        for code in self.__plugin.getPreferences("EnabledLanguages"):
+            if code in supportedCodes:
+                language = self.__languages.getLanguage(code)
+                if language:
+                    icon = self.__languages.getLanguageIcon(code)
+                    self.origLanguageComboBox.addItem(icon, language, code)
+                    self.transLanguageComboBox.addItem(icon, language, code)
+        self.origLanguageComboBox.model().sort(0)
+        self.transLanguageComboBox.model().sort(0)
+        self.origLanguageComboBox.setCurrentIndex(
+            self.origLanguageComboBox.findData(origLanguage))
+        self.transLanguageComboBox.setCurrentIndex(
+            self.transLanguageComboBox.findData(transLanguage))
+    
+    def __updateEngines(self):
+        """
+        Private slot to update the engines combo box.
+        """
+        currentEngine = self.engineComboBox.itemData(
+            self.engineComboBox.currentIndex())
+        self.engineComboBox.clear()
+        for engineName in TranslatorEngines.supportedEngineNames():
+            icon = TranslatorEngines.getEngineIcon(engineName)
+            self.engineComboBox.addItem(
+                icon,
+                TranslatorEngines.engineDisplayName(engineName),
+                engineName)
+        self.engineComboBox.model().sort(0)
+        self.engineComboBox.setCurrentIndex(
+            self.engineComboBox.findData(currentEngine))
+    
+    def __originalLanguage(self):
+        """
+        Private method to return the code of the selected original language.
+        
+        @return code of the original language (string)
+        """
+        return self.origLanguageComboBox.itemData(
+            self.origLanguageComboBox.currentIndex())
+    
+    def __translationLanguage(self):
+        """
+        Private method to return the code of the selected translation language.
+        
+        @return code of the translation language (string)
+        """
+        return self.transLanguageComboBox.itemData(
+            self.transLanguageComboBox.currentIndex())
+    
+    @pyqtSlot()
+    def on_translateButton_clicked(self):
+        """
+        Private slot to translate the entered text.
+        """
+        self.transEdit.clear()
+        result, ok = self.__translate(
+            self.origEdit.toPlainText(),
+            self.__originalLanguage(),
+            self.__translationLanguage())
+        if ok:
+            self.transEdit.setHtml(result)
+        else:
+            E5MessageBox.critical(
+                self,
+                self.tr("Translation Error"),
+                result)
+    
+    @pyqtSlot()
+    def on_pronounceOrigButton_clicked(self):
+        """
+        Private slot to pronounce the original text.
+        """
+        self.__pronounce(
+            self.origEdit.toPlainText(), self.__originalLanguage())
+    
+    @pyqtSlot()
+    def on_pronounceTransButton_clicked(self):
+        """
+        Private slot to pronounce the translated text.
+        """
+        self.__pronounce(
+            self.transEdit.toPlainText(), self.__translationLanguage())
+    
+    @pyqtSlot()
+    def on_swapButton_clicked(self):
+        """
+        Private slot to swap the languages.
+        """
+        oIdx = self.origLanguageComboBox.currentIndex()
+        self.origLanguageComboBox.setCurrentIndex(
+            self.transLanguageComboBox.currentIndex())
+        self.transLanguageComboBox.setCurrentIndex(oIdx)
+        
+        origText = self.origEdit.toPlainText()
+        self.origEdit.setPlainText(self.transEdit.toPlainText())
+        self.transEdit.setPlainText(origText)
+    
+    @pyqtSlot()
+    def on_clearButton_clicked(self):
+        """
+        Private slot to clear the text fields.
+        """
+        self.origEdit.clear()
+        self.transEdit.clear()
+    
+    @pyqtSlot()
+    def on_origEdit_textChanged(self):
+        """
+        Private slot to handle changes of the original text.
+        """
+        enable = bool(self.origEdit.toPlainText())
+        self.translateButton.setEnabled(enable)
+        self.__updatePronounceButtons()
+        self.__updateClearButton()
+    
+    @pyqtSlot()
+    def on_transEdit_textChanged(self):
+        """
+        Private slot to handle changes of the translation text.
+        """
+        self.__updatePronounceButtons()
+        self.__updateClearButton()
+    
+    @pyqtSlot(int)
+    def on_origLanguageComboBox_currentIndexChanged(self, index):
+        """
+        Private slot to handle the selection of the original language.
+        
+        @param index current index (integer)
+        """
+        self.__plugin.setPreferences(
+            "OriginalLanguage", self.origLanguageComboBox.itemData(index))
+    
+    @pyqtSlot(int)
+    def on_transLanguageComboBox_currentIndexChanged(self, index):
+        """
+        Private slot to handle the selection of the translation language.
+        
+        @param index current index (integer)
+        """
+        self.__plugin.setPreferences(
+            "TranslationLanguage", self.transLanguageComboBox.itemData(index))
+    
+    @pyqtSlot(int)
+    def __engineComboBoxCurrentIndexChanged(self, index):
+        """
+        Private slot to handle the selection of a translation service.
+        
+        @param index current index (integer)
+        """
+        engineName = self.engineComboBox.itemData(index)
+        if self.__translationEngine and \
+                self.__translationEngine.engineName() != engineName:
+            self.__translationEngine.deleteLater()
+            self.__translationEngine = None
+        
+        if self.__translationEngine is None:
+            self.__translationEngine = TranslatorEngines.getTranslationEngine(
+                engineName, self.__plugin, self)
+        
+        self.__updatePronounceButtons()
+        self.__updateLanguages()
+        
+        self.__plugin.setPreferences(
+            "SelectedEngine", self.engineComboBox.itemData(index))
+    
+    def __updatePronounceButtons(self):
+        """
+        Private slot to set the state of the pronounce buttons.
+        """
+        hasTTS = self.__translationEngine.hasTTS()
+        self.pronounceOrigButton.setEnabled(
+            hasTTS and bool(self.origEdit.toPlainText()))
+        self.pronounceTransButton.setEnabled(
+            hasTTS and bool(self.transEdit.toPlainText()))
+    
+    def __updateClearButton(self):
+        """
+        Private slot to set the state of the clear button.
+        """
+        enable = bool(self.origEdit.toPlainText()) or \
+            bool(self.transEdit.toPlainText())
+        self.clearButton.setEnabled(enable)
+    
+    def __translate(self, text, originalLanguage, translationLanguage):
+        """
+        Private method to translate the given text.
+        
+        @param text text to be translated (string)
+        @param originalLanguage language code of the original (string)
+        @param translationLanguage language code of the translation (string)
+        @return tuple of translated text (string) and flag indicating
+            success (boolean)
+        """
+        if self.__translatorRequest is None:
+            from .TranslatorRequest import TranslatorRequest
+            self.__translatorRequest = TranslatorRequest(self)
+        
+        engineName = self.engineComboBox.itemData(
+            self.engineComboBox.currentIndex())
+        if self.__translationEngine and \
+                self.__translationEngine.engineName() != engineName:
+            self.__translationEngine.deleteLater()
+            self.__translationEngine = None
+        
+        if self.__translationEngine is None:
+            self.__translationEngine = TranslatorEngines.getTranslationEngine(
+                engineName, self.__plugin, self)
+        
+        result, ok = self.__translationEngine.getTranslation(
+            self.__translatorRequest, text, originalLanguage,
+            translationLanguage)
+        
+        return result, ok
+    
+    def __pronounce(self, text, language):
+        """
+        Private method to pronounce the given text.
+        
+        @param text text to be pronounced (string)
+        @param language language code of the text (string)
+        """
+        if not text or not language:
+            return
+        
+        if self.__translatorRequest is None:
+            from .TranslatorRequest import TranslatorRequest
+            self.__translatorRequest = TranslatorRequest(self)
+        
+        if self.__mediaPlayer is None:
+            self.__mediaPlayer = QMediaPlayer(self)
+            self.__mediaPlayer.stateChanged.connect(
+                self.__mediaPlayerStateChanged)
+        
+        if self.__mediaPlayer.state() == QMediaPlayer.PlayingState:
+            return
+        
+        engineName = self.engineComboBox.itemData(
+            self.engineComboBox.currentIndex())
+        if self.__translationEngine and \
+                self.__translationEngine.engineName() != engineName:
+            self.__translationEngine.deleteLater()
+            self.__translationEngine = None
+        
+        if self.__translationEngine is None:
+            self.__translationEngine = TranslatorEngines.getTranslationEngine(
+                engineName, self.__plugin, self)
+        
+        if not self.__translationEngine.hasTTS():
+            E5MessageBox.critical(
+                self,
+                self.tr("Translation Error"),
+                self.tr("The selected translation service does not support"
+                        " the Text-to-Speech function."))
+            return
+        
+        data, ok = self.__translationEngine.getTextToSpeechData(
+            self.__translatorRequest, text, language)
+        if ok:
+            self.__mediaFile = QTemporaryFile(self)
+            self.__mediaFile.open()
+            self.__mediaFile.setAutoRemove(False)
+            self.__mediaFile.write(data)
+            
+            self.__mediaPlayer.setMedia(QMediaContent(), self.__mediaFile)
+            self.__mediaPlayer.play()
+        else:
+            E5MessageBox.critical(
+                self,
+                self.tr("Translation Error"),
+                data)
+    
+    def __mediaPlayerStateChanged(self, state):
+        """
+        Private slot handling changes of the media player state.
+        
+        @param state media player state (QAudio.State)
+        """
+        if state == QMediaPlayer.StoppedState:
+            self.__mediaFile.close()
+            self.__mediaFile.remove()
+            self.__mediaFile = None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TranslatorWidget</class>
+ <widget class="QWidget" name="TranslatorWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>817</width>
+    <height>144</height>
+   </rect>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QComboBox" name="engineComboBox">
+       <property name="toolTip">
+        <string>Select the translation service</string>
+       </property>
+       <property name="sizeAdjustPolicy">
+        <enum>QComboBox::AdjustToContents</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QToolButton" name="pronounceOrigButton">
+       <property name="toolTip">
+        <string>Press to pronounce the entered text</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QComboBox" name="origLanguageComboBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Select the language of the original text</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <widget class="QToolButton" name="swapButton">
+       <property name="toolTip">
+        <string>Press to swap the translation direction</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="3">
+      <widget class="QComboBox" name="transLanguageComboBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Select the language for the translated text</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="4">
+      <widget class="QToolButton" name="pronounceTransButton">
+       <property name="toolTip">
+        <string>Press to pronounce the translated text</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0" rowspan="4" colspan="2">
+      <widget class="QPlainTextEdit" name="origEdit">
+       <property name="toolTip">
+        <string>Enter the text to be translated</string>
+       </property>
+       <property name="tabChangesFocus">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="2">
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>23</width>
+         <height>68</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="1" column="3" rowspan="4" colspan="2">
+      <widget class="QTextEdit" name="transEdit">
+       <property name="toolTip">
+        <string>Shows the translated text</string>
+       </property>
+       <property name="tabChangesFocus">
+        <bool>true</bool>
+       </property>
+       <property name="readOnly">
+        <bool>true</bool>
+       </property>
+       <property name="textInteractionFlags">
+        <set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="2">
+      <widget class="QToolButton" name="translateButton">
+       <property name="toolTip">
+        <string>Press to translate the entered text</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="2">
+      <widget class="QToolButton" name="clearButton">
+       <property name="toolTip">
+        <string>Press to clear the text fields</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="2">
+      <spacer name="verticalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>23</width>
+         <height>28</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>engineComboBox</tabstop>
+  <tabstop>pronounceOrigButton</tabstop>
+  <tabstop>origLanguageComboBox</tabstop>
+  <tabstop>swapButton</tabstop>
+  <tabstop>transLanguageComboBox</tabstop>
+  <tabstop>pronounceTransButton</tabstop>
+  <tabstop>origEdit</tabstop>
+  <tabstop>translateButton</tabstop>
+  <tabstop>transEdit</tabstop>
+  <tabstop>clearButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/__init__.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing the translator.
+"""
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/deepl.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/glosbe.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/googlev1.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/googlev2.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/microsoft.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/mymemory.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/promt.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/engines/yandex.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flag.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/af.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ar.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/be.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/bg.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/bs.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ca.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/cs.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/da.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/de.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/el.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/en.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/es.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/et.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/fi.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/fr.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ga.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/gl.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/he.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/hi.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/hr.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/hu.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/id.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/is.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/it.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/iw.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ja.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ka.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ko.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/lt.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/lv.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/mk.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/mt.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/nl.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/no.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/pl.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/pt.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ro.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/ru.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/sk.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/sl.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/sq.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/sr.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/sv.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/th.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/tl.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/tr.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/uk.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/vi.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/zh-CN.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/flags/zh-TW.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/pronounce.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/swap.png has changed
Binary file Plugins/UiExtensionPlugins/Translator/icons/translate.png has changed
--- a/changelog	Sun Dec 10 14:51:54 2017 +0100
+++ b/changelog	Sun Dec 10 16:23:29 2017 +0100
@@ -11,6 +11,7 @@
   -- added the setup.py wizard plug-in to the core plug-ins
   -- added the eric plug-in wizard plug-in to the core plug-ins
   -- added the .desktop wizard plug-in to the core plug-ins
+  -- added the translator plug-in to the core plug-ins
 
 **Note**: These plug-ins should be deinstalled via the plug-in uninstallation
 dialog of eric before upgrading eric. A reconfiguration of these plug-ins may
--- a/eric6.e4p	Sun Dec 10 14:51:54 2017 +0100
+++ b/eric6.e4p	Sun Dec 10 16:23:29 2017 +0100
@@ -511,6 +511,7 @@
     <Source>Plugins/PluginPipInterface.py</Source>
     <Source>Plugins/PluginSyntaxChecker.py</Source>
     <Source>Plugins/PluginTabnanny.py</Source>
+    <Source>Plugins/PluginTranslator.py</Source>
     <Source>Plugins/PluginVcsMercurial.py</Source>
     <Source>Plugins/PluginVcsPySvn.py</Source>
     <Source>Plugins/PluginVcsSubversion.py</Source>
@@ -540,6 +541,23 @@
     <Source>Plugins/UiExtensionPlugins/PipInterface/PipRequirementsSelectionDialog.py</Source>
     <Source>Plugins/UiExtensionPlugins/PipInterface/PipSearchDialog.py</Source>
     <Source>Plugins/UiExtensionPlugins/PipInterface/__init__.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/ConfigurationPage/__init__.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/Translator.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py</Source>
+    <Source>Plugins/UiExtensionPlugins/Translator/__init__.py</Source>
     <Source>Plugins/UiExtensionPlugins/VirtualenvInterface/VirtualenvConfigurationDialog.py</Source>
     <Source>Plugins/UiExtensionPlugins/VirtualenvInterface/VirtualenvExecDialog.py</Source>
     <Source>Plugins/UiExtensionPlugins/VirtualenvInterface/__init__.py</Source>
@@ -1714,6 +1732,8 @@
     <Form>Plugins/UiExtensionPlugins/PipInterface/PipPackagesInputDialog.ui</Form>
     <Form>Plugins/UiExtensionPlugins/PipInterface/PipRequirementsSelectionDialog.ui</Form>
     <Form>Plugins/UiExtensionPlugins/PipInterface/PipSearchDialog.ui</Form>
+    <Form>Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui</Form>
+    <Form>Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui</Form>
     <Form>Plugins/UiExtensionPlugins/VirtualenvInterface/VirtualenvConfigurationDialog.ui</Form>
     <Form>Plugins/UiExtensionPlugins/VirtualenvInterface/VirtualenvExecDialog.ui</Form>
     <Form>Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.ui</Form>
@@ -2135,6 +2155,68 @@
     <Other>IconEditor/cursors/fill-cursor.xpm</Other>
     <Other>IconEditor/cursors/paintbrush-cursor.xpm</Other>
     <Other>LICENSE.GPL3</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/deepl.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/glosbe.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/googlev1.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/googlev2.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/microsoft.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/mymemory.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/promt.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/engines/yandex.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flag.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/af.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ar.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/be.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/bg.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/bs.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ca.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/cs.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/da.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/de.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/el.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/en.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/es.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/et.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/fi.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/fr.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ga.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/gl.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/he.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/hi.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/hr.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/hu.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/id.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/is.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/it.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/iw.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ja.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ka.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ko.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/lt.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/lv.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/mk.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/mt.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/nl.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/no.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/pl.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/pt.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ro.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/ru.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/sk.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/sl.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/sq.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/sr.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/sv.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/th.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/tl.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/tr.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/uk.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/vi.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/zh-CN.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/flags/zh-TW.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/pronounce.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/swap.png</Other>
+    <Other>Plugins/UiExtensionPlugins/Translator/icons/translate.png</Other>
     <Other>Plugins/VcsPlugins/vcsMercurial/icons/mercurial.png</Other>
     <Other>Plugins/VcsPlugins/vcsMercurial/icons/preferences-mercurial.png</Other>
     <Other>Plugins/VcsPlugins/vcsMercurial/icons/startServer.png</Other>
Binary file i18n/eric6_cs.qm has changed
--- a/i18n/eric6_cs.ts	Sun Dec 10 14:51:54 2017 +0100
+++ b/i18n/eric6_cs.ts	Sun Dec 10 16:23:29 2017 +0100
@@ -7451,6 +7451,40 @@
     </message>
 </context>
 <context>
+    <name>DeepLEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="77"/>
+        <source>Text to be translated exceeds the translation limit of {0} characters.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="112"/>
+        <source>Invalid response received from DeepL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="115"/>
+        <source>DeepL reported an error.
+Message: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="119"/>
+        <source>DeepL call returned an unknown result</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="123"/>
+        <source>Unsupported language code given (source: {0}, target: {1}).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="130"/>
+        <source>&lt;p&gt;No translation found&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>DeleteFilesConfirmationDialog</name>
     <message>
         <location filename="../UI/DeleteFilesConfirmationDialog.ui" line="22"/>
@@ -7964,32 +7998,32 @@
 <context>
     <name>DotDesktopWizard</name>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="149"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="124"/>
         <source>.desktop Wizard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="111"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="86"/>
         <source>.&amp;desktop Wizard...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="117"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="92"/>
         <source>&lt;b&gt;.desktop Wizard&lt;/b&gt;&lt;p&gt;This wizard opens a dialog for entering all the parameters needed to create the contents of a .desktop file. The generated code replaces the text of the current editor. Alternatively a new editor is opened.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="143"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="118"/>
         <source>No current editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="143"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="118"/>
         <source>Please open or create a file first.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="149"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="124"/>
         <source>The current editor contains text. Shall this be replaced?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -17813,6 +17847,55 @@
     </message>
 </context>
 <context>
+    <name>GlosbeEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py" line="88"/>
+        <source>Invalid response received</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py" line="103"/>
+        <source>No translation found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>GoogleV1Engine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py" line="95"/>
+        <source>Invalid response received</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py" line="129"/>
+        <source>No translation found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py" line="159"/>
+        <source>Only texts up to {0} characters are allowed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>GoogleV2Engine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py" line="71"/>
+        <source>A valid Google Translate key is required.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py" line="82"/>
+        <source>Invalid response received</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py" line="86"/>
+        <source>No translation available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>GotoDialog</name>
     <message>
         <location filename="../QScintilla/GotoDialog.ui" line="13"/>
@@ -38156,6 +38239,29 @@
     </message>
 </context>
 <context>
+    <name>MicrosoftEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="186"/>
+        <source>You have not registered for the Microsoft Translation service.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="192"/>
+        <source>No valid access token available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="169"/>
+        <source>No translation available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="204"/>
+        <source>No Text-to-Speech for the selected language available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MimeTypesPage</name>
     <message>
         <location filename="../Preferences/ConfigurationPages/MimeTypesPage.ui" line="17"/>
@@ -39367,6 +39473,19 @@
     </message>
 </context>
 <context>
+    <name>MyMemoryEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py" line="75"/>
+        <source>Only texts up to {0} characters are allowed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py" line="100"/>
+        <source>Invalid response received</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>NamingStyleChecker</name>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396"/>
@@ -46883,6 +47002,19 @@
     </message>
 </context>
 <context>
+    <name>PromtEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py" line="99"/>
+        <source>Invalid response received</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py" line="108"/>
+        <source>This direction of translation is not available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PropertiesDialog</name>
     <message>
         <location filename="../Project/PropertiesDialog.ui" line="20"/>
@@ -65873,6 +66005,19 @@
     </message>
 </context>
 <context>
+    <name>TranslationEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py" line="67"/>
+        <source>No pronounce data available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py" line="82"/>
+        <source>No translation available</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TranslationPropertiesDialog</name>
     <message>
         <location filename="../Project/TranslationPropertiesDialog.ui" line="14"/>
@@ -66053,6 +66198,539 @@
     </message>
 </context>
 <context>
+    <name>Translator</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="53"/>
+        <source>Translator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="53"/>
+        <source>T&amp;ranslator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="53"/>
+        <source>Alt+Shift+R</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="59"/>
+        <source>Switch the input focus to the Translator window.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="61"/>
+        <source>&lt;b&gt;Activate Translator&lt;/b&gt;&lt;p&gt;This switches the input focus to the Translator window.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TranslatorEngines</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="38"/>
+        <source>Google V.1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="40"/>
+        <source>MyMemory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="42"/>
+        <source>Glosbe</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="44"/>
+        <source>PROMT</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="46"/>
+        <source>Yandex</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="48"/>
+        <source>Google V.2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="50"/>
+        <source>Microsoft</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="52"/>
+        <source>DeepL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="54"/>
+        <source>Unknow translation service name ({0})</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TranslatorLanguagesDb</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="32"/>
+        <source>Afrikaans</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="33"/>
+        <source>Arabic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="34"/>
+        <source>Belarusian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="35"/>
+        <source>Bulgarian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="36"/>
+        <source>Bosnian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="37"/>
+        <source>Catalan</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="38"/>
+        <source>Czech</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="39"/>
+        <source>Danish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="40"/>
+        <source>German</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="41"/>
+        <source>Greek</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="42"/>
+        <source>English</source>
+        <translation type="unfinished">Česky</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="43"/>
+        <source>Spanish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="44"/>
+        <source>Estonian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="45"/>
+        <source>Finnish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="46"/>
+        <source>French</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="47"/>
+        <source>Irish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="48"/>
+        <source>Galician</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="49"/>
+        <source>Hebrew (he)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="50"/>
+        <source>Hindi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="51"/>
+        <source>Croatian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="52"/>
+        <source>Hungarian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="53"/>
+        <source>Indonesian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="54"/>
+        <source>Icelandic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="55"/>
+        <source>Italian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="56"/>
+        <source>Hebrew (iw)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="57"/>
+        <source>Japanese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="58"/>
+        <source>Georgian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="59"/>
+        <source>Korean</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="60"/>
+        <source>Lithuanian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="61"/>
+        <source>Latvian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="62"/>
+        <source>Macedonian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="63"/>
+        <source>Maltese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="64"/>
+        <source>Dutch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="65"/>
+        <source>Norwegian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="66"/>
+        <source>Polish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="67"/>
+        <source>Portuguese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="68"/>
+        <source>Romanian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="69"/>
+        <source>Russian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="70"/>
+        <source>Slovak</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="71"/>
+        <source>Slovenian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="72"/>
+        <source>Albanian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="73"/>
+        <source>Serbian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="74"/>
+        <source>Swedish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="75"/>
+        <source>Thai</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="76"/>
+        <source>Filipino</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="77"/>
+        <source>Turkish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="78"/>
+        <source>Ukrainian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="79"/>
+        <source>Vietnamese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="80"/>
+        <source>Chinese S</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="81"/>
+        <source>Chinese T</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TranslatorPage</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="17"/>
+        <source>&lt;b&gt;Configure Translator&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py" line="175"/>
+        <source>Enabled Languages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="77"/>
+        <source>Press to set or unset all entries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="80"/>
+        <source>Set/Unset All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="100"/>
+        <source>Press to set the default list of enabled languages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="103"/>
+        <source>Set Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="128"/>
+        <source>Google V.1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="134"/>
+        <source>Select to show the results of the translation dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="137"/>
+        <source>Show dictionary results</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="147"/>
+        <source>Google V.2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="272"/>
+        <source>Key:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="160"/>
+        <source>Enter your Google Translate key</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="183"/>
+        <source>Microsoft Azure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="189"/>
+        <source>Subscription Key:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="196"/>
+        <source>Enter the subscription key of the text translator service</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="216"/>
+        <source>MyMemory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="222"/>
+        <source>Email:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="229"/>
+        <source>Enter email address to be sent with each request (optional)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="243"/>
+        <source>Enter your MyMemory key</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="266"/>
+        <source>Yandex</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui" line="279"/>
+        <source>Enter your Yandex key</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py" line="42"/>
+        <source>&lt;p&gt;A key is &lt;b&gt;required&lt;/b&gt; to use this service. &lt;a href=&quot;{0}&quot;&gt;Get a commercial API key.&lt;/a&gt;&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py" line="46"/>
+        <source>&lt;p&gt;A registration of the text translation service is &lt;b&gt;required&lt;/b&gt;. &lt;a href=&quot;{0}&quot;&gt;Register with Microsoft Azure.&lt;/a&gt;&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py" line="51"/>
+        <source>&lt;p&gt;A key is &lt;b&gt;optional&lt;/b&gt; to use this service. &lt;a href=&quot;{0}&quot;&gt;Get a free API key.&lt;/a&gt;&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py" line="55"/>
+        <source>&lt;p&gt;A key is &lt;b&gt;required&lt;/b&gt; to use this service. &lt;a href=&quot;{0}&quot;&gt;Get a free API key.&lt;/a&gt;&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py" line="175"/>
+        <source>At least two languages should be selected to work correctly.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TranslatorPlugin</name>
+    <message>
+        <location filename="../Plugins/PluginTranslator.py" line="68"/>
+        <source>Translator</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TranslatorWidget</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="31"/>
+        <source>Select the translation service</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="58"/>
+        <source>Press to pronounce the entered text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="71"/>
+        <source>Select the language of the original text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="78"/>
+        <source>Press to swap the translation direction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="91"/>
+        <source>Select the language for the translated text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="98"/>
+        <source>Press to pronounce the translated text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="105"/>
+        <source>Enter the text to be translated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="128"/>
+        <source>Shows the translated text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="144"/>
+        <source>Press to translate the entered text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui" line="151"/>
+        <source>Press to clear the text fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py" line="372"/>
+        <source>Translation Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py" line="354"/>
+        <source>The selected translation service does not support the Text-to-Speech function.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TransplantProjectHelper</name>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsMercurial/TransplantExtension/ProjectHelper.py" line="135"/>
@@ -78452,6 +79130,64 @@
     </message>
 </context>
 <context>
+    <name>YandexEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="43"/>
+        <source>Invalid API key.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="44"/>
+        <source>API key has been blocked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="45"/>
+        <source>Daily limit for requests has been reached.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="46"/>
+        <source>Daily limit for the volume of translated text reached.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="48"/>
+        <source>Text size exceeds the maximum.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="49"/>
+        <source>Text could not be translated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="50"/>
+        <source>The specified translation direction is not supported.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="89"/>
+        <source>Only texts up to {0} characters are allowed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="94"/>
+        <source>A valid Yandex key is required.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="107"/>
+        <source>Invalid response received</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py" line="113"/>
+        <source>Unknown error code ({0}) received.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>ZoomDialog</name>
     <message>
         <location filename="../QScintilla/ZoomDialog.ui" line="13"/>
Binary file i18n/eric6_de.qm has changed
--- a/i18n/eric6_de.ts	Sun Dec 10 14:51:54 2017 +0100
+++ b/i18n/eric6_de.ts	Sun Dec 10 16:23:29 2017 +0100
@@ -7138,6 +7138,41 @@
     </message>
 </context>
 <context>
+    <name>DeepLEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="77"/>
+        <source>Text to be translated exceeds the translation limit of {0} characters.</source>
+        <translation>Der zu übersetzende Text überschreitet das Längenlimit von {0} Zeichen.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="112"/>
+        <source>Invalid response received from DeepL</source>
+        <translation>Ungültige Antwort von DeepL erhalten</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="115"/>
+        <source>DeepL reported an error.
+Message: {0}</source>
+        <translation>DeepL berichtete einen Fehler.
+Meldung: {0}</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="119"/>
+        <source>DeepL call returned an unknown result</source>
+        <translation>DeepL Aufruf lieferte ein unbekanntes Resultat</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="123"/>
+        <source>Unsupported language code given (source: {0}, target: {1}).</source>
+        <translation>Nicht unterstützer Sprachkode wurde übergeben (Quelle: {0}, Ziel: {0}).</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py" line="130"/>
+        <source>&lt;p&gt;No translation found&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Keine Übersetzung gefunden&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
     <name>DeleteFilesConfirmationDialog</name>
     <message>
         <location filename="../UI/DeleteFilesConfirmationDialog.ui" line="22"/>
@@ -7644,32 +7679,32 @@
 <context>
     <name>DotDesktopWizard</name>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="149"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="124"/>
         <source>.desktop Wizard</source>
         <translation>.desktop Assistent</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="111"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="86"/>
         <source>.&amp;desktop Wizard...</source>
         <translation>.&amp;desktop Assistent...</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="117"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="92"/>
         <source>&lt;b&gt;.desktop Wizard&lt;/b&gt;&lt;p&gt;This wizard opens a dialog for entering all the parameters needed to create the contents of a .desktop file. The generated code replaces the text of the current editor. Alternatively a new editor is opened.&lt;/p&gt;</source>
         <translation>&lt;b&gt;.desktop Assistent&lt;/b&gt;&lt;p&gt;Dieser Assistent öffnet einen Dialog für die Eingabe aller Daten, die zur Erzeugung einer .desktop Datei benötigt werden. Der erzeugte Quelltext ersetzt den Text des aktuellen Editors. Alternativ wird ein neuer Editor geöffnet.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="143"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="118"/>
         <source>No current editor</source>
         <translation>Kein aktueller Editor</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="143"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="118"/>
         <source>Please open or create a file first.</source>
         <translation>Bitte öffnen oder erzeugen Sie zuerst eine Datei.</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginWizardDotDesktop.py" line="149"/>
+        <location filename="../Plugins/PluginWizardDotDesktop.py" line="124"/>
         <source>The current editor contains text. Shall this be replaced?</source>
         <translation>Der aktuelle Editor enthält bereits Text. Soll dieser ersetzt werden?</translation>
     </message>
@@ -17316,6 +17351,55 @@
     </message>
 </context>
 <context>
+    <name>GlosbeEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py" line="88"/>
+        <source>Invalid response received</source>
+        <translation>Ungültige Antwort empfangen</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py" line="103"/>
+        <source>No translation found.</source>
+        <translation>Keine Übersetzung gefunden.</translation>
+    </message>
+</context>
+<context>
+    <name>GoogleV1Engine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py" line="159"/>
+        <source>Only texts up to {0} characters are allowed.</source>
+        <translation>Es sind nur Texte bis zu {0} Zeichen erlaubt.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py" line="95"/>
+        <source>Invalid response received</source>
+        <translation>Ungültige Antwort empfangen</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py" line="129"/>
+        <source>No translation found.</source>
+        <translation>Keine Übersetzung gefunden.</translation>
+    </message>
+</context>
+<context>
+    <name>GoogleV2Engine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py" line="71"/>
+        <source>A valid Google Translate key is required.</source>
+        <translation>Ein gülter Google Übersetzer Schlüssel ist erforderlich.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py" line="82"/>
+        <source>Invalid response received</source>
+        <translation>Ungültige Antwort empfangen</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py" line="86"/>
+        <source>No translation available.</source>
+        <translation>Keine Übersetzungen verfügbar.</translation>
+    </message>
+</context>
+<context>
     <name>GotoDialog</name>
     <message>
         <location filename="../QScintilla/GotoDialog.ui" line="13"/>
@@ -37207,6 +37291,29 @@
     </message>
 </context>
 <context>
+    <name>MicrosoftEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="186"/>
+        <source>You have not registered for the Microsoft Translation service.</source>
+        <translation>Sie haben sich nicht für den Microsoft Übersetzungsdienst registriert.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="192"/>
+        <source>No valid access token available.</source>
+        <translation>Kein gültiges Zugriffstoken verfügbar.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="169"/>
+        <source>No translation available.</source>
+        <translation>Keine Übersetzungen verfügbar.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py" line="204"/>
+        <source>No Text-to-Speech for the selected language available.</source>
+        <translation>Keine Vorlesedaten für die ausgewählte Sprache verfügbar.</translation>
+    </message>
+</context>
+<context>
     <name>MimeTypesPage</name>
     <message>
         <location filename="../Preferences/ConfigurationPages/MimeTypesPage.ui" line="17"/>
@@ -38418,6 +38525,19 @@
     </message>
 </context>
 <context>
+    <name>MyMemoryEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py" line="75"/>
+        <source>Only texts up to {0} characters are allowed.</source>
+        <translation>Es sind nur Texte bis zu {0} Zeichen erlaubt.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py" line="100"/>
+        <source>Invalid response received</source>
+        <translation>Ungültige Antwort empfangen</translation>
+    </message>
+</context>
+<context>
     <name>NamingStyleChecker</name>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396"/>
@@ -45867,6 +45987,19 @@
     </message>
 </context>
 <context>
+    <name>PromtEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py" line="99"/>
+        <source>Invalid response received</source>
+        <translation>Ungültige Antwort empfangen</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py" line="108"/>
+        <source>This direction of translation is not available.</source>
+        <translation>Diese Übersetzungsrichtung ist nicht verfügbar.</translation>
+    </message>
+</context>
+<context>
     <name>PropertiesDialog</name>
     <message>
         <location filename="../Project/PropertiesDialog.py" line="105"/>
@@ -64624,6 +64757,19 @@
     </message>
 </context>
 <context>
+    <name>TranslationEngine</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py" line="67"/>
+        <source>No pronounce data available</source>
+        <translation>Es sind keine Aussprachedaten verfügbar</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py" line="82"/>
+        <source>No translation available</source>
+        <translation>Keine Übersetzungen verfügbar</translation>
+    </message>
+</context>
+<context>
     <name>TranslationPropertiesDialog</name>
     <message>
         <location filename="../Project/TranslationPropertiesDialog.ui" line="57"/>
@@ -64776,6 +64922,539 @@
     </message>
 </context>
 <context>
+    <name>Translator</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="53"/>
+        <source>Translator</source>
+        <translation>Übersetzer</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="53"/>
+        <source>T&amp;ranslator</source>
+        <translation>Übe&amp;rsetzer</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="53"/>
+        <source>Alt+Shift+R</source>
+        <translation>Alt+Shift+R</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="59"/>
+        <source>Switch the input focus to the Translator window.</source>
+        <translation>Schalte den Eingabefokus auf das Übersetzerfenster um.</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/Translator.py" line="61"/>
+        <source>&lt;b&gt;Activate Translator&lt;/b&gt;&lt;p&gt;This switches the input focus to the Translator window.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Übersetzer aktivieren&lt;/b&gt;&lt;p&gt;Dies schaltet den Eingabefokus auf das Übersetzerfenster um.&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>TranslatorEngines</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="38"/>
+        <source>Google V.1</source>
+        <translation>Google V.1</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="40"/>
+        <source>MyMemory</source>
+        <translation>MyMemory</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="42"/>
+        <source>Glosbe</source>
+        <translation>Glosbe</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="44"/>
+        <source>PROMT</source>
+        <translation>PROMT</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="46"/>
+        <source>Yandex</source>
+        <translation>Yandex</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="54"/>
+        <source>Unknow translation service name ({0})</source>
+        <translation>Unbekanter Übersetzungsdienst ({0})</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="48"/>
+        <source>Google V.2</source>
+        <translation>Google V.2</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="50"/>
+        <source>Microsoft</source>
+        <translation>Microsoft</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py" line="52"/>
+        <source>DeepL</source>
+        <translation>DeepL</translation>
+    </message>
+</context>
+<context>
+    <name>TranslatorLanguagesDb</name>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="33"/>
+        <source>Arabic</source>
+        <translation>Arabisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="35"/>
+        <source>Bulgarian</source>
+        <translation>Bulgarisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="36"/>
+        <source>Bosnian</source>
+        <translation>Bosnisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="37"/>
+        <source>Catalan</source>
+        <translation>Katalanisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="38"/>
+        <source>Czech</source>
+        <translation>Tschechisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="39"/>
+        <source>Danish</source>
+        <translation>Dänisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="40"/>
+        <source>German</source>
+        <translation>Deutsch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="41"/>
+        <source>Greek</source>
+        <translation>Griechisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="42"/>
+        <source>English</source>
+        <translation>Englisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="43"/>
+        <source>Spanish</source>
+        <translation>Spanisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="44"/>
+        <source>Estonian</source>
+        <translation>Estnisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="45"/>
+        <source>Finnish</source>
+        <translation>Finnisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="46"/>
+        <source>French</source>
+        <translation>Französisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="47"/>
+        <source>Irish</source>
+        <translation>Irisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="48"/>
+        <source>Galician</source>
+        <translation>Galizisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="50"/>
+        <source>Hindi</source>
+        <translation>Hindi</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="51"/>
+        <source>Croatian</source>
+        <translation>Kroatisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="52"/>
+        <source>Hungarian</source>
+        <translation>Ungarisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="53"/>
+        <source>Indonesian</source>
+        <translation>Indonesisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="54"/>
+        <source>Icelandic</source>
+        <translation>Isländisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="55"/>
+        <source>Italian</source>
+        <translation>Italienisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="57"/>
+        <source>Japanese</source>
+        <translation>Japanisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="58"/>
+        <source>Georgian</source>
+        <translation>Georgisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="59"/>
+        <source>Korean</source>
+        <translation>Koreanisch</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py" line="60"/>
+        <source>Lithuanian</source>
+        <translation>Litauisch</translation>
+    </message>
+    <message&g