-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtranslate.tcl
122 lines (105 loc) · 4.2 KB
/
translate.tcl
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
# rewrite from translate.tcl by Twin@RusNet
encoding system utf-8
::ck::require cmd 0.4
::ck::require http 0.2
::ck::require cache 0.2
namespace eval translate {
variable version 1.1
variable author "Chpock <[email protected]>"
namespace import -force ::ck::cmd::*
namespace import -force ::ck::cache::cache
namespace import -force ::ck::http::http
namespace import -force ::ck::strings::html
}
proc ::translate::init { } {
cmd register translateru ::translate::run -doc "translate" -autousage \
-bind "tran|slate" -bind "tt"
set x [list]
set dictlist [list]
foreacharray ::translate::dictionary {
lappend x "*${k}*: $v"
lappend dictlist "*${k}*"
}
cmd doc -link "translate" "translate.dict" "~Словари~: [join $x {; }]"
cmd doc -link "translate.dict" "translate" "~*!translate* \[словарь\] <текст>~ - перевод текста. Словари - [join $dictlist {, }]"
config register -id "dict.lat" -type str -default "er" \
-desc "Словарь по умолчанию для текста с латинскими буквами." -access "m" -folder "translateru"
config register -id "dict.rus" -type str -default "re" \
-desc "Словарь по умолчанию для текста с русскими буквами." -access "m" -folder "translateru"
config register -id "show.dict" -type bool -default 0 \
-desc "Показывать ли в результате перевода используемый словарь." -access "m" -folder "translateru"
cache register -nobotnick -nobotnet -ttl 1d -maxrec 5
msgreg {
err.conn &rОшибка связи с &Btranslate.ru&r.
err.parse &rОшибка обработки результата перевода.
main %s&n%s
main.dict "%s перевод&K: "
}
}
proc ::translate::run { sid } {
variable dictionary
session import
if { $Event eq "CmdPass" } {
set StdArgs [lrange $StdArgs 1 end]
if { [info exists dictionary([string tolower [lindex $StdArgs 0]])] } {
set dict [string tolower [lpop StdArgs]]
}
set Text [join $StdArgs { }]
if { $Text eq "" } { replydoc "translate" }
if { ![info exists dict] } {
if { [string isrus $Text] } {
set dict [config get "dict.rus"]
} {
set dict [config get "dict.lat"]
}
}
debug -debug "Try to get -> <%s>" $Text
cache makeid $dict $Text
if { ![cache get TransText] } {
session export -grablist [list "dict"]
http run "http://m.translate.ru/translator/result/" -query-codepage utf-8 -return \
-query [list text $Text dirCode $dict]
}
} elseif { $Event eq "HttpResponse" } {
if { $HttpStatus < 0 } {
reply -err conn
}
if { ![regexp {<div class="tres">\s*(.*?)\s*</div><div.*} $HttpData - TransText] } {
reply -err parse
}
cache put $TransText
}
set TransText [string stripspace [html unspec [html untag $TransText]]]
if { [config get "show.dict"] } { set o1 [cformat main.dict $dictionary($dict)] } { set o1 "" }
reply -uniq main $o1 $TransText
}
namespace eval translate {
variable dictionary
catch { unset dictionary }
array set dictionary {
er {Англо-Русский}
re {Русско-Английский}
gr {Немецко-Русский}
rg {Русско-Немецкий}
fr {Французско-Русский}
rf {Русско-Французский}
sr {Испанско-Русский}
rs {Русско-Испанский}
ir {Итальянско-Русский}
}
# eg {Англо-Немецкий}
# ge {Немецко-Английский}
# es {Англо-Испанский}
# se {Испанско-Английский}
# ef {Англо-Французский}
# fe {Французско-Английский}
# ep {Англо-Португальский}
# pe {Португальско-Английский}
# fg {Французско-Немецкий}
# gf {Немецко-Французский}
# fs {Французско-Испанский}
# sf {Испанско-Французский}
# gs {Немецко-Испанский}
# sg {Испанско-Немецкий}
# ie {Итальянско-Английский}
}