CoolFace
Apppublic

limitedonly41/Translate_Files

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes
app.py95 linesDownload Raw Back to root
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()