Sinsira

  • Increase font size
  • Default font size
  • Decrease font size
Welcome, Guest
Please Login or Register.    Lost Password?

Kabaka's IceChat Translator Script
(1 viewing) (1) Guest
Go to bottomPage: 1
TOPIC: Kabaka's IceChat Translator Script
#6
Kabaka's IceChat Translator Script 7 Months, 2 Weeks ago  
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, "&quot;", """")
        Translation = Replace(Translation, "&amp;", "&")
        Translation = Replace(Translation, "&#39;", "'")

        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.
kabaka
Sector Administrator
Admin
Posts: 91
graphgraph
User Offline Click here to see the profile of this user
ICQ#: 226333053 Gender: Male KabakaLion Personal Web Site kylejohnson@tulsacoxmail.com KabakaDragon thelionking@cox.net KabakaDragon Location: The Internet Birthday: 04/25
The administrator has disabled public write access.
~Kabaka
Sinsira Sector Administrator
 
#47
Re: Kabaka's IceChat Translator Script 7 Months, 2 Weeks ago  
.. WOAH thats alotta stuff.
litefyre
wut?
Posts: 34
graphgraph
User Offline Click here to see the profile of this user
Gender: Male Location: like im telling a website! Birthday: 02/05
The administrator has disabled public write access.
a friend once proposed this to me : " in the middle of a battle, a lowly squier pulled a lance from his chest to save a dying horse. why did he do it? " i answered " because everything matters in the end. "
 
Go to topPage: 1

Sinsira Log-In

You do not have to register! Just use any of your registered IRC nick names and your NickServ password!



English Indonesian

Live IRC Statistics