package google import ( "encoding/json" "errors" "fmt" "io" "net/http" "strings" ) func (t *Translator) TranslateV1(source, sourceLang, targetLang string) (string, error) { var text []string var result []interface{} encodedSource := encodeURI(source) uri := "https://translate.googleapis.com/translate_a/single?client=gtx&sl=" + sourceLang + "&tl=" + targetLang + "&dt=t&q=" + encodedSource r, err := http.Get(uri) if err != nil { return "err", errors.New("error getting translate.googleapis.com") } defer r.Body.Close() body, err := io.ReadAll(r.Body) if err != nil { return "err", errors.New("error reading response body") } bReq := strings.Contains(string(body), `Error 400 (Bad Request)`) if bReq { return "err", errors.New("error 400 (Bad Request)") } err = json.Unmarshal(body, &result) if err != nil { return "err", errors.New("error unmarshalling data") } if len(result) > 0 { inner := result[0] for _, slice := range inner.([]interface{}) { for _, translatedText := range slice.([]interface{}) { text = append(text, fmt.Sprintf("%v", translatedText)) break } } cText := strings.Join(text, "") return cText, nil } else { return "err", errors.New("no translated data in response") } }