# Translation Library
[](https://crates.io/crates/translation-lib)
[](https://docs.rs/translation-lib)
[](LICENSE)
一个简单高效的 Rust 翻译库,支持文本和 HTML 翻译功能。
## 特性
- **多格式支持**: 支持纯文本、HTML 和 DOM 翻译
- **智能过滤**: 自动识别并跳过代码、URL、邮箱等不需要翻译的内容
- **并发翻译**: 基于 tokio 的异步并发处理
- **缓存机制**: 内置 LRU 缓存,避免重复翻译(可选)
- **错误处理**: 完善的错误处理和自动重试机制
- **语言检测**: 智能检测文本语言,避免不必要的翻译
## 安装
```toml
[dependencies]
translation-lib = "0.1.0"
# 如果需要 HTML 支持
translation-lib = { version = "0.1.0", features = ["html-support"] }
# 如果需要缓存功能
translation-lib = { version = "0.1.0", features = ["cache"] }
# 启用所有功能
translation-lib = { version = "0.1.0", features = ["html-support", "cache"] }
```
## 快速开始
### 基本使用
```rust
use translation_lib::{Translator, TranslationConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = TranslationConfig::new("YOUR_API_URL".to_string())
.with_api_key("YOUR_API_KEY".to_string());
let translator = Translator::new(config)?;
// 文本翻译
let result = translator.translate_text("Hello, world!", "zh").await?;
println!("翻译结果: {}", result);
Ok(())
}
```
### 使用环境变量
```rust
use translation_lib::translate_text_simple;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 设置环境变量
// export TRANSLATION_API_URL="your-api-url"
// export TRANSLATION_API_KEY="your-api-key"
let result = translate_text_simple("Hello", "zh").await?;
println!("快速翻译: {}", result);
Ok(())
}
```
### HTML 翻译
```rust
use translation_lib::{Translator, TranslationConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = TranslationConfig::new("YOUR_API_URL".to_string());
let translator = Translator::new(config)?;
let html = r#"<p>Hello <span>World</span></p>"#;
let translated_html = translator.translate_html(html, "zh").await?;
println!("HTML翻译: {}", translated_html);
Ok(())
}
```
## 配置选项
```rust
use translation_lib::TranslationConfig;
use std::time::Duration;
let config = TranslationConfig::new("YOUR_API_URL".to_string())
.with_api_key("YOUR_API_KEY".to_string())
.with_timeout(Duration::from_secs(30))
.with_max_concurrent(5)
.with_cache(true);
```
### 环境变量
- `TRANSLATION_API_URL`: 翻译 API 地址
- `TRANSLATION_API_KEY`: API 密钥(如果需要)
- `TRANSLATION_TIMEOUT`: 请求超时时间(秒)
- `TRANSLATION_MAX_CONCURRENT`: 最大并发请求数
- `TRANSLATION_ENABLE_CACHE`: 是否启用缓存(true/false)
## API 接口
### 主要结构
- `Translator`: 核心翻译器
- `TranslationConfig`: 配置结构
- `TranslationError`: 错误类型
### 主要方法
- `translate_text(text, target_lang)`: 翻译文本
- `translate_html(html, target_lang)`: 翻译 HTML(需要 html-support 特性)
- `translate_texts(texts, target_lang)`: 批量翻译
### 便利函数
- `translate_text_simple(text, target_lang)`: 简单文本翻译
- `translate_html_simple(html, target_lang)`: 简单 HTML 翻译
- `should_translate(text, target_lang)`: 检查是否需要翻译
- `analyze_text(text)`: 分析文本特征
## 智能过滤
库会自动跳过以下类型的内容:
- URL 链接
- 邮箱地址
- 代码片段
- 已经是目标语言的文本
- 空文本
## 错误处理
```rust
use translation_lib::{TranslationError, TranslationResult};
match translator.translate_text("Hello", "zh").await {
Ok(result) => println!("翻译成功: {}", result),
Err(TranslationError::Network(msg)) => println!("网络错误: {}", msg),
Err(TranslationError::Api(msg)) => println!("API错误: {}", msg),
Err(TranslationError::RateLimit) => println!("请求频率过高"),
Err(e) => println!("其他错误: {}", e),
}
```
## 许可证
MIT OR Apache-2.0
## 贡献
欢迎提交 Issue 和 Pull Request!