--- /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