+
+---
+
+
+## ❓ چرا YTSage؟
+
+YTSage برای کاربرانی طراحی شده که به دنبال یک **دانلودکننده یوتیوب ساده اما قدرتمند** هستند. برخلاف سایر ابزارها، این برنامه موارد زیر را ارائه میدهد:
+
+- رابط کاربری مدرن و تمیز PySide6
+- دانلود با یک کلیک برای ویدیو، صدا و زیرنویس
+- امکانات پیشرفته مانند SponsorBlock، ادغام زیرنویس و انتخاب پلیلیست
+- حالت عمومی (Generic Mode) اختیاری برای سایتهای پشتیبانیشده توسط yt-dlp فراتر از یوتیوب
+- پشتیبانی چندسکویی و نصب آسان
+
+
+## ✨ امکانات
+
+
+
+
+## 🚀 نصب
+
+### ⚡ نصب سریع (پیشنهادی)
+
+YTSage را از طریق PyPI نصب کنید:
+
+```bash
+pip install ytsage
+```
+
+
+🔄 بهروزرسانی یک نصب موجود
+
+```bash
+pip install --upgrade ytsage
+```
+
+
+
+سپس برنامه را اجرا کنید:
+
+```bash
+ytsage
+```
+
+### 📦 فایلهای اجرایی از پیش ساختهشده
+
+> [👉 دانلود آخرین نسخه](https://github.com/oop7/YTSage/releases/latest)
+
+#### 🪟 ویندوز
+
+| فرمت | توضیحات |
+|--------|-------------|
+|  | نصبکننده استاندارد |
+|  | همراه با FFmpeg |
+|  | نسخه پرتابل، بدون نیاز به نصب |
+|  | پرتابل همراه با FFmpeg، فشردهشده |
+
+
+🛠️ مراحل نصب
+
+1. **نصبکننده EXE (`.exe`)**: روی فایل دوبار کلیک کرده و مراحل نصب را دنبال کنید.
+2. **نسخه پرتابل (`.zip`)**: آرشیو را در مکان دلخواه استخراج کرده و `ytsage.exe` را اجرا کنید.
+3. **همراه با FFmpeg**: در صورتی که FFmpeg روی سیستم شما نصب نیست، نسخههای همراه با FFmpeg را انتخاب کنید.
+
+
+#### 🐧 لینوکس
+
+| فرمت | توضیحات |
+|--------|-------------|
+|  | بسته دبیان |
+|  | AppImage، پرتابل |
+|  | بسته RPM |
+|  | بسته Flatpak |
+
+
+🛠️ مراحل نصب
+
+- **DEB (`.deb`)**:
+ ```bash
+ sudo dpkg -i ytsage_*.deb
+ sudo apt-get install -f # در صورت نیاز، وابستگیهای ناقص را رفع میکند
+ ```
+- **RPM (`.rpm`)**:
+ ```bash
+ sudo rpm -i ytsage-*.rpm
+ ```
+- **AppImage (`.AppImage`)**:
+ ```bash
+ chmod +x YTSage-*.AppImage
+ ./YTSage-*.AppImage
+ ```
+- **Flatpak**: دستورالعملهای موجود در Flathub را دنبال کنید یا اجرا کنید:
+ ```bash
+ flatpak install flathub io.github.oop7.ytsage
+ ```
+
+
+#### 🍎 macOS
+
+| فرمت | توضیحات |
+|--------|-------------|
+|  | برنامه فشردهشده برای Apple Silicon |
+|  | نصبکننده تصویر دیسک برای Apple Silicon |
+
+
+🛠️ مراحل نصب
+
+- **نصبکننده DMG (`.dmg`)**: برای مانت کردن دوبار کلیک کنید، سپس `YTSage.app` را به پوشه Applications بکشید.
+- **آرشیو برنامه (`.zip`)**: فایل zip را استخراج کرده و `YTSage.app` را به پوشه Applications منتقل کنید.
+
+*توجه: اگر با خطای "برنامه آسیب دیده است" مواجه شدید، به بخش عیبیابی macOS در پایین مراجعه کنید.*
+
+
+---
+
+
+💻 نصب دستی از کد منبع
+
+### ۱. کلون کردن مخزن
+
+```bash
+git clone https://github.com/oop7/YTSage.git
+cd YTSage
+```
+
+### ۲. نصب وابستگیها
+
+#### ⚡ با uv
+
+```bash
+uv pip install .
+```
+
+#### 📦 یا با pip استاندارد
+
+```bash
+pip install .
+```
+
+### ۳. اجرای برنامه
+
+```bash
+python -m ytsage.main
+```
+
+
+
+
+## 📸 تصاویر
+
+
+
+
+
+
+
+
+
تنظیمات دانلود
+
دانلود پلیلیست
+
+
+
+
+
+
+
فرمت صدا
+
گزینههای سفارشی
+
+
+
+
+
+## 📖 استفاده
+
+
+🎯 استفاده پایه
+
+1. **YTSage را اجرا کنید**
+2. **لینک یوتیوب را بچسبانید** (یا از دکمه "Paste URL" استفاده کنید)
+3. **روی "Analyze" کلیک کنید**
+4. **فرمت را انتخاب کنید:**
+ - `Video` برای دانلود ویدیو
+ - `Audio Only` برای استخراج صدا
+5. **گزینهها را انتخاب کنید:**
+ - فعالسازی زیرنویس و انتخاب زبان
+ - فعالسازی ادغام زیرنویس
+ - ذخیره تصویر بندانگشتی
+ - حذف بخشهای اسپانسری
+ - ذخیره توضیحات
+ - یکپارچهسازی فصلها
+6. **پوشه خروجی را انتخاب کنید**
+7. **روی "Download" کلیک کنید**
+
+> 💡 پوشه دانلود پیشفرض، پوشه "Downloads" کاربر است.
+
+
+
+
+📋 دانلود پلیلیست
+
+1. **لینک پلیلیست را بچسبانید**
+2. **روی "Analyze" کلیک کنید**
+3. **ویدیوها را از انتخابگر پلیلیست انتخاب کنید (اختیاری، بهطور پیشفرض همه انتخاب میشوند)**
+4. **فرمت/کیفیت مورد نظر را انتخاب کنید**
+5. **روی "Download" کلیک کنید**
+
+> 💡 برنامه بهطور خودکار صف دانلود را مدیریت میکند، و میتوانید ورودیهای پلیلیست را به فرمت `.txt`، `.csv`، `.m3u` یا `.json` خروجی بگیرید.
+
+
+
+
+🌍 حالت عمومی برای سایتهای غیر یوتیوبی
+
+از حالت عمومی (Generic Mode) زمانی استفاده کنید که میخواهید YTSage لینکهایی از سایتهای پشتیبانیشده توسط yt-dlp، مانند Dailymotion، CBC Gem، TikTok و سایرین را بپذیرد.
+
+نحوه استفاده:
+
+1. `Download Settings` را باز کنید.
+2. `Generic Mode` را فعال کنید.
+3. لینک ویدیو یا پلیلیست پشتیبانیشدهای که یوتیوب نیست را بچسبانید.
+4. روی `Analyze` کلیک کنید.
+5. یک فرمت انتخاب کرده و مانند همیشه دانلود کنید.
+
+نکات:
+
+- حالت عمومی فقط اعتبارسنجی لینک را در داخل YTSage تغییر میدهد. سایت مقصد همچنان باید توسط نسخه نصبشده yt-dlp شما پشتیبانی شود.
+- برخی سایتها بسته به استخراجکننده، نیاز به کوکی، نشست ورود، پروکسی یا آرگومانهای اضافی yt-dlp دارند.
+- اگر سایتی با شکست مواجه شد، ابتدا yt-dlp را از تب بهروزرسانی یکپارچه بهروز کنید و سپس مشکل را گزارش دهید.
+
+
+
+
+🧰 گزینههای رسانه و دانلود
+
+- **گزینههای زیرنویس:** فیلتر زبانها و یکپارچهسازی زیرنویس در فایل ویدیو.
+- **ادغام زیرنویس:** ادغام زیرنویس در فایل ویدیو برای زیرنویسهای چسبیده (hardcoded).
+- **ذخیره توضیحات:** ذخیره توضیحات ویدیو بهصورت فایل متنی.
+- **ذخیره تصویر بندانگشتی:** ذخیره تصویر بندانگشتی ویدیو بهصورت فایل تصویری.
+- **یکپارچهسازی فصلها:** یکپارچهسازی نشانگرهای فصل بهعنوان فراداده برای پخشکنندههای ویدیوی سازگار.
+- **حذف بخشهای اسپانسری:** حذف بخشهای اسپانسری از ویدیو با استفاده از SponsorBlock.
+- **برش ویدیو:** فقط بخشهای خاصی از یک ویدیو را با مشخص کردن بازههای زمانی به فرمت `HH:MM:SS` دانلود کنید.
+
+
+
+
+⚙️ تنظیمات خروجی و فایل
+
+- **محدودکننده سرعت:** محدود کردن سرعت دانلود، برای مثال `500K` برای ۵۰۰ کیلوبایت بر ثانیه.
+- **ذخیره مسیر دانلود:** مسیر دانلود پیشفرض را برای دانلودهای آینده ذخیره میکند. در **Download Settings → Download Path** موجود است.
+- **وضوح تصویر پیشفرض ویدیو:** وضوح تصویر ترجیحی خود را برای انتخاب خودکار بهطور پیشفرض تنظیم کنید (مثلاً 1080p، 720p). در **Download Settings → Default Video Resolution** موجود است.
+- **زبانهای زیرنویس پیشفرض:** زبانهای زیرنویس پیشفرض را برای انتخاب خودکار تنظیم کنید (با کاما جدا شوند، مثلاً `fr,en`). در **Download Settings → Default Subtitle Languages** موجود است.
+- **فرمت نام فایل خروجی:** فرمت نام فایل خروجی را با استفاده از متغیرهایی مانند `%(title)s`، `%(uploader)s`، `%(playlist_index)s` و `%(resolution)s` سفارشیسازی کنید. در **Download Settings → Filename Format** موجود است.
+- **اجبار فرمت خروجی:** دانلودهای ویدیو را به فرمت کانتینر خاصی مانند `mp4`، `webm` یا `mkv` اجبار کنید. در **Download Settings → Output Format Settings** موجود است.
+- **تبدیل فرمت صدا:** دانلودهای فقط صوتی را به فرمتهای ترجیحی مانند `AAC`، `MP3`، `FLAC`، `WAV`، `Opus`، `M4A`، `Vorbis` یا `Best` تبدیل کنید. در **Download Settings → Audio Format Settings** موجود است.
+- **نرمالسازی صدا:** استانداردسازی حجم صدا برای دانلودهای فقط صوتی با استفاده از EBU R128.
+- **اتصالات همزمان:** سرعت دانلود را با دانلود فایلها در چندین قطعه بهصورت همزمان بهطور قابل توجهی افزایش دهید. در **Download Settings → General → Concurrent Connections** موجود است (پیشفرض ۱، حداکثر پیشنهادی ۸ تا ۱۰ برای جلوگیری از محدودیت IP).
+
+
+
+
+🌐 دسترسی و شبکه
+
+- **ورود با کوکی:** با استفاده از کوکیها به یوتیوب وارد شوید تا به محتوای خصوصی دسترسی داشته باشید.
+ نحوه استفاده:
+ 1. **پیشنهادی:** از گزینه یکپارچه `Extract cookies from browser` در برنامه استفاده کرده، سپس مرورگر و در صورت لزوم یک پروفایل را انتخاب کنید.
+ 2. یا بهطور جایگزین، کوکیها را بهصورت دستی استخراج کنید:
+ الف. کوکیهای مرورگر خود را با استفاده از افزونهای مانند [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) خروجی بگیرید
+ ب. کوکیها را به فرمت Netscape کپی کنید
+ ج. فایلی با نام `cookies.txt` ایجاد کرده و کوکیها را در آن بچسبانید
+ د. فایل `cookies.txt` را در برنامه انتخاب کنید
+- **پشتیبانی پروکسی:** از یک سرور پروکسی برای دانلودها استفاده کنید، برای مثال `http://:`
+- **حالت عمومی:** به YTSage اجازه میدهد از سایتهای غیر یوتیوبی پشتیبانیشده توسط yt-dlp تحلیل و دانلود کند. آن را از **Download Settings → Generic Mode** فعال کنید.
+
+
+
+
+🛠️ ابزارها و نگهداری
+
+- **دستورات سفارشی:** به امکانات پیشرفته yt-dlp از طریق آرگومانهای خط فرمان دسترسی پیدا کنید.
+- **تب بهروزرسانی:** ابزارهای بهروزرسانی یکپارچه را از یک مکان در تنظیمات سفارشی مدیریت کنید:
+ - **بهروزرسانیهای yt-dlp:** بررسی بهروزرسانیها و جابهجایی بین کانالهای نسخه پایدار و شبانه.
+ - **بررسیکننده نسخه FFmpeg:** نسخه FFmpeg خود را بررسی کرده و راهنماهای نصب را باز کنید.
+ - **بهروزرسانیهای Deno:** بررسی و بهروزرسانی موتور اجرای Deno.
+- **شناسایی FFmpeg/yt-dlp/Deno:** مسیرها و نسخههای FFmpeg، yt-dlp و Deno را بهطور خودکار از پنجره درباره شناسایی میکند.
+- **تاریخچه دانلود:** دانلودهای گذشته را همراه با تصاویر بندانگشتی و وضعیت آنها از دکمه **History** مشاهده کنید.
+
+
+
+
+🌍 محلیسازی
+
+YTSage از **۱۴ زبان** برای دسترسیپذیری جهانی پشتیبانی میکند. زبان ترجیحی خود را از **Custom Options → Language** انتخاب کنید.
+
+### زبانهای پشتیبانیشده
+
+| زبان | کد | زبان | کد |
+|----------|------|----------|------|
+| 🇺🇸 انگلیسی | `en` | 🇪🇸 اسپانیایی | `es` |
+| 🇸🇦 عربی | `ar` | 🇫🇷 فرانسوی | `fr` |
+| 🇩🇪 آلمانی | `de` | 🇮🇳 هندی | `hi` |
+| 🇮🇩 اندونزیایی | `id` | 🇮🇹 ایتالیایی | `it` |
+| 🇯🇵 ژاپنی | `ja` | 🇵🇱 لهستانی | `pl` |
+| 🇧🇷 پرتغالی | `pt` | 🇷🇺 روسی | `ru` |
+| 🇹🇷 ترکی | `tr` | 🇨🇳 چینی | `zh` |
+| 🇮🇷 فارسی | `fa` |
+
+### ترجمههای READMEترکی
+
+| زبان | فایل | زبان | فایل |
+|----------|------|----------|------|
+| 🇺🇸 انگلیسی | [README.md](../README.md) | 🇪🇸 اسپانیایی | [README.es.md](README.es.md) |
+| 🇸🇦 عربی | [README.ar.md](README.ar.md) | 🇫🇷 فرانسوی | [README.fr.md](README.fr.md) |
+| 🇩🇪 آلمانی | [README.de.md](README.de.md) | 🇮🇳 هندی | [README.hi.md](README.hi.md) |
+| 🇮🇩 اندونزیایی | [README.id.md](README.id.md) | 🇮🇹 ایتالیایی | [README.it.md](README.it.md) |
+| 🇯🇵 ژاپنی | [README.ja.md](README.ja.md) | 🇵🇱 لهستانی | [README.pl.md](README.pl.md) |
+| 🇧🇷 پرتغالی | [README.pt.md](README.pt.md) | 🇷🇺 روسی | [README.ru.md](README.ru.md) |
+| 🇹🇷 ترکی | [README.tr.md](README.tr.md) | 🇨🇳 چینی | [README.zh.md](README.zh.md) |
+| 🇮🇷 فارسی | [README.fa.md](README.fa.md) |
+
+> 💡 **میخواهید در یک ترجمه مشارکت کنید؟** بخش [مشارکت](#contributing) را ببینید تا به ما در افزودن زبانهای بیشتر کمک کنید!
+
+
+
+
+## 🛠️ عیبیابی
+
+
+برای مشاهده مشکلات رایج و راهحلها کلیک کنید
+
+- **جدول فرمتها نمایش داده نمیشود:** yt-dlp را به آخرین نسخه بهروزرسانی کرده و به کانال شبانه yt-dlp تغییر دهید.
+- **دانلود ناموفق است:** اتصال اینترنت خود را بررسی کرده و مطمئن شوید ویدیو در دسترس است.
+- **خطاهای خاص دانلود:**
+ - **ویدیوهای خصوصی:** برای دسترسی به محتوای خصوصی از احراز هویت با کوکی استفاده کنید.
+ - **محتوای دارای محدودیت سنی:** برای مشاهده ویدیوهای دارای محدودیت سنی به حساب یوتیوب خود وارد شوید.
+ - **ویدیوهای دارای محدودیت جغرافیایی:** برای دور زدن محدودیتهای منطقهای استفاده از VPN را در نظر بگیرید.
+ - **ویدیوهای حذفشده:** ویدیو دیگر در یوتیوب موجود نیست.
+ - **پخشهای زنده (Live streams):** پخشهای زنده قابل دانلود نیستند؛ منتظر پایان پخش بمانید.
+ - **خطاهای شبکه:** اتصال اینترنت خود را بررسی کرده و دوباره تلاش کنید.
+ - **لینکهای نامعتبر:** مطمئن شوید لینک صحیح بوده و از یک پلتفرم پشتیبانیشده است.
+ - **محتوای پرمیوم:** نیازمند اشتراک یوتیوب پرمیوم است.
+ - **مسدودیتهای کپیرایت:** محتوا به دلیل محدودیتهای کپیرایت مسدود شده است.
+- **فایلهای ویدیو و صدای جداگانه پس از دانلود:** این اتفاق زمانی رخ میدهد که FFmpeg موجود نباشد یا شناسایی نشود. YTSage برای ادغام جریانهای ویدیو و صدای با کیفیت بالا نیاز به FFmpeg دارد.
+ - **راهحل:** مطمئن شوید FFmpeg نصب شده و در PATH سیستم شما قابل دسترسی است. برای کاربران ویندوز، سادهترین گزینه دانلود فایل `YTSage-v-ffmpeg.exe` است که همراه با FFmpeg ارائه میشود.
+
+---
+
+#### 🛡️ هشدار Windows Defender / آنتیویروس
+
+برخی نرمافزارهای آنتیویروس ممکن است فایلهای `.exe` را بهعنوان مثبت کاذب علامتگذاری کنند. این یک **محدودیت شناختهشده** برنامههای بستهبندیشده است.
+
+**چرا این اتفاق میافتد:**
+- الگوریتمهای اکتشافی آنتیویروس ممکن است به اشتباه فایلهای اجرایی بستهبندیشده را مشکوک تشخیص دهند.
+
+**جایگزینهای امن:**
+- ✅ **استفاده از نصب pip:** `pip install ytsage` (پیشنهادی)
+- ✅ **کامپایل از کد منبع**: با دنبال کردن این [راهنما](../.github/CI_CD_README.md)
+- ✅ **افزودن برنامه به لیست سفید** در نرمافزار آنتیویروس خود.
+
+#### 🍎 macOS: "برنامه آسیب دیده است و نمیتوان آن را باز کرد"
+اگر این خطا را در macOS Sonoma یا نسخه جدیدتر مشاهده کردید، باید ویژگی قرنطینه (quarantine) را حذف کنید.
+
+1. **ترمینال را باز کنید** (میتوانید آن را با استفاده از Spotlight پیدا کنید).
+2. **دستور زیر را تایپ کنید** اما هنوز **Enter را نزنید**. مطمئن شوید فاصله انتهایی را نیز وارد کردهاید:
+ ```bash
+ xattr -d com.apple.quarantine
+ ```
+3. **فایل `YTSage.app`** را از پنجره Finder بکشید و مستقیماً در پنجره ترمینال رها کنید. این کار مسیر صحیح فایل را بهطور خودکار میچسباند.
+4. **Enter را بزنید** تا دستور اجرا شود.
+5. **دوباره سعی کنید YTSage.app را باز کنید.** اکنون باید بهدرستی اجرا شود.
+
+---
+
+#### **مکانهای پیکربندی (پیشرفته)**
+- **ویندوز:** `%LOCALAPPDATA%\YTSage`
+- **macOS:** `~/Library/Application Support/YTSage`
+- **لینوکس:** `~/.local/share/YTSage`
+
+
+
+
+## 💖 حمایت مالی
+
+اگر YTSage در وقت شما صرفهجویی میکند، حمایت مالی از این پروژه را در نظر بگیرید. حمایت مالی به پوشش زمان توسعه، آزمایش روی همه پلتفرمها و بهبودهای آینده کمک میکند.
+
+- حامیان مالی گیتهاب: https://github.com/sponsors/oop7
+- لینک حمایت مالی همچنین مستقیماً از طریق پنجره درباره در داخل برنامه در دسترس است.
+
+[](https://github.com/sponsors/oop7)
+
+
+## 👥 مشارکت
+
+ما با کمال میل از مشارکتها استقبال میکنیم! در اینجا نحوه کمک شما آمده است:
+
+۱. 🍴 مخزن را فورک کنید
+۲. 🌿 شاخه فیچر خود را ایجاد کنید:
+ ```bash
+ git checkout -b feature/AmazingFeature
+ ```
+۳. 💾 تغییرات خود را کامیت کنید:
+ ```bash
+ git commit -m 'Add some AmazingFeature'
+ ```
+۴. 📤 به شاخه پوش کنید:
+ ```bash
+ git push origin feature/AmazingFeature
+ ```
+۵. 🔄 یک Pull Request باز کنید
+
+### 🌍 مشارکت در ترجمهها
+
+- فایل README محلیشده مربوطه را بهروزرسانی کنید (مثلاً `readme-translations/README.fr.md`)
+- با ویرایش `ytsage/languages/.json` رشتههای برنامه را همگام نگه دارید
+- اگر زبان شما موجود نیست، از `README.md` شروع کرده و `README..md` را ایجاد کنید
+
+
+📂 ساختار پروژه
+
+## YTSage - ساختار پروژه
+
+این سند ساختار سازمانیافته پوشههای YTSage را شرح میدهد.
+
+### 📁 ساختار پروژه
+
+```
+YTSage/
+├── 📁 .github/ # پیکربندی گیتهاب
+│ ├── 📁 ISSUE_TEMPLATE/ # قالبهای تیکت
+│ │ └── 🐛-bug-report.md # قالب گزارش باگ
+│ ├─── 📁 workflows/ # جریانهای کاری GitHub Actions
+│ │ ├── build-linux.yml # جریان کاری بیلد لینوکس
+│ │ ├── build-macos.yml # جریان کاری بیلد macOS
+│ │ │── build-windows.yml # جریان کاری بیلد ویندوز
+| | └── release-all.yml # جریان کاری انتشار master
+│ └── 📄 CI_CD_README.md # مستندات CI/CD
+├── 📁 branding/ # منابع برند (تصاویر، SVGها)
+│ ├── 📁 icons/ # آیکونهای برنامه
+│ ├── 📁 screenshots/ # تصاویر برای مستندات
+│ └── 📁 svg/ # منابع SVG
+├── 📄 LICENSE # فایل مجوز
+├── 📄 pyproject.toml # فراداده و وابستگیهای پروژه
+├── 📄 README.md # مستندات پروژه
+├── 📄 requirements.txt # وابستگیهای پایتون (توسعه)
+└── 📁 ytsage/ # بسته کد منبع
+ ├── 📁 assets/ # منابع زمان اجرا
+ │ ├── 📁 Icon/ # آیکونهای برنامه
+ │ └── 📁 sound/ # فایلهای صوتی
+ ├── 📁 languages/ # فایلهای محلیسازی
+ │ ├── 📄 ar.json # ترجمه عربی
+ │ ├── 📄 de.json # ترجمه آلمانی
+ │ ├── 📄 en.json # ترجمه انگلیسی
+ │ └── ... # سایر زبانها
+ ├── 📁 core/ # منطق اصلی کسبوکار
+ │ ├── 📄 __init__.py # مقداردهی اولیه بسته core
+ │ ├── 📄 ytsage_deno.py # یکپارچهسازی Deno
+ │ ├── 📄 ytsage_downloader.py # قابلیت دانلود
+ │ ├── 📄 ytsage_ffmpeg.py # یکپارچهسازی FFmpeg
+ │ ├── 📄 ytsage_utils.py # توابع کمکی
+ │ └── 📄 ytsage_yt_dlp.py # یکپارچهسازی yt-dlp
+ ├── 📁 gui/ # اجزای رابط کاربری
+ │ ├── 📄 __init__.py # مقداردهی اولیه بسته GUI
+ │ ├── 📄 ytsage_gui_main.py # پنجره اصلی برنامه
+ │ └── 📁 ytsage_gui_dialogs/ # کلاسهای پنجرههای دیالوگ
+ ├── 📁 utils/ # ماژولهای کمکی
+ │ ├── 📄 __init__.py # مقداردهی اولیه بسته utils
+ │ ├── 📄 ytsage_config_manager.py # مدیریت پیکربندی
+ │ └── 📄 ytsage_logger.py # ابزارهای گزارشگیری
+ ├── 📄 __init__.py # نقطه ورود بسته
+ └── 📄 main.py # اسکریپت اجرای اصلی
+```
+
+
+
+## ⭐️ تاریخچه ستارهها
+
+
+
+
+
+## ⚠️ سلب مسئولیت
+
+این ابزار فقط برای استفاده شخصی در نظر گرفته شده است. لطفاً شرایط استفاده یوتیوب و حقوق سازندگان محتوا را رعایت کنید.
+
+---
+
+
+
+ساخته شده با ❤️ توسط [oop7](https://github.com/oop7)
+
+
\ No newline at end of file
diff --git a/ytsage/languages/fa.json b/ytsage/languages/fa.json
new file mode 100644
index 0000000..1027051
--- /dev/null
+++ b/ytsage/languages/fa.json
@@ -0,0 +1,643 @@
+{
+ "language": {
+ "display_name": "فارسی (Persian)",
+ "select_language": "زبان را انتخاب کنید:",
+ "current_language": "زبان فعلی: {language}",
+ "restart_required": "تغییرات زبان پس از راهاندازی مجدد برنامه اعمال خواهد شد.",
+ "english": "English (انگلیسی)",
+ "spanish": "Español (اسپانیایی)",
+ "portuguese": "Português (پرتغالی)",
+ "russian": "Русский (روسی)",
+ "chinese": "中文 (简体) (چینی سادهشده)",
+ "german": "Deutsch (آلمانی)",
+ "french": "Français (فرانسوی)",
+ "hindi": "हिन्दी (هندی)",
+ "indonesian": "Bahasa Indonesia (اندونزیایی)",
+ "turkish": "Türkçe (ترکی)",
+ "polish": "Polski (لهستانی)",
+ "italian": "Italiano (ایتالیایی)",
+ "arabic": "العربية (عربی)",
+ "japanese": "日本語 (ژاپنی)",
+ "help_text": "زبان مورد نظر خود را برای رابط کاربری انتخاب کنید.",
+ "restart_notice": "تغییر زبان پس از راهاندازی مجدد برنامه اعمال خواهد شد."
+ },
+ "app": {
+ "title": "YTSage",
+ "version": "نسخه {version}",
+ "ready": "آماده"
+ },
+ "formats": {
+ "show_formats": "نمایش فرمتها:",
+ "video_format": "فرمت ویدیو:",
+ "audio_format": "فرمت صدا:",
+ "no_formats": "هیچ فرمتی در دسترس نیست",
+ "loading": "در حال بارگذاری فرمتها...",
+ "select": "انتخاب",
+ "quality": "کیفیت",
+ "extension": "پسوند",
+ "resolution": "وضوح تصویر",
+ "file_size": "حجم فایل",
+ "codec": "کدک",
+ "audio": "صدا",
+ "fps": "فریم بر ثانیه",
+ "hdr": "HDR",
+ "will_merge_audio": "صدا ادغام خواهد شد",
+ "has_audio": "✓ دارای صدا",
+ "audio_only": "فقط صدا",
+ "best_4k": "بهترین (4K)",
+ "best_2k": "بهترین (2K)",
+ "high_1080p": "بالا (1080p)",
+ "high_720p": "بالا (720p)",
+ "medium_480p": "متوسط (480p)",
+ "low_quality": "کیفیت پایین",
+ "best_audio": "بهترین صدا",
+ "high_audio": "صدای بالا",
+ "medium_audio": "صدای متوسط",
+ "low_audio": "صدای پایین",
+ "audio_only_resolution": "فقط صدا"
+ },
+ "buttons": {
+ "download": "دانلود",
+ "pause": "توقف موقت",
+ "resume": "ادامه",
+ "cancel": "لغو",
+ "browse": "مرور",
+ "clear": "پاک کردن",
+ "ok": "تأیید",
+ "apply": "اعمال",
+ "close": "بستن",
+ "run_command": "اجرای دستور",
+ "custom_command_help": "راهنما",
+ "about": "درباره",
+ "history": "تاریخچه",
+ "analyze": "تحلیل",
+ "paste_url": "چسباندن لینک",
+ "select_videos": "انتخاب ویدیوها...",
+ "video": "ویدیو",
+ "audio_only": "فقط صدا",
+ "custom_options": "تنظیمات سفارشی",
+ "trim_video": "برش ویدیو",
+ "download_settings": "تنظیمات دانلود",
+ "update": "بهروزرسانی yt-dlp",
+ "select_defaults": "انتخاب پیشفرضها",
+ "select_all": "انتخاب همه",
+ "deselect_all": "لغو انتخاب همه",
+ "open_folder": "باز کردن محل فایل",
+ "save_playlist": "ذخیره پلیلیست به عنوان",
+ "reset": "بازنشانی"
+ },
+ "dialogs": {
+ "custom_options": "تنظیمات سفارشی",
+ "settings": "تنظیمات",
+ "select_folder": "انتخاب پوشه دانلود",
+ "sponsorblock_categories": "دستهبندیهای SponsorBlock",
+ "sponsorblock_description": "نوع بخشهای ویدیو را که میخواهید هنگام دانلود بهطور خودکار حذف شوند انتخاب کنید.\nSponsorBlock از دادههای ارسالی توسط کاربران برای شناسایی این بخشها استفاده میکند.",
+ "select_subtitles": "انتخاب زیرنویسها",
+ "filter_languages_placeholder": "فیلتر زبانها (مثلاً en، es)...",
+ "filter_playlist_placeholder": "فیلتر ویدیوها...",
+ "no_subtitles_available": "هیچ زیرنویسی در دسترس نیست",
+ "matching": "مطابق",
+ "ytdlp_log_title": "گزارش yt-dlp"
+ },
+ "tabs": {
+ "cookies": "ورود با کوکی",
+ "custom_command": "دستور سفارشی",
+ "proxy": "پروکسی",
+ "language": "زبان",
+ "updater": "بهروزرسان"
+ },
+ "cookies": {
+ "help_text": "نحوه ارائه کوکی برای ورود را انتخاب کنید.\nاین امکان دانلود ویدیوهای خصوصی و صدای با کیفیت پرمیوم را فراهم میکند.",
+ "cookie_source": "منبع کوکی",
+ "use_cookie_file": "استفاده از فایل کوکی",
+ "extract_from_browser": "استخراج از مرورگر",
+ "recommended": "پیشنهادی",
+ "cookie_file": "فایل کوکی",
+ "cookie_file_placeholder": "مسیر فایل cookies.txt...",
+ "browser_selection": "انتخاب مرورگر",
+ "browser_help": "مرورگری که کوکی از آن استخراج شود را انتخاب کنید:",
+ "browser_label": "مرورگر:",
+ "profile_label": "پروفایل:",
+ "profile_placeholder": "پیشفرض",
+ "browser_extract_message": "کوکیهای مرورگر هنگام اعمال استخراج خواهند شد",
+ "file_selected_message": "فایل کوکی انتخاب شد - برای اعمال روی تأیید کلیک کنید",
+ "select_file_title": "انتخاب فایل کوکی",
+ "file_filter": "فایلهای کوکی (*.txt *.lwp)",
+ "file_selected_title": "فایل کوکی اعمال شد",
+ "file_applied_message": "فایل کوکی اعمال شد: {path}",
+ "browser_selected_title": "کوکیهای مرورگر اعمال شد",
+ "browser_applied_message": "کوکیهای مرورگر از این مرورگر استخراج خواهند شد: {browser}",
+ "cleared_title": "کوکیها پاک شدند",
+ "cleared_message": "تنظیمات کوکی پاک شد",
+ "active_browser": "✓ فعال: کوکیهای مرورگر ({browser})",
+ "active_file": "✓ فعال: فایل کوکی ({file})",
+ "none_active": "○ هیچ کوکی فعالی وجود ندارد",
+ "remember_settings": "به خاطر سپردن تنظیمات کوکی برای اجرای بعدی"
+ },
+ "custom_command": {
+ "help_text": "دستور سفارشی yt-dlp خود را در زیر وارد کنید. لینک فعلی بهطور خودکار اضافه خواهد شد.
توجه: مسیر دانلود و الگوی نام فایل بهطور خودکار مدیریت خواهند شد.",
+ "input_label": "آرگومانهای yt-dlp:",
+ "input_placeholder": "آرگومانهای yt-dlp را اینجا وارد کنید...\n\nمثال: --extract-audio --audio-format mp3",
+ "output_label": "خروجی دستور:",
+ "output_placeholder": "خروجی دستور اینجا نمایش داده میشود...",
+ "command_placeholder": "دستور سفارشی yt-dlp را وارد کنید...",
+ "command_help": "جایگزینهای موجود:\n{url} - لینک ویدیو\n{output} - پوشه خروجی\n\nمثال: --write-info-json --write-thumbnail",
+ "full_command": "🔧 دستور کامل: {command}",
+ "command_success": "✅ دستور سفارشی با موفقیت انجام شد!",
+ "command_failed": "❌ دستور با کد خروج {code} با شکست مواجه شد",
+ "command_error": "❌ خطا در اجرای دستور سفارشی: {error}",
+ "error_no_url": "❌ خطا: لینکی وارد نشده است. لطفاً لینک را در پنجره اصلی وارد کنید.",
+ "error_no_command": "❌ خطا: دستوری وارد نشده است. لطفاً آرگومانهای yt-dlp را وارد کنید.",
+ "executing": "🚀 در حال اجرای دستور سفارشی yt-dlp",
+ "url_label": "📍 لینک: {url}",
+ "args_label": "⚙️ آرگومانها: {command}",
+ "download_path_label": "📁 مسیر دانلود: {path}",
+ "separator": "=================================================="
+ },
+ "proxy": {
+ "help_text": "تنظیمات پروکسی برای دانلود را پیکربندی کنید. برای استفاده از اتصال مستقیم خالی بگذارید.",
+ "main_proxy": "پروکسی اصلی",
+ "main_proxy_help": "سرور پروکسی اصلی برای همه دانلودها. از پروتکلهای HTTP/HTTPS و SOCKS5 پشتیبانی میکند.",
+ "proxy_url_label": "آدرس پروکسی:",
+ "proxy_url_placeholder": "http://proxy:port یا socks5://proxy:port",
+ "proxy_examples": "مثالها:\n• HTTP: http://proxy.example.com:8080\n• SOCKS5: socks5://proxy.example.com:1080",
+ "geo_proxy": "پروکسی دور زدن محدودیت جغرافیایی",
+ "geo_proxy_help": "پروکسی ثانویه مخصوص دور زدن محدودیتهای جغرافیایی.",
+ "geo_proxy_url_label": "آدرس پروکسی دور زدن جغرافیایی:",
+ "geo_proxy_url_placeholder": "http://geo-proxy:port",
+ "clear_main_proxy": "پاک کردن پروکسی اصلی",
+ "clear_geo_proxy": "پاک کردن پروکسی جغرافیایی",
+ "proxy_url": "آدرس پروکسی",
+ "proxy_placeholder": "http://proxy:port یا socks5://proxy:port",
+ "geo_bypass": "پروکسی دور زدن محدودیت جغرافیایی (برای محدودیتهای جغرافیایی)",
+ "geo_bypass_placeholder": "http://proxy:port برای دور زدن محدودیتهای جغرافیایی",
+ "invalid_main_url": "قالب آدرس پروکسی اصلی نامعتبر است",
+ "invalid_geo_url": "قالب آدرس پروکسی جغرافیایی نامعتبر است",
+ "main_configured": "پروکسی اصلی پیکربندی شد",
+ "geo_configured": "پروکسی جغرافیایی پیکربندی شد",
+ "set_title": "پروکسی تنظیم شد",
+ "set_message": "پروکسی اصلی تنظیم و ذخیره شد: {proxy}",
+ "geo_set_title": "پروکسی جغرافیایی تنظیم شد",
+ "geo_set_message": "پروکسی تأیید جغرافیایی تنظیم و ذخیره شد: {proxy}",
+ "cleared_title": "تنظیمات پروکسی پاک شد",
+ "cleared_message": "تمام تنظیمات پروکسی پاک و ذخیره شد.",
+ "saved_main": "پروکسی اصلی ذخیره شد: {proxy}",
+ "saved_geo": "پروکسی جغرافیایی ذخیره شد: {proxy}"
+ },
+ "download": {
+ "preparing": "در حال آمادهسازی دانلود...",
+ "starting": "🚀 شروع دانلود...",
+ "fetching_info": "🔍 در حال دریافت اطلاعات ویدیو...",
+ "preparing_streams": "🎯 در حال آمادهسازی جریانهای ویدیو...",
+ "downloading_audio": "⏬ در حال دانلود صدا...",
+ "downloading_video": "⏬ در حال دانلود ویدیو...",
+ "downloading_subtitle": "⏬ در حال دانلود زیرنویس...",
+ "downloading": "⏬ در حال دانلود...",
+ "completed": "✅ دانلود کامل شد!",
+ "video_completed": "✅ دانلود ویدیو کامل شد!",
+ "audio_completed": "✅ دانلود صدا کامل شد!",
+ "subtitle_completed": "✅ دانلود زیرنویس کامل شد!",
+ "completed_cleaning": "✅ دانلود کامل شد! در حال پاکسازی...",
+ "cancelled": "دانلود لغو شد",
+ "processing_playlist": "📋 در حال پردازش اطلاعات پلیلیست...",
+ "paused": "دانلود متوقف شد",
+ "resumed": "دانلود ادامه یافت",
+ "merging_formats": "✨ پردازش پایانی: در حال ادغام فرمتها...",
+ "removing_sponsor_segments": "✨ پردازش پایانی: در حال حذف بخشهای اسپانسری...",
+ "speed": "سرعت",
+ "eta": "زمان باقیمانده",
+ "please_enter_url": "ابتدا یک لینک وارد کنید.",
+ "please_set_path": "ابتدا یک مسیر دانلود تنظیم کنید.",
+ "please_enter_url_and_path": "لطفاً یک لینک وارد کرده و مسیر دانلود را تنظیم کنید.",
+ "please_select_format": "ابتدا یک فرمت انتخاب کنید.",
+ "downloading_fallback": "⚡ در حال دانلود..."
+ },
+ "update": {
+ "title": "بهروزرسانی yt-dlp",
+ "checking": "در حال بررسی بهروزرسانی...",
+ "update_available": "بهروزرسانی موجود است!\nنسخه فعلی: {current}\nآخرین نسخه: {latest}",
+ "up_to_date": "yt-dlp بهروز است (نسخه {version})",
+ "already_up_to_date": "✅ yt-dlp از قبل بهروز است!",
+ "could_not_determine": "امکان تعیین نسخهها وجود نداشت.",
+ "error_comparing": "خطا در مقایسه نسخهها: {error}",
+ "update_available_failed": "بهروزرسانی موجود است! (مقایسه ناموفق بود)\nفعلی: {current}\nآخرین: {latest}",
+ "updating": "در حال بهروزرسانی...",
+ "initializing": "🚀 در حال آمادهسازی فرآیند بهروزرسانی...",
+ "checking_current": "🔍 در حال بررسی نصب فعلی...",
+ "found_at": "📍 yt-dlp پیدا شد در: {path}",
+ "error_getting_path": "❌ خطا در دریافت مسیر yt-dlp: {error}",
+ "updating_binary": "📦 در حال بهروزرسانی فایل اجرایی yt-dlp مدیریتشده توسط برنامه...",
+ "update_failed": "❌ بهروزرسانی yt-dlp ناموفق بود. لطفاً دوباره تلاش کنید یا اتصال اینترنت خود را بررسی کنید.",
+ "binary_updated": "✅ فایل اجرایی با موفقیت بهروزرسانی شد!",
+ "update_failed_stderr": "❌ بهروزرسانی yt-dlp ناموفق بود: {error}",
+ "update_timeout": "❌ زمان بهروزرسانی yt-dlp به پایان رسید.",
+ "unexpected_error": "❌ خطای غیرمنتظره در حین بهروزرسانی: {error}",
+ "update_success": "✅ yt-dlp با موفقیت بهروزرسانی شد!",
+ "already_latest": "yt-dlp بهروز است (نسخه {version})",
+ "network_error": "❌ خطای شبکه در حین بهروزرسانی: {error}",
+ "general_error": "❌ بهروزرسانی ناموفق بود: {error}",
+ "update_in_progress_title": "بهروزرسانی در حال انجام",
+ "update_in_progress_message": "yt-dlp در حال حاضر در حال بهروزرسانی است. لطفاً کمی صبر کنید."
+ },
+ "about": {
+ "title": "درباره YTSage",
+ "version": "نسخه {version}",
+ "description": "دانلودکننده مدرن یوتیوب با رابط کاربری تمیز PySide6.",
+ "author": "توسعهدهنده: {author}",
+ "github": "گیتهاب: {repo}",
+ "system_info": "اطلاعات سیستم",
+ "loading": "🔄 در حال بارگذاری اطلاعات سیستم...",
+ "refresh": "🔄",
+ "open_logs": "📂 گزارشها",
+ "logs_tooltip": "باز کردن پوشه گزارشهای برنامه",
+ "refreshing": "🔄 در حال بهروزرسانی...",
+ "refresh_failed": "بهروزرسانی ناموفق بود",
+ "refresh_failed_message": "امکان بهروزرسانی اطلاعات نسخه وجود نداشت.",
+ "detected": "✓ شناسایی شد",
+ "missing": "✗ موجود نیست",
+ "not_available": "در دسترس نیست"
+ },
+ "time_range": {
+ "title": "برش ویدیو",
+ "time_range_group": "بازه زمانی",
+ "start_time": "زمان شروع (ساعت:دقیقه:ثانیه)",
+ "end_time": "زمان پایان (ساعت:دقیقه:ثانیه)",
+ "start_placeholder": "00:00:00",
+ "end_placeholder": "00:00:00",
+ "start_time_placeholder": "زمان شروع (ساعت:دقیقه:ثانیه)",
+ "end_time_placeholder": "زمان پایان (ساعت:دقیقه:ثانیه)",
+ "force_keyframes": "اجبار فریمهای کلیدی در نقاط برش",
+ "help_text": "زمان شروع و پایان را برای برش ویدیو تنظیم کنید.\nبرای دانلود ویدیوی کامل خالی بگذارید.",
+ "invalid_format": "قالب زمان نامعتبر است. از قالب ساعت:دقیقه:ثانیه استفاده کنید.",
+ "start_after_end": "زمان شروع نمیتواند بعد از زمان پایان باشد."
+ },
+ "settings": {
+ "title": "تنظیمات دانلود",
+ "download_path": "مسیر دانلود",
+ "browse": "مرور...",
+ "speed_limit": "محدودیت سرعت",
+ "speed_limit_placeholder": "بدون محدودیت",
+ "generic_mode": "حالت عمومی",
+ "enable_generic_mode": "فعالسازی حالت عمومی (پشتیبانی از سایتهای غیر یوتیوبی)",
+ "generic_mode_help": "امکان دانلود از Dailymotion، CBC Gem و سایر سایتهای پشتیبانیشده توسط yt-dlp را فراهم میکند.",
+ "auto_update_ytdlp": "بهروزرسانی خودکار yt-dlp",
+ "enable_auto_updates": "فعالسازی بهروزرسانیهای خودکار yt-dlp",
+ "update_frequency": "دوره زمانی بررسی:",
+ "check_startup": "بررسی در هر راهاندازی (حداقل ۱ ساعت فاصله بین بررسیها)",
+ "check_daily": "بررسی روزانه",
+ "check_weekly": "بررسی هفتگی",
+ "check_updates_now": "بهروزرسانی yt-dlp",
+ "update_check_title": "بررسی بهروزرسانی",
+ "could_not_determine_version": "امکان تعیین نسخه فعلی yt-dlp وجود نداشت.",
+ "update_available_dialog": "بهروزرسانی موجود است!\n\nفعلی: {current}\nآخرین: {latest}\n\nبرای ادامه بهروزرسانی روی تأیید کلیک کنید.",
+ "up_to_date_dialog": "yt-dlp بهروز است!\n\nنسخه فعلی: {version}",
+ "error_checking_updates": "خطا در بررسی بهروزرسانیها: {error}",
+ "settings_saved_title": "تنظیمات ذخیره شد",
+ "settings_saved_message": "تنظیمات بهروزرسانی خودکار با موفقیت ذخیره شد!",
+ "error_title": "خطا",
+ "failed_save_settings": "ذخیره تنظیمات بهروزرسانی خودکار ناموفق بود.",
+ "error_saving_settings": "خطا در ذخیره تنظیمات بهروزرسانی خودکار: {error}",
+ "ytdlp_channel": "کانال انتشار yt-dlp",
+ "ytdlp_channel_stable": "پایدار (نسخههای آزمایششده)",
+ "ytdlp_channel_nightly": "شبانه (بهروزرسانی روزانه، پیشنهاد شده توسط yt-dlp)",
+ "ytdlp_channel_description": "بین انتشارهای پایدار و شبانه انتخاب کنید. نسخههای شبانه هر روز با آخرین رفع اشکالات و ویژگیها بهروزرسانی میشوند. میتوانید هر زمان کانال را تغییر دهید.",
+ "ytdlp_switching_channel": "در حال تغییر به کانال {channel}...",
+ "ytdlp_channel_switched": "✅ با موفقیت به کانال {channel} تغییر یافت!",
+ "ytdlp_channel_switch_failed": "❌ تغییر کانال ناموفق بود: {error}",
+ "ytdlp_current_channel": "کانال فعلی: {channel}",
+ "app_updates_title": "بهروزرسانیهای YTSage",
+ "check_app_updates": "بررسی بهروزرسانیهای YTSage هنگام راهاندازی",
+ "check_beta_updates": "دریافت بهروزرسانیهای بتا",
+ "auto_update_title": "تنظیمات بهروزرسانی خودکار",
+ "auto_update_header": "🔄 تنظیمات بهروزرسانی خودکار",
+ "auto_update_description": "بهروزرسانیهای خودکار yt-dlp را پیکربندی کنید تا همیشه به آخرین ویژگیها و رفع اشکالات دسترسی داشته باشید.",
+ "current_status": "وضعیت فعلی",
+ "current_version_label": "نسخه فعلی yt-dlp: در حال بررسی...",
+ "last_check_label": "آخرین بررسی بهروزرسانی: هرگز",
+ "next_check_label": "بررسی بعدی: بر اساس تنظیمات",
+ "manual_check_button": "🔍 بررسی بهروزرسانیها اکنون",
+ "update_frequency_group": "دوره زمانی بهروزرسانی",
+ "save_settings": "ذخیره تنظیمات",
+ "settings_saved_successfully": "✅ تنظیمات با موفقیت ذخیره شد!",
+ "error_saving": "❌ خطا در ذخیرهسازی: {error}",
+ "output_format_settings": "تنظیمات فرمت خروجی",
+ "force_output_format": "اجبار فرمت خروجی هنگام ادغام",
+ "preferred_format": "فرمت ترجیحی:",
+ "force_format_help": "در صورت فعال بودن، ویدیوهای ادغامشده به فرمت ترجیحی شما تبدیل خواهند شد. برای اینکه yt-dlp بهطور خودکار تصمیم بگیرد آن را غیرفعال کنید.",
+ "format_mp4": "MP4 (سازگارترین)",
+ "format_webm": "WebM (مدرن، متنباز)",
+ "format_mkv": "MKV (پرامکانات)",
+ "audio_format_settings": "تنظیمات فرمت صدا",
+ "force_audio_format": "اجبار فرمت صدا برای دانلودهای فقط صوتی",
+ "audio_normalization": "نرمالسازی صدا (EBU R128)",
+ "audio_normalization_help": "در صورت فعال بودن، تراکهای صوتی نرمالسازی خواهند شد. توجه: این کار نیازمند رمزگذاری مجدد است، بنابراین باید فرمت صوتی مشخصی (مانند MP3 یا M4A) اجبار شود.",
+ "filename_format": "قالب نام فایل خروجی",
+ "filename_format_help": "متغیرهای موجود: %(title)s، %(uploader)s، %(upload_date)s، %(resolution)s، %(id)s، %(ext)s، %(playlist_index)s. از سینتکس استاندارد الگوی خروجی yt-dlp پشتیبانی میشود.",
+ "defaults_settings": "تنظیمات انتخاب پیشفرض",
+ "default_video_quality": "وضوح تصویر پیشفرض (ارتفاع):",
+ "default_subtitle_language": "زبان(های) زیرنویس پیشفرض:",
+ "defaults_help": "ارتفاع ویدیو و زبانهای زیرنویس ترجیحی خود را تنظیم کنید (با کاما جدا شوند). در صورت موجود بودن بهطور خودکار انتخاب خواهند شد.",
+ "concurrent_fragments": "اتصالات همزمان",
+ "concurrent_fragments_help": "تعداد اتصالات برای هر دانلود. مقادیر بالاتر میتوانند محدودیت سرعت را دور بزنند اما در صورت تنظیم بیش از حد ممکن است باعث مسدود شدن موقت شوند. پیشفرض: ۱.",
+ "preferred_audio_format": "فرمت صوتی ترجیحی:",
+ "force_audio_format_help": "در صورت فعال بودن، دانلودهای فقط صوتی به فرمت ترجیحی شما تبدیل خواهند شد. این فقط هنگام دانلود فرمتهای صوتی اعمال میشود.",
+ "audio_format_best": "بهترین (بدون تبدیل)",
+ "audio_format_aac": "AAC (مناسب برای ویرایش)",
+ "audio_format_mp3": "MP3 (همگانی)",
+ "audio_format_flac": "FLAC (بدون افت کیفیت)",
+ "audio_format_wav": "WAV (فشردهنشده)",
+ "audio_format_opus": "Opus (بهینه)",
+ "audio_format_m4a": "M4A (اپل)",
+ "audio_format_vorbis": "Vorbis (متنباز)",
+ "tab_general": "عمومی",
+ "tab_format": "فرمت",
+ "tab_file": "فایل"
+ },
+ "main_ui": {
+ "url_placeholder": "لینک ویدیو یا پلیلیست یوتیوب را وارد کنید",
+ "url_placeholder_generic": "لینک ویدیو یا پلیلیست از هر سایت پشتیبانیشده را وارد کنید",
+ "merge_subtitles": "ادغام زیرنویسها",
+ "save_thumbnail": "ذخیره تصویر بندانگشتی",
+ "save_description": "ذخیره توضیحات",
+ "embed_chapters": "جاسازی فصلها",
+ "subtitles_selected": "{count} انتخاب شد",
+ "all_selected": "همه انتخاب شدند",
+ "select_videos_all": "انتخاب ویدیوها... (همه انتخاب شدند)",
+ "please_enter_url": "ابتدا یک لینک وارد کنید",
+ "error_title": "خطا",
+ "cookie_file_selected_title": "فایل کوکی انتخاب شد",
+ "cookie_file_selected_message": "فایل کوکی انتخاب شد: {path}",
+ "browser_cookies_selected_title": "کوکیهای مرورگر انتخاب شد",
+ "browser_cookies_selected_message": "کوکیهای مرورگر از این مرورگر استخراج خواهند شد: {browser}",
+ "error_no_format_info": "خطا: هیچ اطلاعات فرمتی در دسترس نیست.",
+ "error_extract_info": "خطا: امکان استخراج اطلاعات پایه ویدیو وجود نداشت. لطفاً لینک خود را بررسی کنید.",
+ "analyzing_preparing": "در حال آمادهسازی درخواست...",
+ "analyzing_extracting_basic": "در حال استخراج اطلاعات پایه...",
+ "analyzing_extracting_detailed": "در حال استخراج اطلاعات تفصیلی...",
+ "analyzing_processing_video": "در حال پردازش دادههای ویدیو...",
+ "analyzing_processing_formats": "در حال پردازش فرمتها...",
+ "analyzing_loading_thumbnail": "در حال بارگذاری تصویر بندانگشتی...",
+ "analyzing_processing_subtitles": "در حال پردازش زیرنویسها...",
+ "analyzing_updating_table": "در حال بهروزرسانی جدول فرمتها...",
+ "analysis_complete": "تحلیل کامل شد!",
+ "analyzing_extracting_ytdlp": "در حال استخراج اطلاعات...",
+ "analyzing_fetching_first_video": "در حال دریافت فرمتهای اولین ویدیو...",
+ "analyzing_processing_data": "در حال پردازش دادهها...",
+ "analyzing_processing_formats_ytdlp": "در حال پردازش فرمتها...",
+ "analyzing_loading_thumbnail_ytdlp": "در حال بارگذاری تصویر بندانگشتی...",
+ "analyzing_processing_subtitles_ytdlp": "در حال پردازش زیرنویسها...",
+ "select_subtitles": "انتخاب زیرنویسها...",
+ "sponsorblock_categories": "دستهبندیهای SponsorBlock...",
+ "invalid_url_or_enter": "لینک نامعتبر است یا لطفاً لینکی وارد کنید.",
+ "zero_selected": "0 انتخاب شد",
+ "analyze_first_tooltip": "لطفاً ابتدا ویدیو را تحلیل کنید",
+ "audio_mode_disabled": "در حالت فقط صدا در دسترس نیست",
+ "select_subtitles_first": "لطفاً ابتدا زیرنویسها را انتخاب کنید",
+ "settings_tooltip": "مسیر فعلی: {path}\nمحدودیت سرعت: {speed_limit}",
+ "speed_limit_none": "بدون محدودیت",
+ "open_folder_error": "امکان باز کردن پوشه وجود نداشت: {error}",
+ "time_range_set": "بخش تنظیم شد: {section}"
+ },
+ "sponsorblock": {
+ "sponsor": "اسپانسر",
+ "sponsor_desc": "تبلیغات پولی، معرفیهای پولی و آگهیهای مستقیم",
+ "selfpromo": "تبلیغ خود (رایگان)",
+ "selfpromo_desc": "تبلیغ رایگان محتوای خود سازنده",
+ "interaction": "یادآوری تعامل",
+ "interaction_desc": "درخواست از بینندگان برای لایک، اشتراک یا دنبال کردن شبکههای اجتماعی",
+ "intro": "مقدمه",
+ "intro_desc": "مقدمه ویدیو که میتوان از آن رد شد",
+ "outro": "پایانبندی/تیتراژ",
+ "outro_desc": "تیتراژ یا زمان پایان ویدیو",
+ "preview": "پیشنمایش/خلاصه",
+ "preview_desc": "خلاصه سریع ویدیوهای قبلی یا پیشنمایش موارد آینده",
+ "music_offtopic": "بخش غیرموسیقایی",
+ "music_offtopic_desc": "فقط برای ویدیوهای موسیقی. بخشهای غیرموسیقایی را مشخص میکند",
+ "filler": "بخش پرکننده",
+ "filler_desc": "صحنههای حاشیهای که فقط برای پرکردن یا طنز اضافه شدهاند"
+ },
+ "video_info": {
+ "channel": "کانال",
+ "views": "👁 بازدیدها",
+ "likes": "👍 لایکها",
+ "upload_date": "📅 تاریخ آپلود",
+ "duration": "⏱ مدت زمان",
+ "unknown_channel": "کانال نامشخص",
+ "unknown_date": "تاریخ نامشخص",
+ "unknown_title": "عنوان نامشخص"
+ },
+ "command": {
+ "running": "در حال اجرا...",
+ "run_command": "اجرای دستور"
+ },
+ "selection": {
+ "none_selected": "0 انتخاب شد",
+ "one_selected": "1 دسته انتخاب شد",
+ "count_selected": "{count} انتخاب شد"
+ },
+ "status": {
+ "ready": "آماده",
+ "file_exists": "⚠️ فایل از قبل وجود دارد",
+ "video_file_exists": "⚠️ فایل ویدیو از قبل وجود دارد",
+ "audio_file_exists": "⚠️ فایل صوتی از قبل وجود دارد",
+ "subtitle_file_exists": "⚠️ فایل زیرنویس از قبل وجود دارد",
+ "cancelling": "در حال لغو دانلود...",
+ "thumbnail_saved": "✅ تصویر بندانگشتی ذخیره شد: {filename}",
+ "thumbnail_error": "❌ خطای تصویر بندانگشتی: {error}",
+ "thumbnail_no_image": "هیچ تصویر بندانگشتی برای ذخیره در دسترس نیست"
+ },
+ "errors": {
+ "playlist_no_videos": "خطا: پلیلیست هیچ ویدیوی معتبری ندارد.",
+ "playlist_no_url": "خطا: امکان دریافت لینک اولین ویدیوی پلیلیست وجود نداشت.",
+ "ytdlp_not_found": "خطا: فایل اجرایی yt-dlp پیدا نشد. لطفاً ابتدا yt-dlp را نصب کنید.",
+ "ytdlp_not_found_path": "خطا: فایل اجرایی yt-dlp پیدا نشد. این میتواند به دلیل نصب نادرست یا مشکل PATH باشد.",
+ "no_data_returned": "خطا: هیچ دادهای از yt-dlp بازگردانده نشد",
+ "no_format_info": "خطا: هیچ اطلاعات فرمتی در دسترس نیست.",
+ "analysis_timeout": "خطا: زمان تحلیل به پایان رسید. لطفاً دوباره تلاش کنید.",
+ "invalid_speed_limit": "❌ خطا: مقدار محدودیت سرعت تنظیمشده در تنظیمات نامعتبر است.",
+ "ytdlp_failed": "خطا: yt-dlp با شکست مواجه شد: {error}",
+ "private_video": "این ویدیو ممکن است خصوصی باشد. لطفاً از کوکیها در تنظیمات سفارشی استفاده کنید.",
+ "parse_failed": "خطا: تجزیه خروجی yt-dlp ناموفق بود: {error}",
+ "analysis_failed": "خطا: تحلیل ناموفق بود: {error}",
+ "generic_error": "خطا: {error}",
+ "download_failed_return_code_conflict": "دانلود با کد بازگشتی {return_code} ناموفق بود. این ممکن است به دلیل تداخل با چند نصب yt-dlp باشد. سعی کنید هر نصب سیستمی yt-dlp (مثلاً از طریق snap یا apt) را حذف کرده و برنامه را دوباره راهاندازی کنید.",
+ "download_failed_return_code": "دانلود با کد بازگشتی {return_code} ناموفق بود",
+ "direct_command_error": "خطا در دستور مستقیم: {error}"
+ },
+ "update_dialog": {
+ "title": "بهروزرسانی موجود است",
+ "new_version_available": "نسخه جدیدی از YTSage موجود است!",
+ "current_version_label": "نسخه فعلی:",
+ "latest_version_label": "آخرین نسخه:",
+ "changelog": "تغییرات",
+ "download_update": "دانلود بهروزرسانی",
+ "remind_later": "بعداً یادآوری کن"
+ },
+ "playlist": {
+ "unknown": "پلیلیست نامشخص",
+ "total_videos": "تعداد کل ویدیوها: {count}",
+ "display_format": "پلیلیست: {title} | {count} ویدیو",
+ "select_videos_title": "انتخاب ویدیوهای پلیلیست",
+ "save_as": "ذخیره پلیلیست به عنوان",
+ "save_success_title": "موفقیت",
+ "saved_successfully": "پلیلیست با موفقیت ذخیره شد.",
+ "save_error_title": "خطای ذخیرهسازی",
+ "no_videos_to_save": "هیچ ورودی پلیلیستی جمعآوری نشده است!",
+ "save_error_msg": "ذخیره پلیلیست ناموفق بود."
+ },
+ "subtitle_selection": {
+ "count_selected": "{count} انتخاب شد"
+ },
+ "file_exists_dialog": {
+ "title": "فایل از قبل وجود دارد",
+ "message": "فایل از قبل وجود دارد:\n{filename}",
+ "info": "این ویدیو قبلاً دانلود شده است."
+ },
+ "auto_update": {
+ "last_check_never": "آخرین بررسی بهروزرسانی: هرگز",
+ "last_check": "آخرین بررسی بهروزرسانی: {time}",
+ "next_check_disabled": "بررسی بعدی: غیرفعال",
+ "next_check_startup": "بررسی بعدی: در راهاندازی بعدی",
+ "next_check_overdue": "بررسی بعدی: اکنون (عقبافتاده)",
+ "next_check": "بررسی بعدی: {time}",
+ "next_check_error": "بررسی بعدی: خطا در محاسبه",
+ "checking": "🔄 در حال بررسی...",
+ "check_now": "🔍 بررسی بهروزرسانیها اکنون",
+ "current_version": "نسخه فعلی yt-dlp: {version}"
+ },
+ "url_validation": {
+ "empty_url": "لینک نمیتواند خالی باشد",
+ "invalid_format": "قالب لینک نامعتبر است",
+ "invalid_scheme": "لینک باید با http:// یا https:// شروع شود",
+ "missing_domain": "لینک نامعتبر: نام دامنه موجود نیست",
+ "unsupported_platform": "YTSage فقط از لینکهای یوتیوب و یوتیوب موزیک پشتیبانی میکند.\nدامنه '{domain}' پشتیبانی نمیشود.",
+ "invalid_youtu_be": "لینک youtu.be نامعتبر است: شناسه ویدیو موجود نیست"
+ },
+ "ytdlp_errors": {
+ "private_video": "این یک ویدیوی خصوصی است. میتوانید با ورود به حساب کاربری خود از طریق کوکیها آن را دانلود کنید.\nبرای احراز هویت به 'تنظیمات سفارشی' ← 'ورود با کوکی' ← 'استخراج کوکی از مرورگر' بروید.",
+ "age_restricted": "این ویدیو دارای محدودیت سنی است. برای دسترسی به آن باید وارد حساب کاربری شده باشید.\nبرای احراز هویت با حساب خود از 'تنظیمات سفارشی' ← 'ورود با کوکی' استفاده کنید.",
+ "geo_blocked": "این ویدیو در منطقه شما در دسترس نیست (محدودیت جغرافیایی).\nممکن است نیاز به استفاده از VPN داشته باشید یا این ویدیو در کشور شما محدود شده باشد.",
+ "video_unavailable": "این ویدیو حذف شده یا دیگر در دسترس نیست.\nممکن است ویدیو توسط آپلودکننده حذف شده یا به دلیل نقض قوانین برداشته شده باشد.",
+ "live_stream": "این یک پخش زنده است که در حین فعال بودن قابل دانلود نیست.\nمنتظر پایان پخش زنده بمانید، سپس نسخه آرشیوشده را دانلود کنید.",
+ "playlist_error": "دسترسی به این پلیلیست ممکن نیست. ممکن است خصوصی، حذفشده یا خالی باشد.\nبررسی کنید که پلیلیست وجود داشته و بهصورت عمومی در دسترس باشد.",
+ "network_error": "خطای اتصال شبکه. لطفاً اتصال اینترنت خود را بررسی کرده و دوباره تلاش کنید.\nاگر مشکل ادامه داشت، ممکن است سرور ویدیو بهطور موقت در دسترس نباشد.",
+ "invalid_url": "لینک نامعتبر یا پشتیبانینشده است. لطفاً لینک را بررسی کرده و دوباره تلاش کنید.\nمطمئن شوید از یک لینک معتبر یوتیوب، ویمیو یا سایر پلتفرمهای پشتیبانیشده استفاده میکنید.",
+ "premium_content": "این محتوا نیازمند یوتیوب پرمیوم یا عضویت کانال است.\nباید با حسابی که به این محتوا دسترسی دارد وارد شده باشید.",
+ "copyright_blocked": "این ویدیو به دلیل ادعاهای کپیرایت مسدود شده است.\nصاحب محتوا دسترسی به این ویدیو را محدود کرده است.",
+ "extraction_failed": "استخراج اطلاعات ویدیو ناموفق بود. این ممکن است یک مشکل موقت باشد.\nلطفاً چند دقیقه دیگر دوباره تلاش کنید، یا صحت لینک ویدیو را بررسی کنید.",
+ "generic_error": "امکان استخراج اطلاعات ویدیو وجود نداشت. لطفاً لینک خود را بررسی کنید.\nجزئیات فنی: {error}"
+ },
+ "history": {
+ "title": "تاریخچه دانلود",
+ "clear_all": "پاک کردن کل تاریخچه",
+ "clear_confirm_title": "پاک کردن تاریخچه؟",
+ "clear_confirm_message": "آیا مطمئن هستید که میخواهید کل تاریخچه دانلود را پاک کنید؟ این عمل قابل بازگشت نیست.",
+ "no_history": "هنوز تاریخچه دانلودی وجود ندارد",
+ "no_history_description": "ویدیوها و صداهای دانلودشده شما اینجا نمایش داده میشوند",
+ "loading": "در حال بارگذاری تاریخچه...",
+ "search_placeholder": "جستجو در تاریخچه...",
+ "open_location": "باز کردن محل فایل",
+ "redownload": "دانلود مجدد",
+ "remove": "حذف از تاریخچه",
+ "file_not_found": "فایل در محل اصلی پیدا نشد",
+ "file_not_found_message": "فایل جابهجا یا حذف شده است:\n{path}",
+ "downloaded_on": "دانلود شده در {date}",
+ "file_size": "حجم: {size}",
+ "audio_download": "صدا",
+ "video_download": "ویدیو",
+ "remove_confirm_title": "حذف از تاریخچه؟",
+ "remove_confirm_message": "این مورد از تاریخچه حذف شود؟\n\n{title}",
+ "item_removed": "مورد از تاریخچه حذف شد",
+ "history_cleared": "تاریخچه پاک شد",
+ "entries_count": "{count} دانلود",
+ "one_entry": "1 دانلود",
+ "redownload_confirm_title": "دانلود مجدد ویدیو؟",
+ "redownload_confirm_message": "این ویدیو با همان تنظیمات دوباره دانلود شود؟\n\n{title}",
+ "redownload_started": "دانلود مجدد شروع شد",
+ "no_url_error": "هیچ لینکی در مورد تاریخچه پیدا نشد",
+ "redownload_failed": "شروع دانلود مجدد ناموفق بود: {error}"
+ },
+ "ffmpeg": {
+ "installation_title": "نصب FFmpeg",
+ "installation_message": "YTSage برای پردازش ویدیوها نیاز به FFmpeg دارد.\n\nیک گزینه نصب را از زیر انتخاب کنید:",
+ "install_button": "نصب FFmpeg",
+ "manual_guide": "راهنمای دستی",
+ "installation_failed": "در نصب FFmpeg مشکلی پیش آمد.",
+ "already_installed": "FFmpeg از قبل نصب شده است!",
+ "installation_complete": "نصب کامل شد. میتوانید این پنجره را ببندید و از YTSage استفاده کنید.",
+ "installing": "در حال نصب FFmpeg... لطفاً صبر کنید",
+ "install_success": "FFmpeg با موفقیت نصب شد!",
+ "installation_complete_close": "نصب کامل شد. اکنون میتوانید این پنجره را ببندید و از YTSage استفاده کنید.",
+ "try_manual": "لطفاً از راهنمای نصب دستی استفاده کنید."
+ },
+ "ytdlp_setup": {
+ "required_title": "راهاندازی yt-dlp لازم است",
+ "description": "YTSage برای دانلود ویدیوها نیاز به yt-dlp دارد.
yt-dlp در پوشه محلی برنامه پیدا نشد. YTSage باید yt-dlp را برای سیستم {os_name} شما راهاندازی کند.
لطفاً یک گزینه را از زیر انتخاب کنید:",
+ "option_auto": "دانلود خودکار (پیشنهادی)",
+ "option_manual": "انتخاب دستی مسیر",
+ "setup_button": "راهاندازی yt-dlp",
+ "downloading": "در حال دانلود yt-dlp...",
+ "success": "yt-dlp با موفقیت نصب شد!",
+ "error": "خطا: {error}",
+ "download_failed_title": "دانلود ناموفق بود",
+ "download_failed_message": "دانلود yt-dlp ناموفق بود: {error}",
+ "select_executable_title": "انتخاب فایل اجرایی yt-dlp",
+ "copied_to": "yt-dlp با موفقیت به {path} کپی شد",
+ "setup_error_title": "خطای راهاندازی",
+ "copy_error": "خطا در کپی yt-dlp به پوشه برنامه: {error}",
+ "invalid_executable_title": "فایل اجرایی نامعتبر",
+ "invalid_executable_message": "فایل انتخابشده یک فایل اجرایی معتبر yt-dlp به نظر نمیرسد.",
+ "verify_error": "خطا در تأیید فایل اجرایی yt-dlp: {error}",
+ "setup_failed_title": "راهاندازی ناموفق بود",
+ "setup_failed_message": "راهاندازی yt-dlp ناموفق بود. برخی ویژگیها ممکن است بهدرستی کار نکنند.",
+ "success_dialog_title": "راهاندازی yt-dlp",
+ "success_dialog_message": "yt-dlp با موفقیت در مسیر زیر پیکربندی شد:\n{path}",
+ "file_filter_windows": "فایلهای اجرایی (*.exe)",
+ "file_filter_all": "همه فایلها (*)"
+ },
+ "ffmpeg_updater": {
+ "title": "بررسی نسخه FFmpeg",
+ "current_version": "نسخه فعلی:",
+ "latest_version": "آخرین نسخه:",
+ "status_up_to_date": "✓ بهروز است",
+ "status_update_available": "⚠ بهروزرسانی موجود است",
+ "status_not_installed": "✗ نصب نشده است",
+ "status_idle": "برای شروع روی 'بررسی نسخه' کلیک کنید",
+ "status_checking": "🔄 در حال بررسی نسخه...",
+ "check_updates": "بررسی نسخه",
+ "check_failed": "بررسی نسخه ناموفق بود. لطفاً اتصال اینترنت خود را بررسی کنید.",
+ "description": "نسخه FFmpeg خود را بررسی کرده و با آخرین نسخه موجود مقایسه کنید.",
+ "guide_info": " برای نصب یا بهروزرسانی FFmpeg، اینجا کلیک کنید تا راهنمای جامع نصب ما را مشاهده کنید."
+ },
+ "deno": {
+ "setup_required": "راهاندازی Deno لازم است",
+ "setup_description": "YTSage برای اجرای برخی ویژگیها نیاز به Deno دارد.
Deno در پوشه محلی برنامه پیدا نشد. YTSage باید Deno را برای سیستم {os_name} شما راهاندازی کند.
برای دانلود و نصب خودکار روی 'راهاندازی Deno' کلیک کنید.",
+ "setup_button": "راهاندازی Deno",
+ "downloading": "در حال دانلود Deno...",
+ "extracting": "در حال استخراج Deno...",
+ "verifying": "در حال تأیید Deno...",
+ "success": "Deno با موفقیت نصب شد!",
+ "download_failed": "دانلود ناموفق بود",
+ "download_error": "دانلود Deno ناموفق بود: {error}",
+ "verification_failed": "تأیید SHA256 ناموفق بود. ممکن است فایل دانلودشده خراب یا دستکاری شده باشد.",
+ "setup_failed": "راهاندازی Deno ناموفق بود. برخی ویژگیها ممکن است بهدرستی کار نکنند.",
+ "setup_error": "خطای راهاندازی"
+ },
+ "deno_updater": {
+ "title": "بررسی و بهروزرسانی نسخه Deno",
+ "description": "نسخه Deno خود را بررسی کرده و به آخرین نسخه منتشرشده بهروزرسانی کنید.",
+ "current_version": "نسخه فعلی:",
+ "latest_version": "آخرین نسخه:",
+ "status_idle": "برای شروع روی 'بررسی بهروزرسانیها' کلیک کنید",
+ "status_checking": "🔄 در حال بررسی بهروزرسانیها...",
+ "status_up_to_date": "✓ بهروز است",
+ "status_update_available": "⚠ بهروزرسانی موجود است",
+ "status_not_installed": "✗ نصب نشده است",
+ "check_updates": "بررسی بهروزرسانیها",
+ "update_now": "بهروزرسانی Deno",
+ "updating": "🔄 در حال بهروزرسانی Deno...",
+ "update_success": "✅ Deno با موفقیت بهروزرسانی شد!",
+ "update_failed": "❌ بهروزرسانی ناموفق بود: {error}",
+ "check_failed": "بررسی بهروزرسانیها ناموفق بود. لطفاً اتصال اینترنت خود را بررسی کنید."
+ }
+}
\ No newline at end of file