如何翻译 CBZ 或 CBR 漫画压缩包而不打乱页面顺序
在翻译 CBZ 或 CBR 漫画之前,先修复页面顺序、封面、垃圾文件和从右到左的设置。包含一个免费的压缩包检查工具和一个示例文件。

CBZ 文件是页面图像的 ZIP 压缩包,CBR 文件则是用 RAR 打包的同类文件。压缩包内部没有任何信息标明“这是第 2 页”。漫画阅读器和翻译工具都是通过排序文件名来确定页面顺序的。因此,翻译后漫画的大多数问题在翻译之前就已经埋下伏笔:封面跑到了最后,第 10 页出现在第 1 页之后,或者本应从右向左阅读的漫画却从左向右打开。
上传前请先做三项检查:确保页面名称能按正确顺序排序,删除所有非页面文件,如果压缩包里有 ComicInfo.xml 文件就保留它。然后将压缩包作为 CBZ 上传。我们编写了一个免费的漫画压缩包检查工具,一秒钟内即可完成这三项检查,并能用安全的页面名称重新打包文件。
快速回答:如何处理你的压缩包
| 你拥有的文件 | 上传前的操作 |
|---|---|
页面命名为 001.jpg、002.jpg…… 的 .cbz 文件 | 直接上传即可 |
页面命名为 1.jpg……10.jpg,或包含未编号的 cover.jpg 的 .cbz 文件 | 用补零命名重新打包(第 2 步) |
.cbr、.cb7 或 .cbt 文件 | 先解压,然后将文件夹重新打包为 .cbz(第 3 步) |
| 页面保存为 AVIF、JPEG XL 或 HEIC 格式 | 先将这些页面转换为 PNG、JPEG 或 WebP 格式 |
| 应从右向左阅读的漫画 | 保留其 ComicInfo.xml,并在翻译后更新语言字段 |
| 从商店应用购买的漫画 | 确认你确实拥有一个无 DRM 且允许使用的文件 |
以下各节将逐行解释。
页面顺序为何会乱:阅读器按文件名排序
文件名排序有两种常见方式,一旦页码长度不同,它们就会产生分歧:
- 纯字符排序逐个字符比较文件名。
10.jpg以1开头,因此排在2.jpg之前。你会得到 1、10、11、12、2、3…… 的顺序。 - 自然排序将连续的数字视为一个数,因此
2排在10之前。你会得到 1、2、3……10、11、12 的顺序。
许多漫画阅读器会进行自然排序,但你不能指望这一点,也无法控制翻译后的文件会在哪个阅读器中打开。一个在所有情况下都有效的解决办法是给数字补零:001.jpg … 010.jpg 在两种排序方法下顺序相同。
另外两个命名问题很容易被忽略:
- 未编号的封面会排在最后。 两种排序方法都会把数字排在字母前面。在一个包含
cover.jpg和001.jpg…024.jpg的压缩包中,封面会变成最后一页。 - 章节文件夹会作为名称的一部分参与排序。
Chapter 10/01.jpg和Chapter 2/01.jpg会先比较文件夹名称,因此文件夹编号也需要像页码一样小心处理。
BookTranslator 使用自然排序、不区分大小写的方式排列 .cbz 页面,并跳过垃圾条目,例如 __MACOSX 文件夹、.DS_Store 之类的点文件和 Thumbs.db。这意味着翻译时第 2 页会排在第 10 页之前。不过,翻译后的页面会保留原始名称。如果你上传 1.jpg … 12.jpg,返回的是 1.png … 12.png,而使用普通排序的阅读器仍然会把它们弄混。在上传前重命名可以为所有阅读器修正顺序。
第 1 步:检查压缩包
下载 check_comic_archive.py 并在你的漫画上运行它。它需要 Python 3.8 或更高版本,不需要其他依赖,并且不会上传任何内容:
python3 check_comic_archive.py "My Comic.cbz"
为了展示它的发现,我们构建了一个小型示例压缩包,其中包含漫画文件中常见的问题。它有十二页未补零编号的页面、一个未编号的 cover.png、一个双页跨页、一个 AVIF 文件、macOS 垃圾条目,以及一个标记为从右到左漫画的 ComicInfo.xml。README 说明了如何使用 make_test_comic.py 重新构建它。以下是报告的结尾部分:
Junk entries (skipped): .DS_Store, __MACOSX/._1.png
Other files (carried over unchanged): ComicInfo.xml
ComicInfo.xml:
Manga (reading direction): YesAndRightToLeft
Right-to-left is stored here, not in the images. Keep this file in the archive so readers that honor it still see it.
LanguageISO: ja. Update it after translation; a copied ComicInfo.xml still names the source language.
Page table: 13 entries for 13 page images.
13 entries record ImageSize/ImageWidth. These describe the original files and no longer match once pages are replaced.
Check before uploading:
- A plain character sort puts '10.png' at position 2, where natural sort has '2.png'. A reader without natural sorting will show pages out of order.
- Pages without a number in the file name: 'cover.png' at 13. Digits sort before letters, so an unnumbered cover usually ends up last.
- Page numbers use [1, 2] digits. Zero-pad them (001, 002, ... 010) so every reader agrees on the order.
- Images in a format that is not treated as a page here: 13.avif. Convert them to PNG, JPEG or WebP, or they stay untranslated.
在那之上,报告按阅读顺序列出了每一页及其尺寸。它会将宽大于高的页面标记为双页跨页,将高度超过宽度三倍以上的页面标记为长条,例如网络漫画章节。当翻译结果返回时,这些就是需要首先查看的页面。
对于纯 ASCII 文件名,检查器的自然排序遵循与 BookTranslator 对 .cbz 页面使用的相同比较规则,包括章节文件夹、混合大小写、空格、连字符和下划线。带有重音字母或日文假名的名称在不同工具之间排序可能不同,这也是将页面重命名为纯补零数字的另一个理由。
第 2 步:使用安全的页面名称重新打包
如果报告列出了排序问题,请先查看打印出的顺序,然后重新打包:
python3 check_comic_archive.py "My Comic.cbz" --first cover.png --repack "My Comic fixed.cbz"
--repack 会写入一个新的 CBZ。页面会按照显示的顺序重命名为 0001、0002 …,垃圾条目会被丢弃,其他所有文件(包括 ComicInfo.xml)都会原样复制。--first 会将一个页面移到最前面,这就是将未编号的封面放回其应有位置的方法。你可以为第二个页面(例如标题页)重复此操作。重命名会锁定顺序,因此请在重新打包之前修正,而不是之后。如果压缩包有 ComicInfo.xml 页面表,移动页面会改变它们的位置;检查器会提醒你之后检查诸如前封面标记之类的条目。
在示例压缩包上,重新打包后的文件包含页面 0001.png … 0013.png,封面在最前面,没有垃圾条目。剩下的唯一警告是 AVIF 文件。检查器无法转换图像;请在图像编辑器中打开该页面并将其导出为 PNG、JPEG 或 WebP。AVIF、JPEG XL 和 HEIC 等格式不会被当作页面处理。它们会原样复制到结果中,不会被翻译。
第 3 步:将 CBR、CB7 或 CBT 文件转换为 CBZ
.cbr 文件是 RAR 压缩包,.cb7 是 7z,.cbt 是 tar。将 .cbr 重命名为 .cbz 并不会转换它。检查器会读取文件的前几个字节。对于 RAR、7z 或 tar 压缩包,它会停止并告诉你拥有的是哪一种。如果它打印的是正常的页面报告,那么该文件实际上是一个改了名的 ZIP 压缩包:将其重命名为 .cbz 并返回第 1 步。
要转换真正的 RAR、7z 或 tar 压缩包,请使用 7-Zip 或 The Unarchiver 将其解压到一个文件夹中。然后让检查器指向该文件夹:
7z x "My Comic.cbr" -o"My Comic"
python3 check_comic_archive.py "My Comic" --repack "My Comic.cbz"
重新打包会将页面和 ComicInfo.xml 放在新压缩包的顶层,即使解压后的文件位于子文件夹中也是如此。
BookTranslator 也接受 CBR、CB7 和 CBT 上传,但它们会通过不同的流程以固定价格处理,而下一节描述的逐页处理过程适用于 .cbz 文件。先转换只需几秒钟的工作,还能让你获得第 2 步中的干净页面名称。
第 4 步:保留 ComicInfo.xml,然后更新它
许多压缩包包含一个 ComicInfo.xml 文件,其中包含标题、系列、语言和阅读方向。其格式由 Anansi 项目 维护。其中两个字段在这里很重要:
Manga。 模式 允许Unknown、No、Yes和YesAndRightToLeft。最后一个是压缩包告诉阅读器从右到左翻页的方式。页面图像无法携带该设置,因此如果文件丢失,使用它的阅读器也会失去阅读方向。LanguageISO。 它保存漫画的语言代码。翻译后,它仍然表示源语言,例如ja,直到你更改它。
BookTranslator 会将 ComicInfo.xml 原样复制到翻译后的压缩包中,因此在支持该标志的阅读器中,从右到左的漫画仍然是从右到左。之后在文本编辑器中打开该文件,将 LanguageISO 更改为目标语言。如果文件有 <Pages> 表,其条目按位置指向页面,因此只要没有重新排序页面,它们仍然匹配。诸如 ImageSize 之类的尺寸值描述的是原始图像,将不再与翻译后的 PNG 页面匹配。依赖它们的库工具可能需要重新扫描文件。
BookTranslator 如何处理 CBZ 文件
当你上传一个 .cbz 漫画文件时,BookTranslator 会:
- 按自然顺序列出页面图像(PNG、JPEG、WebP、GIF、BMP 或 TIFF),并跳过无用条目;
- 将每一页送入与单张图像相同的处理流程。它会定位文字、移除原始文字,并在原位置绘制译文,每次处理几页;
- 生成一个新的
.cbz文件,每个翻译后的页面以 PNG 格式保存在相同位置,同时保留原始压缩包中的所有其他文件。
付费前有几个细节值得了解:
- 价格取决于页数。 每一页都是一次完整的图像翻译运行,因此 CBZ 按页计价,而非按字数计价。报价在上传后、结账前显示。移除无用条目和杂散的非页面图像不会改变价格,因为它们不计入页数。
- 失败的页面保留原始图像。 如果单页翻译失败,该页会保持源语言并留在正确位置,因此漫画仍然完整。如果超过 30% 的页面失败,任务将失败,而不会交付一本大部分未翻译的书。
- 你只会得到翻译后的漫画。 漫画压缩包没有双语对照版本。
- 页面以 PNG 格式返回。 翻译后的压缩包可能明显大于 JPEG 原文件。
如果你还需要日文原文本身,例如来自带有竖排和注音的扫描漫画卷,我们的日文竖排文字 OCR 指南涵盖了文本页面的这些阅读顺序问题。
上传之前:文件访问权限
本指南假设漫画是你拥有且可以自由打开的文件,例如无 DRM 的购买内容、你自己的扫描件或你自己的作品。商店应用通常以受保护的格式提供漫画,这些格式只能在其自带的阅读器中打开。重命名或重新打包这些文件并不会改变这一点。如果不确定,请先阅读如何在翻译前检查电子书是否有 DRM。下载文件也不代表你有权分享或发布其翻译版本。
翻译漫画
一旦检查器报告没有排序问题,且每一页都是 PNG、JPEG 或 WebP,请将 CBZ 上传到漫画翻译器,并在付费前确认按页数计算的价格。翻译完成后,在你计划使用的阅读器中打开它。查看封面、第一个跨页和最后一页,然后修正 ComicInfo.xml 中的 LanguageISO。对于更长的项目,例如你计划出版的系列,我们的书籍翻译完整指南涵盖了审校、术语和跨卷一致性。





