update deps, make engine code into a lib
All checks were successful
mozhi pipeline / Push Docker image to Codeberg docker registry (push) Successful in 3m54s
mozhi pipeline / Build and publish artifacts (push) Successful in 13m27s

This commit is contained in:
2023-09-09 20:03:14 +05:30
parent 662192ab41
commit 566eb69743
28 changed files with 91 additions and 3537 deletions

View File

@@ -1,19 +0,0 @@
package utils
import "os"
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(os.Getenv("MOZHI_LIBRETRANSLATE_URL")+"/detect", json)
gjsonArr := libreTranslateOut.Get("0.language").Array()
answer := gjsonArr[0].String()
return answer, nil
}

View File

@@ -1,383 +0,0 @@
package utils
import (
"errors"
"io"
"net/http"
"os"
"regexp"
"strings"
"github.com/OwO-Network/gdeeplx"
"github.com/gocolly/colly"
"github.com/google/go-querystring/query"
"github.com/google/uuid"
)
var ddgVqd string
func TranslateGoogle(to string, from string, text string) (LangOut, error) {
ToOrig := to
FromOrig := from
// 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 LangOut{}, errors.New("Target Language Code invalid")
}
if FromValid != true {
return LangOut{}, errors.New("Source language code invalid")
}
UserAgent, ok := os.LookupEnv("MOZHI_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"
}
sc := colly.NewCollector(colly.AllowedDomains("translate.google.com"), colly.UserAgent(UserAgent))
var answer string
sc.OnHTML("div.result-container", func(e *colly.HTMLElement) {
answer = e.Text
})
type Options struct {
To string `url:"tl"`
UI string `url:"hl"`
From string `url:"sl"`
Text string `url:"q"`
}
opt := Options{to, to, from, text}
v, _ := query.Values(opt)
url := "https://translate.google.com/m?" + v.Encode()
sc.Visit(url)
var langout LangOut
langout.OutputText = answer
langout.Engine = "google"
langout.SourceLang = FromOrig
langout.TargetLang = ToOrig
return langout, nil
}
func TranslateReverso(to string, from string, query string) (LangOut, error) {
ToOrig := to
FromOrig := from
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 LangOut{}, errors.New("Target language code invalid")
}
if FromValid != true {
return LangOut{}, errors.New("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()
var langout LangOut
langout.OutputText = gjsonArr[0].String()
langout.Engine = "reverso"
langout.SourceLang = FromOrig
langout.TargetLang = ToOrig
return langout, nil
}
func TranslateLibreTranslate(to string, from string, query string) (LangOut, error) {
ToOrig := to
FromOrig := from
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 LangOut{}, errors.New("Target language code invalid")
}
if FromValid != true {
return LangOut{}, errors.New("Source language code invalid")
}
json := []byte(`{"q":"` + query + `","source":"` + from + `","target":"` + to + `"}`)
// TODO: Make it configurable
libreTranslateOut := PostRequest(os.Getenv("MOZHI_LIBRETRANSLATE_URL")+"/translate", json)
gjsonArr := libreTranslateOut.Get("translatedText").Array()
var langout LangOut
langout.OutputText = gjsonArr[0].String()
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) {
FromOrig := from
ToOrig := to
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 LangOut{}, errors.New("Target language code invalid")
}
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()
langout.OutputText = gjsonArr[0].String()
langout.Engine = "watson"
langout.SourceLang = FromOrig
langout.TargetLang = ToOrig
return langout, nil
}
func TranslateMyMemory(to string, from string, text string) (LangOut, error) {
FromOrig := from
ToOrig := to
var ToValid bool
var FromValid bool
for _, v := range LangListMyMemory("sl") {
if v.Id == to {
ToValid = true
}
if v.Id == from {
FromValid = true
}
if FromValid == true && ToValid == true {
break
}
}
if ToValid != true {
return LangOut{}, errors.New("Target language code invalid")
}
if FromValid != true {
return LangOut{}, errors.New("Source language code invalid")
}
type Options struct {
Translate string `url:"langpair"`
Text string `url:"q"`
}
opt := Options{from + "|" + to, text}
v, _ := query.Values(opt)
myMemoryOut := GetRequest("https://api.mymemory.translated.net/get?" + v.Encode())
gjsonArr := myMemoryOut.Get("responseData.translatedText").Array()
var langout LangOut
langout.OutputText = gjsonArr[0].String()
langout.Engine = "mymemory"
langout.SourceLang = FromOrig
langout.TargetLang = ToOrig
return langout, nil
}
func TranslateYandex(to string, from string, text string) (LangOut, error) {
FromOrig := from
ToOrig := to
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 LangOut{}, errors.New("Target language code invalid")
}
if FromValid != true {
return LangOut{}, errors.New("Source language code invalid")
}
type Options struct {
Translate string `url:"lang"`
Text string `url:"text"`
Srv string `url:"srv"`
Id string `url:"sid"`
}
uuidWithHyphen := uuid.New()
uuid := strings.Replace(uuidWithHyphen.String(), "-", "", -1)
opt := Options{from + "-" + to, text, "android", uuid + "-0-0"}
v, _ := query.Values(opt)
yandexOut := PostRequest("https://translate.yandex.net/api/v1/tr.json/translate?"+v.Encode(), []byte(""))
gjsonArr := yandexOut.Get("text.0").Array()
var langout LangOut
langout.OutputText = gjsonArr[0].String()
langout.Engine = "yandex"
langout.SourceLang = FromOrig
langout.TargetLang = ToOrig
return langout, nil
}
func TranslateDeepl(to string, from string, text string) (LangOut, error) {
FromOrig := from
ToOrig := to
var ToValid bool
var FromValid bool
for _, v := range LangListDeepl("sl") {
if v.Id == to {
ToValid = true
}
if v.Id == from {
FromValid = true
}
if FromValid == true && ToValid == true {
break
}
}
if ToValid != true {
return LangOut{}, errors.New("Target language code invalid")
}
if FromValid != true {
return LangOut{}, errors.New("Source language code invalid")
}
answer, err := gdeeplx.Translate(text, from, to, 0)
if err != nil {
return LangOut{}, errors.New("failed")
}
answer1 := answer.(map[string]interface{})
ans := answer1["data"].(string)
var langout LangOut
langout.OutputText = ans
langout.Engine = "deepl"
if from == "auto" {
langout.AutoDetect = strings.ToLower(answer1["detected_lang"].(string))
}
langout.SourceLang = FromOrig
langout.TargetLang = ToOrig
return langout, nil
}
func ddgVqdUpdate() {
r, err := http.NewRequest("GET", "https://duckduckgo.com/?q=translate", nil)
if err != nil {
panic(err)
}
UserAgent, ok := os.LookupEnv("MOZHI_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"
}
r.Header.Set("User-Agent", UserAgent)
client := &http.Client{}
res, err := client.Do(r)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
re := regexp.MustCompile(`vqd="([^"]*)"`)
match := re.FindStringSubmatch(string(body))
ddgVqd = match[1]
}
func TranslateDuckDuckGo(to string, from string, query string) (LangOut, error) {
FromOrig := from
ToOrig := to
var ToValid bool
var FromValid bool
for _, v := range LangListDuckDuckGo("sl") {
if v.Id == to {
ToValid = true
}
if v.Id == from {
FromValid = true
}
if FromValid == true && ToValid == true {
break
}
}
if ToValid != true {
return LangOut{}, errors.New("Target language code invalid")
}
if FromValid != true {
return LangOut{}, errors.New("Source language code invalid")
}
var url string
var langout LangOut
ddgVqdUpdate()
if from == "auto" {
url = "https://duckduckgo.com/translation.js?vqd=" + ddgVqd + "&query=translate&to=" + to
} else {
url = "https://duckduckgo.com/translation.js?vqd=" + ddgVqd + "&query=translate&to=" + to + "&from=" + from
}
duckDuckGoOut := PostRequest(url, []byte(query))
gjsonArr := duckDuckGoOut.Get("translated").Array()
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 {
engines := []string{"reverso", "google", "libre", "watson", "mymemory", "yandex", "deepl", "duckduckgo"}
langout := []LangOut{}
for i := 0; i < len(engines); i++ {
data, err := Translate(engines[i], to, from, query)
if err == nil {
langout = append(langout, data)
}
}
return langout
}

View File

@@ -1,135 +0,0 @@
package utils
func LangListDeepl(listType string) []List {
// IDs got from deepl.com/translator
// Every time you change language, the # will get updated with the lang code.
ListData := []List{
{
Id: "bg",
Name: "Bulgarian",
},
{
Id: "zh",
Name: "Chinese (Simplified)",
},
{
Id: "cs",
Name: "Czech",
},
{
Id: "da",
Name: "Danish",
},
{
Id: "nl",
Name: "Dutch",
},
{
Id: "en",
Name: "English",
},
{
Id: "et",
Name: "Estonian",
},
{
Id: "fi",
Name: "Finnish",
},
{
Id: "fr",
Name: "French",
},
{
Id: "de",
Name: "Germany",
},
{
Id: "el",
Name: "Greek",
},
{
Id: "hu",
Name: "Hungarian",
},
{
Id: "id",
Name: "Indonesian",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "lv",
Name: "Latvian",
},
{
Id: "lt",
Name: "Lithuanian",
},
{
Id: "nb",
Name: "Norwegian",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt",
Name: "Portugese",
},
{
Id: "ro",
Name: "Romanian",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "sk",
Name: "Slovak",
},
{
Id: "sl",
Name: "Slovenian",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "sv",
Name: "Swedish",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "uk",
Name: "Ukrainian",
},
}
var ListD []List
if listType == "sl" {
auto := []List{{
Id: "auto",
Name: "Detect Language",
}}
ListD = append(append([]List{}, auto...), ListData...)
} else {
ListD = ListData
}
return ListD
}

View File

@@ -1,531 +0,0 @@
package utils
func LangListDuckDuckGo(listType string) []List {
// DuckDuckGo is just Bing translate but easier to scrape :)
// Converted json of https://github.com/plainheart/bing-translate-api/blob/master/src/lang.json to this format
ListData := []List{
{
Id: "af",
Name: "Afrikaans",
},
{
Id: "sq",
Name: "Albanian",
},
{
Id: "am",
Name: "Amharic",
},
{
Id: "ar",
Name: "Arabic",
},
{
Id: "hy",
Name: "Armenian",
},
{
Id: "as",
Name: "Assamese",
},
{
Id: "az",
Name: "Azerbaijani",
},
{
Id: "bn",
Name: "Bangla",
},
{
Id: "ba",
Name: "Bashkir",
},
{
Id: "eu",
Name: "Basque",
},
{
Id: "bs",
Name: "Bosnian",
},
{
Id: "bg",
Name: "Bulgarian",
},
{
Id: "yue",
Name: "Cantonese (Traditional)",
},
{
Id: "ca",
Name: "Catalan",
},
{
Id: "lzh",
Name: "Chinese (Literary)",
},
{
Id: "zh-Hans",
Name: "Chinese Simplified",
},
{
Id: "zh-Hant",
Name: "Chinese Traditional",
},
{
Id: "hr",
Name: "Croatian",
},
{
Id: "cs",
Name: "Czech",
},
{
Id: "da",
Name: "Danish",
},
{
Id: "prs",
Name: "Dari",
},
{
Id: "dv",
Name: "Divehi",
},
{
Id: "nl",
Name: "Dutch",
},
{
Id: "en",
Name: "English",
},
{
Id: "et",
Name: "Estonian",
},
{
Id: "fo",
Name: "Faroese",
},
{
Id: "fj",
Name: "Fijian",
},
{
Id: "fil",
Name: "Filipino",
},
{
Id: "fi",
Name: "Finnish",
},
{
Id: "fr",
Name: "French",
},
{
Id: "fr-CA",
Name: "French (Canada)",
},
{
Id: "gl",
Name: "Galician",
},
{
Id: "lug",
Name: "Ganda",
},
{
Id: "ka",
Name: "Georgian",
},
{
Id: "de",
Name: "German",
},
{
Id: "el",
Name: "Greek",
},
{
Id: "gu",
Name: "Gujarati",
},
{
Id: "ht",
Name: "Haitian Creole",
},
{
Id: "ha",
Name: "Hausa",
},
{
Id: "he",
Name: "Hebrew",
},
{
Id: "hi",
Name: "Hindi",
},
{
Id: "mww",
Name: "Hmong Daw",
},
{
Id: "hu",
Name: "Hungarian",
},
{
Id: "is",
Name: "Icelandic",
},
{
Id: "ig",
Name: "Igbo",
},
{
Id: "id",
Name: "Indonesian",
},
{
Id: "ikt",
Name: "Inuinnaqtun",
},
{
Id: "iu",
Name: "Inuktitut",
},
{
Id: "iu-Latn",
Name: "Inuktitut (Latin)",
},
{
Id: "ga",
Name: "Irish",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "kn",
Name: "Kannada",
},
{
Id: "kk",
Name: "Kazakh",
},
{
Id: "km",
Name: "Khmer",
},
{
Id: "rw",
Name: "Kinyarwanda",
},
{
Id: "tlh-Latn",
Name: "Klingon (Latin)",
},
{
Id: "gom",
Name: "Konkani",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "ku",
Name: "Kurdish (Central)",
},
{
Id: "kmr",
Name: "Kurdish (Northern)",
},
{
Id: "ky",
Name: "Kyrgyz",
},
{
Id: "lo",
Name: "Lao",
},
{
Id: "lv",
Name: "Latvian",
},
{
Id: "ln",
Name: "Lingala",
},
{
Id: "lt",
Name: "Lithuanian",
},
{
Id: "dsb",
Name: "Lower Sorbian",
},
{
Id: "mk",
Name: "Macedonian",
},
{
Id: "mai",
Name: "Maithili",
},
{
Id: "mg",
Name: "Malagasy",
},
{
Id: "ms",
Name: "Malay",
},
{
Id: "ml",
Name: "Malayalam",
},
{
Id: "mt",
Name: "Maltese",
},
{
Id: "mr",
Name: "Marathi",
},
{
Id: "mn-Cyrl",
Name: "Mongolian (Cyrillic)",
},
{
Id: "mn-Mong",
Name: "Mongolian (Traditional)",
},
{
Id: "my",
Name: "Myanmar (Burmese)",
},
{
Id: "mi",
Name: "Māori",
},
{
Id: "ne",
Name: "Nepali",
},
{
Id: "nb",
Name: "Norwegian",
},
{
Id: "nya",
Name: "Nyanja",
},
{
Id: "or",
Name: "Odia",
},
{
Id: "ps",
Name: "Pashto",
},
{
Id: "fa",
Name: "Persian",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt",
Name: "Portuguese (Brazil)",
},
{
Id: "pt-PT",
Name: "Portuguese (Portugal)",
},
{
Id: "pa",
Name: "Punjabi",
},
{
Id: "otq",
Name: "Querétaro Otomi",
},
{
Id: "ro",
Name: "Romanian",
},
{
Id: "run",
Name: "Rundi",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "sm",
Name: "Samoan",
},
{
Id: "sr-Cyrl",
Name: "Serbian (Cyrillic)",
},
{
Id: "sr-Latn",
Name: "Serbian (Latin)",
},
{
Id: "st",
Name: "Sesotho",
},
{
Id: "nso",
Name: "Sesotho sa Leboa",
},
{
Id: "tn",
Name: "Setswana",
},
{
Id: "sn",
Name: "Shona",
},
{
Id: "sd",
Name: "Sindhi",
},
{
Id: "si",
Name: "Sinhala",
},
{
Id: "sk",
Name: "Slovak",
},
{
Id: "sl",
Name: "Slovenian",
},
{
Id: "so",
Name: "Somali",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "sw",
Name: "Swahili",
},
{
Id: "sv",
Name: "Swedish",
},
{
Id: "ty",
Name: "Tahitian",
},
{
Id: "ta",
Name: "Tamil",
},
{
Id: "tt",
Name: "Tatar",
},
{
Id: "te",
Name: "Telugu",
},
{
Id: "th",
Name: "Thai",
},
{
Id: "bo",
Name: "Tibetan",
},
{
Id: "ti",
Name: "Tigrinya",
},
{
Id: "to",
Name: "Tongan",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "tk",
Name: "Turkmen",
},
{
Id: "uk",
Name: "Ukrainian",
},
{
Id: "hsb",
Name: "Upper Sorbian",
},
{
Id: "ur",
Name: "Urdu",
},
{
Id: "ug",
Name: "Uyghur",
},
{
Id: "uz",
Name: "Uzbek (Latin)",
},
{
Id: "vi",
Name: "Vietnamese",
},
{
Id: "cy",
Name: "Welsh",
},
{
Id: "xh",
Name: "Xhosa",
},
{
Id: "yo",
Name: "Yoruba",
},
{
Id: "yua",
Name: "Yucatec Maya",
},
{
Id: "zu",
Name: "Zulu",
},
}
var ListD []List
if listType == "sl" {
auto := []List{{
Id: "auto",
Name: "Detect Language",
}}
ListD = append(append([]List{}, auto...), ListData...)
} else {
ListD = ListData
}
return ListD
}

View File

@@ -1,550 +0,0 @@
package utils
func LangListGoogle(listType string) []List {
// IDs got from original simplytranslate-web and trial and error. Usually first three letters of language.
ListData := []List{
{
Id: "af",
Name: "Afrikaans",
},
{
Id: "sq",
Name: "Albanian",
},
{
Id: "am",
Name: "Amharic",
},
{
Id: "ar",
Name: "Arabic",
},
{
Id: "hy",
Name: "Armenian",
},
{
Id: "as",
Name: "Assamese",
},
{
Id: "ay",
Name: "Aymara",
},
{
Id: "az",
Name: "Azerbaijani",
},
{
Id: "bm",
Name: "Bambara",
},
{
Id: "eu",
Name: "Basque",
},
{
Id: "be",
Name: "Belarusian",
},
{
Id: "bn",
Name: "Bengali",
},
{
Id: "bho",
Name: "Bhojpuri",
},
{
Id: "bs",
Name: "Bosnian",
},
{
Id: "bg",
Name: "Bulgarian",
},
{
Id: "ca",
Name: "Catalan",
},
{
Id: "ceb",
Name: "Cebuano",
},
{
Id: "ny",
Name: "Chichewa",
},
{
Id: "zh",
Name: "Chinese (Simplified)",
},
{
Id: "zh-TW",
Name: "Chinese (Traditional)",
},
{
Id: "co",
Name: "Corsican",
},
{
Id: "hr",
Name: "Croatian",
},
{
Id: "cs",
Name: "Czech",
},
{
Id: "da",
Name: "Danish",
},
{
Id: "dv",
Name: "Dhivehi",
},
{
Id: "doi",
Name: "Dogri",
},
{
Id: "nl",
Name: "Dutch",
},
{
Id: "en",
Name: "English",
},
{
Id: "eo",
Name: "Esperanto",
},
{
Id: "et",
Name: "Estonian",
},
{
Id: "ee",
Name: "Ewe",
},
{
Id: "tl",
Name: "Filipino",
},
{
Id: "fi",
Name: "Finnish",
},
{
Id: "fr",
Name: "French",
},
{
Id: "fy",
Name: "Frisian",
},
{
Id: "gl",
Name: "Galician",
},
{
Id: "ka",
Name: "Georgian",
},
{
Id: "de",
Name: "German",
},
{
Id: "el",
Name: "Greek",
},
{
Id: "gn",
Name: "Guarani",
},
{
Id: "gu",
Name: "Gujarati",
},
{
Id: "ht",
Name: "Haitian Creole",
},
{
Id: "ha",
Name: "Hausa",
},
{
Id: "haw",
Name: "Hawaiian",
},
{
Id: "iw",
Name: "Hebrew",
},
{
Id: "hi",
Name: "Hindi",
},
{
Id: "hmn",
Name: "Hmong",
},
{
Id: "hu",
Name: "Hungarian",
},
{
Id: "is",
Name: "Icelandic",
},
{
Id: "ig",
Name: "Igbo",
},
{
Id: "ilo",
Name: "Ilocano",
},
{
Id: "id",
Name: "Indonesian",
},
{
Id: "ga",
Name: "Irish",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "jw",
Name: "Javanese",
},
{
Id: "kn",
Name: "Kannada",
},
{
Id: "kk",
Name: "Kazakh",
},
{
Id: "km",
Name: "Khmer",
},
{
Id: "rw",
Name: "Kinyarwanda",
},
{
Id: "gom",
Name: "Konkani",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "kri",
Name: "Krio",
},
{
Id: "ku",
Name: "Kurdish (Kurmanji)",
},
{
Id: "ckb",
Name: "Kurdish (Sorani)",
},
{
Id: "ky",
Name: "Kyrgyz",
},
{
Id: "lo",
Name: "Lao",
},
{
Id: "la",
Name: "Latin",
},
{
Id: "lv",
Name: "Latvian",
},
{
Id: "ln",
Name: "Lingala",
},
{
Id: "lt",
Name: "Lithuanian",
},
{
Id: "lg",
Name: "Luganda",
},
{
Id: "lb",
Name: "Luxembourgish",
},
{
Id: "mk",
Name: "Macedonian",
},
{
Id: "mai",
Name: "Maithili",
},
{
Id: "mg",
Name: "Malagasy",
},
{
Id: "ms",
Name: "Malay",
},
{
Id: "ml",
Name: "Malayalam",
},
{
Id: "mt",
Name: "Maltese",
},
{
Id: "mi",
Name: "Maori",
},
{
Id: "mr",
Name: "Marathi",
},
{
Id: "mni-Mtei",
Name: "Meiteilon (Manipuri)",
},
{
Id: "lus",
Name: "Mizo",
},
{
Id: "mn",
Name: "Mongolian",
},
{
Id: "my",
Name: "Myanmar (Burmese)",
},
{
Id: "ne",
Name: "Nepali",
},
{
Id: "no",
Name: "Norwegian",
},
{
Id: "or",
Name: "Odia (Oriya)",
},
{
Id: "om",
Name: "Oromo",
},
{
Id: "ps",
Name: "Pashto",
},
{
Id: "fa",
Name: "Persian",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt",
Name: "Portuguese",
},
{
Id: "pa",
Name: "Punjabi",
},
{
Id: "qu",
Name: "Quechua",
},
{
Id: "ro",
Name: "Romanian",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "sm",
Name: "Samoan",
},
{
Id: "sa",
Name: "Sanskrit",
},
{
Id: "gd",
Name: "Scots Gaelic",
},
{
Id: "nso",
Name: "Sepedi",
},
{
Id: "sr",
Name: "Serbian",
},
{
Id: "st",
Name: "Sesotho",
},
{
Id: "sn",
Name: "Shona",
},
{
Id: "sd",
Name: "Sindhi",
},
{
Id: "si",
Name: "Sinhala",
},
{
Id: "sk",
Name: "Slovak",
},
{
Id: "sl",
Name: "Slovenian",
},
{
Id: "so",
Name: "Somali",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "su",
Name: "Sundanese",
},
{
Id: "sw",
Name: "Swahili",
},
{
Id: "sv",
Name: "Swedish",
},
{
Id: "tg",
Name: "Tajik",
},
{
Id: "ta",
Name: "Tamil",
},
{
Id: "tt",
Name: "Tatar",
},
{
Id: "te",
Name: "Telugu",
},
{
Id: "th",
Name: "Thai",
},
{
Id: "ti",
Name: "Tigrinya",
},
{
Id: "ts",
Name: "Tsonga",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "tk",
Name: "Turkmen",
},
{
Id: "ak",
Name: "Twi",
},
{
Id: "uk",
Name: "Ukrainian",
},
{
Id: "ur",
Name: "Urdu",
},
{
Id: "ug",
Name: "Uyghur",
},
{
Id: "uz",
Name: "Uzbek",
},
{
Id: "vi",
Name: "Vietnamese",
},
{
Id: "cy",
Name: "Welsh",
},
{
Id: "xh",
Name: "Xhosa",
},
{
Id: "yi",
Name: "Yiddish",
},
{
Id: "yo",
Name: "Yoruba",
},
{
Id: "zu",
Name: "Zulu",
},
}
var ListD []List
if listType == "sl" {
auto := []List{{
Id: "auto",
Name: "Detect Language",
}}
ListD = append(append([]List{}, auto...), ListData...)
} else {
ListD = ListData
}
return ListD
}

View File

@@ -1,85 +0,0 @@
package utils
func LangListLibreTranslate(listType string) []List {
ListData := []List{
{
Id: "en",
Name: "English",
},
{
Id: "ar",
Name: "Arabic",
},
{
Id: "zh",
Name: "Chinese",
},
{
Id: "fr",
Name: "French",
},
{
Id: "de",
Name: "German",
},
{
Id: "hi",
Name: "Hindi",
},
{
Id: "id",
Name: "Indonesian",
},
{
Id: "ga",
Name: "Irish",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt",
Name: "Portuguese",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "vi",
Name: "Vietnamese",
},
}
var ListD []List
if listType == "sl" {
auto := []List{{
Id: "auto",
Name: "Detect Language",
}}
ListD = append(append([]List{}, auto...), ListData...)
} else {
ListD = ListData
}
return ListD
}

View File

@@ -1,563 +0,0 @@
package utils
func LangListMyMemory(listType string) []List {
ListData := []List{
{
Id: "af",
Name: "Afrikaans",
},
{
Id: "sq",
Name: "Albanian",
},
{
Id: "am",
Name: "Amharic",
},
{
Id: "ar",
Name: "Arabic",
},
{
Id: "hy",
Name: "Armenian",
},
{
Id: "az",
Name: "Azerbaijani",
},
{
Id: "bjs",
Name: "Bajan",
},
{
Id: "rm",
Name: "Balkan Gipsy",
},
{
Id: "eu",
Name: "Basque",
},
{
Id: "bem",
Name: "Bemba",
},
{
Id: "bn",
Name: "Bengali",
},
{
Id: "be",
Name: "Bielarus",
},
{
Id: "bi",
Name: "Bislama",
},
{
Id: "bs",
Name: "Bosnian",
},
{
Id: "br",
Name: "Breton",
},
{
Id: "bg",
Name: "Bulgarian",
},
{
Id: "my",
Name: "Burmese",
},
{
Id: "ca",
Name: "Catalan",
},
{
Id: "ceb",
Name: "Cebuano",
},
{
Id: "ch",
Name: "Chamorro",
},
{
Id: "zh",
Name: "Chinese (Simplified)",
},
{
Id: "zh-TW",
Name: "Chinese (Traditional)",
},
{
Id: "zdj",
Name: "Comorian",
},
{
Id: "cop",
Name: "Coptic",
},
{
Id: "hr",
Name: "Croatian",
},
{
Id: "cs",
Name: "Czech",
},
{
Id: "da",
Name: "Danish",
},
{
Id: "nl",
Name: "Dutch",
},
{
Id: "dz",
Name: "Dzongkha",
},
{
Id: "en",
Name: "English",
},
{
Id: "eo",
Name: "Esperanto",
},
{
Id: "et",
Name: "Estonian",
},
{
Id: "fnG",
Name: "Fanagalo",
},
{
Id: "fo",
Name: "Faroese",
},
{
Id: "fi",
Name: "Finnish",
},
{
Id: "fr",
Name: "French",
},
{
Id: "gl",
Name: "Galician",
},
{
Id: "ka",
Name: "Georgian",
},
{
Id: "de",
Name: "German",
},
{
Id: "el",
Name: "Greek",
},
{
Id: "grc",
Name: "Greek (Classical)",
},
{
Id: "gu",
Name: "Gujarati",
},
{
Id: "ha",
Name: "Hausa",
},
{
Id: "haw",
Name: "Hawaiian",
},
{
Id: "he",
Name: "Hebrew",
},
{
Id: "hi",
Name: "Hindi",
},
{
Id: "hu",
Name: "Hungarian",
},
{
Id: "is",
Name: "Icelandic",
},
{
Id: "id",
Name: "Indonesian",
},
{
Id: "kl",
Name: "Inuktitut (Greenland)",
},
{
Id: "ga",
Name: "Irish Gaelic",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "jv",
Name: "Javanese",
},
{
Id: "kea",
Name: "Kabuverdianu",
},
{
Id: "kab",
Name: "Kabylian",
},
{
Id: "kn",
Name: "Kannada",
},
{
Id: "kk",
Name: "Kazakh",
},
{
Id: "km",
Name: "Khmer",
},
{
Id: "rw",
Name: "Kinyarwanda",
},
{
Id: "rn",
Name: "Kirundi",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "ku",
Name: "Kurdish",
},
{
Id: "ckb",
Name: "Kurdish Sorani",
},
{
Id: "ky",
Name: "Kyrgyz",
},
{
Id: "lo",
Name: "Lao",
},
{
Id: "la",
Name: "Latin",
},
{
Id: "lv",
Name: "Latvian",
},
{
Id: "lt",
Name: "Lithuanian",
},
{
Id: "lb",
Name: "Luxembourgish",
},
{
Id: "mk",
Name: "Macedonian",
},
{
Id: "mg",
Name: "Malagasy",
},
{
Id: "ms",
Name: "Malay",
},
{
Id: "dv",
Name: "Maldivian",
},
{
Id: "mt",
Name: "Maltese",
},
{
Id: "gv",
Name: "Manx Gaelic",
},
{
Id: "mi",
Name: "Maori",
},
{
Id: "mh",
Name: "Marshallese",
},
{
Id: "men",
Name: "Mende",
},
{
Id: "mn",
Name: "Mongolian",
},
{
Id: "mfe",
Name: "Morisyen",
},
{
Id: "ne",
Name: "Nepali",
},
{
Id: "niu",
Name: "Niuean",
},
{
Id: "no",
Name: "Norwegian",
},
{
Id: "ny",
Name: "Nyanja",
},
{
Id: "ur",
Name: "Pakistani",
},
{
Id: "pau",
Name: "Palauan",
},
{
Id: "pa",
Name: "Panjabi",
},
{
Id: "pap",
Name: "Papiamentu",
},
{
Id: "ps",
Name: "Pashto",
},
{
Id: "fa",
Name: "Persian",
},
{
Id: "pis",
Name: "Pijin",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt",
Name: "Portuguese",
},
{
Id: "pot",
Name: "Potawatomi",
},
{
Id: "qu",
Name: "Quechua",
},
{
Id: "ro",
Name: "Romanian",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "sm",
Name: "Samoan",
},
{
Id: "sg",
Name: "Sango",
},
{
Id: "gd",
Name: "Scots Gaelic",
},
{
Id: "sr",
Name: "Serbian",
},
{
Id: "sn",
Name: "Shona",
},
{
Id: "si",
Name: "Sinhala",
},
{
Id: "sk",
Name: "Slovak",
},
{
Id: "sl",
Name: "Slovenian",
},
{
Id: "so",
Name: "Somali",
},
{
Id: "st",
Name: "Sotho Southern",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "srn",
Name: "Sranan Tongo",
},
{
Id: "sw",
Name: "Swahili",
},
{
Id: "sv",
Name: "Swedish",
},
{
Id: "syc",
Name: "Syriac (Aramic)",
},
{
Id: "tl",
Name: "Tagalog",
},
{
Id: "tg",
Name: "Tajik",
},
{
Id: "tmh",
Name: "Tamashek (Tuareg)",
},
{
Id: "ta",
Name: "Tamil",
},
{
Id: "te",
Name: "Telugu",
},
{
Id: "tet",
Name: "Tetum",
},
{
Id: "th",
Name: "Thai",
},
{
Id: "bo",
Name: "Tibetan",
},
{
Id: "ti",
Name: "Tigrinya",
},
{
Id: "tpi",
Name: "Tok Pisin",
},
{
Id: "tkl",
Name: "Tokelauan",
},
{
Id: "to",
Name: "Tongan",
},
{
Id: "tn",
Name: "Tswana",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "tk",
Name: "Turkmen",
},
{
Id: "tvl",
Name: "Tuvaluan",
},
{
Id: "uk",
Name: "Ukrainian",
},
{
Id: "ppk",
Name: "Uma",
},
{
Id: "uz",
Name: "Uzbek",
},
{
Id: "vi",
Name: "Vietnamese",
},
{
Id: "wls",
Name: "Wallisian",
},
{
Id: "cy",
Name: "Welsh",
},
{
Id: "wo",
Name: "Wolof",
},
{
Id: "xh",
Name: "Xhosa",
},
{
Id: "yi",
Name: "Yiddish",
},
{
Id: "zu",
Name: "Zulu",
},
}
return ListData
}

View File

@@ -1,112 +0,0 @@
package utils
func LangListReverso(listType string) []List {
// IDs got from original simplytranslate-web and trial and error. Usually first three letters of language.
ListData := []List{
{
Id: "ar",
Name: "Arabic",
},
{
Id: "zh",
Name: "Chinese (Simplified)",
},
{
Id: "cs",
Name: "Czech",
},
{
Id: "da",
Name: "Danish",
},
{
Id: "nl",
Name: "Dutch",
},
{
Id: "en",
Name: "English",
},
{
Id: "fr",
Name: "French",
},
{
Id: "de",
Name: "German",
},
{
Id: "el",
Name: "Greek",
},
{
Id: "he",
Name: "Hebrew",
},
{
Id: "hi",
Name: "Hindi",
},
{
Id: "hu",
Name: "Hungarian",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "per",
Name: "Persian",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt",
Name: "Portugese",
},
{
Id: "ro",
Name: "Romanian",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "sk",
Name: "Slovak",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "sv",
Name: "Swedish",
},
{
Id: "th",
Name: "Thai",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "uk",
Name: "Ukrainian",
},
}
return ListData
}

View File

@@ -1,246 +0,0 @@
package utils
func LangListWatson(listType string) []List {
// IDs got from https://www.loc.gov/standards/iso639-2/php/code_list.php and tested to make sure they work. Exceptions fr-CA zh-CN/TW
ListData := []List{
{
Id: "ar",
Name: "Arabic",
},
{
Id: "ba",
Name: "Basque",
},
{
Id: "bn",
Name: "Bengali",
},
{
Id: "bs",
Name: "Bosnian",
},
{
Id: "bg",
Name: "Bulgarian",
},
{
Id: "ca",
Name: "Catalan",
},
{
Id: "zh",
Name: "Chinese (Simplified)",
},
{
Id: "zh-TW",
Name: "Chinese (Traditional)",
},
{
Id: "hr",
Name: "Croatian",
},
{
Id: "cs",
Name: "Czech",
},
{
Id: "da",
Name: "Danish",
},
{
Id: "nl",
Name: "Dutch",
},
{
Id: "en",
Name: "English",
},
{
Id: "et",
Name: "Estonian",
},
{
Id: "fi",
Name: "Finnish",
},
{
Id: "fr",
Name: "French",
},
{
Id: "fr-CA",
Name: "Canadian French",
},
{
Id: "de",
Name: "German",
},
{
Id: "el",
Name: "Greek",
},
{
Id: "gu",
Name: "Gujarati",
},
{
Id: "he",
Name: "Hebrew",
},
{
Id: "hi",
Name: "Hindi",
},
{
Id: "hu",
Name: "Hungarian",
},
{
Id: "id",
Name: "Indonesian",
},
{
Id: "ga",
Name: "Irish",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "kn",
Name: "Kannada",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "lv",
Name: "Latvian",
},
{
Id: "lt",
Name: "Lithuanian",
},
{
Id: "ms",
Name: "Malay",
},
{
Id: "ml",
Name: "Malayalam",
},
{
Id: "mt",
Name: "Maltese",
},
{
Id: "mr",
Name: "Marathi",
},
{
Id: "cnr",
Name: "Montenegrin",
},
{
Id: "ne",
Name: "Nepali",
},
{
Id: "nb",
Name: "Norwegian",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt",
Name: "Portugese",
},
{
Id: "pa",
Name: "Punjabi",
},
{
Id: "ro",
Name: "Romanian",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "sr",
Name: "Serbian",
},
{
Id: "si",
Name: "Sinhalese",
},
{
Id: "sk",
Name: "Slovak",
},
{
Id: "sl",
Name: "Slovenian",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "sv",
Name: "Swedish",
},
{
Id: "ta",
Name: "Tamil",
},
{
Id: "te",
Name: "Telugu",
},
{
Id: "th",
Name: "Thai",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "uk",
Name: "Ukrainian",
},
{
Id: "ur",
Name: "Urdu",
},
{
Id: "vi",
Name: "Vietnamese",
},
{
Id: "cy",
Name: "Welsh",
},
}
var ListD []List
if listType == "sl" {
auto := []List{{
Id: "auto",
Name: "Detect Language",
}}
ListD = append(append([]List{}, auto...), ListData...)
} else {
ListD = ListData
}
return ListD
}

View File

@@ -1,415 +0,0 @@
package utils
func LangListYandex(listType string) []List {
ListData := []List{
{
Id: "af",
Name: "Afrikaans",
},
{
Id: "sq",
Name: "Albanian",
},
{
Id: "am",
Name: "Amharic",
},
{
Id: "ar",
Name: "Arabic",
},
{
Id: "hy",
Name: "Armenian",
},
{
Id: "az",
Name: "Azerbaijani",
},
{
Id: "ba",
Name: "Bashkir",
},
{
Id: "eu",
Name: "Basque",
},
{
Id: "be",
Name: "Belarusian",
},
{
Id: "bn",
Name: "Bengali",
},
{
Id: "bs",
Name: "Bosnian",
},
{
Id: "bg",
Name: "Bulgarian",
},
{
Id: "my",
Name: "Burmese",
},
{
Id: "ca",
Name: "Catalan",
},
{
Id: "ceb",
Name: "Cebuano",
},
{
Id: "zh",
Name: "Chinese",
},
{
Id: "cv",
Name: "Chuvash",
},
{
Id: "hr",
Name: "Croatian",
},
{
Id: "cs",
Name: "Czech",
},
{
Id: "da",
Name: "Danish",
},
{
Id: "nl",
Name: "Dutch",
},
{
Id: "sjn",
Name: "Elvish (Sindarin)",
},
{
Id: "emj",
Name: "Emoji",
},
{
Id: "en",
Name: "English",
},
{
Id: "eo",
Name: "Esperanto",
},
{
Id: "et",
Name: "Estonian",
},
{
Id: "fi",
Name: "Finnish",
},
{
Id: "fr",
Name: "French",
},
{
Id: "gl",
Name: "Galician",
},
{
Id: "ka",
Name: "Georgian",
},
{
Id: "de",
Name: "German",
},
{
Id: "el",
Name: "Greek",
},
{
Id: "gu",
Name: "Gujarati",
},
{
Id: "ht",
Name: "Haitian",
},
{
Id: "he",
Name: "Hebrew",
},
{
Id: "mrj",
Name: "Hill Mari",
},
{
Id: "hi",
Name: "Hindi",
},
{
Id: "hu",
Name: "Hungarian",
},
{
Id: "is",
Name: "Icelandic",
},
{
Id: "id",
Name: "Indonesian",
},
{
Id: "ga",
Name: "Irish",
},
{
Id: "it",
Name: "Italian",
},
{
Id: "ja",
Name: "Japanese",
},
{
Id: "jv",
Name: "Javanese",
},
{
Id: "kn",
Name: "Kannada",
},
{
Id: "kazlat",
Name: "Kazakh (Latin)",
},
{
Id: "kk",
Name: "Kazakh",
},
{
Id: "km",
Name: "Khmer",
},
{
Id: "ko",
Name: "Korean",
},
{
Id: "ky",
Name: "Kyrgyz",
},
{
Id: "lo",
Name: "Lao",
},
{
Id: "la",
Name: "Latin",
},
{
Id: "lv",
Name: "Latvian",
},
{
Id: "lt",
Name: "Lithuanian",
},
{
Id: "lb",
Name: "Luxembourgish",
},
{
Id: "mk",
Name: "Macedonian",
},
{
Id: "mg",
Name: "Malagasy",
},
{
Id: "ms",
Name: "Malay",
},
{
Id: "ml",
Name: "Malayalam",
},
{
Id: "mt",
Name: "Maltese",
},
{
Id: "mi",
Name: "Maori",
},
{
Id: "mr",
Name: "Marathi",
},
{
Id: "mhr",
Name: "Mari",
},
{
Id: "mn",
Name: "Mongolian",
},
{
Id: "ne",
Name: "Nepali",
},
{
Id: "no",
Name: "Norwegian",
},
{
Id: "pap",
Name: "Papiamento",
},
{
Id: "fa",
Name: "Persian",
},
{
Id: "pl",
Name: "Polish",
},
{
Id: "pt-BR",
Name: "Portuguese (Brazilian)",
},
{
Id: "pt",
Name: "Portuguese",
},
{
Id: "pa",
Name: "Punjabi",
},
{
Id: "ro",
Name: "Romanian",
},
{
Id: "ru",
Name: "Russian",
},
{
Id: "gd",
Name: "Scottish Gaelic",
},
{
Id: "sr-Latn",
Name: "Serbian (Latin)",
},
{
Id: "sr",
Name: "Serbian",
},
{
Id: "si",
Name: "Sinhalese",
},
{
Id: "sk",
Name: "Slovak",
},
{
Id: "sl",
Name: "Slovenian",
},
{
Id: "es",
Name: "Spanish",
},
{
Id: "su",
Name: "Sundanese",
},
{
Id: "sw",
Name: "Swahili",
},
{
Id: "sv",
Name: "Swedish",
},
{
Id: "tl",
Name: "Tagalog",
},
{
Id: "tg",
Name: "Tajik",
},
{
Id: "ta",
Name: "Tamil",
},
{
Id: "tt",
Name: "Tatar",
},
{
Id: "te",
Name: "Telugu",
},
{
Id: "th",
Name: "Thai",
},
{
Id: "tr",
Name: "Turkish",
},
{
Id: "udm",
Name: "Udmurt",
},
{
Id: "uk",
Name: "Ukrainian",
},
{
Id: "ur",
Name: "Urdu",
},
{
Id: "uzbcyr",
Name: "Uzbek (Cyrillic)",
},
{
Id: "uz",
Name: "Uzbek",
},
{
Id: "vi",
Name: "Vietnamese",
},
{
Id: "cy",
Name: "Welsh",
},
{
Id: "xh",
Name: "Xhosa",
},
{
Id: "sah",
Name: "Yakut",
},
{
Id: "yi",
Name: "Yiddish",
},
{
Id: "zu",
Name: "Zulu",
},
}
return ListData
}

View File

@@ -1,103 +0,0 @@
package utils
import (
"errors"
"os"
)
type List struct {
Name string
Id string
}
type LangOut struct {
Engine string `json:"engine"`
AutoDetect string `json:"detected"`
OutputText string `json:"translated-text"`
SourceLang string `json:"source_language"`
TargetLang string `json:"target_language"`
}
func EnvTrueNoExist(env string) bool {
if _, ok := os.LookupEnv(env); ok == false || os.Getenv(env) == "true" {
return true
}
return false
}
func LangList(engine string, listType string) ([]List, error) {
var data []List
if listType != "sl" && listType != "tl" {
return []List{}, errors.New("list type invalid: either give tl for target languages or sl for source languages.")
}
if engine == "google" && EnvTrueNoExist("MOZHI_GOOGLE_ENABLED") {
data = LangListGoogle(listType)
} else if engine == "libre" && EnvTrueNoExist("MOZHI_LIBRETRANSLATE_ENABLED") {
if EnvTrueNoExist("MOZHI_LIBRETRANSLATE_URL") {
return []List{}, errors.New("Please set MOZHI_LIBRETRANSLATE_URL if you want to use libretranslate. Example: MOZHI_LIBRETRANSLATE_URL=https://lt.psf.lt")
}
data = LangListLibreTranslate(listType)
} else if engine == "reverso" && EnvTrueNoExist("MOZHI_REVERSO_ENABLED") {
data = LangListReverso(listType)
} else if engine == "deepl" && EnvTrueNoExist("MOZHI_DEEPL_ENABLED") {
data = LangListDeepl(listType)
} else if engine == "watson" && EnvTrueNoExist("MOZHI_WATSON_ENABLED") {
data = LangListWatson(listType)
} else if engine == "yandex" && EnvTrueNoExist("MOZHI_YANDEX_ENABLED") {
data = LangListYandex(listType)
} else if engine == "mymemory" && EnvTrueNoExist("MOZHI_MYMEMORY_ENABLED") {
data = LangListMyMemory(listType)
} else if engine == "duckduckgo" && EnvTrueNoExist("MOZHI_DUCKDUCKGO_ENABLED") {
data = LangListDuckDuckGo(listType)
} else {
return []List{}, errors.New("Engine does not exist or has been disabled.")
}
return data, nil
}
// General function to translate stuff so there is no need for a huge if-block everywhere
func Translate(engine string, to string, from string, text string) (LangOut, error) {
var err error
var data LangOut
if engine == "google" && EnvTrueNoExist("MOZHI_GOOGLE_ENABLED") {
data, err = TranslateGoogle(to, from, text)
} else if engine == "libre" && EnvTrueNoExist("MOZHI_LIBRETRANSLATE_ENABLED") {
if os.Getenv("MOZHI_LIBRETRANSLATE_URL") == "" {
return LangOut{}, errors.New("Please set MOZHI_LIBRETRANSLATE_URL if you want to use libretranslate. Example: MOZHI_LIBRETRANSLATE_URL=https://lt.psf.lt")
}
data, err = TranslateLibreTranslate(to, from, text)
} else if engine == "reverso" && EnvTrueNoExist("MOZHI_REVERSO_ENABLED") {
data, err = TranslateReverso(to, from, text)
} else if engine == "deepl" && EnvTrueNoExist("MOZHI_DEEPL_ENABLED") {
data, err = TranslateDeepl(to, from, text)
} else if engine == "watson" && EnvTrueNoExist("MOZHI_WATSON_ENABLED") {
data, err = TranslateWatson(to, from, text)
} else if engine == "yandex" && EnvTrueNoExist("MOZHI_YANDEX_ENABLED") {
data, err = TranslateYandex(to, from, text)
} else if engine == "mymemory" && EnvTrueNoExist("MOZHI_MYMEMORY_ENABLED") {
data, err = TranslateMyMemory(to, from, text)
} else if engine == "duckduckgo" && EnvTrueNoExist("MOZHI_DUCKDUCKGO_ENABLED") {
data, err = TranslateDuckDuckGo(to, from, text)
} else {
return LangOut{}, errors.New("Engine does not exist or has been disabled.")
}
if err != nil {
return LangOut{}, err
}
return data, nil
}
func TTS(engine string, lang string, text string) ([]byte, error) {
var err error
var data []byte
if engine == "google" && EnvTrueNoExist("MOZHI_GOOGLE_ENABLED") {
data, err = TTSGoogle(lang, text)
} else if engine == "reverso" && EnvTrueNoExist("MOZHI_REVERSO_ENABLED") {
data, err = TTSReverso(lang, text)
} else {
return []byte(""), errors.New("Engine does not exist and/or doesn't support TTS and/or has been disabled.")
}
if err != nil {
return []byte(""), err
}
return data, nil
}

View File

@@ -1,72 +0,0 @@
package utils
import (
"bytes"
"io"
"net/http"
"os"
"github.com/tidwall/gjson"
)
func PostRequest(url string, data []byte) gjson.Result {
bodyReader := bytes.NewReader(data)
r, err := http.NewRequest(http.MethodPost, url, bodyReader)
if err != nil {
panic(err)
}
UserAgent, ok := os.LookupEnv("MOZHI_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"
}
// r.Header.Set("Accept", "application/vnd.github.v3+json")
r.Header.Set("Content-Type", "application/json")
r.Header.Set("User-Agent", UserAgent)
client := &http.Client{}
res, err := client.Do(r)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
jsonified := gjson.Parse(string(body))
return jsonified
}
func GetRequest(url string) gjson.Result {
r, err := http.NewRequest("GET", url, nil)
if err != nil {
panic(err)
}
UserAgent, ok := os.LookupEnv("MOZHI_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"
}
// r.Header.Set("Content-Type", "application/json")
r.Header.Set("User-Agent", UserAgent)
client := &http.Client{}
res, err := client.Do(r)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
jsonified := gjson.Parse(string(body))
return jsonified
}

View File

@@ -1,87 +0,0 @@
package utils
//import (
// "github.com/gocolly/colly"
// "os"
// "strings"
//)
//
//type List struct {
// Name string
// Id string
//}
//// To get new language lists for google yandex and libertranslate.
//func LangListGoogle(listType string) []List {
// UserAgent, ok := os.LookupEnv("MOZHI_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"
// }
// sc := colly.NewCollector(colly.AllowedDomains("translate.google.com"), colly.UserAgent(UserAgent))
// var ListData []List
// sc.OnHTML("div.root-container", func(e *colly.HTMLElement) {
// e.ForEach("div.language-item", func(i int, el *colly.HTMLElement) {
// var ListInfo List
// ListInfo.Name = el.ChildText("a")
// if listType == "tl" {
// ListInfo.Id = strings.TrimPrefix(strings.TrimSuffix(el.ChildAttr("a", "href"), "&hl=en-US"), "./m?sl=en&tl=")
// } else {
// ListInfo.Id = strings.TrimPrefix(strings.TrimSuffix(el.ChildAttr("a", "href"), "&tl=en&hl=en-US"), "./m?sl=")
// }
// ListData = append(ListData, ListInfo)
// })
// })
// url := "https://translate.google.com/m?sl=en&tl=en&hl=en-US&mui=" + listType
// sc.Visit(url)
// return ListData
//}
//func LangListLibreTranslate(listType string) []List {
// // TODO: Make it configurable
// libreTranslateOut := PostRequest("https://translate.argosopentech.com/languages", []byte(""))
// gjsonArr := libreTranslateOut.Array()
// var ListData []List
// for _, r := range gjsonArr {
// code := r.Get("code").String()
// name := r.Get("name").String()
//
// ListData = append(ListData, List{Id: code, Name: name})
// }
// if listType == "sl" {
// auto := List{
// Id: "auto",
// Name: "Detect Language",
// }
// ListData = append(ListData, auto)
// }
// return ListData
//}
//func LangListYandex(listType string) []List {
// UserAgent, ok := os.LookupEnv("MOZHI_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"
// }
// sc := colly.NewCollector(colly.AllowedDomains("localhost:8000"), colly.UserAgent(UserAgent))
// var ListData []List
// sc.OnHTML("table.langs", func(e *colly.HTMLElement) {
// if listType == "sl" {
// e.ForEach("select[name='from'] option", func(i int, el *colly.HTMLElement) {
// var ListInfo List
// ListInfo.Name = el.Text
// ListInfo.Id = el.Attr("value")
// ListData = append(ListData, ListInfo)
// })
// } else {
// e.ForEach("select[name='to'] option", func(i int, el *colly.HTMLElement) {
// var ListInfo List
// ListInfo.Name = el.Text
// ListInfo.Id = el.Attr("value")
// ListData = append(ListData, ListInfo)
// })
//
// }
// })
// // Static version of translate.yandex.net nojs/mobile version
// url := "http://localhost:8000/index.html"
// sc.Visit(url)
// return ListData
//}
//

View File

@@ -1,155 +0,0 @@
package utils
import (
"context"
"encoding/base64"
"os"
"github.com/carlmjohnson/requests"
"github.com/google/go-querystring/query"
)
type ReversoTTS struct {
Id string
Voice string
}
func TTSGoogle(lang string, text string) ([]byte, error) {
type Options struct {
Lang string `url:"tl"`
Text string `url:"q"`
Client string `url:"client"`
}
opt := Options{lang, text, "tw-ob"}
v, _ := query.Values(opt)
var file string
url := "https://translate.google.com/translate_tts?" + v.Encode()
err := requests.
URL(url).
ToString(&file).
Fetch(context.Background())
if err != nil {
return []byte(""), err
}
return []byte(file), nil
}
func TTSReverso(lang string, text string) ([]byte, error) {
TTSData := []ReversoTTS{
// http://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetAvailableVoices with randomized deduplication
{
Id: "ar",
Voice: "Mehdi22k",
},
{
Id: "zh",
Voice: "Lulu22k",
},
{
Id: "cz",
Voice: "Eliska22k",
},
{
Id: "dk",
Voice: "Mette22k",
},
{
Id: "nl",
Voice: "Daan22k",
},
{
Id: "en",
Voice: "Will22k",
},
{
Id: "fr",
Voice: "Margaux22k",
},
{
Id: "de",
Voice: "Andreas22k",
},
{
Id: "gr",
Voice: "Dimitris22k",
},
{
Id: "heb",
Voice: "he-IL-Asaf",
},
{
Id: "it",
Voice: "Chiara22k",
},
{
Id: "jp",
Voice: "Sakura22k",
},
{
Id: "kr",
Voice: "Minji22k",
},
{
Id: "pl",
Voice: "Monika22k",
},
{
Id: "pt",
Voice: "Celia22k",
},
{
Id: "ro",
Voice: "ro-RO-Andrei",
},
{
Id: "ru",
Voice: "Alyona22k",
},
{
Id: "es",
Voice: "Antonio22k",
},
{
Id: "se",
Voice: "Erik22k",
},
{
Id: "tr",
Voice: "Ipek22k",
},
}
// https://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetVoiceStream/voiceName=Lulu22k?voiceSpeed=80&inputText=6K%20V6aqM Base64 input text
text2 := base64.StdEncoding.EncodeToString([]byte(text))
var voice string
for _, s := range TTSData {
if s.Id == lang {
voice = s.Voice
break
}
}
type Options struct {
VoiceSpeed int `url:"voiceSpeed"`
Text string `url:"inputText"`
}
opt := Options{80, text2}
v, _ := query.Values(opt)
var file string
url := "https://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetVoiceStream/voiceName=" + voice + "?" + v.Encode()
UserAgent, ok := os.LookupEnv("MOZHI_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"
}
err := requests.
URL(url).
ToString(&file).
UserAgent(UserAgent).
Fetch(context.Background())
if err != nil {
return []byte(""), err
}
return []byte(file), nil
}

View File

@@ -1,19 +0,0 @@
package utils
import (
"runtime/debug"
)
var Branch = "Alpha"
// Version returns the git commit hash of the current build. Taken from https://git.vern.cc/pjals/bestofbot.
func Version() string {
if info, ok := debug.ReadBuildInfo(); ok {
for _, setting := range info.Settings {
if setting.Key == "vcs.revision" {
return setting.Value[:8]
}
}
}
return "unknown, please build with Go 1.13+ or use Git"
}