Skip to content

Repository files navigation

Nuclear Option 简体中文汉化补丁

Nuclear Option 的非官方简体中文本地化插件,基于 BepInEx 5。

它在运行期把界面文本替换成中文,不修改任何游戏本体文件。

本项目由玩家社区维护,与 Nuclear Option 的开发者无关;游戏内容与原文版权归其开发商所有。

区块 内容
适配游戏版本 0.34.2(本机开发环境即 0.34.2,已实机验证)
当前插件版本 v1.7.0
词表规模 4396 条(通用 3122 / 整段模板 126 / 拼接片段 66 / 作用域 1082)
翻译覆盖 座舱 HUD、主菜单与联机大厅、工坊界面、任务编辑器、设置菜单、教程弹窗、机场与航路点名称、载具与武器描述、击杀战报与聊天信息
安装方式 解压到 BepInEx/plugins/
前提 已安装 BepInEx 5(x64)

三个需要先知道的性质:

  • 数据与代码分离。 译文是一份可读的 JSON,改完在游戏里按 F11 并重载即可生效,不必重启游戏。
  • 自带诊断窗口。 F11 呼出设置与诊断窗口,含「最近命中」与「最近漏译」(两者默认不记录,需要时在窗口里勾选),另有性能探针可现场量出翻译成本。
  • 会连带影响第三方内容。 创意工坊物件的名字也会被翻译,且只覆盖一部分 —— 见下。

文档分工:本 README 只回答「是什么 / 怎么装 / 怎么用」;数据契约、模块分层、性能成本模型
与联机风险的完整论证见 docs/(ARCHITECTURE.md /
RISKS.md)。凡是「为什么这么设计」的内容一律在 docs/,README 只给结论。


安装

  1. 安装 BepInEx 5(x64)到游戏根目录,
    先启动一次游戏以生成 BepInEx/plugins/。
  2. 把本插件的目录整个放进 BepInEx/plugins/(目录内容见「文件结构」)。
  3. 启动游戏。

⚠️ 不要与其他汉化插件同时启用。 多个插件会同时挂钩同一个文本组件,行为无法预测。
安装前请先移除旧的中文插件目录。

⚠️ 升级插件版本时必须重启游戏,而不是重载词表。 插件本体(DLL)只在启动时加载,
重载只重读 JSON 数据。

使用

按 F11 呼出「设置与诊断」窗口:

区块 内容
操作 开关翻译(关闭会把屏上中文还原成英文)/重新载入词表/立即扫描场景/清空缓存/清空漏译记录
状态 逐帧宿主是否就绪、词表与排除名单条数、最近一次载入结果、场景与扫描次数、命中/漏译/缓存统计、防回写跟踪数
调节 兜底扫描开关与间隔、记录最近命中、累积漏译、输出调试日志、性能探针(五项默认全关)
诊断 最近命中(原文 → 译文)与最近漏译(<作用域>片段)各 12 条;前者需先勾选「记录最近命中」。开启性能探针后另有三行热路径读数

翻译质量声明(请务必读)

目前所有译文均由 AI 翻译+人工审核,作者正在实际游玩中逐批校对和修正。

  • 大部分文本能看懂,但措辞可能生硬、术语可能不统一、个别句子可能翻错;
  • 译名口径(型号 + 汉化代号、缩写保持英文等)在逐步统一,前后批次可能有差异;
  • 游戏更新会改动原文措辞,导致一部分词条静默失效(表现为个别句子仍是英文)。
  • 词表中有些词条取自第三方参照包的 0.34.2 词表。

欢迎反馈。 提交 issue 时附上截图。若想给作者一份完整的漏翻清单,
先在 F11 窗口里勾上「累积漏译到 missing.json / untranslated.json」(默认关,见「配置」一节),
它会把未命中的片段写进 missing.json、未命中的整段长文本写进 untranslated.json。
词表是纯 JSON,也直接接受译文 PR。

目前可能的问题

按出现概率排列:

  1. 个别句子仍是英文 —— 游戏更新改了原文,或该文本走了未覆盖的通路。这是常态,逐批修。
  2. 译文措辞生硬或术语不统一 —— AI 翻译的历史遗留,实机游玩中逐步替换。
  3. 创意工坊物件名半中半英 —— 见下,属预期行为。
  4. 个别界面文本长度变化导致的显示溢出 —— 中文通常比英文短,但个别短槽位标签
    (座舱 HUD 的 2 字槽位)译文过长会显示不全,发现一个修一个。
    机库挂架的武器下拉列表已由「界面修整」做了宽度自适应(见下节),不应再出现截断。
    基地武器信息卡的描述过长时会出现滚动条,滚轮即可翻看。
  5. 第一次显示某个新汉字时轻微卡顿 —— 字体图集现场栅格化,一次性开销,之后不再发生。
  6. 游戏更新后插件可能整体失效 —— 补丁目标方法被改名/移除时,对应补丁装不上,需要等适配。

界面修整(可开关)

除了替换文本,插件还会顺手修几处游戏自带的界面缺陷(默认开启,可在配置里关):

  1. 挂架武器下拉列表宽度自适应。 原版下拉列表宽度写死,武器名
    (如「AGM-84H 斯拉姆-ER」「2000kg 副油箱」)展开时会被截断。插件在列表展开时
    按所有选项译文实测需要的宽度自动加宽,并把列表钳回屏幕范围内。
  2. 下拉列表滚动条方向修复 + 滚轮。 原版弹出列表的滚动条拖动方向与位置整组反向,
    属游戏预制体缺陷,插件在运行期规范化为正确方向;原版列表不支持滚轮,
    插件补上了指针悬停滚轮翻页(步长约为列表高的 12%)。
  3. 基地武器信息卡稳定化。 原版切换武器时,参数与描述的位置、宽度都随内容漂移。
    插件按首次布局把参数区固定成表格(参数一列、数值一列,列位跨武器对齐),
    描述区位置固定、宽度延伸到右侧面板边界;描述过长超出卡片时自动出现
    滚动视图(滚轮 + 右侧滚动条,内容装得下时自动隐藏),不再上下溢出。
  • 修的是运行时几何,不修改任何游戏资产文件;
  • 只作用于机库挂架的下拉列表与基地武器信息卡,不波及设置页、涂装等其它界面;
  • 配置项 UI.WidenWeaponDropdown(默认 true)、UI.FixWeaponInfoCard(默认 true),见「配置」。

⚠️ 仅限单人游戏

本插件只在单人游戏下经过验证。多人游戏(官方服务器、自建服务器、局域网联机)存在
不可预见的风险,请自行判断后再决定是否使用。

本插件会改写游戏「读回」的文本,这在联机路径上可能出现无法预见的行为。

需要留意的三点:

  • 未做多人测试 —— 所有验证都在单人环境完成。未测试不等于已证明安全。
  • 注入式 DLL 与服务器规则 —— 部分服务器(尤其竞技 / 排位性质)把客户端注入视为
    作弊或违规。在要求客户端为原版的服务器上不要使用。
  • 联机前请先移除 BepInEx/plugins/NuclearOptionChineseLocalizationPatch/ 整个目录。

完整风险分析见 docs/RISKS.md。


⚠️ 创意工坊里的名字为什么会被翻译

现象: 创意工坊浏览器(任务 / 战机涂装 两个标签页)里,一部分物件的名字显示成中文,
而且常常只翻一半。例如某项显示为:

[XDF] 行动·北极星 //02

它原来的名字是 [XDF] Operation Northstar //02 —— 中间那段翻了,前缀与后缀保持英文。

这不是插件出错,而是它的工作方式的必然结果。

原因一:插件分不清「游戏写的」和「玩家写的」

插件是运行期替换界面文本:它钩住 Unity 的文本组件,任何文本被写进控件时都会先查一遍词表。
判断依据只有两个 —— 文本内容和控件对象名(词条里的 [Scope] 前缀)。

控件并不知道这段文字的作者是谁。游戏本体的任务名、创意工坊的任务名、战机涂装名,
用的是同一类文本控件
(对象名就是 Name,即词条里的 [Name] 作用域)。
所以只要词表里存在同名键,工坊物件的名字就会被翻。

原因二:那些工坊名字是「游玩时采集」进来的,不是一份收录清单

早期版本靠运行期记录未翻译文本(missing.json)来发现缺口。当时订阅的创意工坊物件名
混在记录里,与真正的游戏原文无法区分,于是被采集、翻译、入库,变成了一批 [Name]… 词条。

一个名字会不会被翻、翻多少,取决于「它有没有在采集时出现在屏幕上」。
所以同一张列表里会有的中文、有的英文、有的半中半英。

这是预期行为,本项目不打算修

  • 创意工坊内容不是本项目的翻译目标。 工坊物件每天新增,名字由上传者自定、数量无上限,
    词表不可能穷举,也不可能跟着更新。
  • 不会做「只翻本体、跳过工坊」的开关。 两者走同一个控件,运行期区分不出来;
    按控件名整体排除,会连带干掉游戏本体任务名的翻译,得不偿失。
  • 隐私。 玩家昵称、账号 ID、上传者个人信息一律不收录(约定写在 data/exclusions.json 内)。
  • 受理的反馈:「请翻译某个工坊 mod」
  • 采集噪声提示: missing.json 里会堆进大量工坊物件名(形如 [Name]PALA Fulcrum Two-Tone Symmetric),
    那是采集噪声、不是翻译缺口,可以随时删掉。

性能影响

结论:开销很小,且已有实测数据。 默认配置下感知不到,四件事需要知道:

  • 显存 —— 中文字体图集是主要占用,估算 24–40 MB。
  • 每次文本赋值都会走一遍翻译流水线,但绝大多数请求在命中缓存或前置短路后就返回;
    只有第一次遇到某条文本才会走完整流程。单次赋值实测约 2.5 µs(测试台热稳态)。
  • 热路径占单核不到 3%。 实机采样(开探针)读数为 5.5–7.3 µs/次赋值、
    全流程 6–24 ms/秒,折算单核 0.63%–2.34%;@60 fps 约 0.1–0.4 ms/帧。
    GC 压力几乎为零。
  • 兜底扫描 —— 它每隔一段时间遍历场景中所有文本组件,是可调节的周期开销。
    需要在 F11 窗口里开启(默认关),间隔 0.1–5 秒实时可调;关闭它不影响翻译主体,
    只影响「极少数一直保持英文的文本」。

默认只开翻译。 兜底扫描、调试日志、漏译记录、最近命中、性能探针五项默认全关,
也不写任何诊断文件 —— 开箱状态的常驻成本只有字体图集与一次查表。

上述数字来自插件自带的性能探针(F11 →「性能探针」,默认关、不落盘):
它给热路径分段计时,并统计每秒调用次数、GC 次数与分配量。
⚠️ 测试台与实机两套数字口径不同,不能直接相比:测试台(纯 CLR,无 Unity、无探针开销)
给的是流水线本身的下限;实机读数包含探针自身约 0.4 µs/次的开销与 Unity 运行环境的差异。
完整成本模型、显存估算依据、口径局限与自行复现的方法见 docs/RISKS.md。


配置

首次启动后生成 BepInEx/config/com.nuclearoption.zhcn.localization.cfg。
配置只在启动时读取,热重载词表不会重读配置。

分区 项 默认 说明
General Enabled true 关闭后会把屏上已有的中文还原成原文
General ToggleWindowHotkey F11 呼出设置窗口的热键
General ReloadDataHotkey 空 不打开窗口、直接热重载词表的热键。留空表示只用窗口按钮
UI WidenWeaponDropdown true 挂架武器下拉列表宽度自适应 + 滚动条方向修复(见「界面修整」)
UI FixWeaponInfoCard true 基地武器信息卡几何稳定:切换武器时参数不漂移(见「界面修整」)
Diagnostics VerboseLogging false 调试级日志。翻译在渲染路径上被高频调用,仅排障时开
Diagnostics LogMisses false 把未翻译文本累积到 missing.json / untranslated.json。默认关,见下
Performance ScanIntervalSeconds 0 兜底扫描间隔(秒)。0 = 关闭兜底扫描(默认);> 0 时作为窗口滑块的初值
Performance TranslationCacheLimit 20000 翻译结果缓存条目上限。0 表示禁用缓存(不推荐)

安装后的默认状态:只开翻译。 兜底扫描、调试日志、漏译记录、最近命中、性能探针全部默认关闭 ——
插件唯一的常驻成本就是中文字体图集。需要排查问题或给作者报漏翻时,在 F11 窗口里逐项打开即可
(改动立即生效,配置文件的改动则需重启游戏)。

三个开关关掉后并非不可用,只是要先手动打开:

诊断项 默认 关掉后仍照常工作的部分 重开方式
LogMisses(漏译记录) 关 F11 的「最近漏译」列表 —— 内存里 12 条环形缓冲,不落盘 窗口勾选「累积漏译」,或改配置(重启生效)
「记录最近命中」 关 窗口里的「累计 N 条」计数 窗口勾选「记录最近命中」(无配置项,仅本次运行有效)
性能探针 关 翻译功能完全不受影响(探针只负责读数) 窗口勾选「性能探针」(无配置项,仅本次运行有效)

LogMisses 默认关的两个理由:一是运行期清单里必然混入第三方文本(创意工坊物件名、
玩家呼号、涂装名,见上文),噪声远多于真缺口;二是累积与写盘本身是常驻开销。
「记录最近命中」默认关则纯粹因为正常游玩用不到它,而每条命中都要做一次字符串裁剪再入队 ——
要用它定位「某处为什么没翻」时,勾上再复现一次就能看到。

性能探针默认关同理:它给每次赋值插桩计时,开着本身就有可测开销(约 0.4 µs/次),
是取样工具而非常驻功能 —— 想看「成本花在哪一段」时开一分钟、记几组数、再关掉。


文件结构

安装后:插件目录

<游戏>/BepInEx/plugins/NuclearOptionChineseLocalizationPatch/

├─ NuclearOptionChineseLocalizationPatch.dll   插件本体
├─ Newtonsoft.Json.dll                         JSON 解析依赖
├─ translation.json                            通用词条
├─ templates.json                              整段模板(`~` 前缀)
├─ fragments.json                              拼接片段(`>>` / `<<` / `==` 前缀)
├─ scopes/                                     作用域词条(按语义域分文件)
│   ├─ ui.json      界面控件        ├─ mission.json  任务目标
│   ├─ units.json   单位兵器        ├─ hud.json      座舱读数
│   ├─ world.json   地图战报        └─ editor.json   编辑器与多人
├─ exclusions.json                             不翻译 / 保持英文名单
├─ force_scopes.json                           强制作用域名单
├─ font.ttf                                    中文字体
├─ missing.json                                ← 默认不生成(开启「累积漏译」后才写盘,可随时删)
└─ untranslated.json                           ← 同上

插件目录是扁平的:词表直接放在根下,没有 data/ 这一层。

词表为什么拆成多个文件、以及为什么按语义域拆作用域,见
docs/ARCHITECTURE.md §2.1。一句话:前三类与运行时的索引
结构一一对应,作用域独立成表后最热的通用表从 4600+ 条降到 3122 条;
而作用域不能一个文件一个 —— Windows 下 NTFS 不区分大小写,本仓库有
Text/text 这类只差大小写的成对作用域,那样拆会直接丢数据。

升级用户不必做任何事:载入按键上的前缀分流,与键在哪个文件无关,
老的单文件词表照样能读。想立刻用上新布局,构建时加 -t:DeployData。

仓库结构

├─ src/                              插件源码(29 个文件,约 6000 行)
│   ├─ LocalizationPlugin.cs             入口:启动编排、静态状态、热重载
│   ├─ Configuration/
│   │   └─ ModSettings.cs                    BepInEx ConfigEntry 封装
│   ├─ Core/                             翻译核心(零补丁依赖,可脱机编译与测试)
│   │   ├─ TextLocalizer.cs                  流水线:整串 → 句式 → 片段 → 切片 + 结果缓存
│   │   ├─ LocalizationTable.cs              词表容器:载入、分类、三级回落查询
│   │   ├─ ExclusionRules.cs                 不翻译与保持英文名单
│   │   ├─ TextCanonicalizer.cs              模板键归一化与指纹
│   │   ├─ KeyScrubber.cs                    键清洗
│   │   └─ TokenPatterns.cs                  全部正则的唯一出处(标签 / 换行 / 数值尾 / 噪声)
│   ├─ Patching/                         Harmony 补丁与防回写
│   │   ├─ TmpPatches.cs                     TMP 打点(主战场)
│   │   ├─ LegacyUiPatches.cs                旧版 UI.Text 打点
│   │   ├─ PatchHelpers.cs                   补丁层公共入口
│   │   └─ RewriteGuard.cs                   防回写守护
│   ├─ UiMods/                           界面修整(几何 / 表格 / 滚动)
│   │   ├─ WeaponInfoCardPatches.cs          基地武器信息卡(补丁入口)
│   │   ├─ WeaponInfoCardTable.cs            信息卡参数区表格化
│   │   ├─ WeaponInfoCardStabilizer.cs       信息卡几何稳定 + 描述滚动视图
│   │   ├─ PylonDropdownPatches.cs           挂架下拉框(宽度自适应 / 滚动条 / 滚轮)
│   │   ├─ PylonDropdownPopupPatches.cs      下拉弹层加宽与滚轮装配
│   │   ├─ DropdownWheelDriver.cs            弹层滚轮驱动组件
│   │   ├─ DropdownGeom.cs                   下拉弹层几何工具
│   │   ├─ RectGeom.cs                       矩形几何工具 + RectPin 快照
│   │   └─ WidgetWheel.cs                    滚轮轮询(描述 / 下拉共用)
│   ├─ Hosting/
│   │   └─ PluginHost.cs                     逐帧宿主:热键 / 兜底扫描 / 防回写驱动(叶子层)
│   ├─ Ui/
│   │   └─ SettingsWindow.cs                 F11 设置与诊断窗口
│   ├─ Diagnostics/
│   │   ├─ Log.cs                            日志封装
│   │   ├─ MissLog.cs                        漏译记录(默认不落盘)
│   │   ├─ HarmonySelfTest.cs                自打补丁验证 Harmony 是否真生效
│   │   ├─ RuntimeStatus.cs                  运行期状态快照(供 F11 窗口显示)
│   │   └─ PerfProbe.cs                      性能探针(默认关;热路径分段计时 + GC/分配)
│   └─ Resources/
│       ├─ PluginPaths.cs                    数据文件路径解析
│       └─ CjkFontProvider.cs                中文字体加载与 TMP 回退注册
├─ data/                             词表与资源(构建时同步到插件目录)
│   ├─ translation.json                  通用词条
│   ├─ templates.json                    整段模板(`~` 前缀)
│   ├─ fragments.json                    拼接片段(`>>` / `<<` / `==` 前缀)
│   ├─ scopes/                           作用域词条,按语义域分 6 个文件
│   ├─ exclusions.json                   不翻译 / 保持英文名单
│   ├─ force_scopes.json                 强制作用域名单
│   └─ fonts/font.ttf                    中文字体
├─ docs/
│   ├─ ARCHITECTURE.md               架构、数据契约与实现理由
│   └─ RISKS.md                      性能与多人游戏风险详述
├─ tools/
│   ├─ check_data.py                 词表自检(编码 / 键唯一性 / 键序 / 括号规范 / 废弃译法回流 / 模板门禁)
│   ├─ _table_layout.py              词表布局的**唯一事实来源**(键该落到哪个文件的划分规则)
│   ├─ split_table.py                按布局规则切分 / 校验词表(`--check` 做漂移检测)
│   ├─ make_release_zip.py           打包发布用的插件 zip
│   └─ review/                       翻译审核台(本机可视化校对工具,见其 README)
├─ README.md
├─ CHANGELOG.md                      版本改动记录
├─ LICENSE                           MIT 许可
├─ THIRD-PARTY-NOTICES.md            第三方组件声明(字体 / 依赖 / 游戏原文)
└─ NuclearOptionChineseLocalizationPatch.csproj

运行时生成的文件

文件 位置 说明
missing.json 插件目录 未翻译的片段(切片后的最小可翻译单元),补词表的工作清单
untranslated.json 插件目录 未翻译的整段长文本(≥ 80 字符)
LogOutput.log BepInEx/ 启动与自检信息、补丁安装结果
com.nuclearoption.zhcn.localization.cfg BepInEx/config/ 配置文件

两个诊断文件可以随时删除,需要时会自动重建。

数据格式

词表是扁平的 { "原文": "译文" }。除普通词条外还有五类特殊键:

前缀 用途 例子
[Scope] 限定作用域,区分同名不同义的原文(详见下节) [KillFeed]sank
~ 整段模板(教程弹窗、含标签的长句) ~<b>Return</b>\nAlkyon AB-4
>> 拼接前缀片段 >>Warning :
<< 拼接后缀片段 << sank
== 拼接中段片段 == deployed at

除键前缀外,模板键(~)里还有一个占位标记 {#}:表示「这里是一段变化的数字」。
查词时先试精确匹配,再试指纹,最后落到参数化模板——把原文中的数字段填进 {#} 位置
完成匹配,译文里的 {#} 再按顺序回填这些数字。适合「除了一个数字全同」的文本
(如 ~Requisition\n via Rank ({#}));模板键的固定段不能以数字开头,否则无法匹配。

片段键的长度与空格都是语义的一部分,写错一个空格就永不命中。完整规则(归一化顺序、
片段拼接语义、数值尾模式)见 docs/ARCHITECTURE.md。

作用域体系:它是插件自创的,游戏没有这个概念

游戏侧的「原始事实」只有两样:控件的 GameObject 名字,和往控件上设置的字符串。
「作用域」是本插件借控件名造出来的匹配机制,分两层:

运行时层(键里的 [控件名] 前缀,真正参与匹配)。 补丁截获文本时,从被翻译
的那个文本控件身上取 GameObject 名字当作用域(剥掉 Unity 克隆后缀 (Clone))。
比如飞行 HUD 武器名控件叫 weaponName,其词条就写成 [weaponName]AGM-48。
查找顺序:先试 [当前控件名]原文,未命中回落裸键。force_scopes.json 是
强制作用域名单——列在里面的控件仍然翻译,但只认「本作用域词条」与「裸键」
两条精确路径,标签剥离 / 句式 / 片段 / 切片 / 模板等一切模糊处理一律绕过。
这些控件是固定宽度的窄槽位(如 MFD 屏幕短缩写),一旦被改写就会拼出半中半英的
残局或撑破原生排版,所以宁可整条保持英文。定义与副作用见
docs/ARCHITECTURE.md 的 §2.5。

维护层(scopes/*.json 文件分组,给人看的语义域,与运行时无对应关系)。
一个文件里混着多个控件的词条,方括号里的名字才是真正的运行时作用域:

文件 条数(截至 2026-09-28) 收录内容
ui.json 643 界面控件:按钮、标签、标题、提示、买卖与设置项
mission.json 37 任务目标:任务标题、目标、简报、升级态势
world.json 102 地图战报:基地与地图标签、击杀战报、HQ 播报
units.json 175 单位兵器:飞机、武器、挂载、涂装、单位简介
hud.json 80 座舱读数:HUD 标签、飞控配平、发动机告警、雷达读数
editor.json 45 编辑器与多人:任务/涂装编辑器、房间列表、输入设置

misc.json 是代码里的兜底分类(FALLBACK_CATEGORY):某个作用域没进
_table_layout.py::SCOPE_GROUPS 才会落到那里。此前它装着 16 个未归类作用域,
现已全部归位 ⇒ 当前不存在该文件(将来再出现未归类的作用域会自动重建)。

为什么大多数词条(3122 条,71%)没有作用域? 这是刻意的设计决策:

  1. 裸键是全局兜底,一条顶多条。 裸键对一切控件生效——"CONFIRM" 这类串无论出现在
    哪个界面含义都一样,登记一条就覆盖所有出现位置;
  2. scoped 有静默漏译风险。 scoped 未命中时只回落裸键,若裸键也不存在就是无声缺口
    (飞行 HUD 武器名曾因此整批漏译)。所以默认策略是裸键优先,scoped 仅在必要时用;
  3. 「必要时」只有三种情况:同一英文在不同控件含义不同(同串异义);译文只在特定
    控件成立(短槽位字数受限、格式化行);词条来自运行期漏译采集——missing.json
    记录漏译时连控件名一起记了,补录时顺手写成 scoped(词表里 200 多个只有一两条的
    长尾作用域就是这么来的)。

整体形态:裸键打基本面(3122),scoped 处理歧义与受限场景(1082),模板与片段
处理动态拼接(126 + 66)
,四种形态各司其职。


从源码构建

需要 .NET SDK。仓库放在 <游戏>/Git/<本仓库> 时零配置即可构建:

dotnet build -c Release                 # 编译并部署 DLL
dotnet build -c Release -t:DeployData   # 全量同步数据文件到插件目录

⚠️ -t:DeployData 只同步数据文件、不触发编译。改了 C# 之后想连数据一起部署,
先 -t:Rebuild(强制重新编译并推 DLL),再 -t:DeployData。

游戏不在默认位置时,用 -p:GameDir="D:\Games\Nuclear Option"、设置环境变量
NUCLEAR_OPTION_DIR,或复制 GameDir.props.example 为 GameDir.props 填入路径。

改完词表后跑一遍数据自检:

python tools/check_data.py

需要校对词表时,用自带的审核台:

python tools/review/review_server.py

反馈与贡献

  • 报告漏翻:按 F11 打开窗口,勾选「累积漏译到 missing.json / untranslated.json」,复现后把这两个文件附上。
    (创意工坊物件名堆进清单属采集噪声,可以忽略。)
  • 提交译文:直接 PR 修改 data/translation.json;规模较大时先开 issue 说明口径。
  • 改完词表:跑 python tools/check_data.py,它会把编码、键唯一性、键序、
    括号规范、废弃译法回流一次列出。

授权

本项目采用 MIT 许可,全文见 LICENSE。

在 MIT 之下,你可以自由地使用、修改、再分发本项目(包括商业用途),只需保留版权声明。

各部分的权利归属:

组成 许可 权利方
代码、工具、文档 MIT 本项目
data/ 下的译文 MIT 本项目译者
data/fonts/font.ttf SIL OFL 1.1 Adobe(思源黑体 CN)
Newtonsoft.Json.dll MIT James Newton-King
游戏原文(词表的键) 不在本项目可授权范围内 Nuclear Option 开发商

本项目与 Nuclear Option 的开发方无任何关联,亦未获其授权或背书。

词表中有部分词条可追溯至前身项目(HunterCHCL),该项目未附许可证。
对本项目而言这部分权利不在自己手中,故单独作出声明,详见
THIRD-PARTY-NOTICES.md 第 6 节。

第三方组件的完整声明(含许可全文)见 THIRD-PARTY-NOTICES.md。

致谢

  • HunterCHCL —— 前身汉化项目,本项目的翻译工作由此起步。
  • 9138noms —— Nuclear Option 本地化工具链与游戏字符串清单,
    发现了运行期采集覆盖不到的文本。
  • 「核选项」第三方汉化包(XUnity.AutoTranslator 路线)的作者与贡献者 ——
    其词表被用作缺口清单与术语参照:
    英文原文是游戏事实、取自其词表,全部译文由本项目自行撰写,未复制其任何译文。
    该包未附许可证,因此本项目的词表与代码不包含也不继承其任何内容;
    两者的译名取舍差异(如舰级命名)以本仓库口径为准。
    术语对照与差异分析见仓库外的工作报告,不随本仓库分发。
    ⚠️ 该包与本插件不能同时安装(会双重翻译并互相破坏加载),详见「安装」一节。
  • 所有提交 issue 反馈错译、漏译,以及提交译文 PR 的玩家。

About

Nuclear Option 简体中文汉化补丁

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages