diff --git a/AGENTS.md b/AGENTS.md index 5c4d834..8571c1d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,7 @@ 1. use pnpm instead of npm 2. use pnpm run check after tasks to check code -3. Support i18n, only translate the English version of en.json +3. Support i18n. When writing business logic, initially only translate the English version of en.json 4. use English for comments&console 5. Follow the ✅ KISS (Keep It Simple, Stupid) & ✅ YAGNI (You Aren't Gonna Need It) principles 6. Use Conventional Commits format for commit messages: `type(scope): subject`. Common types: feat, fix, docs, style, refactor, test, chore, perf, ci, build, revert. PR titles should also follow this format. +7. If there is an error when running `pnpm run check:i18n`, please complete the missing corresponding translation files and fields. Ensure the translation is done into the corresponding language, rather than directly copying the English version. diff --git a/package.json b/package.json index 22a0446..5f20f5b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "author": "VidBee", "homepage": "https://github.com/nexmoe/vidbee", "scripts": { - "check": "biome check --write . && pnpm run typecheck", + "check": "pnpm run check:i18n && biome check --write . && pnpm run typecheck", + "check:i18n": "node scripts/check-locales.js", "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", "typecheck": "pnpm run typecheck:node && pnpm run typecheck:web", diff --git a/scripts/check-locales.js b/scripts/check-locales.js new file mode 100644 index 0000000..9459e3d --- /dev/null +++ b/scripts/check-locales.js @@ -0,0 +1,100 @@ +#!/usr/bin/env node + +const fs = require('node:fs') +const path = require('node:path') + +const localesDir = path.join(__dirname, '..', 'src', 'renderer', 'src', 'locales') +const baseLocaleFile = 'en.json' + +const readJson = (filePath) => { + try { + const raw = fs.readFileSync(filePath, 'utf8') + return JSON.parse(raw) + } catch (error) { + console.error(`ERROR: Failed to read ${filePath}`) + console.error(String(error)) + process.exit(1) + } +} + +const collectLeafKeys = (value, prefix = '', keys = new Set()) => { + if (value && typeof value === 'object' && !Array.isArray(value)) { + for (const [key, child] of Object.entries(value)) { + const next = prefix ? `${prefix}.${key}` : key + if (child && typeof child === 'object' && !Array.isArray(child)) { + collectLeafKeys(child, next, keys) + } else { + keys.add(next) + } + } + return keys + } + + if (prefix) { + keys.add(prefix) + } + + return keys +} + +if (!fs.existsSync(localesDir)) { + console.error(`ERROR: Locales directory not found: ${localesDir}`) + process.exit(1) +} + +const localeFiles = fs + .readdirSync(localesDir) + .filter((file) => file.endsWith('.json')) + .sort() + +if (!localeFiles.includes(baseLocaleFile)) { + console.error(`ERROR: Base locale file not found: ${baseLocaleFile}`) + process.exit(1) +} + +const baseLocalePath = path.join(localesDir, baseLocaleFile) +const baseLocaleData = readJson(baseLocalePath) +const baseKeys = collectLeafKeys(baseLocaleData) + +let hasMissing = false +let hasExtra = false + +for (const file of localeFiles) { + if (file === baseLocaleFile) { + continue + } + + const localePath = path.join(localesDir, file) + const localeData = readJson(localePath) + const localeKeys = collectLeafKeys(localeData) + + const missing = [...baseKeys].filter((key) => !localeKeys.has(key)) + const extra = [...localeKeys].filter((key) => !baseKeys.has(key)) + + if (missing.length > 0) { + hasMissing = true + console.error(`ERROR: Missing keys in ${file}`) + for (const key of missing) { + console.error(` - ${key}`) + } + } + + if (extra.length > 0) { + hasExtra = true + console.warn(`WARN: Extra keys in ${file}`) + for (const key of extra) { + console.warn(` - ${key}`) + } + } +} + +if (hasMissing) { + process.exit(1) +} + +if (hasExtra) { + console.log('INFO: No missing keys, but extra keys were found.') + process.exit(0) +} + +console.log('OK: All locale files include every key from en.json.') diff --git a/src/renderer/src/locales/ar.json b/src/renderer/src/locales/ar.json index e33b1e8..779a8ad 100644 --- a/src/renderer/src/locales/ar.json +++ b/src/renderer/src/locales/ar.json @@ -51,6 +51,12 @@ "documentationDescription": "أدلة، أسئلة شائعة، وسير عمل شائعة.", "feedback": "ملاحظات ومشاكل", "feedbackDescription": "شارك الأفكار أو أبلغ عن المشاكل على GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "الإبلاغ عن الأخطاء أو طلب الميزات على GitHub.", + "xFeedback": "تويتر", + "xFeedbackDescription": "شارك الملاحظات أو الاقتراحات على X بذكر @nexmoex.", + "discord": "Discord", + "discordDescription": "انضم إلى مجتمع Discord للنقاش والدعم.", "license": "الترخيص", "licenseDescription": "راجع شروط ترخيص المصدر المفتوح.", "website": "الموقع الرسمي", @@ -83,6 +89,7 @@ "currentLocation": "موقع التحميل الحالي - ", "downloadLocation": "موقع التحميل", "downloadSubs": "تحميل الترجمات إن كانت متاحة", + "downloadSubsHint": "احفظ الترجمات كملفات منفصلة عند توفرها", "end": "النهاية", "endHint": "إذا تُرك فارغاً، سيتم التحميل حتى النهاية", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "تحميل الفيديوهات والصوتيات من مئات المواقع", "title": "VidBee" }, - "audioExtract": { - "bad": "سيء", - "best": "أفضل", - "extract": "استخراج", - "good": "جيد", - "normal": "عادي", - "selectFormat": "اختر التنسيق", - "selectQuality": "اختر الجودة", - "title": "استخراج الصوت", - "worst": "أسوأ" - }, "download": { "active": "نشط", "all": "الكل", @@ -123,6 +119,10 @@ "downloadBtn": "تحميل", "downloadPending": "قيد الانتظار", "downloadQueue": "قائمة انتظار التحميل", + "customDownloadFolder": "مجلد تنزيل مخصص", + "autoFolderPlaceholder": "مجلد تلقائي (استنادًا إلى البيانات الوصفية)", + "autoFolderHint": "يتم إنشاء المجلدات التلقائية من البيانات الوصفية.", + "useAutoFolder": "استخدام المجلد التلقائي", "downloadVideo": "تحميل الفيديو", "downloading": "جاري التحميل...", "enterUrl": "أدخل رابط الفيديو", @@ -149,15 +149,17 @@ "paste": "لصق", "pastePlaylistUrl": "انقر للصق رابط قائمة التشغيل من الحافظة [Ctrl + V]", "pasteUrl": "انقر للصق رابط أو معرف الفيديو [Ctrl + V]", + "pasteUrlButton": "لصق الرابط", "preparing": "جاري التحضير...", "processing": "جاري المعالجة", "progress": "التقدم", "showDetails": "إظهار التفاصيل", "hideDetails": "إخفاء التفاصيل", "selectAudioFormat": "اختر تنسيق الصوت", + "selectDownloadType": "اختر نوع التنزيل", "selectFormat": "اختر التنسيق", - "selectVideoFormat": "اختر تنسيق الفيديو", "startDownload": "بدء التحميل", + "selectVideoFormat": "اختر تنسيق الفيديو", "singleVideo": "فيديو واحد", "speed": "السرعة", "title": "العنوان", @@ -195,6 +197,25 @@ "subscription": "الاشتراك" } }, + "error": { + "title": "حدث خطأ ما", + "description": "حدث خطأ غير متوقع. يرجى إعادة تحميل التطبيق أو الإبلاغ عن هذه المشكلة إذا استمرت.", + "message": "رسالة الخطأ", + "unknownError": "حدث خطأ غير معروف", + "goHome": "العودة إلى الصفحة الرئيسية", + "reload": "إعادة تحميل التطبيق", + "copyReport": "نسخ تقرير الخطأ", + "copied": "تم النسخ!", + "copySuccess": "تم نسخ تقرير الخطأ إلى الحافظة", + "copyFailed": "فشل نسخ تقرير الخطأ", + "showDetails": "إظهار التفاصيل", + "hideDetails": "إخفاء التفاصيل", + "stackTrace": "تتبع المكدس", + "componentStack": "مكدس المكوّن", + "noStackTrace": "لا يوجد تتبع مكدس متاح", + "fullReport": "تقرير الخطأ الكامل", + "helpText": "إذا استمر هذا الخطأ، يرجى نسخ تقرير الخطأ أعلاه ومشاركته مع فريق الدعم. يمكنك العثور على معلومات الاتصال في صفحة \"حول\"." + }, "errors": { "clickToCopy": "انقر لنسخ التفاصيل", "clipboardEmpty": "الحافظة فارغة", @@ -203,6 +224,7 @@ "emptyUrl": "يرجى إدخال رابط", "errorDetails": "تفاصيل الخطأ", "fetchInfoFailed": "فشل في جلب معلومات الفيديو", + "invalidUrl": "محتوى الحافظة ليس رابطًا صالحًا", "networkError": "حدث خطأ ما. تحقق من شبكتك واستخدم رابطاً صحيحاً", "pasteFromClipboard": "فشل في اللصق من الحافظة" }, @@ -210,10 +232,23 @@ "clearCancelled": "مسح الملغاة", "clearCompleted": "مسح المكتملة", "clearErrors": "مسح الأخطاء", + "clearAll": "مسح كل السجل", + "clearAllAction": "مسح السجل", + "clearSelection": "مسح التحديد", + "confirmClearAllTitle": "مسح كل السجل؟", + "confirmClearAllDescription": "إزالة {{count}} عنصرًا من السجل. تبقى الملفات على القرص.", + "confirmDeleteSelectedTitle": "إزالة العناصر المحددة؟", + "confirmDeleteSelectedDescription": "إزالة {{count}} عنصرًا من السجل. تبقى الملفات على القرص.", + "alsoDeleteFiles": "احذف الملفات أيضًا", + "confirmDeletePlaylistTitle": "إزالة سجل قائمة التشغيل؟", + "confirmDeletePlaylistDescription": "إزالة {{count}} عنصرًا من {{title}} وحذف ملفاتها.", "copyToClipboard": "نسخ إلى الحافظة", "copyUrl": "نسخ الرابط", "date": "التاريخ", + "deletePlaylist": "إزالة قائمة التشغيل", + "deleteSelected": "إزالة المحدد", "description": "عرض وإدارة سجل التحميل الخاص بك", + "doneSelecting": "تم", "duration": "المدة", "fileSize": "حجم الملف", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "فتح موقع الملف", "openFolder": "فتح المجلد", "openInBrowser": "انقر لفتح في المتصفح", + "removeAction": "إزالة", "removeItem": "إزالة العنصر", + "select": "تحديد", + "selectAll": "تحديد الكل", + "selectVisible": "تحديد المرئي", + "selectItem": "تحديد العنصر", + "selectedCount": "تم تحديد {{count}}", + "selectionSummary": "تم تحديد {{selected}} من {{total}} المرئية", "stats": { "cancelled": "ملغي", "completed": "مكتمل", @@ -258,9 +300,15 @@ "downloadCompleted": "اكتمل التحميل", "downloadFailed": "فشل التحميل", "downloadStarted": "بدأ التحميل", + "historyCleared": "تم مسح السجل", + "historyClearFailed": "فشل مسح السجل", "itemRemoved": "تم إزالة العنصر", + "itemsRemoved": "تمت إزالة {{count}} عنصرًا", + "itemsRemoveFailed": "فشل إزالة العناصر المحددة", "openFileFailed": "فشل في فتح الملف", "openFolderFailed": "فشل في فتح المجلد", + "playlistHistoryRemoved": "تمت إزالة قائمة التشغيل وحذف الملفات", + "playlistHistoryRemoveFailed": "فشل إزالة سجل قائمة التشغيل", "removeFailed": "فشل في إزالة العنصر", "settingsSaved": "تم حفظ الإعدادات", "urlCopied": "تم نسخ الرابط إلى الحافظة", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "قائمة التشغيل", "clearPreview": "مسح المعاينة", + "collapsedProgress": "جارٍ تنزيل قائمة التشغيل: {{completed}} / {{total}} مكتملة", "comingSoon": "ميزة تحميل قائمة التشغيل قريباً!", "completed": "تم تحميل قائمة التشغيل", "description": "تحميل جميع الفيديوهات من قائمة تشغيل أو قناة YouTube", @@ -284,7 +333,9 @@ "folderFormat": "تنسيق اسم المجلد لقوائم التشغيل", "foundVideos": "تم العثور على {{count}} فيديو في قائمة التشغيل", "groupActive": "{{count}} نشط", + "groupCollapse": "طي", "groupErrors": "{{count}} فشل", + "groupExpand": "توسيع", "groupSummary": "{{completed}} / {{total}} مكتمل", "linkLabel": "رابط قائمة التشغيل", "noEntries": "لم يتم العثور على فيديوهات في قائمة التشغيل هذه", @@ -299,7 +350,11 @@ "range": "النطاق (اختياري)", "resetToDefault": "إعادة تعيين إلى الافتراضي", "selectedRange": "النطاق: {{start}}-{{end}}", + "selectedVideos": "تم تحديد {{count}}", + "downloadCurrentRange": "تنزيل المحدد", "showingCount": "عرض {{count}} فيديو", + "selectEntry": "تحديد الإدخال {{index}}", + "noEntriesSelected": "لا توجد إدخالات محددة", "startIndex": "البداية (1)", "title": "تحميل قائمة التشغيل", "totalVideos": "إجمالي الفيديوهات: {{count}}", @@ -312,6 +367,14 @@ "audio": "تفضيلات الصوت", "browserForCookies": "اختر المتصفح لاستخدام ملفات تعريف الارتباط منه", "browserForCookiesDescription": "المتصفح لاستخراج ملفات تعريف الارتباط منه للمصادقة", + "browserForCookiesProfile": "اسم الملف الشخصي أو المسار", + "browserForCookiesProfileDescription": "مسار الملف الشخصي للمتصفح المحدد أعلاه. يُملأ تلقائيًا عند الإمكان.", + "browserForCookiesProfilePlaceholder": "اسم الملف الشخصي أو المسار الكامل (اختياري)", + "browserForCookiesProfileInvalid": "مسار الملف الشخصي غير صالح. اختر مجلد الملف الشخصي للمتصفح المحدد.", + "browserForCookiesProfileInvalidPath": "هذا المجلد غير موجود. اختر مجلد ملف شخصي موجود.", + "browserForCookiesProfileInvalidProfile": "لم يتم العثور على اسم الملف الشخصي في موقع المتصفح الافتراضي.", + "browserForCookiesProfileInvalidUnsupported": "لا يوجد موقع ملف شخصي افتراضي معروف لهذا المتصفح على هذه المنصة.", + "browserForCookiesProfileInvalidEmpty": "أدخل مسار ملف شخصي للمتصفح المحدد.", "cookiesFile": "ملف ملفات تعريف الارتباط", "cookiesFileDescription": "ملف ملفات تعريف الارتباط بتنسيق Netscape للتحميل للمصادقة", "clearCookiesFile": "مسح", @@ -323,9 +386,13 @@ "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, "configFile": "استخدام ملف التكوين", "configFileDescription": "ملف تكوين مخصص لـ yt-dlp", @@ -338,6 +405,7 @@ "fileSelectError": "فشل في اختيار الملف", "general": "عام", "language": "اللغة", + "languageDescription": "اختر لغتك المفضلة لواجهة التطبيق", "light": "فاتح", "hideDockIcon": "إخفاء أيقونة Dock", "hideDockIconDescription": "إزالة VidBee من Dock في macOS. استخدم شريط القائمة أو أيقونة الدرج لإعادة فتح التطبيق.", @@ -346,6 +414,14 @@ "launchAtLoginUnsupported": "البدء التلقائي متاح فقط على macOS و Windows.", "enableAnalytics": "مساعدة في تحسين VidBee", "enableAnalyticsDescription": "مشاركة بيانات الاستخدام المجهولة لمساعدتنا في فهم كيفية استخدام التطبيق وأولويات التحسينات.", + "embedChapters": "تضمين الفصول", + "embedChaptersDescription": "إضافة علامات الفصول إلى الملف عند توفرها", + "embedMetadata": "تضمين البيانات الوصفية", + "embedMetadataDescription": "كتابة العنوان والفنان وبيانات وصفية أخرى عند توفرها", + "embedSubs": "تضمين الترجمات", + "embedSubsDescription": "تضمين الترجمات داخل ملف الفيديو (mp4، webm، mkv)", + "embedThumbnail": "تضمين الصورة المصغرة", + "embedThumbnailDescription": "إضافة الصورة المصغرة كغلاف", "maxConcurrentDownloads": "العدد الأقصى للتحميلات النشطة", "maxConcurrentDownloadsDescription": "العدد الأقصى للتحميلات المتزامنة", "none": "لا شيء", diff --git a/src/renderer/src/locales/de.json b/src/renderer/src/locales/de.json index 1a4172f..32c238a 100644 --- a/src/renderer/src/locales/de.json +++ b/src/renderer/src/locales/de.json @@ -51,6 +51,12 @@ "documentationDescription": "Anleitungen, FAQs und gängige Arbeitsabläufe.", "feedback": "Feedback & Probleme", "feedbackDescription": "Teilen Sie Ideen oder melden Sie Probleme auf GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "Fehler melden oder Funktionen auf GitHub anfordern.", + "xFeedback": "Twitter", + "xFeedbackDescription": "Feedback oder Vorschläge auf X teilen, indem @nexmoex erwähnt wird.", + "discord": "Discord", + "discordDescription": "Tritt unserer Discord-Community für Diskussionen und Support bei.", "license": "Lizenz", "licenseDescription": "Überprüfen Sie die Bedingungen der Open-Source-Lizenz.", "website": "Offizielle Website", @@ -83,6 +89,7 @@ "currentLocation": "Aktueller Download-Speicherort - ", "downloadLocation": "Download-Speicherort", "downloadSubs": "Untertitel herunterladen, falls verfügbar", + "downloadSubsHint": "Untertitel als separate Dateien speichern, wenn verfügbar", "end": "Ende", "endHint": "Wenn leer gelassen, wird bis zum Ende heruntergeladen", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "Videos und Audios von Hunderten von Websites herunterladen", "title": "VidBee" }, - "audioExtract": { - "bad": "Schlecht", - "best": "Am besten", - "extract": "Extrahieren", - "good": "Gut", - "normal": "Normal", - "selectFormat": "Format auswählen", - "selectQuality": "Qualität auswählen", - "title": "Audio extrahieren", - "worst": "Am schlechtesten" - }, "download": { "active": "Aktiv", "all": "Alle", @@ -123,6 +119,10 @@ "downloadBtn": "Herunterladen", "downloadPending": "Ausstehend", "downloadQueue": "Download-Warteschlange", + "customDownloadFolder": "Benutzerdefinierter Download-Ordner", + "autoFolderPlaceholder": "Automatischer Ordner (basierend auf Metadaten)", + "autoFolderHint": "Automatische Ordner werden aus Metadaten erstellt.", + "useAutoFolder": "Automatischen Ordner verwenden", "downloadVideo": "Video herunterladen", "downloading": "Wird heruntergeladen...", "enterUrl": "Video-URL eingeben", @@ -149,15 +149,17 @@ "paste": "Einfügen", "pastePlaylistUrl": "Klicken, um Playlist-Link aus Zwischenablage einzufügen [Strg + V]", "pasteUrl": "Klicken, um Video-URL oder ID einzufügen [Strg + V]", + "pasteUrlButton": "URL einfügen", "preparing": "Wird vorbereitet...", "processing": "Wird verarbeitet", "progress": "Fortschritt", "showDetails": "Details anzeigen", "hideDetails": "Details ausblenden", "selectAudioFormat": "Audio-Format auswählen", + "selectDownloadType": "Download-Typ auswählen", "selectFormat": "Format auswählen", - "selectVideoFormat": "Video-Format auswählen", "startDownload": "Download starten", + "selectVideoFormat": "Video-Format auswählen", "singleVideo": "Einzelnes Video", "speed": "Geschwindigkeit", "title": "Titel", @@ -195,6 +197,25 @@ "subscription": "Abonnement" } }, + "error": { + "title": "Etwas ist schiefgelaufen", + "description": "Ein unerwarteter Fehler ist aufgetreten. Bitte lade die App neu oder melde das Problem, wenn es weiterhin besteht.", + "message": "Fehlermeldung", + "unknownError": "Unbekannter Fehler ist aufgetreten", + "goHome": "Zur Startseite", + "reload": "App neu laden", + "copyReport": "Fehlerbericht kopieren", + "copied": "Kopiert!", + "copySuccess": "Fehlerbericht in die Zwischenablage kopiert", + "copyFailed": "Fehlerbericht konnte nicht kopiert werden", + "showDetails": "Details anzeigen", + "hideDetails": "Details ausblenden", + "stackTrace": "Stacktrace", + "componentStack": "Komponenten-Stack", + "noStackTrace": "Kein Stacktrace verfügbar", + "fullReport": "Vollständiger Fehlerbericht", + "helpText": "Wenn dieser Fehler weiterhin auftritt, kopiere bitte den obigen Fehlerbericht und teile ihn mit dem Support-Team. Kontaktinformationen findest du auf der Seite \"Über\"." + }, "errors": { "clickToCopy": "Klicken, um Details zu kopieren", "clipboardEmpty": "Zwischenablage ist leer", @@ -203,6 +224,7 @@ "emptyUrl": "Bitte geben Sie eine URL ein", "errorDetails": "Fehlerdetails", "fetchInfoFailed": "Video-Informationen konnten nicht abgerufen werden", + "invalidUrl": "Der Inhalt der Zwischenablage ist keine gültige URL", "networkError": "Ein Fehler ist aufgetreten. Überprüfen Sie Ihr Netzwerk und verwenden Sie die richtige URL", "pasteFromClipboard": "Einfügen aus Zwischenablage fehlgeschlagen" }, @@ -210,10 +232,23 @@ "clearCancelled": "Abgebrochene löschen", "clearCompleted": "Abgeschlossene löschen", "clearErrors": "Fehler löschen", + "clearAll": "Gesamten Verlauf löschen", + "clearAllAction": "Verlauf löschen", + "clearSelection": "Auswahl löschen", + "confirmClearAllTitle": "Gesamten Verlauf löschen?", + "confirmClearAllDescription": "{{count}} Elemente aus deinem Verlauf entfernen. Dateien bleiben auf der Festplatte.", + "confirmDeleteSelectedTitle": "Ausgewählte Elemente entfernen?", + "confirmDeleteSelectedDescription": "{{count}} Elemente aus deinem Verlauf entfernen. Dateien bleiben auf der Festplatte.", + "alsoDeleteFiles": "Dateien ebenfalls löschen", + "confirmDeletePlaylistTitle": "Playlist-Verlauf entfernen?", + "confirmDeletePlaylistDescription": "{{count}} Elemente aus {{title}} entfernen und ihre Dateien löschen.", "copyToClipboard": "In Zwischenablage kopieren", "copyUrl": "URL kopieren", "date": "Datum", + "deletePlaylist": "Playlist entfernen", + "deleteSelected": "Auswahl entfernen", "description": "Ihren Download-Verlauf anzeigen und verwalten", + "doneSelecting": "Fertig", "duration": "Dauer", "fileSize": "Dateigröße", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "Dateispeicherort öffnen", "openFolder": "Ordner öffnen", "openInBrowser": "Klicken, um im Browser zu öffnen", + "removeAction": "Entfernen", "removeItem": "Element entfernen", + "select": "Auswählen", + "selectAll": "Alle auswählen", + "selectVisible": "Sichtbare auswählen", + "selectItem": "Element auswählen", + "selectedCount": "{{count}} ausgewählt", + "selectionSummary": "{{selected}} von {{total}} sichtbaren ausgewählt", "stats": { "cancelled": "Abgebrochen", "completed": "Abgeschlossen", @@ -258,9 +300,15 @@ "downloadCompleted": "Download abgeschlossen", "downloadFailed": "Download fehlgeschlagen", "downloadStarted": "Download gestartet", + "historyCleared": "Verlauf gelöscht", + "historyClearFailed": "Verlauf konnte nicht gelöscht werden", "itemRemoved": "Element entfernt", + "itemsRemoved": "{{count}} Elemente entfernt", + "itemsRemoveFailed": "Ausgewählte Elemente konnten nicht entfernt werden", "openFileFailed": "Datei konnte nicht geöffnet werden", "openFolderFailed": "Ordner konnte nicht geöffnet werden", + "playlistHistoryRemoved": "Playlist entfernt und Dateien gelöscht", + "playlistHistoryRemoveFailed": "Playlist-Verlauf konnte nicht entfernt werden", "removeFailed": "Element konnte nicht entfernt werden", "settingsSaved": "Einstellungen gespeichert", "urlCopied": "URL in Zwischenablage kopiert", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "Playlist", "clearPreview": "Vorschau löschen", + "collapsedProgress": "Playlist wird heruntergeladen: {{completed}} / {{total}} abgeschlossen", "comingSoon": "Playlist-Download-Funktion kommt bald!", "completed": "Playlist heruntergeladen", "description": "Alle Videos aus einer YouTube-Playlist oder einem Kanal herunterladen", @@ -284,7 +333,9 @@ "folderFormat": "Ordnernamenformat für Playlists", "foundVideos": "{{count}} Videos in Playlist gefunden", "groupActive": "{{count}} aktiv", + "groupCollapse": "Einklappen", "groupErrors": "{{count}} fehlgeschlagen", + "groupExpand": "Ausklappen", "groupSummary": "{{completed}} / {{total}} abgeschlossen", "linkLabel": "Playlist-URL", "noEntries": "In dieser Playlist wurden keine Videos gefunden", @@ -299,7 +350,11 @@ "range": "Bereich (Optional)", "resetToDefault": "Auf Standard zurücksetzen", "selectedRange": "Bereich: {{start}}-{{end}}", + "selectedVideos": "{{count}} ausgewählt", + "downloadCurrentRange": "Auswahl herunterladen", "showingCount": "{{count}} Videos werden angezeigt", + "selectEntry": "Eintrag {{index}} auswählen", + "noEntriesSelected": "Keine Einträge ausgewählt", "startIndex": "Start (1)", "title": "Playlist herunterladen", "totalVideos": "Gesamt Videos: {{count}}", @@ -312,6 +367,14 @@ "audio": "Audio-Einstellungen", "browserForCookies": "Browser für Cookies auswählen", "browserForCookiesDescription": "Browser zum Extrahieren von Cookies für die Authentifizierung", + "browserForCookiesProfile": "Profilname oder Pfad", + "browserForCookiesProfileDescription": "Profilpfad für den oben ausgewählten Browser. Wird wenn möglich automatisch ausgefüllt.", + "browserForCookiesProfilePlaceholder": "Profilname oder vollständiger Pfad (optional)", + "browserForCookiesProfileInvalid": "Profilpfad ist ungültig. Wähle den Profilordner für den ausgewählten Browser.", + "browserForCookiesProfileInvalidPath": "Dieser Ordner existiert nicht. Wähle einen vorhandenen Profilordner.", + "browserForCookiesProfileInvalidProfile": "Profilname am Standard-Browserort nicht gefunden.", + "browserForCookiesProfileInvalidUnsupported": "Für diesen Browser ist auf dieser Plattform kein Standard-Profilort bekannt.", + "browserForCookiesProfileInvalidEmpty": "Gib einen Profilpfad für den ausgewählten Browser ein.", "cookiesFile": "Cookie-Datei", "cookiesFileDescription": "Netscape-formatierte Cookie-Datei zum Laden für die Authentifizierung", "clearCookiesFile": "Löschen", @@ -323,9 +386,13 @@ "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, "configFile": "Konfigurationsdatei verwenden", "configFileDescription": "Benutzerdefinierte Konfigurationsdatei für yt-dlp", @@ -338,6 +405,7 @@ "fileSelectError": "Datei konnte nicht ausgewählt werden", "general": "Allgemein", "language": "Sprache", + "languageDescription": "Wähle deine bevorzugte Sprache für die App-Oberfläche", "light": "Hell", "hideDockIcon": "Dock-Symbol ausblenden", "hideDockIconDescription": "VidBee aus dem macOS Dock entfernen. Verwenden Sie die Menüleiste oder das Tray-Symbol, um die App erneut zu öffnen.", @@ -346,6 +414,14 @@ "launchAtLoginUnsupported": "Autostart ist nur unter macOS und Windows verfügbar.", "enableAnalytics": "Helfen Sie, VidBee zu verbessern", "enableAnalyticsDescription": "Teilen Sie anonyme Nutzungsdaten, damit wir verstehen können, wie die App verwendet wird, und Verbesserungen priorisieren können.", + "embedChapters": "Kapitel einbetten", + "embedChaptersDescription": "Kapitelmarken zur Datei hinzufügen, wenn verfügbar", + "embedMetadata": "Metadaten einbetten", + "embedMetadataDescription": "Titel, Künstler und andere Metadaten schreiben, wenn verfügbar", + "embedSubs": "Untertitel einbetten", + "embedSubsDescription": "Untertitel in die Videodatei einbetten (mp4, webm, mkv)", + "embedThumbnail": "Vorschaubild einbetten", + "embedThumbnailDescription": "Vorschaubild als Covergrafik hinzufügen", "maxConcurrentDownloads": "Maximale Anzahl aktiver Downloads", "maxConcurrentDownloadsDescription": "Maximale Anzahl gleichzeitiger Downloads", "none": "Keine", diff --git a/src/renderer/src/locales/es.json b/src/renderer/src/locales/es.json index 0c002df..c9abf0e 100644 --- a/src/renderer/src/locales/es.json +++ b/src/renderer/src/locales/es.json @@ -51,6 +51,12 @@ "documentationDescription": "Guías, preguntas frecuentes y flujos de trabajo comunes.", "feedback": "Comentarios e incidencias", "feedbackDescription": "Comparte ideas o reporta problemas en GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "Reportar errores o solicitar funciones en GitHub.", + "xFeedback": "Twitter", + "xFeedbackDescription": "Comparte comentarios o sugerencias en X mencionando a @nexmoex.", + "discord": "Discord", + "discordDescription": "Únete a nuestra comunidad de Discord para debates y soporte.", "license": "Licencia", "licenseDescription": "Revisa los términos de la licencia de código abierto.", "website": "Sitio web oficial", @@ -83,6 +89,7 @@ "currentLocation": "Ubicación de descarga actual - ", "downloadLocation": "Ubicación de descarga", "downloadSubs": "Descargar subtítulos si están disponibles", + "downloadSubsHint": "Guardar subtítulos como archivos separados cuando estén disponibles", "end": "Fin", "endHint": "Si se deja vacío, se descargará hasta el final", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "Descarga videos y audios de cientos de sitios", "title": "VidBee" }, - "audioExtract": { - "bad": "Malo", - "best": "Mejor", - "extract": "Extraer", - "good": "Bueno", - "normal": "Normal", - "selectFormat": "Seleccionar Formato", - "selectQuality": "Seleccionar Calidad", - "title": "Extraer Audio", - "worst": "Peor" - }, "download": { "active": "Activo", "all": "Todo", @@ -123,6 +119,10 @@ "downloadBtn": "Descargar", "downloadPending": "Pendiente", "downloadQueue": "Cola de Descarga", + "customDownloadFolder": "Carpeta de descarga personalizada", + "autoFolderPlaceholder": "Carpeta automática (basada en metadatos)", + "autoFolderHint": "Las carpetas automáticas se crean a partir de metadatos.", + "useAutoFolder": "Usar carpeta automática", "downloadVideo": "Descargar Video", "downloading": "Descargando...", "enterUrl": "Ingresar URL del Video", @@ -149,15 +149,17 @@ "paste": "Pegar", "pastePlaylistUrl": "Haz clic para pegar el enlace de la lista de reproducción desde el portapapeles [Ctrl + V]", "pasteUrl": "Haz clic para pegar la URL o ID del video [Ctrl + V]", + "pasteUrlButton": "Pegar URL", "preparing": "Preparando...", "processing": "Procesando", "progress": "Progreso", "showDetails": "Mostrar detalles", "hideDetails": "Ocultar detalles", "selectAudioFormat": "Seleccionar Formato de Audio", + "selectDownloadType": "Seleccionar tipo de descarga", "selectFormat": "Seleccionar Formato", - "selectVideoFormat": "Seleccionar Formato de Video", "startDownload": "Iniciar descarga", + "selectVideoFormat": "Seleccionar Formato de Video", "singleVideo": "Video Individual", "speed": "Velocidad", "title": "Título", @@ -195,6 +197,25 @@ "subscription": "Suscripción" } }, + "error": { + "title": "Algo salió mal", + "description": "Ocurrió un error inesperado. Intenta recargar la aplicación o informa de este problema si persiste.", + "message": "Mensaje de error", + "unknownError": "Ocurrió un error desconocido", + "goHome": "Ir a inicio", + "reload": "Recargar aplicación", + "copyReport": "Copiar informe de error", + "copied": "¡Copiado!", + "copySuccess": "Informe de error copiado al portapapeles", + "copyFailed": "No se pudo copiar el informe de error", + "showDetails": "Mostrar detalles", + "hideDetails": "Ocultar detalles", + "stackTrace": "Rastro de pila", + "componentStack": "Pila de componentes", + "noStackTrace": "No hay rastro de pila disponible", + "fullReport": "Informe de error completo", + "helpText": "Si este error persiste, copia el informe de error anterior y compártelo con el equipo de soporte. Puedes encontrar la información de contacto en la página Acerca de." + }, "errors": { "clickToCopy": "Haz clic para copiar los detalles", "clipboardEmpty": "El portapapeles está vacío", @@ -203,6 +224,7 @@ "emptyUrl": "Por favor, ingresa una URL", "errorDetails": "Detalles del Error", "fetchInfoFailed": "Error al obtener información del video", + "invalidUrl": "El contenido del portapapeles no es una URL válida", "networkError": "Ha ocurrido un error. Verifica tu red y usa una URL correcta", "pasteFromClipboard": "Error al pegar desde el portapapeles" }, @@ -210,10 +232,23 @@ "clearCancelled": "Limpiar Cancelados", "clearCompleted": "Limpiar Completados", "clearErrors": "Limpiar Errores", + "clearAll": "Borrar todo el historial", + "clearAllAction": "Borrar historial", + "clearSelection": "Borrar selección", + "confirmClearAllTitle": "¿Borrar todo el historial?", + "confirmClearAllDescription": "Eliminar {{count}} elementos de tu historial. Los archivos permanecen en el disco.", + "confirmDeleteSelectedTitle": "¿Eliminar elementos seleccionados?", + "confirmDeleteSelectedDescription": "Eliminar {{count}} elementos de tu historial. Los archivos permanecen en el disco.", + "alsoDeleteFiles": "También eliminar archivos", + "confirmDeletePlaylistTitle": "¿Eliminar historial de la lista de reproducción?", + "confirmDeletePlaylistDescription": "Eliminar {{count}} elementos de {{title}} y borrar sus archivos.", "copyToClipboard": "Copiar al portapapeles", "copyUrl": "Copiar URL", "date": "Fecha", + "deletePlaylist": "Eliminar lista de reproducción", + "deleteSelected": "Eliminar seleccionados", "description": "Ver y gestionar tu historial de descargas", + "doneSelecting": "Listo", "duration": "Duración", "fileSize": "Tamaño del Archivo", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "Abrir Ubicación del Archivo", "openFolder": "Abrir Carpeta", "openInBrowser": "Haz clic para abrir en el navegador", + "removeAction": "Eliminar", "removeItem": "Eliminar Elemento", + "select": "Seleccionar", + "selectAll": "Seleccionar todo", + "selectVisible": "Seleccionar visibles", + "selectItem": "Seleccionar elemento", + "selectedCount": "{{count}} seleccionados", + "selectionSummary": "{{selected}} de {{total}} visibles seleccionados", "stats": { "cancelled": "Cancelado", "completed": "Completado", @@ -258,9 +300,15 @@ "downloadCompleted": "Descarga completada", "downloadFailed": "Error en la descarga", "downloadStarted": "Descarga iniciada", + "historyCleared": "Historial borrado", + "historyClearFailed": "No se pudo borrar el historial", "itemRemoved": "Elemento eliminado", + "itemsRemoved": "Se eliminaron {{count}} elementos", + "itemsRemoveFailed": "No se pudieron eliminar los elementos seleccionados", "openFileFailed": "Error al abrir el archivo", "openFolderFailed": "Error al abrir la carpeta", + "playlistHistoryRemoved": "Lista de reproducción eliminada y archivos borrados", + "playlistHistoryRemoveFailed": "No se pudo eliminar el historial de la lista de reproducción", "removeFailed": "Error al eliminar el elemento", "settingsSaved": "Configuración guardada", "urlCopied": "URL copiada al portapapeles", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "Lista de reproducción", "clearPreview": "Limpiar vista previa", + "collapsedProgress": "Descargando lista de reproducción: {{completed}} / {{total}} completado", "comingSoon": "¡La función de descarga de listas de reproducción llegará pronto!", "completed": "Lista de reproducción descargada", "description": "Descarga todos los videos de una lista de reproducción o canal de YouTube", @@ -284,7 +333,9 @@ "folderFormat": "Formato de nombre de carpeta para listas de reproducción", "foundVideos": "Se encontraron {{count}} videos en la lista de reproducción", "groupActive": "{{count}} activo", + "groupCollapse": "Contraer", "groupErrors": "{{count}} fallido", + "groupExpand": "Expandir", "groupSummary": "{{completed}} / {{total}} completado", "linkLabel": "URL de la Lista de Reproducción", "noEntries": "No se encontraron videos en esta lista de reproducción", @@ -299,7 +350,11 @@ "range": "Rango (Opcional)", "resetToDefault": "Restablecer a predeterminado", "selectedRange": "Rango: {{start}}-{{end}}", + "selectedVideos": "{{count}} seleccionados", + "downloadCurrentRange": "Descargar seleccionados", "showingCount": "Mostrando {{count}} videos", + "selectEntry": "Seleccionar entrada {{index}}", + "noEntriesSelected": "No hay entradas seleccionadas", "startIndex": "Inicio (1)", "title": "Descargar Lista de Reproducción", "totalVideos": "Total de videos: {{count}}", @@ -312,6 +367,14 @@ "audio": "Preferencias de Audio", "browserForCookies": "Seleccionar navegador para usar cookies", "browserForCookiesDescription": "Navegador del que extraer cookies para autenticación", + "browserForCookiesProfile": "Nombre de perfil o ruta", + "browserForCookiesProfileDescription": "Ruta del perfil para el navegador seleccionado arriba. Se completa automáticamente cuando es posible.", + "browserForCookiesProfilePlaceholder": "Nombre de perfil o ruta completa (opcional)", + "browserForCookiesProfileInvalid": "La ruta del perfil no es válida. Elige la carpeta de perfil del navegador seleccionado.", + "browserForCookiesProfileInvalidPath": "Esa carpeta no existe. Elige una carpeta de perfil existente.", + "browserForCookiesProfileInvalidProfile": "Nombre de perfil no encontrado en la ubicación predeterminada del navegador.", + "browserForCookiesProfileInvalidUnsupported": "No se conoce una ubicación de perfil predeterminada para este navegador en esta plataforma.", + "browserForCookiesProfileInvalidEmpty": "Introduce una ruta de perfil para el navegador seleccionado.", "cookiesFile": "Archivo de cookies", "cookiesFileDescription": "Archivo de cookies con formato Netscape para cargar para autenticación", "clearCookiesFile": "Limpiar", @@ -323,9 +386,13 @@ "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, "configFile": "Usar archivo de configuración", "configFileDescription": "Archivo de configuración personalizado para yt-dlp", @@ -338,6 +405,7 @@ "fileSelectError": "Error al seleccionar archivo", "general": "General", "language": "Idioma", + "languageDescription": "Elige tu idioma preferido para la interfaz de la aplicación", "light": "Claro", "hideDockIcon": "Ocultar icono del Dock", "hideDockIconDescription": "Eliminar VidBee del Dock de macOS. Usa la barra de menú o el icono de la bandeja para volver a abrir la aplicación.", @@ -346,6 +414,14 @@ "launchAtLoginUnsupported": "El inicio automático solo está disponible en macOS y Windows.", "enableAnalytics": "Ayuda a mejorar VidBee", "enableAnalyticsDescription": "Comparte datos de uso anónimos para ayudarnos a entender cómo se usa la aplicación y priorizar mejoras.", + "embedChapters": "Incrustar capítulos", + "embedChaptersDescription": "Agregar marcadores de capítulos al archivo cuando estén disponibles", + "embedMetadata": "Incrustar metadatos", + "embedMetadataDescription": "Escribir título, artista y otros metadatos cuando estén disponibles", + "embedSubs": "Incrustar subtítulos", + "embedSubsDescription": "Incrustar subtítulos en el archivo de video (mp4, webm, mkv)", + "embedThumbnail": "Incrustar miniatura", + "embedThumbnailDescription": "Agregar la miniatura como portada", "maxConcurrentDownloads": "Número máximo de descargas activas", "maxConcurrentDownloadsDescription": "Número máximo de descargas simultáneas", "none": "Ninguno", diff --git a/src/renderer/src/locales/fr.json b/src/renderer/src/locales/fr.json index b474f58..13b660b 100644 --- a/src/renderer/src/locales/fr.json +++ b/src/renderer/src/locales/fr.json @@ -16,7 +16,6 @@ "betaProgramDescription": "Recevez les versions préliminaires et les prochaines fonctionnalités avant tout le monde.", "betaProgramTitle": "Canal de prévisualisation", "description": "VidBee est un téléchargeur gratuit et open-source construit avec Electron et alimenté par yt-dlp.", - "downloadingUpdate": "Téléchargement de la mise à jour", "followAuthorActions": { "follow": "Suivre @nexmoex" }, @@ -25,12 +24,6 @@ "followAuthorTitle": "Suivre le Développeur", "here": "ici", "homepage": "Page d'accueil", - "latestVersionBadge": "Dernière : v{{version}}", - "latestVersionStatus": { - "available": "Nouvelle version disponible", - "error": "Impossible de récupérer la dernière version", - "uptodate": "Vous êtes à jour" - }, "notifications": { "checkingUpdates": "Recherche de mises à jour...", "downloadError": "Échec du téléchargement de la mise à jour", @@ -38,14 +31,14 @@ "downloadUpdate": "Télécharger et installer la mise à jour {{version}} ?", "manualDownloadAction": "Téléchargez maintenant", "noUpdatesAvailable": "Vous utilisez la dernière version", - "restartNowAction": "Redémarrer maintenant", "restartToUpdate": "Redémarrer maintenant pour installer la mise à jour ?", - "unknownErrorFallback": "Erreur inconnue", + "restartNowAction": "Redémarrer maintenant", "updateAvailable": "Mise à jour disponible : {{version}}", "updateAvailableMessage": "Une nouvelle version {{version}} est disponible. \nVeuillez le télécharger sur le site officiel.", "updateDownloaded": "Mise à jour téléchargée, redémarrez pour installer", "updateDownloadedVersion": "Mise à jour {{version}} téléchargée, redémarrez pour installer", - "updateError": "Échec de la vérification des mises à jour : {{error}}" + "updateError": "Échec de la vérification des mises à jour : {{error}}", + "unknownErrorFallback": "Erreur inconnue" }, "preferencesDescription": "Ajustez les paramètres de mise à jour sans quitter cette page.", "preferencesTitle": "Basculements Rapides", @@ -58,6 +51,12 @@ "documentationDescription": "Guides, FAQ et flux de travail courants.", "feedback": "Commentaires et problèmes", "feedbackDescription": "Partagez des idées ou signalez des problèmes sur GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "Signaler des bugs ou demander des fonctionnalités sur GitHub.", + "xFeedback": "Twitter", + "xFeedbackDescription": "Partagez des retours ou des suggestions sur X en mentionnant @nexmoex.", + "discord": "Discord", + "discordDescription": "Rejoignez notre communauté Discord pour les discussions et l'assistance.", "license": "Licence", "licenseDescription": "Consultez les termes de la licence open-source.", "website": "Site web officiel", @@ -76,13 +75,21 @@ "sourceCode": "Le code source est disponible", "title": "À propos", "version": "Version", - "versionLabel": "v{{version}}" + "versionLabel": "v{{version}}", + "latestVersionBadge": "Dernière : v{{version}}", + "latestVersionStatus": { + "available": "Nouvelle version disponible", + "uptodate": "Vous êtes à jour", + "error": "Impossible de récupérer la dernière version" + }, + "downloadingUpdate": "Téléchargement de la mise à jour" }, "advancedOptions": { "closeWhenDone": "Fermer l'application quand le téléchargement se termine", "currentLocation": "Emplacement de téléchargement actuel - ", "downloadLocation": "Emplacement de téléchargement", "downloadSubs": "Télécharger les sous-titres si disponibles", + "downloadSubsHint": "Enregistrer les sous-titres en fichiers séparés lorsqu'ils sont disponibles", "end": "Fin", "endHint": "Si laissé vide, sera téléchargé jusqu'à la fin", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "Télécharger des vidéos et audios depuis des centaines de sites", "title": "VidBee" }, - "audioExtract": { - "bad": "Mauvais", - "best": "Meilleur", - "extract": "Extraire", - "good": "Bon", - "normal": "Normal", - "selectFormat": "Sélectionner le Format", - "selectQuality": "Sélectionner la Qualité", - "title": "Extraire l'Audio", - "worst": "Pire" - }, "download": { "active": "Actif", "all": "Tout", @@ -123,6 +119,10 @@ "downloadBtn": "Télécharger", "downloadPending": "En attente", "downloadQueue": "File de Téléchargement", + "customDownloadFolder": "Dossier de téléchargement personnalisé", + "autoFolderPlaceholder": "Dossier automatique (basé sur les métadonnées)", + "autoFolderHint": "Les dossiers automatiques sont créés à partir des métadonnées.", + "useAutoFolder": "Utiliser le dossier automatique", "downloadVideo": "Télécharger la Vidéo", "downloading": "Téléchargement en cours...", "enterUrl": "Entrer l'URL de la Vidéo", @@ -130,44 +130,17 @@ "error": "Erreur", "fetch": "Récupérer", "fetchingVideoInfo": "Récupération des informations vidéo...", - "goToSettings": "Allez dans Paramètres", - "hideDetails": "Masquer les détails", "history": "Historique", "imageLoadError": "Échec du chargement de l'image", "imagePlaceholder": "Aucune image disponible", "infoUnavailable": "Téléchargement en Un Clic (Info indisponible)", "loading": "Chargement", - "metadata": { - "audioCodec": "Codec audio", - "codec": "Codec", - "completedAt": "Terminé à", - "createdAt": "Créé à", - "description": "Description", - "downloadPath": "Chemin de téléchargement", - "fileSize": "Taille du fichier", - "format": "Format", - "formatNote": "Remarque sur le format", - "fps": "FPS", - "height": "Hauteur", - "playlist": "Liste de lecture", - "protocol": "Protocole", - "quality": "Qualité", - "savedFile": "Fichier enregistré", - "source": "Source", - "speed": "Vitesse", - "startedAt": "Commencé à", - "subscription": "Abonnement", - "tags": "Balises", - "url": "URL source", - "videoCodec": "Codec vidéo", - "views": "Vues", - "width": "Largeur" - }, "moreOptions": "Plus d'options", "noActiveDownloads": "Aucun téléchargement actif", "noAudio": "Pas d'Audio", "noHistory": "Aucun historique de téléchargement", "noItems": "Aucun élément trouvé", + "goToSettings": "Allez dans Paramètres", "oneClickDownload": "Téléchargement en Un Clic", "oneClickDownloadDescription": "Télécharger directement avec les paramètres par défaut sans confirmation", "oneClickDownloadEnabled": "Le téléchargement en un clic est activé. \nLes téléchargements démarreront directement avec les paramètres par défaut.", @@ -176,14 +149,17 @@ "paste": "Coller", "pastePlaylistUrl": "Cliquez pour coller le lien de la playlist depuis le presse-papiers [Ctrl + V]", "pasteUrl": "Cliquez pour coller l'URL de la vidéo ou l'ID [Ctrl + V]", + "pasteUrlButton": "Coller l'URL", "preparing": "Préparation...", "processing": "Traitement", "progress": "Progrès", - "selectAudioFormat": "Sélectionner le Format Audio", - "selectFormat": "Sélectionner le Format", - "selectVideoFormat": "Sélectionner le Format Vidéo", - "startDownload": "Démarrer le téléchargement", "showDetails": "Afficher les détails", + "hideDetails": "Masquer les détails", + "selectAudioFormat": "Sélectionner le Format Audio", + "selectDownloadType": "Sélectionner le type de téléchargement", + "selectFormat": "Sélectionner le Format", + "startDownload": "Démarrer le téléchargement", + "selectVideoFormat": "Sélectionner le Format Vidéo", "singleVideo": "Vidéo Unique", "speed": "Vitesse", "title": "Titre", @@ -193,7 +169,52 @@ "urlPlaceholder": "https://www.youtube.com/watch?v=...", "video": "Vidéo", "videoInfo": "Informations Vidéo", - "videoInfoUpdated": "Informations vidéo mises à jour" + "videoInfoUpdated": "Informations vidéo mises à jour", + "metadata": { + "source": "Source", + "playlist": "Liste de lecture", + "format": "Format", + "quality": "Qualité", + "codec": "Codec", + "savedFile": "Fichier enregistré", + "url": "URL source", + "description": "Description", + "views": "Vues", + "tags": "Balises", + "downloadPath": "Chemin de téléchargement", + "createdAt": "Créé à", + "startedAt": "Commencé à", + "completedAt": "Terminé à", + "speed": "Vitesse", + "fileSize": "Taille du fichier", + "width": "Largeur", + "height": "Hauteur", + "fps": "FPS", + "videoCodec": "Codec vidéo", + "audioCodec": "Codec audio", + "formatNote": "Remarque sur le format", + "protocol": "Protocole", + "subscription": "Abonnement" + } + }, + "error": { + "title": "Un problème est survenu", + "description": "Une erreur inattendue s'est produite. Veuillez recharger l'application ou signaler ce problème s'il persiste.", + "message": "Message d'erreur", + "unknownError": "Une erreur inconnue s'est produite", + "goHome": "Aller à l'accueil", + "reload": "Recharger l'application", + "copyReport": "Copier le rapport d'erreur", + "copied": "Copié !", + "copySuccess": "Rapport d'erreur copié dans le presse-papiers", + "copyFailed": "Échec de la copie du rapport d'erreur", + "showDetails": "Afficher les détails", + "hideDetails": "Masquer les détails", + "stackTrace": "Trace de pile", + "componentStack": "Pile de composants", + "noStackTrace": "Aucune trace de pile disponible", + "fullReport": "Rapport d'erreur complet", + "helpText": "Si cette erreur persiste, veuillez copier le rapport d'erreur ci-dessus et le partager avec l'équipe de support. Vous trouverez les coordonnées sur la page À propos." }, "errors": { "clickToCopy": "Cliquez pour copier les détails", @@ -203,6 +224,7 @@ "emptyUrl": "Veuillez entrer une URL", "errorDetails": "Détails de l'Erreur", "fetchInfoFailed": "Échec de la récupération des informations vidéo", + "invalidUrl": "Le contenu du presse-papiers n'est pas une URL valide", "networkError": "Une erreur s'est produite. Vérifiez votre réseau et utilisez une URL correcte", "pasteFromClipboard": "Échec du collage depuis le presse-papiers" }, @@ -210,10 +232,23 @@ "clearCancelled": "Effacer les Annulés", "clearCompleted": "Effacer les Terminés", "clearErrors": "Effacer les Erreurs", + "clearAll": "Effacer tout l'historique", + "clearAllAction": "Effacer l'historique", + "clearSelection": "Effacer la sélection", + "confirmClearAllTitle": "Effacer tout l'historique ?", + "confirmClearAllDescription": "Supprimer {{count}} éléments de votre historique. Les fichiers restent sur le disque.", + "confirmDeleteSelectedTitle": "Supprimer les éléments sélectionnés ?", + "confirmDeleteSelectedDescription": "Supprimer {{count}} éléments de votre historique. Les fichiers restent sur le disque.", + "alsoDeleteFiles": "Supprimer aussi les fichiers", + "confirmDeletePlaylistTitle": "Supprimer l'historique de la playlist ?", + "confirmDeletePlaylistDescription": "Supprimer {{count}} éléments de {{title}} et supprimer leurs fichiers.", "copyToClipboard": "Copier dans le presse-papiers", "copyUrl": "Copier l'URL", "date": "Date", + "deletePlaylist": "Supprimer la playlist", + "deleteSelected": "Supprimer la sélection", "description": "Voir et gérer votre historique de téléchargements", + "doneSelecting": "Terminé", "duration": "Durée", "fileSize": "Taille du Fichier", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "Ouvrir l'Emplacement du Fichier", "openFolder": "Ouvrir le Dossier", "openInBrowser": "Cliquez pour ouvrir dans le navigateur", + "removeAction": "Supprimer", "removeItem": "Supprimer l'Élément", + "select": "Sélectionner", + "selectAll": "Tout sélectionner", + "selectVisible": "Sélectionner les visibles", + "selectItem": "Sélectionner l'élément", + "selectedCount": "{{count}} sélectionnés", + "selectionSummary": "{{selected}} sur {{total}} visibles sélectionnés", "stats": { "cancelled": "Annulé", "completed": "Terminé", @@ -247,9 +289,9 @@ "about": "À propos", "download": "Télécharger", "playlist": "Télécharger la Playlist", - "preferences": "Préférences", "rss": "RSS", "subscriptions": "Abonnements", + "preferences": "Préférences", "supportedSites": "Sites Supportés", "theme": "Thème :" }, @@ -258,9 +300,15 @@ "downloadCompleted": "Téléchargement terminé", "downloadFailed": "Échec du téléchargement", "downloadStarted": "Téléchargement démarré", + "historyCleared": "Historique effacé", + "historyClearFailed": "Échec de l'effacement de l'historique", "itemRemoved": "Élément supprimé", + "itemsRemoved": "{{count}} éléments supprimés", + "itemsRemoveFailed": "Échec de la suppression des éléments sélectionnés", "openFileFailed": "Échec de l'ouverture du fichier", "openFolderFailed": "Échec de l'ouverture du dossier", + "playlistHistoryRemoved": "Playlist supprimée et fichiers supprimés", + "playlistHistoryRemoveFailed": "Échec de la suppression de l'historique de la playlist", "removeFailed": "Échec de la suppression de l'élément", "settingsSaved": "Paramètres sauvegardés", "urlCopied": "URL copiée dans le presse-papiers", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "Liste de lecture", "clearPreview": "Effacer l'aperçu", + "collapsedProgress": "Téléchargement de la playlist : {{completed}} / {{total}} terminés", "comingSoon": "La fonctionnalité de téléchargement de playlist arrive bientôt !", "completed": "Playlist téléchargée", "description": "Télécharger toutes les vidéos d'une playlist ou chaîne YouTube", @@ -284,7 +333,9 @@ "folderFormat": "Format de nom de dossier pour les playlists", "foundVideos": "Trouvé {{count}} vidéos dans la playlist", "groupActive": "{{count}} actifs", + "groupCollapse": "Réduire", "groupErrors": "{{count}} a échoué", + "groupExpand": "Développer", "groupSummary": "{{completed}} / {{total}} terminé", "linkLabel": "URL de la Playlist", "noEntries": "Aucune vidéo n'a été trouvée dans cette playlist", @@ -294,12 +345,16 @@ "positionLabel": "Article {{index}} sur {{total}}", "previewButton": "Aperçu de la liste de lecture", "previewFailed": "Échec de la prévisualisation de la playlist", - "previewRequired": "Prévisualisez la playlist avant de la télécharger.", "previewSummary": "Prévisualisez les éléments de la liste de lecture avant de les télécharger.", + "previewRequired": "Prévisualisez la playlist avant de la télécharger.", "range": "Plage (Optionnel)", "resetToDefault": "Réinitialiser par défaut", "selectedRange": "Plage : {{start}}-{{end}}", + "selectedVideos": "{{count}} sélectionnés", + "downloadCurrentRange": "Télécharger la sélection", "showingCount": "Affichage de {{count}} vidéos", + "selectEntry": "Sélectionner l'entrée {{index}}", + "noEntriesSelected": "Aucune entrée sélectionnée", "startIndex": "Début (1)", "title": "Télécharger la Playlist", "totalVideos": "Nombre total de vidéos : {{count}}", @@ -312,39 +367,61 @@ "audio": "Préférences Audio", "browserForCookies": "Sélectionner le navigateur pour utiliser les cookies", "browserForCookiesDescription": "Navigateur pour extraire les cookies pour l'authentification", + "browserForCookiesProfile": "Nom du profil ou chemin", + "browserForCookiesProfileDescription": "Chemin du profil pour le navigateur sélectionné ci-dessus. Rempli automatiquement si possible.", + "browserForCookiesProfilePlaceholder": "Nom du profil ou chemin complet (facultatif)", + "browserForCookiesProfileInvalid": "Le chemin du profil n'est pas valide. Choisissez le dossier de profil du navigateur sélectionné.", + "browserForCookiesProfileInvalidPath": "Ce dossier n'existe pas. Choisissez un dossier de profil existant.", + "browserForCookiesProfileInvalidProfile": "Nom de profil introuvable à l'emplacement par défaut du navigateur.", + "browserForCookiesProfileInvalidUnsupported": "Aucun emplacement de profil par défaut n'est connu pour ce navigateur sur cette plateforme.", + "browserForCookiesProfileInvalidEmpty": "Saisissez un chemin de profil pour le navigateur sélectionné.", + "cookiesFile": "Fichier de cookies", + "cookiesFileDescription": "Fichier de cookies au format Netscape à charger pour l'authentification", + "clearCookiesFile": "Clair", + "cookiesHelpTitle": "Utiliser des cookies", + "cookiesHelpBrowser": "Choisissez votre navigateur ci-dessus pour réutiliser automatiquement sa session de connexion.", + "cookiesHelpFile": "Exportez un fichier de cookies Netscape (voir la FAQ yt-dlp) et sélectionnez-le ici si nécessaire.", + "cookiesHelpFaq": "Ouvrir la FAQ sur les cookies yt-dlp", + "openLinkError": "Échec de l'ouverture du lien", "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, - "clearConfigFile": "Clair", - "clearCookiesFile": "Clair", "configFile": "Utiliser le fichier de configuration", "configFileDescription": "Fichier de configuration personnalisé pour yt-dlp", - "cookiesFile": "Fichier de cookies", - "cookiesFileDescription": "Fichier de cookies au format Netscape à charger pour l'authentification", - "cookiesHelpBrowser": "Choisissez votre navigateur ci-dessus pour réutiliser automatiquement sa session de connexion.", - "cookiesHelpFaq": "Ouvrir la FAQ sur les cookies yt-dlp", - "cookiesHelpFile": "Exportez un fichier de cookies Netscape (voir la FAQ yt-dlp) et sélectionnez-le ici si nécessaire.", - "cookiesHelpTitle": "Utiliser des cookies", + "clearConfigFile": "Clair", "dark": "Sombre", "description": "Configurez vos préférences de téléchargement et paramètres de l'application", "directorySelectError": "Échec de la sélection du répertoire", "downloadPath": "Emplacement de téléchargement", "downloadPathDescription": "Choisissez où sauvegarder les fichiers téléchargés", - "enableAnalytics": "Aidez-nous à améliorer VidBee", - "enableAnalyticsDescription": "Partagez des données d'utilisation anonymes pour nous aider à comprendre comment l'application est utilisée et prioriser les améliorations.", "fileSelectError": "Échec de la sélection du fichier", "general": "Général", + "language": "Langue", + "languageDescription": "Choisissez votre langue préférée pour l'interface de l'application", + "light": "Clair", "hideDockIcon": "Masquer l'icône du Dock", "hideDockIconDescription": "Supprimez VidBee du Dock macOS. \nUtilisez la barre de menu ou l'icône de la barre d'état pour rouvrir l'application.", - "language": "Langue", "launchAtLogin": "Lancer au démarrage", "launchAtLoginDescription": "Ouvrez VidBee automatiquement après vous être connecté à votre ordinateur.", "launchAtLoginUnsupported": "Le lancement automatique n'est disponible que sur macOS et Windows.", - "light": "Clair", + "enableAnalytics": "Aidez-nous à améliorer VidBee", + "enableAnalyticsDescription": "Partagez des données d'utilisation anonymes pour nous aider à comprendre comment l'application est utilisée et prioriser les améliorations.", + "embedChapters": "Intégrer les chapitres", + "embedChaptersDescription": "Ajouter des marqueurs de chapitre au fichier lorsqu'ils sont disponibles", + "embedMetadata": "Intégrer les métadonnées", + "embedMetadataDescription": "Écrire le titre, l'artiste et d'autres métadonnées lorsqu'ils sont disponibles", + "embedSubs": "Intégrer les sous-titres", + "embedSubsDescription": "Intégrer les sous-titres dans le fichier vidéo (mp4, webm, mkv)", + "embedThumbnail": "Intégrer la miniature", + "embedThumbnailDescription": "Ajouter la miniature comme illustration de couverture", "maxConcurrentDownloads": "Nombre maximum de téléchargements actifs", "maxConcurrentDownloadsDescription": "Nombre maximum de téléchargements simultanés", "none": "Aucun", @@ -362,7 +439,6 @@ "normal": "Normal", "worst": "Pire" }, - "openLinkError": "Échec de l'ouverture du lien", "proxy": "Proxy", "proxyDescription": "Serveur proxy pour les requêtes réseau", "proxyPlaceholder": "http://proxy:port", @@ -383,6 +459,119 @@ }, "video": "Préférences Vidéo" }, + "subscriptions": { + "title": "Abonnements", + "subtitle": "{{count}} abonnement{{count, plural, one {} other {s}}}", + "description": "Surveillez automatiquement les flux RSS et mettez les nouveaux téléchargements en file d’attente sans travail manuel.", + "defaults": { + "title": "Paramètres par défaut de l'automatisation", + "description": "Contrôlez où les téléchargements par abonnement sont stockés et à quelle fréquence VidBee recherche de nouvelles vidéos.", + "downloadDirectory": "Répertoire de téléchargement", + "filenameTemplate": "Modèle de nom de fichier (fichier uniquement)", + "onlyLatest": "Téléchargez uniquement la dernière vidéo", + "onlyLatestDescription": "Lorsqu'il est activé, VidBee ignore les anciens éléments du backlog et récupère uniquement le téléchargement le plus récent." + }, + "add": { + "title": "Ajouter un flux RSS", + "description": "Collez un lien de flux RSS. \nVidBee détectera automatiquement le flux." + }, + "fields": { + "url": "URL du flux", + "keywords": "Filtre de mots clés (séparés par des virgules)", + "tags": "Balises automatiques", + "customDirectory": "Répertoire personnalisé", + "namingTemplate": "Modèle de nom de fichier personnalisé (fichier uniquement)", + "onlyLatest": "Téléchargez uniquement la dernière vidéo", + "onlyLatestDescription": "Ignorez les éléments du backlog et récupérez uniquement le téléchargement le plus récent à partir de ce flux.", + "enabled": "Activé", + "disabled": "Désactivé", + "onlyLatestShort": "Seulement le dernier" + }, + "placeholders": { + "url": "https://rsshub.app/youtube/user/@FKJ" + }, + "actions": { + "add": "Ajouter", + "refresh": "Rafraîchir", + "edit": "Modifier", + "remove": "Retirer", + "save": "Enregistrer les modifications", + "selectDirectory": "Parcourir", + "enable": "Activer", + "disable": "Désactiver" + }, + "items": { + "title": "Derniers téléchargements ({{count}})", + "count": "{{count}} articles", + "empty": "Aucun élément de flux récent trouvé.", + "status": { + "queued": "En file d'attente", + "notQueued": "Pas en file d'attente", + "pending": "En attente", + "downloading": "Téléchargement", + "processing": "Traitement", + "completed": "Complété", + "error": "Échoué", + "cancelled": "Annulé" + }, + "fromChannel": "De {{channel}}", + "tooltip": { + "downloadStatus": "État du téléchargement : {{status}}", + "downloadPending": "En attente des détails du téléchargement...", + "notQueued": "Pas encore dans la file d'attente de téléchargement" + }, + "actions": { + "open": "Ouvrir dans le navigateur", + "queue": "Ajouter à la file d'attente de téléchargement" + } + }, + "labels": { + "subscription": "Abonnement", + "unknown": "Abonnement inconnu", + "noThumbnail": "Aucune vignette" + }, + "notifications": { + "directoryError": "Échec de l'ouverture du sélecteur de répertoire.", + "missingUrl": "Veuillez d'abord coller un lien de chaîne.", + "created": "Abonnement ajouté", + "createError": "Échec de l'ajout de l'abonnement.", + "refreshStarted": "Actualisation démarrée", + "removed": "Abonnement supprimé", + "updated": "Abonnement mis à jour", + "itemQueued": "Ajouté à la file d'attente de téléchargement", + "itemAlreadyQueued": "Cette vidéo est déjà en file d'attente", + "queueError": "Échec de l'ajout à la file d'attente de téléchargement.", + "openLinkError": "Échec de l'ouverture du lien vidéo.", + "resolveError": "Échec de la résolution de l'URL du flux RSS." + }, + "detectedFeed": "Flux {{platform}} détecté -> {{feed}}", + "detecting": "Détection du flux...", + "latestVideo": "Dernière vidéo : {{title}}", + "lastChecked": "Dernière vérification : {{time}}", + "never": "Jamais", + "empty": "Aucun abonnement pour l'instant. \nAjoutez vos chaînes préférées pour lancer le téléchargement automatique.", + "edit": { + "title": "Modifier {{name}}", + "description": "Ajustez les filtres, les balises et les remplacements pour ce flux." + }, + "status": { + "title": "Statut", + "up-to-date": "À jour", + "checking": "Vérification", + "failed": "Échoué", + "idle": "Inactif", + "tooltip": { + "updatedAt": "Mise à jour : {{time}}" + } + }, + "rssHub": { + "title": "Abonnements automatisés avec RSSHub", + "description": "Combinez VidBee avec RSSHub pour activer les abonnements et les téléchargements automatisés à partir de diverses plateformes. \nUne fois configuré, VidBee s'exécute en arrière-plan et télécharge automatiquement les dernières vidéos et contenus.", + "learnMore": "En savoir plus sur RSSHub", + "openDocs": "Ouvrir la documentation RSSHub", + "hint": "Vous n'avez pas d'URL de flux RSS ? \nUtilisez RSSHub pour générer des flux RSS pour YouTube, Twitter et des milliers d'autres plateformes." + } + }, "sites": { "homeInlineDescription": "Supporte {{sites}} et plus.", "moreDescription": "La liste complète yt-dlp est mise à jour constamment par la communauté.", @@ -467,118 +656,5 @@ }, "popularSection": "Plateformes principales", "viewAll": "Voir tous les sites supportés" - }, - "subscriptions": { - "actions": { - "add": "Ajouter", - "disable": "Désactiver", - "edit": "Modifier", - "enable": "Activer", - "refresh": "Rafraîchir", - "remove": "Retirer", - "save": "Enregistrer les modifications", - "selectDirectory": "Parcourir" - }, - "add": { - "description": "Collez un lien de flux RSS. \nVidBee détectera automatiquement le flux.", - "title": "Ajouter un flux RSS" - }, - "defaults": { - "description": "Contrôlez où les téléchargements par abonnement sont stockés et à quelle fréquence VidBee recherche de nouvelles vidéos.", - "downloadDirectory": "Répertoire de téléchargement", - "filenameTemplate": "Modèle de nom de fichier (fichier uniquement)", - "onlyLatest": "Téléchargez uniquement la dernière vidéo", - "onlyLatestDescription": "Lorsqu'il est activé, VidBee ignore les anciens éléments du backlog et récupère uniquement le téléchargement le plus récent.", - "title": "Paramètres par défaut de l'automatisation" - }, - "description": "Surveillez automatiquement les flux RSS et mettez les nouveaux téléchargements en file d’attente sans travail manuel.", - "detectedFeed": "Flux {{platform}} détecté -> {{feed}}", - "detecting": "Détection du flux...", - "edit": { - "description": "Ajustez les filtres, les balises et les remplacements pour ce flux.", - "title": "Modifier {{name}}" - }, - "empty": "Aucun abonnement pour l'instant. \nAjoutez vos chaînes préférées pour lancer le téléchargement automatique.", - "fields": { - "customDirectory": "Répertoire personnalisé", - "disabled": "Désactivé", - "enabled": "Activé", - "keywords": "Filtre de mots clés (séparés par des virgules)", - "namingTemplate": "Modèle de nom de fichier personnalisé (fichier uniquement)", - "onlyLatest": "Téléchargez uniquement la dernière vidéo", - "onlyLatestDescription": "Ignorez les éléments du backlog et récupérez uniquement le téléchargement le plus récent à partir de ce flux.", - "onlyLatestShort": "Seulement le dernier", - "tags": "Balises automatiques", - "url": "URL du flux" - }, - "items": { - "actions": { - "open": "Ouvrir dans le navigateur", - "queue": "Ajouter à la file d'attente de téléchargement" - }, - "count": "{{count}} articles", - "empty": "Aucun élément de flux récent trouvé.", - "fromChannel": "De {{channel}}", - "status": { - "cancelled": "Annulé", - "completed": "Complété", - "downloading": "Téléchargement", - "error": "Échoué", - "notQueued": "Pas en file d'attente", - "pending": "En attente", - "processing": "Traitement", - "queued": "En file d'attente" - }, - "title": "Derniers téléchargements ({{count}})", - "tooltip": { - "downloadPending": "En attente des détails du téléchargement...", - "downloadStatus": "État du téléchargement : {{status}}", - "notQueued": "Pas encore dans la file d'attente de téléchargement" - } - }, - "labels": { - "noThumbnail": "Aucune vignette", - "subscription": "Abonnement", - "unknown": "Abonnement inconnu" - }, - "lastChecked": "Dernière vérification : {{time}}", - "latestVideo": "Dernière vidéo : {{title}}", - "never": "Jamais", - "notifications": { - "createError": "Échec de l'ajout de l'abonnement.", - "created": "Abonnement ajouté", - "directoryError": "Échec de l'ouverture du sélecteur de répertoire.", - "itemAlreadyQueued": "Cette vidéo est déjà en file d'attente", - "itemQueued": "Ajouté à la file d'attente de téléchargement", - "missingUrl": "Veuillez d'abord coller un lien de chaîne.", - "openLinkError": "Échec de l'ouverture du lien vidéo.", - "queueError": "Échec de l'ajout à la file d'attente de téléchargement.", - "refreshStarted": "Actualisation démarrée", - "removed": "Abonnement supprimé", - "resolveError": "Échec de la résolution de l'URL du flux RSS.", - "updated": "Abonnement mis à jour" - }, - "placeholders": { - "url": "https://rsshub.app/youtube/user/@FKJ" - }, - "rssHub": { - "description": "Combinez VidBee avec RSSHub pour activer les abonnements et les téléchargements automatisés à partir de diverses plateformes. \nUne fois configuré, VidBee s'exécute en arrière-plan et télécharge automatiquement les dernières vidéos et contenus.", - "hint": "Vous n'avez pas d'URL de flux RSS ? \nUtilisez RSSHub pour générer des flux RSS pour YouTube, Twitter et des milliers d'autres plateformes.", - "learnMore": "En savoir plus sur RSSHub", - "openDocs": "Ouvrir la documentation RSSHub", - "title": "Abonnements automatisés avec RSSHub" - }, - "status": { - "checking": "Vérification", - "failed": "Échoué", - "idle": "Inactif", - "title": "Statut", - "tooltip": { - "updatedAt": "Mise à jour : {{time}}" - }, - "up-to-date": "À jour" - }, - "subtitle": "{{count}} abonnement{{count, plural, one {} other {s}}}", - "title": "Abonnements" } } diff --git a/src/renderer/src/locales/id.json b/src/renderer/src/locales/id.json index c8bb6e1..2f100a8 100644 --- a/src/renderer/src/locales/id.json +++ b/src/renderer/src/locales/id.json @@ -51,6 +51,12 @@ "documentationDescription": "Panduan, FAQ, dan alur kerja umum.", "feedback": "Masukan & masalah", "feedbackDescription": "Bagikan ide atau laporkan masalah di GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "Laporkan bug atau minta fitur di GitHub.", + "xFeedback": "Twitter", + "xFeedbackDescription": "Bagikan masukan atau saran di X dengan menyebut @nexmoex.", + "discord": "Discord", + "discordDescription": "Bergabunglah dengan komunitas Discord kami untuk diskusi dan dukungan.", "license": "Lisensi", "licenseDescription": "Tinjau ketentuan lisensi open-source.", "website": "Situs web resmi", @@ -83,6 +89,7 @@ "currentLocation": "Lokasi unduhan saat ini - ", "downloadLocation": "Lokasi unduhan", "downloadSubs": "Unduh subtitle jika tersedia", + "downloadSubsHint": "Simpan subtitle sebagai file terpisah jika tersedia", "end": "Akhir", "endHint": "Jika dibiarkan kosong, akan diunduh sampai akhir", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "Unduh video dan audio dari ratusan situs", "title": "VidBee" }, - "audioExtract": { - "bad": "Buruk", - "best": "Terbaik", - "extract": "Ekstrak", - "good": "Baik", - "normal": "Normal", - "selectFormat": "Pilih Format", - "selectQuality": "Pilih Kualitas", - "title": "Ekstrak Audio", - "worst": "Terburuk" - }, "download": { "active": "Aktif", "all": "Semua", @@ -123,6 +119,10 @@ "downloadBtn": "Unduh", "downloadPending": "Menunggu", "downloadQueue": "Antrian Unduhan", + "customDownloadFolder": "Folder unduhan khusus", + "autoFolderPlaceholder": "Folder otomatis (berdasarkan metadata)", + "autoFolderHint": "Folder otomatis dibuat dari metadata.", + "useAutoFolder": "Gunakan folder otomatis", "downloadVideo": "Unduh Video", "downloading": "Mengunduh...", "enterUrl": "Masukkan URL Video", @@ -149,15 +149,17 @@ "paste": "Tempel", "pastePlaylistUrl": "Klik untuk menempelkan tautan playlist dari clipboard [Ctrl + V]", "pasteUrl": "Klik untuk menempelkan URL video atau ID [Ctrl + V]", + "pasteUrlButton": "Tempel URL", "preparing": "Mempersiapkan...", "processing": "Memproses", "progress": "Kemajuan", "showDetails": "Tampilkan detail", "hideDetails": "Sembunyikan detail", "selectAudioFormat": "Pilih Format Audio", + "selectDownloadType": "Pilih jenis unduhan", "selectFormat": "Pilih Format", - "selectVideoFormat": "Pilih Format Video", "startDownload": "Mulai unduhan", + "selectVideoFormat": "Pilih Format Video", "singleVideo": "Video Tunggal", "speed": "Kecepatan", "title": "Judul", @@ -195,6 +197,25 @@ "subscription": "Berlangganan" } }, + "error": { + "title": "Terjadi kesalahan", + "description": "Terjadi kesalahan tak terduga. Silakan muat ulang aplikasi atau laporkan masalah ini jika terus terjadi.", + "message": "Pesan kesalahan", + "unknownError": "Terjadi kesalahan yang tidak diketahui", + "goHome": "Ke beranda", + "reload": "Muat ulang aplikasi", + "copyReport": "Salin laporan kesalahan", + "copied": "Tersalin!", + "copySuccess": "Laporan kesalahan disalin ke papan klip", + "copyFailed": "Gagal menyalin laporan kesalahan", + "showDetails": "Tampilkan detail", + "hideDetails": "Sembunyikan detail", + "stackTrace": "Jejak tumpukan", + "componentStack": "Tumpukan komponen", + "noStackTrace": "Tidak ada jejak tumpukan yang tersedia", + "fullReport": "Laporan kesalahan lengkap", + "helpText": "Jika kesalahan ini terus terjadi, silakan salin laporan kesalahan di atas dan bagikan dengan tim dukungan. Informasi kontak dapat ditemukan di halaman Tentang." + }, "errors": { "clickToCopy": "Klik untuk menyalin detail", "clipboardEmpty": "Clipboard kosong", @@ -203,6 +224,7 @@ "emptyUrl": "Silakan masukkan URL", "errorDetails": "Detail Kesalahan", "fetchInfoFailed": "Gagal mengambil informasi video", + "invalidUrl": "Konten papan klip bukan URL yang valid", "networkError": "Terjadi kesalahan. Periksa jaringan Anda dan gunakan URL yang benar", "pasteFromClipboard": "Gagal menempel dari clipboard" }, @@ -210,10 +232,23 @@ "clearCancelled": "Hapus Dibatalkan", "clearCompleted": "Hapus Selesai", "clearErrors": "Hapus Kesalahan", + "clearAll": "Hapus semua riwayat", + "clearAllAction": "Hapus riwayat", + "clearSelection": "Hapus pilihan", + "confirmClearAllTitle": "Hapus semua riwayat?", + "confirmClearAllDescription": "Hapus {{count}} item dari riwayat Anda. File tetap di disk.", + "confirmDeleteSelectedTitle": "Hapus item yang dipilih?", + "confirmDeleteSelectedDescription": "Hapus {{count}} item dari riwayat Anda. File tetap di disk.", + "alsoDeleteFiles": "Hapus juga file", + "confirmDeletePlaylistTitle": "Hapus riwayat playlist?", + "confirmDeletePlaylistDescription": "Hapus {{count}} item dari {{title}} dan hapus file-nya.", "copyToClipboard": "Salin ke clipboard", "copyUrl": "Salin URL", "date": "Tanggal", + "deletePlaylist": "Hapus playlist", + "deleteSelected": "Hapus yang dipilih", "description": "Lihat dan kelola riwayat unduhan Anda", + "doneSelecting": "Selesai", "duration": "Durasi", "fileSize": "Ukuran File", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "Buka Lokasi File", "openFolder": "Buka Folder", "openInBrowser": "Klik untuk membuka di browser", + "removeAction": "Hapus", "removeItem": "Hapus Item", + "select": "Pilih", + "selectAll": "Pilih semua", + "selectVisible": "Pilih yang terlihat", + "selectItem": "Pilih item", + "selectedCount": "{{count}} dipilih", + "selectionSummary": "{{selected}} dari {{total}} terlihat dipilih", "stats": { "cancelled": "Dibatalkan", "completed": "Selesai", @@ -258,9 +300,15 @@ "downloadCompleted": "Unduhan selesai", "downloadFailed": "Unduhan gagal", "downloadStarted": "Unduhan dimulai", + "historyCleared": "Riwayat dihapus", + "historyClearFailed": "Gagal menghapus riwayat", "itemRemoved": "Item dihapus", + "itemsRemoved": "{{count}} item dihapus", + "itemsRemoveFailed": "Gagal menghapus item yang dipilih", "openFileFailed": "Gagal membuka file", "openFolderFailed": "Gagal membuka folder", + "playlistHistoryRemoved": "Playlist dihapus dan file dihapus", + "playlistHistoryRemoveFailed": "Gagal menghapus riwayat playlist", "removeFailed": "Gagal menghapus item", "settingsSaved": "Pengaturan disimpan", "urlCopied": "URL disalin ke clipboard", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "Playlist", "clearPreview": "Hapus pratinjau", + "collapsedProgress": "Mengunduh playlist: {{completed}} / {{total}} selesai", "comingSoon": "Fitur unduh playlist segera hadir!", "completed": "Playlist diunduh", "description": "Unduh semua video dari playlist atau saluran YouTube", @@ -284,7 +333,9 @@ "folderFormat": "Format nama folder untuk playlist", "foundVideos": "Ditemukan {{count}} video dalam playlist", "groupActive": "{{count}} aktif", + "groupCollapse": "Ciutkan", "groupErrors": "{{count}} gagal", + "groupExpand": "Perluas", "groupSummary": "{{completed}} / {{total}} selesai", "linkLabel": "URL Playlist", "noEntries": "Tidak ada video yang ditemukan dalam playlist ini", @@ -299,7 +350,11 @@ "range": "Rentang (Opsional)", "resetToDefault": "Reset ke default", "selectedRange": "Rentang: {{start}}-{{end}}", + "selectedVideos": "{{count}} dipilih", + "downloadCurrentRange": "Unduh yang dipilih", "showingCount": "Menampilkan {{count}} video", + "selectEntry": "Pilih entri {{index}}", + "noEntriesSelected": "Tidak ada entri yang dipilih", "startIndex": "Mulai (1)", "title": "Unduh Playlist", "totalVideos": "Total video: {{count}}", @@ -312,6 +367,14 @@ "audio": "Preferensi Audio", "browserForCookies": "Pilih browser untuk menggunakan cookie", "browserForCookiesDescription": "Browser untuk mengekstrak cookie untuk autentikasi", + "browserForCookiesProfile": "Nama profil atau path", + "browserForCookiesProfileDescription": "Path profil untuk browser yang dipilih di atas. Diisi otomatis bila memungkinkan.", + "browserForCookiesProfilePlaceholder": "Nama profil atau path lengkap (opsional)", + "browserForCookiesProfileInvalid": "Path profil tidak valid. Pilih folder profil untuk browser yang dipilih.", + "browserForCookiesProfileInvalidPath": "Folder itu tidak ada. Pilih folder profil yang ada.", + "browserForCookiesProfileInvalidProfile": "Nama profil tidak ditemukan di lokasi browser default.", + "browserForCookiesProfileInvalidUnsupported": "Tidak ada lokasi profil default yang diketahui untuk browser ini di platform ini.", + "browserForCookiesProfileInvalidEmpty": "Masukkan path profil untuk browser yang dipilih.", "cookiesFile": "File cookie", "cookiesFileDescription": "File cookie format Netscape untuk dimuat untuk autentikasi", "clearCookiesFile": "Hapus", @@ -323,9 +386,13 @@ "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, "configFile": "Gunakan file konfigurasi", "configFileDescription": "File konfigurasi khusus untuk yt-dlp", @@ -338,6 +405,7 @@ "fileSelectError": "Gagal memilih file", "general": "Umum", "language": "Bahasa", + "languageDescription": "Pilih bahasa pilihan Anda untuk antarmuka aplikasi", "light": "Terang", "hideDockIcon": "Sembunyikan ikon Dock", "hideDockIconDescription": "Hapus VidBee dari Dock macOS. Gunakan menu bar atau ikon tray untuk membuka kembali aplikasi.", @@ -346,6 +414,14 @@ "launchAtLoginUnsupported": "Peluncuran otomatis hanya tersedia di macOS dan Windows.", "enableAnalytics": "Bantu tingkatkan VidBee", "enableAnalyticsDescription": "Bagikan data penggunaan anonim untuk membantu kami memahami bagaimana aplikasi digunakan dan memprioritaskan peningkatan.", + "embedChapters": "Sematkan bab", + "embedChaptersDescription": "Tambahkan penanda bab ke file saat tersedia", + "embedMetadata": "Sematkan metadata", + "embedMetadataDescription": "Tulis judul, artis, dan metadata lain saat tersedia", + "embedSubs": "Sematkan subtitle", + "embedSubsDescription": "Sematkan subtitle ke file video (mp4, webm, mkv)", + "embedThumbnail": "Sematkan thumbnail", + "embedThumbnailDescription": "Tambahkan thumbnail sebagai sampul", "maxConcurrentDownloads": "Jumlah maksimum unduhan aktif", "maxConcurrentDownloadsDescription": "Jumlah maksimum unduhan bersamaan", "none": "Tidak ada", diff --git a/src/renderer/src/locales/it.json b/src/renderer/src/locales/it.json index a37bb9e..18bafcd 100644 --- a/src/renderer/src/locales/it.json +++ b/src/renderer/src/locales/it.json @@ -16,7 +16,6 @@ "betaProgramDescription": "Ricevi build anticipate e prossime funzionalità prima di tutti.", "betaProgramTitle": "Canale anteprima", "description": "VidBee è un downloader gratuito e open-source costruito con Electron e alimentato da yt-dlp.", - "downloadingUpdate": "Download dell'aggiornamento", "followAuthorActions": { "follow": "Segui @nexmoex" }, @@ -25,12 +24,6 @@ "followAuthorTitle": "Segui lo Sviluppatore", "here": "qui", "homepage": "Homepage", - "latestVersionBadge": "Ultima: v{{version}}", - "latestVersionStatus": { - "available": "Nuova versione disponibile", - "error": "Impossibile recuperare l'ultima versione", - "uptodate": "Sei aggiornato" - }, "notifications": { "checkingUpdates": "Ricerca aggiornamenti...", "downloadError": "Errore nel download dell'aggiornamento", @@ -38,14 +31,14 @@ "downloadUpdate": "Scarica e installa l'aggiornamento {{version}}?", "manualDownloadAction": "Scarica ora", "noUpdatesAvailable": "Stai usando l'ultima versione", - "restartNowAction": "Ricomincia adesso", "restartToUpdate": "Riavvia ora per installare l'aggiornamento?", - "unknownErrorFallback": "Errore sconosciuto", + "restartNowAction": "Ricomincia adesso", "updateAvailable": "Aggiornamento disponibile: {{version}}", "updateAvailableMessage": "È disponibile una nuova versione {{version}}. \nSi prega di scaricarlo dal sito ufficiale.", "updateDownloaded": "Aggiornamento scaricato, riavvia per installare", "updateDownloadedVersion": "Aggiornamento {{version}} scaricato, riavvia per installare", - "updateError": "Errore nel controllo degli aggiornamenti: {{error}}" + "updateError": "Errore nel controllo degli aggiornamenti: {{error}}", + "unknownErrorFallback": "Errore sconosciuto" }, "preferencesDescription": "Regola le impostazioni di aggiornamento senza lasciare questa pagina.", "preferencesTitle": "Toggle Rapidi", @@ -58,6 +51,12 @@ "documentationDescription": "Guide, FAQ e flussi di lavoro comuni.", "feedback": "Feedback e problemi", "feedbackDescription": "Condividi idee o segnala problemi su GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "Segnala bug o richiedi funzionalità su GitHub.", + "xFeedback": "Twitter", + "xFeedbackDescription": "Condividi feedback o suggerimenti su X menzionando @nexmoex.", + "discord": "Discord", + "discordDescription": "Unisciti alla nostra community Discord per discussioni e supporto.", "license": "Licenza", "licenseDescription": "Rivedi i termini della licenza open-source.", "website": "Sito web ufficiale", @@ -76,13 +75,21 @@ "sourceCode": "Il codice sorgente è disponibile", "title": "Informazioni", "version": "Versione", - "versionLabel": "v{{version}}" + "versionLabel": "v{{version}}", + "latestVersionBadge": "Ultima: v{{version}}", + "latestVersionStatus": { + "available": "Nuova versione disponibile", + "uptodate": "Sei aggiornato", + "error": "Impossibile recuperare l'ultima versione" + }, + "downloadingUpdate": "Download dell'aggiornamento" }, "advancedOptions": { "closeWhenDone": "Chiudi app quando il download finisce", "currentLocation": "Posizione download attuale - ", "downloadLocation": "Posizione download", "downloadSubs": "Scarica sottotitoli se disponibili", + "downloadSubsHint": "Salva i sottotitoli come file separati quando disponibili", "end": "Fine", "endHint": "Se lasciato vuoto, verrà scaricato fino alla fine", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "Scarica video e audio da centinaia di siti", "title": "VidBee" }, - "audioExtract": { - "bad": "Cattivo", - "best": "Migliore", - "extract": "Estrai", - "good": "Buono", - "normal": "Normale", - "selectFormat": "Seleziona Formato", - "selectQuality": "Seleziona Qualità", - "title": "Estrai Audio", - "worst": "Peggiore" - }, "download": { "active": "Attivo", "all": "Tutto", @@ -123,6 +119,10 @@ "downloadBtn": "Scarica", "downloadPending": "In attesa", "downloadQueue": "Coda Download", + "customDownloadFolder": "Cartella di download personalizzata", + "autoFolderPlaceholder": "Cartella automatica (in base ai metadati)", + "autoFolderHint": "Le cartelle automatiche vengono create dai metadati.", + "useAutoFolder": "Usa cartella automatica", "downloadVideo": "Scarica Video", "downloading": "Scaricando...", "enterUrl": "Inserisci URL Video", @@ -130,44 +130,17 @@ "error": "Errore", "fetch": "Recupera", "fetchingVideoInfo": "Recupero informazioni video...", - "goToSettings": "Vai su Impostazioni", - "hideDetails": "Nascondi dettagli", "history": "Cronologia", "imageLoadError": "Errore nel caricamento dell'immagine", "imagePlaceholder": "Nessuna immagine disponibile", "infoUnavailable": "Download con Un Clic (Info non disponibile)", "loading": "Caricamento", - "metadata": { - "audioCodec": "Codec audio", - "codec": "Codec", - "completedAt": "Completato a", - "createdAt": "Creato a", - "description": "Descrizione", - "downloadPath": "Scarica il percorso", - "fileSize": "Dimensioni del file", - "format": "Formato", - "formatNote": "Nota sul formato", - "fps": "FPS", - "height": "Altezza", - "playlist": "Playlist", - "protocol": "Protocollo", - "quality": "Qualità", - "savedFile": "File salvato", - "source": "Fonte", - "speed": "Velocità", - "startedAt": "Iniziato alle", - "subscription": "Sottoscrizione", - "tags": "Tag", - "url": "URL di origine", - "videoCodec": "Codec video", - "views": "Viste", - "width": "Larghezza" - }, "moreOptions": "Più opzioni", "noActiveDownloads": "Nessun download attivo", "noAudio": "Nessun Audio", "noHistory": "Nessuna cronologia download", "noItems": "Nessun elemento trovato", + "goToSettings": "Vai su Impostazioni", "oneClickDownload": "Download con Un Clic", "oneClickDownloadDescription": "Scarica direttamente con impostazioni predefinite senza conferma", "oneClickDownloadEnabled": "Il download con un clic è abilitato. \nI download verranno avviati direttamente con le impostazioni predefinite.", @@ -176,14 +149,17 @@ "paste": "Incolla", "pastePlaylistUrl": "Clicca per incollare link playlist dagli appunti [Ctrl + V]", "pasteUrl": "Clicca per incollare URL video o ID [Ctrl + V]", + "pasteUrlButton": "Incolla URL", "preparing": "Preparazione...", "processing": "Elaborazione", "progress": "Progresso", - "selectAudioFormat": "Seleziona Formato Audio", - "selectFormat": "Seleziona Formato", - "selectVideoFormat": "Seleziona Formato Video", - "startDownload": "Avvia download", "showDetails": "Mostra dettagli", + "hideDetails": "Nascondi dettagli", + "selectAudioFormat": "Seleziona Formato Audio", + "selectDownloadType": "Seleziona tipo di download", + "selectFormat": "Seleziona Formato", + "startDownload": "Avvia download", + "selectVideoFormat": "Seleziona Formato Video", "singleVideo": "Video Singolo", "speed": "Velocità", "title": "Titolo", @@ -193,7 +169,52 @@ "urlPlaceholder": "https://www.youtube.com/watch?v=...", "video": "Video", "videoInfo": "Informazioni Video", - "videoInfoUpdated": "Informazioni video aggiornate" + "videoInfoUpdated": "Informazioni video aggiornate", + "metadata": { + "source": "Fonte", + "playlist": "Playlist", + "format": "Formato", + "quality": "Qualità", + "codec": "Codec", + "savedFile": "File salvato", + "url": "URL di origine", + "description": "Descrizione", + "views": "Viste", + "tags": "Tag", + "downloadPath": "Scarica il percorso", + "createdAt": "Creato a", + "startedAt": "Iniziato alle", + "completedAt": "Completato a", + "speed": "Velocità", + "fileSize": "Dimensioni del file", + "width": "Larghezza", + "height": "Altezza", + "fps": "FPS", + "videoCodec": "Codec video", + "audioCodec": "Codec audio", + "formatNote": "Nota sul formato", + "protocol": "Protocollo", + "subscription": "Sottoscrizione" + } + }, + "error": { + "title": "Qualcosa è andato storto", + "description": "Si è verificato un errore imprevisto. Ricarica l'app o segnala il problema se persiste.", + "message": "Messaggio di errore", + "unknownError": "Si è verificato un errore sconosciuto", + "goHome": "Vai alla home", + "reload": "Ricarica app", + "copyReport": "Copia rapporto errore", + "copied": "Copiato!", + "copySuccess": "Rapporto di errore copiato negli appunti", + "copyFailed": "Impossibile copiare il rapporto di errore", + "showDetails": "Mostra dettagli", + "hideDetails": "Nascondi dettagli", + "stackTrace": "Traccia dello stack", + "componentStack": "Stack dei componenti", + "noStackTrace": "Nessuna traccia dello stack disponibile", + "fullReport": "Rapporto di errore completo", + "helpText": "Se l'errore persiste, copia il rapporto di errore sopra e condividilo con il team di supporto. Le informazioni di contatto sono nella pagina Informazioni." }, "errors": { "clickToCopy": "Clicca per copiare i dettagli", @@ -203,6 +224,7 @@ "emptyUrl": "Inserisci un URL", "errorDetails": "Dettagli Errore", "fetchInfoFailed": "Errore nel recupero delle informazioni video", + "invalidUrl": "Il contenuto degli appunti non è un URL valido", "networkError": "Si è verificato un errore. Controlla la tua rete e usa un URL corretto", "pasteFromClipboard": "Errore nell'incollare dagli appunti" }, @@ -210,10 +232,23 @@ "clearCancelled": "Cancella Annullati", "clearCompleted": "Cancella Completati", "clearErrors": "Cancella Errori", + "clearAll": "Cancella tutta la cronologia", + "clearAllAction": "Cancella cronologia", + "clearSelection": "Cancella selezione", + "confirmClearAllTitle": "Cancellare tutta la cronologia?", + "confirmClearAllDescription": "Rimuovi {{count}} elementi dalla cronologia. I file rimangono sul disco.", + "confirmDeleteSelectedTitle": "Rimuovere gli elementi selezionati?", + "confirmDeleteSelectedDescription": "Rimuovi {{count}} elementi dalla cronologia. I file rimangono sul disco.", + "alsoDeleteFiles": "Elimina anche i file", + "confirmDeletePlaylistTitle": "Rimuovere la cronologia della playlist?", + "confirmDeletePlaylistDescription": "Rimuovi {{count}} elementi da {{title}} ed elimina i loro file.", "copyToClipboard": "Copia negli appunti", "copyUrl": "Copia URL", "date": "Data", + "deletePlaylist": "Rimuovi playlist", + "deleteSelected": "Rimuovi selezionati", "description": "Visualizza e gestisci la tua cronologia download", + "doneSelecting": "Fatto", "duration": "Durata", "fileSize": "Dimensione File", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "Apri Posizione File", "openFolder": "Apri Cartella", "openInBrowser": "Clicca per aprire nel browser", + "removeAction": "Rimuovi", "removeItem": "Rimuovi Elemento", + "select": "Seleziona", + "selectAll": "Seleziona tutto", + "selectVisible": "Seleziona visibili", + "selectItem": "Seleziona elemento", + "selectedCount": "{{count}} selezionati", + "selectionSummary": "{{selected}} di {{total}} visibili selezionati", "stats": { "cancelled": "Annullato", "completed": "Completato", @@ -247,9 +289,9 @@ "about": "Informazioni", "download": "Scarica", "playlist": "Scarica Playlist", - "preferences": "Preferenze", "rss": "RSS", "subscriptions": "Abbonamenti", + "preferences": "Preferenze", "supportedSites": "Siti Supportati", "theme": "Tema:" }, @@ -258,9 +300,15 @@ "downloadCompleted": "Download completato", "downloadFailed": "Download fallito", "downloadStarted": "Download iniziato", + "historyCleared": "Cronologia cancellata", + "historyClearFailed": "Impossibile cancellare la cronologia", "itemRemoved": "Elemento rimosso", + "itemsRemoved": "{{count}} elementi rimossi", + "itemsRemoveFailed": "Impossibile rimuovere gli elementi selezionati", "openFileFailed": "Errore nell'apertura del file", "openFolderFailed": "Errore nell'apertura della cartella", + "playlistHistoryRemoved": "Playlist rimossa e file eliminati", + "playlistHistoryRemoveFailed": "Impossibile rimuovere la cronologia della playlist", "removeFailed": "Errore nella rimozione dell'elemento", "settingsSaved": "Impostazioni salvate", "urlCopied": "URL copiato negli appunti", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "Playlist", "clearPreview": "Anteprima chiara", + "collapsedProgress": "Download playlist: {{completed}} / {{total}} completati", "comingSoon": "La funzionalità di download playlist arriverà presto!", "completed": "Playlist scaricata", "description": "Scarica tutti i video da una playlist o canale YouTube", @@ -284,8 +333,10 @@ "folderFormat": "Formato nome cartella per playlist", "foundVideos": "Trovati {{count}} video nella playlist", "groupActive": "{{count}} attivi", + "groupCollapse": "Comprimi", "groupErrors": "{{count}} non riuscito", - "groupSummary": "{{completato}} / {{totale}} completati", + "groupExpand": "Espandi", + "groupSummary": "{{completed}} / {{total}} completati", "linkLabel": "URL Playlist", "noEntries": "Nessun video trovato in questa playlist", "noEntriesInRange": "Nessun video nell'intervallo selezionato", @@ -294,12 +345,16 @@ "positionLabel": "Articolo {{index}} di {{total}}", "previewButton": "Anteprima della playlist", "previewFailed": "Impossibile visualizzare l'anteprima della playlist", - "previewRequired": "Anteprima della playlist prima del download.", "previewSummary": "Anteprima degli elementi della playlist prima del download.", + "previewRequired": "Anteprima della playlist prima del download.", "range": "Intervallo (Opzionale)", "resetToDefault": "Ripristina predefinito", - "selectedRange": "Intervallo: {{inizio}}-{{fine}}", + "selectedRange": "Intervallo: {{start}}-{{end}}", + "selectedVideos": "{{count}} selezionati", + "downloadCurrentRange": "Scarica selezionati", "showingCount": "Visualizzazione di {{count}} video", + "selectEntry": "Seleziona voce {{index}}", + "noEntriesSelected": "Nessuna voce selezionata", "startIndex": "Inizio (1)", "title": "Scarica Playlist", "totalVideos": "Video totali: {{count}}", @@ -312,39 +367,61 @@ "audio": "Preferenze Audio", "browserForCookies": "Seleziona browser per usare i cookie", "browserForCookiesDescription": "Browser per estrarre i cookie per l'autenticazione", + "browserForCookiesProfile": "Nome profilo o percorso", + "browserForCookiesProfileDescription": "Percorso del profilo per il browser selezionato sopra. Compilato automaticamente quando possibile.", + "browserForCookiesProfilePlaceholder": "Nome profilo o percorso completo (opzionale)", + "browserForCookiesProfileInvalid": "Il percorso del profilo non è valido. Scegli la cartella del profilo del browser selezionato.", + "browserForCookiesProfileInvalidPath": "Quella cartella non esiste. Scegli una cartella del profilo esistente.", + "browserForCookiesProfileInvalidProfile": "Nome profilo non trovato nella posizione predefinita del browser.", + "browserForCookiesProfileInvalidUnsupported": "Nessuna posizione di profilo predefinita nota per questo browser su questa piattaforma.", + "browserForCookiesProfileInvalidEmpty": "Inserisci un percorso del profilo per il browser selezionato.", + "cookiesFile": "Archivio dei cookie", + "cookiesFileDescription": "File cookie formattato per Netscape da caricare per l'autenticazione", + "clearCookiesFile": "Chiaro", + "cookiesHelpTitle": "Utilizzo dei cookie", + "cookiesHelpBrowser": "Scegli il tuo browser qui sopra per riutilizzare automaticamente la sessione a cui hai effettuato l'accesso.", + "cookiesHelpFile": "Esporta un file cookie di Netscape (vedi le FAQ yt-dlp) e selezionalo qui quando necessario.", + "cookiesHelpFaq": "Apri le domande frequenti sui cookie yt-dlp", + "openLinkError": "Impossibile aprire il collegamento", "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, - "clearConfigFile": "Chiaro", - "clearCookiesFile": "Chiaro", "configFile": "Usa file di configurazione", "configFileDescription": "File di configurazione personalizzato per yt-dlp", - "cookiesFile": "Archivio dei cookie", - "cookiesFileDescription": "File cookie formattato per Netscape da caricare per l'autenticazione", - "cookiesHelpBrowser": "Scegli il tuo browser qui sopra per riutilizzare automaticamente la sessione a cui hai effettuato l'accesso.", - "cookiesHelpFaq": "Apri le domande frequenti sui cookie yt-dlp", - "cookiesHelpFile": "Esporta un file cookie di Netscape (vedi le FAQ yt-dlp) e selezionalo qui quando necessario.", - "cookiesHelpTitle": "Utilizzo dei cookie", + "clearConfigFile": "Chiaro", "dark": "Scuro", "description": "Configura le tue preferenze di download e impostazioni dell'app", "directorySelectError": "Errore nella selezione della directory", "downloadPath": "Posizione download", "downloadPathDescription": "Scegli dove salvare i file scaricati", - "enableAnalytics": "Aiutaci a migliorare VidBee", - "enableAnalyticsDescription": "Condividi dati di utilizzo anonimi per aiutarci a capire come viene utilizzata l'app e dare priorità ai miglioramenti.", "fileSelectError": "Errore nella selezione del file", "general": "Generale", + "language": "Lingua", + "languageDescription": "Scegli la lingua preferita per l'interfaccia dell'applicazione", + "light": "Chiaro", "hideDockIcon": "Nascondi l'icona del Dock", "hideDockIconDescription": "Rimuovi VidBee dal Dock di macOS. \nUtilizza la barra dei menu o l'icona nella barra delle applicazioni per riaprire l'app.", - "language": "Lingua", "launchAtLogin": "Avvia all'avvio", "launchAtLoginDescription": "Apri VidBee automaticamente dopo aver effettuato l'accesso al tuo computer.", "launchAtLoginUnsupported": "L'avvio automatico è disponibile solo su macOS e Windows.", - "light": "Chiaro", + "enableAnalytics": "Aiutaci a migliorare VidBee", + "enableAnalyticsDescription": "Condividi dati di utilizzo anonimi per aiutarci a capire come viene utilizzata l'app e dare priorità ai miglioramenti.", + "embedChapters": "Incorpora capitoli", + "embedChaptersDescription": "Aggiungi marcatori di capitolo al file quando disponibili", + "embedMetadata": "Incorpora metadati", + "embedMetadataDescription": "Scrivi titolo, artista e altri metadati quando disponibili", + "embedSubs": "Incorpora sottotitoli", + "embedSubsDescription": "Incorpora i sottotitoli nel file video (mp4, webm, mkv)", + "embedThumbnail": "Incorpora miniatura", + "embedThumbnailDescription": "Aggiungi la miniatura come copertina", "maxConcurrentDownloads": "Numero massimo di download attivi", "maxConcurrentDownloadsDescription": "Numero massimo di download simultanei", "none": "Nessuno", @@ -362,7 +439,6 @@ "normal": "Normale", "worst": "Peggiore" }, - "openLinkError": "Impossibile aprire il collegamento", "proxy": "Proxy", "proxyDescription": "Server proxy per le richieste di rete", "proxyPlaceholder": "http://proxy:port", @@ -383,6 +459,119 @@ }, "video": "Preferenze Video" }, + "subscriptions": { + "title": "Abbonamenti", + "subtitle": "{{count}} abbonamento{{count, plural, one {} other {s}}}", + "description": "Monitora automaticamente i feed RSS e accoda i nuovi download senza lavoro manuale.", + "defaults": { + "title": "Impostazioni predefinite dell'automazione", + "description": "Controlla dove vengono archiviati i download degli abbonamenti e la frequenza con cui VidBee verifica la presenza di nuovi video.", + "downloadDirectory": "Scarica la directory", + "filenameTemplate": "Modello nome file (solo file)", + "onlyLatest": "Scarica solo il video più recente", + "onlyLatestDescription": "Se abilitato, VidBee salta gli elementi del backlog più vecchi e acquisisce solo il caricamento più recente." + }, + "add": { + "title": "Aggiungi RSS", + "description": "Incolla un collegamento al feed RSS. \nVidBee rileverà automaticamente il feed." + }, + "fields": { + "url": "URL del feed", + "keywords": "Filtro parole chiave (separati da virgole)", + "tags": "Tag automatici", + "customDirectory": "Directory personalizzata", + "namingTemplate": "Modello nome file personalizzato (solo file)", + "onlyLatest": "Scarica solo il video più recente", + "onlyLatestDescription": "Ignora gli elementi del backlog e recupera solo il caricamento più recente da questo feed.", + "enabled": "Abilitato", + "disabled": "Disabilitato", + "onlyLatestShort": "Solo più recente" + }, + "placeholders": { + "url": "https://rsshub.app/youtube/user/@FKJ" + }, + "actions": { + "add": "Aggiungere", + "refresh": "Aggiorna", + "edit": "Modificare", + "remove": "Rimuovere", + "save": "Salva modifiche", + "selectDirectory": "Sfoglia", + "enable": "Abilitare", + "disable": "Disabilita" + }, + "items": { + "title": "Ultimi caricamenti ({{count}})", + "count": "{{count}} articoli", + "empty": "Nessun elemento del feed recente trovato.", + "status": { + "queued": "In coda", + "notQueued": "Non in coda", + "pending": "In attesa di", + "downloading": "Download in corso", + "processing": "Elaborazione", + "completed": "Completato", + "error": "Fallito", + "cancelled": "Annullato" + }, + "fromChannel": "Da {{channel}}", + "tooltip": { + "downloadStatus": "Stato del download: {{status}}", + "downloadPending": "In attesa dei dettagli per il download...", + "notQueued": "Non ancora nella coda di download" + }, + "actions": { + "open": "Apri nel browser", + "queue": "Aggiungi alla coda di download" + } + }, + "labels": { + "subscription": "Sottoscrizione", + "unknown": "Abbonamento sconosciuto", + "noThumbnail": "Nessuna miniatura" + }, + "notifications": { + "directoryError": "Impossibile aprire il selettore di directory.", + "missingUrl": "Incolla prima il collegamento al canale.", + "created": "Abbonamento aggiunto", + "createError": "Impossibile aggiungere l'abbonamento.", + "refreshStarted": "Aggiornamento avviato", + "removed": "Abbonamento rimosso", + "updated": "Abbonamento aggiornato", + "itemQueued": "Aggiunto alla coda di download", + "itemAlreadyQueued": "Questo video è già in coda", + "queueError": "Impossibile aggiungere alla coda di download.", + "openLinkError": "Impossibile aprire il collegamento video.", + "resolveError": "Impossibile risolvere l'URL del feed RSS." + }, + "detectedFeed": "Feed {{platform}} rilevato -> {{feed}}", + "detecting": "Rilevamento alimentazione...", + "latestVideo": "Ultimo video: {{title}}", + "lastChecked": "Ultimo controllo: {{time}}", + "never": "Mai", + "empty": "Nessun abbonamento ancora. \nAggiungi i tuoi canali preferiti per avviare il download automatico.", + "edit": { + "title": "Modifica {{name}}", + "description": "Modifica filtri, tag e sostituzioni per questo feed." + }, + "status": { + "title": "Stato", + "up-to-date": "Aggiornato", + "checking": "Controllo", + "failed": "Fallito", + "idle": "Oziare", + "tooltip": { + "updatedAt": "Aggiornato: {{time}}" + } + }, + "rssHub": { + "title": "Abbonamenti automatizzati con RSSHub", + "description": "Combina VidBee con RSSHub per abilitare abbonamenti e download automatizzati da varie piattaforme. \nUna volta configurato, VidBee viene eseguito in background e scarica automaticamente i video e i contenuti più recenti.", + "learnMore": "Ulteriori informazioni su RSSHub", + "openDocs": "Apri la documentazione RSSHub", + "hint": "Non hai l'URL del feed RSS? \nUtilizza RSSHub per generare feed RSS per YouTube, Twitter e migliaia di altre piattaforme." + } + }, "sites": { "homeInlineDescription": "Supporta {{sites}} e altro.", "moreDescription": "La lista completa yt-dlp viene aggiornata costantemente dalla comunità.", @@ -467,118 +656,5 @@ }, "popularSection": "Piattaforme principali", "viewAll": "Visualizza tutti i siti supportati" - }, - "subscriptions": { - "actions": { - "add": "Aggiungere", - "disable": "Disabilita", - "edit": "Modificare", - "enable": "Abilitare", - "refresh": "Aggiorna", - "remove": "Rimuovere", - "save": "Salva modifiche", - "selectDirectory": "Sfoglia" - }, - "add": { - "description": "Incolla un collegamento al feed RSS. \nVidBee rileverà automaticamente il feed.", - "title": "Aggiungi RSS" - }, - "defaults": { - "description": "Controlla dove vengono archiviati i download degli abbonamenti e la frequenza con cui VidBee verifica la presenza di nuovi video.", - "downloadDirectory": "Scarica la directory", - "filenameTemplate": "Modello nome file (solo file)", - "onlyLatest": "Scarica solo il video più recente", - "onlyLatestDescription": "Se abilitato, VidBee salta gli elementi del backlog più vecchi e acquisisce solo il caricamento più recente.", - "title": "Impostazioni predefinite dell'automazione" - }, - "description": "Monitora automaticamente i feed RSS e accoda i nuovi download senza lavoro manuale.", - "detectedFeed": "Feed {{platform}} rilevato -> {{feed}}", - "detecting": "Rilevamento alimentazione...", - "edit": { - "description": "Modifica filtri, tag e sostituzioni per questo feed.", - "title": "Modifica {{nome}}" - }, - "empty": "Nessun abbonamento ancora. \nAggiungi i tuoi canali preferiti per avviare il download automatico.", - "fields": { - "customDirectory": "Directory personalizzata", - "disabled": "Disabilitato", - "enabled": "Abilitato", - "keywords": "Filtro parole chiave (separati da virgole)", - "namingTemplate": "Modello nome file personalizzato (solo file)", - "onlyLatest": "Scarica solo il video più recente", - "onlyLatestDescription": "Ignora gli elementi del backlog e recupera solo il caricamento più recente da questo feed.", - "onlyLatestShort": "Solo più recente", - "tags": "Tag automatici", - "url": "URL del feed" - }, - "items": { - "actions": { - "open": "Apri nel browser", - "queue": "Aggiungi alla coda di download" - }, - "count": "{{count}} articoli", - "empty": "Nessun elemento del feed recente trovato.", - "fromChannel": "Da {{canale}}", - "status": { - "cancelled": "Annullato", - "completed": "Completato", - "downloading": "Download in corso", - "error": "Fallito", - "notQueued": "Non in coda", - "pending": "In attesa di", - "processing": "Elaborazione", - "queued": "In coda" - }, - "title": "Ultimi caricamenti ({{count}})", - "tooltip": { - "downloadPending": "In attesa dei dettagli per il download...", - "downloadStatus": "Stato del download: {{status}}", - "notQueued": "Non ancora nella coda di download" - } - }, - "labels": { - "noThumbnail": "Nessuna miniatura", - "subscription": "Sottoscrizione", - "unknown": "Abbonamento sconosciuto" - }, - "lastChecked": "Ultimo controllo: {{time}}", - "latestVideo": "Ultimo video: {{title}}", - "never": "Mai", - "notifications": { - "createError": "Impossibile aggiungere l'abbonamento.", - "created": "Abbonamento aggiunto", - "directoryError": "Impossibile aprire il selettore di directory.", - "itemAlreadyQueued": "Questo video è già in coda", - "itemQueued": "Aggiunto alla coda di download", - "missingUrl": "Incolla prima il collegamento al canale.", - "openLinkError": "Impossibile aprire il collegamento video.", - "queueError": "Impossibile aggiungere alla coda di download.", - "refreshStarted": "Aggiornamento avviato", - "removed": "Abbonamento rimosso", - "resolveError": "Impossibile risolvere l'URL del feed RSS.", - "updated": "Abbonamento aggiornato" - }, - "placeholders": { - "url": "https://rsshub.app/youtube/user/@FKJ" - }, - "rssHub": { - "description": "Combina VidBee con RSSHub per abilitare abbonamenti e download automatizzati da varie piattaforme. \nUna volta configurato, VidBee viene eseguito in background e scarica automaticamente i video e i contenuti più recenti.", - "hint": "Non hai l'URL del feed RSS? \nUtilizza RSSHub per generare feed RSS per YouTube, Twitter e migliaia di altre piattaforme.", - "learnMore": "Ulteriori informazioni su RSSHub", - "openDocs": "Apri la documentazione RSSHub", - "title": "Abbonamenti automatizzati con RSSHub" - }, - "status": { - "checking": "Controllo", - "failed": "Fallito", - "idle": "Oziare", - "title": "Stato", - "tooltip": { - "updatedAt": "Aggiornato: {{time}}" - }, - "up-to-date": "Aggiornato" - }, - "subtitle": "{{count}} abbonamento{{count, plural, one {} other {s}}}", - "title": "Abbonamenti" } } diff --git a/src/renderer/src/locales/ja.json b/src/renderer/src/locales/ja.json index c67ab1e..7c7bba2 100644 --- a/src/renderer/src/locales/ja.json +++ b/src/renderer/src/locales/ja.json @@ -16,7 +16,6 @@ "betaProgramDescription": "他の人より先に早期ビルドと今後の機能を受け取ります。", "betaProgramTitle": "プレビューチャンネル", "description": "VidBeeはElectronで構築され、yt-dlpによって動力を得る無料のオープンソースダウンローダーです。", - "downloadingUpdate": "アップデートをダウンロードしています", "followAuthorActions": { "follow": "@nexmoexをフォロー" }, @@ -25,12 +24,6 @@ "followAuthorTitle": "開発者をフォロー", "here": "ここ", "homepage": "ホームページ", - "latestVersionBadge": "最新: v{{version}}", - "latestVersionStatus": { - "available": "新しいバージョンが利用可能", - "error": "最新バージョンを取得できません", - "uptodate": "最新バージョンを使用中" - }, "notifications": { "checkingUpdates": "アップデートを検索中...", "downloadError": "アップデートのダウンロードに失敗", @@ -38,14 +31,14 @@ "downloadUpdate": "アップデート{{version}}をダウンロードしてインストールしますか?", "manualDownloadAction": "今すぐダウンロード", "noUpdatesAvailable": "最新バージョンを使用しています", - "restartNowAction": "今すぐ再起動してください", "restartToUpdate": "今すぐ再起動してアップデートをインストールしますか?", - "unknownErrorFallback": "不明なエラー", + "restartNowAction": "今すぐ再起動してください", "updateAvailable": "利用可能なアップデート:{{version}}", "updateAvailableMessage": "新しいバージョン {{version}} が利用可能です。\n公式サイトからダウンロードしてください。", "updateDownloaded": "アップデートがダウンロードされました。再起動してインストールしてください", "updateDownloadedVersion": "アップデート {{version}} をダウンロードしました。再起動してインストールしてください", - "updateError": "アップデートの確認に失敗:{{error}}" + "updateError": "アップデートの確認に失敗:{{error}}", + "unknownErrorFallback": "不明なエラー" }, "preferencesDescription": "このページを離れることなくアップデート設定を調整します。", "preferencesTitle": "クイックトグル", @@ -58,6 +51,12 @@ "documentationDescription": "ガイド、FAQ、一般的なワークフロー。", "feedback": "フィードバックと問題", "feedbackDescription": "GitHubでアイデアを共有したり問題を報告したりしてください。", + "githubIssues": "GitHub", + "githubIssuesDescription": "GitHub でバグ報告や機能要望を送ってください。", + "xFeedback": "Twitter", + "xFeedbackDescription": "X で @nexmoex に言及してフィードバックや提案を共有してください。", + "discord": "Discord", + "discordDescription": "Discord コミュニティに参加して、議論やサポートを受けてください。", "license": "ライセンス", "licenseDescription": "オープンソースライセンス条項を確認してください。", "website": "公式ウェブサイト", @@ -76,13 +75,21 @@ "sourceCode": "ソースコードが利用可能", "title": "について", "version": "バージョン", - "versionLabel": "v{{version}}" + "versionLabel": "v{{version}}", + "latestVersionBadge": "最新: v{{version}}", + "latestVersionStatus": { + "available": "新しいバージョンが利用可能", + "uptodate": "最新バージョンを使用中", + "error": "最新バージョンを取得できません" + }, + "downloadingUpdate": "アップデートをダウンロードしています" }, "advancedOptions": { "closeWhenDone": "ダウンロード完了時にアプリを閉じる", "currentLocation": "現在のダウンロード場所 - ", "downloadLocation": "ダウンロード場所", "downloadSubs": "利用可能な場合は字幕をダウンロード", + "downloadSubsHint": "利用可能な場合は字幕を別ファイルとして保存", "end": "終了", "endHint": "空のままにすると最後までダウンロードされます", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "数百のサイトからビデオとオーディオをダウンロード", "title": "VidBee" }, - "audioExtract": { - "bad": "悪い", - "best": "最高", - "extract": "抽出", - "good": "良い", - "normal": "通常", - "selectFormat": "フォーマットを選択", - "selectQuality": "品質を選択", - "title": "オーディオを抽出", - "worst": "最悪" - }, "download": { "active": "アクティブ", "all": "すべて", @@ -123,6 +119,10 @@ "downloadBtn": "ダウンロード", "downloadPending": "保留中", "downloadQueue": "ダウンロードキュー", + "customDownloadFolder": "カスタムダウンロードフォルダー", + "autoFolderPlaceholder": "自動フォルダー(メタデータに基づく)", + "autoFolderHint": "自動フォルダーはメタデータから作成されます。", + "useAutoFolder": "自動フォルダーを使用", "downloadVideo": "ビデオをダウンロード", "downloading": "ダウンロード中...", "enterUrl": "ビデオURLを入力", @@ -130,44 +130,17 @@ "error": "エラー", "fetch": "取得", "fetchingVideoInfo": "ビデオ情報を取得中...", - "goToSettings": "設定に移動", - "hideDetails": "詳細を隠す", "history": "履歴", "imageLoadError": "画像の読み込みに失敗", "imagePlaceholder": "利用可能な画像なし", "infoUnavailable": "ワンクリックダウンロード(情報利用不可)", "loading": "読み込み中", - "metadata": { - "audioCodec": "オーディオコーデック", - "codec": "コーデック", - "completedAt": "完了時刻", - "createdAt": "で作成されました", - "description": "説明", - "downloadPath": "ダウンロードパス", - "fileSize": "ファイルサイズ", - "format": "形式", - "formatNote": "メモのフォーマット", - "fps": "FPS", - "height": "身長", - "playlist": "プレイリスト", - "protocol": "プロトコル", - "quality": "品質", - "savedFile": "保存されたファイル", - "source": "ソース", - "speed": "スピード", - "startedAt": "に開始", - "subscription": "サブスクリプション", - "tags": "タグ", - "url": "ソースURL", - "videoCodec": "ビデオコーデック", - "views": "ビュー", - "width": "幅" - }, "moreOptions": "その他のオプション", "noActiveDownloads": "アクティブなダウンロードなし", "noAudio": "オーディオなし", "noHistory": "ダウンロード履歴なし", "noItems": "アイテムが見つかりません", + "goToSettings": "設定に移動", "oneClickDownload": "ワンクリックダウンロード", "oneClickDownloadDescription": "確認なしでデフォルト設定で直接ダウンロード", "oneClickDownloadEnabled": "ワンクリックダウンロードが有効になります。\nダウンロードはデフォルト設定で直接開始されます。", @@ -176,14 +149,17 @@ "paste": "貼り付け", "pastePlaylistUrl": "クリップボードからプレイリストリンクを貼り付け [Ctrl + V]", "pasteUrl": "ビデオURLまたはIDを貼り付け [Ctrl + V]", + "pasteUrlButton": "URL を貼り付け", "preparing": "準備中...", "processing": "処理中", "progress": "進行状況", - "selectAudioFormat": "オーディオフォーマットを選択", - "selectFormat": "フォーマットを選択", - "selectVideoFormat": "ビデオフォーマットを選択", - "startDownload": "ダウンロードを開始", "showDetails": "詳細を表示", + "hideDetails": "詳細を隠す", + "selectAudioFormat": "オーディオフォーマットを選択", + "selectDownloadType": "ダウンロードの種類を選択", + "selectFormat": "フォーマットを選択", + "startDownload": "ダウンロードを開始", + "selectVideoFormat": "ビデオフォーマットを選択", "singleVideo": "単一ビデオ", "speed": "速度", "title": "タイトル", @@ -193,7 +169,52 @@ "urlPlaceholder": "https://www.youtube.com/watch?v=...", "video": "ビデオ", "videoInfo": "ビデオ情報", - "videoInfoUpdated": "ビデオ情報が更新されました" + "videoInfoUpdated": "ビデオ情報が更新されました", + "metadata": { + "source": "ソース", + "playlist": "プレイリスト", + "format": "形式", + "quality": "品質", + "codec": "コーデック", + "savedFile": "保存されたファイル", + "url": "ソースURL", + "description": "説明", + "views": "ビュー", + "tags": "タグ", + "downloadPath": "ダウンロードパス", + "createdAt": "で作成されました", + "startedAt": "に開始", + "completedAt": "完了時刻", + "speed": "スピード", + "fileSize": "ファイルサイズ", + "width": "幅", + "height": "身長", + "fps": "FPS", + "videoCodec": "ビデオコーデック", + "audioCodec": "オーディオコーデック", + "formatNote": "メモのフォーマット", + "protocol": "プロトコル", + "subscription": "サブスクリプション" + } + }, + "error": { + "title": "問題が発生しました", + "description": "予期しないエラーが発生しました。アプリを再読み込みするか、問題が続く場合は報告してください。", + "message": "エラーメッセージ", + "unknownError": "不明なエラーが発生しました", + "goHome": "ホームへ", + "reload": "アプリを再読み込み", + "copyReport": "エラーレポートをコピー", + "copied": "コピーしました!", + "copySuccess": "エラーレポートをクリップボードにコピーしました", + "copyFailed": "エラーレポートのコピーに失敗しました", + "showDetails": "詳細を表示", + "hideDetails": "詳細を非表示", + "stackTrace": "スタックトレース", + "componentStack": "コンポーネントスタック", + "noStackTrace": "利用可能なスタックトレースはありません", + "fullReport": "完全なエラーレポート", + "helpText": "このエラーが続く場合は、上記のエラーレポートをコピーしてサポートチームに共有してください。連絡先は「概要」ページにあります。" }, "errors": { "clickToCopy": "詳細をコピーするにはクリック", @@ -203,6 +224,7 @@ "emptyUrl": "URLを入力してください", "errorDetails": "エラーの詳細", "fetchInfoFailed": "ビデオ情報の取得に失敗", + "invalidUrl": "クリップボードの内容が有効なURLではありません", "networkError": "エラーが発生しました。ネットワークを確認し、正しいURLを使用してください", "pasteFromClipboard": "クリップボードからの貼り付けに失敗" }, @@ -210,10 +232,23 @@ "clearCancelled": "キャンセル済みをクリア", "clearCompleted": "完了をクリア", "clearErrors": "エラーをクリア", + "clearAll": "履歴をすべてクリア", + "clearAllAction": "履歴をクリア", + "clearSelection": "選択をクリア", + "confirmClearAllTitle": "履歴をすべてクリアしますか?", + "confirmClearAllDescription": "履歴から {{count}} 件を削除します。ファイルはディスクに残ります。", + "confirmDeleteSelectedTitle": "選択した項目を削除しますか?", + "confirmDeleteSelectedDescription": "履歴から {{count}} 件を削除します。ファイルはディスクに残ります。", + "alsoDeleteFiles": "ファイルも削除", + "confirmDeletePlaylistTitle": "プレイリスト履歴を削除しますか?", + "confirmDeletePlaylistDescription": "{{title}} から {{count}} 件を削除し、ファイルを削除します。", "copyToClipboard": "クリップボードにコピー", "copyUrl": "URLをコピー", "date": "日付", + "deletePlaylist": "プレイリストを削除", + "deleteSelected": "選択した項目を削除", "description": "ダウンロード履歴を表示および管理", + "doneSelecting": "完了", "duration": "期間", "fileSize": "ファイルサイズ", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "ファイルの場所を開く", "openFolder": "フォルダを開く", "openInBrowser": "ブラウザで開くにはクリック", + "removeAction": "削除", "removeItem": "アイテムを削除", + "select": "選択", + "selectAll": "すべて選択", + "selectVisible": "表示中を選択", + "selectItem": "項目を選択", + "selectedCount": "{{count}} 件選択", + "selectionSummary": "{{total}} 件中 {{selected}} 件を選択", "stats": { "cancelled": "キャンセル済み", "completed": "完了", @@ -247,9 +289,9 @@ "about": "について", "download": "ダウンロード", "playlist": "プレイリストをダウンロード", - "preferences": "設定", "rss": "RSS", "subscriptions": "定期購入", + "preferences": "設定", "supportedSites": "サポートされているサイト", "theme": "テーマ:" }, @@ -258,9 +300,15 @@ "downloadCompleted": "ダウンロード完了", "downloadFailed": "ダウンロードに失敗", "downloadStarted": "ダウンロード開始", + "historyCleared": "履歴をクリアしました", + "historyClearFailed": "履歴のクリアに失敗しました", "itemRemoved": "アイテムが削除されました", + "itemsRemoved": "{{count}} 件を削除しました", + "itemsRemoveFailed": "選択した項目の削除に失敗しました", "openFileFailed": "ファイルの開封に失敗", "openFolderFailed": "フォルダの開封に失敗", + "playlistHistoryRemoved": "プレイリストを削除し、ファイルを削除しました", + "playlistHistoryRemoveFailed": "プレイリスト履歴の削除に失敗しました", "removeFailed": "アイテムの削除に失敗", "settingsSaved": "設定が保存されました", "urlCopied": "URLがクリップボードにコピーされました", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "プレイリスト", "clearPreview": "プレビューをクリアする", + "collapsedProgress": "プレイリストをダウンロード中: {{completed}} / {{total}} 完了", "comingSoon": "プレイリストダウンロード機能がまもなく登場します!", "completed": "プレイリストがダウンロードされました", "description": "YouTubeプレイリストまたはチャンネルからすべてのビデオをダウンロード", @@ -284,8 +333,10 @@ "folderFormat": "プレイリスト用フォルダ名フォーマット", "foundVideos": "プレイリストで{{count}}個のビデオを発見", "groupActive": "{{count}} 個がアクティブです", + "groupCollapse": "折りたたむ", "groupErrors": "{{count}} 回失敗しました", - "groupSummary": "{{完了}} / {{合計}} 完了", + "groupExpand": "展開", + "groupSummary": "{{completed}} / {{total}} 完了", "linkLabel": "プレイリストURL", "noEntries": "このプレイリストにはビデオが見つかりませんでした", "noEntriesInRange": "選択した範囲にビデオがありません", @@ -294,12 +345,16 @@ "positionLabel": "{{total}} 中のアイテム {{index}}", "previewButton": "プレイリストをプレビューする", "previewFailed": "プレイリストのプレビューに失敗しました", - "previewRequired": "ダウンロードする前にプレイリストをプレビューします。", "previewSummary": "ダウンロードする前にプレイリスト項目をプレビューします。", + "previewRequired": "ダウンロードする前にプレイリストをプレビューします。", "range": "範囲(オプション)", "resetToDefault": "デフォルトにリセット", - "selectedRange": "範囲: {{開始}}-{{終了}}", + "selectedRange": "範囲: {{start}}-{{end}}", + "selectedVideos": "{{count}} 件選択", + "downloadCurrentRange": "選択項目をダウンロード", "showingCount": "{{count}} 本の動画を表示しています", + "selectEntry": "項目 {{index}} を選択", + "noEntriesSelected": "選択された項目はありません", "startIndex": "開始(1)", "title": "プレイリストをダウンロード", "totalVideos": "合計動画: {{count}}", @@ -312,39 +367,61 @@ "audio": "オーディオ設定", "browserForCookies": "Cookieに使用するブラウザを選択", "browserForCookiesDescription": "認証用のCookieを抽出するブラウザ", + "browserForCookiesProfile": "プロファイル名またはパス", + "browserForCookiesProfileDescription": "上で選択したブラウザのプロファイルパス。可能な場合は自動入力されます。", + "browserForCookiesProfilePlaceholder": "プロファイル名または完全なパス(任意)", + "browserForCookiesProfileInvalid": "プロファイルパスが無効です。選択したブラウザのプロファイルフォルダーを選んでください。", + "browserForCookiesProfileInvalidPath": "そのフォルダーは存在しません。既存のプロファイルフォルダーを選んでください。", + "browserForCookiesProfileInvalidProfile": "既定のブラウザ場所にプロファイル名が見つかりません。", + "browserForCookiesProfileInvalidUnsupported": "このプラットフォームではこのブラウザの既定のプロファイル場所が不明です。", + "browserForCookiesProfileInvalidEmpty": "選択したブラウザのプロファイルパスを入力してください。", + "cookiesFile": "クッキーファイル", + "cookiesFileDescription": "認証のためにロードする Netscape 形式の Cookie ファイル", + "clearCookiesFile": "クリア", + "cookiesHelpTitle": "クッキーの使用", + "cookiesHelpBrowser": "サインイン セッションを自動的に再利用するには、上記のブラウザーを選択してください。", + "cookiesHelpFile": "Netscape Cookie ファイルをエクスポートし (yt-dlp FAQ を参照)、必要に応じてここで選択します。", + "cookiesHelpFaq": "yt-dlp Cookie を開くに関するよくある質問", + "openLinkError": "リンクを開けませんでした", "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, - "clearConfigFile": "クリア", - "clearCookiesFile": "クリア", "configFile": "設定ファイルを使用", "configFileDescription": "yt-dlp用のカスタム設定ファイル", - "cookiesFile": "クッキーファイル", - "cookiesFileDescription": "認証のためにロードする Netscape 形式の Cookie ファイル", - "cookiesHelpBrowser": "サインイン セッションを自動的に再利用するには、上記のブラウザーを選択してください。", - "cookiesHelpFaq": "yt-dlp Cookie を開くに関するよくある質問", - "cookiesHelpFile": "Netscape Cookie ファイルをエクスポートし (yt-dlp FAQ を参照)、必要に応じてここで選択します。", - "cookiesHelpTitle": "クッキーの使用", + "clearConfigFile": "クリア", "dark": "ダーク", "description": "ダウンロード設定とアプリ設定を構成", "directorySelectError": "ディレクトリの選択に失敗", "downloadPath": "ダウンロード場所", "downloadPathDescription": "ダウンロードファイルの保存場所を選択", - "enableAnalytics": "VidBee の改善にご協力ください", - "enableAnalyticsDescription": "匿名の使用状況データを共有することで、アプリの使用状況を把握し、改善の優先順位を付けることができます。", "fileSelectError": "ファイルの選択に失敗", "general": "一般", + "language": "言語", + "languageDescription": "アプリのインターフェースに使用する言語を選択してください", + "light": "ライト", "hideDockIcon": "ドックアイコンを非表示にする", "hideDockIconDescription": "VidBee を macOS Dock から削除します。\nメニュー バーまたはトレイ アイコンを使用して、アプリを再度開きます。", - "language": "言語", "launchAtLogin": "起動時に起動する", "launchAtLoginDescription": "コンピューターにサインインした後、VidBee を自動的に開きます。", "launchAtLoginUnsupported": "自動起動は macOS と Windows でのみ利用できます。", - "light": "ライト", + "enableAnalytics": "VidBee の改善にご協力ください", + "enableAnalyticsDescription": "匿名の使用状況データを共有することで、アプリの使用状況を把握し、改善の優先順位を付けることができます。", + "embedChapters": "チャプターを埋め込む", + "embedChaptersDescription": "利用可能な場合はファイルにチャプターマーカーを追加", + "embedMetadata": "メタデータを埋め込む", + "embedMetadataDescription": "利用可能な場合はタイトルやアーティストなどのメタデータを書き込む", + "embedSubs": "字幕を埋め込む", + "embedSubsDescription": "字幕を動画ファイルに埋め込む(mp4、webm、mkv)", + "embedThumbnail": "サムネイルを埋め込む", + "embedThumbnailDescription": "サムネイルをカバーアートとして追加", "maxConcurrentDownloads": "最大アクティブダウンロード数", "maxConcurrentDownloadsDescription": "最大同時ダウンロード数", "none": "なし", @@ -362,7 +439,6 @@ "normal": "通常", "worst": "最悪" }, - "openLinkError": "リンクを開けませんでした", "proxy": "プロキシ", "proxyDescription": "ネットワークリクエスト用のプロキシサーバー", "proxyPlaceholder": "http://proxy:port", @@ -383,6 +459,119 @@ }, "video": "ビデオ設定" }, + "subscriptions": { + "title": "定期購入", + "subtitle": "{{count}} 件のサブスクリプション{{count、複数、one {} other {s}}}", + "description": "RSS フィードを自動的に監視し、手動作業なしで新しいダウンロードをキューに追加します。", + "defaults": { + "title": "自動化のデフォルト", + "description": "サブスクリプションのダウンロードが保存される場所と、VidBee が新しいビデオをチェックする頻度を制御します。", + "downloadDirectory": "ダウンロードディレクトリ", + "filenameTemplate": "ファイル名のテンプレート (ファイルのみ)", + "onlyLatest": "最新のビデオのみをダウンロードする", + "onlyLatestDescription": "有効にすると、VidBee は古いバックログ項目をスキップし、最新のアップロードのみを取得します。" + }, + "add": { + "title": "RSSを追加", + "description": "RSS フィードのリンクを貼り付けます。 \nVidBee はフィードを自動的に検出します。" + }, + "fields": { + "url": "フィード URL", + "keywords": "キーワードフィルター (カンマ区切り)", + "tags": "自動タグ", + "customDirectory": "カスタムディレクトリ", + "namingTemplate": "カスタム ファイル名テンプレート (ファイルのみ)", + "onlyLatest": "最新のビデオのみをダウンロードする", + "onlyLatestDescription": "バックログ項目を無視し、このフィードから最新のアップロードのみを取得します。", + "enabled": "有効", + "disabled": "無効", + "onlyLatestShort": "最新のもののみ" + }, + "placeholders": { + "url": "https://rsshub.app/youtube/user/@FKJ" + }, + "actions": { + "add": "追加", + "refresh": "リフレッシュ", + "edit": "編集", + "remove": "取り除く", + "save": "変更を保存する", + "selectDirectory": "ブラウズ", + "enable": "有効にする", + "disable": "無効にする" + }, + "items": { + "title": "最新のアップロード ({{count}})", + "count": "{{count}} 個のアイテム", + "empty": "最近のフィード項目が見つかりませんでした。", + "status": { + "queued": "キューに入れられました", + "notQueued": "キューに登録されていません", + "pending": "保留中", + "downloading": "ダウンロード中", + "processing": "処理", + "completed": "完了", + "error": "失敗した", + "cancelled": "キャンセル" + }, + "fromChannel": "{{channel}} から", + "tooltip": { + "downloadStatus": "ダウンロードステータス: {{status}}", + "downloadPending": "ダウンロードの詳細を待っています...", + "notQueued": "まだダウンロードキューにありません" + }, + "actions": { + "open": "ブラウザで開く", + "queue": "ダウンロードキューに追加" + } + }, + "labels": { + "subscription": "サブスクリプション", + "unknown": "不明なサブスクリプション", + "noThumbnail": "サムネイルなし" + }, + "notifications": { + "directoryError": "ディレクトリピッカーを開けませんでした。", + "missingUrl": "まずチャンネルのリンクを貼り付けてください。", + "created": "サブスクリプションが追加されました", + "createError": "サブスクリプションの追加に失敗しました。", + "refreshStarted": "更新が開始されました", + "removed": "サブスクリプションが削除されました", + "updated": "サブスクリプションが更新されました", + "itemQueued": "ダウンロードキューに追加されました", + "itemAlreadyQueued": "このビデオはすでにキューに登録されています", + "queueError": "ダウンロードキューへの追加に失敗しました。", + "openLinkError": "ビデオリンクを開けませんでした。", + "resolveError": "RSS フィード URL を解決できませんでした。" + }, + "detectedFeed": "{{platform}} フィードが検出されました -> {{feed}}", + "detecting": "フィードを検出中...", + "latestVideo": "最新の動画: {{title}}", + "lastChecked": "最終チェック日: {{time}}", + "never": "一度もない", + "empty": "まだ購読はありません。\nお気に入りのチャンネルを追加して自動ダウンロードを開始します。", + "edit": { + "title": "{{name}}を編集", + "description": "このフィードのフィルター、タグ、オーバーライドを調整します。" + }, + "status": { + "title": "状態", + "up-to-date": "最新の", + "checking": "チェック中", + "failed": "失敗した", + "idle": "アイドル状態", + "tooltip": { + "updatedAt": "更新日: {{time}}" + } + }, + "rssHub": { + "title": "RSSHub による自動サブスクリプション", + "description": "VidBee と RSSHub を組み合わせると、さまざまなプラットフォームからの自動サブスクリプションとダウンロードが可能になります。\nセットアップが完了すると、VidBee がバックグラウンドで実行され、最新のビデオとコンテンツが自動的にダウンロードされます。", + "learnMore": "RSSHub について詳しく見る", + "openDocs": "RSSHub ドキュメントを開く", + "hint": "RSS フィード URL をお持ちでない場合は、 \nRSSHub を使用して、YouTube、Twitter、その他数千のプラットフォーム用の RSS フィードを生成します。" + } + }, "sites": { "homeInlineDescription": "{{sites}}およびその他のサイトをサポートしています。", "moreDescription": "完全なyt-dlpリストはコミュニティによって継続的に更新されています。", @@ -467,118 +656,5 @@ }, "popularSection": "主要プラットフォーム", "viewAll": "サポートされているすべてのサイトを表示" - }, - "subscriptions": { - "actions": { - "add": "追加", - "disable": "無効にする", - "edit": "編集", - "enable": "有効にする", - "refresh": "リフレッシュ", - "remove": "取り除く", - "save": "変更を保存する", - "selectDirectory": "ブラウズ" - }, - "add": { - "description": "RSS フィードのリンクを貼り付けます。 \nVidBee はフィードを自動的に検出します。", - "title": "RSSを追加" - }, - "defaults": { - "description": "サブスクリプションのダウンロードが保存される場所と、VidBee が新しいビデオをチェックする頻度を制御します。", - "downloadDirectory": "ダウンロードディレクトリ", - "filenameTemplate": "ファイル名のテンプレート (ファイルのみ)", - "onlyLatest": "最新のビデオのみをダウンロードする", - "onlyLatestDescription": "有効にすると、VidBee は古いバックログ項目をスキップし、最新のアップロードのみを取得します。", - "title": "自動化のデフォルト" - }, - "description": "RSS フィードを自動的に監視し、手動作業なしで新しいダウンロードをキューに追加します。", - "detectedFeed": "{{プラットフォーム}} フィードが検出されました -> {{フィード}}", - "detecting": "フィードを検出中...", - "edit": { - "description": "このフィードのフィルター、タグ、オーバーライドを調整します。", - "title": "{{名前}}を編集" - }, - "empty": "まだ購読はありません。\nお気に入りのチャンネルを追加して自動ダウンロードを開始します。", - "fields": { - "customDirectory": "カスタムディレクトリ", - "disabled": "無効", - "enabled": "有効", - "keywords": "キーワードフィルター (カンマ区切り)", - "namingTemplate": "カスタム ファイル名テンプレート (ファイルのみ)", - "onlyLatest": "最新のビデオのみをダウンロードする", - "onlyLatestDescription": "バックログ項目を無視し、このフィードから最新のアップロードのみを取得します。", - "onlyLatestShort": "最新のもののみ", - "tags": "自動タグ", - "url": "フィード URL" - }, - "items": { - "actions": { - "open": "ブラウザで開く", - "queue": "ダウンロードキューに追加" - }, - "count": "{{count}} 個のアイテム", - "empty": "最近のフィード項目が見つかりませんでした。", - "fromChannel": "{{チャンネル}} から", - "status": { - "cancelled": "キャンセル", - "completed": "完了", - "downloading": "ダウンロード中", - "error": "失敗した", - "notQueued": "キューに登録されていません", - "pending": "保留中", - "processing": "処理", - "queued": "キューに入れられました" - }, - "title": "最新のアップロード ({{count}})", - "tooltip": { - "downloadPending": "ダウンロードの詳細を待っています...", - "downloadStatus": "ダウンロードステータス: {{ステータス}}", - "notQueued": "まだダウンロードキューにありません" - } - }, - "labels": { - "noThumbnail": "サムネイルなし", - "subscription": "サブスクリプション", - "unknown": "不明なサブスクリプション" - }, - "lastChecked": "最終チェック日: {{time}}", - "latestVideo": "最新の動画: {{title}}", - "never": "一度もない", - "notifications": { - "createError": "サブスクリプションの追加に失敗しました。", - "created": "サブスクリプションが追加されました", - "directoryError": "ディレクトリピッカーを開けませんでした。", - "itemAlreadyQueued": "このビデオはすでにキューに登録されています", - "itemQueued": "ダウンロードキューに追加されました", - "missingUrl": "まずチャンネルのリンクを貼り付けてください。", - "openLinkError": "ビデオリンクを開けませんでした。", - "queueError": "ダウンロードキューへの追加に失敗しました。", - "refreshStarted": "更新が開始されました", - "removed": "サブスクリプションが削除されました", - "resolveError": "RSS フィード URL を解決できませんでした。", - "updated": "サブスクリプションが更新されました" - }, - "placeholders": { - "url": "https://rsshub.app/youtube/user/@FKJ" - }, - "rssHub": { - "description": "VidBee と RSSHub を組み合わせると、さまざまなプラットフォームからの自動サブスクリプションとダウンロードが可能になります。\nセットアップが完了すると、VidBee がバックグラウンドで実行され、最新のビデオとコンテンツが自動的にダウンロードされます。", - "hint": "RSS フィード URL をお持ちでない場合は、 \nRSSHub を使用して、YouTube、Twitter、その他数千のプラットフォーム用の RSS フィードを生成します。", - "learnMore": "RSSHub について詳しく見る", - "openDocs": "RSSHub ドキュメントを開く", - "title": "RSSHub による自動サブスクリプション" - }, - "status": { - "checking": "チェック中", - "failed": "失敗した", - "idle": "アイドル状態", - "title": "状態", - "tooltip": { - "updatedAt": "更新日: {{time}}" - }, - "up-to-date": "最新の" - }, - "subtitle": "{{count}} 件のサブスクリプション{{count、複数、one {} other {s}}}", - "title": "定期購入" } } diff --git a/src/renderer/src/locales/ko.json b/src/renderer/src/locales/ko.json index 187bd25..b482c8c 100644 --- a/src/renderer/src/locales/ko.json +++ b/src/renderer/src/locales/ko.json @@ -16,7 +16,6 @@ "betaProgramDescription": "다른 사람들보다 먼저 초기 빌드와 다가오는 기능을 받으세요.", "betaProgramTitle": "미리보기 채널", "description": "VidBee는 Electron으로 구축되고 yt-dlp로 구동되는 무료 오픈소스 다운로더입니다.", - "downloadingUpdate": "업데이트 다운로드 중", "followAuthorActions": { "follow": "@nexmoex 팔로우" }, @@ -25,12 +24,6 @@ "followAuthorTitle": "개발자 팔로우", "here": "여기", "homepage": "홈페이지", - "latestVersionBadge": "최신: v{{version}}", - "latestVersionStatus": { - "available": "새 버전 사용 가능", - "error": "최신 버전을 가져올 수 없음", - "uptodate": "최신 버전 사용 중" - }, "notifications": { "checkingUpdates": "업데이트 검색 중...", "downloadError": "업데이트 다운로드 실패", @@ -38,14 +31,14 @@ "downloadUpdate": "업데이트 {{version}}을(를) 다운로드하고 설치하시겠습니까?", "manualDownloadAction": "지금 다운로드", "noUpdatesAvailable": "최신 버전을 사용 중입니다", - "restartNowAction": "지금 다시 시작", "restartToUpdate": "지금 재시작하여 업데이트를 설치하시겠습니까?", - "unknownErrorFallback": "알 수 없는 오류", + "restartNowAction": "지금 다시 시작", "updateAvailable": "사용 가능한 업데이트: {{version}}", "updateAvailableMessage": "새 버전 {{version}}을(를) 사용할 수 있습니다. \n공식 홈페이지에서 다운로드해주세요.", "updateDownloaded": "업데이트가 다운로드되었습니다. 재시작하여 설치하세요", "updateDownloadedVersion": "업데이트 {{version}}을(를) 다운로드했습니다. 설치하려면 다시 시작하세요.", - "updateError": "업데이트 확인 실패: {{error}}" + "updateError": "업데이트 확인 실패: {{error}}", + "unknownErrorFallback": "알 수 없는 오류" }, "preferencesDescription": "이 페이지를 떠나지 않고 업데이트 설정을 조정하세요.", "preferencesTitle": "빠른 토글", @@ -58,6 +51,12 @@ "documentationDescription": "가이드, FAQ 및 일반적인 워크플로우.", "feedback": "피드백 및 문제", "feedbackDescription": "GitHub에서 아이디어를 공유하거나 문제를 신고하세요.", + "githubIssues": "GitHub", + "githubIssuesDescription": "GitHub에서 버그를 보고하거나 기능을 요청하세요.", + "xFeedback": "Twitter", + "xFeedbackDescription": "X에서 @nexmoex를 멘션하여 피드백이나 제안을 공유하세요.", + "discord": "Discord", + "discordDescription": "Discord 커뮤니티에 참여해 토론과 지원을 받으세요.", "license": "라이선스", "licenseDescription": "오픈소스 라이선스 조건을 검토하세요.", "website": "공식 웹사이트", @@ -76,13 +75,21 @@ "sourceCode": "소스 코드 사용 가능", "title": "정보", "version": "버전", - "versionLabel": "v{{version}}" + "versionLabel": "v{{version}}", + "latestVersionBadge": "최신: v{{version}}", + "latestVersionStatus": { + "available": "새 버전 사용 가능", + "uptodate": "최신 버전 사용 중", + "error": "최신 버전을 가져올 수 없음" + }, + "downloadingUpdate": "업데이트 다운로드 중" }, "advancedOptions": { "closeWhenDone": "다운로드 완료 시 앱 닫기", "currentLocation": "현재 다운로드 위치 - ", "downloadLocation": "다운로드 위치", "downloadSubs": "사용 가능한 경우 자막 다운로드", + "downloadSubsHint": "가능한 경우 자막을 별도 파일로 저장", "end": "끝", "endHint": "비워두면 끝까지 다운로드됩니다", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "수백 개의 사이트에서 비디오와 오디오 다운로드", "title": "VidBee" }, - "audioExtract": { - "bad": "나쁨", - "best": "최고", - "extract": "추출", - "good": "좋음", - "normal": "보통", - "selectFormat": "형식 선택", - "selectQuality": "품질 선택", - "title": "오디오 추출", - "worst": "최악" - }, "download": { "active": "활성", "all": "모두", @@ -123,6 +119,10 @@ "downloadBtn": "다운로드", "downloadPending": "대기 중", "downloadQueue": "다운로드 큐", + "customDownloadFolder": "사용자 지정 다운로드 폴더", + "autoFolderPlaceholder": "자동 폴더(메타데이터 기반)", + "autoFolderHint": "자동 폴더는 메타데이터에서 생성됩니다.", + "useAutoFolder": "자동 폴더 사용", "downloadVideo": "비디오 다운로드", "downloading": "다운로드 중...", "enterUrl": "비디오 URL 입력", @@ -130,44 +130,17 @@ "error": "오류", "fetch": "가져오기", "fetchingVideoInfo": "비디오 정보 가져오는 중...", - "goToSettings": "설정으로 이동", - "hideDetails": "세부정보 숨기기", "history": "기록", "imageLoadError": "이미지 로드 실패", "imagePlaceholder": "사용 가능한 이미지 없음", "infoUnavailable": "원클릭 다운로드 (정보 사용 불가)", "loading": "로딩 중", - "metadata": { - "audioCodec": "오디오 코덱", - "codec": "코덱", - "completedAt": "완료 시간", - "createdAt": "생성 날짜", - "description": "설명", - "downloadPath": "다운로드 경로", - "fileSize": "파일 크기", - "format": "체재", - "formatNote": "메모 형식", - "fps": "FPS", - "height": "키", - "playlist": "재생목록", - "protocol": "규약", - "quality": "품질", - "savedFile": "저장된 파일", - "source": "원천", - "speed": "속도", - "startedAt": "시작 시간", - "subscription": "신청", - "tags": "태그", - "url": "소스 URL", - "videoCodec": "비디오 코덱", - "views": "조회수", - "width": "너비" - }, "moreOptions": "더 많은 옵션", "noActiveDownloads": "활성 다운로드 없음", "noAudio": "오디오 없음", "noHistory": "다운로드 기록 없음", "noItems": "항목을 찾을 수 없음", + "goToSettings": "설정으로 이동", "oneClickDownload": "원클릭 다운로드", "oneClickDownloadDescription": "확인 없이 기본 설정으로 직접 다운로드", "oneClickDownloadEnabled": "원클릭 다운로드가 활성화되었습니다. \n다운로드는 기본 설정으로 바로 시작됩니다.", @@ -176,14 +149,17 @@ "paste": "붙여넣기", "pastePlaylistUrl": "클립보드에서 재생목록 링크 붙여넣기 [Ctrl + V]", "pasteUrl": "비디오 URL 또는 ID 붙여넣기 [Ctrl + V]", + "pasteUrlButton": "URL 붙여넣기", "preparing": "준비 중...", "processing": "처리 중", "progress": "진행률", - "selectAudioFormat": "오디오 형식 선택", - "selectFormat": "형식 선택", - "selectVideoFormat": "비디오 형식 선택", - "startDownload": "다운로드 시작", "showDetails": "세부정보 표시", + "hideDetails": "세부정보 숨기기", + "selectAudioFormat": "오디오 형식 선택", + "selectDownloadType": "다운로드 유형 선택", + "selectFormat": "형식 선택", + "startDownload": "다운로드 시작", + "selectVideoFormat": "비디오 형식 선택", "singleVideo": "단일 비디오", "speed": "속도", "title": "제목", @@ -193,7 +169,52 @@ "urlPlaceholder": "https://www.youtube.com/watch?v=...", "video": "비디오", "videoInfo": "비디오 정보", - "videoInfoUpdated": "비디오 정보 업데이트됨" + "videoInfoUpdated": "비디오 정보 업데이트됨", + "metadata": { + "source": "원천", + "playlist": "재생목록", + "format": "체재", + "quality": "품질", + "codec": "코덱", + "savedFile": "저장된 파일", + "url": "소스 URL", + "description": "설명", + "views": "조회수", + "tags": "태그", + "downloadPath": "다운로드 경로", + "createdAt": "생성 날짜", + "startedAt": "시작 시간", + "completedAt": "완료 시간", + "speed": "속도", + "fileSize": "파일 크기", + "width": "너비", + "height": "키", + "fps": "FPS", + "videoCodec": "비디오 코덱", + "audioCodec": "오디오 코덱", + "formatNote": "메모 형식", + "protocol": "규약", + "subscription": "신청" + } + }, + "error": { + "title": "문제가 발생했습니다", + "description": "예기치 않은 오류가 발생했습니다. 앱을 다시 로드하거나 문제가 계속되면 보고해 주세요.", + "message": "오류 메시지", + "unknownError": "알 수 없는 오류가 발생했습니다", + "goHome": "홈으로", + "reload": "앱 다시 로드", + "copyReport": "오류 보고서 복사", + "copied": "복사됨!", + "copySuccess": "오류 보고서가 클립보드에 복사되었습니다", + "copyFailed": "오류 보고서 복사에 실패했습니다", + "showDetails": "세부 정보 표시", + "hideDetails": "세부 정보 숨기기", + "stackTrace": "스택 트레이스", + "componentStack": "컴포넌트 스택", + "noStackTrace": "사용 가능한 스택 트레이스가 없습니다", + "fullReport": "전체 오류 보고서", + "helpText": "이 오류가 계속되면 위의 오류 보고서를 복사하여 지원 팀에 공유하세요. 연락처 정보는 정보 페이지에서 찾을 수 있습니다." }, "errors": { "clickToCopy": "세부 정보 복사하려면 클릭", @@ -203,6 +224,7 @@ "emptyUrl": "URL을 입력하세요", "errorDetails": "오류 세부 정보", "fetchInfoFailed": "비디오 정보 가져오기 실패", + "invalidUrl": "클립보드 내용이 올바른 URL이 아닙니다", "networkError": "오류가 발생했습니다. 네트워크를 확인하고 올바른 URL을 사용하세요", "pasteFromClipboard": "클립보드에서 붙여넣기 실패" }, @@ -210,10 +232,23 @@ "clearCancelled": "취소된 항목 지우기", "clearCompleted": "완료된 항목 지우기", "clearErrors": "오류 지우기", + "clearAll": "전체 기록 지우기", + "clearAllAction": "기록 지우기", + "clearSelection": "선택 지우기", + "confirmClearAllTitle": "모든 기록을 지울까요?", + "confirmClearAllDescription": "기록에서 {{count}}개 항목을 제거합니다. 파일은 디스크에 남아 있습니다.", + "confirmDeleteSelectedTitle": "선택한 항목을 제거할까요?", + "confirmDeleteSelectedDescription": "기록에서 {{count}}개 항목을 제거합니다. 파일은 디스크에 남아 있습니다.", + "alsoDeleteFiles": "파일도 삭제", + "confirmDeletePlaylistTitle": "재생목록 기록을 제거할까요?", + "confirmDeletePlaylistDescription": "{{title}}에서 {{count}}개 항목을 제거하고 파일을 삭제합니다.", "copyToClipboard": "클립보드에 복사", "copyUrl": "URL 복사", "date": "날짜", + "deletePlaylist": "재생목록 제거", + "deleteSelected": "선택한 항목 제거", "description": "다운로드 기록 보기 및 관리", + "doneSelecting": "완료", "duration": "지속 시간", "fileSize": "파일 크기", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "파일 위치 열기", "openFolder": "폴더 열기", "openInBrowser": "브라우저에서 열려면 클릭", + "removeAction": "제거", "removeItem": "항목 제거", + "select": "선택", + "selectAll": "모두 선택", + "selectVisible": "표시된 항목 선택", + "selectItem": "항목 선택", + "selectedCount": "{{count}}개 선택됨", + "selectionSummary": "표시된 {{total}}개 중 {{selected}}개 선택됨", "stats": { "cancelled": "취소됨", "completed": "완료", @@ -247,9 +289,9 @@ "about": "정보", "download": "다운로드", "playlist": "재생목록 다운로드", - "preferences": "환경설정", "rss": "RSS", "subscriptions": "구독", + "preferences": "환경설정", "supportedSites": "지원되는 사이트", "theme": "테마:" }, @@ -258,9 +300,15 @@ "downloadCompleted": "다운로드 완료", "downloadFailed": "다운로드 실패", "downloadStarted": "다운로드 시작됨", + "historyCleared": "기록이 지워졌습니다", + "historyClearFailed": "기록을 지우지 못했습니다", "itemRemoved": "항목 제거됨", + "itemsRemoved": "{{count}}개 항목이 제거되었습니다", + "itemsRemoveFailed": "선택한 항목을 제거하지 못했습니다", "openFileFailed": "파일 열기 실패", "openFolderFailed": "폴더 열기 실패", + "playlistHistoryRemoved": "재생목록이 제거되고 파일이 삭제되었습니다", + "playlistHistoryRemoveFailed": "재생목록 기록을 제거하지 못했습니다", "removeFailed": "항목 제거 실패", "settingsSaved": "설정 저장됨", "urlCopied": "URL이 클립보드에 복사됨", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "재생목록", "clearPreview": "미리보기 지우기", + "collapsedProgress": "재생목록 다운로드 중: {{completed}} / {{total}} 완료", "comingSoon": "재생목록 다운로드 기능이 곧 출시됩니다!", "completed": "재생목록 다운로드됨", "description": "YouTube 재생목록 또는 채널의 모든 비디오 다운로드", @@ -284,8 +333,10 @@ "folderFormat": "재생목록용 폴더명 형식", "foundVideos": "재생목록에서 {{count}}개 비디오 발견", "groupActive": "{{count}} 활성", + "groupCollapse": "접기", "groupErrors": "{{count}}개 실패", - "groupSummary": "{{완료}} / {{총}} 완료", + "groupExpand": "펼치기", + "groupSummary": "{{completed}} / {{total}} 완료", "linkLabel": "재생목록 URL", "noEntries": "이 재생목록에는 동영상이 없습니다.", "noEntriesInRange": "선택한 범위에 동영상이 없습니다.", @@ -294,12 +345,16 @@ "positionLabel": "{{total}}개 항목 중 {{index}}개 항목", "previewButton": "미리보기 재생목록", "previewFailed": "재생목록을 미리 볼 수 없습니다.", - "previewRequired": "다운로드하기 전에 재생 목록을 미리 봅니다.", "previewSummary": "다운로드하기 전에 재생 목록 항목을 미리 봅니다.", + "previewRequired": "다운로드하기 전에 재생 목록을 미리 봅니다.", "range": "범위 (선택사항)", "resetToDefault": "기본값으로 재설정", "selectedRange": "범위: {{start}}-{{end}}", + "selectedVideos": "{{count}}개 선택됨", + "downloadCurrentRange": "선택 항목 다운로드", "showingCount": "{{count}}개의 동영상 표시 중", + "selectEntry": "항목 {{index}} 선택", + "noEntriesSelected": "선택된 항목이 없습니다", "startIndex": "시작 (1)", "title": "재생목록 다운로드", "totalVideos": "총 동영상 수: {{count}}", @@ -312,39 +367,61 @@ "audio": "오디오 환경설정", "browserForCookies": "쿠키를 사용할 브라우저 선택", "browserForCookiesDescription": "인증을 위한 쿠키 추출 브라우저", + "browserForCookiesProfile": "프로필 이름 또는 경로", + "browserForCookiesProfileDescription": "위에서 선택한 브라우저의 프로필 경로입니다. 가능하면 자동으로 채워집니다.", + "browserForCookiesProfilePlaceholder": "프로필 이름 또는 전체 경로(선택 사항)", + "browserForCookiesProfileInvalid": "프로필 경로가 유효하지 않습니다. 선택한 브라우저의 프로필 폴더를 선택하세요.", + "browserForCookiesProfileInvalidPath": "해당 폴더가 없습니다. 기존 프로필 폴더를 선택하세요.", + "browserForCookiesProfileInvalidProfile": "기본 브라우저 위치에서 프로필 이름을 찾을 수 없습니다.", + "browserForCookiesProfileInvalidUnsupported": "이 플랫폼에서 이 브라우저의 기본 프로필 위치가 알려져 있지 않습니다.", + "browserForCookiesProfileInvalidEmpty": "선택한 브라우저의 프로필 경로를 입력하세요.", + "cookiesFile": "쿠키 파일", + "cookiesFileDescription": "인증을 위해 로드할 Netscape 형식의 쿠키 파일", + "clearCookiesFile": "분명한", + "cookiesHelpTitle": "쿠키 사용", + "cookiesHelpBrowser": "로그인된 세션을 자동으로 재사용하려면 위에서 브라우저를 선택하세요.", + "cookiesHelpFile": "Netscape 쿠키 파일을 내보내고(yt-dlp FAQ 참조) 필요할 때 여기에서 선택하세요.", + "cookiesHelpFaq": "yt-dlp 쿠키 FAQ 열기", + "openLinkError": "링크를 열지 못했습니다.", "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, - "clearConfigFile": "분명한", - "clearCookiesFile": "분명한", "configFile": "설정 파일 사용", "configFileDescription": "yt-dlp용 사용자 정의 설정 파일", - "cookiesFile": "쿠키 파일", - "cookiesFileDescription": "인증을 위해 로드할 Netscape 형식의 쿠키 파일", - "cookiesHelpBrowser": "로그인된 세션을 자동으로 재사용하려면 위에서 브라우저를 선택하세요.", - "cookiesHelpFaq": "yt-dlp 쿠키 FAQ 열기", - "cookiesHelpFile": "Netscape 쿠키 파일을 내보내고(yt-dlp FAQ 참조) 필요할 때 여기에서 선택하세요.", - "cookiesHelpTitle": "쿠키 사용", + "clearConfigFile": "분명한", "dark": "다크", "description": "다운로드 환경설정 및 앱 설정 구성", "directorySelectError": "디렉토리 선택 실패", "downloadPath": "다운로드 위치", "downloadPathDescription": "다운로드 파일을 저장할 위치 선택", - "enableAnalytics": "VidBee 개선에 참여해주세요", - "enableAnalyticsDescription": "익명의 사용 데이터를 공유하면 앱이 어떻게 사용되는지 이해하고 개선 우선순위를 정하는 데 도움이 됩니다.", "fileSelectError": "파일 선택 실패", "general": "일반", + "language": "언어", + "languageDescription": "앱 인터페이스에 사용할 언어를 선택하세요", + "light": "라이트", "hideDockIcon": "Dock 아이콘 숨기기", "hideDockIconDescription": "macOS Dock에서 VidBee를 제거합니다. \n메뉴 표시줄이나 트레이 아이콘을 사용하여 앱을 다시 엽니다.", - "language": "언어", "launchAtLogin": "시작 시 실행", "launchAtLoginDescription": "컴퓨터에 로그인한 후 자동으로 VidBee를 엽니다.", "launchAtLoginUnsupported": "자동 실행은 macOS 및 Windows에서만 사용할 수 있습니다.", - "light": "라이트", + "enableAnalytics": "VidBee 개선에 참여해주세요", + "enableAnalyticsDescription": "익명의 사용 데이터를 공유하면 앱이 어떻게 사용되는지 이해하고 개선 우선순위를 정하는 데 도움이 됩니다.", + "embedChapters": "챕터 포함", + "embedChaptersDescription": "사용 가능한 경우 파일에 챕터 마커를 추가", + "embedMetadata": "메타데이터 포함", + "embedMetadataDescription": "사용 가능한 경우 제목, 아티스트 및 기타 메타데이터 기록", + "embedSubs": "자막 포함", + "embedSubsDescription": "자막을 비디오 파일에 포함(mp4, webm, mkv)", + "embedThumbnail": "썸네일 포함", + "embedThumbnailDescription": "썸네일을 커버 아트로 추가", "maxConcurrentDownloads": "최대 활성 다운로드 수", "maxConcurrentDownloadsDescription": "최대 동시 다운로드 수", "none": "없음", @@ -362,7 +439,6 @@ "normal": "보통", "worst": "최악" }, - "openLinkError": "링크를 열지 못했습니다.", "proxy": "프록시", "proxyDescription": "네트워크 요청용 프록시 서버", "proxyPlaceholder": "http://proxy:port", @@ -383,6 +459,119 @@ }, "video": "비디오 환경설정" }, + "subscriptions": { + "title": "구독", + "subtitle": "{{count}} 구독{{count, plural, one {} other {s}}}", + "description": "RSS 피드를 자동으로 모니터링하고 수동 작업 없이 새 다운로드를 대기열에 추가하세요.", + "defaults": { + "title": "자동화 기본값", + "description": "구독 다운로드가 저장되는 위치와 VidBee가 새 비디오를 확인하는 빈도를 제어합니다.", + "downloadDirectory": "디렉토리 다운로드", + "filenameTemplate": "파일 이름 템플릿(파일만)", + "onlyLatest": "최신 영상만 다운로드하세요", + "onlyLatestDescription": "활성화되면 VidBee는 이전 백로그 항목을 건너뛰고 최신 업로드만 가져옵니다." + }, + "add": { + "title": "RSS 추가", + "description": "RSS 피드 링크를 붙여넣으세요. \nVidBee는 자동으로 피드를 감지합니다." + }, + "fields": { + "url": "피드 URL", + "keywords": "키워드 필터(쉼표로 구분)", + "tags": "자동 태그", + "customDirectory": "맞춤 디렉터리", + "namingTemplate": "사용자 정의 파일 이름 템플릿(파일만 해당)", + "onlyLatest": "최신 영상만 다운로드하세요", + "onlyLatestDescription": "백로그 항목을 무시하고 이 피드에서 최신 업로드만 가져옵니다.", + "enabled": "활성화됨", + "disabled": "장애가 있는", + "onlyLatestShort": "최신만" + }, + "placeholders": { + "url": "https://rsshub.app/youtube/user/@FKJ" + }, + "actions": { + "add": "추가하다", + "refresh": "새로 고치다", + "edit": "편집하다", + "remove": "제거하다", + "save": "변경사항 저장", + "selectDirectory": "먹다", + "enable": "할 수 있게 하다", + "disable": "장애를 입히다" + }, + "items": { + "title": "최근 업로드({{count}})", + "count": "{{count}}개 항목", + "empty": "최근 피드 항목을 찾을 수 없습니다.", + "status": { + "queued": "대기 중", + "notQueued": "대기열에 추가되지 않음", + "pending": "보류 중", + "downloading": "다운로드 중", + "processing": "처리", + "completed": "완전한", + "error": "실패한", + "cancelled": "취소" + }, + "fromChannel": "{{channel}}에서", + "tooltip": { + "downloadStatus": "다운로드 상태: {{status}}", + "downloadPending": "다운로드 세부정보를 기다리는 중...", + "notQueued": "아직 다운로드 대기열에 없습니다" + }, + "actions": { + "open": "브라우저에서 열기", + "queue": "다운로드 대기열에 추가" + } + }, + "labels": { + "subscription": "신청", + "unknown": "알 수 없는 구독", + "noThumbnail": "미리보기 이미지 없음" + }, + "notifications": { + "directoryError": "디렉터리 선택기를 열지 못했습니다.", + "missingUrl": "먼저 채널 링크를 붙여넣으세요.", + "created": "구독이 추가되었습니다", + "createError": "구독을 추가하지 못했습니다.", + "refreshStarted": "새로고침이 시작되었습니다.", + "removed": "구독이 삭제됨", + "updated": "구독이 업데이트되었습니다.", + "itemQueued": "다운로드 대기열에 추가됨", + "itemAlreadyQueued": "이 동영상은 이미 대기열에 있습니다.", + "queueError": "다운로드 대기열에 추가하지 못했습니다.", + "openLinkError": "동영상 링크를 열지 못했습니다.", + "resolveError": "RSS 피드 URL을 확인하지 못했습니다." + }, + "detectedFeed": "{{platform}} 피드 감지됨 -> {{feed}}", + "detecting": "피드 감지 중...", + "latestVideo": "최신 동영상: {{title}}", + "lastChecked": "마지막 확인: {{time}}", + "never": "절대", + "empty": "아직 구독이 없습니다. \n즐겨찾는 채널을 추가하여 자동 다운로드를 시작하세요.", + "edit": { + "title": "{{name}} 수정", + "description": "이 피드에 대한 필터, 태그 및 재정의를 조정하세요." + }, + "status": { + "title": "상태", + "up-to-date": "최신", + "checking": "확인 중", + "failed": "실패한", + "idle": "게으른", + "tooltip": { + "updatedAt": "업데이트됨: {{time}}" + } + }, + "rssHub": { + "title": "RSSHub를 통한 자동 구독", + "description": "VidBee를 RSSHub와 결합하면 다양한 플랫폼에서 자동 구독 및 다운로드가 가능해집니다. \n일단 설정되면 VidBee는 백그라운드에서 실행되어 최신 비디오와 콘텐츠를 자동으로 다운로드합니다.", + "learnMore": "RSSHub에 대해 자세히 알아보기", + "openDocs": "RSSHub 문서 열기", + "hint": "RSS 피드 URL이 없나요? \nRSSHub를 사용하여 YouTube, Twitter 및 기타 수천 개의 플랫폼에 대한 RSS 피드를 생성하세요." + } + }, "sites": { "homeInlineDescription": "{{sites}} 및 더 많은 사이트를 지원합니다.", "moreDescription": "완전한 yt-dlp 목록은 커뮤니티에 의해 지속적으로 업데이트됩니다.", @@ -467,118 +656,5 @@ }, "popularSection": "주요 플랫폼", "viewAll": "지원되는 모든 사이트 보기" - }, - "subscriptions": { - "actions": { - "add": "추가하다", - "disable": "장애를 입히다", - "edit": "편집하다", - "enable": "할 수 있게 하다", - "refresh": "새로 고치다", - "remove": "제거하다", - "save": "변경사항 저장", - "selectDirectory": "먹다" - }, - "add": { - "description": "RSS 피드 링크를 붙여넣으세요. \nVidBee는 자동으로 피드를 감지합니다.", - "title": "RSS 추가" - }, - "defaults": { - "description": "구독 다운로드가 저장되는 위치와 VidBee가 새 비디오를 확인하는 빈도를 제어합니다.", - "downloadDirectory": "디렉토리 다운로드", - "filenameTemplate": "파일 이름 템플릿(파일만)", - "onlyLatest": "최신 영상만 다운로드하세요", - "onlyLatestDescription": "활성화되면 VidBee는 이전 백로그 항목을 건너뛰고 최신 업로드만 가져옵니다.", - "title": "자동화 기본값" - }, - "description": "RSS 피드를 자동으로 모니터링하고 수동 작업 없이 새 다운로드를 대기열에 추가하세요.", - "detectedFeed": "{{플랫폼}} 피드 감지됨 -> {{feed}}", - "detecting": "피드 감지 중...", - "edit": { - "description": "이 피드에 대한 필터, 태그 및 재정의를 조정하세요.", - "title": "{{이름}} 수정" - }, - "empty": "아직 구독이 없습니다. \n즐겨찾는 채널을 추가하여 자동 다운로드를 시작하세요.", - "fields": { - "customDirectory": "맞춤 디렉터리", - "disabled": "장애가 있는", - "enabled": "활성화됨", - "keywords": "키워드 필터(쉼표로 구분)", - "namingTemplate": "사용자 정의 파일 이름 템플릿(파일만 해당)", - "onlyLatest": "최신 영상만 다운로드하세요", - "onlyLatestDescription": "백로그 항목을 무시하고 이 피드에서 최신 업로드만 가져옵니다.", - "onlyLatestShort": "최신만", - "tags": "자동 태그", - "url": "피드 URL" - }, - "items": { - "actions": { - "open": "브라우저에서 열기", - "queue": "다운로드 대기열에 추가" - }, - "count": "{{count}}개 항목", - "empty": "최근 피드 항목을 찾을 수 없습니다.", - "fromChannel": "{{채널}}에서", - "status": { - "cancelled": "취소", - "completed": "완전한", - "downloading": "다운로드 중", - "error": "실패한", - "notQueued": "대기열에 추가되지 않음", - "pending": "보류 중", - "processing": "처리", - "queued": "대기 중" - }, - "title": "최근 업로드({{count}})", - "tooltip": { - "downloadPending": "다운로드 세부정보를 기다리는 중...", - "downloadStatus": "다운로드 상태: {{status}}", - "notQueued": "아직 다운로드 대기열에 없습니다" - } - }, - "labels": { - "noThumbnail": "미리보기 이미지 없음", - "subscription": "신청", - "unknown": "알 수 없는 구독" - }, - "lastChecked": "마지막 확인: {{time}}", - "latestVideo": "최신 동영상: {{제목}}", - "never": "절대", - "notifications": { - "createError": "구독을 추가하지 못했습니다.", - "created": "구독이 추가되었습니다", - "directoryError": "디렉터리 선택기를 열지 못했습니다.", - "itemAlreadyQueued": "이 동영상은 이미 대기열에 있습니다.", - "itemQueued": "다운로드 대기열에 추가됨", - "missingUrl": "먼저 채널 링크를 붙여넣으세요.", - "openLinkError": "동영상 링크를 열지 못했습니다.", - "queueError": "다운로드 대기열에 추가하지 못했습니다.", - "refreshStarted": "새로고침이 시작되었습니다.", - "removed": "구독이 삭제됨", - "resolveError": "RSS 피드 URL을 확인하지 못했습니다.", - "updated": "구독이 업데이트되었습니다." - }, - "placeholders": { - "url": "https://rsshub.app/youtube/user/@FKJ" - }, - "rssHub": { - "description": "VidBee를 RSSHub와 결합하면 다양한 플랫폼에서 자동 구독 및 다운로드가 가능해집니다. \n일단 설정되면 VidBee는 백그라운드에서 실행되어 최신 비디오와 콘텐츠를 자동으로 다운로드합니다.", - "hint": "RSS 피드 URL이 없나요? \nRSSHub를 사용하여 YouTube, Twitter 및 기타 수천 개의 플랫폼에 대한 RSS 피드를 생성하세요.", - "learnMore": "RSSHub에 대해 자세히 알아보기", - "openDocs": "RSSHub 문서 열기", - "title": "RSSHub를 통한 자동 구독" - }, - "status": { - "checking": "확인 중", - "failed": "실패한", - "idle": "게으른", - "title": "상태", - "tooltip": { - "updatedAt": "업데이트됨: {{time}}" - }, - "up-to-date": "최신" - }, - "subtitle": "{{count}} 구독{{count, plural, one {} other {s}}}", - "title": "구독" } } diff --git a/src/renderer/src/locales/pt.json b/src/renderer/src/locales/pt.json index 60906d5..17678c0 100644 --- a/src/renderer/src/locales/pt.json +++ b/src/renderer/src/locales/pt.json @@ -16,7 +16,6 @@ "betaProgramDescription": "Receba builds antecipados e próximos recursos antes de todos.", "betaProgramTitle": "Canal de visualização", "description": "VidBee é um baixador gratuito e de código aberto construído com Electron e alimentado por yt-dlp.", - "downloadingUpdate": "Baixando atualização", "followAuthorActions": { "follow": "Seguir @nexmoex" }, @@ -25,12 +24,6 @@ "followAuthorTitle": "Seguir o Desenvolvedor", "here": "aqui", "homepage": "Página inicial", - "latestVersionBadge": "Mais recente: v{{version}}", - "latestVersionStatus": { - "available": "Nova versão disponível", - "error": "Não foi possível obter a versão mais recente", - "uptodate": "Você está atualizado" - }, "notifications": { "checkingUpdates": "Procurando atualizações...", "downloadError": "Falha ao baixar atualização", @@ -38,14 +31,14 @@ "downloadUpdate": "Baixar e instalar atualização {{version}}?", "manualDownloadAction": "Baixe agora", "noUpdatesAvailable": "Você está usando a versão mais recente", - "restartNowAction": "Reinicie agora", "restartToUpdate": "Reiniciar agora para instalar atualização?", - "unknownErrorFallback": "Erro desconhecido", + "restartNowAction": "Reinicie agora", "updateAvailable": "Atualização disponível: {{version}}", "updateAvailableMessage": "Uma nova versão {{version}} está disponível. \nFaça o download no site oficial.", "updateDownloaded": "Atualização baixada, reinicie para instalar", "updateDownloadedVersion": "Atualização {{version}} baixada, reinicie para instalar", - "updateError": "Falha ao verificar atualizações: {{error}}" + "updateError": "Falha ao verificar atualizações: {{error}}", + "unknownErrorFallback": "Erro desconhecido" }, "preferencesDescription": "Ajuste configurações de atualização sem sair desta página.", "preferencesTitle": "Alternâncias Rápidas", @@ -58,6 +51,12 @@ "documentationDescription": "Guias, FAQs e fluxos de trabalho comuns.", "feedback": "Feedback e problemas", "feedbackDescription": "Compartilhe ideias ou reporte problemas no GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "Relatar bugs ou solicitar recursos no GitHub.", + "xFeedback": "Twitter", + "xFeedbackDescription": "Compartilhe feedback ou sugestões no X mencionando @nexmoex.", + "discord": "Discord", + "discordDescription": "Junte-se à nossa comunidade no Discord para discussões e suporte.", "license": "Licença", "licenseDescription": "Revise os termos da licença de código aberto.", "website": "Site oficial", @@ -76,13 +75,21 @@ "sourceCode": "Código fonte disponível", "title": "Sobre", "version": "Versão", - "versionLabel": "v{{version}}" + "versionLabel": "v{{version}}", + "latestVersionBadge": "Mais recente: v{{version}}", + "latestVersionStatus": { + "available": "Nova versão disponível", + "uptodate": "Você está atualizado", + "error": "Não foi possível obter a versão mais recente" + }, + "downloadingUpdate": "Baixando atualização" }, "advancedOptions": { "closeWhenDone": "Fechar aplicativo quando download terminar", "currentLocation": "Local de download atual - ", "downloadLocation": "Local de download", "downloadSubs": "Baixar legendas se disponíveis", + "downloadSubsHint": "Salvar legendas como arquivos separados quando disponíveis", "end": "Fim", "endHint": "Se deixado vazio, será baixado até o final", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "Baixar vídeos e áudios de centenas de sites", "title": "VidBee" }, - "audioExtract": { - "bad": "Ruim", - "best": "Melhor", - "extract": "Extrair", - "good": "Bom", - "normal": "Normal", - "selectFormat": "Selecionar Formato", - "selectQuality": "Selecionar Qualidade", - "title": "Extrair Áudio", - "worst": "Pior" - }, "download": { "active": "Ativo", "all": "Todos", @@ -123,6 +119,10 @@ "downloadBtn": "Baixar", "downloadPending": "Pendente", "downloadQueue": "Fila de Download", + "customDownloadFolder": "Pasta de download personalizada", + "autoFolderPlaceholder": "Pasta automática (com base nos metadados)", + "autoFolderHint": "Pastas automáticas são criadas a partir de metadados.", + "useAutoFolder": "Usar pasta automática", "downloadVideo": "Baixar Vídeo", "downloading": "Baixando...", "enterUrl": "Inserir URL do Vídeo", @@ -130,44 +130,17 @@ "error": "Erro", "fetch": "Buscar", "fetchingVideoInfo": "Buscando informações do vídeo...", - "goToSettings": "Vá para Configurações", - "hideDetails": "Ocultar detalhes", "history": "Histórico", "imageLoadError": "Falha ao carregar imagem", "imagePlaceholder": "Nenhuma imagem disponível", "infoUnavailable": "Download de Um Clique (Info indisponível)", "loading": "Carregando", - "metadata": { - "audioCodec": "Codec de áudio", - "codec": "Codec", - "completedAt": "Concluído em", - "createdAt": "Criado em", - "description": "Descrição", - "downloadPath": "Caminho de download", - "fileSize": "Tamanho do arquivo", - "format": "Formatar", - "formatNote": "Formatar nota", - "fps": "FPS", - "height": "Altura", - "playlist": "Lista de reprodução", - "protocol": "Protocolo", - "quality": "Qualidade", - "savedFile": "Arquivo salvo", - "source": "Fonte", - "speed": "Velocidade", - "startedAt": "Começou em", - "subscription": "Subscrição", - "tags": "Etiquetas", - "url": "URL de origem", - "videoCodec": "Codec de vídeo", - "views": "Visualizações", - "width": "Largura" - }, "moreOptions": "Mais opções", "noActiveDownloads": "Nenhum download ativo", "noAudio": "Sem Áudio", "noHistory": "Nenhum histórico de download", "noItems": "Nenhum item encontrado", + "goToSettings": "Vá para Configurações", "oneClickDownload": "Download de Um Clique", "oneClickDownloadDescription": "Baixar diretamente com configurações padrão sem confirmação", "oneClickDownloadEnabled": "O download com um clique está ativado. \nOs downloads começarão diretamente com as configurações padrão.", @@ -176,14 +149,17 @@ "paste": "Colar", "pastePlaylistUrl": "Clique para colar link da playlist da área de transferência [Ctrl + V]", "pasteUrl": "Clique para colar URL do vídeo ou ID [Ctrl + V]", + "pasteUrlButton": "Colar URL", "preparing": "Preparando...", "processing": "Processando", "progress": "Progresso", - "selectAudioFormat": "Selecionar Formato de Áudio", - "selectFormat": "Selecionar Formato", - "selectVideoFormat": "Selecionar Formato de Vídeo", - "startDownload": "Iniciar download", "showDetails": "Mostrar detalhes", + "hideDetails": "Ocultar detalhes", + "selectAudioFormat": "Selecionar Formato de Áudio", + "selectDownloadType": "Selecionar tipo de download", + "selectFormat": "Selecionar Formato", + "startDownload": "Iniciar download", + "selectVideoFormat": "Selecionar Formato de Vídeo", "singleVideo": "Vídeo Único", "speed": "Velocidade", "title": "Título", @@ -193,7 +169,52 @@ "urlPlaceholder": "https://www.youtube.com/watch?v=...", "video": "Vídeo", "videoInfo": "Informações do Vídeo", - "videoInfoUpdated": "Informações do vídeo atualizadas" + "videoInfoUpdated": "Informações do vídeo atualizadas", + "metadata": { + "source": "Fonte", + "playlist": "Lista de reprodução", + "format": "Formatar", + "quality": "Qualidade", + "codec": "Codec", + "savedFile": "Arquivo salvo", + "url": "URL de origem", + "description": "Descrição", + "views": "Visualizações", + "tags": "Etiquetas", + "downloadPath": "Caminho de download", + "createdAt": "Criado em", + "startedAt": "Começou em", + "completedAt": "Concluído em", + "speed": "Velocidade", + "fileSize": "Tamanho do arquivo", + "width": "Largura", + "height": "Altura", + "fps": "FPS", + "videoCodec": "Codec de vídeo", + "audioCodec": "Codec de áudio", + "formatNote": "Formatar nota", + "protocol": "Protocolo", + "subscription": "Subscrição" + } + }, + "error": { + "title": "Algo deu errado", + "description": "Ocorreu um erro inesperado. Recarregue o aplicativo ou reporte este problema se persistir.", + "message": "Mensagem de erro", + "unknownError": "Ocorreu um erro desconhecido", + "goHome": "Ir para a página inicial", + "reload": "Recarregar aplicativo", + "copyReport": "Copiar relatório de erro", + "copied": "Copiado!", + "copySuccess": "Relatório de erro copiado para a área de transferência", + "copyFailed": "Falha ao copiar o relatório de erro", + "showDetails": "Mostrar detalhes", + "hideDetails": "Ocultar detalhes", + "stackTrace": "Rastro de pilha", + "componentStack": "Pilha de componentes", + "noStackTrace": "Nenhum rastro de pilha disponível", + "fullReport": "Relatório de erro completo", + "helpText": "Se esse erro persistir, copie o relatório de erro acima e compartilhe com a equipe de suporte. Você pode encontrar as informações de contato na página Sobre." }, "errors": { "clickToCopy": "Clique para copiar detalhes", @@ -203,6 +224,7 @@ "emptyUrl": "Por favor, insira uma URL", "errorDetails": "Detalhes do Erro", "fetchInfoFailed": "Falha ao buscar informações do vídeo", + "invalidUrl": "O conteúdo da área de transferência não é uma URL válida", "networkError": "Algum erro ocorreu. Verifique sua rede e use uma URL correta", "pasteFromClipboard": "Falha ao colar da área de transferência" }, @@ -210,10 +232,23 @@ "clearCancelled": "Limpar Cancelados", "clearCompleted": "Limpar Concluídos", "clearErrors": "Limpar Erros", + "clearAll": "Limpar todo o histórico", + "clearAllAction": "Limpar histórico", + "clearSelection": "Limpar seleção", + "confirmClearAllTitle": "Limpar todo o histórico?", + "confirmClearAllDescription": "Remover {{count}} itens do seu histórico. Os arquivos permanecem no disco.", + "confirmDeleteSelectedTitle": "Remover itens selecionados?", + "confirmDeleteSelectedDescription": "Remover {{count}} itens do seu histórico. Os arquivos permanecem no disco.", + "alsoDeleteFiles": "Também excluir arquivos", + "confirmDeletePlaylistTitle": "Remover histórico da playlist?", + "confirmDeletePlaylistDescription": "Remover {{count}} itens de {{title}} e excluir seus arquivos.", "copyToClipboard": "Copiar para área de transferência", "copyUrl": "Copiar URL", "date": "Data", + "deletePlaylist": "Remover playlist", + "deleteSelected": "Remover selecionados", "description": "Ver e gerenciar seu histórico de downloads", + "doneSelecting": "Concluído", "duration": "Duração", "fileSize": "Tamanho do Arquivo", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "Abrir Localização do Arquivo", "openFolder": "Abrir Pasta", "openInBrowser": "Clique para abrir no navegador", + "removeAction": "Remover", "removeItem": "Remover Item", + "select": "Selecionar", + "selectAll": "Selecionar tudo", + "selectVisible": "Selecionar visíveis", + "selectItem": "Selecionar item", + "selectedCount": "{{count}} selecionados", + "selectionSummary": "{{selected}} de {{total}} visíveis selecionados", "stats": { "cancelled": "Cancelado", "completed": "Concluído", @@ -247,9 +289,9 @@ "about": "Sobre", "download": "Download", "playlist": "Baixar Playlist", - "preferences": "Preferências", "rss": "RSS", "subscriptions": "Assinaturas", + "preferences": "Preferências", "supportedSites": "Sites Suportados", "theme": "Tema:" }, @@ -258,9 +300,15 @@ "downloadCompleted": "Download concluído", "downloadFailed": "Download falhou", "downloadStarted": "Download iniciado", + "historyCleared": "Histórico limpo", + "historyClearFailed": "Falha ao limpar histórico", "itemRemoved": "Item removido", + "itemsRemoved": "{{count}} itens removidos", + "itemsRemoveFailed": "Falha ao remover itens selecionados", "openFileFailed": "Falha ao abrir arquivo", "openFolderFailed": "Falha ao abrir pasta", + "playlistHistoryRemoved": "Playlist removida e arquivos excluídos", + "playlistHistoryRemoveFailed": "Falha ao remover histórico da playlist", "removeFailed": "Falha ao remover item", "settingsSaved": "Configurações salvas", "urlCopied": "URL copiada para área de transferência", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "Lista de reprodução", "clearPreview": "Limpar visualização", + "collapsedProgress": "Baixando playlist: {{completed}} / {{total}} concluído", "comingSoon": "Recurso de download de playlist em breve!", "completed": "Playlist baixada", "description": "Baixar todos os vídeos de uma playlist ou canal do YouTube", @@ -284,22 +333,28 @@ "folderFormat": "Formato de nome de pasta para playlists", "foundVideos": "Encontrados {{count}} vídeos na playlist", "groupActive": "{{count}} ativo", - "groupErrors": "{{contagem}} falhou", - "groupSummary": "{{concluído}} / {{total}} concluído", + "groupCollapse": "Recolher", + "groupErrors": "{{count}} falhou", + "groupExpand": "Expandir", + "groupSummary": "{{completed}} / {{total}} concluído", "linkLabel": "URL da Playlist", "noEntries": "Nenhum vídeo foi encontrado nesta playlist", "noEntriesInRange": "Nenhum vídeo no intervalo selecionado", "noRangeSelected": "Sem definição final - playlist completa selecionada", "playlistUrlDescription": "Baixar todos os vídeos de uma playlist em lote", - "positionLabel": "Item {{índice}} de {{total}}", + "positionLabel": "Item {{index}} de {{total}}", "previewButton": "Visualizar lista de reprodução", "previewFailed": "Falha ao visualizar a playlist", - "previewRequired": "Visualize a lista de reprodução antes de fazer o download.", "previewSummary": "Visualize os itens da lista de reprodução antes de fazer o download.", + "previewRequired": "Visualize a lista de reprodução antes de fazer o download.", "range": "Intervalo (Opcional)", "resetToDefault": "Redefinir para padrão", - "selectedRange": "Intervalo: {{início}}-{{fim}}", + "selectedRange": "Intervalo: {{start}}-{{end}}", + "selectedVideos": "{{count}} selecionados", + "downloadCurrentRange": "Baixar selecionados", "showingCount": "Exibindo {{count}} vídeos", + "selectEntry": "Selecionar entrada {{index}}", + "noEntriesSelected": "Nenhuma entrada selecionada", "startIndex": "Início (1)", "title": "Baixar Playlist", "totalVideos": "Total de vídeos: {{count}}", @@ -312,39 +367,61 @@ "audio": "Preferências de Áudio", "browserForCookies": "Selecionar navegador para usar cookies", "browserForCookiesDescription": "Navegador para extrair cookies para autenticação", + "browserForCookiesProfile": "Nome do perfil ou caminho", + "browserForCookiesProfileDescription": "Caminho do perfil para o navegador selecionado acima. Preenchido automaticamente quando possível.", + "browserForCookiesProfilePlaceholder": "Nome do perfil ou caminho completo (opcional)", + "browserForCookiesProfileInvalid": "O caminho do perfil não é válido. Escolha a pasta do perfil do navegador selecionado.", + "browserForCookiesProfileInvalidPath": "Essa pasta não existe. Escolha uma pasta de perfil existente.", + "browserForCookiesProfileInvalidProfile": "Nome do perfil não encontrado no local padrão do navegador.", + "browserForCookiesProfileInvalidUnsupported": "Nenhum local de perfil padrão é conhecido para este navegador nesta plataforma.", + "browserForCookiesProfileInvalidEmpty": "Digite um caminho de perfil para o navegador selecionado.", + "cookiesFile": "Arquivo de cookies", + "cookiesFileDescription": "Arquivo de cookies formatados do Netscape para carregar para autenticação", + "clearCookiesFile": "Claro", + "cookiesHelpTitle": "Usando cookies", + "cookiesHelpBrowser": "Escolha seu navegador acima para reutilizar automaticamente a sessão de login.", + "cookiesHelpFile": "Exporte um arquivo de cookies do Netscape (consulte as perguntas frequentes do yt-dlp) e selecione-o aqui quando necessário.", + "cookiesHelpFaq": "Perguntas frequentes sobre cookies do yt-dlp", + "openLinkError": "Falha ao abrir o link", "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, - "clearConfigFile": "Claro", - "clearCookiesFile": "Claro", "configFile": "Usar arquivo de configuração", "configFileDescription": "Arquivo de configuração personalizado para yt-dlp", - "cookiesFile": "Arquivo de cookies", - "cookiesFileDescription": "Arquivo de cookies formatados do Netscape para carregar para autenticação", - "cookiesHelpBrowser": "Escolha seu navegador acima para reutilizar automaticamente a sessão de login.", - "cookiesHelpFaq": "Perguntas frequentes sobre cookies do yt-dlp", - "cookiesHelpFile": "Exporte um arquivo de cookies do Netscape (consulte as perguntas frequentes do yt-dlp) e selecione-o aqui quando necessário.", - "cookiesHelpTitle": "Usando cookies", + "clearConfigFile": "Claro", "dark": "Escuro", "description": "Configure suas preferências de download e configurações do aplicativo", "directorySelectError": "Falha ao selecionar diretório", "downloadPath": "Local de download", "downloadPathDescription": "Escolha onde salvar os arquivos baixados", - "enableAnalytics": "Ajude a melhorar o VidBee", - "enableAnalyticsDescription": "Compartilhe dados de uso anônimos para nos ajudar a entender como o aplicativo é usado e priorizar melhorias.", "fileSelectError": "Falha ao selecionar arquivo", "general": "Geral", + "language": "Idioma", + "languageDescription": "Escolha seu idioma preferido para a interface do aplicativo", + "light": "Claro", "hideDockIcon": "Ocultar ícone do Dock", "hideDockIconDescription": "Remova o VidBee do Dock do macOS. \nUse a barra de menu ou o ícone da bandeja para reabrir o aplicativo.", - "language": "Idioma", "launchAtLogin": "Lançar na inicialização", "launchAtLoginDescription": "Abra o VidBee automaticamente depois de fazer login no seu computador.", "launchAtLoginUnsupported": "A inicialização automática está disponível apenas no macOS e no Windows.", - "light": "Claro", + "enableAnalytics": "Ajude a melhorar o VidBee", + "enableAnalyticsDescription": "Compartilhe dados de uso anônimos para nos ajudar a entender como o aplicativo é usado e priorizar melhorias.", + "embedChapters": "Incorporar capítulos", + "embedChaptersDescription": "Adicionar marcadores de capítulo ao arquivo quando disponíveis", + "embedMetadata": "Incorporar metadados", + "embedMetadataDescription": "Gravar título, artista e outros metadados quando disponíveis", + "embedSubs": "Incorporar legendas", + "embedSubsDescription": "Incorporar legendas no arquivo de vídeo (mp4, webm, mkv)", + "embedThumbnail": "Incorporar miniatura", + "embedThumbnailDescription": "Adicionar a miniatura como arte de capa", "maxConcurrentDownloads": "Número máximo de downloads ativos", "maxConcurrentDownloadsDescription": "Número máximo de downloads simultâneos", "none": "Nenhum", @@ -362,7 +439,6 @@ "normal": "Normal", "worst": "Pior" }, - "openLinkError": "Falha ao abrir o link", "proxy": "Proxy", "proxyDescription": "Servidor proxy para requisições de rede", "proxyPlaceholder": "http://proxy:port", @@ -383,6 +459,119 @@ }, "video": "Preferências de Vídeo" }, + "subscriptions": { + "title": "Assinaturas", + "subtitle": "{{count}} assinatura{{count, plural, one {} other {s}}}", + "description": "Monitore automaticamente feeds RSS e enfileire novos downloads sem trabalho manual.", + "defaults": { + "title": "Padrões de automação", + "description": "Controle onde os downloads de assinaturas são armazenados e com que frequência o VidBee verifica novos vídeos.", + "downloadDirectory": "Baixar diretório", + "filenameTemplate": "Modelo de nome de arquivo (somente arquivo)", + "onlyLatest": "Baixe apenas o vídeo mais recente", + "onlyLatestDescription": "Quando ativado, o VidBee ignora os itens mais antigos do backlog e captura apenas o upload mais recente." + }, + "add": { + "title": "Adicionar RSS", + "description": "Cole um link de feed RSS. \nO VidBee detectará o feed automaticamente." + }, + "fields": { + "url": "URL do feed", + "keywords": "Filtro de palavra-chave (separado por vírgula)", + "tags": "Etiquetas automáticas", + "customDirectory": "Diretório personalizado", + "namingTemplate": "Modelo de nome de arquivo personalizado (somente arquivo)", + "onlyLatest": "Baixe apenas o vídeo mais recente", + "onlyLatestDescription": "Ignore os itens do backlog e busque apenas o upload mais recente deste feed.", + "enabled": "Habilitado", + "disabled": "Desabilitado", + "onlyLatestShort": "Apenas o mais recente" + }, + "placeholders": { + "url": "https://rsshub.app/youtube/user/@FKJ" + }, + "actions": { + "add": "Adicionar", + "refresh": "Atualizar", + "edit": "Editar", + "remove": "Remover", + "save": "Salvar alterações", + "selectDirectory": "Navegar", + "enable": "Habilitar", + "disable": "Desativar" + }, + "items": { + "title": "Últimos envios ({{count}})", + "count": "{{count}} itens", + "empty": "Nenhum item de feed recente encontrado.", + "status": { + "queued": "Na fila", + "notQueued": "Não está na fila", + "pending": "Pendente", + "downloading": "Baixando", + "processing": "Processamento", + "completed": "Concluído", + "error": "Fracassado", + "cancelled": "Cancelado" + }, + "fromChannel": "De {{channel}}", + "tooltip": { + "downloadStatus": "Status do download: {{status}}", + "downloadPending": "Aguardando detalhes do download...", + "notQueued": "Ainda não está na fila de download" + }, + "actions": { + "open": "Abrir no navegador", + "queue": "Adicionar à fila de download" + } + }, + "labels": { + "subscription": "Subscrição", + "unknown": "Assinatura desconhecida", + "noThumbnail": "Sem miniatura" + }, + "notifications": { + "directoryError": "Falha ao abrir o seletor de diretório.", + "missingUrl": "Cole primeiro o link do canal.", + "created": "Assinatura adicionada", + "createError": "Falha ao adicionar assinatura.", + "refreshStarted": "Atualização iniciada", + "removed": "Assinatura removida", + "updated": "Assinatura atualizada", + "itemQueued": "Adicionado à fila de download", + "itemAlreadyQueued": "Este vídeo já está na fila", + "queueError": "Falha ao adicionar à fila de download.", + "openLinkError": "Falha ao abrir o link do vídeo.", + "resolveError": "Falha ao resolver o URL do feed RSS." + }, + "detectedFeed": "Feed de {{platform}} detectado -> {{feed}}", + "detecting": "Detectando feed...", + "latestVideo": "Vídeo mais recente: {{title}}", + "lastChecked": "Última verificação: {{time}}", + "never": "Nunca", + "empty": "Ainda não há assinaturas. \nAdicione seus canais favoritos para iniciar o download automático.", + "edit": { + "title": "Editar {{name}}", + "description": "Ajuste filtros, tags e substituições para este feed." + }, + "status": { + "title": "Status", + "up-to-date": "Atualizado", + "checking": "Verificando", + "failed": "Fracassado", + "idle": "Parado", + "tooltip": { + "updatedAt": "Atualizado: {{time}}" + } + }, + "rssHub": { + "title": "Assinaturas automatizadas com RSSHub", + "description": "Combine VidBee com RSSHub para permitir assinaturas e downloads automatizados de várias plataformas. \nDepois de configurado, o VidBee é executado em segundo plano e baixa automaticamente os vídeos e conteúdos mais recentes.", + "learnMore": "Saiba mais sobre RSSHub", + "openDocs": "Abra a documentação do RSSHub", + "hint": "Não tem um URL de feed RSS? \nUse o RSSHub para gerar feeds RSS para YouTube, Twitter e milhares de outras plataformas." + } + }, "sites": { "homeInlineDescription": "Suporta {{sites}} e mais.", "moreDescription": "A lista completa do yt-dlp é atualizada constantemente pela comunidade.", @@ -467,118 +656,5 @@ }, "popularSection": "Plataformas principais", "viewAll": "Ver todos os sites suportados" - }, - "subscriptions": { - "actions": { - "add": "Adicionar", - "disable": "Desativar", - "edit": "Editar", - "enable": "Habilitar", - "refresh": "Atualizar", - "remove": "Remover", - "save": "Salvar alterações", - "selectDirectory": "Navegar" - }, - "add": { - "description": "Cole um link de feed RSS. \nO VidBee detectará o feed automaticamente.", - "title": "Adicionar RSS" - }, - "defaults": { - "description": "Controle onde os downloads de assinaturas são armazenados e com que frequência o VidBee verifica novos vídeos.", - "downloadDirectory": "Baixar diretório", - "filenameTemplate": "Modelo de nome de arquivo (somente arquivo)", - "onlyLatest": "Baixe apenas o vídeo mais recente", - "onlyLatestDescription": "Quando ativado, o VidBee ignora os itens mais antigos do backlog e captura apenas o upload mais recente.", - "title": "Padrões de automação" - }, - "description": "Monitore automaticamente feeds RSS e enfileire novos downloads sem trabalho manual.", - "detectedFeed": "Feed de {{plataforma}} detectado -> {{feed}}", - "detecting": "Detectando feed...", - "edit": { - "description": "Ajuste filtros, tags e substituições para este feed.", - "title": "Editar {{nome}}" - }, - "empty": "Ainda não há assinaturas. \nAdicione seus canais favoritos para iniciar o download automático.", - "fields": { - "customDirectory": "Diretório personalizado", - "disabled": "Desabilitado", - "enabled": "Habilitado", - "keywords": "Filtro de palavra-chave (separado por vírgula)", - "namingTemplate": "Modelo de nome de arquivo personalizado (somente arquivo)", - "onlyLatest": "Baixe apenas o vídeo mais recente", - "onlyLatestDescription": "Ignore os itens do backlog e busque apenas o upload mais recente deste feed.", - "onlyLatestShort": "Apenas o mais recente", - "tags": "Etiquetas automáticas", - "url": "URL do feed" - }, - "items": { - "actions": { - "open": "Abrir no navegador", - "queue": "Adicionar à fila de download" - }, - "count": "{{contar}} itens", - "empty": "Nenhum item de feed recente encontrado.", - "fromChannel": "De {{canal}}", - "status": { - "cancelled": "Cancelado", - "completed": "Concluído", - "downloading": "Baixando", - "error": "Fracassado", - "notQueued": "Não está na fila", - "pending": "Pendente", - "processing": "Processamento", - "queued": "Na fila" - }, - "title": "Últimos envios ({{count}})", - "tooltip": { - "downloadPending": "Aguardando detalhes do download...", - "downloadStatus": "Status do download: {{status}}", - "notQueued": "Ainda não está na fila de download" - } - }, - "labels": { - "noThumbnail": "Sem miniatura", - "subscription": "Subscrição", - "unknown": "Assinatura desconhecida" - }, - "lastChecked": "Última verificação: {{time}}", - "latestVideo": "Vídeo mais recente: {{title}}", - "never": "Nunca", - "notifications": { - "createError": "Falha ao adicionar assinatura.", - "created": "Assinatura adicionada", - "directoryError": "Falha ao abrir o seletor de diretório.", - "itemAlreadyQueued": "Este vídeo já está na fila", - "itemQueued": "Adicionado à fila de download", - "missingUrl": "Cole primeiro o link do canal.", - "openLinkError": "Falha ao abrir o link do vídeo.", - "queueError": "Falha ao adicionar à fila de download.", - "refreshStarted": "Atualização iniciada", - "removed": "Assinatura removida", - "resolveError": "Falha ao resolver o URL do feed RSS.", - "updated": "Assinatura atualizada" - }, - "placeholders": { - "url": "https://rsshub.app/youtube/user/@FKJ" - }, - "rssHub": { - "description": "Combine VidBee com RSSHub para permitir assinaturas e downloads automatizados de várias plataformas. \nDepois de configurado, o VidBee é executado em segundo plano e baixa automaticamente os vídeos e conteúdos mais recentes.", - "hint": "Não tem um URL de feed RSS? \nUse o RSSHub para gerar feeds RSS para YouTube, Twitter e milhares de outras plataformas.", - "learnMore": "Saiba mais sobre RSSHub", - "openDocs": "Abra a documentação do RSSHub", - "title": "Assinaturas automatizadas com RSSHub" - }, - "status": { - "checking": "Verificando", - "failed": "Fracassado", - "idle": "Parado", - "title": "Status", - "tooltip": { - "updatedAt": "Atualizado: {{hora}}" - }, - "up-to-date": "Atualizado" - }, - "subtitle": "{{count}} assinatura{{count, plural, one {} other {s}}}", - "title": "Assinaturas" } } diff --git a/src/renderer/src/locales/ru.json b/src/renderer/src/locales/ru.json index 9e052db..bf9434a 100644 --- a/src/renderer/src/locales/ru.json +++ b/src/renderer/src/locales/ru.json @@ -51,6 +51,12 @@ "documentationDescription": "Руководства, FAQ и общие рабочие процессы.", "feedback": "Обратная связь и проблемы", "feedbackDescription": "Поделитесь идеями или сообщите о проблемах на GitHub.", + "githubIssues": "GitHub", + "githubIssuesDescription": "Сообщайте об ошибках или предлагайте функции на GitHub.", + "xFeedback": "Twitter", + "xFeedbackDescription": "Поделитесь отзывом или предложениями в X, упомянув @nexmoex.", + "discord": "Discord", + "discordDescription": "Присоединяйтесь к нашему сообществу Discord для обсуждений и поддержки.", "license": "Лицензия", "licenseDescription": "Ознакомьтесь с условиями лицензии с открытым исходным кодом.", "website": "Официальный сайт", @@ -83,6 +89,7 @@ "currentLocation": "Текущее местоположение загрузки - ", "downloadLocation": "Местоположение загрузки", "downloadSubs": "Загрузить субтитры, если доступны", + "downloadSubsHint": "Сохранять субтитры отдельными файлами, если доступны", "end": "Конец", "endHint": "Если оставить пустым, будет загружено до конца", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "Загружайте видео и аудио с сотен сайтов", "title": "VidBee" }, - "audioExtract": { - "bad": "Плохое", - "best": "Лучшее", - "extract": "Извлечь", - "good": "Хорошее", - "normal": "Обычное", - "selectFormat": "Выбрать формат", - "selectQuality": "Выбрать качество", - "title": "Извлечь аудио", - "worst": "Худшее" - }, "download": { "active": "Активные", "all": "Все", @@ -123,6 +119,10 @@ "downloadBtn": "Загрузить", "downloadPending": "Ожидание", "downloadQueue": "Очередь загрузки", + "customDownloadFolder": "Пользовательская папка загрузки", + "autoFolderPlaceholder": "Автоматическая папка (на основе метаданных)", + "autoFolderHint": "Автоматические папки создаются из метаданных.", + "useAutoFolder": "Использовать автоматическую папку", "downloadVideo": "Загрузить видео", "downloading": "Загрузка...", "enterUrl": "Введите URL видео", @@ -149,15 +149,17 @@ "paste": "Вставить", "pastePlaylistUrl": "Нажмите, чтобы вставить ссылку на плейлист из буфера обмена [Ctrl + V]", "pasteUrl": "Нажмите, чтобы вставить URL видео или ID [Ctrl + V]", + "pasteUrlButton": "Вставить URL", "preparing": "Подготовка...", "processing": "Обработка", "progress": "Прогресс", "showDetails": "Показать детали", "hideDetails": "Скрыть детали", "selectAudioFormat": "Выбрать формат аудио", + "selectDownloadType": "Выберите тип загрузки", "selectFormat": "Выбрать формат", - "selectVideoFormat": "Выбрать формат видео", "startDownload": "Начать загрузку", + "selectVideoFormat": "Выбрать формат видео", "singleVideo": "Одно видео", "speed": "Скорость", "title": "Название", @@ -195,6 +197,25 @@ "subscription": "Подписка" } }, + "error": { + "title": "Что-то пошло не так", + "description": "Произошла непредвиденная ошибка. Попробуйте перезагрузить приложение или сообщите об этой проблеме, если она повторится.", + "message": "Сообщение об ошибке", + "unknownError": "Произошла неизвестная ошибка", + "goHome": "На главную", + "reload": "Перезагрузить приложение", + "copyReport": "Копировать отчет об ошибке", + "copied": "Скопировано!", + "copySuccess": "Отчет об ошибке скопирован в буфер обмена", + "copyFailed": "Не удалось скопировать отчет об ошибке", + "showDetails": "Показать детали", + "hideDetails": "Скрыть детали", + "stackTrace": "Трассировка стека", + "componentStack": "Стек компонентов", + "noStackTrace": "Нет доступной трассировки стека", + "fullReport": "Полный отчет об ошибке", + "helpText": "Если эта ошибка повторяется, скопируйте отчет выше и поделитесь им с командой поддержки. Контактные данные можно найти на странице «О программе»." + }, "errors": { "clickToCopy": "Нажмите, чтобы скопировать детали", "clipboardEmpty": "Буфер обмена пуст", @@ -203,6 +224,7 @@ "emptyUrl": "Пожалуйста, введите URL", "errorDetails": "Детали ошибки", "fetchInfoFailed": "Не удалось получить информацию о видео", + "invalidUrl": "Содержимое буфера обмена не является допустимым URL", "networkError": "Произошла ошибка. Проверьте вашу сеть и используйте правильный URL", "pasteFromClipboard": "Не удалось вставить из буфера обмена" }, @@ -210,10 +232,23 @@ "clearCancelled": "Очистить отменённые", "clearCompleted": "Очистить завершённые", "clearErrors": "Очистить ошибки", + "clearAll": "Очистить всю историю", + "clearAllAction": "Очистить историю", + "clearSelection": "Очистить выбор", + "confirmClearAllTitle": "Очистить всю историю?", + "confirmClearAllDescription": "Удалить {{count}} элементов из истории. Файлы останутся на диске.", + "confirmDeleteSelectedTitle": "Удалить выбранные элементы?", + "confirmDeleteSelectedDescription": "Удалить {{count}} элементов из истории. Файлы останутся на диске.", + "alsoDeleteFiles": "Также удалить файлы", + "confirmDeletePlaylistTitle": "Удалить историю плейлиста?", + "confirmDeletePlaylistDescription": "Удалить {{count}} элементов из {{title}} и удалить их файлы.", "copyToClipboard": "Копировать в буфер обмена", "copyUrl": "Копировать URL", "date": "Дата", + "deletePlaylist": "Удалить плейлист", + "deleteSelected": "Удалить выбранные", "description": "Просмотр и управление историей загрузок", + "doneSelecting": "Готово", "duration": "Длительность", "fileSize": "Размер файла", "filters": { @@ -229,7 +264,14 @@ "openFileLocation": "Открыть местоположение файла", "openFolder": "Открыть папку", "openInBrowser": "Нажмите, чтобы открыть в браузере", + "removeAction": "Удалить", "removeItem": "Удалить элемент", + "select": "Выбрать", + "selectAll": "Выбрать все", + "selectVisible": "Выбрать видимые", + "selectItem": "Выбрать элемент", + "selectedCount": "Выбрано: {{count}}", + "selectionSummary": "{{selected}} из {{total}} видимых выбрано", "stats": { "cancelled": "Отменённые", "completed": "Завершённые", @@ -258,9 +300,15 @@ "downloadCompleted": "Загрузка завершена", "downloadFailed": "Загрузка не удалась", "downloadStarted": "Загрузка началась", + "historyCleared": "История очищена", + "historyClearFailed": "Не удалось очистить историю", "itemRemoved": "Элемент удалён", + "itemsRemoved": "{{count}} элементов удалено", + "itemsRemoveFailed": "Не удалось удалить выбранные элементы", "openFileFailed": "Не удалось открыть файл", "openFolderFailed": "Не удалось открыть папку", + "playlistHistoryRemoved": "Плейлист удален, файлы удалены", + "playlistHistoryRemoveFailed": "Не удалось удалить историю плейлиста", "removeFailed": "Не удалось удалить элемент", "settingsSaved": "Настройки сохранены", "urlCopied": "URL скопирован в буфер обмена", @@ -269,6 +317,7 @@ "playlist": { "badgeLabel": "Плейлист", "clearPreview": "Очистить предпросмотр", + "collapsedProgress": "Загрузка плейлиста: {{completed}} / {{total}} завершено", "comingSoon": "Функция загрузки плейлиста скоро появится!", "completed": "Плейлист загружен", "description": "Загрузить все видео из плейлиста или канала YouTube", @@ -284,7 +333,9 @@ "folderFormat": "Формат имени папки для плейлистов", "foundVideos": "Найдено {{count}} видео в плейлисте", "groupActive": "{{count}} активных", + "groupCollapse": "Свернуть", "groupErrors": "{{count}} ошибок", + "groupExpand": "Развернуть", "groupSummary": "{{completed}} / {{total}} завершено", "linkLabel": "URL плейлиста", "noEntries": "В этом плейлисте не найдено видео", @@ -299,7 +350,11 @@ "range": "Диапазон (необязательно)", "resetToDefault": "Сбросить на значения по умолчанию", "selectedRange": "Диапазон: {{start}}-{{end}}", + "selectedVideos": "{{count}} выбрано", + "downloadCurrentRange": "Загрузить выбранное", "showingCount": "Показано {{count}} видео", + "selectEntry": "Выбрать запись {{index}}", + "noEntriesSelected": "Нет выбранных записей", "startIndex": "Начало (1)", "title": "Загрузить плейлист", "totalVideos": "Всего видео: {{count}}", @@ -312,6 +367,14 @@ "audio": "Настройки аудио", "browserForCookies": "Выбрать браузер для использования cookie", "browserForCookiesDescription": "Браузер для извлечения cookie для аутентификации", + "browserForCookiesProfile": "Имя профиля или путь", + "browserForCookiesProfileDescription": "Путь профиля для выбранного выше браузера. Заполняется автоматически, если возможно.", + "browserForCookiesProfilePlaceholder": "Имя профиля или полный путь (необязательно)", + "browserForCookiesProfileInvalid": "Путь профиля недействителен. Выберите папку профиля для выбранного браузера.", + "browserForCookiesProfileInvalidPath": "Эта папка не существует. Выберите существующую папку профиля.", + "browserForCookiesProfileInvalidProfile": "Имя профиля не найдено в стандартном расположении браузера.", + "browserForCookiesProfileInvalidUnsupported": "Для этого браузера на этой платформе неизвестно стандартное расположение профиля.", + "browserForCookiesProfileInvalidEmpty": "Введите путь профиля для выбранного браузера.", "cookiesFile": "Файл cookie", "cookiesFileDescription": "Файл cookie в формате Netscape для загрузки для аутентификации", "clearCookiesFile": "Очистить", @@ -323,9 +386,13 @@ "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, "configFile": "Использовать файл конфигурации", "configFileDescription": "Пользовательский файл конфигурации для yt-dlp", @@ -338,6 +405,7 @@ "fileSelectError": "Не удалось выбрать файл", "general": "Общие", "language": "Язык", + "languageDescription": "Выберите предпочтительный язык интерфейса приложения", "light": "Светлая", "hideDockIcon": "Скрыть иконку Dock", "hideDockIconDescription": "Удалить VidBee из Dock macOS. Используйте строку меню или иконку в трее, чтобы снова открыть приложение.", @@ -346,6 +414,14 @@ "launchAtLoginUnsupported": "Автозапуск доступен только в macOS и Windows.", "enableAnalytics": "Помочь улучшить VidBee", "enableAnalyticsDescription": "Поделитесь анонимными данными об использовании, чтобы помочь нам понять, как используется приложение, и расставить приоритеты улучшений.", + "embedChapters": "Встраивать главы", + "embedChaptersDescription": "Добавлять маркеры глав в файл, если доступны", + "embedMetadata": "Встраивать метаданные", + "embedMetadataDescription": "Записывать название, исполнителя и другие метаданные, если доступны", + "embedSubs": "Встраивать субтитры", + "embedSubsDescription": "Встраивать субтитры в файл видео (mp4, webm, mkv)", + "embedThumbnail": "Встраивать миниатюру", + "embedThumbnailDescription": "Добавлять миниатюру как обложку", "maxConcurrentDownloads": "Максимальное количество активных загрузок", "maxConcurrentDownloadsDescription": "Максимальное количество одновременных загрузок", "none": "Нет", diff --git a/src/renderer/src/locales/zh-TW.json b/src/renderer/src/locales/zh-TW.json index 230de40..8da815b 100644 --- a/src/renderer/src/locales/zh-TW.json +++ b/src/renderer/src/locales/zh-TW.json @@ -16,7 +16,6 @@ "betaProgramDescription": "搶先獲得預覽版和即將發布的新功能。", "betaProgramTitle": "預覽通道", "description": "VidBee 是一個基於 Node.js 和 Electron 構建的自由開源應用,使用 yt-dlp 來完成下載。", - "downloadingUpdate": "正在下載更新", "followAuthorActions": { "follow": "關注 @nexmoex" }, @@ -25,12 +24,6 @@ "followAuthorTitle": "關注開發者", "here": "此處", "homepage": "首頁", - "latestVersionBadge": "最新版本:v{{version}}", - "latestVersionStatus": { - "available": "有新版本可用", - "error": "無法取得最新版本", - "uptodate": "您已是最新版本" - }, "notifications": { "checkingUpdates": "正在搜尋更新...", "downloadError": "下載更新失敗", @@ -38,14 +31,14 @@ "downloadUpdate": "下載並安裝更新 {{version}}?", "manualDownloadAction": "立即下載", "noUpdatesAvailable": "您正在使用最新版本", - "restartNowAction": "立即重新啟動", "restartToUpdate": "立即重新啟動以安裝更新?", - "unknownErrorFallback": "未知錯誤", + "restartNowAction": "立即重新啟動", "updateAvailable": "發現新版本:{{version}}", "updateAvailableMessage": "新版本 {{version}} 已推出。請從官方網站下載。", "updateDownloaded": "更新已下載,重新啟動以安裝", "updateDownloadedVersion": "下載更新 {{version}},重新啟動安裝", - "updateError": "檢查更新失敗:{{error}}" + "updateError": "檢查更新失敗:{{error}}", + "unknownErrorFallback": "未知錯誤" }, "preferencesDescription": "無需離開此頁即可調整更新設定。", "preferencesTitle": "快速切換", @@ -58,6 +51,12 @@ "documentationDescription": "指南、常見問題和常見流程。", "feedback": "意見回饋與問題", "feedbackDescription": "在 GitHub 上分享想法或回報問題。", + "githubIssues": "GitHub", + "githubIssuesDescription": "在 GitHub 回報錯誤或提出功能需求。", + "xFeedback": "Twitter", + "xFeedbackDescription": "在 X 上提及 @nexmoex 分享回饋或建議。", + "discord": "Discord", + "discordDescription": "加入我們的 Discord 社群進行討論與支援。", "license": "授權條款", "licenseDescription": "查閱開源授權條款。", "website": "官方網站", @@ -76,13 +75,21 @@ "sourceCode": "原始碼已開放", "title": "關於", "version": "版本", - "versionLabel": "v{{version}}" + "versionLabel": "v{{version}}", + "latestVersionBadge": "最新版本:v{{version}}", + "latestVersionStatus": { + "available": "有新版本可用", + "uptodate": "您已是最新版本", + "error": "無法取得最新版本" + }, + "downloadingUpdate": "正在下載更新" }, "advancedOptions": { "closeWhenDone": "下載完成後關閉應用程式", "currentLocation": "目前下載位置 - ", "downloadLocation": "下載位置", "downloadSubs": "若有字幕則下載", + "downloadSubsHint": "可用時將字幕另存為獨立檔案", "end": "結束", "endHint": "如果留空,將下載到結尾", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "從數百個網站下載影片和音訊", "title": "VidBee" }, - "audioExtract": { - "bad": "較差", - "best": "最佳", - "extract": "擷取", - "good": "良好", - "normal": "標準", - "selectFormat": "選擇格式", - "selectQuality": "選擇品質", - "title": "擷取音訊", - "worst": "最差" - }, "download": { "active": "進行中", "all": "全部", @@ -123,6 +119,10 @@ "downloadBtn": "下載", "downloadPending": "待處理", "downloadQueue": "下載佇列", + "customDownloadFolder": "自訂下載資料夾", + "autoFolderPlaceholder": "自動資料夾(依中繼資料)", + "autoFolderHint": "自動資料夾會由中繼資料建立。", + "useAutoFolder": "使用自動資料夾", "downloadVideo": "下載影片", "downloading": "正在下載...", "enterUrl": "輸入影片連結", @@ -130,44 +130,17 @@ "error": "錯誤", "fetch": "取得", "fetchingVideoInfo": "正在取得影片資訊...", - "goToSettings": "前往“設置”", - "hideDetails": "隱藏詳細信息", "history": "歷史", "imageLoadError": "圖片載入失敗", "imagePlaceholder": "暫無圖片", "infoUnavailable": "一鍵下載(資訊不可用)", "loading": "載入中", - "metadata": { - "audioCodec": "音頻編解碼器", - "codec": "編解碼器", - "completedAt": "完成於", - "createdAt": "創建於", - "description": "描述", - "downloadPath": "下載路徑", - "fileSize": "文件大小", - "format": "格式", - "formatNote": "格式註釋", - "fps": "FPS", - "height": "高度", - "playlist": "播放列表", - "protocol": "協定", - "quality": "品質", - "savedFile": "保存的文件", - "source": "來源", - "speed": "速度", - "startedAt": "開始於", - "subscription": "訂閱", - "tags": "標籤", - "url": "來源網址", - "videoCodec": "視頻編解碼器", - "views": "意見", - "width": "寬度" - }, "moreOptions": "更多選項", "noActiveDownloads": "暫無進行中的下載", "noAudio": "無音訊", "noHistory": "暫無下載歷史", "noItems": "未找到項目", + "goToSettings": "前往“設置”", "oneClickDownload": "一鍵下載", "oneClickDownloadDescription": "使用預設設定直接下載,無需確認", "oneClickDownloadEnabled": "已啟用一鍵下載。下載將直接以默認設置開始。", @@ -176,15 +149,17 @@ "paste": "貼上", "pastePlaylistUrl": "點擊從剪貼簿貼上播放清單連結 [Ctrl + V]", "pasteUrl": "點擊貼上影片連結或 ID [Ctrl + V]", + "pasteUrlButton": "貼上網址", "preparing": "正在準備...", "processing": "處理中", "progress": "進度", + "showDetails": "顯示詳情", + "hideDetails": "隱藏詳細信息", "selectAudioFormat": "選擇音訊格式", "selectDownloadType": "選擇下載類型", "selectFormat": "選擇格式", - "selectVideoFormat": "選擇影片格式", "startDownload": "開始下載", - "showDetails": "顯示詳情", + "selectVideoFormat": "選擇影片格式", "singleVideo": "單個影片", "speed": "速度", "title": "標題", @@ -194,7 +169,52 @@ "urlPlaceholder": "https://www.youtube.com/watch?v=...", "video": "影片", "videoInfo": "影片資訊", - "videoInfoUpdated": "影片資訊已更新" + "videoInfoUpdated": "影片資訊已更新", + "metadata": { + "source": "來源", + "playlist": "播放列表", + "format": "格式", + "quality": "品質", + "codec": "編解碼器", + "savedFile": "保存的文件", + "url": "來源網址", + "description": "描述", + "views": "意見", + "tags": "標籤", + "downloadPath": "下載路徑", + "createdAt": "創建於", + "startedAt": "開始於", + "completedAt": "完成於", + "speed": "速度", + "fileSize": "文件大小", + "width": "寬度", + "height": "高度", + "fps": "FPS", + "videoCodec": "視頻編解碼器", + "audioCodec": "音頻編解碼器", + "formatNote": "格式註釋", + "protocol": "協定", + "subscription": "訂閱" + } + }, + "error": { + "title": "發生錯誤", + "description": "發生未預期的錯誤。請重新載入應用程式,若問題持續請回報。", + "message": "錯誤訊息", + "unknownError": "發生未知錯誤", + "goHome": "回到首頁", + "reload": "重新載入應用程式", + "copyReport": "複製錯誤報告", + "copied": "已複製!", + "copySuccess": "錯誤報告已複製到剪貼簿", + "copyFailed": "無法複製錯誤報告", + "showDetails": "顯示詳細資訊", + "hideDetails": "隱藏詳細資訊", + "stackTrace": "堆疊追蹤", + "componentStack": "元件堆疊", + "noStackTrace": "沒有可用的堆疊追蹤", + "fullReport": "完整錯誤報告", + "helpText": "若此錯誤持續,請複製上方的錯誤報告並與支援團隊分享。聯絡資訊可在「關於」頁面找到。" }, "errors": { "clickToCopy": "點擊複製詳情", @@ -204,6 +224,7 @@ "emptyUrl": "請輸入連結", "errorDetails": "錯誤詳情", "fetchInfoFailed": "取得影片資訊失敗", + "invalidUrl": "剪貼簿內容不是有效的網址", "networkError": "發生錯誤。請檢查網路並確認連結正確", "pasteFromClipboard": "從剪貼簿貼上失敗" }, @@ -211,10 +232,23 @@ "clearCancelled": "清除已取消", "clearCompleted": "清除已完成", "clearErrors": "清除錯誤", + "clearAll": "清除所有歷史紀錄", + "clearAllAction": "清除歷史紀錄", + "clearSelection": "清除選取", + "confirmClearAllTitle": "清除所有歷史紀錄?", + "confirmClearAllDescription": "從歷史紀錄移除 {{count}} 項。檔案仍會保留在磁碟上。", + "confirmDeleteSelectedTitle": "移除選取項目?", + "confirmDeleteSelectedDescription": "從歷史紀錄移除 {{count}} 項。檔案仍會保留在磁碟上。", + "alsoDeleteFiles": "同時刪除檔案", + "confirmDeletePlaylistTitle": "移除播放清單歷史紀錄?", + "confirmDeletePlaylistDescription": "從 {{title}} 移除 {{count}} 項並刪除其檔案。", "copyToClipboard": "複製到剪貼簿", "copyUrl": "複製連結", "date": "日期", + "deletePlaylist": "移除播放清單", + "deleteSelected": "移除選取", "description": "檢視並管理下載歷史", + "doneSelecting": "完成", "duration": "時長", "fileSize": "檔案大小", "filters": { @@ -230,7 +264,14 @@ "openFileLocation": "開啟檔案位置", "openFolder": "開啟資料夾", "openInBrowser": "點擊在瀏覽器中開啟", + "removeAction": "移除", "removeItem": "移除項目", + "select": "選取", + "selectAll": "全選", + "selectVisible": "選取可見項目", + "selectItem": "選取項目", + "selectedCount": "已選取 {{count}} 項", + "selectionSummary": "已選取可見項目 {{selected}} / {{total}}", "stats": { "cancelled": "已取消", "completed": "已完成", @@ -248,9 +289,9 @@ "about": "關於", "download": "下載", "playlist": "下載播放清單", - "preferences": "偏好設定", "rss": "RSS", "subscriptions": "訂閱", + "preferences": "偏好設定", "supportedSites": "支援的網站", "theme": "主題:" }, @@ -259,9 +300,15 @@ "downloadCompleted": "下載完成", "downloadFailed": "下載失敗", "downloadStarted": "下載已開始", + "historyCleared": "歷史紀錄已清除", + "historyClearFailed": "清除歷史紀錄失敗", "itemRemoved": "項目已移除", + "itemsRemoved": "已移除 {{count}} 項", + "itemsRemoveFailed": "移除選取項目失敗", "openFileFailed": "開啟檔案失敗", "openFolderFailed": "開啟資料夾失敗", + "playlistHistoryRemoved": "播放清單已移除並刪除檔案", + "playlistHistoryRemoveFailed": "移除播放清單歷史紀錄失敗", "removeFailed": "移除項目失敗", "settingsSaved": "設定已儲存", "urlCopied": "連結已複製到剪貼簿", @@ -270,6 +317,7 @@ "playlist": { "badgeLabel": "播放列表", "clearPreview": "清晰預覽", + "collapsedProgress": "正在下載播放清單:{{completed}} / {{total}} 已完成", "comingSoon": "播放清單下載功能即將推出!", "completed": "播放清單已下載", "description": "下載 YouTube 播放清單或頻道中的全部影片", @@ -285,8 +333,10 @@ "folderFormat": "播放清單資料夾命名格式", "foundVideos": "在播放清單中找到 {{count}} 個影片", "groupActive": "{{count}} 個活躍", + "groupCollapse": "收合", "groupErrors": "{{count}} 失敗", - "groupSummary": "{{已完成}} / {{總計}}已完成", + "groupExpand": "展開", + "groupSummary": "{{completed}} / {{total}} 已完成", "linkLabel": "播放清單連結", "noEntries": "在此播放列表中找不到視頻", "noEntriesInRange": "所選範圍內沒有視頻", @@ -295,12 +345,16 @@ "positionLabel": "第 {{index}} 項,共 {{total}} 項", "previewButton": "預覽播放列表", "previewFailed": "預覽播放列表失敗", - "previewRequired": "下載前預覽播放列表。", "previewSummary": "下載前預覽播放列表項目。", + "previewRequired": "下載前預覽播放列表。", "range": "範圍(可選)", "resetToDefault": "恢復預設", - "selectedRange": "範圍:{{開始}}-{{結束}}", + "selectedRange": "範圍:{{start}}-{{end}}", + "selectedVideos": "已選取 {{count}} 項", + "downloadCurrentRange": "下載選取項目", "showingCount": "顯示 {{count}} 個視頻", + "selectEntry": "選取項目 {{index}}", + "noEntriesSelected": "未選取任何項目", "startIndex": "開始(1)", "title": "下載播放清單", "totalVideos": "視頻總數:{{count}}", @@ -313,39 +367,61 @@ "audio": "音訊偏好", "browserForCookies": "選擇用於讀取 Cookie 的瀏覽器", "browserForCookiesDescription": "用於身份驗證的瀏覽器 Cookie 提取", + "browserForCookiesProfile": "設定檔名稱或路徑", + "browserForCookiesProfileDescription": "上方選取之瀏覽器的設定檔路徑。如可用將自動填入。", + "browserForCookiesProfilePlaceholder": "設定檔名稱或完整路徑(選填)", + "browserForCookiesProfileInvalid": "設定檔路徑無效。請選擇所選瀏覽器的設定檔資料夾。", + "browserForCookiesProfileInvalidPath": "該資料夾不存在。請選擇現有的設定檔資料夾。", + "browserForCookiesProfileInvalidProfile": "在預設瀏覽器位置找不到設定檔名稱。", + "browserForCookiesProfileInvalidUnsupported": "此平台上該瀏覽器沒有已知的預設設定檔位置。", + "browserForCookiesProfileInvalidEmpty": "請輸入所選瀏覽器的設定檔路徑。", + "cookiesFile": "餅乾文件", + "cookiesFileDescription": "要加載以進行身份​​驗證的 Netscape 格式的 cookie 文件", + "clearCookiesFile": "清除", + "cookiesHelpTitle": "使用cookie", + "cookiesHelpBrowser": "選擇上面的瀏覽器以自動重用其登錄會話。", + "cookiesHelpFile": "導出 Netscape cookies 文件(請參閱 yt-dlp FAQ)並在需要時在此處選擇它。", + "cookiesHelpFaq": "打開 yt-dlp cookies 常見問題解答", + "openLinkError": "無法打開鏈接", "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, - "clearConfigFile": "清除", - "clearCookiesFile": "清除", "configFile": "使用設定檔", "configFileDescription": "yt-dlp 的自訂設定檔", - "cookiesFile": "餅乾文件", - "cookiesFileDescription": "要加載以進行身份​​驗證的 Netscape 格式的 cookie 文件", - "cookiesHelpBrowser": "選擇上面的瀏覽器以自動重用其登錄會話。", - "cookiesHelpFaq": "打開 yt-dlp cookies 常見問題解答", - "cookiesHelpFile": "導出 Netscape cookies 文件(請參閱 yt-dlp FAQ)並在需要時在此處選擇它。", - "cookiesHelpTitle": "使用cookie", + "clearConfigFile": "清除", "dark": "深色", "description": "設定下載偏好和應用程式設定", "directorySelectError": "選擇目錄失敗", "downloadPath": "下載位置", "downloadPathDescription": "選擇儲存下載檔案的位置", - "enableAnalytics": "幫助改進 VidBee", - "enableAnalyticsDescription": "共享匿名使用數據,幫助我們了解應用程序的使用情況並確定改進的優先順序。", "fileSelectError": "選擇檔案失敗", "general": "一般", + "language": "語言", + "languageDescription": "選擇應用程式介面的偏好語言", + "light": "淺色", "hideDockIcon": "隱藏 Dock 圖標", "hideDockIconDescription": "從 macOS Dock 中刪除 VidBee。使用菜單欄或託盤圖標重新打開應用程序。", - "language": "語言", "launchAtLogin": "啟動時啟動", "launchAtLoginDescription": "登錄計算機後自動打開 VidBee。", "launchAtLoginUnsupported": "自動啟動僅適用於 macOS 和 Windows。", - "light": "淺色", + "enableAnalytics": "幫助改進 VidBee", + "enableAnalyticsDescription": "共享匿名使用數據,幫助我們了解應用程序的使用情況並確定改進的優先順序。", + "embedChapters": "嵌入章節", + "embedChaptersDescription": "可用時在檔案中加入章節標記", + "embedMetadata": "嵌入中繼資料", + "embedMetadataDescription": "可用時寫入標題、藝術家與其他中繼資料", + "embedSubs": "嵌入字幕", + "embedSubsDescription": "將字幕嵌入影片檔案(mp4、webm、mkv)", + "embedThumbnail": "嵌入縮圖", + "embedThumbnailDescription": "將縮圖作為封面圖", "maxConcurrentDownloads": "最大活動下載數", "maxConcurrentDownloadsDescription": "最大同時下載數量", "none": "無", @@ -363,7 +439,6 @@ "normal": "標準", "worst": "最差" }, - "openLinkError": "無法打開鏈接", "proxy": "代理伺服器", "proxyDescription": "網路請求的代理伺服器", "proxyPlaceholder": "http://proxy:port", @@ -384,6 +459,119 @@ }, "video": "影片偏好" }, + "subscriptions": { + "title": "訂閱", + "subtitle": "{{count}} 訂閱{{count,複數,一個 {} 其它 {s}}}", + "description": "自動監控 RSS 源並對新下載進行排隊,無需手動操作。", + "defaults": { + "title": "自動化默認值", + "description": "控制訂閱下載的存儲位置以及 VidBee 檢查新視頻的頻率。", + "downloadDirectory": "下載目錄", + "filenameTemplate": "文件名模板(僅限文件)", + "onlyLatest": "僅下載最新視頻", + "onlyLatestDescription": "啟用後,VidBee 會跳過較舊的積壓項目,僅獲取最新上傳的項目。" + }, + "add": { + "title": "添加RSS", + "description": "粘貼 RSS 源鏈接。 VidBee 將自動檢測提要。" + }, + "fields": { + "url": "提要網址", + "keywords": "關鍵字過濾器(逗號分隔)", + "tags": "自動標籤", + "customDirectory": "自定義目錄", + "namingTemplate": "自定義文件名模板(僅限文件)", + "onlyLatest": "僅下載最新視頻", + "onlyLatestDescription": "忽略積壓的項目並僅從此源中獲取最新上傳的內容。", + "enabled": "啟用", + "disabled": "殘疾人", + "onlyLatestShort": "僅最新" + }, + "placeholders": { + "url": "https://rsshub.app/youtube/user/@FKJ" + }, + "actions": { + "add": "添加", + "refresh": "重新整理", + "edit": "編輯", + "remove": "消除", + "save": "保存更改", + "selectDirectory": "瀏覽", + "enable": "使能夠", + "disable": "禁用" + }, + "items": { + "title": "最新上傳 ({{count}})", + "count": "{{count}} 件", + "empty": "未找到最近的 Feed 項目。", + "status": { + "queued": "排隊", + "notQueued": "未排隊", + "pending": "待辦的", + "downloading": "正在下載", + "processing": "加工", + "completed": "完全的", + "error": "失敗的", + "cancelled": "取消" + }, + "fromChannel": "來自{{channel}}", + "tooltip": { + "downloadStatus": "下載狀態:{{status}}", + "downloadPending": "等待下載詳細信息...", + "notQueued": "尚未在下載隊列中" + }, + "actions": { + "open": "在瀏覽器中打開", + "queue": "添加到下載隊列" + } + }, + "labels": { + "subscription": "訂閱", + "unknown": "未知訂閱", + "noThumbnail": "無縮略圖" + }, + "notifications": { + "directoryError": "無法打開目錄選擇器。", + "missingUrl": "請先粘貼頻道鏈接。", + "created": "已添加訂閱", + "createError": "添加訂閱失敗。", + "refreshStarted": "刷新開始", + "removed": "訂閱已刪除", + "updated": "訂閱已更新", + "itemQueued": "添加到下載隊列", + "itemAlreadyQueued": "該視頻已排隊", + "queueError": "無法添加到下載隊列。", + "openLinkError": "無法打開視頻鏈接。", + "resolveError": "無法解析 RSS 源 URL。" + }, + "detectedFeed": "檢測到 {{platform}} feed -> {{feed}}", + "detecting": "檢測飼料...", + "latestVideo": "最新視頻:{{title}}", + "lastChecked": "最後檢查時間:{{time}}", + "never": "絕不", + "empty": "還沒有訂閱。添加您喜愛的頻道以開始自動下載。", + "edit": { + "title": "編輯{{name}}", + "description": "調整此提要的過濾器、標籤和覆蓋。" + }, + "status": { + "title": "地位", + "up-to-date": "最新", + "checking": "檢查", + "failed": "失敗的", + "idle": "閒置的", + "tooltip": { + "updatedAt": "更新時間:{{time}}" + } + }, + "rssHub": { + "title": "使用 RSSHub 自動訂閱", + "description": "將 VidBee 與 RSSHub 結合起來,可以從各種平台實現自動訂閱和下載。設置完成後,VidBee 將在後台運行並自動下載最新的視頻和內容。", + "learnMore": "了解有關 RSSHub 的更多信息", + "openDocs": "打開 RSSHub 文檔", + "hint": "沒有 RSS 源 URL?使用 RSSHub 為 YouTube、Twitter 和數千個其他平台生成 RSS 源。" + } + }, "sites": { "homeInlineDescription": "支援 {{sites}} 等更多網站。", "moreDescription": "完整的 yt-dlp 清單由社群持續更新。", @@ -468,118 +656,5 @@ }, "popularSection": "主流平台", "viewAll": "檢視全部支援的網站" - }, - "subscriptions": { - "actions": { - "add": "添加", - "disable": "禁用", - "edit": "編輯", - "enable": "使能夠", - "refresh": "重新整理", - "remove": "消除", - "save": "保存更改", - "selectDirectory": "瀏覽" - }, - "add": { - "description": "粘貼 RSS 源鏈接。 VidBee 將自動檢測提要。", - "title": "添加RSS" - }, - "defaults": { - "description": "控制訂閱下載的存儲位置以及 VidBee 檢查新視頻的頻率。", - "downloadDirectory": "下載目錄", - "filenameTemplate": "文件名模板(僅限文件)", - "onlyLatest": "僅下載最新視頻", - "onlyLatestDescription": "啟用後,VidBee 會跳過較舊的積壓項目,僅獲取最新上傳的項目。", - "title": "自動化默認值" - }, - "description": "自動監控 RSS 源並對新下載進行排隊,無需手動操作。", - "detectedFeed": "檢測到 {{platform}} feed -> {{feed}}", - "detecting": "檢測飼料...", - "edit": { - "description": "調整此提要的過濾器、標籤和覆蓋。", - "title": "編輯{{name}}" - }, - "empty": "還沒有訂閱。添加您喜愛的頻道以開始自動下載。", - "fields": { - "customDirectory": "自定義目錄", - "disabled": "殘疾人", - "enabled": "啟用", - "keywords": "關鍵字過濾器(逗號分隔)", - "namingTemplate": "自定義文件名模板(僅限文件)", - "onlyLatest": "僅下載最新視頻", - "onlyLatestDescription": "忽略積壓的項目並僅從此源中獲取最新上傳的內容。", - "onlyLatestShort": "僅最新", - "tags": "自動標籤", - "url": "提要網址" - }, - "items": { - "actions": { - "open": "在瀏覽器中打開", - "queue": "添加到下載隊列" - }, - "count": "{{count}} 件", - "empty": "未找到最近的 Feed 項目。", - "fromChannel": "來自{{頻道}}", - "status": { - "cancelled": "取消", - "completed": "完全的", - "downloading": "正在下載", - "error": "失敗的", - "notQueued": "未排隊", - "pending": "待辦的", - "processing": "加工", - "queued": "排隊" - }, - "title": "最新上傳 ({{count}})", - "tooltip": { - "downloadPending": "等待下載詳細信息...", - "downloadStatus": "下載狀態:{{status}}", - "notQueued": "尚未在下載隊列中" - } - }, - "labels": { - "noThumbnail": "無縮略圖", - "subscription": "訂閱", - "unknown": "未知訂閱" - }, - "lastChecked": "最後檢查時間:{{time}}", - "latestVideo": "最新視頻:{{title}}", - "never": "絕不", - "notifications": { - "createError": "添加訂閱失敗。", - "created": "已添加訂閱", - "directoryError": "無法打開目錄選擇器。", - "itemAlreadyQueued": "該視頻已排隊", - "itemQueued": "添加到下載隊列", - "missingUrl": "請先粘貼頻道鏈接。", - "openLinkError": "無法打開視頻鏈接。", - "queueError": "無法添加到下載隊列。", - "refreshStarted": "刷新開始", - "removed": "訂閱已刪除", - "resolveError": "無法解析 RSS 源 URL。", - "updated": "訂閱已更新" - }, - "placeholders": { - "url": "https://rsshub.app/youtube/user/@FKJ" - }, - "rssHub": { - "description": "將 VidBee 與 RSSHub 結合起來,可以從各種平台實現自動訂閱和下載。設置完成後,VidBee 將在後台運行並自動下載最新的視頻和內容。", - "hint": "沒有 RSS 源 URL?使用 RSSHub 為 YouTube、Twitter 和數千個其他平台生成 RSS 源。", - "learnMore": "了解有關 RSSHub 的更多信息", - "openDocs": "打開 RSSHub 文檔", - "title": "使用 RSSHub 自動訂閱" - }, - "status": { - "checking": "檢查", - "failed": "失敗的", - "idle": "閒置的", - "title": "地位", - "tooltip": { - "updatedAt": "更新時間:{{時間}}" - }, - "up-to-date": "最新" - }, - "subtitle": "{{count}} 訂閱{{count,複數,一個 {} 其它 {s}}}", - "title": "訂閱" } } diff --git a/src/renderer/src/locales/zh.json b/src/renderer/src/locales/zh.json index 2890bd5..2f5104f 100644 --- a/src/renderer/src/locales/zh.json +++ b/src/renderer/src/locales/zh.json @@ -16,7 +16,6 @@ "betaProgramDescription": "抢先获得预览版和即将发布的新功能。", "betaProgramTitle": "预览通道", "description": "这是一个基于 Node.js 和 Electron 构建的自由开源应用,使用 yt-dlp 来完成下载。", - "downloadingUpdate": "正在下载更新", "followAuthorActions": { "follow": "关注 @nexmoex" }, @@ -25,12 +24,6 @@ "followAuthorTitle": "关注开发者", "here": "此处", "homepage": "主页", - "latestVersionBadge": "最新版本:v{{version}}", - "latestVersionStatus": { - "available": "有新版本可用", - "error": "无法获取最新版本", - "uptodate": "您已是最新版本" - }, "notifications": { "checkingUpdates": "正在查找更新...", "downloadError": "下载更新失败", @@ -38,14 +31,14 @@ "downloadUpdate": "下载并安装更新 {{version}}?", "manualDownloadAction": "立即下载", "noUpdatesAvailable": "您正在使用最新版本", - "restartNowAction": "立即重新启动", "restartToUpdate": "立即重启以安装更新?", - "unknownErrorFallback": "未知错误", + "restartNowAction": "立即重新启动", "updateAvailable": "发现新版本: {{version}}", "updateAvailableMessage": "新版本 {{version}} 已推出。\n请从官方网站下载。", "updateDownloaded": "更新已下载,重启以安装", "updateDownloadedVersion": "下载更新 {{version}},重新启动安装", - "updateError": "检查更新失败: {{error}}" + "updateError": "检查更新失败: {{error}}", + "unknownErrorFallback": "未知错误" }, "preferencesDescription": "无需离开此页即可调整更新设置。", "preferencesTitle": "快速切换", @@ -58,6 +51,12 @@ "documentationDescription": "指南、常见问题和常见流程。", "feedback": "反馈与问题", "feedbackDescription": "在 GitHub 上分享想法或报告问题。", + "githubIssues": "GitHub", + "githubIssuesDescription": "在 GitHub 上报告问题或请求功能。", + "xFeedback": "Twitter", + "xFeedbackDescription": "在 X 上提及 @nexmoex 分享反馈或建议。", + "discord": "Discord", + "discordDescription": "加入我们的 Discord 社区进行讨论和支持。", "license": "许可证", "licenseDescription": "查阅开源许可证条款。", "website": "官方网站", @@ -76,13 +75,21 @@ "sourceCode": "源代码已开放", "title": "关于", "version": "版本", - "versionLabel": "v{{version}}" + "versionLabel": "v{{version}}", + "latestVersionBadge": "最新版本:v{{version}}", + "latestVersionStatus": { + "available": "有新版本可用", + "uptodate": "您已是最新版本", + "error": "无法获取最新版本" + }, + "downloadingUpdate": "正在下载更新" }, "advancedOptions": { "closeWhenDone": "下载完成后关闭应用", "currentLocation": "当前下载位置 - ", "downloadLocation": "下载位置", "downloadSubs": "若有字幕则下载", + "downloadSubsHint": "可用时将字幕保存为单独文件", "end": "结束", "endHint": "如果留空,将下载到结尾", "endPlaceholder": "10:00", @@ -98,17 +105,6 @@ "description": "从数百个网站下载视频和音频", "title": "VidBee" }, - "audioExtract": { - "bad": "较差", - "best": "最佳", - "extract": "提取", - "good": "良好", - "normal": "标准", - "selectFormat": "选择格式", - "selectQuality": "选择质量", - "title": "提取音频", - "worst": "最差" - }, "download": { "active": "进行中", "all": "全部", @@ -123,6 +119,10 @@ "downloadBtn": "下载", "downloadPending": "待处理", "downloadQueue": "下载队列", + "customDownloadFolder": "自定义下载文件夹", + "autoFolderPlaceholder": "自动文件夹(基于元数据)", + "autoFolderHint": "自动文件夹由元数据创建。", + "useAutoFolder": "使用自动文件夹", "downloadVideo": "下载视频", "downloading": "正在下载...", "enterUrl": "输入视频链接", @@ -130,44 +130,17 @@ "error": "错误", "fetch": "获取", "fetchingVideoInfo": "正在获取视频信息...", - "goToSettings": "前往“设置”", - "hideDetails": "隐藏详细信息", "history": "历史", "imageLoadError": "图像加载失败", "imagePlaceholder": "暂无图像", "infoUnavailable": "一键下载(信息不可用)", "loading": "加载中", - "metadata": { - "audioCodec": "音频编解码器", - "codec": "编解码器", - "completedAt": "完成于", - "createdAt": "创建于", - "description": "描述", - "downloadPath": "下载路径", - "fileSize": "文件大小", - "format": "格式", - "formatNote": "格式注释", - "fps": "FPS", - "height": "高度", - "playlist": "播放列表", - "protocol": "协议", - "quality": "质量", - "savedFile": "保存的文件", - "source": "来源", - "speed": "速度", - "startedAt": "开始于", - "subscription": "订阅", - "tags": "标签", - "url": "来源网址", - "videoCodec": "视频编解码器", - "views": "意见", - "width": "宽度" - }, "moreOptions": "更多选项", "noActiveDownloads": "暂无进行中的下载", "noAudio": "无音频", "noHistory": "暂无下载历史", "noItems": "未找到项目", + "goToSettings": "前往“设置”", "oneClickDownload": "一键下载", "oneClickDownloadDescription": "使用默认设置直接下载,无需确认", "oneClickDownloadEnabled": "已启用一键下载。\n下载将直接以默认设置开始。", @@ -176,15 +149,17 @@ "paste": "粘贴", "pastePlaylistUrl": "点击从剪贴板粘贴播放列表链接 [Ctrl + V]", "pasteUrl": "点击粘贴视频链接或 ID [Ctrl + V]", + "pasteUrlButton": "粘贴链接", "preparing": "正在准备...", "processing": "处理中", "progress": "进度", + "showDetails": "显示详情", + "hideDetails": "隐藏详细信息", "selectAudioFormat": "选择音频格式", "selectDownloadType": "选择下载类型", "selectFormat": "选择格式", - "selectVideoFormat": "选择视频格式", "startDownload": "开始下载", - "showDetails": "显示详情", + "selectVideoFormat": "选择视频格式", "singleVideo": "单个视频", "speed": "速度", "title": "标题", @@ -194,7 +169,52 @@ "urlPlaceholder": "https://www.youtube.com/watch?v=...", "video": "视频", "videoInfo": "视频信息", - "videoInfoUpdated": "视频信息已更新" + "videoInfoUpdated": "视频信息已更新", + "metadata": { + "source": "来源", + "playlist": "播放列表", + "format": "格式", + "quality": "质量", + "codec": "编解码器", + "savedFile": "保存的文件", + "url": "来源网址", + "description": "描述", + "views": "意见", + "tags": "标签", + "downloadPath": "下载路径", + "createdAt": "创建于", + "startedAt": "开始于", + "completedAt": "完成于", + "speed": "速度", + "fileSize": "文件大小", + "width": "宽度", + "height": "高度", + "fps": "FPS", + "videoCodec": "视频编解码器", + "audioCodec": "音频编解码器", + "formatNote": "格式注释", + "protocol": "协议", + "subscription": "订阅" + } + }, + "error": { + "title": "出了点问题", + "description": "发生了意外错误。请尝试重新加载应用,若问题持续请报告。", + "message": "错误信息", + "unknownError": "发生未知错误", + "goHome": "返回首页", + "reload": "重新加载应用", + "copyReport": "复制错误报告", + "copied": "已复制!", + "copySuccess": "错误报告已复制到剪贴板", + "copyFailed": "复制错误报告失败", + "showDetails": "显示详情", + "hideDetails": "隐藏详情", + "stackTrace": "堆栈跟踪", + "componentStack": "组件堆栈", + "noStackTrace": "没有可用的堆栈跟踪", + "fullReport": "完整错误报告", + "helpText": "如果此错误持续,请复制以上错误报告并与支持团队分享。联系信息可在“关于”页面找到。" }, "errors": { "clickToCopy": "点击复制详情", @@ -204,6 +224,7 @@ "emptyUrl": "请输入链接", "errorDetails": "错误详情", "fetchInfoFailed": "获取视频信息失败", + "invalidUrl": "剪贴板内容不是有效的 URL", "networkError": "发生错误。请检查网络并确认链接正确", "pasteFromClipboard": "从剪贴板粘贴失败" }, @@ -211,10 +232,23 @@ "clearCancelled": "清除已取消", "clearCompleted": "清除已完成", "clearErrors": "清除错误", + "clearAll": "清除全部历史记录", + "clearAllAction": "清除历史记录", + "clearSelection": "清除选择", + "confirmClearAllTitle": "清除所有历史记录?", + "confirmClearAllDescription": "从历史记录中移除 {{count}} 项。文件仍保留在磁盘上。", + "confirmDeleteSelectedTitle": "移除所选项?", + "confirmDeleteSelectedDescription": "从历史记录中移除 {{count}} 项。文件仍保留在磁盘上。", + "alsoDeleteFiles": "同时删除文件", + "confirmDeletePlaylistTitle": "移除播放列表历史记录?", + "confirmDeletePlaylistDescription": "从 {{title}} 移除 {{count}} 项并删除其文件。", "copyToClipboard": "复制到剪贴板", "copyUrl": "复制链接", "date": "日期", + "deletePlaylist": "移除播放列表", + "deleteSelected": "移除所选", "description": "查看并管理下载历史", + "doneSelecting": "完成", "duration": "时长", "fileSize": "文件大小", "filters": { @@ -230,7 +264,14 @@ "openFileLocation": "打开文件位置", "openFolder": "打开文件夹", "openInBrowser": "点击在浏览器中打开", + "removeAction": "移除", "removeItem": "移除项目", + "select": "选择", + "selectAll": "全选", + "selectVisible": "选择可见项", + "selectItem": "选择条目", + "selectedCount": "已选择 {{count}} 项", + "selectionSummary": "已选择可见项 {{selected}} / {{total}}", "stats": { "cancelled": "已取消", "completed": "已完成", @@ -248,9 +289,9 @@ "about": "关于", "download": "下载", "playlist": "下载播放列表", - "preferences": "偏好设置", "rss": "RSS", "subscriptions": "订阅", + "preferences": "偏好设置", "supportedSites": "支持的网站", "theme": "主题:" }, @@ -259,9 +300,15 @@ "downloadCompleted": "下载完成", "downloadFailed": "下载失败", "downloadStarted": "下载已开始", + "historyCleared": "历史记录已清除", + "historyClearFailed": "清除历史记录失败", "itemRemoved": "项目已移除", + "itemsRemoved": "已移除 {{count}} 项", + "itemsRemoveFailed": "移除所选项失败", "openFileFailed": "打开文件失败", "openFolderFailed": "打开文件夹失败", + "playlistHistoryRemoved": "已移除播放列表并删除文件", + "playlistHistoryRemoveFailed": "移除播放列表历史记录失败", "removeFailed": "移除项目失败", "settingsSaved": "设置已保存", "urlCopied": "链接已复制到剪贴板", @@ -270,6 +317,7 @@ "playlist": { "badgeLabel": "播放列表", "clearPreview": "清晰预览", + "collapsedProgress": "正在下载播放列表:已完成 {{completed}} / {{total}}", "comingSoon": "播放列表下载功能即将推出!", "completed": "播放列表已下载", "description": "下载 YouTube 播放列表或频道中的全部视频", @@ -285,7 +333,9 @@ "folderFormat": "播放列表文件夹命名格式", "foundVideos": "在播放列表中找到 {{count}} 个视频", "groupActive": "{{count}} 个活跃", + "groupCollapse": "折叠", "groupErrors": "{{count}} 失败", + "groupExpand": "展开", "groupSummary": "{{completed}} / {{total}}已完成", "linkLabel": "播放列表链接", "noEntries": "在此播放列表中找不到视频", @@ -295,12 +345,16 @@ "positionLabel": "第 {{index}} 项,共 {{total}} 项", "previewButton": "预览播放列表", "previewFailed": "预览播放列表失败", - "previewRequired": "下载前预览播放列表。", "previewSummary": "下载前预览播放列表项目。", + "previewRequired": "下载前预览播放列表。", "range": "范围(可选)", "resetToDefault": "恢复默认", "selectedRange": "范围:{{start}}-{{end}}", + "selectedVideos": "已选择 {{count}} 项", + "downloadCurrentRange": "下载所选", "showingCount": "显示 {{count}} 个视频", + "selectEntry": "选择条目 {{index}}", + "noEntriesSelected": "未选择任何条目", "startIndex": "开始(1)", "title": "下载播放列表", "totalVideos": "视频总数:{{count}}", @@ -313,39 +367,61 @@ "audio": "音频偏好", "browserForCookies": "选择用于读取 Cookie 的浏览器", "browserForCookiesDescription": "用于身份验证的浏览器 Cookie 提取", + "browserForCookiesProfile": "配置文件名称或路径", + "browserForCookiesProfileDescription": "上方所选浏览器的配置文件路径。如可用会自动填写。", + "browserForCookiesProfilePlaceholder": "配置文件名称或完整路径(可选)", + "browserForCookiesProfileInvalid": "配置文件路径无效。请选择所选浏览器的配置文件文件夹。", + "browserForCookiesProfileInvalidPath": "该文件夹不存在。请选择现有的配置文件文件夹。", + "browserForCookiesProfileInvalidProfile": "在默认浏览器位置未找到配置文件名称。", + "browserForCookiesProfileInvalidUnsupported": "此平台上该浏览器没有已知的默认配置文件位置。", + "browserForCookiesProfileInvalidEmpty": "请输入所选浏览器的配置文件路径。", + "cookiesFile": "饼干文件", + "cookiesFileDescription": "要加载以进行身份​​验证的 Netscape 格式的 cookie 文件", + "clearCookiesFile": "清除", + "cookiesHelpTitle": "使用cookie", + "cookiesHelpBrowser": "选择上面的浏览器以自动重用其登录会话。", + "cookiesHelpFile": "导出 Netscape cookies 文件(请参阅 yt-dlp FAQ)并在需要时在此处选择它。", + "cookiesHelpFaq": "打开 yt-dlp cookies 常见问题解答", + "openLinkError": "无法打开链接", "browserOptions": { "brave": "Brave", "chrome": "Chrome", + "chromium": "Chromium", "edge": "Edge", "firefox": "Firefox", - "safari": "Safari" + "opera": "Opera", + "safari": "Safari", + "vivaldi": "Vivaldi", + "whale": "Whale" }, - "clearConfigFile": "清除", - "clearCookiesFile": "清除", "configFile": "使用配置文件", "configFileDescription": "yt-dlp 的自定义配置文件", - "cookiesFile": "饼干文件", - "cookiesFileDescription": "要加载以进行身份​​验证的 Netscape 格式的 cookie 文件", - "cookiesHelpBrowser": "选择上面的浏览器以自动重用其登录会话。", - "cookiesHelpFaq": "打开 yt-dlp cookies 常见问题解答", - "cookiesHelpFile": "导出 Netscape cookies 文件(请参阅 yt-dlp FAQ)并在需要时在此处选择它。", - "cookiesHelpTitle": "使用cookie", + "clearConfigFile": "清除", "dark": "深色", "description": "配置下载偏好和应用设置", "directorySelectError": "选择目录失败", "downloadPath": "下载位置", "downloadPathDescription": "选择保存下载文件的位置", - "enableAnalytics": "帮助改进 VidBee", - "enableAnalyticsDescription": "共享匿名使用数据,帮助我们了解应用程序的使用情况并确定改进的优先顺序。", "fileSelectError": "选择文件失败", "general": "通用", + "language": "语言", + "languageDescription": "选择应用界面的首选语言", + "light": "浅色", "hideDockIcon": "隐藏 Dock 图标", "hideDockIconDescription": "从 macOS Dock 中删除 VidBee。\n使用菜单栏或托盘图标重新打开应用程序。", - "language": "语言", "launchAtLogin": "启动时启动", "launchAtLoginDescription": "登录计算机后自动打开 VidBee。", "launchAtLoginUnsupported": "自动启动仅适用于 macOS 和 Windows。", - "light": "浅色", + "enableAnalytics": "帮助改进 VidBee", + "enableAnalyticsDescription": "共享匿名使用数据,帮助我们了解应用程序的使用情况并确定改进的优先顺序。", + "embedChapters": "嵌入章节", + "embedChaptersDescription": "可用时在文件中添加章节标记", + "embedMetadata": "嵌入元数据", + "embedMetadataDescription": "可用时写入标题、艺术家和其他元数据", + "embedSubs": "嵌入字幕", + "embedSubsDescription": "将字幕嵌入视频文件(mp4、webm、mkv)", + "embedThumbnail": "嵌入缩略图", + "embedThumbnailDescription": "将缩略图作为封面图", "maxConcurrentDownloads": "最大活动下载数", "maxConcurrentDownloadsDescription": "最大同时下载数量", "none": "无", @@ -363,7 +439,6 @@ "normal": "标准", "worst": "最差" }, - "openLinkError": "无法打开链接", "proxy": "代理", "proxyDescription": "网络请求的代理服务器", "proxyPlaceholder": "http://proxy:port", @@ -384,6 +459,119 @@ }, "video": "视频偏好" }, + "subscriptions": { + "title": "订阅", + "subtitle": "{{count}} 订阅{{count,复数,一个 {} 其它 {s}}}", + "description": "自动监控 RSS 源并对新下载进行排队,无需手动操作。", + "defaults": { + "title": "自动化默认值", + "description": "控制订阅下载的存储位置以及 VidBee 检查新视频的频率。", + "downloadDirectory": "下载目录", + "filenameTemplate": "文件名模板(仅限文件)", + "onlyLatest": "仅下载最新视频", + "onlyLatestDescription": "启用后,VidBee 会跳过较旧的积压项目,仅获取最新上传的项目。" + }, + "add": { + "title": "添加RSS", + "description": "粘贴 RSS 源链接。 \nVidBee 将自动检测提要。" + }, + "fields": { + "url": "提要网址", + "keywords": "关键字过滤器(逗号分隔)", + "tags": "自动标签", + "customDirectory": "自定义目录", + "namingTemplate": "自定义文件名模板(仅限文件)", + "onlyLatest": "仅下载最新视频", + "onlyLatestDescription": "忽略积压的项目并仅从此源中获取最新上传的内容。", + "enabled": "启用", + "disabled": "残疾人", + "onlyLatestShort": "仅最新" + }, + "placeholders": { + "url": "https://rsshub.app/youtube/user/@FKJ" + }, + "actions": { + "add": "添加", + "refresh": "刷新", + "edit": "编辑", + "remove": "消除", + "save": "保存更改", + "selectDirectory": "浏览", + "enable": "使能够", + "disable": "禁用" + }, + "items": { + "title": "最新上传 ({{count}})", + "count": "{{count}} 件", + "empty": "未找到最近的 Feed 项目。", + "status": { + "queued": "排队", + "notQueued": "未排队", + "pending": "待办的", + "downloading": "正在下载", + "processing": "加工", + "completed": "完全的", + "error": "失败的", + "cancelled": "取消" + }, + "fromChannel": "来自{{channel}}", + "tooltip": { + "downloadStatus": "下载状态:{{status}}", + "downloadPending": "等待下载详细信息...", + "notQueued": "尚未在下载队列中" + }, + "actions": { + "open": "在浏览器中打开", + "queue": "添加到下载队列" + } + }, + "labels": { + "subscription": "订阅", + "unknown": "未知订阅", + "noThumbnail": "无缩略图" + }, + "notifications": { + "directoryError": "无法打开目录选择器。", + "missingUrl": "请先粘贴频道链接。", + "created": "已添加订阅", + "createError": "添加订阅失败。", + "refreshStarted": "刷新开始", + "removed": "订阅已删除", + "updated": "订阅已更新", + "itemQueued": "添加到下载队列", + "itemAlreadyQueued": "该视频已排队", + "queueError": "无法添加到下载队列。", + "openLinkError": "无法打开视频链接。", + "resolveError": "无法解析 RSS 源 URL。" + }, + "detectedFeed": "检测到 {{platform}} feed -> {{feed}}", + "detecting": "检测饲料...", + "latestVideo": "最新视频:{{title}}", + "lastChecked": "最后检查时间:{{time}}", + "never": "绝不", + "empty": "还没有订阅。\n添加您喜爱的频道以开始自动下载。", + "edit": { + "title": "编辑{{name}}", + "description": "调整此提要的过滤器、标签和覆盖。" + }, + "status": { + "title": "地位", + "up-to-date": "最新", + "checking": "检查", + "failed": "失败的", + "idle": "闲置的", + "tooltip": { + "updatedAt": "更新时间:{{time}}" + } + }, + "rssHub": { + "title": "使用 RSSHub 自动订阅", + "description": "将 VidBee 与 RSSHub 结合起来,可以从各种平台实现自动订阅和下载。\n设置完成后,VidBee 将在后台运行并自动下载最新的视频和内容。", + "learnMore": "了解有关 RSSHub 的更多信息", + "openDocs": "打开 RSSHub 文档", + "hint": "没有 RSS 源 URL?\n使用 RSSHub 为 YouTube、Twitter 和数千个其他平台生成 RSS 源。" + } + }, "sites": { "homeInlineDescription": "支持 {{sites}} 等更多网站。", "moreDescription": "完整的 yt-dlp 列表由社区持续更新。", @@ -468,118 +656,5 @@ }, "popularSection": "主流平台", "viewAll": "查看全部支持的网站" - }, - "subscriptions": { - "actions": { - "add": "添加", - "disable": "禁用", - "edit": "编辑", - "enable": "使能够", - "refresh": "刷新", - "remove": "消除", - "save": "保存更改", - "selectDirectory": "浏览" - }, - "add": { - "description": "粘贴 RSS 源链接。 \nVidBee 将自动检测提要。", - "title": "添加RSS" - }, - "defaults": { - "description": "控制订阅下载的存储位置以及 VidBee 检查新视频的频率。", - "downloadDirectory": "下载目录", - "filenameTemplate": "文件名模板(仅限文件)", - "onlyLatest": "仅下载最新视频", - "onlyLatestDescription": "启用后,VidBee 会跳过较旧的积压项目,仅获取最新上传的项目。", - "title": "自动化默认值" - }, - "description": "自动监控 RSS 源并对新下载进行排队,无需手动操作。", - "detectedFeed": "检测到 {{platform}} feed -> {{feed}}", - "detecting": "检测饲料...", - "edit": { - "description": "调整此提要的过滤器、标签和覆盖。", - "title": "编辑{{name}}" - }, - "empty": "还没有订阅。\n添加您喜爱的频道以开始自动下载。", - "fields": { - "customDirectory": "自定义目录", - "disabled": "残疾人", - "enabled": "启用", - "keywords": "关键字过滤器(逗号分隔)", - "namingTemplate": "自定义文件名模板(仅限文件)", - "onlyLatest": "仅下载最新视频", - "onlyLatestDescription": "忽略积压的项目并仅从此源中获取最新上传的内容。", - "onlyLatestShort": "仅最新", - "tags": "自动标签", - "url": "提要网址" - }, - "items": { - "actions": { - "open": "在浏览器中打开", - "queue": "添加到下载队列" - }, - "count": "{{count}} 件", - "empty": "未找到最近的 Feed 项目。", - "fromChannel": "来自{{channel}}", - "status": { - "cancelled": "取消", - "completed": "完全的", - "downloading": "正在下载", - "error": "失败的", - "notQueued": "未排队", - "pending": "待办的", - "processing": "加工", - "queued": "排队" - }, - "title": "最新上传 ({{count}})", - "tooltip": { - "downloadPending": "等待下载详细信息...", - "downloadStatus": "下载状态:{{status}}", - "notQueued": "尚未在下载队列中" - } - }, - "labels": { - "noThumbnail": "无缩略图", - "subscription": "订阅", - "unknown": "未知订阅" - }, - "lastChecked": "最后检查时间:{{time}}", - "latestVideo": "最新视频:{{title}}", - "never": "绝不", - "notifications": { - "createError": "添加订阅失败。", - "created": "已添加订阅", - "directoryError": "无法打开目录选择器。", - "itemAlreadyQueued": "该视频已排队", - "itemQueued": "添加到下载队列", - "missingUrl": "请先粘贴频道链接。", - "openLinkError": "无法打开视频链接。", - "queueError": "无法添加到下载队列。", - "refreshStarted": "刷新开始", - "removed": "订阅已删除", - "resolveError": "无法解析 RSS 源 URL。", - "updated": "订阅已更新" - }, - "placeholders": { - "url": "https://rsshub.app/youtube/user/@FKJ" - }, - "rssHub": { - "description": "将 VidBee 与 RSSHub 结合起来,可以从各种平台实现自动订阅和下载。\n设置完成后,VidBee 将在后台运行并自动下载最新的视频和内容。", - "hint": "没有 RSS 源 URL?\n使用 RSSHub 为 YouTube、Twitter 和数千个其他平台生成 RSS 源。", - "learnMore": "了解有关 RSSHub 的更多信息", - "openDocs": "打开 RSSHub 文档", - "title": "使用 RSSHub 自动订阅" - }, - "status": { - "checking": "检查", - "failed": "失败的", - "idle": "闲置的", - "title": "地位", - "tooltip": { - "updatedAt": "更新时间:{{time}}" - }, - "up-to-date": "最新" - }, - "subtitle": "{{count}} 订阅{{count,复数,一个 {} 其它 {s}}}", - "title": "订阅" } }