1# -*- coding: utf-8 -*- 2 3# Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> 4# 5 6""" 7Module implementing the Translator plugin. 8""" 9 10import os 11 12from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication, QDateTime, Qt 13 14from E5Gui.E5Application import e5App 15 16import Preferences 17 18from UiExtensionPlugins.Translator.Translator import Translator 19 20import UI.Info 21 22# Start-Of-Header 23name = "Translator Plugin" 24author = "Detlev Offenbach <detlev@die-offenbachs.de>" 25autoactivate = True 26deactivateable = True 27version = UI.Info.VersionOnly 28className = "TranslatorPlugin" 29packageName = "__core__" 30shortDescription = "Translation utility using various translators." 31longDescription = ( 32 """This plug-in implements a utility to translate text using""" 33 """ various online translation services.""" 34) 35needsRestart = False 36pyqtApi = 2 37# End-Of-Header 38 39error = "" 40 41translatorPluginObject = None 42 43 44def createTranslatorPage(configDlg): 45 """ 46 Module function to create the Translator configuration page. 47 48 @param configDlg reference to the configuration dialog 49 @return reference to the configuration page 50 """ 51 from UiExtensionPlugins.Translator.ConfigurationPage import TranslatorPage 52 page = TranslatorPage.TranslatorPage(translatorPluginObject) 53 return page 54 55 56def getConfigData(): 57 """ 58 Module function returning data as required by the configuration dialog. 59 60 @return dictionary containing the relevant data 61 """ 62 icon = ( 63 os.path.join("UiExtensionPlugins", "Translator", "icons", "flag-dark") 64 if e5App().usesDarkPalette() else 65 os.path.join("UiExtensionPlugins", "Translator", "icons", "flag-light") 66 ) 67 return { 68 "translatorPage": [ 69 QCoreApplication.translate("TranslatorPlugin", 70 "Translator"), 71 icon, createTranslatorPage, None, None], 72 } 73 74 75def prepareUninstall(): 76 """ 77 Module function to prepare for an uninstallation. 78 """ 79 Preferences.Prefs.settings.remove(TranslatorPlugin.PreferencesKey) 80 81 82class TranslatorPlugin(QObject): 83 """ 84 Class implementing the Translator plug-in. 85 86 @signal updateLanguages() emitted to indicate a languages update 87 """ 88 PreferencesKey = "Translator" 89 90 updateLanguages = pyqtSignal() 91 92 def __init__(self, ui): 93 """ 94 Constructor 95 96 @param ui reference to the user interface object (UI.UserInterface) 97 """ 98 super().__init__(ui) 99 self.__ui = ui 100 self.__initialize() 101 102 self.__defaults = { 103 "OriginalLanguage": "en", 104 "TranslationLanguage": "de", 105 "SelectedEngine": "deepl", 106 "EnabledLanguages": ["en", "de", "fr", "cs", "es", "pt", 107 "ru", "tr", "zh-CN", "zh-TW"], 108 # service specific settings below 109 # DeepL 110 "DeeplKey": "", 111 # Google 112 "GoogleEnableDictionary": False, 113 "GoogleV2Key": "", 114 # IBM Watson Language Translator 115 "IbmUrl": "", 116 "IbmKey": "", 117 # Microsoft 118 "MsTranslatorKey": "", 119 "MsAuthToken": "", 120 "MsAuthTokenExpire": QDateTime(), 121 # MyMemory 122 "MyMemoryKey": "", 123 "MyMemoryEmail": "", 124 # Yandex 125 "YandexKey": "", 126 } 127 128 def __initialize(self): 129 """ 130 Private slot to (re)initialize the plugin. 131 """ 132 self.__object = None 133 134 def activate(self): 135 """ 136 Public method to activate this plugin. 137 138 @return tuple of None and activation status (boolean) 139 """ 140 global error 141 error = "" # clear previous error 142 143 global translatorPluginObject 144 translatorPluginObject = self 145 146 self.__object = Translator(self, e5App().usesDarkPalette(), self.__ui) 147 self.__object.activate() 148 e5App().registerPluginObject("Translator", self.__object) 149 150 return None, True 151 152 def deactivate(self): 153 """ 154 Public method to deactivate this plugin. 155 """ 156 e5App().unregisterPluginObject("Translator") 157 self.__object.deactivate() 158 159 self.__initialize() 160 161 def getPreferencesDefault(self, key): 162 """ 163 Public method to retrieve the various default settings. 164 165 @param key the key of the value to get 166 @return the requested setting 167 """ 168 return self.__defaults[key] 169 170 def getPreferences(self, key): 171 """ 172 Public method to retrieve the various settings. 173 174 @param key the key of the value to get 175 @return the requested setting 176 """ 177 if key in ["EnabledLanguages"]: 178 return Preferences.toList( 179 Preferences.Prefs.settings.value( 180 self.PreferencesKey + "/" + key, self.__defaults[key])) 181 elif key in ["GoogleEnableDictionary"]: 182 return Preferences.toBool( 183 Preferences.Prefs.settings.value( 184 self.PreferencesKey + "/" + key, self.__defaults[key])) 185 elif key in ["MsAuthTokenExpire"]: 186 value = Preferences.Prefs.settings.value( 187 self.PreferencesKey + "/" + key, self.__defaults[key]) 188 if isinstance(value, str): 189 if value.startswith("@QDateTime"): 190 # old value, replace with default 191 value = self.__defaults[key] 192 else: 193 value = QDateTime.fromString(value, Qt.DateFormat.ISODate) 194 return value 195 else: 196 return Preferences.Prefs.settings.value( 197 self.PreferencesKey + "/" + key, self.__defaults[key]) 198 199 def setPreferences(self, key, value): 200 """ 201 Public method to store the various settings. 202 203 @param key the key of the setting to be set (string) 204 @param value the value to be set 205 """ 206 if key in ["MsAuthTokenExpire"]: 207 Preferences.Prefs.settings.setValue( 208 self.PreferencesKey + "/" + key, 209 value.toString(Qt.DateFormat.ISODate)) 210 else: 211 Preferences.Prefs.settings.setValue( 212 self.PreferencesKey + "/" + key, value) 213 214 if key in ["EnabledLanguages"]: 215 self.updateLanguages.emit() 216 217# 218# eflag: noqa = M801 219