1
1
import threading
2
+ from googletrans import Translator
3
+ import time
2
4
3
5
class CWorker (threading .Thread ):
4
6
def __init__ (self , events ):
5
7
super ().__init__ (daemon = True )
6
8
self ._events = events
7
9
self ._forceTranslateEvent = threading .Event ()
10
+ self ._translatorFast = Translator (service_urls = ['translate.google.com' ])
8
11
return
9
12
10
13
def run (self ):
11
14
oldText = None
15
+ lastTextUpdateTime = 0
16
+ minTextUpdateTime = 3.0 # seconds
12
17
while True :
13
18
isForceTranslate = self ._forceTranslateEvent .wait (5 )
14
- if isForceTranslate :
15
- self ._forceTranslateEvent .clear ()
19
+ self ._forceTranslateEvent .clear ()
16
20
17
21
text = self ._events .text ()
18
- if (text == oldText ) and (not isForceTranslate ): continue # Not changed
19
-
22
+ T = time .time ()
23
+ if not isForceTranslate :
24
+ if text == oldText : continue # Not changed
25
+ if T < lastTextUpdateTime + minTextUpdateTime : continue # Too fast
26
+ pass
27
+ lastTextUpdateTime = T
28
+ oldText = text
29
+
20
30
try :
21
31
self ._performTranslate (text , force = isForceTranslate )
22
32
except Exception as e :
23
- print (e )
33
+ self . _events . error (e )
24
34
continue
25
35
return
26
36
@@ -37,14 +47,15 @@ def _performTranslate(self, text, force=False):
37
47
38
48
fullText = self ._fullTranslate (text , fastTranslation = fastText )
39
49
self ._events .fullTranslated (fullText )
40
- except Exception as e :
41
- self ._events .error (e )
42
50
finally :
43
51
self ._events .endTranslate ()
44
52
return
45
53
46
54
def _fastTranslate (self , text ):
47
- return "Fast translation: " + text + "\n "
55
+ if not text : return ""
56
+ translated = self ._translatorFast .translate (text , dest = self ._events .language ()['code' ])
57
+ return translated .text
48
58
49
59
def _fullTranslate (self , text , fastTranslation = None ):
60
+ if not text : return ""
50
61
return "Full translation: " + text + "\n "
0 commit comments