用正则过滤器将不需要的文本行排除在翻译之外
调试字符串、资源路径和残留的开发文本有时会漏过自动排除。RuneTranslate 的按项目正则过滤器会排除任何源文本匹配某个模式的行——并实时预览它们究竟会命中哪些内容——让你绝不会把翻译额度浪费在垃圾文本上。免费,所有档位都可用。
把 RuneTranslate 指向一款游戏,它会把能找到的每一条可翻译字符串都抓进来。其中大部分是真正的对话和菜单文本——但也有一些是垃圾:残留的调试行、资源文件名、内部标志,以及游戏从不向玩家展示的零散标识符。RuneTranslate 已经针对每种引擎排除了那些显而易见的情况,并把它们标为红色的可选启用行,但每款游戏都不一样,有些垃圾是你正在处理的这个特定作品所独有的。
这正是正则排除过滤器的用途。你给 RuneTranslate 一个或多个模式,任何源文本匹配某个模式的行都会被从本次运行中剔除——翻译器会跳过它,并把它显示为一行红色的可选启用行,你随时可以重新开启。它和内置的引擎排除是同一套机制,只是由你自己的规则驱动,并随项目一起保存。而且它不花任何费用:与词汇表和翻译记忆不同,正则排除在所有档位都免费。
为什么要排除文本行?
有两个原因——一个显而易见,一个更重要:
- 成本和时间。你翻译的每一条垃圾文本,都是把提供商额度(或免费爬取器的速率限制)花在了没人会看的文本上。整款游戏累积下来数量可观。
- 让游戏保持正常运行。这才是真正重要的。有些行根本不是文本——它们是引擎按值解析的键、文件路径或流程操作数。翻译
bg_office_01或EV_FLAG_TRUE,你就可能悄无声息地破坏一次场景切换或一次变量查找。排除它们能让导出的版本保持稳定。
在哪里找到它
打开一个项目,然后在编辑器工具栏中打开⋯ 更多菜单,选择正则排除。这会打开自定义排除过滤器面板——你可以添加模式、精确查看它们命中的内容,并应用,全部在一个对话框内完成。
实时预览才是关键所在
你绝不会盲目地应用一个模式。当你输入正则时,RuneTranslate 会显示命中 TOTAL 行中的 N 行,并列出它会命中的若干条真实文本行,每敲一个键都会实时更新。无效的模式会立即连同错误一起被标出,所以你无法保存一个有问题的模式。
因为预览显示的是你自己项目的实际文本行,你可以不断调整模式,直到它恰好命中垃圾而不碰任何真实内容,再应用。有一个细节值得记住:模式匹配的是源文本——也就是原始日文,或你的源语言——而不是译文。你是针对未翻译的文本编写模式的。
现成的模式
面板内置了一键预设标签,涵盖几乎每款日文游戏都会出现的模式:
- 纯 ASCII —
^[\x00-\x7F]+$— 完全不含源语言字符的行(残留的英文、罗马音或标识符)。当你的源语言是日文时,通常可以放心剔除。 - 资源路径 —
\.(png|jpe?g|gif|webp|ogg|mp3|wav|webm|mp4)$— 任何以媒体文件扩展名结尾的内容。 - 变量 —
^[a-z_]+\.[a-z_]— 带点的代码引用,例如f.page或state.flag。 - 全大写标记 —
^[A-Z0-9_]+$— 常量和标志,例如EVENT_FLAG_3。 - 数字 / 符号 —
^[\d\s.,:%/+\-]+$— 纯数字的行和图块掩码,例如11111112222。 - 方括号标签 —
^\[.*\]$— 整行只有一个[tag]而别无他物。
面板还展示了一份简明速查表,方便你自己动手编写:^ 和 $ 锚定行的开头和结尾,. 表示任意字符,* 和 + 分别表示零次或多次和一次或多次,? 表示可选,\d 表示一个数字,\w 表示一个单词字符,\s 表示空白字符。
编写你自己的过滤器
预设涵盖了常见情况;对于任何针对特定游戏的内容,你可以编写自己的 JavaScript 正则表达式。几条经验法则:
- 锚定整行。光秃秃的
debug会匹配任何包含这个词的行——包括真正谈论调试的对话。^DEBUG:只匹配以该标记开头的行,而用^...$把模式包起来则匹配整行。锚定是最安全的默认做法。 - 留意预览的计数。如果一个模式从命中 12 条垃圾行猛增到命中 400 条,你几乎肯定误伤了真实文本——查看样例并收紧它。
- 重结构而非词语。垃圾通常靠形态来识别——全大写、带点的路径、结尾的文件扩展名、纯数字——而不是靠具体的词。结构化的模式能在整个项目中通用。
- 一个想法一条规则。几个小而明确的模式,比一个庞大而难以阅读的模式更容易理解,日后也更容易删除。
应用与撤销
点击应用并保存。RuneTranslate 会把模式随项目一起保存,并重新归类每一行,然后确切地告诉你发生了什么——例如已排除 340 行 · 恢复 5 行。恢复的数量是指某个过滤器过去会命中、但现在不再命中的行,它们会被自动恢复回来。
它完全可逆:删除一个模式,再次应用,它命中的那些行就会回来。过滤器只管辖自己的排除——它们绝不会覆盖引擎的自动排除——而且如果某个过滤器稍微太宽泛,你仍然可以用某行的开关把任何单独一行重新开启。
重置已过滤译文的提示
有一种情况 RuneTranslate 会替你处理:如果你过滤掉了已经翻译过的行怎么办?被排除的行会导出它的源文本,但旧译文仍然附着在它上面。所以在你应用之后,如果有任何新过滤掉的行已经带有译文,RuneTranslate 会询问你是要将它们重置为待处理——丢弃译文,让导出干净地回退到源文本——还是保留它们。重置通常是你想要的,因为你排除这些行正是因为你不想让它们被翻译。
它如何与其他一切配合
正则过滤器是最后一公里的工具。引擎适配器已经针对每种格式排除了它们所知道的结构性垃圾,所以在一款支持良好的游戏上,AI 根本不会看到资源路径。过滤器用来处理剩下的漏网之鱼:某个特定游戏的标记、某个古怪的调试通道,或某个小众引擎冒出的、算不上对话的字符串。
使用编辑器的已排除状态筛选,可以查看当前被搁置的所有内容——引擎排除和你的正则排除都在一起——并把其中任何内容重新启用。而在过滤器移除文本行的同时,glossary则做相反的事:它会锁定选定的术语,让它们始终以相同的方式翻译。两者结合,你既能控制哪些内容被翻译,也能控制如何翻译。
在项目开始时花五分钟用一下过滤器面板——放入几个预设标签,瞥一眼预览,应用——就能在此后的每次运行中节省额度,并把有风险的非文本内容彻底挡在翻译器之外。Download RuneTranslate,打开任意一款游戏,在 ⋯ 更多菜单中查看正则排除。
