-
Notifications
You must be signed in to change notification settings - Fork 1
/
Translator.ahk
125 lines (112 loc) · 4.56 KB
/
Translator.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#Include <JXON_ahk2\_JXON> ; https://github.com/TheArkive/JXON_ahk2
class Translator {
static SourceLanguage := "auto"
static TargetLanguage := "ru"
/**
* Translates text.
* @param {string} Text The source text for translation.
* @param {string} TargetLanguage The code for a language you would like to translate to. For example: "de", "en", "es", "it" and so on.
* @param {string} SourceLanguage The code for a language you would like to translate from. Defaulted to "auto" (see SourceLanguage property). For example: "de", "en", "es", "it" and so on.
* @returns {string} Output translation text.
*/
static Translate(Text, TargetLanguage := this.TargetLanguage, SourceLanguage := this.SourceLanguage) {
url := "https://translate.google.com/translate_a/single"
_headers := Map(
"User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
"Referer", "https://translate.google.com/",
"Accept", "application/json",
"charset", "utf-8"
)
_params := Map(
"client", "gtx",
"sl", SourceLanguage,
"tl", TargetLanguage,
"dt", "t",
"q", this.UriEncode(Text)
)
headers := ""
params := ""
for key, value in _headers
headers .= key "=" value "&"
for key, value in _params {
if A_Index != _params.Count
params .= key "=" value "&"
else
params .= key "=" value
}
response := ComObject("WinHttp.WinHttpRequest.5.1")
response.Open("GET", url . "?" . headers . params, false)
; A_Clipboard := url . "?" . headers . params
response.Send()
if response.Status = 200 {
Translation := response.ResponseText
TranslationObject := Jxon_Load(&Translation)
data := Jxon_Dump(TranslationObject)
output := ""
for k, v in TranslationObject[1]
output .= TranslationObject[1][k][1]
return output
} else
MsgBox("Request failed with status code " response.Status)
}
static UriEncode(Uri, RE := "[0-9A-Za-z]") {
Var := Buffer(StrPut(Uri, "UTF-8"), 0)
StrPut(Uri, Var, "UTF-8")
While Code := NumGet(Var, A_Index - 1, "UChar") {
if RegExMatch(Chr(Code), RE, &match)
Res .= match[]
else
Res .= Format("%{:02X}", Code)
}
return Res
}
}
; #############################
; #############################
; #############################
; BACKUP FUNCTION BELOW:
; #############################
; #############################
; #############################
; translate(Text, SourceLanguage:="auto", TargetLanguage:="en") {
; url := "https://translate.google.com/translate_a/single"
; _headers := Map(
; "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
; "Referer", "https://translate.google.com/",
; "Accept", "application/json"
; )
; _params := Map(
; "client", "gtx",
; "sl", SourceLanguage,
; "tl", TargetLanguage,
; "dt", "t",
; "q", Text
; )
; headers := ""
; params := ""
; for key, value in _headers
; headers .= key "=" value "&"
; for key, value in _params {
; if A_Index != _params.Count
; params .= key "=" value "&"
; else
; params .= key "=" value
; }
; response := ComObject("WinHttp.WinHttpRequest.5.1")
; response.Open("GET", url . "?" . headers . params, false)
; response.Send()
; if response.Status = 200 {
; Translation := response.ResponseText
; TranslationObject := Jxon_Load(&Translation)
; data := Jxon_Dump(TranslationObject)
; output := ""
; for k, v in TranslationObject[1]
; output .= TranslationObject[1][k][1]
; return output
; } else
; MsgBox("Request failed with status code " response.Status)
; }
; Example usage
; text := "The mind can go either direction under stress—toward positive or toward negative: on or off. Think of it as a spectrum whose extremes are unconsciousness at the negative end and hyperconsciousness at the positive end. The way the mind will lean under stress is strongly influenced by training."
; translated_text := translate(text, "en", "ru")
; MsgBox(translated_text)