feat: translator
This commit is contained in:
55
translator/google/v1.go
Normal file
55
translator/google/v1.go
Normal file
@@ -0,0 +1,55 @@
|
||||
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), `<title>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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user