Add new translation keys for file exists and auto-update dialogs
Introduces new translation keys for file exists and auto-update dialogs in all supported languages. Updates the settings and main GUI to use these i18n strings instead of hardcoded English text, improving localization and user experience.
This commit is contained in:
@@ -375,5 +375,21 @@
|
||||
},
|
||||
"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": "🔍 التحقق من التحديثات الآن"
|
||||
}
|
||||
}
|
||||
@@ -375,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} ausgewählt"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "Datei existiert bereits",
|
||||
"message": "Die Datei existiert bereits:\n{filename}",
|
||||
"info": "Dieses Video wurde bereits heruntergeladen."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Letzte Aktualisierungsprüfung: Nie",
|
||||
"last_check": "Letzte Aktualisierungsprüfung: {time}",
|
||||
"next_check_disabled": "Nächste Prüfung: Deaktiviert",
|
||||
"next_check_startup": "Nächste Prüfung: Beim Start",
|
||||
"next_check_overdue": "Nächste Prüfung: Jetzt (überfällig)",
|
||||
"next_check": "Nächste Prüfung: {time}",
|
||||
"next_check_error": "Nächste Prüfung: Fehler bei Berechnung",
|
||||
"checking": "🔄 Prüfen...",
|
||||
"check_now": "🔍 Jetzt nach Updates suchen"
|
||||
}
|
||||
}
|
||||
+16
-2
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "Will merge audio",
|
||||
"has_audio": "✓ Has Audio",
|
||||
"audio_only": "Audio Only",
|
||||
|
||||
"best_4k": "Best (4K)",
|
||||
"best_2k": "Best (2K)",
|
||||
"high_1080p": "High (1080p)",
|
||||
@@ -151,7 +150,6 @@
|
||||
"main_configured": "Main proxy configured",
|
||||
"geo_configured": "Geo proxy configured"
|
||||
},
|
||||
|
||||
"download": {
|
||||
"preparing": "Preparing download...",
|
||||
"starting": "🚀 Starting download...",
|
||||
@@ -377,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} selected"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "File Already Exists",
|
||||
"message": "The file already exists:\n{filename}",
|
||||
"info": "This video has already been downloaded."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Last update check: Never",
|
||||
"last_check": "Last update check: {time}",
|
||||
"next_check_disabled": "Next check: Disabled",
|
||||
"next_check_startup": "Next check: On next startup",
|
||||
"next_check_overdue": "Next check: Now (overdue)",
|
||||
"next_check": "Next check: {time}",
|
||||
"next_check_error": "Next check: Error calculating",
|
||||
"checking": "🔄 Checking...",
|
||||
"check_now": "🔍 Check for Updates Now"
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -150,7 +150,6 @@
|
||||
"will_merge_audio": "Se combinará audio",
|
||||
"has_audio": "✓ Tiene Audio",
|
||||
"audio_only": "Solo Audio",
|
||||
|
||||
"best_4k": "Óptima (4K)",
|
||||
"best_2k": "Óptima (2K)",
|
||||
"high_1080p": "Alta (1080p)",
|
||||
@@ -359,5 +358,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} seleccionados"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "El archivo ya existe",
|
||||
"message": "El archivo ya existe:\n{filename}",
|
||||
"info": "Este video ya ha sido descargado."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Última verificación: Nunca",
|
||||
"last_check": "Última verificación: {time}",
|
||||
"next_check_disabled": "Próxima verificación: Deshabilitada",
|
||||
"next_check_startup": "Próxima verificación: Al iniciar",
|
||||
"next_check_overdue": "Próxima verificación: Ahora (atrasada)",
|
||||
"next_check": "Próxima verificación: {time}",
|
||||
"next_check_error": "Próxima verificación: Error al calcular",
|
||||
"checking": "🔄 Verificando...",
|
||||
"check_now": "🔍 Verificar actualizaciones ahora"
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "L'audio sera fusionné",
|
||||
"has_audio": "✓ Contient de l'audio",
|
||||
"audio_only": "Audio uniquement",
|
||||
|
||||
"best_4k": "Meilleure (4K)",
|
||||
"best_2k": "Meilleure (2K)",
|
||||
"high_1080p": "Haute (1080p)",
|
||||
@@ -376,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} sélectionné(s)"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "Le fichier existe déjà",
|
||||
"message": "Le fichier existe déjà :\n{filename}",
|
||||
"info": "Cette vidéo a déjà été téléchargée."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Dernière vérification : Jamais",
|
||||
"last_check": "Dernière vérification : {time}",
|
||||
"next_check_disabled": "Prochaine vérification : Désactivée",
|
||||
"next_check_startup": "Prochaine vérification : Au démarrage",
|
||||
"next_check_overdue": "Prochaine vérification : Maintenant (en retard)",
|
||||
"next_check": "Prochaine vérification : {time}",
|
||||
"next_check_error": "Prochaine vérification : Erreur de calcul",
|
||||
"checking": "🔄 Vérification...",
|
||||
"check_now": "🔍 Vérifier les mises à jour maintenant"
|
||||
}
|
||||
}
|
||||
@@ -375,5 +375,21 @@
|
||||
},
|
||||
"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": "🔍 अभी अपडेट की जांच करें"
|
||||
}
|
||||
}
|
||||
@@ -375,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} dipilih"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "File Sudah Ada",
|
||||
"message": "File sudah ada:\n{filename}",
|
||||
"info": "Video ini sudah pernah diunduh."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Pemeriksaan terakhir: Tidak pernah",
|
||||
"last_check": "Pemeriksaan terakhir: {time}",
|
||||
"next_check_disabled": "Pemeriksaan berikutnya: Dinonaktifkan",
|
||||
"next_check_startup": "Pemeriksaan berikutnya: Saat startup",
|
||||
"next_check_overdue": "Pemeriksaan berikutnya: Sekarang (terlambat)",
|
||||
"next_check": "Pemeriksaan berikutnya: {time}",
|
||||
"next_check_error": "Pemeriksaan berikutnya: Kesalahan perhitungan",
|
||||
"checking": "🔄 Memeriksa...",
|
||||
"check_now": "🔍 Periksa pembaruan sekarang"
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "L'audio verrà unito",
|
||||
"has_audio": "✓ Contiene audio",
|
||||
"audio_only": "Solo audio",
|
||||
|
||||
"best_4k": "Migliore (4K)",
|
||||
"best_2k": "Migliore (2K)",
|
||||
"high_1080p": "Alta (1080p)",
|
||||
@@ -376,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} selezionati"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "Il file esiste già",
|
||||
"message": "Il file esiste già:\n{filename}",
|
||||
"info": "Questo video è già stato scaricato."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Ultimo controllo aggiornamenti: Mai",
|
||||
"last_check": "Ultimo controllo aggiornamenti: {time}",
|
||||
"next_check_disabled": "Prossimo controllo: Disabilitato",
|
||||
"next_check_startup": "Prossimo controllo: All'avvio",
|
||||
"next_check_overdue": "Prossimo controllo: Ora (in ritardo)",
|
||||
"next_check": "Prossimo controllo: {time}",
|
||||
"next_check_error": "Prossimo controllo: Errore di calcolo",
|
||||
"checking": "🔄 Controllo...",
|
||||
"check_now": "🔍 Controlla aggiornamenti ora"
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "音声が結合されます",
|
||||
"has_audio": "✓ 音声あり",
|
||||
"audio_only": "音声のみ",
|
||||
|
||||
"best_4k": "最高 (4K)",
|
||||
"best_2k": "最高 (2K)",
|
||||
"high_1080p": "高 (1080p)",
|
||||
@@ -376,5 +375,21 @@
|
||||
},
|
||||
"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": "🔍 今すぐ更新を確認"
|
||||
}
|
||||
}
|
||||
@@ -375,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} wybrano"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "Plik już istnieje",
|
||||
"message": "Plik już istnieje:\n{filename}",
|
||||
"info": "Ten film został już pobrany."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Ostatnie sprawdzenie: Nigdy",
|
||||
"last_check": "Ostatnie sprawdzenie: {time}",
|
||||
"next_check_disabled": "Następne sprawdzenie: Wyłączone",
|
||||
"next_check_startup": "Następne sprawdzenie: Przy starcie",
|
||||
"next_check_overdue": "Następne sprawdzenie: Teraz (zaległe)",
|
||||
"next_check": "Następne sprawdzenie: {time}",
|
||||
"next_check_error": "Następne sprawdzenie: Błąd obliczania",
|
||||
"checking": "🔄 Sprawdzanie...",
|
||||
"check_now": "🔍 Sprawdź aktualizacje teraz"
|
||||
}
|
||||
}
|
||||
+16
-2
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "Irá mesclar áudio",
|
||||
"has_audio": "✓ Tem Áudio",
|
||||
"audio_only": "Apenas Áudio",
|
||||
|
||||
"best_4k": "Melhor (4K)",
|
||||
"best_2k": "Melhor (2K)",
|
||||
"high_1080p": "Alta (1080p)",
|
||||
@@ -151,7 +150,6 @@
|
||||
"main_configured": "Proxy principal configurado",
|
||||
"geo_configured": "Proxy geográfico configurado"
|
||||
},
|
||||
|
||||
"download": {
|
||||
"preparing": "Preparando download...",
|
||||
"starting": "🚀 Iniciando download...",
|
||||
@@ -377,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} selecionadas"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "Arquivo já existe",
|
||||
"message": "O arquivo já existe:\n{filename}",
|
||||
"info": "Este vídeo já foi baixado."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Última verificação: Nunca",
|
||||
"last_check": "Última verificação: {time}",
|
||||
"next_check_disabled": "Próxima verificação: Desativada",
|
||||
"next_check_startup": "Próxima verificação: Na inicialização",
|
||||
"next_check_overdue": "Próxima verificação: Agora (atrasada)",
|
||||
"next_check": "Próxima verificação: {time}",
|
||||
"next_check_error": "Próxima verificação: Erro ao calcular",
|
||||
"checking": "🔄 Verificando...",
|
||||
"check_now": "🔍 Verificar atualizações agora"
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "Объединит аудио",
|
||||
"has_audio": "✓ Есть аудио",
|
||||
"audio_only": "Только аудио",
|
||||
|
||||
"best_4k": "Лучшее (4K)",
|
||||
"best_2k": "Лучшее (2K)",
|
||||
"high_1080p": "Высокое (1080p)",
|
||||
@@ -376,5 +375,21 @@
|
||||
},
|
||||
"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": "🔍 Проверить обновления сейчас"
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "Ses birleştirilecek",
|
||||
"has_audio": "✓ Ses var",
|
||||
"audio_only": "Sadece ses",
|
||||
|
||||
"best_4k": "En iyi (4K)",
|
||||
"best_2k": "En iyi (2K)",
|
||||
"high_1080p": "Yüksek (1080p)",
|
||||
@@ -376,5 +375,21 @@
|
||||
},
|
||||
"subtitle_selection": {
|
||||
"count_selected": "{count} seçildi"
|
||||
},
|
||||
"file_exists_dialog": {
|
||||
"title": "Dosya zaten mevcut",
|
||||
"message": "Dosya zaten mevcut:\n{filename}",
|
||||
"info": "Bu video zaten indirilmiş."
|
||||
},
|
||||
"auto_update": {
|
||||
"last_check_never": "Son güncelleme kontrolü: Hiç",
|
||||
"last_check": "Son güncelleme kontrolü: {time}",
|
||||
"next_check_disabled": "Sonraki kontrol: Devre dışı",
|
||||
"next_check_startup": "Sonraki kontrol: Başlangıçta",
|
||||
"next_check_overdue": "Sonraki kontrol: Şimdi (gecikmiş)",
|
||||
"next_check": "Sonraki kontrol: {time}",
|
||||
"next_check_error": "Sonraki kontrol: Hesaplama hatası",
|
||||
"checking": "🔄 Kontrol ediliyor...",
|
||||
"check_now": "🔍 Şimdi güncellemeleri kontrol et"
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -43,7 +43,6 @@
|
||||
"will_merge_audio": "将合并音频",
|
||||
"has_audio": "✓ 有音频",
|
||||
"audio_only": "仅音频",
|
||||
|
||||
"best_4k": "最佳 (4K)",
|
||||
"best_2k": "最佳 (2K)",
|
||||
"high_1080p": "高清 (1080p)",
|
||||
@@ -376,5 +375,21 @@
|
||||
},
|
||||
"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": "🔍 立即检查更新"
|
||||
}
|
||||
}
|
||||
@@ -575,9 +575,9 @@ class AutoUpdateSettingsDialog(QDialog):
|
||||
last_check = settings["last_check"]
|
||||
if last_check > 0:
|
||||
last_check_time = datetime.fromtimestamp(last_check).strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.last_check_label.setText(f"Last update check: {last_check_time}")
|
||||
self.last_check_label.setText(_("auto_update.last_check", time=last_check_time))
|
||||
else:
|
||||
self.last_check_label.setText("Last update check: Never")
|
||||
self.last_check_label.setText(_("auto_update.last_check_never"))
|
||||
|
||||
# Calculate next check time
|
||||
self.update_next_check_label()
|
||||
@@ -592,7 +592,7 @@ class AutoUpdateSettingsDialog(QDialog):
|
||||
"""Update the next check label based on current settings."""
|
||||
try:
|
||||
if not self.enable_checkbox.isChecked():
|
||||
self.next_check_label.setText("Next check: Disabled")
|
||||
self.next_check_label.setText(_("auto_update.next_check_disabled"))
|
||||
return
|
||||
|
||||
settings = get_auto_update_settings()
|
||||
@@ -600,7 +600,7 @@ class AutoUpdateSettingsDialog(QDialog):
|
||||
frequency = self.get_selected_frequency()
|
||||
|
||||
if last_check == 0:
|
||||
self.next_check_label.setText("Next check: On next startup")
|
||||
self.next_check_label.setText(_("auto_update.next_check_startup"))
|
||||
return
|
||||
|
||||
next_check_time = last_check
|
||||
@@ -613,13 +613,13 @@ class AutoUpdateSettingsDialog(QDialog):
|
||||
|
||||
current_time = time.time()
|
||||
if next_check_time <= current_time:
|
||||
self.next_check_label.setText("Next check: Now (overdue)")
|
||||
self.next_check_label.setText(_("auto_update.next_check_overdue"))
|
||||
else:
|
||||
next_check_datetime = datetime.fromtimestamp(next_check_time)
|
||||
self.next_check_label.setText(f"Next check: {next_check_datetime.strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
self.next_check_label.setText(_("auto_update.next_check", time=next_check_datetime.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
|
||||
except Exception as e:
|
||||
self.next_check_label.setText("Next check: Error calculating")
|
||||
self.next_check_label.setText(_("auto_update.next_check_error"))
|
||||
logger.exception(f"Error calculating next check time: {e}")
|
||||
|
||||
def on_enable_toggled(self, enabled) -> None:
|
||||
@@ -642,7 +642,7 @@ class AutoUpdateSettingsDialog(QDialog):
|
||||
def manual_check(self) -> None:
|
||||
"""Perform a manual update check."""
|
||||
self.manual_check_btn.setEnabled(False)
|
||||
self.manual_check_btn.setText("🔄 Checking...")
|
||||
self.manual_check_btn.setText(_("auto_update.checking"))
|
||||
|
||||
# Force an immediate update check
|
||||
def check_in_thread() -> None:
|
||||
@@ -696,7 +696,7 @@ class AutoUpdateSettingsDialog(QDialog):
|
||||
def manual_check_finished(self, success) -> None:
|
||||
"""Handle completion of manual update check."""
|
||||
self.manual_check_btn.setEnabled(True)
|
||||
self.manual_check_btn.setText("🔍 Check for Updates Now")
|
||||
self.manual_check_btn.setText(_("auto_update.check_now"))
|
||||
|
||||
if success:
|
||||
msg_box = self._create_styled_message_box(
|
||||
|
||||
@@ -1480,9 +1480,9 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin): # Inherit from
|
||||
# Show a simple message dialog
|
||||
msg_box = QMessageBox()
|
||||
msg_box.setIcon(QMessageBox.Icon.Information)
|
||||
msg_box.setWindowTitle("File Already Exists")
|
||||
msg_box.setText(f"The file already exists:\n{filename}")
|
||||
msg_box.setInformativeText("This video has already been downloaded.")
|
||||
msg_box.setWindowTitle(_("file_exists_dialog.title"))
|
||||
msg_box.setText(_("file_exists_dialog.message", filename=filename))
|
||||
msg_box.setInformativeText(_("file_exists_dialog.info"))
|
||||
msg_box.setStandardButtons(QMessageBox.StandardButton.Ok)
|
||||
|
||||
# Set the window icon to match the main application
|
||||
|
||||
Reference in New Issue
Block a user