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

# ===================== 配置【修改这里】=====================
APP_ID = "你的百度翻译APPID"
APP_KEY = "你的百度翻译密钥"
# ==========================================================

# 语言对照表
lang_map = {
    "中文": "zh",
    "英语": "en",
    "日语": "jp",
    "韩语": "kor",
    "法语": "fra",
    "德语": "de",
    "俄语": "ru",
    "西班牙语": "spa"
}


def baidu_translate(query, from_lang, to_lang):
    """调用百度翻译API"""
    url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
    salt = str(random.randint(32768, 65536))
    sign = hashlib.md5((APP_ID + query + salt + APP_KEY).encode()).hexdigest()

    params = {
        "q": query,
        "from": from_lang,
        "to": to_lang,
        "appid": APP_ID,
        "salt": salt,
        "sign": sign
    }
    try:
        resp = requests.get(url, params=params, timeout=10)
        res = resp.json()
        if "trans_result" in res:
            return res["trans_result"][0]["dst"]
        else:
            return f"错误：{res.get('error_msg', '翻译失败')}"
    except Exception as e:
        return f"网络异常：{str(e)}"


def on_translate():
    """翻译按钮点击事件"""
    text = input_text.get("1.0", tk.END).strip()
    if not text:
        messagebox.showwarning("提示", "请输入要翻译的内容！")
        return

    src_name = combo_from.get()
    dst_name = combo_to.get()
    src_code = lang_map[src_name]
    dst_code = lang_map[dst_name]

    result = baidu_translate(text, src_code, dst_code)
    output_text.delete("1.0", tk.END)
    output_text.insert("1.0", result)


def copy_result():
    """复制结果到剪贴板"""
    res = output_text.get("1.0", tk.END).strip()
    if res:
        root.clipboard_clear()
        root.clipboard_append(res)
        messagebox.showinfo("成功", "已复制翻译结果！")


def swap_lang():
    """互换源语言和目标语言"""
    f = combo_from.get()
    t = combo_to.get()
    combo_from.set(t)
    combo_to.set(f)


# ========== 构建界面 ==========
root = tk.Tk()
root.title("简易翻译工具")
root.geometry("620x460")
root.resizable(False, False)

# 语言选择行
frame_top = ttk.Frame(root, padding=10)
frame_top.pack(fill="x")

ttk.Label(frame_top, text="源语言：").grid(row=0, column=0, padx=5)
combo_from = ttk.Combobox(frame_top, values=list(lang_map.keys()), width=10, state="readonly")
combo_from.set("中文")
combo_from.grid(row=0, column=1, padx=5)

swap_btn = ttk.Button(frame_top, text="⇄", command=swap_lang, width=3)
swap_btn.grid(row=0, column=2, padx=8)

ttk.Label(frame_top, text="目标语言：").grid(row=0, column=3, padx=5)
combo_to = ttk.Combobox(frame_top, values=list(lang_map.keys()), width=10, state="readonly")
combo_to.set("英语")
combo_to.grid(row=0, column=4, padx=5)

trans_btn = ttk.Button(frame_top, text="开始翻译", command=on_translate)
trans_btn.grid(row=0, column=5, padx=15)

# 输入区域
ttk.Label(root, text="原文：").pack(anchor="w", padx=12)
input_text = tk.Text(root, height=8, wrap="word")
input_text.pack(padx=10, fill="both", expand=False)

# 输出区域
ttk.Label(root, text="译文：").pack(anchor="w", padx=12)
output_text = tk.Text(root, height=8, wrap="word")
output_text.pack(padx=10, fill="both", expand=False)

# 底部按钮
frame_bottom = ttk.Frame(root, padding=8)
frame_bottom.pack(fill="x")
copy_btn = ttk.Button(frame_bottom, text="复制译文", command=copy_result)
copy_btn.pack()

root.mainloop()