The response is not coming back in utf-8. This can be corrected by setting ie
and oe
in the query to UTF-8
.
A full working example:
package main
import (
"io/ioutil"
"log"
"net/http"
"net/url"
"strings"
)
func main() {
log.SetFlags(log.Lshortfile)
e2r := Message{
OriginalLang: "en",
Outlanguage: "ru",
Message: "hello",
}
log.Println(translateMessage(e2r))
r2e := Message{
OriginalLang: "ru",
Outlanguage: "en",
Message: "Здравствуйте",
}
log.Println(translateMessage(r2e))
}
type Message struct {
OriginalLang string
Outlanguage string
Message string
}
func translateMessage(msg Message) string {
apiurl := "https://translate.googleapis.com/translate_a/single?client=gtx&sl=" + msg.OriginalLang + "&tl=" + msg.Outlanguage + "&dt=t&ie=UTF-8&oe=UTF-8&q="
escapedMessage := url.QueryEscape(msg.Message)
log.Println("URL:", apiurl+escapedMessage)
resp, err := http.Get(apiurl + escapedMessage)
if err != nil {
panic(err)
}
defer resp.Body.Close()
bytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
content := string(bytes)
log.Println("translation", content)
startIndex := strings.Index(content, "[[[\"")
if startIndex == -1 {
return msg.Message
}
startIndex += 4
endIndex := strings.Index(content, "\",\"")
if startIndex == -1 {
return msg.Message
}
return content[startIndex:endIndex]
}