diff --git a/TODO.md b/TODO.md index 543987d..1240cf7 100644 --- a/TODO.md +++ b/TODO.md @@ -1,7 +1,7 @@ # TODO - Create a web interface - Proper Error handling for requests.go -- Tell which language Detect Language chose +- Tell which language Detect Language chose -- Only support for deepl and google is pending - Finish simplytranslate-py compatible API for translations - Alternative words - Dictionary diff --git a/utils/autodetect.go b/utils/autodetect.go new file mode 100644 index 0000000..142195f --- /dev/null +++ b/utils/autodetect.go @@ -0,0 +1,16 @@ +package utils +func AutoDetectWatson(query string) (string, error) { + json := []byte(`{"text":"` + query + `"}`) + watsonOut := PostRequest("https://www.ibm.com/demos/live/watson-language-translator/api/translate/detect", json) + gjsonArr := watsonOut.Get("payload.languages.0.language.language").Array() + answer := gjsonArr[0].String() + return answer, nil +} + +func AutoDetectLibreTranslate(query string) (string, error) { + json := []byte(`{"q":"` + query + `"}`) + libreTranslateOut := PostRequest("https://translate.argosopentech.com/detect", json) + gjsonArr := libreTranslateOut.Get("0.language").Array() + answer := gjsonArr[0].String() + return answer, nil +} diff --git a/utils/engines.go b/utils/engines.go index 0918b51..679ed1c 100644 --- a/utils/engines.go +++ b/utils/engines.go @@ -136,6 +136,9 @@ func TranslateLibreTranslate(to string, from string, query string) (LangOut, err langout.Engine = "libretranslate" langout.SourceLang = FromOrig langout.TargetLang = ToOrig + if from == "auto" { + langout.AutoDetect, _ = AutoDetectLibreTranslate(query) + } return langout, nil } func TranslateWatson(to string, from string, query string) (LangOut, error) { @@ -160,10 +163,14 @@ func TranslateWatson(to string, from string, query string) (LangOut, error) { if FromValid != true { return LangOut{}, errors.New("Source language code invalid") } + var langout LangOut + if from == "auto" { + langout.AutoDetect, _ = AutoDetectWatson(query) + from = langout.AutoDetect + } 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() - var langout LangOut langout.OutputText = gjsonArr[0].String() langout.Engine = "watson" langout.SourceLang = FromOrig @@ -306,13 +313,22 @@ func TranslateDuckDuckGo(to string, from string, query string) (LangOut, error) if FromValid != true { return LangOut{}, errors.New("Source language code invalid") } - duckDuckGoOut := PostRequest("https://duckduckgo.com/translation.js?vqd=4-80922924764394623683473042291214994119&query=translate&to="+to+"&from="+from, []byte(query)) + var url string + if from == "auto" { + url = "https://duckduckgo.com/translation.js?vqd=4-80922924764394623683473042291214994119&query=translate&to="+to + } else { + url = "https://duckduckgo.com/translation.js?vqd=4-80922924764394623683473042291214994119&query=translate&to="+to+"&from="+from + } + duckDuckGoOut := PostRequest(url, []byte(query)) gjsonArr := duckDuckGoOut.Get("translated").Array() var langout LangOut langout.OutputText = gjsonArr[0].String() langout.Engine = "duckduckgo" langout.SourceLang = FromOrig langout.TargetLang = ToOrig + if from == "auto" { + langout.AutoDetect = duckDuckGoOut.Get("detected_language").String() + } return langout, nil } func TranslateAll(to string, from string, query string) ([]LangOut) { diff --git a/utils/langlist-duckduckgo.go b/utils/langlist-duckduckgo.go index f90552d..5d5ffbb 100644 --- a/utils/langlist-duckduckgo.go +++ b/utils/langlist-duckduckgo.go @@ -517,5 +517,12 @@ func LangListDuckDuckGo(listType string) []List { Name: "Zulu", }, } + if listType == "sl" { + auto := List{ + Id: "auto", + Name: "Detect Language", + } + ListData = append(ListData, auto) + } return ListData } diff --git a/utils/langlist-watson.go b/utils/langlist-watson.go index 9394d2b..45fc913 100644 --- a/utils/langlist-watson.go +++ b/utils/langlist-watson.go @@ -232,5 +232,12 @@ func LangListWatson(listType string) []List { Name: "Welsh", }, } + if listType == "sl" { + auto := List{ + Id: "auto", + Name: "Detect Language", + } + ListData = append(ListData, auto) + } return ListData }