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}