limitedonly41/Translate_Files
1
1import gradio as gr2import os3import shutil4from docx import Document5from pptx import Presentation6import openai7 8def translate_document(file, target_language, target_country, api_key):9 log_messages = []10 output_path = None # 初始化 output_path11 12 try:13 log_messages.append("Starting translation process...")14 15 # 複製文件到新文件16 original_file_path = file.name17 copied_file_path = "copy_" + os.path.basename(original_file_path)18 shutil.copy(original_file_path, copied_file_path)19 log_messages.append(f"Copied file to {copied_file_path}")20 21 openai.api_key = api_key # 設定 OpenAI API 金鑰22 23 # 處理 .docx 文件24 if copied_file_path.endswith(".docx"):25 doc = Document(copied_file_path)26 27 # 翻譯並替換段落文本28 for paragraph in doc.paragraphs:29 if paragraph.text.strip(): # 只翻譯非空段落30 translated_text = openai.ChatCompletion.create(31 model="gpt-3.5-turbo",32 messages=[{"role": "user", "content": f"Translate this to {target_language}: {paragraph.text}"}]33 )["choices"][0]["message"]["content"]34 paragraph.text = translated_text # 用翻譯後的文本替換原始文本35 36 # 處理表格中的文本37 for table in doc.tables:38 for row in table.rows:39 for cell in row.cells:40 if cell.text.strip(): # 只翻譯非空單元格41 translated_text = openai.ChatCompletion.create(42 model="gpt-3.5-turbo",43 messages=[{"role": "user", "content": f"Translate this to {target_language}: {cell.text}"}]44 )["choices"][0]["message"]["content"]45 cell.text = translated_text # 用翻譯後的文本替換原始文本46 47 output_path = "translated_" + os.path.basename(original_file_path)48 doc.save(output_path)49 log_messages.append(f"Saved translated document as {output_path}.")50 51 # 處理 .pptx 文件52 elif copied_file_path.endswith(".pptx"):53 prs = Presentation(copied_file_path)54 55 # 翻譯並替換文本56 for slide in prs.slides:57 for shape in slide.shapes:58 if hasattr(shape, "text") and shape.text.strip(): # 只翻譯非空文本框59 translated_text = openai.ChatCompletion.create(60 model="gpt-3.5-turbo",61 messages=[{"role": "user", "content": f"Translate this to {target_language}: {shape.text}"}]62 )["choices"][0]["message"]["content"]63 shape.text = translated_text # 用翻譯後的文本替換原始文本64 65 output_path = "translated_" + os.path.basename(original_file_path)66 prs.save(output_path)67 log_messages.append(f"Saved translated presentation as {output_path}.")68 69 else:70 log_messages.append("Unsupported file type. Please upload a .docx or .pptx file.")71 return None, "\n".join(log_messages) # 返回 None 如果文件類型不支持72 73 return output_path, "\n".join(log_messages) # 返回文件路徑和日誌信息74 75 except Exception as e:76 log_messages.append(f"An error occurred: {e}")77 return None, "\n".join(log_messages) # 返回 None 和日誌78 79iface = gr.Interface(80 fn=translate_document,81 inputs=[82 gr.File(label="上傳文件 (.docx 或 .pptx)"),83 gr.Dropdown(choices=["English", "Spanish", "French", "German", "Japanese", "Korean", "Chinese", "Vietnamese"], label="Target Language"),84 gr.Dropdown(choices=["US", "UK", "ES", "FR", "DE", "JP", "KR", "TW", "VN"], label="Target Country"),85 gr.Textbox(label="API 金鑰(必填)", placeholder="請輸入您的 OpenAI API 金鑰")86 ],87 outputs=[88 gr.File(label="Download Translated Document"),89 gr.Textbox(label="Log Output", lines=10) # 添加一個文本框來顯示日誌信息90 ],91 title="Document Translator",92 description="Translate your documents while preserving the original format.",93)94 95iface.launch()