diff --git a/languages/de.json b/languages/de.json
index a707cb1..5345c6c 100644
--- a/languages/de.json
+++ b/languages/de.json
@@ -11,6 +11,7 @@
"chinese": "Chinesisch",
"german": "Deutsch",
"french": "Französisch",
+ "hindi": "Hindi",
"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 e1b598f..0ba9ccc 100644
--- a/languages/en.json
+++ b/languages/en.json
@@ -11,6 +11,7 @@
"chinese": "中文 (简体) (Chinese Simplified)",
"german": "Deutsch (German)",
"french": "Français (French)",
+ "hindi": "हिन्दी (Hindi)",
"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 c3519f0..d83674e 100644
--- a/languages/es.json
+++ b/languages/es.json
@@ -10,7 +10,8 @@
"russian": "Русский (Russian)",
"chinese": "中文 (简体) (Chinese Simplified)",
"german": "Deutsch (German)",
- "french": "Français (French)"
+ "french": "Français (French)",
+ "hindi": "Hindi"
},
"app": {
"title": "YTSage",
diff --git a/languages/fr.json b/languages/fr.json
index 439e03a..3bf1b77 100644
--- a/languages/fr.json
+++ b/languages/fr.json
@@ -11,6 +11,7 @@
"chinese": "Chinois",
"german": "Allemand",
"french": "Français",
+ "hindi": "Hindi",
"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
new file mode 100644
index 0000000..0e47e0f
--- /dev/null
+++ b/languages/hi.json
@@ -0,0 +1,332 @@
+{
+ "language": {
+ "display_name": "हिन्दी (Hindi)",
+ "select_language": "भाषा चुनें:",
+ "current_language": "वर्तमान भाषा: {language}",
+ "restart_required": "भाषा परिवर्तन एप्लिकेशन पुनरारंभ के बाद प्रभावी होगा।",
+ "english": "अंग्रेजी",
+ "spanish": "स्पेनिश",
+ "portuguese": "पुर्तगाली",
+ "russian": "रूसी",
+ "chinese": "चीनी",
+ "german": "जर्मन",
+ "french": "फ्रेंच",
+ "hindi": "हिन्दी",
+ "help_text": "इंटरफेस के लिए अपनी पसंदीदा भाषा चुनें।",
+ "restart_notice": "भाषा परिवर्तन एप्लिकेशन पुनरारंभ के बाद प्रभावी होगा।"
+ },
+ "app": {
+ "title": "YTSage",
+ "version": "v{version}",
+ "ready": "तैयार"
+ },
+ "formats": {
+ "show_formats": "प्रारूप दिखाएं:",
+ "video_format": "वीडियो प्रारूप:",
+ "audio_format": "ऑडियो प्रारूप:",
+ "no_formats": "कोई प्रारूप उपलब्ध नहीं",
+ "loading": "प्रारूप लोड हो रहे हैं...",
+ "select": "चुनें",
+ "quality": "गुणवत्ता",
+ "extension": "एक्सटेंशन",
+ "resolution": "रिज़ॉल्यूशन",
+ "file_size": "फ़ाइल आकार",
+ "codec": "कोडेक",
+ "audio": "ऑडियो",
+ "notes": "नोट्स",
+ "will_merge_audio": "ऑडियो मर्ज किया जाएगा",
+ "has_audio": "✓ ऑडियो है",
+ "audio_only": "केवल ऑडियो",
+ "large_size": "बड़ा आकार",
+ "medium_size": "मध्यम आकार",
+ "standard_size": "मानक आकार",
+ "compatible": "संगत",
+ "efficient": "कुशल",
+ "high_quality": "उच्च गुणवत्ता",
+ "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": "के बारे में",
+ "analyze": "विश्लेषण",
+ "paste_url": "URL पेस्ट करें",
+ "select_videos": "वीडियो चुनें...",
+ "video": "वीडियो",
+ "audio_only": "केवल ऑडियो",
+ "custom_options": "कस्टम विकल्प",
+ "trim_video": "वीडियो ट्रिम करें",
+ "download_settings": "डाउनलोड सेटिंग्स",
+ "update": "yt-dlp अपडेट करें",
+ "select_defaults": "डिफ़ॉल्ट चुनें",
+ "select_all": "सभी चुनें",
+ "deselect_all": "सभी को अचयनित करें"
+ },
+ "dialogs": {
+ "custom_options": "कस्टम विकल्प",
+ "settings": "सेटिंग्स",
+ "select_folder": "डाउनलोड फ़ोल्डर चुनें",
+ "sponsorblock_categories": "SponsorBlock श्रेणियां",
+ "sponsorblock_description": "डाउनलोड के दौरान अपने आप हटाए जाने वाले वीडियो सेगमेंट के प्रकार चुनें।\nSponsorBlock इन सेगमेंट की पहचान के लिए समुदाय द्वारा प्रस्तुत डेटा का उपयोग करता है।",
+ "select_subtitles": "उपशीर्षक चुनें",
+ "filter_languages_placeholder": "भाषाएं फ़िल्टर करें (जैसे: hi, en)...",
+ "no_subtitles_available": "कोई उपशीर्षक उपलब्ध नहीं",
+ "matching": "मेल खाता"
+ },
+ "tabs": {
+ "cookies": "कुकीज़ के साथ लॉगिन",
+ "custom_command": "कस्टम कमांड",
+ "proxy": "प्रॉक्सी",
+ "language": "भाषा"
+ },
+ "cookies": {
+ "help_text": "प्रमाणीकरण के लिए कुकीज़ प्रदान करने का तरीका चुनें।\nयह निजी वीडियो और उच्च गुणवत्ता वाली ऑडियो फ़ाइलें डाउनलोड करने की अनुमति देता है।",
+ "cookie_source": "कुकी स्रोत",
+ "use_cookie_file": "कुकी फ़ाइल का उपयोग करें",
+ "extract_from_browser": "ब्राउज़र से निकालें",
+ "cookie_file": "कुकी फ़ाइल",
+ "cookie_file_placeholder": "cookies.txt फ़ाइल का पथ...",
+ "browser_selection": "ब्राउज़र चयन",
+ "browser_help": "वह ब्राउज़र चुनें जिससे कुकीज़ निकालनी हैं:",
+ "browser_label": "ब्राउज़र:",
+ "profile_label": "प्रोफ़ाइल:",
+ "profile_placeholder": "डिफ़ॉल्ट",
+ "browser_extract_message": "लागू करने पर ब्राउज़र कुकीज़ निकाली जाएंगी",
+ "file_selected_message": "कुकी फ़ाइल चुनी गई - लागू करने के लिए OK दबाएं",
+ "select_file_title": "कुकी फ़ाइल चुनें",
+ "file_filter": "कुकी फ़ाइलें (*.txt *.lwp)"
+ },
+ "custom_command": {
+ "help_text": "नीचे अपना कस्टम yt-dlp कमांड दर्ज करें। वर्तमान URL स्वचालित रूप से जोड़ा जाएगा।
विकल्पों की पूरी सूची और उपयोग के उदाहरणों के लिए आधिकारिक 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} - वीडियो URL\n{output} - आउटपुट फ़ोल्डर\n\nउदाहरण: --write-info-json --write-thumbnail",
+ "full_command": "🔧 पूरा कमांड: {command}",
+ "command_success": "✅ कस्टम कमांड सफलतापूर्वक निष्पादित!",
+ "command_failed": "❌ कमांड असफल, एग्जिट कोड {code}",
+ "command_error": "❌ कस्टम कमांड निष्पादित करने में त्रुटि: {error}"
+ },
+ "proxy": {
+ "help_text": "डाउनलोड के लिए प्रॉक्सी सेटिंग्स कॉन्फ़िगर करें। प्रत्यक्ष कनेक्शन के लिए खाली छोड़ें।",
+ "main_proxy": "मुख्य प्रॉक्सी",
+ "main_proxy_help": "सभी डाउनलोड के लिए प्राथमिक प्रॉक्सी सर्वर। HTTP/HTTPS और SOCKS5 प्रोटोकॉल समर्थित।",
+ "proxy_url_label": "प्रॉक्सी URL:",
+ "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": "भू-बाईपास प्रॉक्सी URL:",
+ "geo_proxy_url_placeholder": "http://geo-proxy:port",
+ "clear_main_proxy": "मुख्य प्रॉक्सी साफ़ करें",
+ "clear_geo_proxy": "भू-प्रॉक्सी साफ़ करें",
+ "proxy_url": "प्रॉक्सी URL",
+ "proxy_placeholder": "http://proxy:port या socks5://proxy:port",
+ "geo_bypass": "भू-बाईपास प्रॉक्सी (भौगोलिक प्रतिबंधों के लिए)",
+ "geo_bypass_placeholder": "http://proxy:port भू-ब्लॉकिंग बायपास के लिए",
+ "invalid_main_url": "अमान्य मुख्य प्रॉक्सी URL प्रारूप",
+ "invalid_geo_url": "अमान्य भू-प्रॉक्सी URL प्रारूप",
+ "main_configured": "मुख्य प्रॉक्सी कॉन्फ़िगर की गई",
+ "geo_configured": "भू-प्रॉक्सी कॉन्फ़िगर की गई"
+ },
+ "download": {
+ "preparing": "डाउनलोड तैयार हो रहा है...",
+ "please_enter_url": "कृपया पहले URL दर्ज करें।",
+ "please_set_path": "कृपया पहले डाउनलोड पथ सेट करें।",
+ "please_enter_url_and_path": "कृपया URL दर्ज करें और डाउनलोड पथ सेट करें।",
+ "please_select_format": "कृपया पहले प्रारूप चुनें।"
+ },
+ "update": {
+ "title": "yt-dlp अपडेट करें",
+ "checking": "अपडेट की जांच हो रही है...",
+ "update_available": "अपडेट उपलब्ध!\nवर्तमान संस्करण: {current}\nनवीनतम संस्करण: {latest}",
+ "up_to_date": "yt-dlp अप टू डेट है (संस्करण {version})",
+ "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 बाइनरी अपडेट हो रही है...",
+ "updating_pip": "🐍 pip के माध्यम से सिस्टम yt-dlp अपडेट हो रहा है...",
+ "update_failed": "❌ yt-dlp अपडेट असफल। कृपया पुनः प्रयास करें या अपना इंटरनेट कनेक्शन जांचें।",
+ "binary_updated": "✅ बाइनरी सफलतापूर्वक अपडेट हुई!",
+ "update_failed_stderr": "❌ yt-dlp अपडेट असफल: {error}",
+ "update_timeout": "❌ yt-dlp अपडेट टाइमआउट।",
+ "unexpected_error": "❌ अपडेट के दौरान अनपेक्षित त्रुटि: {error}",
+ "checking_pip": "🔍 वर्तमान pip इंस्टॉलेशन की जांच हो रही है...",
+ "current_version": "📋 वर्तमान संस्करण: {version}",
+ "not_found_pip": "⚠️ pip के माध्यम से yt-dlp नहीं मिला, इंस्टॉल करने का प्रयास हो रहा है...",
+ "checking_latest": "🌐 नवीनतम संस्करण की जांच हो रही है...",
+ "failed_check_updates": "❌ अपडेट जांच असफल",
+ "latest_version": "🆕 नवीनतम संस्करण: {version}",
+ "updating_from_to": "⬆️ {current} से {latest} पर अपडेट हो रहा है...",
+ "running_pip_install": "📦 pip install --upgrade चल रहा है...",
+ "pip_completed": "✅ Pip अपडेट सफलतापूर्वक पूर्ण!",
+ "pip_failed": "❌ Pip अपडेट असफल: {error}"
+ },
+ "about": {
+ "title": "YTSage के बारे में",
+ "version": "संस्करण {version}",
+ "description": "साफ PySide6 इंटरफेस के साथ आधुनिक YouTube डाउनलोडर।",
+ "author": "द्वारा: {author}",
+ "github": "GitHub: {repo}",
+ "system_info": "सिस्टम जानकारी",
+ "loading": "🔄 सिस्टम जानकारी लोड हो रही है...",
+ "refresh": "🔄",
+ "refreshing": "🔄 रिफ्रेश हो रहा है...",
+ "refresh_failed": "रिफ्रेश असफल",
+ "refresh_failed_message": "संस्करण जानकारी रिफ्रेश करने में असमर्थ।",
+ "detected": "✓ पता चला",
+ "missing": "✗ गुम",
+ "not_available": "उपलब्ध नहीं"
+ },
+ "time_range": {
+ "title": "वीडियो ट्रिम करें",
+ "time_range_group": "समय सीमा",
+ "start_time": "प्रारंभ समय (HH:MM:SS)",
+ "end_time": "समाप्ति समय (HH:MM:SS)",
+ "start_placeholder": "00:00:00",
+ "end_placeholder": "00:00:00",
+ "start_time_placeholder": "प्रारंभ समय (HH:MM:SS)",
+ "end_time_placeholder": "समाप्ति समय (HH:MM:SS)",
+ "force_keyframes": "कट पॉइंट्स पर कीफ्रेम्स को बाध्य करें",
+ "help_text": "वीडियो ट्रिम करने के लिए प्रारंभ और समाप्ति समय सेट करें।\nपूरा वीडियो डाउनलोड करने के लिए खाली छोड़ें।",
+ "invalid_format": "अमान्य समय प्रारूप। HH:MM:SS प्रारूप का उपयोग करें।",
+ "start_after_end": "प्रारंभ समय समाप्ति समय के बाद नहीं हो सकता।"
+ },
+ "settings": {
+ "title": "डाउनलोड सेटिंग्स",
+ "download_path": "डाउनलोड पथ",
+ "browse": "ब्राउज़ करें...",
+ "speed_limit": "गति सीमा",
+ "speed_limit_placeholder": "कोई नहीं",
+ "auto_update_ytdlp": "yt-dlp स्वचालित अपडेट",
+ "enable_auto_updates": "yt-dlp स्वचालित अपडेट सक्षम करें",
+ "update_frequency": "अपडेट आवृत्ति:",
+ "check_startup": "हर स्टार्टअप पर जांचें (जांच के बीच कम से कम 1 घंटा)",
+ "check_daily": "दैनिक जांचें",
+ "check_weekly": "साप्ताहिक जांचें",
+ "check_updates_now": "अभी अपडेट की जांच करें",
+ "update_check_title": "अपडेट जांच",
+ "could_not_determine_version": "वर्तमान yt-dlp संस्करण निर्धारित नहीं हो सका।",
+ "update_available_dialog": "अपडेट उपलब्ध!\n\nवर्तमान: {current}\nनवीनतम: {latest}\n\nअपडेट करने के लिए मुख्य विंडो में 'yt-dlp अपडेट करें' बटन का उपयोग करें।",
+ "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}",
+ "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}"
+ },
+ "main_ui": {
+ "url_placeholder": "YouTube वीडियो या प्लेलिस्ट URL दर्ज करें",
+ "merge_subtitles": "उपशीर्षक मर्ज करें",
+ "save_thumbnail": "थंबनेल सेव करें",
+ "save_description": "विवरण सेव करें",
+ "embed_chapters": "चैप्टर एम्बेड करें",
+ "subtitles_selected": "{count} चुना गया",
+ "all_selected": "सभी चुने गए",
+ "select_videos_all": "वीडियो चुनें... (सभी चुने गए)",
+ "please_enter_url": "कृपया पहले URL दर्ज करें",
+ "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": "विश्लेषण (0%)... अनुरोध तैयार हो रहा है",
+ "analyzing_extracting_basic": "विश्लेषण (15%)... बुनियादी जानकारी निकाली जा रही है",
+ "analyzing_extracting_detailed": "विश्लेषण (30%)... विस्तृत जानकारी निकाली जा रही है",
+ "analyzing_processing_video": "विश्लेषण (45%)... वीडियो डेटा प्रोसेस हो रहा है",
+ "analyzing_processing_formats": "विश्लेषण (60%)... प्रारूप प्रोसेस हो रहे हैं",
+ "analyzing_loading_thumbnail": "विश्लेषण (75%)... थंबनेल लोड हो रहा है",
+ "analyzing_processing_subtitles": "विश्लेषण (85%)... उपशीर्षक प्रोसेस हो रहे हैं",
+ "analyzing_updating_table": "विश्लेषण (95%)... प्रारूप तालिका अपडेट हो रही है",
+ "analysis_complete": "विश्लेषण पूर्ण!",
+ "analyzing_extracting_ytdlp": "विश्लेषण (30%)... yt-dlp executable के साथ जानकारी निकाली जा रही है",
+ "analyzing_processing_data": "विश्लेषण (60%)... डेटा प्रोसेस हो रहा है",
+ "analyzing_processing_formats_ytdlp": "विश्लेषण (75%)... प्रारूप प्रोसेस हो रहे हैं",
+ "analyzing_loading_thumbnail_ytdlp": "विश्लेषण (85%)... थंबनेल लोड हो रहा है",
+ "analyzing_processing_subtitles_ytdlp": "विश्लेषण (90%)... उपशीर्षक प्रोसेस हो रहे हैं",
+ "select_subtitles": "उपशीर्षक चुनें...",
+ "sponsorblock_categories": "SponsorBlock श्रेणियां..."
+ },
+ "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": "⚠️ फ़ाइल पहले से मौजूद है",
+ "cancelling": "डाउनलोड रद्द हो रहा है..."
+ }
+}
\ No newline at end of file
diff --git a/languages/pt.json b/languages/pt.json
index 6bc935e..51926f9 100644
--- a/languages/pt.json
+++ b/languages/pt.json
@@ -11,6 +11,7 @@
"chinese": "中文 (简体) (Chinese Simplified)",
"german": "Alemão",
"french": "Francês",
+ "hindi": "Hindi",
"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 b4db0ca..8496465 100644
--- a/languages/ru.json
+++ b/languages/ru.json
@@ -11,6 +11,7 @@
"chinese": "中文 (简体) (Chinese Simplified)",
"german": "Немецкий",
"french": "Французский",
+ "hindi": "Хинди",
"help_text": "Выберите предпочитаемый язык для интерфейса.",
"restart_notice": "Изменение языка вступит в силу после перезапуска приложения."
},
diff --git a/languages/zh.json b/languages/zh.json
index b89adc3..22fbd41 100644
--- a/languages/zh.json
+++ b/languages/zh.json
@@ -11,6 +11,7 @@
"chinese": "中文",
"german": "德语",
"french": "法语",
+ "hindi": "印地语",
"help_text": "选择您喜欢的界面语言。",
"restart_notice": "语言更改将在重启应用程序后生效。"
},
diff --git a/src/gui/ytsage_gui_format_table.py b/src/gui/ytsage_gui_format_table.py
index f04f86b..c95f9e5 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"]):
+ if any(term.lower() in quality_lower for term in ["Best", "Óptima", "Mejor", "Melhor", "Лучшее", "最佳", "Beste", "Meilleure", "सर्वोत्तम"]):
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é"]):
+ elif any(term.lower() in quality_lower for term in ["High", "Alta", "Alto", "Áudio Alto", "Audio Alto", "Высокое", "高清", "高质量", "Hoch", "Haute", "Élevé", "Audio élevé", "उच्च", "उच्च ऑडियो"]):
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"]):
+ elif any(term.lower() in quality_lower for term in ["Medium", "Media", "Medio", "Média", "Áudio Médio", "Audio Medio", "Среднее", "中等", "Mittel", "Moyenne", "Audio moyen", "मध्यम", "मध्यम ऑडियो"]):
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"]):
+ 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", "निम्न", "निम्न ऑडियो", "निम्न गुणवत्ता"]):
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 5826694..a424c29 100644
--- a/src/utils/ytsage_localization.py
+++ b/src/utils/ytsage_localization.py
@@ -86,7 +86,8 @@ class LocalizationManager:
"russian": "Русский (Russian)",
"chinese": "中文 (简体) (Chinese Simplified)",
"german": "Deutsch (German)",
- "french": "Français (French)"
+ "french": "Français (French)",
+ "hindi": "हिन्दी (Hindi)"
},
"download": {
"preparing": "🚀 Preparing your download...",