批量动作与执行顺序
当需要跨主页文件列表批量修改已翻译区域时,“批量动作”卡片决定对命中的区域做什么:改属性、替换文字、加富文本样式。这里说明三种动作块的用法、它们保存到方案文件后的结构,以及为什么必须按“属性 → 替换文字 → 富文本”的固定顺序执行。
方案的新建、复制、重命名与删除见方案管理,条件字段、运算符与 all/any 逻辑见匹配条件,预览命中、勾选、写回与恢复见预览、应用与恢复。富文本样式的具体字段含义与富文本规则共用同一个样式编辑器,见富文本样式与预设。
适用场景
- “批量动作”卡片内只有三个动作块:
set_fields(批量改区域属性)、replace_text(替换命中文字)、rich_text(给命中文字加富文本样式)。 - 动作执行顺序固定为
set_fields→replace_text→rich_text,界面不提供拖拽或上下移动排序;同一个块内多条条目按从上到下依次执行。 - 顺序固定的原因:替换文字会清掉命中区间的富文本样式,所以样式必须放最后;把样式放在替换之前等于白加。
- “批量改区域属性”一个方案只产出一条动作(所有字段打包成一个
fields字典);“替换命中文字”和“给命中文字加富文本样式”每条条目各产出一条动作。 - 条件负责筛选 region,动作各自带 pattern 负责在译文里定位子串,两者分开,不存在“哪条条件的命中区间才是目标”的歧义。
- 这里不覆盖条件编辑(见匹配条件)、预览/勾选/写回/恢复(见预览、应用与恢复),也不解释富文本样式的每个字段(见富文本样式与预设)。
在批量管理中操作
在批量管理页配置动作
- 打开“批量管理”页面。页面标题为“批量管理”,副标题为“跨主页文件列表匹配区域,批量修改文字、富文本样式与属性”。
- 在“批量动作”卡片中,三个动作块各有启用开关。勾选空的“替换命中文字”或“给命中文字加富文本样式”块会自动补一条空白条目;取消勾选会停用该块,预览和执行都会忽略它。
- “批量改区域属性”块中点击“添加属性”新增一行:字段下拉框 + 值编辑器 + 删除按钮。字段下拉只列出可写字段;只读/派生字段只能用于条件,不能在此写入。
- “替换命中文字”块中点击“添加替换”新增一条:“匹配文字”输入匹配内容,“正则”开关切换是否按正则解释,“替换为”输入替换文本;开启正则时支持
\1这样的反向引用。 - “给命中文字加富文本样式”块中点击“添加样式条目”新增一条:模式下拉框、“匹配文字”、可选的“匹配富文本”条件、目标样式“编辑样式”。
- 卡片标题下方的提示文字直接说明固定顺序:“固定按此顺序执行:改属性 → 替换文字 → 富文本。改文字会清掉命中区间的样式,所以样式必须放最后。同一块内的条目从上往下依次执行。”
动作块的启用状态和条目会随方案一起保存;条件或动作任何一行变化都会让上一次的预览结果作废。
三种动作类型
批量改区域属性
控件以“字段 + 值”行列出,同一块内所有行会打包成一条 set_fields 动作(fields 字典)。可写字段包括:translation(翻译,整段改写)、translation_raw(译文,替换前)、font_family(字体)、target_lang(目标语言)、source_lang(源语言)、direction(排版方向)、alignment(对齐)、font_size(字号)、angle(角度)、line_spacing(行距)、letter_spacing(字距)、stroke_width(描边宽度)、fg_colors(文字颜色)、bg_colors(描边颜色)。颜色与排版类字段的取值和编辑器写入格式,见富文本样式与预设和富文本规则表、Raw 编辑与匹配逻辑。
只读/派生字段(text 原文、prob OCR 置信度、has_rich_text 含富文本、line_count 行数、region_index 区域序号)不出现在“添加属性”下拉中,只能用于匹配条件。
写 translation 时按“整段改写”处理:旧 translation_rich 会被丢弃,translation_raw 同步为同一份文本;若同一块里也写了 translation_raw,则保留你写的值。
替换命中文字
每条条目产出一条 replace_text 动作,字段为 pattern、regex、replace。匹配文字留空时该条不产出动作;引擎把连续换行先压成一个再定位子串。开启“正则”时替换串支持 \1 反向引用,非法引用按字面量处理,不会让整批任务崩溃。
替换通过编辑回放写回:未改动字符保留自己的富文本与 ruby/tcy 节点归属,只有被替换掉的那几个字失去样式;替换出的新字继承命中区间首字的样式(区间内原本有多种样式时只能取一种)。正则的匹配与替换语义(含 \1 反向引用、非法引用按字面量处理)可参考替换规则的 Raw YAML 编辑、正则与保存。
给命中文字加富文本样式
每条条目产出一条 rich_text 动作。三种模式:
- 覆盖(overwrite):你设的项赢,命中区间上的其他项原样保留。
- 添加(fill):命中区间已有的同名项赢,只补它没有的;ruby/tcy 区间内已有任何节点就整段让位。
- 替换(replace):先清掉命中区间原有的样式与节点,再应用新样式。
匹配文字留空 = 整条区域的全部文字;可选“匹配富文本”按“全部满足 / 任一满足”筛选命中文字现有的富文本样式。样式、注音、纵中横全空的动作会被丢弃。引擎从右到左依次应用命中区间,避免坐标错位。样式字段的具体含义与兼容性见富文本样式与预设。
固定执行顺序
方案文件里的 actions 列表不要求手工按顺序写:normalize_scheme() 用 ACTION_ORDER = (set_fields, replace_text, rich_text) 做稳定排序,同类型条目保持写下时的先后。
flowchart LR
subgraph Fixed["固定顺序:属性 → 替换文字 → 富文本"]
F1["① 批量改区域属性 set_fields"] --> F2["② 替换命中文字 replace_text<br/>命中区间样式被清掉"] --> F3["③ 给命中文字加富文本样式 rich_text<br/>最后加,样式能保留"]
end
subgraph Wrong["如果把富文本放到替换之前"]
W1["先加富文本样式"] --> W2["再替换文字<br/>命中区间样式被清掉"] --> W3["最终没有样式,等于白加"]
end
F3 --> Done["命中 region 的译文、样式与属性写入 *_translations.json"]
W3 -. "错误的编排方式" .-> Done
图里“命中区间样式被清掉”指的是替换动作对命中子串的重写,不是整条 region 一定会丢样式:未改动字符的样式会通过编辑回放保留下来。固定顺序保证最后加的富文本样式不会被同一方案里的替换动作再次清掉。
限制与注意事项
- 条件决定哪些 region 进入预览,动作只在这些 region 内定位子串;条件本身不参与动作执行。
- 预览要求至少启用一个动作块,全空的方案不能预览。
- 预览结果在条件或动作任何一行变化后作废,需要重新点击“预览命中”。
- 富文本样式编辑器与富文本规则页共用
RichTextStyleDialog,样式字段和兼容性以富文本规则页为准。 - 批量写回与编辑器内存数据可能冲突:执行前会提示并自动重载编辑器,详见预览、应用与恢复。
- 批量管理只改桌面侧的
*_translations.json与方案文件,不进入manga_translator的渲染管线,也不读取或写入 API 凭据。
