Google translate api issue [SOLVED]

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]
}
1 Like