eric6/Plugins/PluginTranslator.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7199
c71bd6f21748
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Translator plugin.
8 """
9
10 from __future__ import unicode_literals
11
12 import os
13
14 from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication, QDateTime, Qt
15
16 from E5Gui.E5Application import e5App
17
18 import Preferences
19
20 from UiExtensionPlugins.Translator.Translator import Translator
21
22 import UI.Info
23
24 # Start-Of-Header
25 name = "Translator Plugin"
26 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
27 autoactivate = True
28 deactivateable = True
29 version = UI.Info.VersionOnly
30 className = "TranslatorPlugin"
31 packageName = "__core__"
32 shortDescription = "Translation utility using various translators."
33 longDescription = \
34 """This plug-in implements a utility to translate text using""" \
35 """ various online translation services."""
36 needsRestart = False
37 pyqtApi = 2
38 python2Compatible = True
39 # End-Of-Header
40
41 error = ""
42
43 translatorPluginObject = None
44
45
46 def createTranslatorPage(configDlg):
47 """
48 Module function to create the Translator configuration page.
49
50 @param configDlg reference to the configuration dialog
51 @return reference to the configuration page
52 """
53 from UiExtensionPlugins.Translator.ConfigurationPage.TranslatorPage \
54 import TranslatorPage
55 page = TranslatorPage(translatorPluginObject)
56 return page
57
58
59 def getConfigData():
60 """
61 Module function returning data as required by the configuration dialog.
62
63 @return dictionary containing the relevant data
64 """
65 return {
66 "translatorPage": [
67 QCoreApplication.translate("TranslatorPlugin",
68 "Translator"),
69 os.path.join("UiExtensionPlugins", "Translator", "icons",
70 "flag.png"),
71 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(TranslatorPlugin, self).__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, 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.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, value.toString(Qt.ISODate))
209 else:
210 Preferences.Prefs.settings.setValue(
211 self.PreferencesKey + "/" + key, value)
212
213 if key in ["EnabledLanguages"]:
214 self.updateLanguages.emit()
215
216 #
217 # eflag: noqa = M801

eric ide

mercurial