"""
智能翻译软件 - 带GUI界面
开发者: 卢思成
学校: 东台市第一小学
班级: 六（10）班
学号: 19号
版本: 1.1
"""

import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
import requests
import json
import threading
import time
import hashlib
import urllib.parse
import random
import sys


class TranslatorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("智能翻译软件 - 卢思成制作")
        self.root.geometry("900x680")
        self.root.configure(bg='#f0f0f0')

        # 开发者信息
        self.developer_info = {
            "name": "卢思成",
            "school": "东台市第一小学",
            "class": "六（10）班",
            "number": "19号"
        }

        # 翻译API配置
        self.app_id = "20230601001712345"
        self.app_key = "your_app_key_here"

        # 语言列表
        self.languages = {
            "中文": "zh",
            "英语": "en",
            "日语": "jp",
            "韩语": "kor",
            "法语": "fra",
            "德语": "de",
            "西班牙语": "spa",
            "俄语": "rus",
            "阿拉伯语": "ara",
            "葡萄牙语": "pt",
            "意大利语": "it",
            "荷兰语": "nl",
            "泰语": "th",
            "越南语": "vie",
            "印尼语": "id",
            "马来语": "ms",
            "菲律宾语": "fil",
            "土耳其语": "tr",
            "希腊语": "el",
            "波兰语": "pl",
            "捷克语": "cs",
            "瑞典语": "sv",
            "丹麦语": "da",
            "芬兰语": "fi",
            "挪威语": "no",
            "匈牙利语": "hu",
            "罗马尼亚语": "ro",
            "乌克兰语": "uk",
            "希伯来语": "he",
            "印地语": "hi"
        }

        # 翻译历史
        self.history = []
        self.history_file = "translation_history.json"
        self.load_history()

        # 创建界面
        self.create_widgets()

        # 显示欢迎信息
        self.show_welcome()

        # 窗口关闭事件
        self.root.protocol("WM_DELETE_WINDOW", self.on_closing)

    def create_widgets(self):
        """创建界面组件"""
        # 标题栏
        title_frame = tk.Frame(self.root, bg='#2C3E50', height=60)
        title_frame.pack(side=tk.TOP, fill=tk.X)
        title_frame.pack_propagate(False)

        # 使用普通文本而不是表情符号
        title_label = tk.Label(title_frame, text="智能翻译软件",
                               font=("Microsoft YaHei", 18, "bold"), bg='#2C3E50', fg='white')
        title_label.pack(side=tk.LEFT, padx=20, pady=10)

        # 开发者信息
        dev_label = tk.Label(title_frame,
                             text=f"开发者: {self.developer_info['name']} | {self.developer_info['school']} {self.developer_info['class']} {self.developer_info['number']}",
                             font=("Microsoft YaHei", 9), bg='#2C3E50', fg='#BDC3C7')
        dev_label.pack(side=tk.RIGHT, padx=20)

        # 主容器
        main_frame = tk.Frame(self.root, bg='#f0f0f0')
        main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

        # 语言选择区域
        lang_frame = tk.Frame(main_frame, bg='white',
                              relief=tk.RAISED, borderwidth=1)
        lang_frame.pack(fill=tk.X, pady=(0, 10))

        # 源语言
        tk.Label(lang_frame, text="从:", font=("Microsoft YaHei", 11),
                 bg='white').pack(side=tk.LEFT, padx=(20, 5), pady=15)
        self.source_lang = ttk.Combobox(lang_frame, values=list(self.languages.keys()),
                                        state="readonly", width=15, font=("Microsoft YaHei", 10))
        self.source_lang.pack(side=tk.LEFT, padx=5)
        self.source_lang.set("中文")
        self.source_lang.bind('<<ComboboxSelected>>', self.on_language_change)

        # 交换按钮
        swap_btn = tk.Button(lang_frame, text="<=>", command=self.swap_languages,
                             font=("Microsoft YaHei", 14), bg='#3498DB', fg='white',
                             width=3, height=1)
        swap_btn.pack(side=tk.LEFT, padx=20)

        # 目标语言
        tk.Label(lang_frame, text="到:", font=("Microsoft YaHei", 11),
                 bg='white').pack(side=tk.LEFT, padx=5, pady=15)
        self.target_lang = ttk.Combobox(lang_frame, values=list(self.languages.keys()),
                                        state="readonly", width=15, font=("Microsoft YaHei", 10))
        self.target_lang.pack(side=tk.LEFT, padx=5)
        self.target_lang.set("英语")
        self.target_lang.bind('<<ComboboxSelected>>', self.on_language_change)

        # 自动检测复选框
        self.auto_detect = tk.BooleanVar(value=True)
        auto_check = tk.Checkbutton(lang_frame, text="自动检测语言", variable=self.auto_detect,
                                    font=("Microsoft YaHei", 10), bg='white')
        auto_check.pack(side=tk.LEFT, padx=20)

        # 输入输出区域
        io_frame = tk.Frame(main_frame, bg='white',
                            relief=tk.RAISED, borderwidth=1)
        io_frame.pack(fill=tk.BOTH, expand=True)

        # 输入区域
        input_frame = tk.Frame(io_frame, bg='white')
        input_frame.pack(side=tk.LEFT, fill=tk.BOTH,
                         expand=True, padx=(10, 5), pady=10)

        tk.Label(input_frame, text="输入文本:", font=("Microsoft YaHei", 12, "bold"),
                 bg='white', fg='#2C3E50').pack(anchor=tk.W)

        self.input_text = scrolledtext.ScrolledText(input_frame, font=("Microsoft YaHei", 11),
                                                    height=12, width=40, wrap=tk.WORD)
        self.input_text.pack(fill=tk.BOTH, expand=True, pady=(5, 10))
        self.input_text.bind('<KeyRelease>', self.on_text_change)

        # 快捷短语
        quick_frame = tk.Frame(input_frame, bg='white')
        quick_frame.pack(fill=tk.X)

        quick_phrases = ["你好", "谢谢", "再见", "对不起", "我爱你", "早上好"]
        for phrase in quick_phrases:
            btn = tk.Button(quick_frame, text=phrase, command=lambda p=phrase: self.insert_phrase(p),
                            font=("Microsoft YaHei", 9), bg='#ECF0F1', padx=5)
            btn.pack(side=tk.LEFT, padx=2)

        # 分隔线
        separator = tk.Frame(io_frame, bg='#BDC3C7', width=2)
        separator.pack(side=tk.LEFT, fill=tk.Y, padx=5, pady=10)

        # 输出区域
        output_frame = tk.Frame(io_frame, bg='white')
        output_frame.pack(side=tk.LEFT, fill=tk.BOTH,
                          expand=True, padx=(5, 10), pady=10)

        tk.Label(output_frame, text="翻译结果:", font=("Microsoft YaHei", 12, "bold"),
                 bg='white', fg='#2C3E50').pack(anchor=tk.W)

        self.output_text = scrolledtext.ScrolledText(output_frame, font=("Microsoft YaHei", 11),
                                                     height=12, width=40, wrap=tk.WORD,
                                                     bg='#F8F9FA', fg='#2C3E50')
        self.output_text.pack(fill=tk.BOTH, expand=True, pady=(5, 10))

        # 操作按钮
        btn_frame = tk.Frame(output_frame, bg='white')
        btn_frame.pack(fill=tk.X)

        self.translate_btn = tk.Button(btn_frame, text="翻译", command=self.translate_text,
                                       font=("Microsoft YaHei", 11, "bold"), bg='#3498DB', fg='white',
                                       width=15, height=2)
        self.translate_btn.pack(side=tk.LEFT, padx=5)

        tk.Button(btn_frame, text="复制", command=self.copy_result,
                  font=("Microsoft YaHei", 10), bg='#2ECC71', fg='white', width=10).pack(side=tk.LEFT, padx=5)

        tk.Button(btn_frame, text="朗读", command=self.text_to_speech,
                  font=("Microsoft YaHei", 10), bg='#E67E22', fg='white', width=10).pack(side=tk.LEFT, padx=5)

        tk.Button(btn_frame, text="清空", command=self.clear_all,
                  font=("Microsoft YaHei", 10), bg='#E74C3C', fg='white', width=10).pack(side=tk.LEFT, padx=5)

        # 底部功能区域
        bottom_frame = tk.Frame(main_frame, bg='white',
                                relief=tk.RAISED, borderwidth=1)
        bottom_frame.pack(fill=tk.X, pady=(10, 0))

        # 选项卡
        tab_frame = tk.Frame(bottom_frame, bg='white')
        tab_frame.pack(fill=tk.X, padx=10, pady=5)

        # 历史记录按钮
        history_btn = tk.Button(tab_frame, text="历史记录", command=self.show_history,
                                font=("Microsoft YaHei", 10), bg='#9B59B6', fg='white')
        history_btn.pack(side=tk.LEFT, padx=5)

        # 收藏按钮
        favorite_btn = tk.Button(tab_frame, text="收藏夹", command=self.show_favorites,
                                 font=("Microsoft YaHei", 10), bg='#F39C12', fg='white')
        favorite_btn.pack(side=tk.LEFT, padx=5)

        # 批量翻译按钮
        batch_btn = tk.Button(tab_frame, text="批量翻译", command=self.batch_translate,
                              font=("Microsoft YaHei", 10), bg='#1ABC9C', fg='white')
        batch_btn.pack(side=tk.LEFT, padx=5)

        # 设置按钮
        settings_btn = tk.Button(tab_frame, text="设置", command=self.show_settings,
                                 font=("Microsoft YaHei", 10), bg='#7F8C8D', fg='white')
        settings_btn.pack(side=tk.LEFT, padx=5)

        # 状态栏
        self.status_bar = tk.Label(self.root, text="就绪", bd=1, relief=tk.SUNKEN, anchor=tk.W,
                                   font=("Microsoft YaHei", 9), bg='#2C3E50', fg='white')
        self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)

        # 绑定快捷键
        self.root.bind('<Control-Return>', lambda e: self.translate_text())
        self.root.bind('<Control-c>', lambda e: self.copy_result())
        self.root.bind('<Control-l>', lambda e: self.clear_all())

    def show_welcome(self):
        """显示欢迎信息"""
        welcome_text = f"""
欢迎使用智能翻译软件！

开发者: {self.developer_info['name']}
学校: {self.developer_info['school']}
班级: {self.developer_info['class']}
学号: {self.developer_info['number']}

功能特点:
1. 支持30种语言互译
2. 自动检测输入语言
3. 翻译历史记录
4. 收藏常用翻译
5. 批量翻译功能
6. 文本朗读功能

快捷键:
Ctrl+Enter: 翻译
Ctrl+C: 复制结果
Ctrl+L: 清空内容

请在上方输入文本开始翻译！
        """

        self.input_text.insert(
            tk.END, "Hello, welcome to the intelligent translation software!")
        self.translate_text()

    def insert_phrase(self, phrase):
        """插入快捷短语"""
        self.input_text.delete(1.0, tk.END)
        self.input_text.insert(tk.END, phrase)
        self.translate_text()

    def on_text_change(self, event=None):
        """文本变化事件"""
        if hasattr(self, '_translate_timer'):
            self.root.after_cancel(self._translate_timer)
        self._translate_timer = self.root.after(1000, self.auto_translate)

    def auto_translate(self):
        """自动翻译"""
        text = self.input_text.get(1.0, tk.END).strip()
        if text:
            self.translate_text()

    def on_language_change(self, event=None):
        """语言选择变化"""
        text = self.input_text.get(1.0, tk.END).strip()
        if text:
            self.translate_text()

    def swap_languages(self):
        """交换源语言和目标语言"""
        source = self.source_lang.get()
        target = self.target_lang.get()
        self.source_lang.set(target)
        self.target_lang.set(source)

        input_text = self.input_text.get(1.0, tk.END).strip()
        output_text = self.output_text.get(1.0, tk.END).strip()

        self.input_text.delete(1.0, tk.END)
        self.output_text.delete(1.0, tk.END)

        if output_text:
            self.input_text.insert(tk.END, output_text)

        if input_text:
            self.translate_text()

    def translate_text(self):
        """翻译文本"""
        text = self.input_text.get(1.0, tk.END).strip()

        if not text:
            messagebox.showwarning("提示", "请输入要翻译的文本")
            return

        self.translate_btn.config(state=tk.DISABLED, text="翻译中...")
        self.status_bar.config(text="正在翻译...")

        thread = threading.Thread(target=self._do_translate, args=(text,))
        thread.daemon = True
        thread.start()

    def _do_translate(self, text):
        """执行翻译"""
        try:
            from_lang = self.languages[self.source_lang.get()]
            to_lang = self.languages[self.target_lang.get()]

            if self.auto_detect.get():
                from_lang = "auto"

            result = self.call_translate_api(text, from_lang, to_lang)

            self.root.after(0, self._update_result, result)

        except Exception as e:
            self.root.after(0, self._show_error, str(e))

    def call_translate_api(self, text, from_lang, to_lang):
        """调用翻译API"""
        try:
            url = "https://fanyi.baidu.com/sug"
            data = {"kw": text}
            headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
            }

            response = requests.post(
                url, data=data, headers=headers, timeout=5)

            if response.status_code == 200:
                result = response.json()
                if result.get('data'):
                    translations = [item['v'] for item in result['data']]
                    return '\n'.join(translations)

            return self.local_translate(text, from_lang, to_lang)

        except:
            return self.local_translate(text, from_lang, to_lang)

    def local_translate(self, text, from_lang, to_lang):
        """本地简单翻译"""
        dictionary = {
            "hello": "你好",
            "world": "世界",
            "thank you": "谢谢你",
            "goodbye": "再见",
            "love": "爱",
            "friend": "朋友",
            "family": "家庭",
            "school": "学校",
            "teacher": "老师",
            "student": "学生",
            "book": "书",
            "water": "水",
            "food": "食物",
            "time": "时间",
            "day": "天",
            "night": "夜晚",
            "sun": "太阳",
            "moon": "月亮",
            "star": "星星",
            "sky": "天空",
            "welcome": "欢迎",
            "please": "请",
            "sorry": "对不起",
            "yes": "是的",
            "no": "不是",
            "good": "好的",
            "bad": "坏的",
            "big": "大的",
            "small": "小的",
            "new": "新的",
            "old": "旧的",
            "hot": "热的",
            "cold": "冷的",
            "happy": "快乐的",
            "sad": "悲伤的",
            "beautiful": "美丽的",
            "handsome": "英俊的",
            "smart": "聪明的",
            "strong": "强壮的",
            "fast": "快的",
            "slow": "慢的"
        }

        reverse_dict = {v: k for k, v in dictionary.items()}

        text_lower = text.lower().strip()

        if text_lower in dictionary:
            return dictionary[text_lower]
        elif text_lower in reverse_dict:
            return reverse_dict[text_lower]

        if from_lang == "zh" or from_lang == "auto":
            chinese_chars = {
                "我": "I/me",
                "你": "you",
                "他": "he/him",
                "她": "she/her",
                "它": "it",
                "们": "(plural)",
                "是": "is/are",
                "在": "in/at",
                "有": "have/has",
                "和": "and",
                "也": "also",
                "不": "not/no",
                "很": "very",
                "好": "good",
                "大": "big",
                "小": "small",
                "多": "many",
                "少": "few",
                "来": "come",
                "去": "go",
                "看": "see/look",
                "听": "listen",
                "说": "speak",
                "吃": "eat",
                "喝": "drink",
                "走": "walk",
                "跑": "run",
                "坐": "sit",
                "站": "stand",
                "开": "open",
                "关": "close",
                "买": "buy",
                "卖": "sell",
                "给": "give",
                "拿": "take",
                "放": "put",
                "找": "find",
                "问": "ask",
                "答": "answer",
                "笑": "laugh",
                "哭": "cry"
            }

            result = []
            for char in text:
                if char in chinese_chars:
                    result.append(chinese_chars[char])
                else:
                    result.append(char)

            if result:
                return " ".join(result)

        return f"[本地翻译] {text}\n\n提示：请检查网络连接以获取更准确的翻译"

    def _update_result(self, result):
        """更新翻译结果"""
        self.output_text.delete(1.0, tk.END)
        self.output_text.insert(tk.END, result)

        input_text = self.input_text.get(1.0, tk.END).strip()
        self.add_to_history(input_text, result)

        self.translate_btn.config(state=tk.NORMAL, text="翻译")
        self.status_bar.config(
            text=f"翻译完成 | 字数: {len(input_text)} | 目标语言: {self.target_lang.get()}")

    def _show_error(self, error_msg):
        """显示错误信息"""
        self.output_text.delete(1.0, tk.END)
        self.output_text.insert(tk.END, f"翻译失败: {error_msg}")

        self.translate_btn.config(state=tk.NORMAL, text="翻译")
        self.status_bar.config(text="翻译失败")

        messagebox.showerror("翻译错误", f"翻译过程中出现错误:\n{error_msg}")

    def copy_result(self):
        """复制翻译结果"""
        result = self.output_text.get(1.0, tk.END).strip()
        if result:
            self.root.clipboard_clear()
            self.root.clipboard_append(result)
            self.status_bar.config(text="已复制到剪贴板")
            messagebox.showinfo("复制成功", "翻译结果已复制到剪贴板")
        else:
            messagebox.showwarning("提示", "没有可复制的内容")

    def text_to_speech(self):
        """文本朗读"""
        try:
            import pyttsx3
            text = self.output_text.get(1.0, tk.END).strip()
            if text:
                engine = pyttsx3.init()
                engine.say(text)
                engine.runAndWait()
                self.status_bar.config(text="朗读完成")
            else:
                messagebox.showwarning("提示", "没有可朗读的内容")
        except ImportError:
            messagebox.showinfo(
                "提示", "请安装pyttsx3库以使用朗读功能:\npip install pyttsx3")
        except Exception as e:
            messagebox.showerror("朗读错误", f"朗读失败: {str(e)}")

    def clear_all(self):
        """清空所有内容"""
        self.input_text.delete(1.0, tk.END)
        self.output_text.delete(1.0, tk.END)
        self.status_bar.config(text="已清空")

    def add_to_history(self, source, result):
        """添加到历史记录"""
        record = {
            "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
            "source_lang": self.source_lang.get(),
            "target_lang": self.target_lang.get(),
            "source_text": source,
            "result_text": result
        }

        self.history.insert(0, record)

        if len(self.history) > 100:
            self.history = self.history[:100]

        self.save_history()

    def load_history(self):
        """加载历史记录"""
        try:
            with open(self.history_file, 'r', encoding='utf-8') as f:
                self.history = json.load(f)
        except:
            self.history = []

    def save_history(self):
        """保存历史记录"""
        try:
            with open(self.history_file, 'w', encoding='utf-8') as f:
                json.dump(self.history, f, ensure_ascii=False, indent=2)
        except:
            pass

    def show_history(self):
        """显示历史记录"""
        if not self.history:
            messagebox.showinfo("历史记录", "暂无翻译历史")
            return

        history_window = tk.Toplevel(self.root)
        history_window.title("翻译历史记录")
        history_window.geometry("700x500")
        history_window.transient(self.root)

        list_frame = tk.Frame(history_window)
        list_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

        columns = ("时间", "源语言", "目标语言", "原文", "译文")
        tree = ttk.Treeview(list_frame, columns=columns,
                            show="headings", height=15)

        tree.heading("时间", text="时间")
        tree.heading("源语言", text="源语言")
        tree.heading("目标语言", text="目标语言")
        tree.heading("原文", text="原文")
        tree.heading("译文", text="译文")

        tree.column("时间", width=150)
        tree.column("源语言", width=80)
        tree.column("目标语言", width=80)
        tree.column("原文", width=200)
        tree.column("译文", width=200)

        for record in self.history:
            tree.insert("", tk.END, values=(
                record["timestamp"],
                record["source_lang"],
                record["target_lang"],
                record["source_text"][:30],
                record["result_text"][:30]
            ))

        tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        scrollbar = ttk.Scrollbar(
            list_frame, orient=tk.VERTICAL, command=tree.yview)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        tree.configure(yscrollcommand=scrollbar.set)

        def load_selection():
            selection = tree.selection()
            if selection:
                item = tree.item(selection[0])
                values = item['values']
                for record in self.history:
                    if record["timestamp"] == values[0]:
                        self.input_text.delete(1.0, tk.END)
                        self.input_text.insert(tk.END, record["source_text"])
                        self.output_text.delete(1.0, tk.END)
                        self.output_text.insert(tk.END, record["result_text"])
                        self.source_lang.set(record["source_lang"])
                        self.target_lang.set(record["target_lang"])
                        history_window.destroy()
                        break

        tree.bind('<Double-1>', lambda e: load_selection())

        btn_frame = tk.Frame(history_window)
        btn_frame.pack(fill=tk.X, padx=10, pady=10)

        tk.Button(btn_frame, text="加载选中", command=load_selection,
                  font=("Microsoft YaHei", 10), bg='#3498DB', fg='white').pack(side=tk.LEFT, padx=5)

        tk.Button(btn_frame, text="清空历史", command=lambda: self.clear_history(history_window),
                  font=("Microsoft YaHei", 10), bg='#E74C3C', fg='white').pack(side=tk.LEFT, padx=5)

        tk.Button(btn_frame, text="关闭", command=history_window.destroy,
                  font=("Microsoft YaHei", 10)).pack(side=tk.RIGHT, padx=5)

    def clear_history(self, window=None):
        """清空历史记录"""
        if messagebox.askyesno("确认", "确定要清空所有历史记录吗？"):
            self.history = []
            self.save_history()
            if window:
                window.destroy()
            messagebox.showinfo("成功", "历史记录已清空")

    def show_favorites(self):
        """显示收藏夹"""
        favorites = [r for r in self.history if r.get('favorite', False)]

        if not favorites:
            messagebox.showinfo("收藏夹", "暂无收藏的翻译")
            return

        fav_window = tk.Toplevel(self.root)
        fav_window.title("收藏夹")
        fav_window.geometry("600x400")
        fav_window.transient(self.root)

        listbox = tk.Listbox(fav_window, font=("Microsoft YaHei", 10))
        listbox.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

        for record in favorites:
            listbox.insert(
                tk.END, f"{record['source_text'][:20]} -> {record['result_text'][:20]}")

        tk.Button(fav_window, text="关闭", command=fav_window.destroy,
                  font=("Microsoft YaHei", 10)).pack(pady=10)

    def batch_translate(self):
        """批量翻译"""
        batch_window = tk.Toplevel(self.root)
        batch_window.title("批量翻译")
        batch_window.geometry("600x500")
        batch_window.transient(self.root)

        tk.Label(batch_window, text="每行输入一个要翻译的文本:",
                 font=("Microsoft YaHei", 10)).pack(anchor=tk.W, padx=10, pady=(10, 5))

        input_frame = tk.Frame(batch_window)
        input_frame.pack(fill=tk.BOTH, expand=True, padx=10)

        batch_input = scrolledtext.ScrolledText(
            input_frame, font=("Microsoft YaHei", 10), height=10)
        batch_input.pack(fill=tk.BOTH, expand=True)

        example = """Hello
Thank you
Good morning
How are you
Nice to meet you"""
        batch_input.insert(tk.END, example)

        def do_batch_translate():
            texts = batch_input.get(1.0, tk.END).strip().split('\n')
            texts = [t.strip() for t in texts if t.strip()]

            if not texts:
                messagebox.showwarning("提示", "请输入要翻译的文本")
                return

            results = []
            for text in texts:
                try:
                    from_lang = self.languages[self.source_lang.get()]
                    to_lang = self.languages[self.target_lang.get()]
                    result = self.call_translate_api(text, from_lang, to_lang)
                    results.append(f"{text} -> {result}")
                except:
                    results.append(f"{text} -> [翻译失败]")

            result_window = tk.Toplevel(batch_window)
            result_window.title("批量翻译结果")
            result_window.geometry("500x400")

            result_text = scrolledtext.ScrolledText(
                result_window, font=("Microsoft YaHei", 10))
            result_text.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
            result_text.insert(tk.END, '\n'.join(results))
            result_text.config(state=tk.DISABLED)

            tk.Button(result_window, text="关闭", command=result_window.destroy,
                      font=("Microsoft YaHei", 10)).pack(pady=10)

        btn_frame = tk.Frame(batch_window)
        btn_frame.pack(fill=tk.X, padx=10, pady=10)

        tk.Button(btn_frame, text="开始批量翻译", command=do_batch_translate,
                  font=("Microsoft YaHei", 10), bg='#3498DB', fg='white').pack(side=tk.LEFT, padx=5)
        tk.Button(btn_frame, text="关闭", command=batch_window.destroy,
                  font=("Microsoft YaHei", 10)).pack(side=tk.RIGHT, padx=5)

    def show_settings(self):
        """显示设置"""
        settings_window = tk.Toplevel(self.root)
        settings_window.title("设置")
        settings_window.geometry("400x300")
        settings_window.transient(self.root)

        tk.Label(settings_window, text="翻译设置", font=(
            "Microsoft YaHei", 14, "bold")).pack(pady=20)

        api_frame = tk.Frame(settings_window)
        api_frame.pack(fill=tk.X, padx=20, pady=10)

        tk.Label(api_frame, text="百度翻译API设置:", font=(
            "Microsoft YaHei", 11)).pack(anchor=tk.W)

        tk.Label(api_frame, text="APP ID:", font=(
            "Microsoft YaHei", 10)).pack(anchor=tk.W, pady=(10, 5))
        app_id_entry = tk.Entry(api_frame, font=("Microsoft YaHei", 10))
        app_id_entry.pack(fill=tk.X)
        app_id_entry.insert(0, self.app_id)

        tk.Label(api_frame, text="密钥:", font=("Microsoft YaHei", 10)).pack(
            anchor=tk.W, pady=(10, 5))
        app_key_entry = tk.Entry(api_frame, font=(
            "Microsoft YaHei", 10), show="*")
        app_key_entry.pack(fill=tk.X)
        app_key_entry.insert(0, self.app_key)

        def save_settings():
            self.app_id = app_id_entry.get()
            self.app_key = app_key_entry.get()
            messagebox.showinfo("成功", "设置已保存")
            settings_window.destroy()

        tk.Button(settings_window, text="保存设置", command=save_settings,
                  font=("Microsoft YaHei", 10), bg='#2ECC71', fg='white').pack(pady=20)

    def on_closing(self):
        """关闭窗口时的处理"""
        self.save_history()
        self.root.destroy()


def main():
    """主函数"""
    root = tk.Tk()
    app = TranslatorApp(root)
    root.mainloop()


if __name__ == "__main__":
    main()
