Files
aggregate_translate_server/app/admin/service/translator_trans.go
hucan f3ca87fb54
Some checks failed
Build / build (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
build / Build (push) Has been cancelled
GitHub Actions Mirror / mirror_to_gitee (push) Has been cancelled
GitHub Actions Mirror / mirror_to_gitlab (push) Has been cancelled
Issue Close Require / issue-close-require (push) Has been cancelled
1、在线支付
2、查询平台剩余字符数
2025-07-07 19:01:54 +08:00

109 lines
2.8 KiB
Go

package service
import (
"fmt"
"go-admin/app/admin/service/dto"
"go-admin/utils/httphelper"
"time"
)
// 翻译之家
type TransTranslator struct {
config *TransTranslatorConfig
client *httphelper.HTTPClient
}
type TransTranslatorConfig struct {
ApiKey string `json:"apiKey"`
ApiSecret string `json:"apiSecret"`
Endpoint string `json:"endpoint"`
}
type TransTranslatorResponse[T any] struct {
Code int `json:"code"`
Message string `json:"message"`
Data T `json:"data"`
}
// 剩余字符数
type TransTranslatorResponseNumData struct {
UseNum int `json:"use_num" comment:"总字符"`
IsUsed int `json:"is_used" comment:"已用字符"`
}
// 翻译内容
type TransTranslatorResponseData struct {
Text string `json:"text"`
}
// 翻译之家
func NewTransTranslator(config *TransTranslatorConfig) *TransTranslator {
defaultHeaders := map[string]string{
"Content-Type": "application/json",
}
httpClient := httphelper.NewHTTPClient(
15*time.Second,
config.Endpoint,
defaultHeaders,
)
return &TransTranslator{
config: config,
client: httpClient,
}
}
// 翻译
func (e *TransTranslator) Translate(text string, sourceLang, targetLang string) (*dto.TranslateResult, error) {
result := dto.TranslateResult{}
responseData := TransTranslatorResponse[TransTranslatorResponseData]{}
route := fmt.Sprintf("/api/index/translate?token=%s", e.config.ApiKey)
params := map[string]string{
"keywords": text,
"sourceLanguage": sourceLang,
"targetLanguage": targetLang,
}
// Deepl API 翻译通常是 POST 请求到 /v2/translate
err := e.client.Post(route, params, nil, &responseData)
if err != nil {
return &result, fmt.Errorf("翻译请求出错: %w", err)
}
if responseData.Code != 1 {
return &result, fmt.Errorf("翻译失败,错误代码: %d msg: %s", responseData.Code, responseData.Message)
}
if responseData.Data.Text != "" {
result.TranslatedText = responseData.Data.Text
} else {
return &result, fmt.Errorf("翻译失败,返回数据为空")
}
return &result, nil
}
func (e *TransTranslator) GetRemainCount() (int, error) {
responseData := TransTranslatorResponse[TransTranslatorResponseNumData]{}
route := fmt.Sprintf("/api/index/getUserNums?token=%s", e.config.ApiKey)
// Deepl API 翻译通常是 POST 请求到 /v2/translate
err := e.client.Get(route, nil, &responseData)
if err != nil {
return 0, fmt.Errorf("翻译请求出错: %w", err)
}
if responseData.Code != 1 {
return 0, fmt.Errorf("翻译失败,错误代码: %d msg: %s", responseData.Code, responseData.Message)
}
result := responseData.Data.UseNum - responseData.Data.IsUsed
return result, nil
}
// 获取服务商
func (t *TransTranslator) GetPlatform() string {
return "trans"
}