diff --git a/languages/de.json b/languages/de.json
index cd5afd5..20ba41e 100644
--- a/languages/de.json
+++ b/languages/de.json
@@ -13,6 +13,7 @@
"french": "Französisch",
"hindi": "Hindi",
"indonesian": "Indonesisch",
+ "turkish": "Türkisch",
"help_text": "Wählen Sie Ihre bevorzugte Sprache für die Benutzeroberfläche.",
"restart_notice": "Die Sprachänderung wird nach dem Neustart der Anwendung wirksam."
},
diff --git a/languages/en.json b/languages/en.json
index 6afc55d..079a9b1 100644
--- a/languages/en.json
+++ b/languages/en.json
@@ -13,6 +13,7 @@
"french": "Français (French)",
"hindi": "हिन्दी (Hindi)",
"indonesian": "Bahasa Indonesia (Indonesian)",
+ "turkish": "Türkçe (Turkish)",
"help_text": "Select your preferred language for the interface.",
"restart_notice": "Language change will take effect after restarting the application."
},
diff --git a/languages/es.json b/languages/es.json
index f946981..8b6a406 100644
--- a/languages/es.json
+++ b/languages/es.json
@@ -12,7 +12,8 @@
"german": "Deutsch (German)",
"french": "Français (French)",
"hindi": "Hindi",
- "indonesian": "Indonesio"
+ "indonesian": "Indonesio",
+ "turkish": "Turco"
},
"app": {
"title": "YTSage",
diff --git a/languages/fr.json b/languages/fr.json
index 7cb1d51..5bc33b4 100644
--- a/languages/fr.json
+++ b/languages/fr.json
@@ -13,6 +13,7 @@
"french": "Français",
"hindi": "Hindi",
"indonesian": "Indonésien",
+ "turkish": "Turc",
"help_text": "Sélectionnez votre langue préférée pour l'interface.",
"restart_notice": "Le changement de langue prendra effet après le redémarrage de l'application."
},
diff --git a/languages/hi.json b/languages/hi.json
index 24b08b5..13d9abe 100644
--- a/languages/hi.json
+++ b/languages/hi.json
@@ -13,6 +13,7 @@
"french": "फ्रेंच",
"hindi": "हिन्दी",
"indonesian": "इंडोनेशियाई",
+ "turkish": "तुर्की",
"help_text": "इंटरफेस के लिए अपनी पसंदीदा भाषा चुनें।",
"restart_notice": "भाषा परिवर्तन एप्लिकेशन पुनरारंभ के बाद प्रभावी होगा।"
},
diff --git a/languages/id.json b/languages/id.json
index 2346e5b..d450e2f 100644
--- a/languages/id.json
+++ b/languages/id.json
@@ -13,6 +13,7 @@
"french": "Bahasa Prancis",
"hindi": "Bahasa Hindi",
"indonesian": "Bahasa Indonesia",
+ "turkish": "Bahasa Turki",
"help_text": "Pilih bahasa yang diinginkan untuk antarmuka.",
"restart_notice": "Perubahan bahasa akan berlaku setelah memulai ulang aplikasi."
},
diff --git a/languages/pt.json b/languages/pt.json
index f543a70..44d7b17 100644
--- a/languages/pt.json
+++ b/languages/pt.json
@@ -13,6 +13,7 @@
"french": "Francês",
"hindi": "Hindi",
"indonesian": "Indonésio",
+ "turkish": "Turco",
"help_text": "Selecione seu idioma preferido para a interface.",
"restart_notice": "A alteração de idioma terá efeito após reiniciar a aplicação."
},
diff --git a/languages/ru.json b/languages/ru.json
index a7957d2..60cb2c7 100644
--- a/languages/ru.json
+++ b/languages/ru.json
@@ -13,6 +13,7 @@
"french": "Французский",
"hindi": "Хинди",
"indonesian": "Индонезийский",
+ "turkish": "Турецкий",
"help_text": "Выберите предпочитаемый язык для интерфейса.",
"restart_notice": "Изменение языка вступит в силу после перезапуска приложения."
},
diff --git a/languages/tr.json b/languages/tr.json
new file mode 100644
index 0000000..de30198
--- /dev/null
+++ b/languages/tr.json
@@ -0,0 +1,334 @@
+{
+ "language": {
+ "display_name": "Türkçe (Turkish)",
+ "select_language": "Dil Seç:",
+ "current_language": "Mevcut dil: {language}",
+ "restart_required": "Dil değişikliği uygulamayı yeniden başlattıktan sonra geçerli olacaktır.",
+ "english": "İngilizce",
+ "spanish": "İspanyolca",
+ "portuguese": "Portekizce",
+ "russian": "Rusça",
+ "chinese": "Çince",
+ "german": "Almanca",
+ "french": "Fransızca",
+ "hindi": "Hintçe",
+ "indonesian": "Endonezce",
+ "turkish": "Türkçe",
+ "help_text": "Arayüz için tercih ettiğiniz dili seçin.",
+ "restart_notice": "Dil değişikliği uygulamayı yeniden başlattıktan sonra geçerli olacaktır."
+ },
+ "app": {
+ "title": "YTSage",
+ "version": "v{version}",
+ "ready": "Hazır"
+ },
+ "formats": {
+ "show_formats": "Formatları göster:",
+ "video_format": "Video formatı:",
+ "audio_format": "Ses formatı:",
+ "no_formats": "Kullanılabilir format yok",
+ "loading": "Formatlar yükleniyor...",
+ "select": "Seç",
+ "quality": "Kalite",
+ "extension": "Uzantı",
+ "resolution": "Çözünürlük",
+ "file_size": "Dosya boyutu",
+ "codec": "Codec",
+ "audio": "Ses",
+ "notes": "Notlar",
+ "will_merge_audio": "Ses birleştirilecek",
+ "has_audio": "✓ Ses var",
+ "audio_only": "Sadece ses",
+ "large_size": "Büyük boyut",
+ "medium_size": "Orta boyut",
+ "standard_size": "Standart boyut",
+ "compatible": "Uyumlu",
+ "efficient": "Verimli",
+ "high_quality": "Yüksek kalite",
+ "best_4k": "En iyi (4K)",
+ "best_2k": "En iyi (2K)",
+ "high_1080p": "Yüksek (1080p)",
+ "high_720p": "Yüksek (720p)",
+ "medium_480p": "Orta (480p)",
+ "low_quality": "Düşük kalite",
+ "best_audio": "En iyi ses",
+ "high_audio": "Yüksek ses",
+ "medium_audio": "Orta ses",
+ "low_audio": "Düşük ses",
+ "audio_only_resolution": "Sadece ses"
+ },
+ "buttons": {
+ "download": "İndir",
+ "pause": "Duraklat",
+ "resume": "Devam Et",
+ "cancel": "İptal",
+ "browse": "Gözat",
+ "clear": "Temizle",
+ "ok": "Tamam",
+ "apply": "Uygula",
+ "close": "Kapat",
+ "run_command": "Komutu çalıştır",
+ "custom_command_help": "Yardım",
+ "about": "Hakkında",
+ "analyze": "Analiz Et",
+ "paste_url": "URL Yapıştır",
+ "select_videos": "Video seç...",
+ "video": "Video",
+ "audio_only": "Sadece ses",
+ "custom_options": "Özel seçenekler",
+ "trim_video": "Videoyu kırp",
+ "download_settings": "İndirme ayarları",
+ "update": "yt-dlp'yi güncelle",
+ "select_defaults": "Varsayılanları seç",
+ "select_all": "Tümünü seç",
+ "deselect_all": "Tüm seçimi kaldır"
+ },
+ "dialogs": {
+ "custom_options": "Özel seçenekler",
+ "settings": "Ayarlar",
+ "select_folder": "İndirme klasörünü seç",
+ "sponsorblock_categories": "SponsorBlock kategorileri",
+ "sponsorblock_description": "İndirme sırasında otomatik olarak kaldırılacak video bölümlerinin türlerini seçin.\nSponsorBlock bu bölümleri belirlemek için topluluk tarafından gönderilen verileri kullanır.",
+ "select_subtitles": "Altyazı seç",
+ "filter_languages_placeholder": "Dilleri filtrele (örn: tr, en)...",
+ "no_subtitles_available": "Altyazı mevcut değil",
+ "matching": "eşleşen"
+ },
+ "tabs": {
+ "cookies": "Çerezlerle giriş yap",
+ "custom_command": "Özel komut",
+ "proxy": "Proxy",
+ "language": "Dil"
+ },
+ "cookies": {
+ "help_text": "Kimlik doğrulama için çerezlerin nasıl sağlanacağını seçin.\nBu, özel videoları ve yüksek kaliteli ses dosyalarını indirmeyi sağlar.",
+ "cookie_source": "Çerez kaynağı",
+ "use_cookie_file": "Çerez dosyası kullan",
+ "extract_from_browser": "Tarayıcıdan çıkar",
+ "cookie_file": "Çerez dosyası",
+ "cookie_file_placeholder": "cookies.txt dosya yolu...",
+ "browser_selection": "Tarayıcı seçimi",
+ "browser_help": "Çerezleri çıkaracak tarayıcıyı seçin:",
+ "browser_label": "Tarayıcı:",
+ "profile_label": "Profil:",
+ "profile_placeholder": "Varsayılan",
+ "browser_extract_message": "Tarayıcı çerezleri uygulandığında çıkarılacak",
+ "file_selected_message": "Çerez dosyası seçildi - Uygulamak için Tamam'a tıklayın",
+ "select_file_title": "Çerez dosyası seç",
+ "file_filter": "Çerez dosyaları (*.txt *.lwp)"
+ },
+ "custom_command": {
+ "help_text": "Özel yt-dlp komutunuzu aşağıya girin. Mevcut URL otomatik olarak eklenecektir.
Seçeneklerin tam listesi ve kullanım örnekleri için resmi yt-dlp belgelerini görmek için buraya tıklayın.
Not: İndirme yolu ve dosya adı şablonu otomatik olarak işlenir.",
+ "input_label": "yt-dlp argümanları:",
+ "input_placeholder": "yt-dlp argümanlarını buraya girin...\n\nÖrnek: --extract-audio --audio-format mp3",
+ "output_label": "Komut çıktısı:",
+ "output_placeholder": "Komut çıktısı burada görünecek...",
+ "command_placeholder": "Özel yt-dlp komutunu girin...",
+ "command_help": "Mevcut yer tutucular:\n{url} - Video URL'si\n{output} - Çıktı klasörü\n\nÖrnek: --write-info-json --write-thumbnail",
+ "full_command": "🔧 Tam komut: {command}",
+ "command_success": "✅ Özel komut başarıyla çalıştırıldı!",
+ "command_failed": "❌ Komut {code} çıkış koduyla başarısız oldu",
+ "command_error": "❌ Özel komut çalıştırma hatası: {error}"
+ },
+ "proxy": {
+ "help_text": "İndirmeler için proxy ayarlarını yapılandırın. Doğrudan bağlantı için boş bırakın.",
+ "main_proxy": "Ana proxy",
+ "main_proxy_help": "Tüm indirmeler için birincil proxy sunucusu. HTTP/HTTPS ve SOCKS5 protokollerini destekler.",
+ "proxy_url_label": "Proxy URL:",
+ "proxy_url_placeholder": "http://proxy:port veya socks5://proxy:port",
+ "proxy_examples": "Örnekler:\n• HTTP: http://proxy.example.com:8080\n• SOCKS5: socks5://proxy.example.com:1080",
+ "geo_proxy": "Coğrafi atlama proxy'si",
+ "geo_proxy_help": "Coğrafi kısıtlamaları atlamak için ikincil proxy.",
+ "geo_proxy_url_label": "Coğrafi atlama proxy URL'si:",
+ "geo_proxy_url_placeholder": "http://geo-proxy:port",
+ "clear_main_proxy": "Ana proxy'yi temizle",
+ "clear_geo_proxy": "Coğrafi proxy'yi temizle",
+ "proxy_url": "Proxy URL",
+ "proxy_placeholder": "http://proxy:port veya socks5://proxy:port",
+ "geo_bypass": "Coğrafi atlama proxy'si (coğrafi kısıtlamalar için)",
+ "geo_bypass_placeholder": "http://proxy:port coğrafi engellemeyi atlamak için",
+ "invalid_main_url": "Geçersiz ana proxy URL formatı",
+ "invalid_geo_url": "Geçersiz coğrafi proxy URL formatı",
+ "main_configured": "Ana proxy yapılandırıldı",
+ "geo_configured": "Coğrafi proxy yapılandırıldı"
+ },
+ "download": {
+ "preparing": "İndirme hazırlanıyor...",
+ "please_enter_url": "Lütfen önce bir URL girin.",
+ "please_set_path": "Lütfen önce indirme yolunu ayarlayın.",
+ "please_enter_url_and_path": "Lütfen bir URL girin ve indirme yolunu ayarlayın.",
+ "please_select_format": "Lütfen önce bir format seçin."
+ },
+ "update": {
+ "title": "yt-dlp'yi güncelle",
+ "checking": "Güncellemeler kontrol ediliyor...",
+ "update_available": "Güncelleme mevcut!\nMevcut sürüm: {current}\nEn son sürüm: {latest}",
+ "up_to_date": "yt-dlp güncel (Sürüm {version})",
+ "could_not_determine": "Sürümler belirlenemedi.",
+ "error_comparing": "Sürüm karşılaştırma hatası: {error}",
+ "update_available_failed": "Güncelleme mevcut! (Karşılaştırma başarısız)\nMevcut: {current}\nEn son: {latest}",
+ "updating": "Güncelleniyor...",
+ "initializing": "🚀 Güncelleme işlemi başlatılıyor...",
+ "checking_current": "🔍 Mevcut kurulum kontrol ediliyor...",
+ "found_at": "📍 yt-dlp bulundu: {path}",
+ "error_getting_path": "❌ yt-dlp yolu alma hatası: {error}",
+ "updating_binary": "📦 Uygulama yönetimli yt-dlp binary'si güncelleniyor...",
+ "updating_pip": "🐍 pip aracılığıyla sistem yt-dlp'si güncelleniyor...",
+ "update_failed": "❌ yt-dlp güncellemesi başarısız. Lütfen tekrar deneyin veya internet bağlantınızı kontrol edin.",
+ "binary_updated": "✅ Binary başarıyla güncellendi!",
+ "update_failed_stderr": "❌ yt-dlp güncellemesi başarısız: {error}",
+ "update_timeout": "❌ yt-dlp güncelleme zaman aşımı.",
+ "unexpected_error": "❌ Güncelleme sırasında beklenmeyen hata: {error}",
+ "checking_pip": "🔍 Mevcut pip kurulumu kontrol ediliyor...",
+ "current_version": "📋 Mevcut sürüm: {version}",
+ "not_found_pip": "⚠️ yt-dlp pip aracılığıyla bulunamadı, kurulum deneniyor...",
+ "checking_latest": "🌐 En son sürüm kontrol ediliyor...",
+ "failed_check_updates": "❌ Güncelleme kontrolü başarısız",
+ "latest_version": "🆕 En son sürüm: {version}",
+ "updating_from_to": "⬆️ {current}'den {latest}'e güncelleniyor...",
+ "running_pip_install": "📦 pip install --upgrade çalıştırılıyor...",
+ "pip_completed": "✅ Pip güncellemesi başarıyla tamamlandı!",
+ "pip_failed": "❌ Pip güncellemesi başarısız: {error}"
+ },
+ "about": {
+ "title": "YTSage Hakkında",
+ "version": "Sürüm {version}",
+ "description": "Temiz PySide6 arayüzü ile modern YouTube indiricisi.",
+ "author": "Yapımcı: {author}",
+ "github": "GitHub: {repo}",
+ "system_info": "Sistem bilgileri",
+ "loading": "🔄 Sistem bilgileri yükleniyor...",
+ "refresh": "🔄",
+ "refreshing": "🔄 Yenileniyor...",
+ "refresh_failed": "Yenileme başarısız",
+ "refresh_failed_message": "Sürüm bilgileri yenilenemedi.",
+ "detected": "✓ Algılandı",
+ "missing": "✗ Eksik",
+ "not_available": "Mevcut değil"
+ },
+ "time_range": {
+ "title": "Videoyu kırp",
+ "time_range_group": "Zaman aralığı",
+ "start_time": "Başlama zamanı (SS:DD:SS)",
+ "end_time": "Bitiş zamanı (SS:DD:SS)",
+ "start_placeholder": "00:00:00",
+ "end_placeholder": "00:00:00",
+ "start_time_placeholder": "Başlama zamanı (SS:DD:SS)",
+ "end_time_placeholder": "Bitiş zamanı (SS:DD:SS)",
+ "force_keyframes": "Kesim noktalarında anahtar kareleri zorla",
+ "help_text": "Videoyu kırpmak için başlama ve bitiş zamanlarını ayarlayın.\nTam videoyu indirmek için boş bırakın.",
+ "invalid_format": "Geçersiz zaman formatı. SS:DD:SS formatını kullanın.",
+ "start_after_end": "Başlama zamanı bitiş zamanından sonra olamaz."
+ },
+ "settings": {
+ "title": "İndirme ayarları",
+ "download_path": "İndirme yolu",
+ "browse": "Gözat...",
+ "speed_limit": "Hız sınırı",
+ "speed_limit_placeholder": "Yok",
+ "auto_update_ytdlp": "yt-dlp otomatik güncelleme",
+ "enable_auto_updates": "yt-dlp otomatik güncellemelerini etkinleştir",
+ "update_frequency": "Güncelleme sıklığı:",
+ "check_startup": "Her başlangıçta kontrol et (kontroller arası en az 1 saat)",
+ "check_daily": "Günlük kontrol et",
+ "check_weekly": "Haftalık kontrol et",
+ "check_updates_now": "Şimdi güncellemeleri kontrol et",
+ "update_check_title": "Güncelleme kontrolü",
+ "could_not_determine_version": "Mevcut yt-dlp sürümü belirlenemedi.",
+ "update_available_dialog": "Güncelleme mevcut!\n\nMevcut: {current}\nEn son: {latest}\n\nGüncellemek için ana penceredeki 'yt-dlp'yi güncelle' düğmesini kullanın.",
+ "up_to_date_dialog": "yt-dlp güncel!\n\nMevcut sürüm: {version}",
+ "error_checking_updates": "Güncelleme kontrol hatası: {error}",
+ "settings_saved_title": "Ayarlar kaydedildi",
+ "settings_saved_message": "Otomatik güncelleme ayarları başarıyla kaydedildi!",
+ "error_title": "Hata",
+ "failed_save_settings": "Otomatik güncelleme ayarları kaydedilemedi.",
+ "error_saving_settings": "Otomatik güncelleme ayarları kaydetme hatası: {error}",
+ "auto_update_title": "Otomatik güncelleme ayarları",
+ "auto_update_header": "🔄 Otomatik güncelleme ayarları",
+ "auto_update_description": "En son özelliklere ve hata düzeltmelerine sahip olmak için yt-dlp otomatik güncellemelerini yapılandırın.",
+ "current_status": "Mevcut durum",
+ "current_version_label": "Mevcut yt-dlp sürümü: Kontrol ediliyor...",
+ "last_check_label": "Son güncelleme kontrolü: Hiç",
+ "next_check_label": "Sonraki kontrol: Ayarlara göre",
+ "manual_check_button": "🔍 Şimdi güncellemeleri kontrol et",
+ "update_frequency_group": "Güncelleme sıklığı",
+ "save_settings": "Ayarları kaydet",
+ "settings_saved_successfully": "✅ Ayarlar başarıyla kaydedildi!",
+ "error_saving": "❌ Ayarları kaydetme hatası: {error}"
+ },
+ "main_ui": {
+ "url_placeholder": "YouTube video veya oynatma listesi URL'sini girin",
+ "merge_subtitles": "Altyazıları birleştir",
+ "save_thumbnail": "Küçük resmi kaydet",
+ "save_description": "Açıklamayı kaydet",
+ "embed_chapters": "Bölümleri göm",
+ "subtitles_selected": "{count} seçildi",
+ "all_selected": "Tümü seçildi",
+ "select_videos_all": "Video seç... (Tümü seçildi)",
+ "please_enter_url": "Lütfen önce bir URL girin",
+ "cookie_file_selected_title": "Çerez dosyası seçildi",
+ "cookie_file_selected_message": "Çerez dosyası seçildi: {path}",
+ "browser_cookies_selected_title": "Tarayıcı çerezleri seçildi",
+ "browser_cookies_selected_message": "Tarayıcı çerezleri şuradan çıkarılacak: {browser}",
+ "error_no_format_info": "Hata: Format bilgisi mevcut değil.",
+ "error_extract_info": "Hata: Temel video bilgileri çıkarılamadı. Lütfen bağlantınızı kontrol edin.",
+ "analyzing_preparing": "Analiz ediliyor (0%)... İstek hazırlanıyor",
+ "analyzing_extracting_basic": "Analiz ediliyor (15%)... Temel bilgiler çıkarılıyor",
+ "analyzing_extracting_detailed": "Analiz ediliyor (30%)... Ayrıntılı bilgiler çıkarılıyor",
+ "analyzing_processing_video": "Analiz ediliyor (45%)... Video verisi işleniyor",
+ "analyzing_processing_formats": "Analiz ediliyor (60%)... Formatlar işleniyor",
+ "analyzing_loading_thumbnail": "Analiz ediliyor (75%)... Küçük resim yükleniyor",
+ "analyzing_processing_subtitles": "Analiz ediliyor (85%)... Altyazılar işleniyor",
+ "analyzing_updating_table": "Analiz ediliyor (95%)... Format tablosu güncelleniyor",
+ "analysis_complete": "Analiz tamamlandı!",
+ "analyzing_extracting_ytdlp": "Analiz ediliyor (30%)... yt-dlp çalıştırılabiliri ile bilgiler çıkarılıyor",
+ "analyzing_processing_data": "Analiz ediliyor (60%)... Veriler işleniyor",
+ "analyzing_processing_formats_ytdlp": "Analiz ediliyor (75%)... Formatlar işleniyor",
+ "analyzing_loading_thumbnail_ytdlp": "Analiz ediliyor (85%)... Küçük resim yükleniyor",
+ "analyzing_processing_subtitles_ytdlp": "Analiz ediliyor (90%)... Altyazılar işleniyor",
+ "select_subtitles": "Altyazı seç...",
+ "sponsorblock_categories": "SponsorBlock kategorileri..."
+ },
+ "sponsorblock": {
+ "sponsor": "Sponsor",
+ "sponsor_desc": "Ücretli reklamlar, ücretli öneriler ve doğrudan reklamlar",
+ "selfpromo": "Ücretsiz/Kendi tanıtımı",
+ "selfpromo_desc": "Yaratıcının kendi içeriği için ücretsiz tanıtım",
+ "interaction": "Etkileşim hatırlatıcısı",
+ "interaction_desc": "İzleyicilerden beğeni, abone olma veya sosyal medya takibi istenir",
+ "intro": "Giriş",
+ "intro_desc": "Atlanabilir video girişi",
+ "outro": "Son/Son kartları",
+ "outro_desc": "Jenerik veya video bittiğinde",
+ "preview": "Önizleme/Özet",
+ "preview_desc": "Önceki videoların kısa özeti veya gelecek içeriğin önizlemesi",
+ "music_offtopic": "Müzik dışı bölüm",
+ "music_offtopic_desc": "Sadece müzik videoları için. Müzik dışı bölümleri işaretler",
+ "filler": "Dolgu teğet",
+ "filler_desc": "Sadece dolgu veya mizah için eklenen teğet sahneler"
+ },
+ "video_info": {
+ "channel": "Kanal",
+ "views": "Görüntülenme",
+ "likes": "Beğeni",
+ "upload_date": "Yükleme tarihi",
+ "duration": "Süre",
+ "unknown_channel": "Bilinmeyen kanal",
+ "unknown_date": "Bilinmeyen tarih",
+ "unknown_title": "Bilinmeyen başlık"
+ },
+ "command": {
+ "running": "Çalışıyor...",
+ "run_command": "Komutu çalıştır"
+ },
+ "selection": {
+ "none_selected": "0 seçildi",
+ "one_selected": "1 kategori seçildi",
+ "count_selected": "{count} seçildi"
+ },
+ "status": {
+ "ready": "Hazır",
+ "file_exists": "⚠️ Dosya zaten mevcut",
+ "cancelling": "İndirme iptal ediliyor..."
+ }
+}
\ No newline at end of file
diff --git a/languages/zh.json b/languages/zh.json
index b4f548a..c1cc026 100644
--- a/languages/zh.json
+++ b/languages/zh.json
@@ -13,6 +13,7 @@
"french": "法语",
"hindi": "印地语",
"indonesian": "印尼语",
+ "turkish": "土耳其语",
"help_text": "选择您喜欢的界面语言。",
"restart_notice": "语言更改将在重启应用程序后生效。"
},
diff --git a/src/gui/ytsage_gui_format_table.py b/src/gui/ytsage_gui_format_table.py
index 8341b76..07101d7 100644
--- a/src/gui/ytsage_gui_format_table.py
+++ b/src/gui/ytsage_gui_format_table.py
@@ -266,13 +266,13 @@ class FormatTableMixin:
quality_item = QTableWidgetItem(quality_text)
# Set color based on quality (check English, Spanish, Portuguese, Russian, Chinese, German, and French terms)
quality_lower = quality_text.lower() # Make comparison case-insensitive
- if any(term.lower() in quality_lower for term in ["Best", "Óptima", "Mejor", "Melhor", "Лучшее", "最佳", "Beste", "Meilleure", "सर्वोत्तम", "Terbaik"]):
+ if any(term.lower() in quality_lower for term in ["Best", "Óptima", "Mejor", "Melhor", "Лучшее", "最佳", "Beste", "Meilleure", "सर्वोत्तम", "Terbaik", "En iyi"]):
quality_item.setForeground(QColor("#00ff00")) # Green for best quality
- elif any(term.lower() in quality_lower for term in ["High", "Alta", "Alto", "Áudio Alto", "Audio Alto", "Высокое", "高清", "高质量", "Hoch", "Haute", "Élevé", "Audio élevé", "उच्च", "उच्च ऑडियो", "Tinggi", "Audio tinggi"]):
+ elif any(term.lower() in quality_lower for term in ["High", "Alta", "Alto", "Áudio Alto", "Audio Alto", "Высокое", "高清", "高质量", "Hoch", "Haute", "Élevé", "Audio élevé", "उच्च", "उच्च ऑडियो", "Tinggi", "Audio tinggi", "Yüksek", "Yüksek ses"]):
quality_item.setForeground(QColor("#00cc00")) # Light green for high quality
- elif any(term.lower() in quality_lower for term in ["Medium", "Media", "Medio", "Média", "Áudio Médio", "Audio Medio", "Среднее", "中等", "Mittel", "Moyenne", "Audio moyen", "मध्यम", "मध्यम ऑडियो", "Sedang", "Audio sedang"]):
+ elif any(term.lower() in quality_lower for term in ["Medium", "Media", "Medio", "Média", "Áudio Médio", "Audio Medio", "Среднее", "中等", "Mittel", "Moyenne", "Audio moyen", "मध्यम", "मध्यम ऑडियो", "Sedang", "Audio sedang", "Orta", "Orta ses"]):
quality_item.setForeground(QColor("#ffaa00")) # Orange for medium quality
- elif any(term.lower() in quality_lower for term in ["Low", "Baja", "Bajo", "Baixa", "Áudio Baixo", "Audio Bajo", "Низкое", "低质量", "Niedrig", "Niedriges Audio", "Faible", "Audio faible", "Qualité faible", "निम्न", "निम्न ऑडियो", "निम्न गुणवत्ता", "Rendah", "Audio rendah", "Kualitas rendah"]):
+ elif any(term.lower() in quality_lower for term in ["Low", "Baja", "Bajo", "Baixa", "Áudio Baixo", "Audio Bajo", "Низкое", "低质量", "Niedrig", "Niedriges Audio", "Faible", "Audio faible", "Qualité faible", "निम्न", "निम्न ऑडियो", "निम्न गुणवत्ता", "Rendah", "Audio rendah", "Kualitas rendah", "Düşük", "Düşük ses", "Düşük kalite"]):
quality_item.setForeground(QColor("#ff5555")) # Red for low quality
self.format_table.setItem(row, 1, quality_item)
diff --git a/src/utils/ytsage_localization.py b/src/utils/ytsage_localization.py
index 767be24..772cc5e 100644
--- a/src/utils/ytsage_localization.py
+++ b/src/utils/ytsage_localization.py
@@ -88,7 +88,8 @@ class LocalizationManager:
"german": "Deutsch (German)",
"french": "Français (French)",
"hindi": "हिन्दी (Hindi)",
- "indonesian": "Bahasa Indonesia (Indonesian)"
+ "indonesian": "Bahasa Indonesia (Indonesian)",
+ "turkish": "Türkçe (Turkish)"
},
"download": {
"preparing": "🚀 Preparing your download...",