use html_translation_lib::{TranslationConfig, HtmlTranslator, TranslationResult};
#[tokio::main]
async fn main() -> TranslationResult<()> {
tracing_subscriber::fmt::init();
println!("HTML翻译库 - 基本使用示例");
println!("{}", "=".repeat(50));
let config = TranslationConfig::new()
.target_language("zh") .api_url("http://localhost:1188/translate") .enable_cache(true) .batch_size(20) .max_retries(3);
println!("✓ 翻译配置创建完成");
let mut translator = HtmlTranslator::new(config).await?;
println!("✓ 翻译器初始化完成");
let sample_html = format!(r##"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to Our Website</title>
<meta name="description" content="This is a sample webpage for translation testing">
</head>
<body>
<header>
<h1>Welcome to Our Amazing Website</h1>
<nav>
<a href="{}home" title="Go to home page">Home</a>
<a href="{}about" title="Learn about us">About</a>
<a href="{}contact" title="Get in touch">Contact</a>
</nav>
</header>
<main>
<section id="hero">
<h2>Discover Something New Today</h2>
<p>We provide innovative solutions for your business needs.
Our team of experts is dedicated to helping you succeed.</p>
<button>Get Started Now</button>
</section>
<section id="features">
<h3>Our Features</h3>
<div class="feature">
<h4>Fast Performance</h4>
<p>Lightning-fast load times for better user experience.</p>
</div>
<div class="feature">
<h4>Secure & Reliable</h4>
<p>Your data is protected with enterprise-grade security.</p>
</div>
<div class="feature">
<h4>24/7 Support</h4>
<p>Round-the-clock customer support whenever you need help.</p>
</div>
</section>
<section id="contact">
<h3>Contact Us</h3>
<form>
<label for="name">Your Name:</label>
<input type="text" id="name" name="name" placeholder="Enter your name" required>
<label for="email">Email Address:</label>
<input type="email" id="email" name="email" placeholder="Enter your email" required>
<label for="message">Message:</label>
<textarea id="message" name="message" placeholder="Tell us how we can help you" required></textarea>
<button type="submit">Send Message</button>
</form>
</section>
</main>
<footer>
<p>© 2024 Our Company. All rights reserved.</p>
<img src="logo.png" alt="Company Logo" title="Our company logo">
</footer>
<script>
// This JavaScript code should not be translated
console.log('Page loaded successfully');
</script>
</body>
</html>
"##, "#", "#", "#");
println!("\n原始HTML内容长度: {} 字符", sample_html.len());
println!("\n🔄 开始翻译...");
let start_time = std::time::Instant::now();
let translated_html = translator.translate_html(&sample_html).await?;
let duration = start_time.elapsed();
println!("✅ 翻译完成!耗时: {:?}", duration);
let stats = translator.get_stats();
println!("\n📊 翻译统计:");
println!(" - 收集文本数量: {}", stats.texts_collected);
println!(" - 过滤后文本数量: {}", stats.texts_filtered);
println!(" - 缓存命中: {}", stats.cache_hits);
println!(" - 缓存未命中: {}", stats.cache_misses);
println!(" - 缓存命中率: {:.1}%", stats.cache_hit_rate() * 100.0);
println!(" - 创建批次数量: {}", stats.batches_created);
println!(" - 处理时间: {:?}", stats.processing_time);
std::fs::write("translated_example.html", &translated_html)?;
println!("\n💾 翻译结果已保存到: translated_example.html");
let preview_length = 500;
let preview = if translated_html.len() > preview_length {
format!("{}...", &translated_html[..preview_length])
} else {
translated_html.clone()
};
println!("\n📝 翻译结果预览:");
println!("{}", "=".repeat(60));
println!("{}", preview);
println!("{}", "=".repeat(60));
println!("\n📏 长度对比:");
println!(" 原文: {} 字符", sample_html.len());
println!(" 译文: {} 字符", translated_html.len());
println!(" 变化: {:.1}%",
(translated_html.len() as f32 / sample_html.len() as f32 - 1.0) * 100.0);
println!("\n🔄 演示文件翻译功能...");
std::fs::write("sample_input.html", &sample_html)?;
translator.translate_file("sample_input.html", "sample_output.html").await?;
println!("✅ 文件翻译完成: sample_input.html → sample_output.html");
println!("\n🎉 示例演示完成!");
Ok(())
}
#[allow(dead_code)]
fn show_library_info() {
let info = html_translation_lib::get_library_info();
println!("📚 库信息:");
println!(" 名称: {}", info.name);
println!(" 版本: {}", info.version);
println!(" 启用特性: {:?}", info.features);
}