This isn't perfect. It was written as a page scraper for the old Google Translate page, but now they have an awesome API. Unfortunately, I'm too lazy to code this to read from the API the right way. Additionally, several subroutine names are still for the old thing, and don't make any sense now.
Either way, it still does work. Follow my instructions
exactly and it will work on the latest stable version of IceChat (7 or 9 beta).
Press CTRL-S in IceChat. Paste this into the
Alias Editor and hit save:
| Code: |
/trans /! DoTranslate $1-
/rtrans /! DoReverseTranslate $1-
|
Click on the
Popup Menu Editor tab, then select
Channel from the Popup Type menu. Paste this at the end (leave what's there!):
| Code: |
Translation
.Afrikaans (af):/! SetTargetLanguage # af
.Albanian (sq):/! SetTargetLanguage # sq
.Arabic (ar):/! SetTargetLanguage # ar
.Belarusian (be):/! SetTargetLanguage # be
.Bulgarian (bg):/! SetTargetLanguage # bg
.Catalan (ca):/! SetTargetLanguage # ca
.Chinese (zh-CN):/! SetTargetLanguage # zh-CN
.Croatian (hr):/! SetTargetLanguage # hr
.Czech (cs):/! SetTargetLanguage # cs
.Danish (da):/! SetTargetLanguage # da
.Dutch (nl):/! SetTargetLanguage # nl
.English (en):/! SetTargetLanguage # en
.Estonian (et):/! SetTargetLanguage # et
.Filipino (tl):/! SetTargetLanguage # tl
.Finnish (fi):/! SetTargetLanguage # fi
.French (fr):/! SetTargetLanguage # fr
.Galician (gl):/! SetTargetLanguage # gl
.German (de):/! SetTargetLanguage # de
.Greek (el):/! SetTargetLanguage # el
.Hebrew (iw):/! SetTargetLanguage # iw
.Hindi (hi):/! SetTargetLanguage # hi
.Hungarian (hu):/! SetTargetLanguage # hu
.Icelandic (is):/! SetTargetLanguage # is
.Indonesian (id):/! SetTargetLanguage # id
.Irish (ga):/! SetTargetLanguage # ga
.Italian (it):/! SetTargetLanguage # it
.Japanese (ja):/! SetTargetLanguage # ja
.Korean (ko):/! SetTargetLanguage # ko
.Latvian (lv):/! SetTargetLanguage # lv
.Lituanian (lt):/! SetTargetLanguage # lt
.Macedonian (mk):/! SetTargetLanguage # mk
.Malay (ms):/! SetTargetLanguage # ms
.Maltese (mt):/! SetTargetLanguage # mt
.Norwegian (no):/! SetTargetLanguage # no
.Persian (fa):/! SetTargetLanguage # fa
.Polish (pl):/! SetTargetLanguage # pl
.Portuguese (pt):/! SetTargetLanguage # pt
.Romanian (ro):/! SetTargetLanguage # ro
.Russian (ru):/! SetTargetLanguage # ru
.Serbian (sr):/! SetTargetLanguage # sr
.Slovak (sk):/! SetTargetLanguage # sk
.Slovenian (sl):/! SetTargetLanguage # sl
.Spanish (es):/! SetTargetLanguage # es
.Swahili (sw):/! SetTargetLanguage # sw
.Swedish (sv):/! SetTargetLanguage # sv
.Thai (th):/! SetTargetLanguage # th
.Turkish (tr):/! SetTargetLanguage # tr
.Ukrainian (uk):/! SetTargetLanguage # uk
.Vietnamese (vi):/! SetTargetLanguage # vi
.Welsh (cy):/! SetTargetLanguage # cy
.Yiddish (yi):/! SetTargetLanguage # yi
|
Hit save! Now select
Query from that Popup Type menu and paste this at the end:
| Code: |
Translation
.Afrikaans (af):/! SetTargetLanguage $nick af
.Albanian (sq):/! SetTargetLanguage $nick sq
.Arabic (ar):/! SetTargetLanguage $nick ar
.Belarusian (be):/! SetTargetLanguage $nick be
.Bulgarian (bg):/! SetTargetLanguage $nick bg
.Catalan (ca):/! SetTargetLanguage $nick ca
.Chinese (zh-CN):/! SetTargetLanguage $nick zh-CN
.Croatian (hr):/! SetTargetLanguage $nick hr
.Czech (cs):/! SetTargetLanguage $nick cs
.Danish (da):/! SetTargetLanguage $nick da
.Dutch (nl):/! SetTargetLanguage $nick nl
.English (en):/! SetTargetLanguage $nick en
.Estonian (et):/! SetTargetLanguage $nick et
.Filipino (tl):/! SetTargetLanguage $nick tl
.Finnish (fi):/! SetTargetLanguage $nick fi
.French (fr):/! SetTargetLanguage $nick fr
.Galician (gl):/! SetTargetLanguage $nick gl
.German (de):/! SetTargetLanguage $nick de
.Greek (el):/! SetTargetLanguage $nick el
.Hebrew (iw):/! SetTargetLanguage $nick iw
.Hindi (hi):/! SetTargetLanguage $nick hi
.Hungarian (hu):/! SetTargetLanguage $nick hu
.Icelandic (is):/! SetTargetLanguage $nick is
.Indonesian (id):/! SetTargetLanguage $nick id
.Irish (ga):/! SetTargetLanguage $nick ga
.Italian (it):/! SetTargetLanguage $nick it
.Japanese (ja):/! SetTargetLanguage $nick ja
.Korean (ko):/! SetTargetLanguage $nick ko
.Latvian (lv):/! SetTargetLanguage $nick lv
.Lituanian (lt):/! SetTargetLanguage $nick lt
.Macedonian (mk):/! SetTargetLanguage $nick mk
.Malay (ms):/! SetTargetLanguage $nick ms
.Maltese (mt):/! SetTargetLanguage $nick mt
.Norwegian (no):/! SetTargetLanguage $nick no
.Persian (fa):/! SetTargetLanguage $nick fa
.Polish (pl):/! SetTargetLanguage $nick pl
.Portuguese (pt):/! SetTargetLanguage $nick pt
.Romanian (ro):/! SetTargetLanguage $nick ro
.Russian (ru):/! SetTargetLanguage $nick ru
.Serbian (sr):/! SetTargetLanguage $nick sr
.Slovak (sk):/! SetTargetLanguage $nick sk
.Slovenian (sl):/! SetTargetLanguage $nick sl
.Spanish (es):/! SetTargetLanguage $nick es
.Swahili (sw):/! SetTargetLanguage $nick sw
.Swedish (sv):/! SetTargetLanguage $nick sv
.Thai (th):/! SetTargetLanguage $nick th
.Turkish (tr):/! SetTargetLanguage $nick tr
.Ukrainian (uk):/! SetTargetLanguage $nick uk
.Vietnamese (vi):/! SetTargetLanguage $nick vi
.Welsh (cy):/! SetTargetLanguage $nick cy
.Yiddish (yi):/! SetTargetLanguage $nick yi
|
Hit save again (don't forget this!).
Now click on
Script Editor. If the window is empty, paste the text below. If not, click File -> New and paste it into the newly blank window.
| Code: |
Dim http, BaseURL, CurrentLocal, CurrentSent, ConfigFile, LastDestination, LastServer
BaseURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=%LANGPAIR%&q="
'BaseURL = "http://translate.google.com/translate_t?langpair=%LANGPAIR%&text="
CurrentLocal = "en"
ConfigFile = "translator.ini"
Sub ONQUERY(Message,Nickname,Host,ServerNumber)
TargetLanguage = GetTargetLanguage(Nickname)
If Not TargetLanguage = CurrentLocal Then
LastDestination = Nickname
LastServer = ServerNumber
DoReverseTranslate Message, TargetLanguage
End If
End Sub
Sub ONQUERYACTION(Message,Nickname,Host,ServerNumber)
TargetLanguage = GetTargetLanguage(Nickname)
If Not TargetLanguage = CurrentLocal Then
LastDestination = Nickname
LastServer = ServerNumber
DoReverseTranslate Message, TargetLanguage
End If
End Sub
Sub ONTEXT(Message,Channel,Nickname,Host,ServerNumber)
TargetLanguage = GetTargetLanguage(Channel)
If Not TargetLanguage = CurrentLocal Then
LastDestination = Channel
LastServer = ServerNumber
DoReverseTranslate Message, TargetLanguage
End If
End Sub
Sub ONACTION(Message,Channel,Nickname,Host,ServerNumber)
TargetLanguage = GetTargetLanguage(Channel)
If Not TargetLanguage = CurrentLocal Then
LastDestination = Channel
LastServer = ServerNumber
DoReverseTranslate Message, TargetLanguage
End If
End Sub
Function OUTTEXT(OutgoingText)
Target = GetIdentifier("$active")
TargetLanguage = GetTargetLanguage(Target)
If Not TargetLanguage = CurrentLocal And Not Left(OutgoingText, 1) = "/" Then
DoTranslate OutgoingText, TargetLanguage
Else
OUTTEXT = OutgoingText
End If
End Function
Sub DoTranslate(text, language)
URL = Replace(BaseURL, "%LANGPAIR%", CurrentLocal & "|" & language) & RemoveCodes(text)
'SendCommand "/echo -a ->> " & URL
Set http = CreateObject("Microsoft.XmlHttp")
http.onreadystatechange = getRef("HandleTranslation")
http.open "GET", URL, True
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.send ""
End Sub
Sub HandleTranslation
If http.readystate = 4 Then
response = http.responsetext
set http = nothing
Translation = GetTranslationText(response)
If Len(Translation) > 500 Then Translation = GetTranslationTextRTL(response)
Translation = Replace(Translation, "\u0026", "&")
Translation = Replace(Translation, """, """")
Translation = Replace(Translation, "&", "&")
Translation = Replace(Translation, "'", "'")
If Len(Translation) < 500 Then
SendCommand "/say " & Translation
Else
SendCommand "/echo -a ->> " & Translation
SendCommand "/echo -a ->> Translation too large"
End If
End if
End Sub
Sub CallReverseTranslate(text, language)
LastDestination = GetIdentifier("$active")
DoReverseTranslate text, language
End Sub
Sub DoReverseTranslate(text, language)
URL = Replace(BaseURL, "%LANGPAIR%", language & "|" & CurrentLocal) & RemoveCodes(text)
'SendCommand "/echo -a ->> " & URL
Set http = CreateObject("Microsoft.XmlHttp")
http.onreadystatechange = getRef("HandleReverseTranslation")
http.open "GET", URL, True
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.send ""
End Sub
Sub HandleReverseTranslation
If http.readystate = 4 Then
response = http.responsetext
set http = nothing
Translation = GetTranslationText(response)
Translation = Replace(Translation, "\u0026", "&")
Translation = Replace(Translation, """, """")
Translation = Replace(Translation, "&", "&")
Translation = Replace(Translation, "'", "'")
Echo " ->> [Translation] " & Translation, LastDestination, LastServer
End if
End Sub
Function GetTranslationText(XMLString)
StartPos = InStr(XMLString, """translatedText"":""") + Len("""translatedText"":""")
XMLString = Mid(XMLString, StartPos)
EndPos = InStr(XMLString, """}, ""responseDetails") - 1
GetTranslationText = Left(XMLString, EndPos)
End Function
Function GetTranslationTextRTL(XMLString)
StartPos = InStr(XMLString, "<div id=result_box dir=""rtl"">") + Len("<div id=result_box dir=""rtl"">")
XMLString = Mid(XMLString, StartPos)
EndPos = InStr(XMLString, "</div>") - 1
GetTranslationTextRTL = Left(XMLString, EndPos)
End Function
Function GetTargetLanguage(Target)
GetTargetLanguage = GetIniFile(ConfigFile,"TargetLanguages",Target,"en")
End Function
Function SetTargetLanguage(SetString)
SetArr = Split(SetString)
SendCommand "/echo -a ->> " & SetArr(0) & " is now set to use: " & SetArr(1)
WriteIniFile ConfigFile, "TargetLanguages", SetArr(0), SetArr(1)
End Function
|
Click File -> Save As... and save it as translator.ice. DO NOT SAVE IT AS A .ICS FILE -- IT WILL NOT WORK AT ALL.
That's it! Now you can right-click any channel or query window and select the language from the pop-up menu.
IceChat does have the unusual scripting limitation that echoed lines cannot be sent to a query tab by name, but they can be sent to a channel. This means that if you are translating a query but the active tab is something else, the translation will appear there instead of the query. I can't do anything about this.
The two aliases we added are for translating and reverse-translating. Using them is a little complicated, but here's how it goes:
To translate a single line of text, type
/trans This is the text to translate | language-code. Replace the language-code part with whatever short two-letter (sometimes more) code appears next to the language you want in the translation pop-up menu. For instance, you could use
id for Indonesian.
For reverse translation, use the same syntax, but replace /trans with /rtrans. The language you specify at the end is the language of the text which you are translating.
The | thing is made by holding SHIFT and pressing that \ key above Enter/Return.
If you've got any questions, post 'em here. If I make any changes or updates, they'll appear in this original post.