eric7/Plugins/PluginTranslator.py

branch
eric7
changeset 8312
800c432b34c8
parent 8259
2bbec88047dd
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Translator plugin.
8 """
9
10 import os
11
12 from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication, QDateTime, Qt
13
14 from E5Gui.E5Application import e5App
15
16 import Preferences
17
18 from UiExtensionPlugins.Translator.Translator import Translator
19
20 import UI.Info
21
22 # Start-Of-Header
23 name = "Translator Plugin"
24 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
25 autoactivate = True
26 deactivateable = True
27 version = UI.Info.VersionOnly
28 className = "TranslatorPlugin"
29 packageName = "__core__"
30 shortDescription = "Translation utility using various translators."
31 longDescription = (
32 """This plug-in implements a utility to translate text using"""
33 """ various online translation services."""
34 )
35 needsRestart = False
36 pyqtApi = 2
37 # End-Of-Header
38
39 error = ""
40
41 translatorPluginObject = None
42
43
44 def 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
56 def 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
75 def prepareUninstall():
76 """
77 Module function to prepare for an uninstallation.
78 """
79 Preferences.Prefs.settings.remove(TranslatorPlugin.PreferencesKey)
80
81
82 class 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

eric ide

mercurial