From 93b70ed559a2acb477d036afb6cc0241b923a1bc Mon Sep 17 00:00:00 2001 From: Arya Kiran Date: Sat, 22 Jul 2023 21:11:35 +0530 Subject: [PATCH] add error handling for incorrect to/from --- utils/engines.go | 106 ++++++++++++++++++++++++++++++++++++++- utils/langlist-watson.go | 4 ++ 2 files changed, 109 insertions(+), 1 deletion(-) diff --git a/utils/engines.go b/utils/engines.go index 2e3f198..307123a 100644 --- a/utils/engines.go +++ b/utils/engines.go @@ -7,6 +7,32 @@ import ( ) func TranslateGoogle(to string, from string, text string) string { + // For some reason google uses no for norwegian instead of nb like the rest of the translators. This is for the All function primarily + if to == "nb" { + to = "no" + } else if from == "nb" { + to = "no" + } + var ToValid bool + var FromValid bool + for _, v := range LangListGoogle("sl") { + if v.Id == to { + ToValid = true + } + if v.Id == from { + FromValid = true + } + if FromValid == true && ToValid == true { + break + } + } + if ToValid != true { + return "Target Language Code invalid" + } + if FromValid != true { + return "Source Language Code invalid" + } + UserAgent, ok := os.LookupEnv("SIMPLYTRANSLATE_USER_AGENT") if !ok { UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36" @@ -29,6 +55,25 @@ func TranslateGoogle(to string, from string, text string) string { return answer } func TranslateReverso(to string, from string, query string) string { + var ToValid bool + var FromValid bool + for _, v := range LangListReverso("sl") { + if v.Id == to { + ToValid = true + } + if v.Id == from { + FromValid = true + } + if FromValid == true && ToValid == true { + break + } + } + if ToValid != true { + return "Target Language Code invalid" + } + if FromValid != true { + return "Source Language Code invalid" + } json := []byte(`{ "format": "text", "from": "` + from + `", "to": "` + to + `", "input":"` + query + `", "options": {"sentenceSplitter": false, "origin":"translation.web", contextResults: false, languageDetection: true} }`) reversoOut := PostRequest("https://api.reverso.net/translate/v1/translation", json) gjsonArr := reversoOut.Get("translation").Array() @@ -36,6 +81,25 @@ func TranslateReverso(to string, from string, query string) string { return answer } func TranslateLibreTranslate(to string, from string, query string) string { + var ToValid bool + var FromValid bool + for _, v := range LangListLibreTranslate("sl") { + if v.Id == to { + ToValid = true + } + if v.Id == from { + FromValid = true + } + if FromValid == true && ToValid == true { + break + } + } + if ToValid != true { + return "Target Language Code invalid" + } + if FromValid != true { + return "Source Language Code invalid" + } json := []byte(`{"q":"` + query + `","source":"` + from + `","target":"` + to + `"}`) // TODO: Make it configurable libreTranslateOut := PostRequest("https://translate.argosopentech.com/translate", json) @@ -44,6 +108,25 @@ func TranslateLibreTranslate(to string, from string, query string) string { return answer } func TranslateWatson(to string, from string, query string) string { + var ToValid bool + var FromValid bool + for _, v := range LangListWatson("sl") { + if v.Id == to { + ToValid = true + } + if v.Id == from { + FromValid = true + } + if FromValid == true && ToValid == true { + break + } + } + if ToValid != true { + return "Target Language Code invalid" + } + if FromValid != true { + return "Source Language Code invalid" + } json := []byte(`{"text":"` + query + `","source":"` + from + `","target":"` + to + `"}`) watsonOut := PostRequest("https://www.ibm.com/demos/live/watson-language-translator/api/translate/text", json) gjsonArr := watsonOut.Get("payload.translations.0.translation").Array() @@ -51,6 +134,25 @@ func TranslateWatson(to string, from string, query string) string { return answer } func TranslateYandex(to string, from string, text string) string { + var ToValid bool + var FromValid bool + for _, v := range LangListYandex("sl") { + if v.Id == to { + ToValid = true + } + if v.Id == from { + FromValid = true + } + if FromValid == true && ToValid == true { + break + } + } + if ToValid != true { + return "Target Language Code invalid" + } + if FromValid != true { + return "Source Language Code invalid" + } type Options struct { Translate string `url:"lang"` Text string `url:"text"` @@ -70,5 +172,7 @@ func TranslateAll(to string, from string, query string) string { reverso := TranslateReverso(to, from, query) google := TranslateGoogle(to, from, query) libretranslate := TranslateLibreTranslate(to, from, query) - return "Google: " + google + "\nReverso: " + reverso + "\nLibreTranslate: " + libretranslate + watson := TranslateWatson(to, from, query) + yandex := TranslateYandex(to, from, query) + return "Google: " + google + "\nReverso: " + reverso + "\nLibreTranslate: " + libretranslate + "\nWatson: "+ watson + "\nYandex: "+ yandex } diff --git a/utils/langlist-watson.go b/utils/langlist-watson.go index e346f3b..9394d2b 100644 --- a/utils/langlist-watson.go +++ b/utils/langlist-watson.go @@ -51,6 +51,10 @@ func LangListWatson(listType string) []List { Id: "nl", Name: "Dutch", }, + List{ + Id: "en", + Name: "English", + }, List{ Id: "et", Name: "Estonian",