Files
voidraft/internal/common/translator/translator.go
2025-07-06 23:41:15 +08:00

87 lines
2.4 KiB
Go

// Package translator 提供文本翻译功能
package translator
import (
"fmt"
"time"
"golang.org/x/text/language"
)
// TranslationParams 用于指定翻译参数
type TranslationParams struct {
From string // 源语言
To string // 目标语言
Timeout time.Duration // 超时时间
}
// 常量定义
const (
defaultTimeout = 30 * time.Second
)
// TranslatorType 翻译器类型
type TranslatorType string
const (
// GoogleTranslatorType 谷歌翻译器
GoogleTranslatorType TranslatorType = "google"
// BingTranslatorType 必应翻译器
BingTranslatorType TranslatorType = "bing"
// YoudaoTranslatorType 有道翻译器
YoudaoTranslatorType TranslatorType = "youdao"
// DeeplTranslatorType DeepL翻译器
DeeplTranslatorType TranslatorType = "deepl"
)
// LanguageInfo 语言信息结构体
type LanguageInfo struct {
Code string // 语言代码
Name string // 语言名称
}
// Translator 翻译器接口,定义所有翻译器必须实现的方法
type Translator interface {
// Translate 使用Go语言提供的标准语言标签进行文本翻译
Translate(text string, from language.Tag, to language.Tag) (string, error)
// TranslateWithParams 使用简单字符串参数进行文本翻译
TranslateWithParams(text string, params TranslationParams) (string, error)
// SetTimeout 设置请求超时时间
SetTimeout(timeout time.Duration)
// GetSupportedLanguages 获取翻译器支持的语言列表
GetSupportedLanguages() map[string]LanguageInfo
// IsLanguageSupported 检查指定的语言代码是否受支持
IsLanguageSupported(languageCode string) bool
// GetStandardLanguageCode 获取标准化的语言代码
GetStandardLanguageCode(languageCode string) string
}
// TranslatorFactory 翻译器工厂,用于创建不同类型的翻译器
type TranslatorFactory struct{}
// NewTranslatorFactory 创建一个新的翻译器工厂
func NewTranslatorFactory() *TranslatorFactory {
return &TranslatorFactory{}
}
// Create 根据类型创建翻译器
func (f *TranslatorFactory) Create(translatorType TranslatorType) (Translator, error) {
switch translatorType {
case GoogleTranslatorType:
return NewGoogleTranslator(), nil
case BingTranslatorType:
return NewBingTranslator(), nil
case YoudaoTranslatorType:
return NewYoudaoTranslator(), nil
case DeeplTranslatorType:
return NewDeeplTranslator(), nil
default:
return nil, fmt.Errorf("unsupported translator type: %s", translatorType)
}
}