use html_translation_lib::translate_html_content_sync;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("HTML翻译库 - 同步使用示例");
println!("{}", "=".repeat(50));
let html_content = r#"
<html>
<head>
<title>Synchronous Translation Example</title>
</head>
<body>
<h1>Welcome to Sync Translation</h1>
<p>This example demonstrates synchronous HTML translation.</p>
<p>The content will be translated without using async/await syntax.</p>
<section>
<h2>Benefits of Synchronous API</h2>
<ul>
<li>Easy integration with legacy code</li>
<li>No async runtime required</li>
<li>Simpler error handling</li>
<li>Compatible with blocking operations</li>
</ul>
</section>
<footer>
<p>Translation completed in synchronous mode.</p>
</footer>
</body>
</html>
"#;
println!("\n📄 原始HTML内容:");
println!("{}", "=".repeat(40));
println!("{}", html_content);
println!("{}", "=".repeat(40));
println!("\n🔄 开始同步翻译...");
let start_time = std::time::Instant::now();
let translated_html = translate_html_content_sync(
html_content,
"zh", Some("http://localhost:1188/translate") )?;
let duration = start_time.elapsed();
println!("✅ 翻译完成!耗时: {:?}", duration);
println!("\n📄 翻译后的HTML内容:");
println!("{}", "=".repeat(40));
println!("{}", translated_html);
println!("{}", "=".repeat(40));
std::fs::write("sync_translated.html", &translated_html)?;
println!("\n💾 翻译结果已保存到: sync_translated.html");
println!("\n📊 处理摘要:");
println!(" 原文长度: {} 字符", html_content.len());
println!(" 译文长度: {} 字符", translated_html.len());
println!(" 处理时间: {:?}", duration);
println!("\n🧪 演示错误处理...");
match translate_html_content_sync("", "zh", Some("http://invalid-url")) {
Ok(_) => println!("意外成功"),
Err(e) => println!("✅ 正确捕获错误: {}", e),
}
println!("\n🎉 同步翻译示例完成!");
Ok(())
}
fn process_html_file(file_path: &str) -> Result<String, Box<dyn std::error::Error>> {
println!("📁 处理文件: {}", file_path);
let content = std::fs::read_to_string(file_path)?;
let translated = translate_html_content_sync(
&content,
"zh",
Some("http://localhost:1188/translate")
)?;
Ok(translated)
}
fn batch_process_files(file_paths: &[&str]) -> Result<Vec<String>, Box<dyn std::error::Error>> {
let mut results = Vec::new();
for &path in file_paths {
match process_html_file(path) {
Ok(translated) => {
results.push(translated);
println!("✅ 成功处理: {}", path);
}
Err(e) => {
println!("❌ 处理失败 {}: {}", path, e);
}
}
}
Ok(results)
}