| Crates.io | html-translation-lib |
| lib.rs | html-translation-lib |
| version | 0.1.0 |
| created_at | 2025-08-23 07:00:25.209175+00 |
| updated_at | 2025-08-23 07:00:25.209175+00 |
| description | 高性能HTML翻译库,专为网页本地化设计,提供智能缓存、并发批处理和内存优化功能 |
| homepage | https://github.com/qianlvzhe/html-translation-lib |
| repository | https://github.com/qianlvzhe/html-translation-lib |
| max_upload_size | |
| id | 1807275 |
| size | 5,125,137 |
一个专为网页本地化设计的高性能Rust HTML翻译库,提供智能文本识别、批量处理和先进的缓存优化功能。
[dependencies]
html-translation-lib = "0.1.0"
# 如果需要异步功能
tokio = { version = "1.0", features = ["full"] }
use html_translation_lib::{TranslationConfig, HtmlTranslator};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建翻译配置
let config = TranslationConfig::new()
.target_language("zh") // 翻译为中文
.api_url("http://localhost:1188/translate")
.enable_cache(true);
// 创建翻译器
let mut translator = HtmlTranslator::new(config).await?;
// 翻译HTML内容
let html = r#"<h1>Hello World</h1><p>Welcome to our website!</p>"#;
let translated_html = translator.translate_html(html).await?;
println!("{}", translated_html);
// 输出: <h1>你好世界</h1><p>欢迎来到我们的网站!</p>
Ok(())
}
use html_translation_lib::translate_html_content;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let html = r#"<h1>Hello</h1>"#;
let translated = translate_html_content(
html,
"zh",
Some("http://localhost:1188/translate")
).await?;
println!("{}", translated);
Ok(())
}
对于不支持异步的环境,可以使用同步API:
use html_translation_lib::translate_html_content_sync;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let html = r#"<h1>Hello World</h1>"#;
let translated = translate_html_content_sync(
html,
"zh",
Some("http://localhost:1188/translate")
)?;
println!("{}", translated);
Ok(())
}
这个库专门为与Monolith工具集成而设计:
use html_translation_lib::{TranslationConfig, translate_before_merge};
use markup5ever_rcdom::RcDom;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 解析HTML为DOM
let dom: RcDom = /* 从HTML文件解析的DOM */;
// 配置翻译参数
let config = TranslationConfig::new()
.target_language("zh")
.enable_cache(true);
// 在Monolith合并资源前翻译内容
let translated_dom = translate_before_merge(dom, config).await?;
// 现在可以传给Monolith进行资源合并
// monolith处理后将得到翻译好的单文件HTML
Ok(())
}
translate_before_merge()翻译DOM中的文本let config = TranslationConfig::new()
.target_language("zh") // 目标语言
.source_language("auto") // 源语言(auto为自动检测)
.api_url("http://localhost:1188/translate") // API地址
.enable_cache(true) // 启用缓存
.cache_ttl(Duration::from_secs(3600)) // 缓存TTL
.batch_size(20) // 批处理大小
.max_retries(3) // 最大重试次数
.timeout(Duration::from_secs(30)) // 请求超时
.use_indexing(true) // 启用索引标记
.min_text_length(2) // 最小翻译长度
.skip_code_blocks(true) // 跳过代码块
.api_key(Some("your-key".to_string())); // API密钥
目前支持以下翻译服务:
API请求格式:
{
"text": "要翻译的文本",
"source_lang": "auto",
"target_lang": "zh"
}
API响应格式:
{
"data": "翻译结果"
}
或
{
"translated_text": "翻译结果"
}
库会自动识别并跳过以下内容:
<script>, <style>, <code>, <pre>标签内容<, >, &等运行性能测试来体验优化效果:
cargo run --example performance_test --features async
🚀 HTML翻译库性能测试
📊 测试数据:
- HTML大小: 425 KB
- 包含 ~5000 个文本元素
🔍 DOM遍历性能对比:
- 原始递归收集器: 18ms, 收集到 8001 项
- 优化迭代收集器: 26ms, 收集到 8001 项
✨ 性能提升: 0.69x 倍速
💾 内存管理优化:
- 字符串池操作: 0ms
- 池大小: 小型=500, 大型=0, 总容量=11KB
🧠 智能缓存性能:
- 缓存操作时间: 1ms
- L1命中率: 100.0%
- 总命中率: 100.0%
⚡ 并发批处理性能:
- 批处理总时间: 14ms
- 处理成功率: 100.0%
- 平均处理时间: 13ms
- 吞吐量: 71.9 任务/秒
html-translation-lib/
├── pipeline/ # 文本处理管道
│ ├── collector # DOM文本收集器
│ ├── optimized_collector # 性能优化收集器
│ ├── concurrent_batch # 并发批处理器
│ └── filter # 智能文本过滤器
├── storage/ # 存储和缓存
│ ├── cache # 基础缓存管理
│ ├── smart_cache # 智能多层缓存
│ └── memory_pool # 内存池管理
├── config/ # 配置管理
└── core/ # 核心翻译逻辑
// 使用迭代器替代递归,避免栈溢出
let mut collector = OptimizedTextCollector::new();
let items = collector.collect_from_dom_optimized(&dom)?;
// 全局内存管理器,重用字符串对象
let memory_manager = Arc::new(GlobalMemoryManager::new());
let string = memory_manager.acquire_string(capacity);
// ... 使用字符串
memory_manager.release_string(string);
// L1+L2双层缓存架构
let mut cache_manager = SmartCacheManager::new(&config).await?;
cache_manager.set("text", "translation").await?;
let cached = cache_manager.get("text").await?;
// 优先级队列并发处理
let processor = ConcurrentBatchProcessor::new(config, memory_manager);
let task_id = processor.submit_batch(texts, Priority::High).await?;
let results = processor.process_queue(translation_fn).await?;
[dependencies]
html-translation-lib = { version = "0.1.0", features = ["async"] }
可用features:
async: 启用异步功能(默认)sync: 启用同步功能full: 启用所有功能项目包含多个完整示例:
examples/basic_translation.rs: 基本翻译功能演示examples/monolith_integration.rs: Monolith集成示例examples/sync_translation.rs: 同步API使用示例examples/performance_test.rs: 新增 - 性能优化效果演示运行示例:
cargo run --example basic_translation
cargo run --example monolith_integration
cargo run --example sync_translation
cargo run --example performance_test # 性能测试
use html_translation_lib::storage::GlobalMemoryManager;
use html_translation_lib::pipeline::{ConcurrentBatchProcessor, BatchConfig};
// 获取内存池统计
let memory_manager = Arc::new(GlobalMemoryManager::new());
let (pool_stats, _) = memory_manager.get_pool_stats();
println!("池大小: 小型={}, 大型={}",
pool_stats.small_pool_size,
pool_stats.large_pool_size);
// 获取批处理统计
let processor = ConcurrentBatchProcessor::new(BatchConfig::default(), memory_manager);
let stats = processor.get_stats().await;
println!("成功率: {:.1}%", stats.success_rate() * 100.0);
println!("吞吐量: {:.1} 任务/秒", stats.throughput());
git clone https://github.com/your-repo/html-translation-lib
cd html-translation-lib
cargo build
cargo test
# 生成API文档
cargo doc --open
# 或者查看已生成的文档
open docs/index.html # 精美的文档导航页面
本项目包含完整的API文档(107个HTML文件),支持:
本项目使用MIT许可证 - 详见 LICENSE 文件。
欢迎提交Issue和Pull Request!
如有问题或建议,请通过以下方式联系:
代码质量: 从6.5/10提升至9.0/10 ⬆️
注意: 使用前请确保翻译API服务正在运行。推荐使用DeepLX作为免费的翻译API服务。