import tkinter as tk
from tkinter import ttk, scrolledtext
import requests
import hashlib
import random

class BaiduTranslator:
    def __init__(self, root):
        self.root = root
        self.root.title("简易翻译工具")
        self.root.geometry("620x450")
        self.root.resizable(False, False)

        # ========== 百度翻译密钥 自行替换 ==========
        self.appid = "你的APPID"
        self.secretKey = "你的密钥"

        # 语言映射
        self.lang_dict = {
            "中文": "zh",
            "英语": "en",
            "日语": "jp",
            "韩语": "kor",
            "法语": "fra",
            "德语": "de",
            "俄语": "ru"
        }
        lang_list = list(self.lang_dict.keys())

        # 源语言选择框
        ttk.Label(root, text="源语言：").place(x=30, y=15)
        self.from_lang = ttk.Combobox(root, width=10, values=lang_list, state="readonly")
        self.from_lang.current(0)
        self.from_lang.place(x=90, y=15)

        # 目标语言选择框
        ttk.Label(root, text="目标语言：").place(x=220, y=15)
        self.to_lang = ttk.Combobox(root, width=10, values=lang_list, state="readonly")
        self.to_lang.current(1)
        self.to_lang.place(x=290, y=15)

        # 翻译按钮
        trans_btn = ttk.Button(root, text="开始翻译", command=self.translate_text)
        trans_btn.place(x=420, y=12, width=80)

        # 清空按钮
        clear_btn = ttk.Button(root, text="清空", command=self.clear_all)
        clear_btn.place(x=510, y=12, width=60)

        # 输入框
        ttk.Label(root, text="输入待翻译文本：").place(x=30, y=50)
        self.input_text = scrolledtext.ScrolledText(root, width=70, height=8)
        self.input_text.place(x=30, y=75)

        # 输出框
        ttk.Label(root, text="翻译结果：").place(x=30, y=240)
        self.output_text = scrolledtext.ScrolledText(root, width=70, height=8, state="disabled")
        self.output_text.place(x=30, y=265)

    def get_baidu_result(self, query, from_lan, to_lan):
        """调用百度翻译API"""
        salt = str(random.randint(32768, 65536))
        sign = hashlib.md5((self.appid + query + salt + self.secretKey).encode()).hexdigest()

        url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
        params = {
            "q": query,
            "from": from_lan,
            "to": to_lan,
            "appid": self.appid,
            "salt": salt,
            "sign": sign
        }
        try:
            resp = requests.get(url, params=params, timeout=8)
            res_json = resp.json()
            if "trans_result" in res_json:
                return res_json["trans_result"][0]["dst"]
            else:
                return f"错误：{res_json.get('error_msg', '翻译失败')}"
        except Exception as e:
            return f"网络异常：{str(e)}"

    def translate_text(self):
        """执行翻译"""
        content = self.input_text.get("1.0", tk.END).strip()
        if not content:
            self.show_result("请输入需要翻译的内容！")
            return

        f_lang = self.lang_dict[self.from_lang.get()]
        t_lang = self.lang_dict[self.to_lang.get()]
        result = self.get_baidu_result(content, f_lang, t_lang)
        self.show_result(result)

    def show_result(self, text):
        """写入结果框"""
        self.output_text.config(state="normal")
        self.output_text.delete("1.0", tk.END)
        self.output_text.insert(tk.END, text)
        self.output_text.config(state="disabled")

    def clear_all(self):
        """清空输入输出"""
        self.input_text.delete("1.0", tk.END)
        self.output_text.config(state="normal")
        self.output_text.delete("1.0", tk.END)
        self.output_text.config(state="disabled")

if __name__ == "__main__":
    window = tk.Tk()
    app = BaiduTranslator(window)
    window.mainloop()
