1. 项目概述为什么我们需要游戏文本自动翻译工具作为一名玩了十几年游戏的老玩家我深知语言障碍是横亘在无数玩家面前的一座大山。有多少次你看到Steam上打折的某款独立佳作或者某个小众但口碑极佳的RPG却因为游戏只支持日文、俄文或者德文而望而却步又有多少次你在游玩一款非母语游戏时需要频繁切出游戏打开翻译软件对着屏幕截图再粘贴翻译严重破坏了游戏的沉浸感和节奏这种体验相信很多朋友都深有体会。XUnity Auto Translator的出现就是为了解决这个核心痛点。它不是一个简单的文本替换工具而是一个运行在游戏进程内部的“实时翻译中间件”。它的核心价值在于实时性和兼容性。实时性意味着游戏内弹出的每一句对话、每一个物品描述、每一条系统提示都能在你眼前几乎无感地被替换成你能看懂的语言。兼容性则意味着它通过注入和挂钩Hook游戏渲染文本的底层函数能够适配海量使用Unity引擎开发的游戏无论新旧。简单来说它就像一个安装在游戏里的“同声传译”让你能无缝理解游戏内容。本教程将带你从零开始彻底掌握XUnity Auto Translator的使用。无论你是想畅玩一款没有官方中文的独立游戏还是想为某个小众Mod社区贡献翻译这套方法都能为你提供一套完整、可靠的解决方案。我们将不仅讲解“怎么做”更会深入剖析“为什么这么做”以及在实际操作中可能遇到的种种“坑”和应对技巧。2. 工具核心原理与准备工作2.1 XUnity Auto Translator是如何工作的在开始动手之前理解其工作原理能让你在遇到问题时更快地定位和解决。XUnity Auto Translator后文简称XUAT的核心工作流程可以概括为“拦截-翻译-重绘”。拦截游戏在屏幕上显示任何文字时最终都会调用特定的图形API如Unity的Text、TextMeshPro组件对应的渲染函数。XUAT通过BepInEx一个Unity游戏Mod框架注入游戏进程并“挂钩”Hook这些关键函数。当游戏试图绘制一段文本时XUAT会先截获这段原始的文本字符串。翻译截获文本后XUAT会检查是否已经存在对应的翻译存在于本地缓存文件中。如果不存在它会将文本发送到你配置的翻译引擎如谷歌翻译、百度翻译、DeepL的API进行实时翻译。首次翻译后结果会被保存到本地的翻译缓存文件通常是.txt或.json格式中下次再遇到相同文本就直接使用缓存无需重复请求网络这大大提升了速度和稳定性。重绘最后XUAT将翻译好的文本字符串替换回游戏原本要渲染的文本参数中。于是游戏引擎在毫无察觉的情况下绘制出的就是经过翻译的文本了。对于玩家而言整个过程发生在毫秒之间视觉上就是游戏文字“变成了”中文。注意这种基于内存挂钩的方式理论上存在被游戏反作弊系统如Easy Anti-Cheat, BattlEye检测为外挂的风险。因此绝对不要在任何具有强反作弊机制的在线多人游戏中使用此类工具这可能导致封号。它仅适用于纯单人游戏或官方支持Mod的社区服务器游戏。2.2 必备工具与环境准备工欲善其事必先利其器。使用XUAT通常需要以下组件协同工作它们构成了一个标准的Unity游戏Mod运行环境。1. BepInEx这是基石。BepInEx是一个Unity游戏的插件/Mod加载框架。它为XUAT提供了注入游戏进程、加载插件、管理依赖项的能力。没有它XUAT无法运行。如何选择版本去BepInEx的GitHub发布页根据你的游戏是32位x86还是64位x64下载对应的版本。目前绝大多数较新的Unity游戏都是64位。安装要点BepInEx的安装通常是解压后将BepInEx文件夹整体拖入游戏根目录即包含Game.exe或游戏主程序的文件夹。首次运行游戏BepInEx会自动生成必要的配置文件和组织结构。2. XUnity Auto Translator 本体这是核心翻译插件。你需要下载其发布的BepInEx插件包。版本匹配务必关注插件版本与BepInEx版本的兼容性。通常插件说明页会注明所需的BepInEx最低版本。文件结构下载后你会得到一个包含plugins文件夹的压缩包。里面的XUnity.AutoTranslator文件夹需要被放置到游戏目录下的BepInEx/plugins/路径中。3. 翻译引擎插件如BingTranslator、GoogleTranslate等XUAT本体只提供框架具体的翻译能力需要额外的翻译插件来实现。这些插件负责与各大翻译API进行通信。常见选择XUnity.AutoTranslator.Plugin.ExtProtocol这是一个通用插件允许你配置自定义的翻译端点兼容性最强。XUnity.AutoTranslator.Plugin.GoogleTranslate/BaiduTranslate专门的谷歌/百度翻译插件。安装这些插件同样需要放入BepInEx/plugins/目录通常与本体放在同级或子目录具体需阅读插件说明。4. 文本编辑器用于编辑配置文件BepInEx/config/AutoTranslatorConfig.ini和后续可能用到的翻译缓存文件。推荐使用Notepad、VS Code或Sublime Text避免使用Windows自带的记事本可能编码有问题。3. 详细配置与安装步骤实录3.1 标准安装流程分解假设我们的目标游戏是《Fantasy Quest》一个虚构的Unity游戏其根目录为D:\Games\FantasyQuest。步骤一安装BepInEx从官网下载BepInEx 64位版本例如BepInEx_x64_5.4.21.0.zip。解压该ZIP文件将解压出的所有文件和文件夹主要是BepInEx文件夹、doorstop_config.ini、winhttp.dll等复制到D:\Games\FantasyQuest。首次运行游戏主程序FantasyQuest.exe。游戏可能会启动较慢运行结束后关闭游戏。此时检查游戏根目录会发现BepInEx已经自动生成了BepInEx\core、BepInEx\plugins、BepInEx\config等文件夹。BepInEx\plugins文件夹就是我们后续放置插件的地方。步骤二安装XUnity Auto Translator本体下载XUAT的最新版本插件包例如XUnity.AutoTranslator-5.0.0.zip。解压后找到其中的XUnity.AutoTranslator文件夹。将这个文件夹完整地复制到D:\Games\FantasyQuest\BepInEx\plugins\目录下。最终路径应为D:\Games\FantasyQuest\BepInEx\plugins\XUnity.AutoTranslator\。步骤三安装翻译插件以使用谷歌翻译为例下载XUnity.AutoTranslator.Plugin.GoogleTranslate插件。将其解压同样把里面的XUnity.AutoTranslator.Plugin.GoogleTranslate文件夹复制到BepInEx\plugins\目录。此时plugins目录下应该有两个文件夹XUnity.AutoTranslator和XUnity.AutoTranslator.Plugin.GoogleTranslate。步骤四关键配置修改安装完成后最重要的环节是配置。配置文件位于BepInEx\config\AutoTranslatorConfig.ini。用文本编辑器打开它。[General] ; 目标语言设为zh-CN简体中文或zh-TW繁体中文 Languagezh-CN ; 是否启用翻译 Enabledtrue ; 是否在游戏内显示翻译状态调试用 ShowStatustrue [Service] ; 翻译服务根据你安装的插件填写。例如使用谷歌翻译插件则填GoogleTranslate ; 如果使用ExtProtocol通用协议则填ExtProtocol EndpointGoogleTranslate [GoogleTranslate] ; 如果Endpoint是GoogleTranslate这里可以留空但有时需要配置伪UA或代理 ; 对于国内网络环境通常需要配置下面ExtProtocol的方式 [ExtProtocol] ; 通用协议配置这是解决网络问题的关键 ; 启用ExtProtocol Enabledfalse ; 如果使用GoogleTranslate插件这里保持false ; 如果使用ExtProtocol则Endpoint也需要改为ExtProtocol并在此配置命令行 ; CommandLine... 此处后续详解首次运行游戏XUAT会开始工作。你可能会在屏幕左上角看到绿色的状态文字如果ShowStatustrue显示正在翻译和缓存的文本数量。游戏内文本会逐渐被替换。3.2 针对网络问题的深度配置方案很多朋友在这一步会遇到最大的障碍翻译插件无法连接谷歌或DeepL等境外服务。这里提供两个经过实测的解决方案。方案A使用ExtProtocol配合本地代理/翻译软件这是最灵活、最稳定的方案。原理是让XUAT将待翻译文本发送给一个本地的命令行程序这个程序可以是任何能调用翻译API的工具再由该程序返回结果。安装ExtProtocol插件确保BepInEx\plugins目录下有XUnity.AutoTranslator.Plugin.ExtProtocol文件夹。编写一个简单的Python脚本作为“翻译中转站”# translator_proxy.py import sys import json import requests import urllib.parse def translate_text(text, to_langzh): # 这里以调用百度翻译通用API为例需要申请免费API每月有字符限额 # 你也可以替换成其他任何你能稳定访问的API如彩云小译、腾讯云翻译等 appid 你的百度翻译APPID # 请替换 secret_key 你的百度翻译密钥 # 请替换 url https://fanyi-api.baidu.com/api/trans/vip/translate salt 随机数 sign hashlib.md5((appid text salt secret_key).encode()).hexdigest() params { q: text, from: auto, to: to_lang, appid: appid, salt: salt, sign: sign } try: response requests.get(url, paramsparams) result response.json() return result[trans_result][0][dst] except Exception as e: print(f翻译失败: {e}, filesys.stderr) return text # 失败时返回原文 if __name__ __main__: # ExtProtocol通过标准输入输出通信 for line in sys.stdin: line line.strip() if not line: continue # 输入格式通常是: {“Text”: “Hello world”, “From”: “en”, “To”: “zh-CN”} try: request json.loads(line) translated translate_text(request[Text], request[To].split(-)[0]) # 输出格式必须是: {“Success”: true, “Message”: null, “TranslatedText”: “你好世界”} output { Success: True, Message: None, TranslatedText: translated } print(json.dumps(output)) sys.stdout.flush() # 确保立即输出 except Exception as e: error_output { Success: False, Message: str(e), TranslatedText: None } print(json.dumps(error_output)) sys.stdout.flush()配置ExtProtocol 修改AutoTranslatorConfig.ini[General] Languagezh-CN Enabledtrue [Service] ; 关键改为ExtProtocol EndpointExtProtocol [ExtProtocol] ; 关键启用并指向你的脚本 Enabledtrue ; 命令行为python解释器路径 脚本路径 ; 假设Python和脚本都在系统PATH可以这样写 CommandLinepython D:\Tools\translator_proxy.py ; 或者指定完整Python路径 ; CommandLineC:\Python39\python.exe D:\Tools\translator_proxy.py这个方案的优点是完全自主可控你可以使用任何稳定、快速的国内翻译API彻底解决网络问题。方案B使用现成的社区翻译插件如Lingva Translate或LibreTranslate有些社区开发者制作了直接调用开源翻译引擎如Lingva镜像、LibreTranslate自建服务的插件。你可以在GitHub上搜索XUnity Auto Translator Lingva等关键词。安装方式同上将插件放入plugins目录然后在配置中指定对应的Endpoint即可。这通常比配置ExtProtocol更简单但取决于该插件项目的维护状态。实操心得对于长期游玩某款游戏我强烈推荐方案A。虽然初期配置稍复杂但一旦搭建好其稳定性和翻译质量取决于你选择的API是远超其他不稳定免费方案的。你可以为这个Python脚本申请一个免费的百度翻译API每月200万字符对于单款游戏来说完全够用。4. 高级技巧与翻译资产管理4.1 翻译缓存的管理与手工修正XUAT翻译后的文本会保存在BepInEx\Translation\zh-CN\对应语言文件夹下通常是Text文件夹内的.txt或.json文件。这些就是翻译缓存也是你进行“精修”的入口。文件结构解析_AutoGeneratedTranslations.txt这是自动翻译的主要缓存文件。格式类似【原文1】【译文1】 【原文2】【译文2】[GameName]文件夹有些游戏会按资源文件分类存储翻译。.txt和.json文件内容本质都是键值对映射。手工修正翻译 当你发现某句翻译生硬、错误或不符合游戏语境时比如把技能名“Fireball”直译成“火球”但游戏内约定俗成叫“炎爆术”可以直接编辑这些缓存文件。关闭游戏。用文本编辑器打开对应的缓存文件如_AutoGeneratedTranslations.txt。搜索原文如Fireball找到对应的行Fireball火球。修改等号右边的译文为炎爆术保存文件。重新启动游戏这句文本就会显示为你修改后的内容。翻译优先级 XUAT加载翻译的顺序是手工创建的Translation.txt 其他插件提供的翻译 自动生成的_AutoGeneratedTranslations.txt。因此你可以创建一个Translation.txt文件在里面只放置你修改过的条目这样即使自动翻译文件被重置你的精修翻译也不会丢失。4.2 正则表达式与文本过滤配置游戏文本可能包含大量你不需要翻译的内容比如版本号、代码变量、特定格式的占位符如{0}、colorred。翻译这些内容不仅无意义还可能破坏游戏功能。XUAT支持通过正则表达式进行过滤。在AutoTranslatorConfig.ini中找到[Texture]或[General]相关配置区域不同版本可能位置不同或者专门有[Regex]部分。你可以添加如下配置[Regex] ; 忽略所有包含大括号和数字的占位符例如 {0}, {1:item} ; 这能防止翻译破坏字符串格式化 Exclude{\d.*?} ; 忽略HTML/富文本标签如 colorred, /color, b, i Exclude.*? ; 忽略纯数字和单个特殊字符 Exclude^[0-9\W]$ ; 多个排除规则用分号隔开配置排除规则后匹配的文本将不会被发送去翻译而是保持原样显示。这能极大提升翻译结果的整洁度和功能性。4.3 字体渲染与显示优化有时翻译后的中文会出现乱码、显示为方框□□□这是因为游戏自带的字体缺少中文字形。XUAT提供了加载自定义字体的功能。准备字体文件找一个你喜欢的、包含完整中文的字体的.ttf或.otf文件例如“思源黑体”、“霞鹜文楷”。确保你有权使用该字体。放置字体将字体文件例如SourceHanSansCN-Regular.otf复制到BepInEx\Translation\zh-CN\文件夹下。修改配置[Font] ; 启用自定义字体 UseCustomFonttrue ; 指定字体文件名需包含扩展名 FontNamesSourceHanSansCN-Regular.otf ; 字体大小调整可选1.0为原始大小 FontScale1.0 ; 有时需要指定替换的原始字体名游戏内用的 ; FallbackFontOriginalGameFont重启游戏。如果配置正确游戏内的所有文本包括未翻译的都会尝试使用你指定的字体渲染从而解决缺字问题。注意事项字体替换并非百分百成功尤其对于使用TextMeshProTMP的游戏字体替换机制更为复杂可能需要额外的TMP字体资产生成。对于TMP游戏社区可能有专门的补丁或Mod需要单独寻找。5. 实战问题排查与经验分享即使按照教程操作在实际使用中也可能遇到各种问题。下面是我在多年使用中总结的常见问题速查表。问题现象可能原因排查与解决方案游戏启动后无任何翻译效果左上角也无状态显示。1. BepInEx未正确加载。2. XUAT插件未放入正确目录。3. 配置文件Enabledfalse。1. 检查游戏根目录是否有winhttp.dll和doorstop_config.ini确认BepInEx安装正确。可查看游戏目录下是否生成BepInEx\LogOutput.log。2. 确认XUnity.AutoTranslator文件夹在BepInEx\plugins\内。3. 检查AutoTranslatorConfig.ini中[General]下的Enabled是否为true。屏幕左上角有状态显示如Translating...但游戏内文本仍是原文。1. 翻译服务未响应网络问题。2. 文本被排除规则过滤。3. 游戏使用特殊文本渲染方式如纹理贴图。1. 检查网络确认翻译插件配置正确。尝试在配置中开启ShowErrortrue查看错误信息。2. 检查[Regex]下的Exclude规则是否过于宽泛。3. 部分游戏文本是图片非字符串此类文本无法翻译。翻译结果为乱码或方框□□□。1. 游戏字体不支持中文。2. 自定义字体配置错误或路径不对。1. 尝试启用并配置[Font]部分加载中文字体。2. 确认字体文件在BepInEx\Translation\zh-CN\目录下且FontNames拼写正确。游戏崩溃或翻译部分文本后崩溃。1. 插件版本与游戏或BepInEx不兼容。2. 翻译了不该翻译的关键代码字符串。3. 内存读写冲突。1. 尝试更换XUAT或BepInEx的版本通常回退到更稳定的旧版。2. 加强[Regex]排除规则排除包含{、、[等可能为代码的字符串。3. 在配置中增加[General] MaxCharactersPerTranslation500限制单次翻译长度避免长文本溢出。翻译延迟非常高游戏卡顿。1. 网络延迟高。2. 每次文本都实时翻译未利用缓存。3. 游戏文本量爆发式出现如日志滚动。1. 使用本地化翻译方案如ExtProtocol国内API。2. 确保缓存功能正常。首次游玩后二次进入游戏翻译应几乎瞬间完成。3. 在配置中调整[General] DelaySecondsAfterLoad1.0让游戏加载稳定后再开始翻译。特定UI元素如主菜单、选项未翻译。这些文本可能在游戏启动初期、翻译插件初始化之前就已加载并缓存。1. 尝试重启游戏有时第二次进入时会翻译。2. 手动在缓存文件中找到对应原文并添加翻译。3. 有些静态文本是贴图无法通过此工具翻译。独家避坑技巧“先缓存后精修”工作流对于一款打算长期玩的新游戏我的习惯是第一遍开着翻译快速过一遍主线目的是让XUAT生成尽可能完整的_AutoGeneratedTranslations.txt缓存文件。然后关闭游戏备份这个文件。接下来我可以从容地打开这个备份文件像校对文稿一样结合游戏上下文对机器翻译生硬、错误的地方进行批量查找和替换。修改完成后将备份文件覆盖回去或者将修改的条目整理到Translation.txt中。这样第二遍游玩时体验就会流畅完美得多。分游戏管理配置如果你在多款游戏上使用XUAT强烈建议为每款游戏单独备份其BepInEx\config\AutoTranslatorConfig.ini和整个Translation文件夹。这样当你想重温某款老游戏时可以直接恢复配置和翻译缓存无需重新翻译。关注游戏更新游戏大版本更新可能会改变其内部代码结构导致XUAT的挂钩失效文本不再被拦截。此时通常需要等待XUAT插件作者或社区更新适配新版本的游戏。在更新游戏前备份你的翻译缓存总是一个好习惯。6. 扩展应用从消费者到贡献者掌握了基本使用和问题排查后你可以更进一步利用XUAT为游戏社区贡献翻译或者实现更个性化的需求。创建并分享翻译补丁 当你精心修正好一款游戏的翻译后你可以将这个翻译包分享给其他玩家。整理你的最终翻译文件主要是BepInEx\Translation\zh-CN\下的内容。删除其中自动生成的、未修改过的杂乱条目只保留你修正和确认过的。一个干净的翻译包更易于维护和传播。将其打包成ZIP文件并附上一个简单的README.txt说明适用的游戏版本、所需插件版本和安装方法。你可以将其发布在游戏的贴吧、论坛、相关的Mod网站如Nexus Mods或GitHub上。配合OCR实现“全屏翻译” 对于极少数连XUAT都无法挂钩的“硬骨头”游戏比如某些使用非标准UI框架或加密文本的游戏可以采取一种“曲线救国”的方案使用OCR光学字符识别软件。运行游戏和OCR工具如Capture2Text、天若OCR等。当游戏内出现需要翻译的文本时用快捷键触发OCR工具截取屏幕区域。OCR工具识别出文字后可以调用剪贴板翻译或你自己的翻译脚本。虽然这远不如XUAT自动无缝但作为最后的手段它能让一些原本完全无法游玩的游戏变得可读。你可以尝试将OCR工具与AutoHotkey脚本结合实现半自动化的“指哪译哪”。翻译项目管理与协作 如果你参与一个游戏汉化组XUAT生成的缓存文件可以作为一个极佳的翻译参考和术语库。翻译人员可以直接在清晰的原文译文格式下工作无需面对凌乱的游戏资源文件。结合版本控制工具如Git可以高效地管理翻译进度合并不同人员的翻译成果并跟踪每一句翻译的修改历史。通过XUnity Auto Translator你不仅拆掉了一堵墙更打开了一扇门。从被动等待官方汉化到主动解决问题从个人使用到为社区贡献。这个过程本身就像是在游戏世界之外完成了一场充满技术乐趣的“支线任务”。我所分享的每一个配置项、每一个排查步骤都是在这条路上实实在在踩过坑、试过错后总结出来的。希望这份详尽的指南能帮你更顺畅地探索那些因语言而暂时封闭的精彩世界。记住核心思路永远是理解原理拦截-翻译-重绘灵活配置特别是网络方案并善用缓存管理。剩下的就是享受游戏了。
Unity游戏实时汉化实战:XUnity Auto Translator原理、配置与避坑指南
1. 项目概述为什么我们需要游戏文本自动翻译工具作为一名玩了十几年游戏的老玩家我深知语言障碍是横亘在无数玩家面前的一座大山。有多少次你看到Steam上打折的某款独立佳作或者某个小众但口碑极佳的RPG却因为游戏只支持日文、俄文或者德文而望而却步又有多少次你在游玩一款非母语游戏时需要频繁切出游戏打开翻译软件对着屏幕截图再粘贴翻译严重破坏了游戏的沉浸感和节奏这种体验相信很多朋友都深有体会。XUnity Auto Translator的出现就是为了解决这个核心痛点。它不是一个简单的文本替换工具而是一个运行在游戏进程内部的“实时翻译中间件”。它的核心价值在于实时性和兼容性。实时性意味着游戏内弹出的每一句对话、每一个物品描述、每一条系统提示都能在你眼前几乎无感地被替换成你能看懂的语言。兼容性则意味着它通过注入和挂钩Hook游戏渲染文本的底层函数能够适配海量使用Unity引擎开发的游戏无论新旧。简单来说它就像一个安装在游戏里的“同声传译”让你能无缝理解游戏内容。本教程将带你从零开始彻底掌握XUnity Auto Translator的使用。无论你是想畅玩一款没有官方中文的独立游戏还是想为某个小众Mod社区贡献翻译这套方法都能为你提供一套完整、可靠的解决方案。我们将不仅讲解“怎么做”更会深入剖析“为什么这么做”以及在实际操作中可能遇到的种种“坑”和应对技巧。2. 工具核心原理与准备工作2.1 XUnity Auto Translator是如何工作的在开始动手之前理解其工作原理能让你在遇到问题时更快地定位和解决。XUnity Auto Translator后文简称XUAT的核心工作流程可以概括为“拦截-翻译-重绘”。拦截游戏在屏幕上显示任何文字时最终都会调用特定的图形API如Unity的Text、TextMeshPro组件对应的渲染函数。XUAT通过BepInEx一个Unity游戏Mod框架注入游戏进程并“挂钩”Hook这些关键函数。当游戏试图绘制一段文本时XUAT会先截获这段原始的文本字符串。翻译截获文本后XUAT会检查是否已经存在对应的翻译存在于本地缓存文件中。如果不存在它会将文本发送到你配置的翻译引擎如谷歌翻译、百度翻译、DeepL的API进行实时翻译。首次翻译后结果会被保存到本地的翻译缓存文件通常是.txt或.json格式中下次再遇到相同文本就直接使用缓存无需重复请求网络这大大提升了速度和稳定性。重绘最后XUAT将翻译好的文本字符串替换回游戏原本要渲染的文本参数中。于是游戏引擎在毫无察觉的情况下绘制出的就是经过翻译的文本了。对于玩家而言整个过程发生在毫秒之间视觉上就是游戏文字“变成了”中文。注意这种基于内存挂钩的方式理论上存在被游戏反作弊系统如Easy Anti-Cheat, BattlEye检测为外挂的风险。因此绝对不要在任何具有强反作弊机制的在线多人游戏中使用此类工具这可能导致封号。它仅适用于纯单人游戏或官方支持Mod的社区服务器游戏。2.2 必备工具与环境准备工欲善其事必先利其器。使用XUAT通常需要以下组件协同工作它们构成了一个标准的Unity游戏Mod运行环境。1. BepInEx这是基石。BepInEx是一个Unity游戏的插件/Mod加载框架。它为XUAT提供了注入游戏进程、加载插件、管理依赖项的能力。没有它XUAT无法运行。如何选择版本去BepInEx的GitHub发布页根据你的游戏是32位x86还是64位x64下载对应的版本。目前绝大多数较新的Unity游戏都是64位。安装要点BepInEx的安装通常是解压后将BepInEx文件夹整体拖入游戏根目录即包含Game.exe或游戏主程序的文件夹。首次运行游戏BepInEx会自动生成必要的配置文件和组织结构。2. XUnity Auto Translator 本体这是核心翻译插件。你需要下载其发布的BepInEx插件包。版本匹配务必关注插件版本与BepInEx版本的兼容性。通常插件说明页会注明所需的BepInEx最低版本。文件结构下载后你会得到一个包含plugins文件夹的压缩包。里面的XUnity.AutoTranslator文件夹需要被放置到游戏目录下的BepInEx/plugins/路径中。3. 翻译引擎插件如BingTranslator、GoogleTranslate等XUAT本体只提供框架具体的翻译能力需要额外的翻译插件来实现。这些插件负责与各大翻译API进行通信。常见选择XUnity.AutoTranslator.Plugin.ExtProtocol这是一个通用插件允许你配置自定义的翻译端点兼容性最强。XUnity.AutoTranslator.Plugin.GoogleTranslate/BaiduTranslate专门的谷歌/百度翻译插件。安装这些插件同样需要放入BepInEx/plugins/目录通常与本体放在同级或子目录具体需阅读插件说明。4. 文本编辑器用于编辑配置文件BepInEx/config/AutoTranslatorConfig.ini和后续可能用到的翻译缓存文件。推荐使用Notepad、VS Code或Sublime Text避免使用Windows自带的记事本可能编码有问题。3. 详细配置与安装步骤实录3.1 标准安装流程分解假设我们的目标游戏是《Fantasy Quest》一个虚构的Unity游戏其根目录为D:\Games\FantasyQuest。步骤一安装BepInEx从官网下载BepInEx 64位版本例如BepInEx_x64_5.4.21.0.zip。解压该ZIP文件将解压出的所有文件和文件夹主要是BepInEx文件夹、doorstop_config.ini、winhttp.dll等复制到D:\Games\FantasyQuest。首次运行游戏主程序FantasyQuest.exe。游戏可能会启动较慢运行结束后关闭游戏。此时检查游戏根目录会发现BepInEx已经自动生成了BepInEx\core、BepInEx\plugins、BepInEx\config等文件夹。BepInEx\plugins文件夹就是我们后续放置插件的地方。步骤二安装XUnity Auto Translator本体下载XUAT的最新版本插件包例如XUnity.AutoTranslator-5.0.0.zip。解压后找到其中的XUnity.AutoTranslator文件夹。将这个文件夹完整地复制到D:\Games\FantasyQuest\BepInEx\plugins\目录下。最终路径应为D:\Games\FantasyQuest\BepInEx\plugins\XUnity.AutoTranslator\。步骤三安装翻译插件以使用谷歌翻译为例下载XUnity.AutoTranslator.Plugin.GoogleTranslate插件。将其解压同样把里面的XUnity.AutoTranslator.Plugin.GoogleTranslate文件夹复制到BepInEx\plugins\目录。此时plugins目录下应该有两个文件夹XUnity.AutoTranslator和XUnity.AutoTranslator.Plugin.GoogleTranslate。步骤四关键配置修改安装完成后最重要的环节是配置。配置文件位于BepInEx\config\AutoTranslatorConfig.ini。用文本编辑器打开它。[General] ; 目标语言设为zh-CN简体中文或zh-TW繁体中文 Languagezh-CN ; 是否启用翻译 Enabledtrue ; 是否在游戏内显示翻译状态调试用 ShowStatustrue [Service] ; 翻译服务根据你安装的插件填写。例如使用谷歌翻译插件则填GoogleTranslate ; 如果使用ExtProtocol通用协议则填ExtProtocol EndpointGoogleTranslate [GoogleTranslate] ; 如果Endpoint是GoogleTranslate这里可以留空但有时需要配置伪UA或代理 ; 对于国内网络环境通常需要配置下面ExtProtocol的方式 [ExtProtocol] ; 通用协议配置这是解决网络问题的关键 ; 启用ExtProtocol Enabledfalse ; 如果使用GoogleTranslate插件这里保持false ; 如果使用ExtProtocol则Endpoint也需要改为ExtProtocol并在此配置命令行 ; CommandLine... 此处后续详解首次运行游戏XUAT会开始工作。你可能会在屏幕左上角看到绿色的状态文字如果ShowStatustrue显示正在翻译和缓存的文本数量。游戏内文本会逐渐被替换。3.2 针对网络问题的深度配置方案很多朋友在这一步会遇到最大的障碍翻译插件无法连接谷歌或DeepL等境外服务。这里提供两个经过实测的解决方案。方案A使用ExtProtocol配合本地代理/翻译软件这是最灵活、最稳定的方案。原理是让XUAT将待翻译文本发送给一个本地的命令行程序这个程序可以是任何能调用翻译API的工具再由该程序返回结果。安装ExtProtocol插件确保BepInEx\plugins目录下有XUnity.AutoTranslator.Plugin.ExtProtocol文件夹。编写一个简单的Python脚本作为“翻译中转站”# translator_proxy.py import sys import json import requests import urllib.parse def translate_text(text, to_langzh): # 这里以调用百度翻译通用API为例需要申请免费API每月有字符限额 # 你也可以替换成其他任何你能稳定访问的API如彩云小译、腾讯云翻译等 appid 你的百度翻译APPID # 请替换 secret_key 你的百度翻译密钥 # 请替换 url https://fanyi-api.baidu.com/api/trans/vip/translate salt 随机数 sign hashlib.md5((appid text salt secret_key).encode()).hexdigest() params { q: text, from: auto, to: to_lang, appid: appid, salt: salt, sign: sign } try: response requests.get(url, paramsparams) result response.json() return result[trans_result][0][dst] except Exception as e: print(f翻译失败: {e}, filesys.stderr) return text # 失败时返回原文 if __name__ __main__: # ExtProtocol通过标准输入输出通信 for line in sys.stdin: line line.strip() if not line: continue # 输入格式通常是: {“Text”: “Hello world”, “From”: “en”, “To”: “zh-CN”} try: request json.loads(line) translated translate_text(request[Text], request[To].split(-)[0]) # 输出格式必须是: {“Success”: true, “Message”: null, “TranslatedText”: “你好世界”} output { Success: True, Message: None, TranslatedText: translated } print(json.dumps(output)) sys.stdout.flush() # 确保立即输出 except Exception as e: error_output { Success: False, Message: str(e), TranslatedText: None } print(json.dumps(error_output)) sys.stdout.flush()配置ExtProtocol 修改AutoTranslatorConfig.ini[General] Languagezh-CN Enabledtrue [Service] ; 关键改为ExtProtocol EndpointExtProtocol [ExtProtocol] ; 关键启用并指向你的脚本 Enabledtrue ; 命令行为python解释器路径 脚本路径 ; 假设Python和脚本都在系统PATH可以这样写 CommandLinepython D:\Tools\translator_proxy.py ; 或者指定完整Python路径 ; CommandLineC:\Python39\python.exe D:\Tools\translator_proxy.py这个方案的优点是完全自主可控你可以使用任何稳定、快速的国内翻译API彻底解决网络问题。方案B使用现成的社区翻译插件如Lingva Translate或LibreTranslate有些社区开发者制作了直接调用开源翻译引擎如Lingva镜像、LibreTranslate自建服务的插件。你可以在GitHub上搜索XUnity Auto Translator Lingva等关键词。安装方式同上将插件放入plugins目录然后在配置中指定对应的Endpoint即可。这通常比配置ExtProtocol更简单但取决于该插件项目的维护状态。实操心得对于长期游玩某款游戏我强烈推荐方案A。虽然初期配置稍复杂但一旦搭建好其稳定性和翻译质量取决于你选择的API是远超其他不稳定免费方案的。你可以为这个Python脚本申请一个免费的百度翻译API每月200万字符对于单款游戏来说完全够用。4. 高级技巧与翻译资产管理4.1 翻译缓存的管理与手工修正XUAT翻译后的文本会保存在BepInEx\Translation\zh-CN\对应语言文件夹下通常是Text文件夹内的.txt或.json文件。这些就是翻译缓存也是你进行“精修”的入口。文件结构解析_AutoGeneratedTranslations.txt这是自动翻译的主要缓存文件。格式类似【原文1】【译文1】 【原文2】【译文2】[GameName]文件夹有些游戏会按资源文件分类存储翻译。.txt和.json文件内容本质都是键值对映射。手工修正翻译 当你发现某句翻译生硬、错误或不符合游戏语境时比如把技能名“Fireball”直译成“火球”但游戏内约定俗成叫“炎爆术”可以直接编辑这些缓存文件。关闭游戏。用文本编辑器打开对应的缓存文件如_AutoGeneratedTranslations.txt。搜索原文如Fireball找到对应的行Fireball火球。修改等号右边的译文为炎爆术保存文件。重新启动游戏这句文本就会显示为你修改后的内容。翻译优先级 XUAT加载翻译的顺序是手工创建的Translation.txt 其他插件提供的翻译 自动生成的_AutoGeneratedTranslations.txt。因此你可以创建一个Translation.txt文件在里面只放置你修改过的条目这样即使自动翻译文件被重置你的精修翻译也不会丢失。4.2 正则表达式与文本过滤配置游戏文本可能包含大量你不需要翻译的内容比如版本号、代码变量、特定格式的占位符如{0}、colorred。翻译这些内容不仅无意义还可能破坏游戏功能。XUAT支持通过正则表达式进行过滤。在AutoTranslatorConfig.ini中找到[Texture]或[General]相关配置区域不同版本可能位置不同或者专门有[Regex]部分。你可以添加如下配置[Regex] ; 忽略所有包含大括号和数字的占位符例如 {0}, {1:item} ; 这能防止翻译破坏字符串格式化 Exclude{\d.*?} ; 忽略HTML/富文本标签如 colorred, /color, b, i Exclude.*? ; 忽略纯数字和单个特殊字符 Exclude^[0-9\W]$ ; 多个排除规则用分号隔开配置排除规则后匹配的文本将不会被发送去翻译而是保持原样显示。这能极大提升翻译结果的整洁度和功能性。4.3 字体渲染与显示优化有时翻译后的中文会出现乱码、显示为方框□□□这是因为游戏自带的字体缺少中文字形。XUAT提供了加载自定义字体的功能。准备字体文件找一个你喜欢的、包含完整中文的字体的.ttf或.otf文件例如“思源黑体”、“霞鹜文楷”。确保你有权使用该字体。放置字体将字体文件例如SourceHanSansCN-Regular.otf复制到BepInEx\Translation\zh-CN\文件夹下。修改配置[Font] ; 启用自定义字体 UseCustomFonttrue ; 指定字体文件名需包含扩展名 FontNamesSourceHanSansCN-Regular.otf ; 字体大小调整可选1.0为原始大小 FontScale1.0 ; 有时需要指定替换的原始字体名游戏内用的 ; FallbackFontOriginalGameFont重启游戏。如果配置正确游戏内的所有文本包括未翻译的都会尝试使用你指定的字体渲染从而解决缺字问题。注意事项字体替换并非百分百成功尤其对于使用TextMeshProTMP的游戏字体替换机制更为复杂可能需要额外的TMP字体资产生成。对于TMP游戏社区可能有专门的补丁或Mod需要单独寻找。5. 实战问题排查与经验分享即使按照教程操作在实际使用中也可能遇到各种问题。下面是我在多年使用中总结的常见问题速查表。问题现象可能原因排查与解决方案游戏启动后无任何翻译效果左上角也无状态显示。1. BepInEx未正确加载。2. XUAT插件未放入正确目录。3. 配置文件Enabledfalse。1. 检查游戏根目录是否有winhttp.dll和doorstop_config.ini确认BepInEx安装正确。可查看游戏目录下是否生成BepInEx\LogOutput.log。2. 确认XUnity.AutoTranslator文件夹在BepInEx\plugins\内。3. 检查AutoTranslatorConfig.ini中[General]下的Enabled是否为true。屏幕左上角有状态显示如Translating...但游戏内文本仍是原文。1. 翻译服务未响应网络问题。2. 文本被排除规则过滤。3. 游戏使用特殊文本渲染方式如纹理贴图。1. 检查网络确认翻译插件配置正确。尝试在配置中开启ShowErrortrue查看错误信息。2. 检查[Regex]下的Exclude规则是否过于宽泛。3. 部分游戏文本是图片非字符串此类文本无法翻译。翻译结果为乱码或方框□□□。1. 游戏字体不支持中文。2. 自定义字体配置错误或路径不对。1. 尝试启用并配置[Font]部分加载中文字体。2. 确认字体文件在BepInEx\Translation\zh-CN\目录下且FontNames拼写正确。游戏崩溃或翻译部分文本后崩溃。1. 插件版本与游戏或BepInEx不兼容。2. 翻译了不该翻译的关键代码字符串。3. 内存读写冲突。1. 尝试更换XUAT或BepInEx的版本通常回退到更稳定的旧版。2. 加强[Regex]排除规则排除包含{、、[等可能为代码的字符串。3. 在配置中增加[General] MaxCharactersPerTranslation500限制单次翻译长度避免长文本溢出。翻译延迟非常高游戏卡顿。1. 网络延迟高。2. 每次文本都实时翻译未利用缓存。3. 游戏文本量爆发式出现如日志滚动。1. 使用本地化翻译方案如ExtProtocol国内API。2. 确保缓存功能正常。首次游玩后二次进入游戏翻译应几乎瞬间完成。3. 在配置中调整[General] DelaySecondsAfterLoad1.0让游戏加载稳定后再开始翻译。特定UI元素如主菜单、选项未翻译。这些文本可能在游戏启动初期、翻译插件初始化之前就已加载并缓存。1. 尝试重启游戏有时第二次进入时会翻译。2. 手动在缓存文件中找到对应原文并添加翻译。3. 有些静态文本是贴图无法通过此工具翻译。独家避坑技巧“先缓存后精修”工作流对于一款打算长期玩的新游戏我的习惯是第一遍开着翻译快速过一遍主线目的是让XUAT生成尽可能完整的_AutoGeneratedTranslations.txt缓存文件。然后关闭游戏备份这个文件。接下来我可以从容地打开这个备份文件像校对文稿一样结合游戏上下文对机器翻译生硬、错误的地方进行批量查找和替换。修改完成后将备份文件覆盖回去或者将修改的条目整理到Translation.txt中。这样第二遍游玩时体验就会流畅完美得多。分游戏管理配置如果你在多款游戏上使用XUAT强烈建议为每款游戏单独备份其BepInEx\config\AutoTranslatorConfig.ini和整个Translation文件夹。这样当你想重温某款老游戏时可以直接恢复配置和翻译缓存无需重新翻译。关注游戏更新游戏大版本更新可能会改变其内部代码结构导致XUAT的挂钩失效文本不再被拦截。此时通常需要等待XUAT插件作者或社区更新适配新版本的游戏。在更新游戏前备份你的翻译缓存总是一个好习惯。6. 扩展应用从消费者到贡献者掌握了基本使用和问题排查后你可以更进一步利用XUAT为游戏社区贡献翻译或者实现更个性化的需求。创建并分享翻译补丁 当你精心修正好一款游戏的翻译后你可以将这个翻译包分享给其他玩家。整理你的最终翻译文件主要是BepInEx\Translation\zh-CN\下的内容。删除其中自动生成的、未修改过的杂乱条目只保留你修正和确认过的。一个干净的翻译包更易于维护和传播。将其打包成ZIP文件并附上一个简单的README.txt说明适用的游戏版本、所需插件版本和安装方法。你可以将其发布在游戏的贴吧、论坛、相关的Mod网站如Nexus Mods或GitHub上。配合OCR实现“全屏翻译” 对于极少数连XUAT都无法挂钩的“硬骨头”游戏比如某些使用非标准UI框架或加密文本的游戏可以采取一种“曲线救国”的方案使用OCR光学字符识别软件。运行游戏和OCR工具如Capture2Text、天若OCR等。当游戏内出现需要翻译的文本时用快捷键触发OCR工具截取屏幕区域。OCR工具识别出文字后可以调用剪贴板翻译或你自己的翻译脚本。虽然这远不如XUAT自动无缝但作为最后的手段它能让一些原本完全无法游玩的游戏变得可读。你可以尝试将OCR工具与AutoHotkey脚本结合实现半自动化的“指哪译哪”。翻译项目管理与协作 如果你参与一个游戏汉化组XUAT生成的缓存文件可以作为一个极佳的翻译参考和术语库。翻译人员可以直接在清晰的原文译文格式下工作无需面对凌乱的游戏资源文件。结合版本控制工具如Git可以高效地管理翻译进度合并不同人员的翻译成果并跟踪每一句翻译的修改历史。通过XUnity Auto Translator你不仅拆掉了一堵墙更打开了一扇门。从被动等待官方汉化到主动解决问题从个人使用到为社区贡献。这个过程本身就像是在游戏世界之外完成了一场充满技术乐趣的“支线任务”。我所分享的每一个配置项、每一个排查步骤都是在这条路上实实在在踩过坑、试过错后总结出来的。希望这份详尽的指南能帮你更顺畅地探索那些因语言而暂时封闭的精彩世界。记住核心思路永远是理解原理拦截-翻译-重绘灵活配置特别是网络方案并善用缓存管理。剩下的就是享受游戏了。