XUnity.AutoTranslator-deepseek
本项目通过调用腾讯的DeepSeek V3 API,实现Unity游戏中日文文本的自动翻译。
准备工作
1. 获取API密钥
- 访问腾讯云API控制台申请DeepSeek的API密钥(限时免费)。
- 也可以使用其他平台提供的DeepSeek API。
2. 安装依赖
确保已安装以下软件和库:
- XUnity.AutoTranslator (不会使用可以看我之前的文章Xunity.autotranslator机翻unity引擎的游戏)
- Python 3.x
安装必要的Python库:
pip install Flask gevent openai
代码如下:
import os
import re
import json
import time
from flask import Flask, request # 导入 Flask 库,用于创建 Web 应用,需要安装:pip install Flask
from gevent.pywsgi import WSGIServer # 导入 gevent 的 WSGIServer,用于提供高性能的异步服务器,需要安装:pip install gevent
from urllib.parse import unquote # 导入 unquote 函数,用于 URL 解码
from threading import Thread # 导入 Thread,用于创建线程 (虽然实际上未使用,但import没有坏处)
from queue import Queue # 导入 Queue,用于创建线程安全的队列
import concurrent.futures # 导入 concurrent.futures,用于线程池
from openai import OpenAI # 导入 OpenAI 库,用于调用 OpenAI API,需要安装:pip install openai 并更新:pip install --upgrade openai
# 启用虚拟终端序列,支持 ANSI 转义代码,允许在终端显示彩色文本
os.system('')
dict_path='用户替换字典.json' # 替换字典路径。如果不需要使用替换字典,请将此变量留空(设为 None 或空字符串 "")
# API 配置参数
Base_url = "https://api.lkeap.cloud.tencent.com/v1" # OpenAI API 请求地址,这里使用了腾讯云的 API 代理服务
Model_Type = "deepseek-v3" # 使用的模型类型,可选项包括"deepseek-v3" 或者其他模型
# 检查请求地址尾部是否已包含 "/v1",若没有则自动补全,确保 API 请求路径正确
if Base_url[-3:] != "/v1":
Base_url = Base_url + "/v1"
# 创建 OpenAI 客户端实例
client = OpenAI(
api_key="sk-XXXXXXXXXXXXXXXX", # API 密钥,请替换为您自己的 API Key。如何获取 API Key 的指南:https://cloud.tencent.com/document/product/1772/115970
base_url=Base_url, # API 请求基础 URL,设置为上面配置的 Base_url
)
# 译文重复内容检测参数
repeat_count=5 # 重复内容阈值。如果译文中有任意单字或单词连续重复出现次数大于等于 repeat_count,则认为译文质量不佳,会触发重试翻译逻辑
# 提示词 (Prompt) 配置
prompt= '''
你是资深本地化专家,负责将游戏日文文本译为简体中文。接收文本后,按以下要求翻译:
翻译范围:翻译普通日文文本,保留原文叙述风格。
保留格式:保留转义字符、格式标签、换行符等非日文文本内容。
翻译原则:忠实准确,确保语义无误;对露骨性描写,可直白粗俗表述,不删减篡改;对双关语等特殊表达,找目标语言等效表达,保原作意图风格。
文本类型:游戏文本含角色对话、旁白、武器及物品名称、技能描述、格式标签、换行符、特殊符号等。
以下是待翻译的游戏文本:
''' # 基础提示词,用于指导模型进行翻译,定义了翻译的角色、范围、格式、原则和文本类型
prompt_list=[prompt] # 提示词列表。可以配置多个提示词,程序会依次尝试使用列表中的提示词进行翻译,直到获得满意的结果
l=len(prompt_list) # 获取提示词列表的长度 (此变量目前未被直接使用,可能是为后续扩展功能预留)
# 提示字典相关的提示词配置
dprompt0='\n在翻译中使用以下字典,字典的格式为{\'原文\':\'译文\'}\n' # 提示模型在翻译时使用提供的字典。字典格式为 JSON 格式的字符串,键为原文,值为译文
dprompt1='\nDuring the translation, use a dictionary in {\'Japanese text \':\'translated text \'} format\n' # 英文版的字典提示词,可能用于多语言支持或模型偏好
# dprompt_list 字典提示词列表,与 prompt_list 提示词列表一一对应。当使用 prompt_list 中的第 i 个提示词时,会同时使用 dprompt_list 中的第 i 个字典提示词
dprompt_list=[dprompt0,dprompt1,dprompt1]
app = Flask(__name__) # 创建 Flask 应用实例
# 读取提示字典
prompt_dict= {
} # 初始化提示字典为空字典
if dict_path: # 检查是否配置了字典路径
try:
with open(dict_path, 'r', encoding='utf8') as f: # 尝试打开字典文件
tempdict = json.load(f) # 加载 JSON 字典数据
# 按照字典 key 的长度从长到短排序,确保优先匹配长 key,避免短 key 干扰长 key 的匹配
sortedkey = sorted(tempdict.keys(), key=lambda x: len(x), reverse=True)
for i in sortedkey:
prompt_dict[i] = tempdict[i] # 将排序后的字典数据存入 prompt_dict
except FileNotFoundError:
print(f"\033[33m警告:字典文件 {
dict_path} 未找到。\033[0m") # 警告用户字典文件未找到
except json.JSONDecodeError:
print(f"\033[31m错误:字典文件 {
dict_path} JSON 格式错误,请检查字典文件。\033[0m") # 错误提示 JSON 格式错误
except Exception as e: