mirror of
https://codeberg.org/aryak/mozhi
synced 2024-11-18 12:22:57 +05:30
add the api route for translation
This commit is contained in:
parent
977e3dff2e
commit
f7ec6b556d
42
pages/api.go
42
pages/api.go
@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func HandleSourceLanguages(c *fiber.Ctx) error {
|
func HandleSourceLanguages(c *fiber.Ctx) error {
|
||||||
engine := c.Query("engine")
|
engine := utils.Sanitize(c.Query("engine"), "alpha")
|
||||||
if engine == "" {
|
if engine == "" {
|
||||||
return c.SendStatus(fiber.StatusBadRequest)
|
return c.SendStatus(fiber.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ func HandleSourceLanguages(c *fiber.Ctx) error {
|
|||||||
return c.JSON(data)
|
return c.JSON(data)
|
||||||
}
|
}
|
||||||
func HandleTargetLanguages(c *fiber.Ctx) error {
|
func HandleTargetLanguages(c *fiber.Ctx) error {
|
||||||
engine := c.Query("engine")
|
engine := utils.Sanitize(c.Query("engine"), "alpha")
|
||||||
if engine == "" {
|
if engine == "" {
|
||||||
return c.SendStatus(fiber.StatusBadRequest)
|
return c.SendStatus(fiber.StatusBadRequest)
|
||||||
}
|
}
|
||||||
@ -37,7 +37,7 @@ func HandleTargetLanguages(c *fiber.Ctx) error {
|
|||||||
if engine == "google" {
|
if engine == "google" {
|
||||||
data = utils.LangListGoogle("tl")
|
data = utils.LangListGoogle("tl")
|
||||||
} else if engine == "libre" {
|
} else if engine == "libre" {
|
||||||
data = utils.LangListLibreTranslate("sl")
|
data = utils.LangListLibreTranslate("tl")
|
||||||
} else if engine == "reverso" {
|
} else if engine == "reverso" {
|
||||||
data = utils.LangListReverso("tl")
|
data = utils.LangListReverso("tl")
|
||||||
} else if engine == "deepl" {
|
} else if engine == "deepl" {
|
||||||
@ -52,8 +52,8 @@ func HandleTargetLanguages(c *fiber.Ctx) error {
|
|||||||
return c.JSON(data)
|
return c.JSON(data)
|
||||||
}
|
}
|
||||||
func HandleTTS(c *fiber.Ctx) error {
|
func HandleTTS(c *fiber.Ctx) error {
|
||||||
engine := c.Query("engine")
|
engine := utils.Sanitize(c.Query("engine"), "alpha")
|
||||||
lang := c.Query("lang")
|
lang := utils.Sanitize(c.Query("lang"), "alpha")
|
||||||
text := c.Query("text")
|
text := c.Query("text")
|
||||||
// Why does go not have an andor statement :(
|
// Why does go not have an andor statement :(
|
||||||
if engine == "" {
|
if engine == "" {
|
||||||
@ -72,3 +72,35 @@ func HandleTTS(c *fiber.Ctx) error {
|
|||||||
c.Set("Content-Type", "audio/mpeg")
|
c.Set("Content-Type", "audio/mpeg")
|
||||||
return c.Send([]byte(data))
|
return c.Send([]byte(data))
|
||||||
}
|
}
|
||||||
|
func HandleTranslate(c *fiber.Ctx) error {
|
||||||
|
engine := utils.Sanitize(c.Query("engine"), "alpha")
|
||||||
|
from := utils.Sanitize(c.Query("from"), "alpha")
|
||||||
|
to := utils.Sanitize(c.Query("to"), "alpha")
|
||||||
|
text := c.Query("text")
|
||||||
|
if engine == "" && from == "" && to == "" && text == ""{
|
||||||
|
return fiber.NewError(fiber.StatusBadRequest, "from, to, engine, text are required query strings.")
|
||||||
|
}
|
||||||
|
var data utils.LangOut
|
||||||
|
var err error
|
||||||
|
if engine == "google" {
|
||||||
|
data, err = utils.TranslateGoogle(to, from, text)
|
||||||
|
} else if engine == "libre" {
|
||||||
|
data, err = utils.TranslateLibreTranslate(to, from, text)
|
||||||
|
} else if engine == "reverso" {
|
||||||
|
data, err = utils.TranslateReverso(to, from, text)
|
||||||
|
} else if engine == "deepl" {
|
||||||
|
data, err = utils.TranslateDeepl(to, from, text)
|
||||||
|
} else if engine == "watson" {
|
||||||
|
data, err = utils.TranslateWatson(to, from, text)
|
||||||
|
} else if engine == "yandex" {
|
||||||
|
data, err = utils.TranslateYandex(to, from, text)
|
||||||
|
} else if engine == "mymemory" {
|
||||||
|
data, err = utils.TranslateMyMemory(to, from, text)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||||
|
}
|
||||||
|
data.SourceLang = from
|
||||||
|
data.TargetLang = to
|
||||||
|
return c.JSON(data)
|
||||||
|
}
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"codeberg.org/aryak/simplytranslate/pages"
|
"codeberg.org/aryak/simplytranslate/pages"
|
||||||
"codeberg.org/aryak/simplytranslate/utils"
|
"codeberg.org/aryak/simplytranslate/utils"
|
||||||
@ -39,23 +38,6 @@ func Serve(port string) {
|
|||||||
EnableTrustedProxyCheck: true,
|
EnableTrustedProxyCheck: true,
|
||||||
TrustedProxies: []string{"0.0.0.0/0"},
|
TrustedProxies: []string{"0.0.0.0/0"},
|
||||||
ProxyHeader: fiber.HeaderXForwardedFor,
|
ProxyHeader: fiber.HeaderXForwardedFor,
|
||||||
ErrorHandler: func(ctx *fiber.Ctx, err error) error {
|
|
||||||
code := fiber.StatusInternalServerError
|
|
||||||
|
|
||||||
if e, ok := err.(*fiber.Error); ok {
|
|
||||||
code = e.Code
|
|
||||||
}
|
|
||||||
link := strings.TrimPrefix(err.Error(), "Cannot GET ")
|
|
||||||
err = ctx.Status(code).Render("error", fiber.Map{
|
|
||||||
"error": err,
|
|
||||||
"link": link,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// For debugging purposes
|
// For debugging purposes
|
||||||
@ -97,7 +79,7 @@ func Serve(port string) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
app.Get("/", pages.HandleIndex)
|
app.Get("/", pages.HandleIndex)
|
||||||
//app.Get("/api/translate", pages.HandleTranslateApi)
|
app.Get("/api/translate", pages.HandleTranslate)
|
||||||
app.Get("/api/source_languages", pages.HandleSourceLanguages)
|
app.Get("/api/source_languages", pages.HandleSourceLanguages)
|
||||||
app.Get("/api/target_languages", pages.HandleTargetLanguages)
|
app.Get("/api/target_languages", pages.HandleTargetLanguages)
|
||||||
app.Get("/api/tts", pages.HandleTTS)
|
app.Get("/api/tts", pages.HandleTTS)
|
||||||
|
@ -11,8 +11,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type LangOut struct {
|
type LangOut struct {
|
||||||
OutputText string
|
OutputText string `json:"translated-text"`
|
||||||
AutoDetect string
|
AutoDetect string `json:"detected"`
|
||||||
|
SourceLang string `json:"source_language"`
|
||||||
|
TargetLang string `json:"target_language"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func TranslateGoogle(to string, from string, text string) (LangOut, error) {
|
func TranslateGoogle(to string, from string, text string) (LangOut, error) {
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
type List struct {
|
|
||||||
Name string
|
|
||||||
Id string
|
|
||||||
}
|
|
||||||
|
|
||||||
func LangListReverso(listType string) []List {
|
func LangListReverso(listType string) []List {
|
||||||
// IDs got from original simplytranslate-web and trial and error. Usually first three letters of language.
|
// IDs got from original simplytranslate-web and trial and error. Usually first three letters of language.
|
||||||
var ListData = []List{
|
var ListData = []List{
|
||||||
|
6
utils/main.go
Normal file
6
utils/main.go
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
type List struct {
|
||||||
|
Name string
|
||||||
|
Id string
|
||||||
|
}
|
14
utils/sanitize.go
Normal file
14
utils/sanitize.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import "regexp"
|
||||||
|
|
||||||
|
func Sanitize(str string, strip string) string {
|
||||||
|
nonAlphanumericRegex := regexp.MustCompile(`[^a-zA-Z]+`)
|
||||||
|
nonAlphaRegex := regexp.MustCompile(`[^a-zA-Z0-9]+`)
|
||||||
|
if strip == "alpha" {
|
||||||
|
return nonAlphaRegex.ReplaceAllString(str, "")
|
||||||
|
} else if strip == "alphanumeric" {
|
||||||
|
return nonAlphanumericRegex.ReplaceAllString(str, "")
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user