diff --git a/languages/de.json b/languages/de.json
index 20ba41e..ec5bf7a 100644
--- a/languages/de.json
+++ b/languages/de.json
@@ -14,6 +14,7 @@
"hindi": "Hindi",
"indonesian": "Indonesisch",
"turkish": "Türkisch",
+ "polish": "Polnisch",
"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 079a9b1..3703c12 100644
--- a/languages/en.json
+++ b/languages/en.json
@@ -14,6 +14,7 @@
"hindi": "हिन्दी (Hindi)",
"indonesian": "Bahasa Indonesia (Indonesian)",
"turkish": "Türkçe (Turkish)",
+ "polish": "Polski (Polish)",
"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 8b6a406..1ac9ea2 100644
--- a/languages/es.json
+++ b/languages/es.json
@@ -13,7 +13,8 @@
"french": "Français (French)",
"hindi": "Hindi",
"indonesian": "Indonesio",
- "turkish": "Turco"
+ "turkish": "Turco",
+ "polish": "Polaco"
},
"app": {
"title": "YTSage",
diff --git a/languages/fr.json b/languages/fr.json
index 5bc33b4..080642f 100644
--- a/languages/fr.json
+++ b/languages/fr.json
@@ -14,6 +14,7 @@
"hindi": "Hindi",
"indonesian": "Indonésien",
"turkish": "Turc",
+ "polish": "Polonais",
"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 13d9abe..59a5fd6 100644
--- a/languages/hi.json
+++ b/languages/hi.json
@@ -14,6 +14,7 @@
"hindi": "हिन्दी",
"indonesian": "इंडोनेशियाई",
"turkish": "तुर्की",
+ "polish": "पोलिश",
"help_text": "इंटरफेस के लिए अपनी पसंदीदा भाषा चुनें।",
"restart_notice": "भाषा परिवर्तन एप्लिकेशन पुनरारंभ के बाद प्रभावी होगा।"
},
diff --git a/languages/id.json b/languages/id.json
index d450e2f..349d0b7 100644
--- a/languages/id.json
+++ b/languages/id.json
@@ -14,6 +14,7 @@
"hindi": "Bahasa Hindi",
"indonesian": "Bahasa Indonesia",
"turkish": "Bahasa Turki",
+ "polish": "Bahasa Polandia",
"help_text": "Pilih bahasa yang diinginkan untuk antarmuka.",
"restart_notice": "Perubahan bahasa akan berlaku setelah memulai ulang aplikasi."
},
diff --git a/languages/pl.json b/languages/pl.json
new file mode 100644
index 0000000..05afb02
--- /dev/null
+++ b/languages/pl.json
@@ -0,0 +1,335 @@
+{
+ "language": {
+ "display_name": "Polski (Polish)",
+ "select_language": "Wybierz język:",
+ "current_language": "Aktualny język: {language}",
+ "restart_required": "Zmiana języka zostanie zastosowana po ponownym uruchomieniu aplikacji.",
+ "english": "Angielski",
+ "spanish": "Hiszpański",
+ "portuguese": "Portugalski",
+ "russian": "Rosyjski",
+ "chinese": "Chiński",
+ "german": "Niemiecki",
+ "french": "Francuski",
+ "hindi": "Hindi",
+ "indonesian": "Indonezyjski",
+ "turkish": "Turecki",
+ "polish": "Polski",
+ "help_text": "Wybierz preferowany język interfejsu.",
+ "restart_notice": "Zmiana języka zostanie zastosowana po ponownym uruchomieniu aplikacji."
+ },
+ "app": {
+ "title": "YTSage",
+ "version": "v{version}",
+ "ready": "Gotowy"
+ },
+ "formats": {
+ "show_formats": "Pokaż formaty:",
+ "video_format": "Format wideo:",
+ "audio_format": "Format dźwięku:",
+ "no_formats": "Brak dostępnych formatów",
+ "loading": "Ładowanie formatów...",
+ "select": "Wybierz",
+ "quality": "Jakość",
+ "extension": "Rozszerzenie",
+ "resolution": "Rozdzielczość",
+ "file_size": "Rozmiar pliku",
+ "codec": "Kodek",
+ "audio": "Dźwięk",
+ "notes": "Notatki",
+ "will_merge_audio": "Dźwięk zostanie połączony",
+ "has_audio": "✓ Zawiera dźwięk",
+ "audio_only": "Tylko dźwięk",
+ "large_size": "Duży rozmiar",
+ "medium_size": "Średni rozmiar",
+ "standard_size": "Standardowy rozmiar",
+ "compatible": "Zgodny",
+ "efficient": "Wydajny",
+ "high_quality": "Wysoka jakość",
+ "best_4k": "Najlepsza (4K)",
+ "best_2k": "Najlepsza (2K)",
+ "high_1080p": "Wysoka (1080p)",
+ "high_720p": "Wysoka (720p)",
+ "medium_480p": "Średnia (480p)",
+ "low_quality": "Niska jakość",
+ "best_audio": "Najlepszy dźwięk",
+ "high_audio": "Wysoki dźwięk",
+ "medium_audio": "Średni dźwięk",
+ "low_audio": "Niski dźwięk",
+ "audio_only_resolution": "Tylko dźwięk"
+ },
+ "buttons": {
+ "download": "Pobierz",
+ "pause": "Wstrzymaj",
+ "resume": "Wznów",
+ "cancel": "Anuluj",
+ "browse": "Przeglądaj",
+ "clear": "Wyczyść",
+ "ok": "OK",
+ "apply": "Zastosuj",
+ "close": "Zamknij",
+ "run_command": "Uruchom polecenie",
+ "custom_command_help": "Pomoc",
+ "about": "O programie",
+ "analyze": "Analizuj",
+ "paste_url": "Wklej URL",
+ "select_videos": "Wybierz wideo...",
+ "video": "Wideo",
+ "audio_only": "Tylko dźwięk",
+ "custom_options": "Opcje niestandardowe",
+ "trim_video": "Przytnij wideo",
+ "download_settings": "Ustawienia pobierania",
+ "update": "Zaktualizuj yt-dlp",
+ "select_defaults": "Wybierz domyślne",
+ "select_all": "Zaznacz wszystko",
+ "deselect_all": "Odznacz wszystko"
+ },
+ "dialogs": {
+ "custom_options": "Opcje niestandardowe",
+ "settings": "Ustawienia",
+ "select_folder": "Wybierz folder pobierania",
+ "sponsorblock_categories": "Kategorie SponsorBlock",
+ "sponsorblock_description": "Wybierz typy segmentów wideo do automatycznego usunięcia podczas pobierania.\nSponsorBlock używa danych przesyłanych przez społeczność do identyfikacji tych segmentów.",
+ "select_subtitles": "Wybierz napisy",
+ "filter_languages_placeholder": "Filtruj języki (np: pl, en)...",
+ "no_subtitles_available": "Brak dostępnych napisów",
+ "matching": "dopasowujące"
+ },
+ "tabs": {
+ "cookies": "Zaloguj za pomocą ciasteczek",
+ "custom_command": "Polecenie niestandardowe",
+ "proxy": "Proxy",
+ "language": "Język"
+ },
+ "cookies": {
+ "help_text": "Wybierz sposób dostarczania ciasteczek do uwierzytelniania.\nUmożliwia to pobieranie prywatnych filmów i wysokiej jakości plików audio.",
+ "cookie_source": "Źródło ciasteczek",
+ "use_cookie_file": "Użyj pliku ciasteczek",
+ "extract_from_browser": "Wyodrębnij z przeglądarki",
+ "cookie_file": "Plik ciasteczek",
+ "cookie_file_placeholder": "Ścieżka do pliku cookies.txt...",
+ "browser_selection": "Wybór przeglądarki",
+ "browser_help": "Wybierz przeglądarkę do wyodrębnienia ciasteczek:",
+ "browser_label": "Przeglądarka:",
+ "profile_label": "Profil:",
+ "profile_placeholder": "Domyślny",
+ "browser_extract_message": "Ciasteczka przeglądarki zostaną wyodrębnione po zastosowaniu",
+ "file_selected_message": "Wybrano plik ciasteczek - Kliknij OK, aby zastosować",
+ "select_file_title": "Wybierz plik ciasteczek",
+ "file_filter": "Pliki ciasteczek (*.txt *.lwp)"
+ },
+ "custom_command": {
+ "help_text": "Wprowadź niestandardowe polecenie yt-dlp poniżej. Aktualny URL zostanie automatycznie dodany.
Aby uzyskać pełną listę opcji i przykładów użycia kliknij tutaj, aby zobaczyć oficjalną dokumentację yt-dlp.
Uwaga: Ścieżka pobierania i szablon nazwy pliku są obsługiwane automatycznie.",
+ "input_label": "Argumenty yt-dlp:",
+ "input_placeholder": "Wprowadź argumenty yt-dlp tutaj...\n\nPrzykład: --extract-audio --audio-format mp3",
+ "output_label": "Wynik polecenia:",
+ "output_placeholder": "Wynik polecenia pojawi się tutaj...",
+ "command_placeholder": "Wprowadź niestandardowe polecenie yt-dlp...",
+ "command_help": "Dostępne placeholdery:\n{url} - URL wideo\n{output} - Folder wyjściowy\n\nPrzykład: --write-info-json --write-thumbnail",
+ "full_command": "🔧 Pełne polecenie: {command}",
+ "command_success": "✅ Polecenie niestandardowe wykonane pomyślnie!",
+ "command_failed": "❌ Polecenie nie powiodło się z kodem wyjścia {code}",
+ "command_error": "❌ Błąd wykonywania polecenia niestandardowego: {error}"
+ },
+ "proxy": {
+ "help_text": "Skonfiguruj ustawienia proxy dla pobierania. Pozostaw puste dla bezpośredniego połączenia.",
+ "main_proxy": "Główny proxy",
+ "main_proxy_help": "Główny serwer proxy dla wszystkich pobierań. Obsługuje protokoły HTTP/HTTPS i SOCKS5.",
+ "proxy_url_label": "URL Proxy:",
+ "proxy_url_placeholder": "http://proxy:port lub socks5://proxy:port",
+ "proxy_examples": "Przykłady:\n• HTTP: http://proxy.example.com:8080\n• SOCKS5: socks5://proxy.example.com:1080",
+ "geo_proxy": "Proxy omijania geograficznego",
+ "geo_proxy_help": "Dodatkowy proxy specjalnie do omijania ograniczeń geograficznych.",
+ "geo_proxy_url_label": "URL proxy omijania geograficznego:",
+ "geo_proxy_url_placeholder": "http://geo-proxy:port",
+ "clear_main_proxy": "Wyczyść główny proxy",
+ "clear_geo_proxy": "Wyczyść proxy geograficzny",
+ "proxy_url": "URL Proxy",
+ "proxy_placeholder": "http://proxy:port lub socks5://proxy:port",
+ "geo_bypass": "Proxy omijania geograficznego (dla ograniczeń geograficznych)",
+ "geo_bypass_placeholder": "http://proxy:port do omijania geo-blokowania",
+ "invalid_main_url": "Nieprawidłowy format URL głównego proxy",
+ "invalid_geo_url": "Nieprawidłowy format URL proxy geograficznego",
+ "main_configured": "Główny proxy skonfigurowany",
+ "geo_configured": "Proxy geograficzny skonfigurowany"
+ },
+ "download": {
+ "preparing": "Przygotowywanie pobierania...",
+ "please_enter_url": "Proszę najpierw wprowadzić URL.",
+ "please_set_path": "Proszę najpierw ustawić ścieżkę pobierania.",
+ "please_enter_url_and_path": "Proszę wprowadzić URL i ustawić ścieżkę pobierania.",
+ "please_select_format": "Proszę najpierw wybrać format."
+ },
+ "update": {
+ "title": "Zaktualizuj yt-dlp",
+ "checking": "Sprawdzanie aktualizacji...",
+ "update_available": "Dostępna aktualizacja!\nAktualna wersja: {current}\nNajnowsza wersja: {latest}",
+ "up_to_date": "yt-dlp jest aktualny (Wersja {version})",
+ "could_not_determine": "Nie można określić wersji.",
+ "error_comparing": "Błąd porównywania wersji: {error}",
+ "update_available_failed": "Dostępna aktualizacja! (Porównanie nie powiodło się)\nAktualna: {current}\nNajnowsza: {latest}",
+ "updating": "Aktualizowanie...",
+ "initializing": "🚀 Inicjalizacja procesu aktualizacji...",
+ "checking_current": "🔍 Sprawdzanie aktualnej instalacji...",
+ "found_at": "📍 yt-dlp znaleziony w: {path}",
+ "error_getting_path": "❌ Błąd pobierania ścieżki yt-dlp: {error}",
+ "updating_binary": "📦 Aktualizowanie binarki yt-dlp zarządzanej przez aplikację...",
+ "updating_pip": "🐍 Aktualizowanie systemowego yt-dlp przez pip...",
+ "update_failed": "❌ Aktualizacja yt-dlp nie powiodła się. Spróbuj ponownie lub sprawdź połączenie internetowe.",
+ "binary_updated": "✅ Binarka została pomyślnie zaktualizowana!",
+ "update_failed_stderr": "❌ Aktualizacja yt-dlp nie powiodła się: {error}",
+ "update_timeout": "❌ Limit czasu aktualizacji yt-dlp.",
+ "unexpected_error": "❌ Nieoczekiwany błąd podczas aktualizacji: {error}",
+ "checking_pip": "🔍 Sprawdzanie aktualnej instalacji pip...",
+ "current_version": "📋 Aktualna wersja: {version}",
+ "not_found_pip": "⚠️ yt-dlp nie znaleziony przez pip, próba instalacji...",
+ "checking_latest": "🌐 Sprawdzanie najnowszej wersji...",
+ "failed_check_updates": "❌ Sprawdzanie aktualizacji nie powiodło się",
+ "latest_version": "🆕 Najnowsza wersja: {version}",
+ "updating_from_to": "⬆️ Aktualizacja z {current} do {latest}...",
+ "running_pip_install": "📦 Uruchamianie pip install --upgrade...",
+ "pip_completed": "✅ Aktualizacja pip zakończona pomyślnie!",
+ "pip_failed": "❌ Aktualizacja pip nie powiodła się: {error}"
+ },
+ "about": {
+ "title": "O YTSage",
+ "version": "Wersja {version}",
+ "description": "Nowoczesny pobieracz YouTube z czystym interfejsem PySide6.",
+ "author": "Autor: {author}",
+ "github": "GitHub: {repo}",
+ "system_info": "Informacje systemowe",
+ "loading": "🔄 Ładowanie informacji systemowych...",
+ "refresh": "🔄",
+ "refreshing": "🔄 Odświeżanie...",
+ "refresh_failed": "Odświeżanie nie powiodło się",
+ "refresh_failed_message": "Nie można odświeżyć informacji o wersji.",
+ "detected": "✓ Wykryto",
+ "missing": "✗ Brakuje",
+ "not_available": "Niedostępne"
+ },
+ "time_range": {
+ "title": "Przytnij wideo",
+ "time_range_group": "Zakres czasu",
+ "start_time": "Czas rozpoczęcia (GG:MM:SS)",
+ "end_time": "Czas zakończenia (GG:MM:SS)",
+ "start_placeholder": "00:00:00",
+ "end_placeholder": "00:00:00",
+ "start_time_placeholder": "Czas rozpoczęcia (GG:MM:SS)",
+ "end_time_placeholder": "Czas zakończenia (GG:MM:SS)",
+ "force_keyframes": "Wymuś klatki kluczowe w punktach cięcia",
+ "help_text": "Ustaw czasy rozpoczęcia i zakończenia, aby przyciąć wideo.\nPozostaw puste, aby pobrać pełne wideo.",
+ "invalid_format": "Nieprawidłowy format czasu. Użyj formatu GG:MM:SS.",
+ "start_after_end": "Czas rozpoczęcia nie może być po czasie zakończenia."
+ },
+ "settings": {
+ "title": "Ustawienia pobierania",
+ "download_path": "Ścieżka pobierania",
+ "browse": "Przeglądaj...",
+ "speed_limit": "Limit prędkości",
+ "speed_limit_placeholder": "Brak",
+ "auto_update_ytdlp": "Automatyczne aktualizacje yt-dlp",
+ "enable_auto_updates": "Włącz automatyczne aktualizacje yt-dlp",
+ "update_frequency": "Częstotliwość aktualizacji:",
+ "check_startup": "Sprawdzaj przy każdym uruchomieniu (minimum 1 godzina między sprawdzeniami)",
+ "check_daily": "Sprawdzaj codziennie",
+ "check_weekly": "Sprawdzaj co tydzień",
+ "check_updates_now": "Sprawdź aktualizacje teraz",
+ "update_check_title": "Sprawdzanie aktualizacji",
+ "could_not_determine_version": "Nie można określić aktualnej wersji yt-dlp.",
+ "update_available_dialog": "Dostępna aktualizacja!\n\nAktualna: {current}\nNajnowsza: {latest}\n\nUżyj przycisku 'Zaktualizuj yt-dlp' w głównym oknie, aby zaktualizować.",
+ "up_to_date_dialog": "yt-dlp jest aktualny!\n\nAktualna wersja: {version}",
+ "error_checking_updates": "Błąd sprawdzania aktualizacji: {error}",
+ "settings_saved_title": "Ustawienia zapisane",
+ "settings_saved_message": "Ustawienia automatycznych aktualizacji zostały pomyślnie zapisane!",
+ "error_title": "Błąd",
+ "failed_save_settings": "Nie udało się zapisać ustawień automatycznych aktualizacji.",
+ "error_saving_settings": "Błąd zapisywania ustawień automatycznych aktualizacji: {error}",
+ "auto_update_title": "Ustawienia automatycznych aktualizacji",
+ "auto_update_header": "🔄 Ustawienia automatycznych aktualizacji",
+ "auto_update_description": "Skonfiguruj automatyczne aktualizacje dla yt-dlp, aby zapewnić najnowsze funkcje i poprawki błędów.",
+ "current_status": "Aktualny status",
+ "current_version_label": "Aktualna wersja yt-dlp: Sprawdzanie...",
+ "last_check_label": "Ostatnie sprawdzenie aktualizacji: Nigdy",
+ "next_check_label": "Następne sprawdzenie: Na podstawie ustawień",
+ "manual_check_button": "🔍 Sprawdź aktualizacje teraz",
+ "update_frequency_group": "Częstotliwość aktualizacji",
+ "save_settings": "Zapisz ustawienia",
+ "settings_saved_successfully": "✅ Ustawienia zapisane pomyślnie!",
+ "error_saving": "❌ Błąd zapisywania ustawień: {error}"
+ },
+ "main_ui": {
+ "url_placeholder": "Wprowadź URL wideo YouTube lub playlisty",
+ "merge_subtitles": "Połącz napisy",
+ "save_thumbnail": "Zapisz miniaturę",
+ "save_description": "Zapisz opis",
+ "embed_chapters": "Osadź rozdziały",
+ "subtitles_selected": "{count} wybrano",
+ "all_selected": "Wszystkie wybrane",
+ "select_videos_all": "Wybierz wideo... (Wszystkie wybrane)",
+ "please_enter_url": "Proszę najpierw wprowadzić URL",
+ "cookie_file_selected_title": "Wybrano plik ciasteczek",
+ "cookie_file_selected_message": "Wybrano plik ciasteczek: {path}",
+ "browser_cookies_selected_title": "Wybrano ciasteczka przeglądarki",
+ "browser_cookies_selected_message": "Ciasteczka przeglądarki zostaną wyodrębnione z: {browser}",
+ "error_no_format_info": "Błąd: Brak dostępnych informacji o formacie.",
+ "error_extract_info": "Błąd: Nie można wyodrębnić podstawowych informacji o wideo. Sprawdź swój link.",
+ "analyzing_preparing": "Analizowanie (0%)... Przygotowywanie żądania",
+ "analyzing_extracting_basic": "Analizowanie (15%)... Wyodrębnianie podstawowych informacji",
+ "analyzing_extracting_detailed": "Analizowanie (30%)... Wyodrębnianie szczegółowych informacji",
+ "analyzing_processing_video": "Analizowanie (45%)... Przetwarzanie danych wideo",
+ "analyzing_processing_formats": "Analizowanie (60%)... Przetwarzanie formatów",
+ "analyzing_loading_thumbnail": "Analizowanie (75%)... Ładowanie miniatury",
+ "analyzing_processing_subtitles": "Analizowanie (85%)... Przetwarzanie napisów",
+ "analyzing_updating_table": "Analizowanie (95%)... Aktualizowanie tabeli formatów",
+ "analysis_complete": "Analiza zakończona!",
+ "analyzing_extracting_ytdlp": "Analizowanie (30%)... Wyodrębnianie informacji za pomocą pliku wykonywalnego yt-dlp",
+ "analyzing_processing_data": "Analizowanie (60%)... Przetwarzanie danych",
+ "analyzing_processing_formats_ytdlp": "Analizowanie (75%)... Przetwarzanie formatów",
+ "analyzing_loading_thumbnail_ytdlp": "Analizowanie (85%)... Ładowanie miniatury",
+ "analyzing_processing_subtitles_ytdlp": "Analizowanie (90%)... Przetwarzanie napisów",
+ "select_subtitles": "Wybierz napisy...",
+ "sponsorblock_categories": "Kategorie SponsorBlock..."
+ },
+ "sponsorblock": {
+ "sponsor": "Sponsor",
+ "sponsor_desc": "Płatne reklamy, płatne rekomendacje i bezpośrednie reklamy",
+ "selfpromo": "Nieobłożona/Samopromocja",
+ "selfpromo_desc": "Nieobłożona promocja własnych treści twórcy",
+ "interaction": "Przypomnienie o interakcji",
+ "interaction_desc": "Widzowie są proszeni o polubienie, subskrypcję lub śledzenie w mediach społecznościowych",
+ "intro": "Intro",
+ "intro_desc": "Wprowadzenie do wideo, które można pominąć",
+ "outro": "Outro/Karty końcowe",
+ "outro_desc": "Napisy końcowe lub gdy wideo się kończy",
+ "preview": "Podgląd/Podsumowanie",
+ "preview_desc": "Krótkie podsumowanie poprzednich wideo lub podgląd nadchodzącej treści",
+ "music_offtopic": "Sekcja niemuzyczna",
+ "music_offtopic_desc": "Tylko dla wideo muzycznych. Oznacza sekcje niemuzyczne",
+ "filler": "Wypełniacz poboczny",
+ "filler_desc": "Sceny poboczne dodane tylko jako wypełniacz lub dla humoru"
+ },
+ "video_info": {
+ "channel": "Kanał",
+ "views": "Wyświetlenia",
+ "likes": "Polubienia",
+ "upload_date": "Data przesłania",
+ "duration": "Czas trwania",
+ "unknown_channel": "Nieznany kanał",
+ "unknown_date": "Nieznana data",
+ "unknown_title": "Nieznany tytuł"
+ },
+ "command": {
+ "running": "Uruchamianie...",
+ "run_command": "Uruchom polecenie"
+ },
+ "selection": {
+ "none_selected": "0 wybrano",
+ "one_selected": "1 kategoria wybrana",
+ "count_selected": "{count} wybrano"
+ },
+ "status": {
+ "ready": "Gotowy",
+ "file_exists": "⚠️ Plik już istnieje",
+ "cancelling": "Anulowanie pobierania..."
+ }
+}
\ No newline at end of file
diff --git a/languages/pt.json b/languages/pt.json
index 44d7b17..861ce66 100644
--- a/languages/pt.json
+++ b/languages/pt.json
@@ -14,6 +14,7 @@
"hindi": "Hindi",
"indonesian": "Indonésio",
"turkish": "Turco",
+ "polish": "Polonês",
"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 60cb2c7..1d739ab 100644
--- a/languages/ru.json
+++ b/languages/ru.json
@@ -14,6 +14,7 @@
"hindi": "Хинди",
"indonesian": "Индонезийский",
"turkish": "Турецкий",
+ "polish": "Польский",
"help_text": "Выберите предпочитаемый язык для интерфейса.",
"restart_notice": "Изменение языка вступит в силу после перезапуска приложения."
},
diff --git a/languages/tr.json b/languages/tr.json
index de30198..a8e8642 100644
--- a/languages/tr.json
+++ b/languages/tr.json
@@ -14,6 +14,7 @@
"hindi": "Hintçe",
"indonesian": "Endonezce",
"turkish": "Türkçe",
+ "polish": "Lehç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."
},
diff --git a/languages/zh.json b/languages/zh.json
index c1cc026..860c066 100644
--- a/languages/zh.json
+++ b/languages/zh.json
@@ -14,6 +14,7 @@
"hindi": "印地语",
"indonesian": "印尼语",
"turkish": "土耳其语",
+ "polish": "波兰语",
"help_text": "选择您喜欢的界面语言。",
"restart_notice": "语言更改将在重启应用程序后生效。"
},
diff --git a/src/gui/ytsage_gui_format_table.py b/src/gui/ytsage_gui_format_table.py
index 07101d7..6def03f 100644
--- a/src/gui/ytsage_gui_format_table.py
+++ b/src/gui/ytsage_gui_format_table.py
@@ -264,15 +264,15 @@ class FormatTableMixin:
# Column 1: Quality (Always shown)
quality_text = self.get_quality_label(f)
quality_item = QTableWidgetItem(quality_text)
- # Set color based on quality (check English, Spanish, Portuguese, Russian, Chinese, German, and French terms)
+ # Set color based on quality (check English, Spanish, Portuguese, Russian, Chinese, German, French, Hindi, Indonesian, Turkish, and Polish 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", "En iyi"]):
+ if any(term.lower() in quality_lower for term in ["Best", "Óptima", "Mejor", "Melhor", "Лучшее", "最佳", "Beste", "Meilleure", "सर्वोत्तम", "Terbaik", "En iyi", "Najlepsza", "Najlepszy", "Najlepsze"]):
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", "Yüksek", "Yüksek ses"]):
+ 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", "Wysoka", "Wysoki", "Wysokie"]):
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", "Orta", "Orta ses"]):
+ 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", "Średnia", "Średni", "Średnie"]):
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", "Düşük", "Düşük ses", "Düşük kalite"]):
+ 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", "Niska", "Niski", "Niskie"]):
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 772cc5e..24df2ca 100644
--- a/src/utils/ytsage_localization.py
+++ b/src/utils/ytsage_localization.py
@@ -89,7 +89,8 @@ class LocalizationManager:
"french": "Français (French)",
"hindi": "हिन्दी (Hindi)",
"indonesian": "Bahasa Indonesia (Indonesian)",
- "turkish": "Türkçe (Turkish)"
+ "turkish": "Türkçe (Turkish)",
+ "polish": "Polski (Polish)"
},
"download": {
"preparing": "🚀 Preparing your download...",