feat(torrent): complete lifecycle controls and diagnostics

- add durable Torrent telemetry, availability, sharing, relocation, and web-seed workflows\n- fence queue ownership, lifecycle recovery, persistence, and native control races\n- add localized UI, generated bindings, regression coverage, and smoke validation
This commit is contained in:
NimBold
2026-08-04 01:18:24 +03:30
parent 55a905df14
commit 579a8f7f80
33 changed files with 3505 additions and 139 deletions
+49 -6
View File
@@ -96,6 +96,7 @@ const common = {
completed: 'Completed',
failed: 'Failed',
retrying: 'Retrying',
moving: 'Moving data',
},
values: {
processing: 'Processing...',
@@ -288,11 +289,16 @@ const common = {
torrentPieceProgressSummary: '{{completed}} of {{total}} pieces complete · {{size}} each',
torrentPieceProgressMap: 'Torrent piece completion map',
torrentWebSeeds: 'Torrent web seeds',
torrentWebSeedsHint: 'One line per seed in the form file index|HTTP(S) URI. Firelink expands multi-file paths natively.',
torrentWebSeedsPlaceholder: '0|https://mirror.example/torrent/',
torrentWebSeedsHint: 'Add one HTTP(S) base URI per Torrent file. Firelink expands multi-file paths natively.',
torrentWebSeedsApply: 'Apply web seeds',
torrentWebSeedsLoading: 'Applying…',
torrentWebSeedsFailed: 'Could not validate or apply the Torrent web seeds.',
torrentWebSeedsEmpty: 'No web seeds configured.',
torrentWebSeedsFile: 'File',
torrentWebSeedsUri: 'HTTP(S) base URI',
torrentWebSeedsAdd: 'Add web seed',
torrentWebSeedsRemove: 'Remove web seed',
torrentWebSeedsInvalid: 'Each web-seed row needs a valid Torrent file and an HTTP(S) base URI without credentials or fragments.',
torrentPeerCount: '{{total}} peers · {{seeders}} seeders',
torrentPeerDownload: 'Download',
torrentPeerUpload: 'Upload',
@@ -300,12 +306,22 @@ const common = {
torrentPeerAmChoking: 'Firelink choking',
torrentPeerChoking: 'Peer choking',
torrentPeerShowing: 'Showing {{shown}} of {{total}} peers.',
torrentStatistics: 'Torrent statistics',
torrentUploaded: 'Uploaded',
torrentRatio: 'Ratio',
torrentSeededDuration: 'Seeded',
torrentConnectedPeers: 'Peers',
torrentSeeders: 'Seeders',
torrentUploadSpeed: 'Upload speed',
seconds: 'seconds',
torrentStopTimeout: 'Stop stalled Torrent after',
torrentStopTimeoutHint: 'Aria2 stops this Torrent after this many consecutive seconds at 0 B/s. 0 disables the policy; changes apply when the Torrent starts or retries.',
torrentStopTimeoutInvalid: 'Torrent stall timeout must be a whole number from 0 to 604800 seconds',
torrentPrioritizePiece: 'Prioritize Torrent pieces',
torrentPrioritizePieceHint: 'Optional Aria2 preview policy: head, tail, or both; each may use a size such as 1M. Changes apply when the Torrent starts or retries.',
torrentPrioritizePiece: 'Prioritize first/last pieces for preview',
torrentPrioritizePieceHead: 'Prioritize first pieces',
torrentPrioritizePieceTail: 'Prioritize last pieces',
torrentPrioritizePieceSize: 'Preview piece range size',
torrentPrioritizePieceHint: 'Optional preview policy. Each enabled range defaults to 1M and applies when the Torrent starts or retries.',
torrentPrioritizePieceInvalid: 'Torrent piece priority must use head and/or tail with optional K or M sizes between 1K and 1024M',
torrentEncryptionPolicy: 'Torrent encryption policy',
torrentFileAllocation: 'Torrent file allocation',
@@ -313,6 +329,28 @@ const common = {
torrentFileAllocationNone: 'Allocate as needed',
torrentFileAllocationHint: 'Preallocation reserves the selected files before transfer. Allocation as needed avoids that upfront disk reservation.',
torrentDetails: 'Torrent details',
torrentCopyMagnet: 'Copy magnet link',
torrentExportMetadata: 'Export .torrent',
torrentMagnetCopied: 'Identity-only magnet copied.',
torrentMagnetCopyFailed: 'Could not copy the magnet link.',
torrentMetadataExported: 'Torrent metadata exported.',
torrentMetadataExportFailed: 'Could not export Torrent metadata.',
torrentMove: 'Move data…',
torrentMoveLoading: 'Moving…',
torrentMoveCancel: 'Cancel move',
torrentMoveCancelRequested: 'Canceling move…',
torrentMoveConfirm: 'Move the managed Torrent data to this folder? Existing files are never overwritten.',
torrentMoveCompleted: 'Torrent data moved.',
torrentMoveFailed: 'Could not move Torrent data.',
torrentAvailability: 'Swarm availability',
torrentAvailabilityRefresh: 'Refresh',
torrentAvailabilityLoading: 'Loading availability…',
torrentAvailabilityUnavailable: 'Availability is available for an active or paused Torrent.',
torrentAvailabilityFailed: 'Could not read Torrent availability.',
torrentAvailabilityHint: 'Only aggregate copy counts are shown; peer identities and raw bitfields are never exposed.',
torrentAvailabilitySummary: '{{availability}} copies available · {{peers}} connected peers · {{pieces}} pieces',
torrentAvailabilityMap: 'Torrent swarm availability map',
torrentAvailabilityBucket: 'At least {{copies}} copies in this range',
torrentDetailsLoading: 'Loading Torrent details…',
torrentDetailsUnavailable: 'Torrent details are not available.',
torrentDetailsDisplayName: 'Display name',
@@ -513,12 +551,14 @@ const common = {
moveOneFailed: 'Could not move download to queue',
copyAddressesFailed: 'Could not copy addresses',
copyAddressFailed: 'Could not copy address',
copyMagnetFailed: 'Could not copy the magnet link',
copyPathFailed: 'Could not copy file path',
missingFileName: 'File name is missing',
redownloadFailed: 'Redownload failed',
startResume: 'Start/Resume',
addToQueue: 'Add to Queue',
copyAddress: 'Copy Address',
copyMagnet: 'Copy magnet link',
remove: 'Remove',
open: 'Open',
showInFolder: 'Show in Folder',
@@ -603,8 +643,11 @@ const common = {
torrentStopTimeout: 'Stop stalled Torrent after',
torrentStopTimeoutHint: 'Aria2 stops this Torrent after this many consecutive seconds at 0 B/s. 0 disables the policy.',
torrentStopTimeoutInvalid: 'Torrent stall timeout must be a whole number from 0 to 604800 seconds',
torrentPrioritizePiece: 'Prioritize Torrent pieces',
torrentPrioritizePieceHint: 'Saved with this Torrent and applied on its next start or retry. Use head, tail, or both with optional K or M sizes.',
torrentPrioritizePiece: 'Prioritize first/last pieces for preview',
torrentPrioritizePieceHead: 'Prioritize first pieces',
torrentPrioritizePieceTail: 'Prioritize last pieces',
torrentPrioritizePieceSize: 'Preview piece range size',
torrentPrioritizePieceHint: 'Choose first pieces, last pieces, or both for preview. Each enabled range defaults to 1M and applies on the next start or retry.',
torrentPrioritizePieceInvalid: 'Torrent piece priority must use head and/or tail with optional K or M sizes between 1K and 1024M',
torrentEncryptionPolicy: 'Torrent encryption policy',
torrentEncryptionPolicyHint: 'Saved with this Torrent and applied on its next start or retry. The selected policy keeps Aria2 encryption settings consistent.',
+49 -6
View File
@@ -96,6 +96,7 @@ const fa = {
completed: 'تکمیل‌شده',
failed: 'ناموفق',
retrying: 'در حال تلاش مجدد',
moving: 'در حال جابه‌جایی داده',
},
values: {
processing: 'در حال پردازش…',
@@ -288,11 +289,16 @@ const fa = {
torrentPieceProgressSummary: '{{completed}} از {{total}} قطعه کامل شده · هرکدام {{size}}',
torrentPieceProgressMap: 'نقشه تکمیل قطعه‌های تورنت',
torrentWebSeeds: 'وب‌سیدهای تورنت',
torrentWebSeedsHint: 'هر خط به‌شکل شماره فایل|نشانی HTTP(S). مسیر فایل‌های چندفایلی را Firelink در بخش native می‌سازد.',
torrentWebSeedsPlaceholder: '۰|https://mirror.example/torrent/',
torrentWebSeedsHint: 'برای هر فایل تورنت یک نشانی پایهٔ HTTP(S) اضافه کنید. Firelink مسیر فایل‌های چندفایلی را خودش می‌سازد.',
torrentWebSeedsApply: 'اعمال وب‌سیدها',
torrentWebSeedsLoading: 'در حال اعمال…',
torrentWebSeedsFailed: 'اعتبارسنجی یا اعمال وب‌سیدهای تورنت انجام نشد.',
torrentWebSeedsEmpty: 'وب‌سیدی تنظیم نشده است.',
torrentWebSeedsFile: 'فایل',
torrentWebSeedsUri: 'نشانی پایهٔ HTTP(S)',
torrentWebSeedsAdd: 'افزودن وب‌سید',
torrentWebSeedsRemove: 'حذف وب‌سید',
torrentWebSeedsInvalid: 'هر ردیف وب‌سید باید فایل معتبر تورنت و نشانی پایهٔ HTTP(S) بدون اطلاعات ورود یا fragment داشته باشد.',
torrentPeerCount: '{{total}} همتا · {{seeders}} سید',
torrentPeerDownload: 'دریافت',
torrentPeerUpload: 'آپلود',
@@ -300,12 +306,22 @@ const fa = {
torrentPeerAmChoking: 'محدودسازی از طرف Firelink',
torrentPeerChoking: 'محدودسازی از طرف همتا',
torrentPeerShowing: 'نمایش {{shown}} همتا از {{total}} همتا.',
torrentStatistics: 'آمار تورنت',
torrentUploaded: 'آپلودشده',
torrentRatio: 'نسبت',
torrentSeededDuration: 'مدت سید',
torrentConnectedPeers: 'همتاها',
torrentSeeders: 'سیدها',
torrentUploadSpeed: 'سرعت آپلود',
seconds: 'ثانیه',
torrentStopTimeout: 'توقف تورنتِ بدون سرعت پس از',
torrentStopTimeoutHint: 'آریا۲ پس از این تعداد ثانیه پیاپی با سرعت صفر، تورنت را متوقف می‌کند. ۰ این سیاست را غیرفعال می‌کند؛ تغییرات هنگام شروع یا تلاش مجدد اعمال می‌شوند.',
torrentStopTimeoutInvalid: 'مهلت توقف تورنت باید عددی صحیح بین ۰ و ۶۰۴۸۰۰ ثانیه باشد',
torrentPrioritizePiece: 'اولویت‌بندی قطعه‌های تورنت',
torrentPrioritizePieceHint: 'سیاست اختیاری پیش‌نمایش آریا۲: ابتدا، انتها یا هر دو؛ برای هرکدام می‌توان اندازه‌ای مثل 1M نوشت. تغییرات هنگام شروع یا تلاش مجدد اعمال می‌شوند.',
torrentPrioritizePiece: 'اولویت دادن به قطعه‌های ابتدا/انتها برای پیش‌نمایش',
torrentPrioritizePieceHead: 'اولویت قطعه‌های ابتدا',
torrentPrioritizePieceTail: 'اولویت قطعه‌های انتها',
torrentPrioritizePieceSize: 'اندازهٔ بازهٔ پیش‌نمایش',
torrentPrioritizePieceHint: 'سیاست اختیاری پیش‌نمایش. هر بازهٔ فعال به‌طور پیش‌فرض 1M است و هنگام شروع یا تلاش مجدد اعمال می‌شود.',
torrentPrioritizePieceInvalid: 'اولویت قطعه‌های تورنت باید شامل ابتدا یا انتها، با اندازه اختیاری بین 1K و 1024M باشد',
torrentEncryptionPolicy: 'سیاست رمزنگاری تورنت',
torrentFileAllocation: 'نحوهٔ تخصیص فایل تورنت',
@@ -313,6 +329,28 @@ const fa = {
torrentFileAllocationNone: 'تخصیص هنگام نیاز',
torrentFileAllocationHint: 'تخصیص از پیش فضای فایل‌های انتخاب‌شده را قبل از انتقال رزرو می‌کند؛ تخصیص هنگام نیاز این رزرو اولیه را انجام نمی‌دهد.',
torrentDetails: 'جزئیات تورنت',
torrentCopyMagnet: 'کپی پیوند مگنت',
torrentExportMetadata: 'خروجی .torrent',
torrentMagnetCopied: 'مگنت فقط-هویتی کپی شد.',
torrentMagnetCopyFailed: 'کپی پیوند مگنت ناموفق بود.',
torrentMetadataExported: 'فراداده تورنت خروجی گرفته شد.',
torrentMetadataExportFailed: 'خروجی فراداده تورنت ناموفق بود.',
torrentMove: 'جابه‌جایی داده…',
torrentMoveLoading: 'در حال جابه‌جایی…',
torrentMoveCancel: 'لغو جابه‌جایی',
torrentMoveCancelRequested: 'درخواست لغو جابه‌جایی ارسال شد…',
torrentMoveConfirm: 'داده تورنت مدیریت‌شده به این پوشه منتقل شود؟ فایل‌های موجود هرگز بازنویسی نمی‌شوند.',
torrentMoveCompleted: 'داده تورنت جابه‌جا شد.',
torrentMoveFailed: 'جابه‌جایی داده تورنت ناموفق بود.',
torrentAvailability: 'دسترس‌پذیری شبکه',
torrentAvailabilityRefresh: 'تازه‌سازی',
torrentAvailabilityLoading: 'در حال بارگیری دسترس‌پذیری…',
torrentAvailabilityUnavailable: 'دسترس‌پذیری برای تورنت فعال یا متوقف در دسترس است.',
torrentAvailabilityFailed: 'خواندن دسترس‌پذیری تورنت ناموفق بود.',
torrentAvailabilityHint: 'فقط شمارش کلی کپی‌ها نمایش داده می‌شود؛ هویت همتاها و بیت‌فیلد خام هرگز نمایش داده نمی‌شوند.',
torrentAvailabilitySummary: '{{availability}} کپی در دسترس · {{peers}} همتای متصل · {{pieces}} قطعه',
torrentAvailabilityMap: 'نقشه دسترس‌پذیری شبکه تورنت',
torrentAvailabilityBucket: 'حداقل {{copies}} کپی در این بازه',
torrentDetailsLoading: 'در حال دریافت جزئیات تورنت…',
torrentDetailsUnavailable: 'جزئیات تورنت در دسترس نیست.',
torrentDetailsDisplayName: 'نام نمایشی',
@@ -513,12 +551,14 @@ const fa = {
moveOneFailed: 'انتقال دانلود به صف ناموفق بود',
copyAddressesFailed: 'آدرس‌ها کپی نشدند',
copyAddressFailed: 'آدرس کپی نشد',
copyMagnetFailed: 'پیوند مگنت کپی نشد',
copyPathFailed: 'مسیر فایل کپی نشد',
missingFileName: 'نام فایل وجود ندارد',
redownloadFailed: 'دانلود مجدد ناموفق بود',
startResume: 'شروع/ادامه',
addToQueue: 'افزودن به صف',
copyAddress: 'کپی آدرس',
copyMagnet: 'کپی پیوند مگنت',
remove: 'حذف',
open: 'باز کردن',
showInFolder: 'نمایش در پوشه',
@@ -603,8 +643,11 @@ const fa = {
torrentStopTimeout: 'توقف تورنتِ بدون سرعت پس از',
torrentStopTimeoutHint: 'آریا۲ پس از این تعداد ثانیه پیاپی با سرعت صفر، تورنت را متوقف می‌کند. ۰ این سیاست را غیرفعال می‌کند.',
torrentStopTimeoutInvalid: 'مهلت توقف تورنت باید عددی صحیح بین ۰ و ۶۰۴۸۰۰ ثانیه باشد',
torrentPrioritizePiece: 'اولویت‌بندی قطعه‌های تورنت',
torrentPrioritizePieceHint: 'با این تورنت ذخیره و در شروع یا تلاش مجدد بعدی اعمال می‌شود. ابتدا، انتها یا هر دو را با اندازه اختیاری K یا M وارد کنید.',
torrentPrioritizePiece: 'اولویت دادن به قطعه‌های ابتدا/انتها برای پیش‌نمایش',
torrentPrioritizePieceHead: 'اولویت قطعه‌های ابتدا',
torrentPrioritizePieceTail: 'اولویت قطعه‌های انتها',
torrentPrioritizePieceSize: 'اندازهٔ بازهٔ پیش‌نمایش',
torrentPrioritizePieceHint: 'قطعه‌های ابتدا، انتها یا هر دو را برای پیش‌نمایش انتخاب کنید. هر بازهٔ فعال به‌طور پیش‌فرض 1M است و در شروع یا تلاش مجدد بعدی اعمال می‌شود.',
torrentPrioritizePieceInvalid: 'اولویت قطعه‌های تورنت باید شامل ابتدا یا انتها، با اندازه اختیاری بین 1K و 1024M باشد',
torrentEncryptionPolicy: 'سیاست رمزنگاری تورنت',
torrentEncryptionPolicyHint: 'با این تورنت ذخیره و در شروع یا تلاش مجدد بعدی اعمال می‌شود. سیاست انتخابی تنظیمات رمزنگاری آریا۲ را سازگار نگه می‌دارد.',
+49 -6
View File
@@ -96,6 +96,7 @@ const he = {
completed: 'הושלם',
failed: 'נכשל',
retrying: 'ניסיון חוזר',
moving: 'מעביר נתונים',
},
values: {
processing: 'מעבד…',
@@ -288,11 +289,16 @@ const he = {
torrentPieceProgressSummary: '{{completed}} מתוך {{total}} חלקים הושלמו · {{size}} לכל חלק',
torrentPieceProgressMap: 'מפת השלמת חלקי הטורנט',
torrentWebSeeds: 'זריעות Web של טורנט',
torrentWebSeedsHint: 'שורה אחת לכל זרע בפורמט file index|כתובת HTTP(S). Firelink מרחיב נתיבי קבצים מרובי-קבצים באופן מקורי.',
torrentWebSeedsPlaceholder: '0|https://מראה.example/torrent/',
torrentWebSeedsHint: 'הוסף כתובת בסיס HTTP(S) אחת לכל קובץ טורנט. Firelink מרחיב נתיבים של טורנטים מרובי-קבצים.',
torrentWebSeedsApply: 'החל זריעות Web',
torrentWebSeedsLoading: 'מיישם…',
torrentWebSeedsFailed: 'לא ניתן לאמת או להחיל את זריעות ה-Web של הטורנט.',
torrentWebSeedsEmpty: 'לא הוגדרו זריעות Web.',
torrentWebSeedsFile: 'קובץ',
torrentWebSeedsUri: 'כתובת בסיס HTTP(S)',
torrentWebSeedsAdd: 'הוסף זריעת Web',
torrentWebSeedsRemove: 'הסר זריעת Web',
torrentWebSeedsInvalid: 'כל שורת זריעת Web צריכה קובץ טורנט תקין וכתובת בסיס HTTP(S) ללא פרטי התחברות או fragment.',
torrentPeerCount: '{{total}} עמיתים · {{seeders}} משתפים',
torrentPeerDownload: 'הורדה',
torrentPeerUpload: 'העלאה',
@@ -300,12 +306,22 @@ const he = {
torrentPeerAmChoking: 'Firelink מגביל',
torrentPeerChoking: 'העמית מגביל',
torrentPeerShowing: 'מוצגים {{shown}} מתוך {{total}} עמיתים.',
torrentStatistics: 'סטטיסטיקות טורנט',
torrentUploaded: 'הועלה',
torrentRatio: 'יחס',
torrentSeededDuration: 'משך שיתוף',
torrentConnectedPeers: 'עמיתים',
torrentSeeders: 'משתפים',
torrentUploadSpeed: 'מהירות העלאה',
seconds: 'שניות',
torrentStopTimeout: 'עצירת טורנט תקוע לאחר',
torrentStopTimeoutHint: 'Aria2 יעצור את הטורנט לאחר מספר זה של שניות רצופות במהירות 0 B/s. 0 משבית את המדיניות; השינוי חל כשהטורנט מתחיל או מנסה שוב.',
torrentStopTimeoutInvalid: 'זמן העצירה של טורנט תקוע חייב להיות מספר שלם בין 0 ל-604800 שניות',
torrentPrioritizePiece: 'תעדוף חלקי טורנט',
torrentPrioritizePieceHint: 'מדיניות תצוגה מקדימה אופציונלית של Aria2: התחלה, סוף או שניהם; לכל אחד אפשר לציין גודל כמו 1M. השינוי חל בהפעלה או בניסיון חוזר.',
torrentPrioritizePiece: 'תעדוף החלקים הראשונים/האחרונים לתצוגה מקדימה',
torrentPrioritizePieceHead: 'תעדף חלקים ראשונים',
torrentPrioritizePieceTail: 'תעדף חלקים אחרונים',
torrentPrioritizePieceSize: 'גודל טווח התצוגה המקדימה',
torrentPrioritizePieceHint: 'מדיניות תצוגה מקדימה אופציונלית. כל טווח מופעל מתחיל ב־1M ומוחל כשהטורנט מופעל או מנסה שוב.',
torrentPrioritizePieceInvalid: 'תעדוף חלקי טורנט חייב לכלול התחלה ו/או סוף, עם גודל אופציונלי בין 1K ל-1024M',
torrentEncryptionPolicy: 'מדיניות הצפנת Torrent',
torrentFileAllocation: 'הקצאת קובצי Torrent',
@@ -313,6 +329,28 @@ const he = {
torrentFileAllocationNone: 'הקצאה לפי הצורך',
torrentFileAllocationHint: 'הקצאה מראש שומרת מקום לקבצים לפני ההעברה; הקצאה לפי הצורך נמנעת מהשמירה הראשונית.',
torrentDetails: 'פרטי טורנט',
torrentCopyMagnet: 'העתקת קישור מגנט',
torrentExportMetadata: 'ייצוא .torrent',
torrentMagnetCopied: 'קישור מגנט זהותי הועתק.',
torrentMagnetCopyFailed: 'לא ניתן להעתיק את קישור המגנט.',
torrentMetadataExported: 'מטא־נתוני הטורנט יוצאו.',
torrentMetadataExportFailed: 'לא ניתן לייצא את מטא־נתוני הטורנט.',
torrentMove: 'העברת נתונים…',
torrentMoveLoading: 'מעביר…',
torrentMoveCancel: 'ביטול ההעברה',
torrentMoveCancelRequested: 'בקשת ביטול נשלחה…',
torrentMoveConfirm: 'להעביר את נתוני הטורנט המנוהלים לתיקייה זו? קבצים קיימים לעולם לא יוחלפו.',
torrentMoveCompleted: 'נתוני הטורנט הועברו.',
torrentMoveFailed: 'לא ניתן להעביר את נתוני הטורנט.',
torrentAvailability: 'זמינות הנחיל',
torrentAvailabilityRefresh: 'רענון',
torrentAvailabilityLoading: 'טוען זמינות…',
torrentAvailabilityUnavailable: 'הזמינות זמינה עבור טורנט פעיל או מושהה.',
torrentAvailabilityFailed: 'לא ניתן לקרוא את זמינות הטורנט.',
torrentAvailabilityHint: 'מוצגים רק מספרי עותקים מצטברים; זהויות עמיתים וביטפילדים גולמיים לעולם אינם נחשפים.',
torrentAvailabilitySummary: '{{availability}} עותקים זמינים · {{peers}} עמיתים מחוברים · {{pieces}} חלקים',
torrentAvailabilityMap: 'מפת זמינות נחיל הטורנט',
torrentAvailabilityBucket: 'לפחות {{copies}} עותקים בטווח זה',
torrentDetailsLoading: 'טוען פרטי טורנט…',
torrentDetailsUnavailable: 'פרטי הטורנט אינם זמינים.',
torrentDetailsDisplayName: 'שם תצוגה',
@@ -513,12 +551,14 @@ const he = {
moveOneFailed: 'לא ניתן להעביר הורדה לתור',
copyAddressesFailed: 'לא ניתן להעתיק כתובות',
copyAddressFailed: 'לא ניתן להעתיק כתובת',
copyMagnetFailed: 'לא ניתן להעתיק את קישור המגנט',
copyPathFailed: 'לא ניתן להעתיק נתיב קובץ',
missingFileName: 'שם הקובץ חסר',
redownloadFailed: 'הורדה מחדש נכשלה',
startResume: 'הפעלה/חידוש',
addToQueue: 'הוספה לתור',
copyAddress: 'העתקת כתובת',
copyMagnet: 'העתקת קישור מגנט',
remove: 'הסרה',
open: 'פתיחה',
showInFolder: 'הצגה בתיקייה',
@@ -603,8 +643,11 @@ const he = {
torrentStopTimeout: 'עצירת טורנט תקוע לאחר',
torrentStopTimeoutHint: 'Aria2 יעצור את הטורנט לאחר מספר זה של שניות רצופות במהירות 0 B/s. 0 משבית את המדיניות.',
torrentStopTimeoutInvalid: 'זמן העצירה של טורנט תקוע חייב להיות מספר שלם בין 0 ל-604800 שניות',
torrentPrioritizePiece: 'תעדוף חלקי טורנט',
torrentPrioritizePieceHint: 'נשמר עם הטורנט ומוחל בהפעלה או בניסיון חוזר. יש להזין התחלה, סוף או שניהם עם גודל K או M אופציונלי.',
torrentPrioritizePiece: 'תעדוף החלקים הראשונים/האחרונים לתצוגה מקדימה',
torrentPrioritizePieceHead: 'תעדף חלקים ראשונים',
torrentPrioritizePieceTail: 'תעדף חלקים אחרונים',
torrentPrioritizePieceSize: 'גודל טווח התצוגה המקדימה',
torrentPrioritizePieceHint: 'בחר חלקים ראשונים, אחרונים או את שניהם לתצוגה מקדימה. כל טווח מופעל מתחיל ב־1M ומוחל בהפעלה או בניסיון חוזר הבא.',
torrentPrioritizePieceInvalid: 'תעדוף חלקי טורנט חייב לכלול התחלה ו/או סוף, עם גודל אופציונלי בין 1K ל-1024M',
torrentEncryptionPolicy: 'מדיניות הצפנת Torrent',
torrentEncryptionPolicyHint: 'נשמרת עם ה-Torrent ומוחלת בהפעלה או בניסיון חוזר. המדיניות שומרת על הגדרות ההצפנה של Aria2 עקביות.',
+49 -6
View File
@@ -96,6 +96,7 @@ const ru = {
completed: 'Завершено',
failed: 'Ошибка',
retrying: 'Повторная попытка',
moving: 'Перемещение данных',
},
values: {
processing: 'Обработка…',
@@ -288,11 +289,16 @@ const ru = {
torrentPieceProgressSummary: '{{completed}} из {{total}} частей завершено · по {{size}} на часть',
torrentPieceProgressMap: 'Карта завершения частей торрента',
torrentWebSeeds: 'Веб-сиды торрента',
torrentWebSeedsHint: 'Одна строка на сид в формате индекс файла|HTTP(S)-URI. Firelink сам расширяет пути многофайловых торрентов.',
torrentWebSeedsPlaceholder: '0|https://зеркало.example/torrent/',
torrentWebSeedsHint: 'Добавьте по одному базовому HTTP(S)-адресу для каждого файла торрента. Firelink сам расширит пути многофайлового торрента.',
torrentWebSeedsApply: 'Применить веб-сиды',
torrentWebSeedsLoading: 'Применение…',
torrentWebSeedsFailed: 'Не удалось проверить или применить веб-сиды торрента.',
torrentWebSeedsEmpty: 'Веб-сиды не настроены.',
torrentWebSeedsFile: 'Файл',
torrentWebSeedsUri: 'Базовый HTTP(S)-адрес',
torrentWebSeedsAdd: 'Добавить веб-сид',
torrentWebSeedsRemove: 'Удалить веб-сид',
torrentWebSeedsInvalid: 'В каждой строке веб-сида нужны допустимый файл торрента и базовый HTTP(S)-адрес без учётных данных или фрагмента.',
torrentPeerCount: '{{total}} пиров · {{seeders}} сидеров',
torrentPeerDownload: 'Загрузка',
torrentPeerUpload: 'Отдача',
@@ -300,12 +306,22 @@ const ru = {
torrentPeerAmChoking: 'Firelink ограничивает',
torrentPeerChoking: 'Пир ограничивает',
torrentPeerShowing: 'Показано {{shown}} из {{total}} пиров.',
torrentStatistics: 'Статистика торрента',
torrentUploaded: 'Отдано',
torrentRatio: 'Коэффициент',
torrentSeededDuration: 'Время раздачи',
torrentConnectedPeers: 'Пиры',
torrentSeeders: 'Сиды',
torrentUploadSpeed: 'Скорость отдачи',
seconds: 'секунд',
torrentStopTimeout: 'Останавливать неактивный торрент через',
torrentStopTimeoutHint: 'Aria2 остановит этот торрент после указанного числа секунд подряд при скорости 0 Б/с. 0 отключает правило; изменения применяются при запуске или повторной попытке.',
torrentStopTimeoutInvalid: 'Тайм-аут неактивного торрента должен быть целым числом от 0 до 604800 секунд',
torrentPrioritizePiece: 'Приоритет частей торрента',
torrentPrioritizePieceHint: 'Необязательная политика предпросмотра Aria2: начало, конец или оба варианта; для каждого можно указать размер, например 1M. Применяется при запуске или повторной попытке.',
torrentPrioritizePiece: 'Приоритет первых/последних частей для предпросмотра',
torrentPrioritizePieceHead: 'Приоритет первых частей',
torrentPrioritizePieceTail: 'Приоритет последних частей',
torrentPrioritizePieceSize: 'Размер диапазона предпросмотра',
torrentPrioritizePieceHint: 'Необязательная политика предпросмотра. Каждый включённый диапазон по умолчанию равен 1M и применяется при запуске или повторной попытке.',
torrentPrioritizePieceInvalid: 'Приоритет частей торрента должен содержать начало и/или конец с необязательным размером от 1K до 1024M',
torrentEncryptionPolicy: 'Политика шифрования Torrent',
torrentFileAllocation: 'Выделение места для файлов Torrent',
@@ -314,6 +330,28 @@ const ru = {
torrentFileAllocationHint: 'Предварительное выделение резервирует место до передачи; выделение по мере необходимости не делает начальное резервирование.',
torrentEncryptionPolicyHint: 'Применяется при запуске или повторной попытке Torrent. Выберите одну политику, чтобы параметры handshake и шифрования payload оставались согласованными.',
torrentDetails: 'Сведения о Torrent',
torrentCopyMagnet: 'Копировать magnet-ссылку',
torrentExportMetadata: 'Экспортировать .torrent',
torrentMagnetCopied: 'Magnet-ссылка только с идентификатором скопирована.',
torrentMagnetCopyFailed: 'Не удалось скопировать magnet-ссылку.',
torrentMetadataExported: 'Метаданные Torrent экспортированы.',
torrentMetadataExportFailed: 'Не удалось экспортировать метаданные Torrent.',
torrentMove: 'Переместить данные…',
torrentMoveLoading: 'Перемещение…',
torrentMoveCancel: 'Отменить перемещение',
torrentMoveCancelRequested: 'Запрос на отмену отправлен…',
torrentMoveConfirm: 'Переместить управляемые данные Torrent в эту папку? Существующие файлы не перезаписываются.',
torrentMoveCompleted: 'Данные Torrent перемещены.',
torrentMoveFailed: 'Не удалось переместить данные Torrent.',
torrentAvailability: 'Доступность раздачи',
torrentAvailabilityRefresh: 'Обновить',
torrentAvailabilityLoading: 'Загрузка доступности…',
torrentAvailabilityUnavailable: 'Доступность доступна для активного или приостановленного Torrent.',
torrentAvailabilityFailed: 'Не удалось прочитать доступность Torrent.',
torrentAvailabilityHint: 'Показываются только агрегированные копии; идентификаторы пиров и исходные битовые поля не раскрываются.',
torrentAvailabilitySummary: '{{availability}} доступных копий · {{peers}} подключённых пиров · {{pieces}} частей',
torrentAvailabilityMap: 'Карта доступности раздачи Torrent',
torrentAvailabilityBucket: 'Не менее {{copies}} копий в этом диапазоне',
torrentDetailsLoading: 'Загрузка сведений о Torrent…',
torrentDetailsUnavailable: 'Сведения о Torrent недоступны.',
torrentDetailsDisplayName: 'Отображаемое имя',
@@ -513,12 +551,14 @@ const ru = {
moveOneFailed: 'Не удалось переместить загрузку в очередь',
copyAddressesFailed: 'Не удалось скопировать адреса',
copyAddressFailed: 'Не удалось скопировать адрес',
copyMagnetFailed: 'Не удалось скопировать magnet-ссылку',
copyPathFailed: 'Не удалось скопировать путь к файлу',
missingFileName: 'Отсутствует имя файла',
redownloadFailed: 'Не удалось скачать повторно',
startResume: 'Запустить/Возобновить',
addToQueue: 'Добавить в очередь',
copyAddress: 'Скопировать адрес',
copyMagnet: 'Копировать magnet-ссылку',
remove: 'Удалить',
open: 'Открыть',
showInFolder: 'Показать в папке',
@@ -603,8 +643,11 @@ const ru = {
torrentStopTimeout: 'Останавливать неактивный торрент через',
torrentStopTimeoutHint: 'Aria2 остановит этот торрент после указанного числа секунд подряд при скорости 0 Б/с. 0 отключает правило.',
torrentStopTimeoutInvalid: 'Тайм-аут неактивного торрента должен быть целым числом от 0 до 604800 секунд',
torrentPrioritizePiece: 'Приоритет частей торрента',
torrentPrioritizePieceHint: 'Сохраняется с торрентом и применяется при следующем запуске или повторной попытке. Укажите начало, конец или оба варианта с размером K или M.',
torrentPrioritizePiece: 'Приоритет первых/последних частей для предпросмотра',
torrentPrioritizePieceHead: 'Приоритет первых частей',
torrentPrioritizePieceTail: 'Приоритет последних частей',
torrentPrioritizePieceSize: 'Размер диапазона предпросмотра',
torrentPrioritizePieceHint: 'Выберите первые, последние части или оба варианта для предпросмотра. Каждый включённый диапазон по умолчанию равен 1M и применяется при следующем запуске или повторной попытке.',
torrentPrioritizePieceInvalid: 'Приоритет частей торрента должен содержать начало и/или конец с необязательным размером от 1K до 1024M',
torrentEncryptionPolicy: 'Политика шифрования Torrent',
torrentEncryptionPolicyHint: 'Сохраняется вместе с Torrent и применяется при следующем запуске или повторной попытке. Выбранная политика согласует параметры шифрования Aria2.',
+49 -6
View File
@@ -96,6 +96,7 @@ const uk = {
completed: 'Завершено',
failed: 'Помилка',
retrying: 'Повторна спроба',
moving: 'Переміщення даних',
},
values: {
processing: 'Обробка…',
@@ -288,11 +289,16 @@ const uk = {
torrentPieceProgressSummary: '{{completed}} із {{total}} частин завершено · по {{size}} на частину',
torrentPieceProgressMap: 'Карта завершення частин торрента',
torrentWebSeeds: 'Вебсіди торента',
torrentWebSeedsHint: 'Один рядок на сід у форматі індекс файлу|HTTP(S)-URI. Firelink сам розгортає шляхи багатофайлових торентів.',
torrentWebSeedsPlaceholder: '0|https://дзеркало.example/torrent/',
torrentWebSeedsHint: 'Додайте одну базову HTTP(S)-адресу для кожного файлу торента. Firelink сам розгорне шляхи багатофайлового торента.',
torrentWebSeedsApply: 'Застосувати вебсіди',
torrentWebSeedsLoading: 'Застосування…',
torrentWebSeedsFailed: 'Не вдалося перевірити або застосувати вебсіди торента.',
torrentWebSeedsEmpty: 'Вебсіди не налаштовано.',
torrentWebSeedsFile: 'Файл',
torrentWebSeedsUri: 'Базова HTTP(S)-адреса',
torrentWebSeedsAdd: 'Додати вебсід',
torrentWebSeedsRemove: 'Видалити вебсід',
torrentWebSeedsInvalid: 'Кожен рядок вебсіду має містити дійсний файл торента й базову HTTP(S)-адресу без облікових даних або фрагмента.',
torrentPeerCount: '{{total}} пірів · {{seeders}} сідів',
torrentPeerDownload: 'Завантаження',
torrentPeerUpload: 'Віддача',
@@ -300,12 +306,22 @@ const uk = {
torrentPeerAmChoking: 'Firelink обмежує',
torrentPeerChoking: 'Пір обмежує',
torrentPeerShowing: 'Показано {{shown}} із {{total}} пірів.',
torrentStatistics: 'Статистика торента',
torrentUploaded: 'Віддано',
torrentRatio: 'Коефіцієнт',
torrentSeededDuration: 'Час роздачі',
torrentConnectedPeers: 'Піри',
torrentSeeders: 'Сіди',
torrentUploadSpeed: 'Швидкість віддачі',
seconds: 'секунд',
torrentStopTimeout: 'Зупиняти торрент без швидкості через',
torrentStopTimeoutHint: 'Aria2 зупинить цей торрент після вказаної кількості секунд поспіль зі швидкістю 0 Б/с. 0 вимикає правило; зміни застосовуються під час запуску або повторної спроби.',
torrentStopTimeoutInvalid: 'Тайм-аут зупинки торрента має бути цілим числом від 0 до 604800 секунд',
torrentPrioritizePiece: 'Пріоритет частин торрента',
torrentPrioritizePieceHint: 'Необов’язкова політика попереднього перегляду Aria2: початок, кінець або обидва варіанти; для кожного можна вказати розмір, наприклад 1M. Застосовується під час запуску або повторної спроби.',
torrentPrioritizePiece: 'Пріоритет перших/останніх частин для попереднього перегляду',
torrentPrioritizePieceHead: 'Пріоритет перших частин',
torrentPrioritizePieceTail: 'Пріоритет останніх частин',
torrentPrioritizePieceSize: 'Розмір діапазону попереднього перегляду',
torrentPrioritizePieceHint: 'Необов’язкова політика попереднього перегляду. Кожен увімкнений діапазон за замовчуванням має розмір 1M і застосовується під час запуску або повторної спроби.',
torrentPrioritizePieceInvalid: 'Пріоритет частин торрента має містити початок і/або кінець із необов’язковим розміром від 1K до 1024M',
torrentEncryptionPolicy: 'Політика шифрування Torrent',
torrentFileAllocation: 'Виділення місця для файлів Torrent',
@@ -314,6 +330,28 @@ const uk = {
torrentFileAllocationHint: 'Попереднє виділення резервує місце до передачі; виділення за потреби не робить початкового резервування.',
torrentEncryptionPolicyHint: 'Застосовується під час запуску або повторної спроби Torrent. Виберіть одну політику, щоб параметри handshake і шифрування payload залишалися узгодженими.',
torrentDetails: 'Відомості про Torrent',
torrentCopyMagnet: 'Копіювати magnet-посилання',
torrentExportMetadata: 'Експортувати .torrent',
torrentMagnetCopied: 'Magnet-посилання лише з ідентифікатором скопійовано.',
torrentMagnetCopyFailed: 'Не вдалося скопіювати magnet-посилання.',
torrentMetadataExported: 'Метадані Torrent експортовано.',
torrentMetadataExportFailed: 'Не вдалося експортувати метадані Torrent.',
torrentMove: 'Перемістити дані…',
torrentMoveLoading: 'Переміщення…',
torrentMoveCancel: 'Скасувати переміщення',
torrentMoveCancelRequested: 'Запит на скасування надіслано…',
torrentMoveConfirm: 'Перемістити керовані дані Torrent до цієї папки? Наявні файли не перезаписуються.',
torrentMoveCompleted: 'Дані Torrent переміщено.',
torrentMoveFailed: 'Не вдалося перемістити дані Torrent.',
torrentAvailability: 'Доступність рою',
torrentAvailabilityRefresh: 'Оновити',
torrentAvailabilityLoading: 'Завантаження доступності…',
torrentAvailabilityUnavailable: 'Доступність доступна для активного або призупиненого Torrent.',
torrentAvailabilityFailed: 'Не вдалося прочитати доступність Torrent.',
torrentAvailabilityHint: 'Показано лише агреговані копії; ідентифікатори пірів і сирі бітові поля не розкриваються.',
torrentAvailabilitySummary: '{{availability}} доступних копій · {{peers}} підключених пірів · {{pieces}} частин',
torrentAvailabilityMap: 'Мапа доступності рою Torrent',
torrentAvailabilityBucket: 'Щонайменше {{copies}} копій у цьому діапазоні',
torrentDetailsLoading: 'Завантаження відомостей про Torrent…',
torrentDetailsUnavailable: 'Відомості про Torrent недоступні.',
torrentDetailsDisplayName: 'Назва',
@@ -513,12 +551,14 @@ const uk = {
moveOneFailed: 'Не вдалося перемістити завантаження до черги',
copyAddressesFailed: 'Не вдалося скопіювати адреси',
copyAddressFailed: 'Не вдалося скопіювати адресу',
copyMagnetFailed: 'Не вдалося скопіювати magnet-посилання',
copyPathFailed: 'Не вдалося скопіювати шлях до файлу',
missingFileName: 'Ім\'я файлу відсутнє',
redownloadFailed: 'Не вдалося повторно завантажити',
startResume: 'Запустити/Відновити',
addToQueue: 'Додати до черги',
copyAddress: 'Скопіювати адресу',
copyMagnet: 'Копіювати magnet-посилання',
remove: 'Видалити',
open: 'Відкрити',
showInFolder: 'Показати в папці',
@@ -603,8 +643,11 @@ const uk = {
torrentStopTimeout: 'Зупиняти торрент без швидкості через',
torrentStopTimeoutHint: 'Aria2 зупинить цей торрент після вказаної кількості секунд поспіль зі швидкістю 0 Б/с. 0 вимикає правило.',
torrentStopTimeoutInvalid: 'Тайм-аут зупинки торрента має бути цілим числом від 0 до 604800 секунд',
torrentPrioritizePiece: 'Пріоритет частин торрента',
torrentPrioritizePieceHint: 'Зберігається разом із торрентом і застосовується під час наступного запуску або повторної спроби. Укажіть початок, кінець або обидва варіанти з розміром K чи M.',
torrentPrioritizePiece: 'Пріоритет перших/останніх частин для попереднього перегляду',
torrentPrioritizePieceHead: 'Пріоритет перших частин',
torrentPrioritizePieceTail: 'Пріоритет останніх частин',
torrentPrioritizePieceSize: 'Розмір діапазону попереднього перегляду',
torrentPrioritizePieceHint: 'Виберіть перші, останні частини або обидва варіанти для попереднього перегляду. Кожен увімкнений діапазон за замовчуванням має розмір 1M і застосовується під час наступного запуску або повторної спроби.',
torrentPrioritizePieceInvalid: 'Пріоритет частин торрента має містити початок і/або кінець із необов’язковим розміром від 1K до 1024M',
torrentEncryptionPolicy: 'Політика шифрування Torrent',
torrentEncryptionPolicyHint: 'Зберігається разом із Torrent і застосовується під час наступного запуску або повторної спроби. Вибрана політика узгоджує параметри шифрування Aria2.',
+49 -6
View File
@@ -96,6 +96,7 @@ const zhCN = {
completed: '已完成',
failed: '失败',
retrying: '重试中',
moving: '正在移动数据',
},
values: {
processing: '处理中…',
@@ -288,11 +289,16 @@ const zhCN = {
torrentPieceProgressSummary: '{{completed}}/{{total}} 个分片已完成 · 每片 {{size}}',
torrentPieceProgressMap: 'Torrent 分片完成度地图',
torrentWebSeeds: 'Torrent Web 做种',
torrentWebSeedsHint: '每行一个做种,格式为文件索引|HTTP(S) URI。多文件路径由 Firelink 原生展开。',
torrentWebSeedsPlaceholder: '0|https://镜像.example/torrent/',
torrentWebSeedsHint: '为每个 Torrent 文件添加一个 HTTP(S) 基础地址。多文件路径由 Firelink 原生展开。',
torrentWebSeedsApply: '应用 Web 做种',
torrentWebSeedsLoading: '正在应用…',
torrentWebSeedsFailed: '无法验证或应用 Torrent Web 做种。',
torrentWebSeedsEmpty: '尚未配置 Web 做种。',
torrentWebSeedsFile: '文件',
torrentWebSeedsUri: 'HTTP(S) 基础地址',
torrentWebSeedsAdd: '添加 Web 做种',
torrentWebSeedsRemove: '移除 Web 做种',
torrentWebSeedsInvalid: '每行 Web 做种都需要有效的 Torrent 文件和不含凭据或片段的 HTTP(S) 基础地址。',
torrentPeerCount: '{{total}} 个节点 · {{seeders}} 个做种节点',
torrentPeerDownload: '下载',
torrentPeerUpload: '上传',
@@ -300,12 +306,22 @@ const zhCN = {
torrentPeerAmChoking: 'Firelink 限制中',
torrentPeerChoking: '对等节点限制中',
torrentPeerShowing: '显示 {{total}} 个节点中的 {{shown}} 个。',
torrentStatistics: '种子统计',
torrentUploaded: '已上传',
torrentRatio: '分享率',
torrentSeededDuration: '做种时长',
torrentConnectedPeers: '连接数',
torrentSeeders: '种子数',
torrentUploadSpeed: '上传速度',
seconds: '秒',
torrentStopTimeout: '在此时间后停止无速度 Torrent',
torrentStopTimeoutHint: 'Aria2 会在速度连续为 0 B/s 达到此秒数后停止该 Torrent。0 表示禁用;更改会在 Torrent 启动或重试时应用。',
torrentStopTimeoutInvalid: 'Torrent 停止超时必须是 0 到 604800 秒之间的整数',
torrentPrioritizePiece: '优先下载 Torrent 片段',
torrentPrioritizePieceHint: '可选的 Aria2 预览策略:开头、结尾或两者;每项可使用 1M 等大小。Torrent 启动或重试时应用。',
torrentPrioritizePiece: '为预览优先下载开头/结尾片段',
torrentPrioritizePieceHead: '优先下载开头片段',
torrentPrioritizePieceTail: '优先下载结尾片段',
torrentPrioritizePieceSize: '预览片段范围大小',
torrentPrioritizePieceHint: '可选的预览策略。每个启用的范围默认为 1M,并在 Torrent 启动或重试时应用。',
torrentPrioritizePieceInvalid: 'Torrent 片段优先级必须使用开头和/或结尾,并可选 1K 到 1024M 的大小',
torrentEncryptionPolicy: 'Torrent 加密策略',
torrentFileAllocation: 'Torrent 文件分配',
@@ -314,6 +330,28 @@ const zhCN = {
torrentFileAllocationHint: '预分配会在传输前为选中文件预留空间;按需分配不会进行初始磁盘预留。',
torrentEncryptionPolicyHint: '在 Torrent 启动或重试时应用。选择单一策略,确保握手和 payload 加密设置保持一致。',
torrentDetails: 'Torrent 详细信息',
torrentCopyMagnet: '复制磁力链接',
torrentExportMetadata: '导出 .torrent',
torrentMagnetCopied: '仅包含身份信息的磁力链接已复制。',
torrentMagnetCopyFailed: '无法复制磁力链接。',
torrentMetadataExported: 'Torrent 元数据已导出。',
torrentMetadataExportFailed: '无法导出 Torrent 元数据。',
torrentMove: '移动数据…',
torrentMoveLoading: '正在移动…',
torrentMoveCancel: '取消移动',
torrentMoveCancelRequested: '已请求取消移动…',
torrentMoveConfirm: '要将托管的 Torrent 数据移动到此文件夹吗?不会覆盖现有文件。',
torrentMoveCompleted: 'Torrent 数据已移动。',
torrentMoveFailed: '无法移动 Torrent 数据。',
torrentAvailability: '种群可用性',
torrentAvailabilityRefresh: '刷新',
torrentAvailabilityLoading: '正在加载可用性…',
torrentAvailabilityUnavailable: '活动或暂停的 Torrent 可查看可用性。',
torrentAvailabilityFailed: '无法读取 Torrent 可用性。',
torrentAvailabilityHint: '仅显示聚合副本数量;不会暴露节点身份或原始位字段。',
torrentAvailabilitySummary: '{{availability}} 个可用副本 · {{peers}} 个已连接节点 · {{pieces}} 个分片',
torrentAvailabilityMap: 'Torrent 种群可用性图',
torrentAvailabilityBucket: '此范围至少有 {{copies}} 个副本',
torrentDetailsLoading: '正在加载 Torrent 详细信息…',
torrentDetailsUnavailable: 'Torrent 详细信息不可用。',
torrentDetailsDisplayName: '显示名称',
@@ -513,12 +551,14 @@ const zhCN = {
moveOneFailed: '无法将下载移动到队列',
copyAddressesFailed: '无法复制地址',
copyAddressFailed: '无法复制地址',
copyMagnetFailed: '无法复制磁力链接',
copyPathFailed: '无法复制文件路径',
missingFileName: '缺少文件名',
redownloadFailed: '重新下载失败',
startResume: '开始/恢复',
addToQueue: '添加到队列',
copyAddress: '复制地址',
copyMagnet: '复制磁力链接',
remove: '移除',
open: '打开',
showInFolder: '在文件夹中显示',
@@ -603,8 +643,11 @@ const zhCN = {
torrentStopTimeout: '在此时间后停止无速度 Torrent',
torrentStopTimeoutHint: 'Aria2 会在速度连续为 0 B/s 达到此秒数后停止该 Torrent。0 表示禁用。',
torrentStopTimeoutInvalid: 'Torrent 停止超时必须是 0 到 604800 秒之间的整数',
torrentPrioritizePiece: '优先下载 Torrent 片段',
torrentPrioritizePieceHint: '随 Torrent 保存,并在下次启动或重试时应用。可使用开头、结尾或两者,并可选 K 或 M 大小。',
torrentPrioritizePiece: '为预览优先下载开头/结尾片段',
torrentPrioritizePieceHead: '优先下载开头片段',
torrentPrioritizePieceTail: '优先下载结尾片段',
torrentPrioritizePieceSize: '预览片段范围大小',
torrentPrioritizePieceHint: '选择开头片段、结尾片段或两者用于预览。每个启用的范围默认为 1M,并在下次启动或重试时应用。',
torrentPrioritizePieceInvalid: 'Torrent 片段优先级必须使用开头和/或结尾,并可选 1K 到 1024M 的大小',
torrentEncryptionPolicy: 'Torrent 加密策略',
torrentEncryptionPolicyHint: '随 Torrent 保存,并在下次启动或重试时应用。所选策略会保持 Aria2 加密设置一致。',