html-translation-lib 0.1.0

高性能HTML翻译库,专为网页本地化设计,提供智能缓存、并发批处理和内存优化功能
Documentation
//! 基本翻译示例
//! 
//! 演示如何使用HTML翻译库进行基本的HTML内容翻译

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")  // DeepLX API地址
        .enable_cache(true)     // 启用缓存
        .batch_size(20)         // 批处理大小
        .max_retries(3);        // 最大重试次数
    
    println!("✓ 翻译配置创建完成");
    
    // 创建翻译器
    let mut translator = HtmlTranslator::new(config).await?;
    println!("✓ 翻译器初始化完成");
    
    // 示例HTML内容 - 使用字符串连接来避免标识符冲突
    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>&copy; 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);
}