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
				
			2、查询平台剩余字符数
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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"
 | |
| }
 |