It uses Google Translator, which requires a connection to the internet to be established.
Please let me know how I can improve my code. I tried to make it as neat and readable as possible.
Here is the procedure with a working example(and a simpler one commented out):
Code: Select all
;{ -- Language Constants, added for completeness
#Afrikaans = "af" : #Albanian = "sq"
#Arabic = "ar" : #Armenian = "hy"
#Azerbaijani = "az" : #Basque = "eu"
#Belarusian = "be" : #Bulbarian = "bg"
#Catalan = "ca" : #Chinese = "zh"
#Croatian = "hr" : #Czech = "cs"
#Danish = "da" : #Dutch = "nl"
#English = "en" : #Estonian = "et"
#Finnish = "fi" : #French = "fr"
#Galician = "gl" : #Georgian = "ka"
#German = "de" : #Greek = "el"
#HaitianCreole = "ht" : #Hebrew = "he"
#Hindi = "hi" : #Hungarian = "hu"
#Icelandic = "is" : #Indonesian = "id"
#Irish = "ga" : #Italian = "it"
#Japanese = "ja" : #Korean = "ko"
#Latin = "la" : #Latvian = "lv"
#Lithuanian = "lt" : #Macedonian = "mk"
#Malay = "ms" : #Maltese = "mt"
#Norwegian = "no" : #Persian = "fa"
#Polish = "pl" : #Portuguese = "pt"
#Romanian = "ro" : #Russian = "ru"
#Serbian = "sr" : #Slovak = "sk"
#Spanish = "es" : #Swahili = "sw"
#Swedish = "sv" : #Thai = "th"
#Turkish = "tr" : #Ukrainian = "uk"
#Urdu = "ur" : #Vietnamese = "vi"
#Welsh = "cy" : #Yiddish = "yi"
;#Filipino = "" : #Slovenian = "" ; <- searched wikipedia for the ISO 639-1 codes but couldn't find them
;}
NewMap Language.s()
Language("Afrikaans") = "af" : Language("Albanian") = "sq"
Language("Arabic") = "ar" : Language("Armenian") = "hy"
Language("Azerbaijani") = "az" : Language("Basque") = "eu"
Language("Belarusian") = "be" : Language("Bulbarian") = "bg"
Language("Catalan") = "ca" : Language("Chinese") = "zh"
Language("Croatian") = "hr" : Language("Czech") = "cs"
Language("Danish") = "da" : Language("Dutch") = "nl"
Language("English") = "en" : Language("Estonian") = "et"
Language("Finnish") = "fi" : Language("French") = "fr"
Language("Galician") = "gl" : Language("Georgian") = "ka"
Language("German") = "de" : Language("Greek") = "el"
Language("HaitianCreole") = "ht" : Language("Hebrew") = "he"
Language("Hindi") = "hi" : Language("Hungarian") = "hu"
Language("Icelandic") = "is" : Language("Indonesian") = "id"
Language("Irish") = "ga" : Language("Italian") = "it"
Language("Japanese") = "ja" : Language("Korean") = "ko"
Language("Latin") = "la" : Language("Latvian") = "lv"
Language("Lithuanian") = "lt" : Language("Macedonian") = "mk"
Language("Malay") = "ms" : Language("Maltese") = "mt"
Language("Norwegian") = "no" : Language("Persian") = "fa"
Language("Polish") = "pl" : Language("Portuguese ") = "pt"
Language("Romanian") = "ro" : Language("Russian") = "ru"
Language("Serbian") = "sr" : Language("Slovak") = "sk"
Language("Spanish") = "es" : Language("Swahili") = "sw"
Language("Swedish") = "sv" : Language("Thai") = "th"
Language("Turkish") = "tr" : Language("Ukrainian") = "uk"
Language("Urdu") = "ur" : Language("Vietnamese ") = "vi"
Language("Welsh") = "cy" : Language("Yiddish") = "yi"
Declare.s TranslateText(string.s, sourceLang.s, targetLang.s)
InitNetwork()
window = OpenWindow(#PB_Any,0,0,400,350,"Google Translator in PB", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
status = CreateStatusBar(#PB_Any, WindowID(window))
AddStatusBarField(WindowWidth(window))
gadgetSend = ButtonGadget(#PB_Any, 335, 305, 60, 23, "Translate")
gadgetTranslate = EditorGadget(#PB_Any, 5, 35, 390, 265,#PB_Editor_ReadOnly)
gadgetInput = StringGadget(#PB_Any, 5, 305, 325, 23, "Enter text you would like to translate!")
gadgetSource = ComboBoxGadget(#PB_Any, 5, 5, 100, 25)
gadgetTarget = ComboBoxGadget(#PB_Any, 140, 5, 100, 25)
TextGadget(#PB_Any, 115, 10, 10, 23, "to")
ForEach Language.s()
AddGadgetItem(gadgetSource, s, MapKey(Language.s()))
AddGadgetItem(gadgetTarget, s, MapKey(Language.s()))
s + 1
Next
SetGadgetState(gadgetSource,6) : SetGadgetState(gadgetTarget,28)
Repeat : Delay(10)
eventID.l = WaitWindowEvent(1)
If eventID.l = #PB_Event_Gadget
ForEach Language()
If GetGadgetText(gadgetSource) = MapKey(Language()) : source.s = Language() : EndIf
If GetGadgetText(gadgetTarget) = MapKey(Language()) : target.s = Language() : EndIf
StatusBarText(status, 0, "Translating " + UCase(source.s) + " to " + UCase(target.s))
Next
Select EventGadget()
Case gadgetSend
AddGadgetItem(gadgetTranslate,#PB_Any,TranslateText(GetGadgetText(gadgetInput), source.s, target.s))
EndSelect
EndIf
Until eventID.l = #PB_Event_CloseWindow
;Debug TranslateText(InputRequester("Translate","Type what you would like to translate!","Hello World!"),#English,#Greek)
Procedure.s TranslateText(string.s, sourceLang.s, targetLang.s)
Static url.s, tempDirectory.s, fileString.s = ""
tempDirectory.s = GetTemporaryDirectory() + "googleapitranslate.txt"
;{ Create URL path based on input
url.s = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0"
url.s + "&q=" + URLEncoder(string.s)
url.s + "&langpair=" + sourceLang.s + "|" + targetLang.s ;}
If ReceiveHTTPFile(url.s, tempDirectory.s) ; Bad parsor below!!!
file = ReadFile(#PB_Any, tempDirectory.s)
fileString.s = ReadString(file);,#PB_UTF8
fileString.s = Mid(fileString.s, FindString(fileString.s,Chr(34)+":"+Chr(34),0)+3)
fileString.s = StringField(fileString.s,1,Chr(34)+"}, "+Chr(34))
CloseFile(file) : DeleteFile(tempDirectory.s)
ProcedureReturn fileString.s
Else : MessageRequester("Error","Unable to receive translation!") : EndIf
EndProcedure