From 6a7e8f85ac60b84db637f9787fe38487f6f83b08 Mon Sep 17 00:00:00 2001 From: keven1024 Date: Tue, 7 Apr 2026 08:46:31 +0800 Subject: [PATCH] feat(backend): add text translation handler and update task mapping for new translation functionality --- backend/internal/controllers/task.go | 1 + backend/internal/controllers/task/text.go | 45 +++++++ .../components/Result/TextTranslateResult.vue | 120 ++++++++++++++++++ 3 files changed, 166 insertions(+) create mode 100644 backend/internal/controllers/task/text.go create mode 100644 front/components/Result/TextTranslateResult.vue diff --git a/backend/internal/controllers/task.go b/backend/internal/controllers/task.go index 4c3b17c..6fb3d62 100644 --- a/backend/internal/controllers/task.go +++ b/backend/internal/controllers/task.go @@ -13,6 +13,7 @@ import ( var handleTaskMap = map[string]func(c *echo.Context) ([]byte, error){ "image:compress": task.HandleImageCompress, "image:convert": task.HandleImageConvert, + "text:translate": task.HandleTextTranslate, } func CreateTask(c *echo.Context) error { diff --git a/backend/internal/controllers/task/text.go b/backend/internal/controllers/task/text.go new file mode 100644 index 0000000..d1b5b5f --- /dev/null +++ b/backend/internal/controllers/task/text.go @@ -0,0 +1,45 @@ +package task + +import ( + "encoding/json" + + "github.com/labstack/echo/v5" +) + +var validProviders = map[string]bool{ + "google": true, + "microsoft": true, + "deeplx": true, + "deepseek": true, +} + +var validSources = map[string]bool{ + "auto": true, + "zh-CN": true, + "en": true, + "ja": true, + "ko": true, +} + +type TranslateTextRequest struct { + Text string `json:"text"` + Source string `json:"source"` + Target string `json:"target"` + Provider string `json:"provider"` +} + +func HandleTextTranslate(c *echo.Context) ([]byte, error) { + r := new(TranslateTextRequest) + if err := c.Bind(r); err != nil { + return nil, err + } + if r.Text == "" || r.Target == "" || !validProviders[r.Provider] || !validSources[r.Source] { + return nil, ErrInvalidRequest + } + return json.Marshal(map[string]any{ + "text": r.Text, + "source": r.Source, + "target": r.Target, + "provider": r.Provider, + }) +} diff --git a/front/components/Result/TextTranslateResult.vue b/front/components/Result/TextTranslateResult.vue new file mode 100644 index 0000000..9dfabaf --- /dev/null +++ b/front/components/Result/TextTranslateResult.vue @@ -0,0 +1,120 @@ + + +