async_translate/
translator.rs

1//! 翻译器trait定义
2
3use anyhow::Result;
4use unic_langid::LanguageIdentifier;
5
6/// 翻译器trait,定义了统一的翻译接口
7#[async_trait::async_trait]
8pub trait Translator: Send + Sync {
9    /// 翻译文本 (使用字符串语言代码)
10    ///
11    /// # 参数
12    ///
13    /// * `text` - 需要翻译的文本
14    /// * `target_lang` - 目标语言代码(如 "zh" 表示中文,"en" 表示英文)
15    ///
16    /// # 返回值
17    ///
18    /// 返回翻译后的文本,如果出错则返回错误信息
19    async fn translate(&self, text: &str, target_lang: &str) -> Result<String>;
20
21    /// 翻译文本 (使用 LanguageIdentifier)
22    ///
23    /// # 参数
24    ///
25    /// * `text` - 需要翻译的文本
26    /// * `target_lang` - 目标语言标识符
27    ///
28    /// # 返回值
29    ///
30    /// 返回翻译后的文本,如果出错则返回错误信息
31    async fn translate_langid(&self, text: &str, target_lang: &LanguageIdentifier) -> Result<String> {
32        self.translate(text, target_lang.to_string().as_str()).await
33    }
34
35    /// 翻译文本 (指定源语言和目标语言)
36    ///
37    /// # 参数
38    ///
39    /// * `text` - 需要翻译的文本
40    /// * `source_lang` - 源语言标识符 (None表示自动检测)
41    /// * `target_lang` - 目标语言标识符
42    ///
43    /// # 返回值
44    ///
45    /// 返回翻译后的文本,如果出错则返回错误信息
46    async fn translate_with_langid(&self, text: &str, _source_lang: Option<&LanguageIdentifier>, target_lang: &LanguageIdentifier) -> Result<String> {
47        // 默认实现忽略源语言参数,使用自动检测
48        self.translate_langid(text, target_lang).await
49    }
50}