#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 測試修復後的儲存格為單位翻譯邏輯 驗證 Excel 和 Word 表格的翻譯是否正確對應 """ import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) # 設定編碼 sys.stdout.reconfigure(encoding='utf-8') from pathlib import Path from app import create_app from app.services.translation_service import TranslationService def test_excel_cell_based_translation(): """測試Excel儲存格為單位的翻譯邏輯""" print("=" * 80) print("測試Excel儲存格為單位翻譯邏輯") print("=" * 80) app = create_app() with app.app_context(): service = TranslationService() # 測試案例1: 泰文翻譯 (之前D4, H2缺失) print(f"\n1. 測試泰文翻譯儲存格方法") print("-" * 60) # 模擬D4儲存格內容 d4_text = "WB inline" d4_translated = service.translate_excel_cell( text=d4_text, source_language="zh", target_language="th", user_id=1 ) print(f"D4原文: {repr(d4_text)}") print(f"D4泰文: {repr(d4_translated)}") # 模擬H2儲存格內容 h2_text = "製程" h2_translated = service.translate_excel_cell( text=h2_text, source_language="zh", target_language="th", user_id=1 ) print(f"H2原文: {repr(h2_text)}") print(f"H2泰文: {repr(h2_translated)}") # 測試案例2: 韓文翻譯 (之前D2-D8缺失) print(f"\n2. 測試韓文翻譯儲存格方法") print("-" * 60) # 模擬D2儲存格內容 (多行格式) d2_text = "WB inline\nDC: 1000V\n@25°C Tstg: -55°C to +125°C" d2_translated = service.translate_excel_cell( text=d2_text, source_language="zh", target_language="ko", user_id=1 ) print(f"D2原文: {repr(d2_text)}") print(f"D2韓文: {repr(d2_translated[:60])}...") # 檢查是否使用了原始DIFY翻譯的特徵 if "와이어 본딩" in d2_translated: print(f" 🎯 ✅ 使用了原始DIFY翻譯特徵") elif "연결" in d2_translated: print(f" ✋ ❌ 仍使用手動補充翻譯") else: print(f" ❓ 翻譯來源不明") def test_word_table_cell_translation(): """測試Word表格儲存格為單位的翻譯邏輯""" print(f"\n" + "=" * 80) print("測試Word表格儲存格為單位翻譯邏輯") print("=" * 80) app = create_app() with app.app_context(): service = TranslationService() print(f"\n1. 測試Word表格儲存格翻譯方法") print("-" * 60) # 測試案例: Word表格儲存格包含多段落的情況 cell_text = "超温\n存放\n工务部" cell_translated = service.translate_word_table_cell( text=cell_text, source_language="zh", target_language="th", user_id=1 ) print(f"表格儲存格原文: {repr(cell_text)}") print(f"表格儲存格泰文: {repr(cell_translated)}") # 另一個案例: 單段落儲存格 single_cell = "製程控制" single_translated = service.translate_word_table_cell( text=single_cell, source_language="zh", target_language="ko", user_id=1 ) print(f"\n單段落儲存格原文: {repr(single_cell)}") print(f"單段落儲存格韓文: {repr(single_translated)}") def test_translation_cache_mapping(): """測試翻譯快取與儲存格的對應關係""" print(f"\n" + "=" * 80) print("測試翻譯快取與儲存格的對應關係") print("=" * 80) app = create_app() with app.app_context(): from sqlalchemy import text as sql_text from app import db # 檢查之前提到的快取記錄是否能正確對應 print(f"\n1. 檢查泰文翻譯快取記錄") print("-" * 60) # D4對應的ROW 392, 393 d4_cache = db.session.execute(sql_text(""" SELECT id, source_text, translated_text, created_at FROM dt_translation_cache WHERE id IN (392, 393) AND target_language = 'th' ORDER BY id """)).fetchall() for row in d4_cache: print(f"ROW {row[0]}: {repr(row[1][:30])}... -> {repr(row[2][:30])}...") # H2對應的ROW 381-385 h2_cache = db.session.execute(sql_text(""" SELECT id, source_text, translated_text, created_at FROM dt_translation_cache WHERE id BETWEEN 381 AND 385 AND target_language = 'th' ORDER BY id """)).fetchall() print(f"\nH2相關快取記錄:") for row in h2_cache: print(f"ROW {row[0]}: {repr(row[1][:20])}... -> {repr(row[2][:20])}...") def main(): """主測試函數""" print("🧪 開始測試儲存格為單位的翻譯邏輯") print("預期: 翻譯不再進行切片,整個儲存格作為單位處理") try: # 測試Excel儲存格翻譯 test_excel_cell_based_translation() # 測試Word表格儲存格翻譯 test_word_table_cell_translation() # 測試快取對應關係 test_translation_cache_mapping() print(f"\n" + "=" * 80) print("✅ 儲存格為單位翻譯邏輯測試完成!") print("📊 總結:") print(" - Excel: 使用 translate_excel_cell() 方法") print(" - Word表格: 使用 translate_word_table_cell() 方法") print(" - 兩者都不進行內容切片,保持儲存格完整性") print("=" * 80) except Exception as e: print(f"❌ 測試過程中發生錯誤: {str(e)}") import traceback print(f"錯誤詳情: {traceback.format_exc()}") if __name__ == "__main__": main()