From a8831ef2923f2a664a238bf30e5746d18a6f1dd9 Mon Sep 17 00:00:00 2001 From: eeeXun Date: Mon, 17 Oct 2022 16:24:09 +0800 Subject: [PATCH] translator to struct --- main.go | 17 +++++++++++------ translator.go | 43 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/main.go b/main.go index 645f858..4d12040 100644 --- a/main.go +++ b/main.go @@ -6,18 +6,23 @@ import ( ) var ( - app = tview.NewApplication() - source_box = tview.NewInputField() - target_box = tview.NewTextView() + // Translate + translator Translator + // TUI + app = tview.NewApplication() + src_box = tview.NewInputField() + dest_box = tview.NewTextView() ) func main() { - result := Translate("Hello world\nApple", "English", "Chinese (Traditional)") + translator.src_lang = "English" + translator.dest_lang = "Chinese (Traditional)" + result, _ := translator.Translate("Hello world\nApple\nbumper") fmt.Println(result) // if err := app.SetRoot( // tview.NewFlex().SetDirection(tview.FlexRow). - // AddItem(source_box, 0, 1, true). - // AddItem(target_box, 0, 6, false), + // AddItem(src_box, 0, 1, true). + // AddItem(dest_box, 0, 6, false), // true).EnableMouse(true).Run(); err != nil { // panic(err) // } diff --git a/translator.go b/translator.go index 672a958..05e5c39 100644 --- a/translator.go +++ b/translator.go @@ -1,23 +1,54 @@ package main import ( + "encoding/json" + "errors" "fmt" "io/ioutil" "net/http" "net/url" ) -func Translate(message string, source_lang string, target_lang string) string { +const ( + API_URL = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=%s&tl=%s&dt=t&q=%s" +) + +type Translator struct { + src_lang string + dest_lang string +} + +func (t Translator) Translate(message string) (string, error) { + var data []interface{} + var translated string + url_str := fmt.Sprintf( - "https://translate.googleapis.com/translate_a/single?client=gtx&sl=%s&tl=%s&dt=t&q=%s", - Lang[source_lang], - Lang[target_lang], + API_URL, + Lang[t.src_lang], + Lang[t.dest_lang], url.QueryEscape(message), ) res, err := http.Get(url_str) if err != nil { - panic(err) + return err.Error(), err } body, err := ioutil.ReadAll(res.Body) - return string(body[:]) + if err != nil { + return err.Error(), err + } + + err = json.Unmarshal(body, &data) + if err != nil { + return err.Error(), err + } + + if len(data) > 0 { + result := data[0] + for _, lines := range result.([]interface{}) { + translated_line := lines.([]interface{})[0] + translated += fmt.Sprintf("%v", translated_line) + } + return translated, nil + } + return "Translation not found", errors.New("Translation not found") }