#REFACTORING by cg
authorClaus Gittinger <cg@exept.de>
Wed, 29 Jan 2020 17:25:33 +0100
changeset 6804 b54520ce43f3
parent 6803 ee24f1bc43ae
child 6805 5727b638c90d
#REFACTORING by cg class: EditTextView added: #googleTranslate:from:to: #googleTranslateFrom:to: comment/format in: #babelFishTranslate: changed: #editMenu #googleTranslate:
EditTextView.st
--- a/EditTextView.st	Mon Jan 20 04:27:28 2020 +0000
+++ b/EditTextView.st	Wed Jan 29 17:25:33 2020 +0100
@@ -6956,9 +6956,11 @@
 
 babelFishTranslate:fromToModeString
     "translate the selected text and paste it after the selection.
-     This is now obsolete, as that web service no longer exists (sigh)"
+     Used to use babelFish, which is now obsolete, as that web service no longer exists (sigh).
+     So now we use google..."
 
     ^ self googleTranslate:fromToModeString.
+
 "/    |original translated|
 "/
 "/    original := self selectionAsString.
@@ -7171,6 +7173,7 @@
                     ('Spanish -> English'     (babelFishTranslate: 'es_en')   )
                     ('Portuguese -> English'  (babelFishTranslate: 'pt_en')   )
                     ('-'                                        )
+                    ('any -> English'     (babelFishTranslate: 'auto_en')   )
                     ('any -> German'      (babelFishTranslate: 'auto_de')   )
                     ('any -> French'      (babelFishTranslate: 'auto_fr')   )
                     ('any -> Italian'     (babelFishTranslate: 'auto_it')   )
@@ -7479,17 +7482,22 @@
 !
 
 googleTranslate:fromToModeString
-    "translate the selected text and paste it after the selection."
-
-    |sourceLang targetLang response url req o original translated|
+    "translate the selected text and paste it after the selection.
+     fromToModeString is of the form sourceLang_destLang"
+
+    |sourceLang targetLang|
 
     "/ 'en_de' upTo:$_.     
     "/ 'en_de' copyAfter:$_.  
     sourceLang := fromToModeString upTo:$_.
     targetLang := fromToModeString copyAfter:$_.
-
-    original := self selectionAsString.
-    original size == 0 ifTrue:[^ self].
+    self googleTranslateFrom:sourceLang to:targetLang
+!
+
+googleTranslate:original from:sourceLang to:targetLang
+    "translate the selected text and return it"
+
+    |response url o translated|
 
     self withWaitCursorDo:[
         url := 'http://translate.googleapis.com/translate_a/single?client=gtx&sl=%1&tl=%2&dt=t&ie=UTF-8&oe=UTF-8&q=%3' 
@@ -7502,9 +7510,23 @@
         "/ 
         "/ response := HTTPInterface post:url with:req.
     ].
-    response isErrorResponse ifTrue:[^ self].
+    response isErrorResponse ifTrue:[^ nil].
     o := JSONReader decode:response data.
     translated := o first first first.
+    translated isEmpty ifTrue:[^ nil].
+    ^ translated
+!
+
+googleTranslateFrom:sourceLang to:targetLang
+    "translate the selected text and paste it after the selection."
+
+    |original translated|
+
+    original := self selectionAsString.
+    original size == 0 ifTrue:[^ self].
+
+    translated := self googleTranslate:original from:sourceLang to:targetLang.
+    translated isNil ifTrue:[^ self].
 
     "/ v pasteOrReplace:translated
     self cursorLine:(self selectionEndLine) col:(self selectionEndCol + 1).