From 4b95465cbecc85cbe7dffd13d3542dae8db72718 Mon Sep 17 00:00:00 2001 From: manerakai Date: Thu, 31 Aug 2023 08:28:02 +0000 Subject: [PATCH] Improved code git-svn-id: file:///srv/svn/repo/mai/trunk@20 e410bdd4-646f-c54f-a7ce-fffcc4f439ae --- engines/engine.go | 7 ++++--- engines/google.go | 23 +++++++++++++---------- engines/iciba.go | 11 +++-------- engines/libretranslate.go | 2 ++ engines/reverso.go | 2 ++ web/main.go | 25 ++++++++++++++++++++----- web/views/index.html | 12 +++++++----- 7 files changed, 51 insertions(+), 31 deletions(-) diff --git a/engines/engine.go b/engines/engine.go index 1be4c20..774be15 100644 --- a/engines/engine.go +++ b/engines/engine.go @@ -12,13 +12,14 @@ type Engine interface { TargetLanguages() (Language, error) Translate(text string, from, to string) (TranslationResult, error) DetectLanguage(text string) (string, error) + Tts(text, lang string) (string, error) } type Language map[string]string var Engines = map[string]Engine{ - "google": &GoogleTranslate{}, - "icibia": &ICIBA{}, - "libre": &LibreTranslate{}, + "google": &GoogleTranslate{}, + // "icibia": &ICIBA{}, + // "libre": &LibreTranslate{}, "reverseo": &Reverso{}, } diff --git a/engines/google.go b/engines/google.go index d178f54..a54de5f 100644 --- a/engines/google.go +++ b/engines/google.go @@ -35,7 +35,6 @@ func (_ *GoogleTranslate) getLangs(type_ string) (Language, error) { requestURL.RawQuery = query.Encode() response, err := http.Get(requestURL.String()) - if err != nil { return nil, err } @@ -43,35 +42,27 @@ func (_ *GoogleTranslate) getLangs(type_ string) (Language, error) { defer response.Body.Close() doc, err := goquery.NewDocumentFromReader(response.Body) - if err != nil { return nil, err } - var langs Language + var langs Language = make(Language) doc.Find(".language-item").Each(func(_ int, s *goquery.Selection) { a := s.Find("a").First() href, exists := a.Attr("href") - - // Shouldn't happen, but here goes. if !exists { return } langURL, err := url.Parse(href) - if err != nil { return } langCode := langURL.Query()[langsType][0] - if langCode == "auto" { - return - } - langs[langCode] = a.Text() }) @@ -86,6 +77,18 @@ func (e *GoogleTranslate) TargetLanguages() (Language, error) { return e.getLangs("target") } +func (e *GoogleTranslate) Tts(text, lang string) (string, error) { + requestURL, _ := url.Parse("https://translate.google.com/translate_tts") + + query := url.Values{} + query.Add("tl", lang) + query.Add("q", text) + query.Add("client", "tw-ob") + requestURL.RawQuery = query.Encode() + + return requestURL.String(), nil +} + func (_ *GoogleTranslate) DetectLanguage(text string) (string, error) { return "", nil } func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationResult, error) { diff --git a/engines/iciba.go b/engines/iciba.go index 4a8f1e7..6d09190 100644 --- a/engines/iciba.go +++ b/engines/iciba.go @@ -225,12 +225,7 @@ type icibaTranslateResponse struct { } func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, error) { - requestURL, err := url.Parse("https://ifanyi.iciba.com/index.php") - - if err != nil { - // The URL is constant, so it should never fail. - panic(err) - } + requestURL, _ := url.Parse("https://ifanyi.iciba.com/index.php") query := url.Values{} query.Add("c", "trans") @@ -239,7 +234,6 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro query.Add("auth_user", "key_web_fanyi") sum := md5.Sum([]byte(("6key_web_fanyiifanyiweb8hc9s98e" + text))) - query.Add("sign", hex.EncodeToString(sum[:])[:16]) requestURL.RawQuery = query.Encode() @@ -250,7 +244,6 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro formData.Add("q", text) response, err := http.PostForm(requestURL.String(), formData) - if err != nil { return TranslationResult{}, err } @@ -286,3 +279,5 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro TranslatedText: responseJSON.Content.Out, }, nil } + +func (_ *ICIBA) Tts(text, lang string) (string, error) { return "", nil } diff --git a/engines/libretranslate.go b/engines/libretranslate.go index 564f49f..d4b1a44 100644 --- a/engines/libretranslate.go +++ b/engines/libretranslate.go @@ -63,6 +63,8 @@ func (e *LibreTranslate) SourceLanguages() (Language, error) { return e.getLangs func (e *LibreTranslate) TargetLanguages() (Language, error) { return e.getLangs() } +func (e *LibreTranslate) Tts(text, lang string) (string, error) { return "", nil } + type libreDetectResponse []struct { Confidence float64 `json:"confidence"` LanguageCode string `json:"language"` diff --git a/engines/reverso.go b/engines/reverso.go index e63fb70..090fe2c 100644 --- a/engines/reverso.go +++ b/engines/reverso.go @@ -46,6 +46,8 @@ func (_ *Reverso) SourceLanguages() (Language, error) { return reversoLangs, nil func (_ *Reverso) TargetLanguages() (Language, error) { return reversoLangs, nil } +func (_ *Reverso) Tts(text, lang string) (string, error) { return "", nil } + type reversoAPIResponse struct { LanguageDetection struct { DetectedLanguage string `json:"detectedLanguage"` diff --git a/web/main.go b/web/main.go index 3b1805b..b5cd56b 100644 --- a/web/main.go +++ b/web/main.go @@ -90,8 +90,8 @@ func main() { return c.Render("index", fiber.Map{ "Engine": engine, "enginesNames": enginesNames, - "SourceLanguages": targetLanguages, - "TargetLanguages": sourceLanguages, + "SourceLanguages": sourceLanguages, + "TargetLanguages": targetLanguages, "OriginalText": originalText, "TranslatedText": translatedText, "From": from, @@ -168,9 +168,6 @@ func main() { } lang := c.Query("lang") - if lang == "" { - lang = "en" - } if url, err := engines.Engines[engine].Tts(text, lang); err != nil { return c.SendStatus(500) @@ -188,6 +185,24 @@ func main() { }) + app.Post("/switchlanguages", func(c *fiber.Ctx) error { + if c.Cookies("from") != "" { + fromCookie := new(fiber.Cookie) + fromCookie.Name = "from" + fromCookie.Value = c.Cookies("to") + fromCookie.Expires = time.Now().Add(24 * time.Hour * 365) + + toCookie := new(fiber.Cookie) + toCookie.Name = "to" + toCookie.Value = c.Cookies("from") + toCookie.Expires = time.Now().Add(24 * time.Hour * 365) + + c.Cookie(fromCookie) + c.Cookie(toCookie) + } + return c.Redirect("/") + }) + app.Static("/static", "./static") app.Listen(":3000") diff --git a/web/views/index.html b/web/views/index.html index f667e30..5a15a11 100644 --- a/web/views/index.html +++ b/web/views/index.html @@ -57,19 +57,21 @@
-
- -
+ {{if .TtsFrom}} + + {{end}}
+ {{if .TtsTo}} + {{end}}