BookTranslator
BookTranslator

چگونه یک آرشیو کمیک CBZ یا CBR را بدون به‌هم‌ریختن ترتیب صفحات ترجمه کنیم

ترتیب صفحات، جلدها، فایل‌های زائد و تنظیمات راست‌به‌چپ را قبل از ترجمه یک کمیک CBZ یا CBR اصلاح کنید. شامل یک بررسی‌کننده رایگان آرشیو و یک فایل نمونه.

BookTranslator

BookTranslator Team

11 دقیقه مطالعه

یک فایل CBZ در واقع یک آرشیو ZIP از تصاویر صفحه است و فایل CBR همان ایده است که با RAR بسته‌بندی شده. هیچ چیز درون آرشیو نمی‌گوید «این صفحه ۲ است». خواننده‌های کمیک و ابزارهای ترجمه، ترتیب صفحات را با مرتب‌سازی نام فایل‌ها تشخیص می‌دهند. بنابراین بیشتر مشکلات یک کمیک ترجمه‌شده پیش از ترجمه آغاز می‌شود. یک جلد در انتها قرار می‌گیرد، صفحه ۱۰ بعد از صفحه ۱ ظاهر می‌شود، یا یک مانگای راست‌به‌چپ از چپ‌به‌راست باز می‌شود.

قبل از آپلود سه بررسی انجام دهید. مطمئن شوید که نام صفحات به ترتیب درست مرتب می‌شوند، هر چیزی که صفحه نیست را حذف کنید، و اگر آرشیو فایل ComicInfo.xml دارد آن را نگه دارید. سپس آرشیو را به صورت CBZ آپلود کنید. ما یک بررسی‌کننده رایگان آرشیو کمیک نوشته‌ایم که هر سه بررسی را در یک ثانیه انجام می‌دهد و می‌تواند فایل را با نام‌های صفحه ایمن دوباره بسته‌بندی کند.

پاسخ سریع: با آرشیو خود چه کنید

آنچه داریدقبل از آپلود چه کنید
یک .cbz که صفحاتش 001.jpg، 002.jpg … نام دارندهمان‌طور که هست آپلود کنید
یک .cbz با صفحاتی به نام 1.jpg … 10.jpg، یا یک cover.jpg بدون شمارهآن را با نام‌های صفرپیشوند دوباره بسته‌بندی کنید (گام ۲)
یک فایل .cbr، .cb7 یا .cbtآن را استخراج کنید، سپس پوشه را به صورت .cbz دوباره بسته‌بندی کنید (گام ۳)
صفحات ذخیره‌شده به صورت AVIF، JPEG XL یا HEICابتدا آن صفحات را به PNG، JPEG یا WebP تبدیل کنید
یک مانگا که باید راست‌به‌چپ خوانده شودفایل ComicInfo.xml آن را نگه دارید و فیلد زبان را پس از ترجمه به‌روزرسانی کنید
یک کمیک خریداری‌شده از اپلیکیشن فروشگاهبررسی کنید که واقعاً یک فایل بدون DRM دارید که مجاز به استفاده از آن هستید

بخش‌های زیر هر ردیف را توضیح می‌دهند.

چرا ترتیب صفحات به‌هم می‌ریزد: خواننده‌ها نام فایل‌ها را مرتب می‌کنند

دو روش رایج برای مرتب‌سازی نام فایل وجود دارد و به محض اینکه شماره صفحات طول‌های متفاوتی داشته باشند، با هم اختلاف پیدا می‌کنند:

  • یک مرتب‌سازی ساده کاراکتری نام‌ها را کاراکتر به کاراکتر مقایسه می‌کند. 10.jpg با 1 شروع می‌شود، پس قبل از 2.jpg می‌آید. ترتیب ۱، ۱۰، ۱۱، ۱۲، ۲، ۳ … به دست می‌آید.
  • یک مرتب‌سازی طبیعی دنباله‌ای از ارقام را به عنوان یک عدد می‌خواند، پس 2 قبل از 10 می‌آید. ترتیب ۱، ۲، ۳ … ۱۰، ۱۱، ۱۲ به دست می‌آید.

بسیاری از خواننده‌های کمیک به‌صورت طبیعی مرتب‌سازی می‌کنند، اما نمی‌توانید روی آن حساب کنید و نمی‌توانید کنترل کنید که فایل ترجمه‌شده در کدام خواننده باز شود. راه‌حلی که همه‌جا کار می‌کند، صفرگذاری اعداد است: 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 صرف‌نظر می‌کند. این یعنی صفحه ۲ هنگام ترجمه قبل از صفحه ۱۰ می‌آید. اما صفحات ترجمه‌شده نام اصلی خود را حفظ می‌کنند. اگر 1.jpg … 12.jpg را بارگذاری کنید، 1.png … 12.png را دریافت می‌کنید و خواننده‌ای که از مرتب‌سازی ساده استفاده می‌کند همچنان آنها را قاطی می‌کند. تغییر نام قبل از بارگذاری، ترتیب را برای همه خواننده‌ها درست می‌کند.

مرحله ۱: بررسی آرشیو

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 استفاده می‌کند، شامل پوشه‌های فصل، حروف بزرگ و کوچک مخلوط، فاصله‌ها، خط تیره‌ها و زیرخط‌ها. نام‌های دارای حروف تأکیددار یا کانای ژاپنی ممکن است بین ابزارها متفاوت مرتب شوند، که دلیل دیگری برای تغییر نام صفحات به اعداد ساده صفرگذاری‌شده است.

مرحله ۲: بازبسته‌بندی با نام‌های امن صفحه

اگر گزارش مشکلات ترتیب را فهرست کرد، ابتدا ترتیب چاپ‌شده را ببینید، سپس بازبسته‌بندی کنید:

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 به‌عنوان صفحه در نظر گرفته نمی‌شوند. آنها همان‌طور که هستند، ترجمه‌نشده، در نتیجه کپی می‌شوند.

مرحله ۳: تبدیل فایل CBR، CB7 یا CBT به CBZ

فایل .cbr یک آرشیو RAR است، .cb7 یک 7z و .cbt یک tar. تغییر نام .cbr به .cbz آن را تبدیل نمی‌کند. بررسی‌کننده اولین بایت‌های فایل را می‌خواند. برای آرشیو RAR، 7z یا tar متوقف می‌شود و می‌گوید کدام یک را دارید. اگر به‌جای آن گزارش عادی صفحه چاپ کرد، فایل از قبل یک آرشیو ZIP با نام دیگر است: آن را به .cbz تغییر نام دهید و به مرحله ۱ برگردید.

برای تبدیل یک آرشیو واقعی 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 اعمال می‌شود. تبدیل اول چند ثانیه کار است و نام‌های تمیز صفحه از مرحله ۲ را هم به شما می‌دهد.

مرحله ۴: ComicInfo.xml را نگه دارید، سپس آن را به‌روزرسانی کنید

بسیاری از آرشیوها شامل فایل ComicInfo.xml با عنوان، مجموعه، زبان و جهت خواندن هستند. قالب آن توسط Anansi Project نگهداری می‌شود. دو فیلد آن در اینجا مهم هستند:

  • Manga. شمای مقادیر Unknown، No، Yes و YesAndRightToLeft را مجاز می‌داند. مورد آخر روشی است که آرشیو به خواننده می‌گوید صفحات را از راست به چپ ورق بزند. تصاویر صفحه نمی‌توانند این تنظیم را حمل کنند، بنابراین اگر فایل از دست برود، خواننده‌هایی که از آن استفاده می‌کنند جهت خواندن را هم از دست می‌دهند.
  • LanguageISO. این کد زبان کمیک را نگه می‌دارد. پس از ترجمه هنوز زبان مبدأ را نام می‌برد، مثلاً ja، تا زمانی که آن را تغییر دهید.

BookTranslator ComicInfo.xml را بدون تغییر در آرشیو ترجمه‌شده کپی می‌کند، بنابراین مانگای راست‌به‌چپ در خواننده‌هایی که از این پرچم پشتیبانی می‌کنند راست‌به‌چپ می‌ماند. بعداً فایل را در ویرایشگر متن باز کنید و LanguageISO را به زبان مقصد تغییر دهید. اگر فایل جدول <Pages> داشته باشد، ورودی‌های آن با موقعیت به صفحات اشاره می‌کنند، بنابراین تا زمانی که صفحات را دوباره مرتب نکرده باشید همچنان مطابقت دارند. مقادیر اندازه مانند ImageSize تصاویر اصلی را توصیف می‌کنند و دیگر با صفحات PNG ترجمه‌شده مطابقت نخواهند داشت. ابزار کتابخانه‌ای که به آنها تکیه می‌کند ممکن است نیاز به اسکن مجدد فایل داشته باشد.

آنچه BookTranslator با یک CBZ انجام می‌دهد

وقتی یک کمیک .cbz را بارگذاری می‌کنید، BookTranslator:

  1. تصاویر صفحه (PNG، JPEG، WebP، GIF، BMP یا TIFF) را به ترتیب طبیعی فهرست می‌کند و ورودی‌های ناخواسته را نادیده می‌گیرد؛
  2. هر صفحه را از همان خط لوله‌ای که برای تصاویر تک استفاده می‌شود عبور می‌دهد. متن را پیدا می‌کند، حروف‌چینی اصلی را حذف می‌کند و ترجمه را به جای آن می‌کشد، و هر بار روی چند صفحه کار می‌کند؛
  3. یک .cbz جدید می‌سازد که هر صفحه ترجمه‌شده به صورت PNG در همان موقعیت ذخیره می‌شود، به همراه تمام فایل‌های دیگر از آرشیو اصلی.

چند نکته ارزش دانستن پیش از پرداخت را دارد:

  • قیمت به تعداد صفحات بستگی دارد. هر صفحه یک اجرای کامل ترجمه تصویر است، بنابراین قیمت CBZ بر اساس صفحه محاسبه می‌شود نه بر اساس کلمه. قیمت پس از بارگذاری و پیش از پرداخت نمایش داده می‌شود. حذف ورودی‌های ناخواسته و تصاویر غیرصفحه‌ای پراکنده آن را تغییر نمی‌دهد، زیرا آن‌ها به عنوان صفحه شمرده نمی‌شوند.
  • صفحه ناموفق تصویر اصلی خود را حفظ می‌کند. اگر یک صفحه ناموفق باشد، به زبان مبدأ و در موقعیت درست باقی می‌ماند، بنابراین کمیک همچنان کامل است. اگر بیش از ۳۰٪ صفحات ناموفق باشند، کار شکست می‌خورد به جای اینکه کتابی عمدتاً ترجمه‌نشده تحویل دهد.
  • فقط کمیک ترجمه‌شده را دریافت می‌کنید. آرشیوهای کمیک نسخه دوزبانه کنار هم ندارند.
  • صفحات به صورت PNG بازمی‌گردند. آرشیو ترجمه‌شده می‌تواند به طور محسوسی بزرگ‌تر از نسخه اصلی JPEG باشد.

اگر خود متن ژاپنی را هم نیاز دارید، مثلاً از جلدهای اسکن‌شده مانگا با ستون‌های عمودی و فوریگانا، راهنمای ما برای OCR متن عمودی ژاپنی آن مشکلات ترتیب خواندن را برای صفحات متنی پوشش می‌دهد.

پیش از بارگذاری: دسترسی به فایل

این راهنما فرض می‌کند که کمیک فایلی است که شما مالک آن هستید و می‌توانید آزادانه بازش کنید، مانند یک خرید بدون DRM، اسکن‌های خودتان، یا اثر خودتان. اپ‌های فروشگاهی اغلب کمیک‌ها را در قالب‌های محافظت‌شده‌ای تحویل می‌دهند که فقط در خواننده خودشان باز می‌شوند. تغییر نام یا بازبسته‌بندی آن فایل‌ها این را تغییر نمی‌دهد. اگر مطمئن نیستید، ابتدا نحوه بررسی DRM یک کتاب الکترونیکی پیش از ترجمه را بخوانید. دانلود یک فایل هم به شما اجازه اشتراک‌گذاری یا انتشار ترجمه آن را نمی‌دهد.

کمیک را ترجمه کنید

وقتی بررسی‌کننده هیچ مشکل ترتیبی گزارش نداد و هر صفحه PNG، JPEG یا WebP بود، CBZ را به مترجم مانگا بارگذاری کنید و قیمت بر اساس تعداد صفحات را پیش از پرداخت بررسی کنید. وقتی ترجمه آماده شد، آن را در خواننده‌ای که قصد استفاده از آن را دارید باز کنید. به جلد، اولین گستره دو صفحه‌ای و آخرین صفحه نگاه کنید، سپس LanguageISO را در ComicInfo.xml اصلاح کنید. برای پروژه‌های طولانی‌تر، مانند مجموعه‌ای که قصد انتشارش را دارید، راهنمای کامل ترجمه کتاب بازبینی، اصطلاحات و یکدستی در جلدها را پوشش می‌دهد.

مطالب مرتبط

چگونه یک آرشیو کمیک CBZ یا CBR را بدون به‌هم‌ریختن ترتیب صفحات ترجمه کنیم