I needed to check language and translate a lot of texts, so I wrote those 2 procs inspired from [Google AJAX search API] and getting all I needed from http://code.google.com/apis/ajaxlanguage/documentation/reference.html#_intro_fonje%|%official page%|% I'm testing it right now, I made +5000 requests for lang_detect and around 1500 translations in one day, and google let me do ... (500 ms between each lang_detect and 1s between each translation). g_translate { string } return a string of text translated to english or -1 in case of error. lang_detect { string } return the detected language as a 2 chars string and a floating number between 1 and 0 representing confidence. In case of error, langage is "error" and confidence is -1. ---- package require http package require json proc g_translate {to_translate} { set api_key "" set q [::http::formatQuery sig $api_key q $to_translate v 1.0 ] set url "http://ajax.googleapis.com/ajax/services/language/translate?langpair=%7Cen" set t [http::geturl $url -query $q] set translated "" if { [http::ncode $t] == 200 } { set d [http::data $t] set idx 0 while { $idx >= 0 } { set idx [string first {responseData} $d $idx] if { $idx >= 0 } { set jd [json::json2dict [string range $d [expr {$idx-2}] end]] if {[dict get $jd responseData] != "null"} { set translated [dict get $jd responseData translatedText] } incr idx 5 } } } else { set translated -1 puts "Error=[http::error $t]" puts "Status=[http::status $t]" puts "Code=[http::code $t]" puts "Ncode=[http::ncode $t]" puts "Data=[http::data $t]" } http::cleanup $t return $translated } proc lang_detect { to_translate } { set api_key "" set q [::http::formatQuery sig $api_key q $to_translate v 1.0 ] set url "http://ajax.googleapis.com/ajax/services/language/detect?" # works only with GET append url $q set t [http::geturl $url] set translated "" if { [http::ncode $t] == 200 } { set d [http::data $t] set idx 0 while { $idx >= 0 } { set idx [string first {responseData} $d $idx] if { $idx >= 0 } { set jd [json::json2dict [string range $d [expr {$idx-2}] end]] if {[dict get $jd responseData] != "null"} { set lang [dict get $jd responseData language] set conf [dict get $jd responseData confidence] } incr idx 5 } } } else { set lang "error" set conf -1 puts "Error=[http::error $t]" puts "Status=[http::status $t]" puts "Code=[http::code $t]" puts "Ncode=[http::ncode $t]" } http::cleanup $t return "$lang $conf" } ----