translation-lib 0.1.1

A simple and efficient translation library for Rust
Documentation
# Translation Library

[![Crates.io](https://img.shields.io/crates/v/translation-lib.svg)](https://crates.io/crates/translation-lib)
[![Documentation](https://docs.rs/translation-lib/badge.svg)](https://docs.rs/translation-lib)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-blue.svg)](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!