From 706cc07374273c7035fb10c1429c8a16ca570d39 Mon Sep 17 00:00:00 2001 From: marcobaobao Date: Mon, 13 Jan 2025 13:22:48 +0100 Subject: [PATCH] i18n system refactor --- frontend/src/assets/i18n.yaml | 887 +--------------------------- frontend/src/assets/i18n/ca.yaml | 63 ++ frontend/src/assets/i18n/de.yaml | 65 ++ frontend/src/assets/i18n/en_US.yaml | 66 +++ frontend/src/assets/i18n/es.yaml | 63 ++ frontend/src/assets/i18n/fr.yaml | 67 +++ frontend/src/assets/i18n/it_IT.yaml | 64 ++ frontend/src/assets/i18n/ja.yaml | 64 ++ frontend/src/assets/i18n/ko.yaml | 63 ++ frontend/src/assets/i18n/pl.yaml | 63 ++ frontend/src/assets/i18n/pt_BR.yaml | 66 +++ frontend/src/assets/i18n/ru.yaml | 63 ++ frontend/src/assets/i18n/sv.yaml | 66 +++ frontend/src/assets/i18n/uk.yaml | 63 ++ frontend/src/assets/i18n/zh_CN.yaml | 65 ++ frontend/src/atoms/i18n.ts | 5 - frontend/src/hooks/useI18n.ts | 5 +- frontend/src/lib/i18n.ts | 53 ++ frontend/src/lib/intl.ts | 28 - frontend/src/views/Settings.tsx | 11 +- 20 files changed, 985 insertions(+), 905 deletions(-) create mode 100644 frontend/src/assets/i18n/ca.yaml create mode 100644 frontend/src/assets/i18n/de.yaml create mode 100644 frontend/src/assets/i18n/en_US.yaml create mode 100644 frontend/src/assets/i18n/es.yaml create mode 100644 frontend/src/assets/i18n/fr.yaml create mode 100644 frontend/src/assets/i18n/it_IT.yaml create mode 100644 frontend/src/assets/i18n/ja.yaml create mode 100644 frontend/src/assets/i18n/ko.yaml create mode 100644 frontend/src/assets/i18n/pl.yaml create mode 100644 frontend/src/assets/i18n/pt_BR.yaml create mode 100644 frontend/src/assets/i18n/ru.yaml create mode 100644 frontend/src/assets/i18n/sv.yaml create mode 100644 frontend/src/assets/i18n/uk.yaml create mode 100644 frontend/src/assets/i18n/zh_CN.yaml delete mode 100644 frontend/src/atoms/i18n.ts create mode 100644 frontend/src/lib/i18n.ts delete mode 100644 frontend/src/lib/intl.ts diff --git a/frontend/src/assets/i18n.yaml b/frontend/src/assets/i18n.yaml index 4d866669..922639e0 100644 --- a/frontend/src/assets/i18n.yaml +++ b/frontend/src/assets/i18n.yaml @@ -1,870 +1,21 @@ --- +# Check the i18n src/assets/i18n folder. +# +# This file maps the language name to its translations file +# english -> /src/assets/i18n/en_US.yaml + languages: - english: - urlInput: Video URL (one per line) - statusTitle: Status - statusReady: Ready - selectFormatButton: Select format - startButton: Start - abortAllButton: Abort All - updateBinButton: Update yt-dlp binary - darkThemeButton: Dark theme - lightThemeButton: Light theme - settingsAnchor: Settings - serverAddressTitle: Server address - serverPortTitle: Port - extractAudioCheckbox: Extract audio - noMTimeCheckbox: Don't set file modification time - bgReminder: Once you close this page the download will continue in the background. - toastConnected: 'Connected to ' - toastUpdated: Updated yt-dlp binary! - formatSelectionEnabler: Enable video/audio formats selection - themeSelect: 'Theme' - languageSelect: 'Language' - overridesAnchor: Overrides - pathOverrideOption: Enable output path overriding - filenameOverrideOption: Enable output file name overriding - customFilename: Custom filename (leave blank to use default) - customPath: Custom path - customArgs: Enable custom yt-dlp args (great power = great responsibilities) - customArgsInput: Custom yt-dlp arguments - rpcConnErr: Error while conencting to RPC server - splashText: No active downloads - archiveTitle: Archive - clipboardAction: Copied URL to clipboard - playlistCheckbox: Download playlist (it will take time, after submitting you may close this window) - restartAppMessage: Needs a page reload to take effect - servedFromReverseProxyCheckbox: Is behind a reverse proxy - urlBase: URL base, for reverse proxy support (subdir), defaults to empty - newDownloadButton: New download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: App title - savedTemplates: Saved templates - templatesEditor: Templates editor - templatesEditorNameLabel: Template name - templatesEditorContentLabel: Template content - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - rpcPollingTimeTitle: RPC polling time - rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) - templatesReloadInfo: To register a new template it might need a page reload. - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - german: - urlInput: Video URL - statusTitle: Status - statusReady: Bereit - selectFormatButton: Format auswählen - startButton: Start - abortAllButton: Alle Abbrechen - updateBinButton: yt-dlp Binärdatei aktualisieren - darkThemeButton: Dunkel Modus - lightThemeButton: Hell Modus - settingsAnchor: Einstellungen - serverAddressTitle: Server Adresse - serverPortTitle: Port - extractAudioCheckbox: Audio extrahieren - noMTimeCheckbox: Datei-Änderungszeitpunkt nicht festlegen - bgReminder: Sobald Sie diese Seite schließen, wird der Download im Hintergrund fortgesetzt. - toastConnected: 'Verbunden mit ' - toastUpdated: yt-dlp Binärdatei aktualisiert! - formatSelectionEnabler: Video/Audio Format auswählbar - themeSelect: 'Modus' - languageSelect: 'Sprache' - overridesAnchor: Überschreibungen - pathOverrideOption: Ausgabe-Pfad Überschreibung aktivieren - filenameOverrideOption: Ausgabe-Dateiname Überschreibung aktivieren - customFilename: Custom filename (leave blank to use default) - customPath: Benutzerdefinierter Pfad - customArgs: Benutzerdefinierte yt-dlp Argumente aktivieren (viel Macht = viel Verantwortung) - customArgsInput: Benutzerdefinierte yt-dlp Argumente - rpcConnErr: Fehler beim Verbinden mit RPC Server - splashText: Keine aktiven Downloads - archiveTitle: Archiv - clipboardAction: URL in Zwischenablage kopiert - playlistCheckbox: Playlist herunterladen (es wird einige Zeit dauern, nach dem Absenden können Sie dieses Fenster schließen) - restartAppMessage: Erfordert ein Neuladen der Seite, um wirksam zu werden - servedFromReverseProxyCheckbox: Ist hinter einem Reverse Proxy Unterordner - newDownloadButton: Neuer Download - homeButtonLabel: Home - archiveButtonLabel: Archiv - settingsButtonLabel: Einstellungen - rpcAuthenticationLabel: RPC Authentifizierung - themeTogglerLabel: Modus Umschalter - loadingLabel: Lädt... - appTitle: App Titel - savedTemplates: Gespeicherte Vorlage - templatesEditor: Vorlagen Bearbeiter - templatesEditorNameLabel: Vorlagen Name - templatesEditorContentLabel: Vorlagen Inhalt - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - french: - urlInput: URL vidéo de YouTube ou d'un autre service pris en charge - statusTitle: Statut - statusReady: Prêt - selectFormatButton: Sélectionner le format - startButton: Démarrer - abortAllButton: Tout arrêter - updateBinButton: Mettre à jour l'exécutable yt-dlp - darkThemeButton: Thème sombre - lightThemeButton: Thème clair - settingsAnchor: Paramètres - serverAddressTitle: Adresse du serveur - serverPortTitle: Port - extractAudioCheckbox: Extraire l'audio - noMTimeCheckbox: Ne pas définir le temps de modification du fichier - bgReminder: Une fois que vous aurez fermé cette page, le téléchargement continuera en arrière-plan. - toastConnected: 'Connecté à ' - toastUpdated: L'exécutable yt-dlp a été mis à jour ! - formatSelectionEnabler: Activer la sélection des formats vidéo/audio - themeSelect: 'Thème' - languageSelect: 'Langue' - overridesAnchor: Remplacer - pathOverrideOption: Activer le remplacement du chemin de sortie - filenameOverrideOption: Activer le remplacement du nom du fichier de sortie - customFilename: Nom de fichier personnalisé (laisser vide pour utiliser le nom par défaut) - customPath: Chemin personnalisé - customArgs: Activer les args personnalisés yt-dlp (grand pouvoir = grandes responsabilités) - customArgsInput: Arguments yt-dlp personnalisés - rpcConnErr: Erreur lors de la connexion au serveur RPC - splashText: Aucun téléchargement actif - archiveTitle: Archive - clipboardAction: URL copiée dans le presse-papiers - playlistCheckbox: Télécharger la liste de lecture (cela prendra du temps, vous pouvez fermer cette fenêtre après l'avoir validée) - restartAppMessage: Nécessite un rechargement de la page pour prendre effet - servedFromReverseProxyCheckbox: Est derrière un sous-dossier de proxy inverse - notConnectedText: not connected - settingsLabel: Settings - newDownloadButton: New download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: Nom de l'application - savedTemplates: Saved templates - templatesEditor: Templates editor - templatesEditorNameLabel: Template name - templatesEditorContentLabel: Template content - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - italian: - urlInput: URL Video (uno per linea) - statusTitle: Stato - startButton: Inizia - statusReady: Pronto - abortAllButton: Termina tutto - updateBinButton: Aggiorna yt-dlp - darkThemeButton: Tema scuro - lightThemeButton: Tema chiaro - settingsAnchor: Impostazioni - serverAddressTitle: Indirizzo server - serverPortTitle: Porta - extractAudioCheckbox: Estrai l'audio - noMTimeCheckbox: Non impostare la proprietà "Data ultima modifica" - bgReminder: Chiusa questa UI il download continuerà in background. - toastConnected: 'Connesso a ' - toastUpdated: yt-dlp aggiornato con successo! - formatSelectionEnabler: Abilita la selezione dei formati audio/video - themeSelect: 'Tema' - languageSelect: 'Lingua' - overridesAnchor: Sovrascritture - pathOverrideOption: Abilita sovrascrittura percorso di output - filenameOverrideOption: Abilita sovrascrittura del nome del file di output - customFilename: Custom filename (leave blank to use default) - customPath: Custom path - customArgs: Enable custom yt-dlp args (great power = great responsabilities) - customArgsInput: Custom yt-dlp arguments - rpcConnErr: Error nella connessione al server RPC - splashText: Nessun download attivo - archiveTitle: Archivio - clipboardAction: URL copiato negli appunti - playlistCheckbox: Download playlist (richiederà tempo, puoi chiudere la finestra dopo l'inoltro) - restartAppMessage: La finestra deve essere ricaricata perché abbia effetto - servedFromReverseProxyCheckbox: Is behind a reverse proxy - newDownloadButton: Nuovo download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: Titolo applicazione - savedTemplates: Template salvati - templatesEditor: Editor template - templatesEditorNameLabel: Nome template - templatesEditorContentLabel: Contentunto template - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - chinese: - urlInput: 视频 URL - statusTitle: 状态 - statusReady: 就绪 - selectFormatButton: 选择格式 - startButton: 开始 - abortAllButton: 全部中止 - updateBinButton: 更新 yt-dlp 可执行文件 - darkThemeButton: 黑暗主题 - lightThemeButton: 明亮主题 - settingsAnchor: 设置 - serverAddressTitle: 服务器地址 - serverPortTitle: 端口 - extractAudioCheckbox: 提取音频 - noMTimeCheckbox: 不设置文件修改时间 - bgReminder: 关闭页面后,下载会继续在后台运行。 - toastConnected: '已连接到 ' - toastUpdated: 已更新 yt-dlp 可执行文件! - formatSelectionEnabler: 启用视频/音频格式选择 - themeSelect: '主题' - languageSelect: '语言' - overridesAnchor: 覆盖 - pathOverrideOption: 启用输出路径覆盖 - filenameOverrideOption: 启用输出文件名覆盖 - customFilename: 自定义文件名(留空使用默认值) - customPath: 自定义路径 - customArgs: 启用自定义 yt-dlp 参数(能力越大 = 责任越大) - customArgsInput: 自定义 yt-dlp 参数 - rpcConnErr: 连接 RPC 服务器发生错误 - splashText: 没有正在进行的下载 - archiveTitle: 归档 - clipboardAction: 复制 URL 到剪贴板 - playlistCheckbox: 下载播放列表(可能需要一段时间,提交后可以关闭页面等待) - restartAppMessage: 需要刷新页面才能生效 - servedFromReverseProxyCheckbox: 处于反向代理的子目录后 - newDownloadButton: 新下载 - homeButtonLabel: 主页 - archiveButtonLabel: 归档 - settingsButtonLabel: 设置 - rpcAuthenticationLabel: RPC 身份验证 - themeTogglerLabel: 主题切换 - loadingLabel: 正在加载… - appTitle: App 标题 - savedTemplates: 保存模板 - templatesEditor: 模板编辑器 - templatesEditorNameLabel: 模板名称 - templatesEditorContentLabel: 模板内容 - logsTitle: '日志' - awaitingLogs: '正在等待日志…' - bulkDownload: '下载 zip 压缩包中的文件' - livestreamURLInput: 直播 URL - livestreamStatusWaiting: 等待直播开始 - livestreamStatusDownloading: 下载中 - livestreamStatusCompleted: 已完成 - livestreamStatusErrored: 发生错误 - livestreamStatusUnknown: 未知 - livestreamDownloadInfo: | - 本功能将会监控即将开始的直播流,每个进程都会传入参数:--wait-for-video 10 (重试间隔10秒) - 如果直播已经开始,那么依然可以下载,但是不会记录下载进度。 - 直播开始后,将会转移到下载页面 - livestreamExperimentalWarning: 实验性功能,可能存在未知Bug,请谨慎使用 - accentSelect: 'Accent' - spanish: - urlInput: URL de YouTube u otro servicio compatible - statusTitle: Estado - startButton: Iniciar - statusReady: Listo - abortAllButton: Cancelar Todo - updateBinButton: Actualizar el binario yt-dlp - darkThemeButton: Tema oscuro - lightThemeButton: Tema claro - settingsAnchor: Ajustes - serverAddressTitle: Dirección del servidor - serverPortTitle: Puerto - extractAudioCheckbox: Extraer audio - noMTimeCheckbox: No guardar el tiempo de modificación del archivo - bgReminder: Si cierras esta página, la descarga continuará en segundo plano. - toastConnected: 'Conectado a' - toastUpdated: ¡El binario yt-dlp está actualizado! - formatSelectionEnabler: Habilitar la selección de formatos de video/audio - themeSelect: 'Tema' - languageSelect: 'Idiomas' - overridesAnchor: Anulaciones - pathOverrideOption: Sobreescribir en la ruta de salida - filenameOverrideOption: Sobreescribir el nombre del fichero - customFilename: Nombre de archivo personalizado (en blanco para usar el predeterminado) - customPath: Ruta personalizada - customArgs: Habilitar los argumentos yt-dlp personalizados (un gran poder conlleva una gran responsabilidad) - customArgsInput: Argumentos yt-dlp personalizados - rpcConnErr: Error al conectarse al servidor RPC - splashText: No active downloads - archiveTitle: Archive - clipboardAction: Copied URL to clipboard - playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) - servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder - newDownloadButton: New download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: App title - savedTemplates: Saved templates - templatesEditor: Templates editor - templatesEditorNameLabel: Template name - templatesEditorContentLabel: Template content - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - russian: - urlInput: URL-адрес YouTube или любого другого поддерживаемого сервиса - statusTitle: Статус - startButton: Начать - statusReady: Готово - abortAllButton: Прервать все - updateBinButton: Обновить бинарный файл yt-dlp - darkThemeButton: Темная тема - lightThemeButton: Светлая тема - settingsAnchor: Настройки - serverAddressTitle: Адрес сервера - serverPortTitle: Порт - extractAudioCheckbox: Извлечь аудио - noMTimeCheckbox: Не устанавливать время модификации файла - bgReminder: Как только вы закроете эту страницу, загрузка продолжится в фоновом режиме. - toastConnected: 'Подключен к ' - toastUpdated: Бинарный файл yt-dlp обновлен! - formatSelectionEnabler: Активировать выбор видео/аудио форматов - themeSelect: 'Тема' - languageSelect: 'Язык' - overridesAnchor: Переопределить - pathOverrideOption: Активировать переопределение выходного пути - filenameOverrideOption: Активировать переопределение имени выходного файла - customFilename: Задать имя файла (оставьте пустым, чтобы использовать значение по умолчанию) - customPath: Задать путь - customArgs: Включить настраиваемые аргументы yt-dlp (большая сила = большая ответственность) - customArgsInput: Пользовательские аргументы yt-dlp - rpcConnErr: Ошибка при подключении к серверу RPC - splashText: Нет активных загрузок - archiveTitle: Архив - clipboardAction: URL скопирован в буфер обмена - playlistCheckbox: Скачать плейлист. Это займет время, после отправки вы сможете закрыть окно - servedFromReverseProxyCheckbox: Находится за обратным прокси - newDownloadButton: Новая загрузка - homeButtonLabel: Home - archiveButtonLabel: Архив - settingsButtonLabel: Настройки - rpcAuthenticationLabel: RPC-аутентификация - themeTogglerLabel: Переключить тему - loadingLabel: Загрузка... - appTitle: Название приложения - savedTemplates: Сохраненные шаблоны - templatesEditor: Редактор шаблонов - templatesEditorNameLabel: Имя шаблона - templatesEditorContentLabel: Содержание шаблона - logsTitle: 'Логи' - awaitingLogs: 'Ожидание логов...' - bulkDownload: 'Скачать файлы в zip архиве' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - korean: - urlInput: YouTube나 다른 지원되는 사이트의 URL - statusTitle: 상태 - startButton: 시작 - statusReady: 준비됨 - abortAllButton: 모두 중단 - updateBinButton: yt-dlp 바이너리 업데이트 - darkThemeButton: 다크 모드 - lightThemeButton: 라이트 모드 - settingsAnchor: 설정 - serverAddressTitle: 서버 주소 - serverPortTitle: Port - extractAudioCheckbox: 오디오 추출 - noMTimeCheckbox: 파일 수정 시간을 설정하지 않음 - bgReminder: 이 페이지를 닫아도 백그라운드에서 다운로드가 계속됩니다 - toastConnected: '다음으로 연결됨 ' - toastUpdated: yt-dlp 바이너리를 업데이트 했습니다 - formatSelectionEnabler: 비디오/오디오 포멧 옵션 표시 - themeSelect: 'Theme' - languageSelect: 'Language' - overridesAnchor: Overrides - pathOverrideOption: Enable output path overriding - filenameOverrideOption: Enable output file name overriding - customFilename: Custom filename (leave blank to use default) - customPath: Custom path - customArgs: Enable custom yt-dlp args (great power = great responsabilities) - customArgsInput: Custom yt-dlp arguments - rpcConnErr: Error while conencting to RPC server - splashText: No active downloads - archiveTitle: Archive - clipboardAction: Copied URL to clipboard - playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) - servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder - newDownloadButton: New download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: App title - savedTemplates: Saved templates - templatesEditor: Templates editor - templatesEditorNameLabel: Template name - templatesEditorContentLabel: Template content - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - japanese: - urlInput: YouTubeまたはサポート済み動画のURL - statusTitle: 状態 - statusReady: 準備 - selectFormatButton: フォーマット選択 - startButton: 開始 - abortAllButton: すべて中止 - updateBinButton: yt-dlp更新 - darkThemeButton: 黒テーマ - lightThemeButton: 白テーマ - settingsAnchor: 設定 - serverAddressTitle: サーバーアドレス - serverPortTitle: ポート番号 - extractAudioCheckbox: 音質 - noMTimeCheckbox: ファイル時間の修正をしない - bgReminder: このページを閉じてもバックグラウンドでダウンロードを続けます - toastConnected: '接続中 ' - toastUpdated: yt-dlpを更新しました! - formatSelectionEnabler: 選択可能な動画/音源 - themeSelect: 'テーマ' - languageSelect: '言語' - overridesAnchor: 上書き - pathOverrideOption: 保存するディレクトリ - filenameOverrideOption: ファイル名の上書き - customFilename: (空白の場合は元のファイル名) - customPath: 保存先 - customArgs: yt-dlpのオプションの有効化 (最適設定にする場合) - customArgsInput: yt-dlpのオプション - rpcConnErr: RPCサーバーへの接続中にエラーが発生しました - splashText: アクティブなダウンロードはありません - archiveTitle: アーカイブ - clipboardAction: URLをクリップボードにコピーしました - playlistCheckbox: プレイリストをダウンロード (これには時間がかかりますが、処理中はウィンドウを閉じることができます) - servedFromReverseProxyCheckbox: リバースプロキシのサブフォルダにあります - newDownloadButton: 新しくダウンロード - homeButtonLabel: ホーム - archiveButtonLabel: アーカイブ - settingsButtonLabel: 設定 - rpcAuthenticationLabel: RPC認証 - themeTogglerLabel: テーマ切り替え - loadingLabel: 読み込み中... - appTitle: アプリタイトル - savedTemplates: 保存したテンプレート - templatesEditor: テンプレートエディター - templatesEditorNameLabel: テンプレート名 - templatesEditorContentLabel: テンプレート内容 - logsTitle: 'ログ' - awaitingLogs: 'ログを待機中...' - bulkDownload: 'ダウンロードしたファイルをZIPで保存' - livestreamURLInput: ライブストリームURL - livestreamStatusWaiting: 開始を待っています - livestreamStatusDownloading: ダウンロード中 - livestreamStatusCompleted: 完了 - livestreamStatusErrored: エラー - livestreamStatusUnknown: 不明 - livestreamDownloadInfo: | - まだ開始されていないライブストリームを監視します。各プロセスは、--wait-for-video 10 で実行されます。 - すでに開始されているライブストリームが提供された場合、ダウンロードは継続されますが進行状況は追跡されません。 - ライブストリームが開始されると、ダウンロードページに移動されます。 - livestreamExperimentalWarning: この機能は実験的なものです。何かが壊れるかもしれません! - accentSelect: 'Accent' - catalan: - urlInput: URL de YouTube o d'un altre servei compatible - statusTitle: Estat - startButton: Iniciar - statusReady: Llest - abortAllButton: Cancel·lar Tot - updateBinButton: Actualitzar el binari yt-dlp - darkThemeButton: Tema fosc - lightThemeButton: Tema clar - settingsAnchor: Configuració - serverAddressTitle: Direcció del servidor - serverPortTitle: Port - extractAudioCheckbox: Extreure àudio - noMTimeCheckbox: No guardar el temps de modificació de l'arxiu - bgReminder: Si tanques aquesta pàgina, la descàrrega continuarà en segon pla. - toastConnected: 'Connectat a' - toastUpdated: El binari yt-dlp està actualitzat! - formatSelectionEnabler: Habilitar la selecció de formats de vídeo/àudio - themeSelect: 'Tema' - languageSelect: 'Idiomes' - overridesAnchor: Anul·lacions - pathOverrideOption: Sobreescriure en la ruta de sortida - filenameOverrideOption: Sobreescriure el nom del fitxer - customFilename: Nom d'arxiu personalitzat (en blanc per utilitzar el predeterminat) - customPath: Ruta personalitzada - customArgs: Habilitar els arguments yt-dlp personalitzats (un gran poder comporta una gran responsabilitat) - customArgsInput: Arguments yt-dlp personalitzats - rpcConnErr: Error en connectar-se al servidor RPC - splashText: No active downloads - archiveTitle: Archive - clipboardAction: Copied URL to clipboard - playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) - servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder - newDownloadButton: New download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: App title - savedTemplates: Saved templates - templatesEditor: Templates editor - templatesEditorNameLabel: Template name - templatesEditorContentLabel: Template content - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - ukrainian: - urlInput: URL-адреса YouTube або будь-якого іншого підтримуваного сервісу - statusTitle: Статус - startButton: Почати - statusReady: Готово - abortAllButton: Перервати все - updateBinButton: Оновити бінарний файл yt-dlp - darkThemeButton: Темна тема - lightThemeButton: Світла тема - settingsAnchor: Налаштування - serverAddressTitle: Адреса сервера - serverPortTitle: Порт - extractAudioCheckbox: Витягти аудіо - noMTimeCheckbox: Не встановлювати час модифікації файлу - bgReminder: Як тільки ви закриєте цю сторінку, завантаження продовжиться у фоновому режимі. - toastConnected: 'Підключений до ' - toastUpdated: Бінарний файл yt-dlp оновлено! - formatSelectionEnabler: Активувати вибір відео/аудіо форматів - themeSelect: 'Тема' - languageSelect: 'Мова' - overridesAnchor: Перевизначити - pathOverrideOption: Активувати перевизначення вихідного шляху - filenameOverrideOption: Активувати перевизначення імені вихідного файлу - customFilename: Введіть ім'я файлу (залишіть порожнім, щоб використовувати значення за замовчуванням) - customPath: Задати шлях - customArgs: Включити аргументи, що настроюються yt-dlp (велика сила = велика відповідальність) - customArgsInput: Користувальницькі аргументи yt-dlp - rpcConnErr: Помилка при підключенні до сервера RPC - splashText: Немає активних завантажень - archiveTitle: Архів - clipboardAction: URL скопійовано в буфер обміну - playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) - servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder - newDownloadButton: New download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: App title - savedTemplates: Saved templates - templatesEditor: Templates editor - templatesEditorNameLabel: Template name - templatesEditorContentLabel: Template content - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - polish: - urlInput: Adres URL YouTube lub innej obsługiwanej usługi - statusTitle: Status - startButton: Początek - statusReady: Gotowy - abortAllButton: Anuluj wszystko - updateBinButton: Zaktualizuj plik binarny yt-dlp - darkThemeButton: Ciemny motyw - lightThemeButton: Światło motyw - settingsAnchor: Ustawienia - serverAddressTitle: Adres serwera - serverPortTitle: Port - extractAudioCheckbox: Wyodrębnij dźwięk - noMTimeCheckbox: Nie ustawiaj czasu modyfikacji pliku - bgReminder: Po zamknięciu tej strony pobieranie będzie kontynuowane w tle. - toastConnected: 'Połączony z ' - toastUpdated: Zaktualizowano plik binarny yt-dlp! - formatSelectionEnabler: Aktywuj wybór formatów wideo/audio - themeSelect: 'Motyw' - languageSelect: 'Język' - overridesAnchor: Przedefiniuj - pathOverrideOption: Aktywuj zastąpienie ścieżki źródłowej - filenameOverrideOption: Aktywuj zastępowanie nazwy pliku źródłowego - customFilename: Wprowadź nazwę pliku (pozostaw puste, aby użyć nazwy domyślnej) - customPath: Ustaw ścieżkę - customArgs: Uwzględnij konfigurowalne argumenty yt-dlp (wielka moc = wielka odpowiedzialność) - customArgsInput: Niestandardowe argumenty yt-dlp - rpcConnErr: Wystąpił błąd podczas łączenia z serwerem RPC - splashText: Brak aktywnych pobrań - archiveTitle: Archiwum - clipboardAction: Adres URL zostanie skopiowany do schowka - playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) - servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder - newDownloadButton: New download - homeButtonLabel: Home - archiveButtonLabel: Archive - settingsButtonLabel: Settings - rpcAuthenticationLabel: RPC authentication - themeTogglerLabel: Theme toggler - loadingLabel: Loading... - appTitle: App title - savedTemplates: Saved templates - templatesEditor: Templates editor - templatesEditorNameLabel: Template name - templatesEditorContentLabel: Template content - logsTitle: 'Logs' - awaitingLogs: 'Awaiting logs...' - bulkDownload: 'Download files in a zip archive' - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - swedish: - urlInput: Videolänk (en per rad) - statusTitle: Status - statusReady: Redo - selectFormatButton: Välj format - startButton: Start - abortAllButton: Avbryt alla - updateBinButton: Uppdatera yt-dlp - darkThemeButton: Mörkt tema - lightThemeButton: Ljust tema - settingsAnchor: Inställningar - serverAddressTitle: Serveraddress - serverPortTitle: Port - extractAudioCheckbox: Extrahera ljud - noMTimeCheckbox: Lägg inte till info om när filen senast modifierades - bgReminder: När du stänger denna sida så kommer nedladdningen att fortsätta i bakgrunden. - toastConnected: 'Ansluten till ' - toastUpdated: Uppdaterade yt-dlp! - formatSelectionEnabler: Tillåt val av ljud- och bildformat - themeSelect: 'Tema' - languageSelect: 'Språk' - overridesAnchor: Överskrivningar - pathOverrideOption: Tillåt överskrivning av filsökvägen - filenameOverrideOption: Tillåt överskrivning av filnamn - customFilename: Eget filnamn (lämna blankt för standardnamn) - customPath: Egen filsökväg - customArgs: Tillåt egna yt-dlp-argument (frihet under ansvar!) - customArgsInput: Egna yt-dlp-argument - rpcConnErr: Ett fel inträffade vid anslutning till RPC-server - splashText: Inga pågående nedladdningar - archiveTitle: Arkiv - clipboardAction: Kopierade länken - playlistCheckbox: Ladda ner spellista (detta kommer ta did, efter start så kan du stänga detta fönster) - restartAppMessage: En sidomladdning behövs innan förändringen får effekt - servedFromReverseProxyCheckbox: Servern befinner sig bakom en omvänd proxy - urlBase: "URL-bas, måste anges när en omvänd proxy används. Standardinställning: lämna blank" - newDownloadButton: Ny nedladdning - homeButtonLabel: Hem - archiveButtonLabel: Arkiv - settingsButtonLabel: Inställningar - rpcAuthenticationLabel: RPC-Autentisering - themeTogglerLabel: Tema-knapp - loadingLabel: Laddar... - appTitle: Apptitel - savedTemplates: Sparade mallar - templatesEditor: Mallredigerare - templatesEditorNameLabel: Namn - templatesEditorContentLabel: Innehåll - logsTitle: 'Loggar' - awaitingLogs: 'Väntar på loggar...' - bulkDownload: 'Ladda ner filer i ett zip-arkiv' - rpcPollingTimeTitle: Frekvens av RPC-uppdateringar - rpcPollingTimeDescription: En högre frekvens kräver mer CPU-resurser för både server och klient - templatesReloadInfo: För att registrera en ny mall så kan en sidomladdning krävas. - livestreamURLInput: Livestream URL - livestreamStatusWaiting: Waiting/Wait start - livestreamStatusDownloading: Downloading - livestreamStatusCompleted: Completed - livestreamStatusErrored: Errored - livestreamStatusUnknown: Unknown - livestreamDownloadInfo: | - This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. - If an already started livestream is provided it will be still downloaded but its progress will not be tracked. - Once started the livestream will be migrated to the downloads page. - livestreamExperimentalWarning: This feature is still experimental. Something might break! - accentSelect: 'Accent' - portuguese-br: - urlInput: URL do vídeo (uma por linha) - statusTitle: Status - statusReady: Pronto - selectFormatButton: Selecionar formato - startButton: Iniciar - abortAllButton: Cancelar tudo - updateBinButton: Atualizar binário yt-dlp - darkThemeButton: Tema escuro - lightThemeButton: Tema claro - settingsAnchor: Configurações - serverAddressTitle: Endereço do servidor - serverPortTitle: Porta - extractAudioCheckbox: Extrair áudio - noMTimeCheckbox: Não definir hora de modificação do arquivo - bgReminder: Uma vez que você feche esta página, o download continuará em segundo plano. - toastConnected: 'Conectado a ' - toastUpdated: Binário yt-dlp atualizado! - formatSelectionEnabler: Habilitar seleção de formatos de vídeo/aúdio - themeSelect: 'Tema' - languageSelect: 'Idioma' - overridesAnchor: Substituições - pathOverrideOption: Habilitar substituição do caminho de saída - filenameOverrideOption: Habilitar substituição do nome do arquivo de saída - customFilename: Nome de arquivo personalizado (deixe em branco para usar o padrão) - customPath: Caminho personalizado - customArgs: Habilitar argumentos personalizados do yt-dlp (grandes poderes = grandes responsabilidades) - customArgsInput: Argumentos personalizados do yt-dlp - rpcConnErr: Erro ao conectar ao servidor RPC - splashText: Nenhum download ativo - archiveTitle: Arquivo - clipboardAction: URL copiada para a área de transferência - playlistCheckbox: Baixar playlist (isso pode levar algum tempo, depois de enviar você pode fechar esta janela) - restartAppMessage: Necessário recarregar a página para que a mudança tenha efeito - servedFromReverseProxyCheckbox: Está atrás de um proxy reverso - urlBase: Base da URL, para suporte de proxy reverso (subdiretório), padrão vazio - newDownloadButton: Novo download - homeButtonLabel: Início - archiveButtonLabel: Arquivo - settingsButtonLabel: Configurações - rpcAuthenticationLabel: Autenticação RPC - themeTogglerLabel: Alternador de tema - loadingLabel: Carregando... - appTitle: Título do aplicativo - savedTemplates: Modelos salvos - templatesEditor: Editor de modelos - templatesEditorNameLabel: Nome do modelo - templatesEditorContentLabel: Conteúdo do modelo - logsTitle: 'Logs' - awaitingLogs: 'Aguardando logs...' - bulkDownload: 'Baixar arquivos em um arquivo zip' - rpcPollingTimeTitle: Tempo de polling RPC - rpcPollingTimeDescription: Um intervalo menor resulta em maior uso de CPU (lado do servidor e do cliente) - templatesReloadInfo: Para registrar um novo modelo, pode ser necessário recarregar a página. - livestreamURLInput: URL da transmissão ao vivo - livestreamStatusWaiting: Aguardando/Aguarde o início - livestreamStatusDownloading: Baixando - livestreamStatusCompleted: Concluído - livestreamStatusErrored: Erro - livestreamStatusUnknown: Desconhecido - livestreamDownloadInfo: | - Isso monitorará uma transmissão ao vivo que ainda não começou. Cada processo será executado com --wait-for-video 10. - Se uma transmissão ao vivo já iniciada for fornecida, ela ainda será baixada, mas seu progresso não será rastreado. - Uma vez iniciada, a transmissão ao vivo será migrada para a página de downloads. - livestreamExperimentalWarning: Este recurso ainda é experimental. Algo pode quebrar! - accentSelect: 'Accent' + catalan: ca.yaml + german: de.yaml + english: en_US.yaml + spanish: es.yaml + french: fr.yaml + italian: it_IT.yaml + japanese: ja.yaml + korean: ko.yaml + polish: pl.yaml + portuguese-br: pt_BR.yaml + russian: ru.yaml + swedish: sv.yaml + ukrainian: uk.yaml + chinese: zh_CN.yaml \ No newline at end of file diff --git a/frontend/src/assets/i18n/ca.yaml b/frontend/src/assets/i18n/ca.yaml new file mode 100644 index 00000000..46095f70 --- /dev/null +++ b/frontend/src/assets/i18n/ca.yaml @@ -0,0 +1,63 @@ +keys: + urlInput: URL de YouTube o d'un altre servei compatible + statusTitle: Estat + startButton: Iniciar + statusReady: Llest + abortAllButton: Cancel·lar Tot + updateBinButton: Actualitzar el binari yt-dlp + darkThemeButton: Tema fosc + lightThemeButton: Tema clar + settingsAnchor: Configuració + serverAddressTitle: Direcció del servidor + serverPortTitle: Port + extractAudioCheckbox: Extreure àudio + noMTimeCheckbox: No guardar el temps de modificació de l'arxiu + bgReminder: Si tanques aquesta pàgina, la descàrrega continuarà en segon pla. + toastConnected: 'Connectat a' + toastUpdated: El binari yt-dlp està actualitzat! + formatSelectionEnabler: Habilitar la selecció de formats de vídeo/àudio + themeSelect: 'Tema' + languageSelect: 'Idiomes' + overridesAnchor: Anul·lacions + pathOverrideOption: Sobreescriure en la ruta de sortida + filenameOverrideOption: Sobreescriure el nom del fitxer + customFilename: Nom d'arxiu personalitzat (en blanc per utilitzar el predeterminat) + customPath: Ruta personalitzada + customArgs: Habilitar els arguments yt-dlp personalitzats (un gran poder comporta una gran responsabilitat) + customArgsInput: Arguments yt-dlp personalitzats + rpcConnErr: Error en connectar-se al servidor RPC + splashText: No active downloads + archiveTitle: Archive + clipboardAction: Copied URL to clipboard + playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) + servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder + newDownloadButton: New download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: App title + savedTemplates: Saved templates + templatesEditor: Templates editor + templatesEditorNameLabel: Template name + templatesEditorContentLabel: Template content + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/de.yaml b/frontend/src/assets/i18n/de.yaml new file mode 100644 index 00000000..006c0adf --- /dev/null +++ b/frontend/src/assets/i18n/de.yaml @@ -0,0 +1,65 @@ +keys: + urlInput: Video URL + statusTitle: Status + statusReady: Bereit + selectFormatButton: Format auswählen + startButton: Start + abortAllButton: Alle Abbrechen + updateBinButton: yt-dlp Binärdatei aktualisieren + darkThemeButton: Dunkel Modus + lightThemeButton: Hell Modus + settingsAnchor: Einstellungen + serverAddressTitle: Server Adresse + serverPortTitle: Port + extractAudioCheckbox: Audio extrahieren + noMTimeCheckbox: Datei-Änderungszeitpunkt nicht festlegen + bgReminder: Sobald Sie diese Seite schließen, wird der Download im Hintergrund fortgesetzt. + toastConnected: 'Verbunden mit ' + toastUpdated: yt-dlp Binärdatei aktualisiert! + formatSelectionEnabler: Video/Audio Format auswählbar + themeSelect: 'Modus' + languageSelect: 'Sprache' + overridesAnchor: Überschreibungen + pathOverrideOption: Ausgabe-Pfad Überschreibung aktivieren + filenameOverrideOption: Ausgabe-Dateiname Überschreibung aktivieren + customFilename: Custom filename (leave blank to use default) + customPath: Benutzerdefinierter Pfad + customArgs: Benutzerdefinierte yt-dlp Argumente aktivieren (viel Macht = viel Verantwortung) + customArgsInput: Benutzerdefinierte yt-dlp Argumente + rpcConnErr: Fehler beim Verbinden mit RPC Server + splashText: Keine aktiven Downloads + archiveTitle: Archiv + clipboardAction: URL in Zwischenablage kopiert + playlistCheckbox: Playlist herunterladen (es wird einige Zeit dauern, nach dem Absenden können Sie dieses Fenster schließen) + restartAppMessage: Erfordert ein Neuladen der Seite, um wirksam zu werden + servedFromReverseProxyCheckbox: Ist hinter einem Reverse Proxy Unterordner + newDownloadButton: Neuer Download + homeButtonLabel: Home + archiveButtonLabel: Archiv + settingsButtonLabel: Einstellungen + rpcAuthenticationLabel: RPC Authentifizierung + themeTogglerLabel: Modus Umschalter + loadingLabel: Lädt... + appTitle: App Titel + savedTemplates: Gespeicherte Vorlage + templatesEditor: Vorlagen Bearbeiter + templatesEditorNameLabel: Vorlagen Name + templatesEditorContentLabel: Vorlagen Inhalt + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + rpcPollingTimeTitle: RPC-Abfragezeit + rpcPollingTimeDescription: Ein kürzeres Intervall führt zu einer höheren CPU-Auslastung (Server- und Clientseite) + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL-Basis für Reverse-Proxy-Unterstützung (Unterverzeichnis), standardmäßig leer \ No newline at end of file diff --git a/frontend/src/assets/i18n/en_US.yaml b/frontend/src/assets/i18n/en_US.yaml new file mode 100644 index 00000000..97054f1e --- /dev/null +++ b/frontend/src/assets/i18n/en_US.yaml @@ -0,0 +1,66 @@ +keys: + urlInput: Video URL (one per line) + statusTitle: Status + statusReady: Ready + selectFormatButton: Select format + startButton: Start + abortAllButton: Abort All + updateBinButton: Update yt-dlp binary + darkThemeButton: Dark theme + lightThemeButton: Light theme + settingsAnchor: Settings + serverAddressTitle: Server address + serverPortTitle: Port + extractAudioCheckbox: Extract audio + noMTimeCheckbox: Don't set file modification time + bgReminder: Once you close this page the download will continue in the background. + toastConnected: 'Connected to ' + toastUpdated: Updated yt-dlp binary! + formatSelectionEnabler: Enable video/audio formats selection + themeSelect: 'Theme' + languageSelect: 'Language' + overridesAnchor: Overrides + pathOverrideOption: Enable output path overriding + filenameOverrideOption: Enable output file name overriding + customFilename: Custom filename (leave blank to use default) + customPath: Custom path + customArgs: Enable custom yt-dlp args (great power = great responsibilities) + customArgsInput: Custom yt-dlp arguments + rpcConnErr: Error while conencting to RPC server + splashText: No active downloads + archiveTitle: Archive + clipboardAction: Copied URL to clipboard + playlistCheckbox: Download playlist (it will take time, after submitting you may close this window) + restartAppMessage: Needs a page reload to take effect + servedFromReverseProxyCheckbox: Is behind a reverse proxy + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + newDownloadButton: New download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: App title + savedTemplates: Saved templates + templatesEditor: Templates editor + templatesEditorNameLabel: Template name + templatesEditorContentLabel: Template content + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) + templatesReloadInfo: To register a new template it might need a page reload. + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' \ No newline at end of file diff --git a/frontend/src/assets/i18n/es.yaml b/frontend/src/assets/i18n/es.yaml new file mode 100644 index 00000000..1a022492 --- /dev/null +++ b/frontend/src/assets/i18n/es.yaml @@ -0,0 +1,63 @@ +keys: + urlInput: URL de YouTube u otro servicio compatible + statusTitle: Estado + startButton: Iniciar + statusReady: Listo + abortAllButton: Cancelar Todo + updateBinButton: Actualizar el binario yt-dlp + darkThemeButton: Tema oscuro + lightThemeButton: Tema claro + settingsAnchor: Ajustes + serverAddressTitle: Dirección del servidor + serverPortTitle: Puerto + extractAudioCheckbox: Extraer audio + noMTimeCheckbox: No guardar el tiempo de modificación del archivo + bgReminder: Si cierras esta página, la descarga continuará en segundo plano. + toastConnected: 'Conectado a' + toastUpdated: ¡El binario yt-dlp está actualizado! + formatSelectionEnabler: Habilitar la selección de formatos de video/audio + themeSelect: 'Tema' + languageSelect: 'Idiomas' + overridesAnchor: Anulaciones + pathOverrideOption: Sobreescribir en la ruta de salida + filenameOverrideOption: Sobreescribir el nombre del fichero + customFilename: Nombre de archivo personalizado (en blanco para usar el predeterminado) + customPath: Ruta personalizada + customArgs: Habilitar los argumentos yt-dlp personalizados (un gran poder conlleva una gran responsabilidad) + customArgsInput: Argumentos yt-dlp personalizados + rpcConnErr: Error al conectarse al servidor RPC + splashText: No active downloads + archiveTitle: Archive + clipboardAction: Copied URL to clipboard + playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) + servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder + newDownloadButton: New download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: App title + savedTemplates: Saved templates + templatesEditor: Templates editor + templatesEditorNameLabel: Template name + templatesEditorContentLabel: Template content + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/fr.yaml b/frontend/src/assets/i18n/fr.yaml new file mode 100644 index 00000000..2d545b1b --- /dev/null +++ b/frontend/src/assets/i18n/fr.yaml @@ -0,0 +1,67 @@ +keys: + urlInput: URL vidéo de YouTube ou d'un autre service pris en charge + statusTitle: Statut + statusReady: Prêt + selectFormatButton: Sélectionner le format + startButton: Démarrer + abortAllButton: Tout arrêter + updateBinButton: Mettre à jour l'exécutable yt-dlp + darkThemeButton: Thème sombre + lightThemeButton: Thème clair + settingsAnchor: Paramètres + serverAddressTitle: Adresse du serveur + serverPortTitle: Port + extractAudioCheckbox: Extraire l'audio + noMTimeCheckbox: Ne pas définir le temps de modification du fichier + bgReminder: Une fois que vous aurez fermé cette page, le téléchargement continuera en arrière-plan. + toastConnected: 'Connecté à ' + toastUpdated: L'exécutable yt-dlp a été mis à jour ! + formatSelectionEnabler: Activer la sélection des formats vidéo/audio + themeSelect: 'Thème' + languageSelect: 'Langue' + overridesAnchor: Remplacer + pathOverrideOption: Activer le remplacement du chemin de sortie + filenameOverrideOption: Activer le remplacement du nom du fichier de sortie + customFilename: Nom de fichier personnalisé (laisser vide pour utiliser le nom par défaut) + customPath: Chemin personnalisé + customArgs: Activer les args personnalisés yt-dlp (grand pouvoir = grandes responsabilités) + customArgsInput: Arguments yt-dlp personnalisés + rpcConnErr: Erreur lors de la connexion au serveur RPC + splashText: Aucun téléchargement actif + archiveTitle: Archive + clipboardAction: URL copiée dans le presse-papiers + playlistCheckbox: Télécharger la liste de lecture (cela prendra du temps, vous pouvez fermer cette fenêtre après l'avoir validée) + restartAppMessage: Nécessite un rechargement de la page pour prendre effet + servedFromReverseProxyCheckbox: Est derrière un sous-dossier de proxy inverse + notConnectedText: not connected + settingsLabel: Settings + newDownloadButton: New download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: Nom de l'application + savedTemplates: Saved templates + templatesEditor: Templates editor + templatesEditorNameLabel: Template name + templatesEditorContentLabel: Template content + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/it_IT.yaml b/frontend/src/assets/i18n/it_IT.yaml new file mode 100644 index 00000000..8989539e --- /dev/null +++ b/frontend/src/assets/i18n/it_IT.yaml @@ -0,0 +1,64 @@ +keys: + urlInput: URL Video (uno per linea) + statusTitle: Stato + startButton: Inizia + statusReady: Pronto + abortAllButton: Termina tutto + updateBinButton: Aggiorna yt-dlp + darkThemeButton: Tema scuro + lightThemeButton: Tema chiaro + settingsAnchor: Impostazioni + serverAddressTitle: Indirizzo server + serverPortTitle: Porta + extractAudioCheckbox: Estrai l'audio + noMTimeCheckbox: Non impostare la proprietà "Data ultima modifica" + bgReminder: Chiusa questa UI il download continuerà in background. + toastConnected: 'Connesso a ' + toastUpdated: yt-dlp aggiornato con successo! + formatSelectionEnabler: Abilita la selezione dei formati audio/video + themeSelect: 'Tema' + languageSelect: 'Lingua' + overridesAnchor: Sovrascritture + pathOverrideOption: Abilita sovrascrittura percorso di output + filenameOverrideOption: Abilita sovrascrittura del nome del file di output + customFilename: Custom filename (leave blank to use default) + customPath: Custom path + customArgs: Enable custom yt-dlp args (great power = great responsabilities) + customArgsInput: Custom yt-dlp arguments + rpcConnErr: Error nella connessione al server RPC + splashText: Nessun download attivo + archiveTitle: Archivio + clipboardAction: URL copiato negli appunti + playlistCheckbox: Download playlist (richiederà tempo, puoi chiudere la finestra dopo l'inoltro) + restartAppMessage: La finestra deve essere ricaricata perché abbia effetto + servedFromReverseProxyCheckbox: Is behind a reverse proxy + newDownloadButton: Nuovo download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: Titolo applicazione + savedTemplates: Template salvati + templatesEditor: Editor template + templatesEditorNameLabel: Nome template + templatesEditorContentLabel: Contentunto template + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: base URL, per supporto a reverse proxy (subdir), default vuoto + rpcPollingTimeTitle: Intervallo di polling RPC + rpcPollingTimeDescription: Un intervallo più corto implica un maggior utilizzo di CPU (lato client e server) \ No newline at end of file diff --git a/frontend/src/assets/i18n/ja.yaml b/frontend/src/assets/i18n/ja.yaml new file mode 100644 index 00000000..7a128564 --- /dev/null +++ b/frontend/src/assets/i18n/ja.yaml @@ -0,0 +1,64 @@ +keys: + urlInput: YouTubeまたはサポート済み動画のURL + statusTitle: 状態 + statusReady: 準備 + selectFormatButton: フォーマット選択 + startButton: 開始 + abortAllButton: すべて中止 + updateBinButton: yt-dlp更新 + darkThemeButton: 黒テーマ + lightThemeButton: 白テーマ + settingsAnchor: 設定 + serverAddressTitle: サーバーアドレス + serverPortTitle: ポート番号 + extractAudioCheckbox: 音質 + noMTimeCheckbox: ファイル時間の修正をしない + bgReminder: このページを閉じてもバックグラウンドでダウンロードを続けます + toastConnected: '接続中 ' + toastUpdated: yt-dlpを更新しました! + formatSelectionEnabler: 選択可能な動画/音源 + themeSelect: 'テーマ' + languageSelect: '言語' + overridesAnchor: 上書き + pathOverrideOption: 保存するディレクトリ + filenameOverrideOption: ファイル名の上書き + customFilename: (空白の場合は元のファイル名) + customPath: 保存先 + customArgs: yt-dlpのオプションの有効化 (最適設定にする場合) + customArgsInput: yt-dlpのオプション + rpcConnErr: RPCサーバーへの接続中にエラーが発生しました + splashText: アクティブなダウンロードはありません + archiveTitle: アーカイブ + clipboardAction: URLをクリップボードにコピーしました + playlistCheckbox: プレイリストをダウンロード (これには時間がかかりますが、処理中はウィンドウを閉じることができます) + servedFromReverseProxyCheckbox: リバースプロキシのサブフォルダにあります + newDownloadButton: 新しくダウンロード + homeButtonLabel: ホーム + archiveButtonLabel: アーカイブ + settingsButtonLabel: 設定 + rpcAuthenticationLabel: RPC認証 + themeTogglerLabel: テーマ切り替え + loadingLabel: 読み込み中... + appTitle: アプリタイトル + savedTemplates: 保存したテンプレート + templatesEditor: テンプレートエディター + templatesEditorNameLabel: テンプレート名 + templatesEditorContentLabel: テンプレート内容 + logsTitle: 'ログ' + awaitingLogs: 'ログを待機中...' + bulkDownload: 'ダウンロードしたファイルをZIPで保存' + livestreamURLInput: ライブストリームURL + livestreamStatusWaiting: 開始を待っています + livestreamStatusDownloading: ダウンロード中 + livestreamStatusCompleted: 完了 + livestreamStatusErrored: エラー + livestreamStatusUnknown: 不明 + livestreamDownloadInfo: | + まだ開始されていないライブストリームを監視します。各プロセスは、--wait-for-video 10 で実行されます。 + すでに開始されているライブストリームが提供された場合、ダウンロードは継続されますが進行状況は追跡されません。 + ライブストリームが開始されると、ダウンロードページに移動されます。 + livestreamExperimentalWarning: この機能は実験的なものです。何かが壊れるかもしれません! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/ko.yaml b/frontend/src/assets/i18n/ko.yaml new file mode 100644 index 00000000..110732e3 --- /dev/null +++ b/frontend/src/assets/i18n/ko.yaml @@ -0,0 +1,63 @@ +keys: + urlInput: YouTube나 다른 지원되는 사이트의 URL + statusTitle: 상태 + startButton: 시작 + statusReady: 준비됨 + abortAllButton: 모두 중단 + updateBinButton: yt-dlp 바이너리 업데이트 + darkThemeButton: 다크 모드 + lightThemeButton: 라이트 모드 + settingsAnchor: 설정 + serverAddressTitle: 서버 주소 + serverPortTitle: Port + extractAudioCheckbox: 오디오 추출 + noMTimeCheckbox: 파일 수정 시간을 설정하지 않음 + bgReminder: 이 페이지를 닫아도 백그라운드에서 다운로드가 계속됩니다 + toastConnected: '다음으로 연결됨 ' + toastUpdated: yt-dlp 바이너리를 업데이트 했습니다 + formatSelectionEnabler: 비디오/오디오 포멧 옵션 표시 + themeSelect: 'Theme' + languageSelect: 'Language' + overridesAnchor: Overrides + pathOverrideOption: Enable output path overriding + filenameOverrideOption: Enable output file name overriding + customFilename: Custom filename (leave blank to use default) + customPath: Custom path + customArgs: Enable custom yt-dlp args (great power = great responsabilities) + customArgsInput: Custom yt-dlp arguments + rpcConnErr: Error while conencting to RPC server + splashText: No active downloads + archiveTitle: Archive + clipboardAction: Copied URL to clipboard + playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) + servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder + newDownloadButton: New download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: App title + savedTemplates: Saved templates + templatesEditor: Templates editor + templatesEditorNameLabel: Template name + templatesEditorContentLabel: Template content + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/pl.yaml b/frontend/src/assets/i18n/pl.yaml new file mode 100644 index 00000000..11b33f04 --- /dev/null +++ b/frontend/src/assets/i18n/pl.yaml @@ -0,0 +1,63 @@ +keys: + urlInput: Adres URL YouTube lub innej obsługiwanej usługi + statusTitle: Status + startButton: Początek + statusReady: Gotowy + abortAllButton: Anuluj wszystko + updateBinButton: Zaktualizuj plik binarny yt-dlp + darkThemeButton: Ciemny motyw + lightThemeButton: Światło motyw + settingsAnchor: Ustawienia + serverAddressTitle: Adres serwera + serverPortTitle: Port + extractAudioCheckbox: Wyodrębnij dźwięk + noMTimeCheckbox: Nie ustawiaj czasu modyfikacji pliku + bgReminder: Po zamknięciu tej strony pobieranie będzie kontynuowane w tle. + toastConnected: 'Połączony z ' + toastUpdated: Zaktualizowano plik binarny yt-dlp! + formatSelectionEnabler: Aktywuj wybór formatów wideo/audio + themeSelect: 'Motyw' + languageSelect: 'Język' + overridesAnchor: Przedefiniuj + pathOverrideOption: Aktywuj zastąpienie ścieżki źródłowej + filenameOverrideOption: Aktywuj zastępowanie nazwy pliku źródłowego + customFilename: Wprowadź nazwę pliku (pozostaw puste, aby użyć nazwy domyślnej) + customPath: Ustaw ścieżkę + customArgs: Uwzględnij konfigurowalne argumenty yt-dlp (wielka moc = wielka odpowiedzialność) + customArgsInput: Niestandardowe argumenty yt-dlp + rpcConnErr: Wystąpił błąd podczas łączenia z serwerem RPC + splashText: Brak aktywnych pobrań + archiveTitle: Archiwum + clipboardAction: Adres URL zostanie skopiowany do schowka + playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) + servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder + newDownloadButton: New download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: App title + savedTemplates: Saved templates + templatesEditor: Templates editor + templatesEditorNameLabel: Template name + templatesEditorContentLabel: Template content + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/pt_BR.yaml b/frontend/src/assets/i18n/pt_BR.yaml new file mode 100644 index 00000000..7b6a196e --- /dev/null +++ b/frontend/src/assets/i18n/pt_BR.yaml @@ -0,0 +1,66 @@ +keys: + urlInput: URL do vídeo (uma por linha) + statusTitle: Status + statusReady: Pronto + selectFormatButton: Selecionar formato + startButton: Iniciar + abortAllButton: Cancelar tudo + updateBinButton: Atualizar binário yt-dlp + darkThemeButton: Tema escuro + lightThemeButton: Tema claro + settingsAnchor: Configurações + serverAddressTitle: Endereço do servidor + serverPortTitle: Porta + extractAudioCheckbox: Extrair áudio + noMTimeCheckbox: Não definir hora de modificação do arquivo + bgReminder: Uma vez que você feche esta página, o download continuará em segundo plano. + toastConnected: 'Conectado a ' + toastUpdated: Binário yt-dlp atualizado! + formatSelectionEnabler: Habilitar seleção de formatos de vídeo/aúdio + themeSelect: 'Tema' + languageSelect: 'Idioma' + overridesAnchor: Substituições + pathOverrideOption: Habilitar substituição do caminho de saída + filenameOverrideOption: Habilitar substituição do nome do arquivo de saída + customFilename: Nome de arquivo personalizado (deixe em branco para usar o padrão) + customPath: Caminho personalizado + customArgs: Habilitar argumentos personalizados do yt-dlp (grandes poderes = grandes responsabilidades) + customArgsInput: Argumentos personalizados do yt-dlp + rpcConnErr: Erro ao conectar ao servidor RPC + splashText: Nenhum download ativo + archiveTitle: Arquivo + clipboardAction: URL copiada para a área de transferência + playlistCheckbox: Baixar playlist (isso pode levar algum tempo, depois de enviar você pode fechar esta janela) + restartAppMessage: Necessário recarregar a página para que a mudança tenha efeito + servedFromReverseProxyCheckbox: Está atrás de um proxy reverso + urlBase: Base da URL, para suporte de proxy reverso (subdiretório), padrão vazio + newDownloadButton: Novo download + homeButtonLabel: Início + archiveButtonLabel: Arquivo + settingsButtonLabel: Configurações + rpcAuthenticationLabel: Autenticação RPC + themeTogglerLabel: Alternador de tema + loadingLabel: Carregando... + appTitle: Título do aplicativo + savedTemplates: Modelos salvos + templatesEditor: Editor de modelos + templatesEditorNameLabel: Nome do modelo + templatesEditorContentLabel: Conteúdo do modelo + logsTitle: 'Logs' + awaitingLogs: 'Aguardando logs...' + bulkDownload: 'Baixar arquivos em um arquivo zip' + rpcPollingTimeTitle: Tempo de polling RPC + rpcPollingTimeDescription: Um intervalo menor resulta em maior uso de CPU (lado do servidor e do cliente) + templatesReloadInfo: Para registrar um novo modelo, pode ser necessário recarregar a página. + livestreamURLInput: URL da transmissão ao vivo + livestreamStatusWaiting: Aguardando/Aguarde o início + livestreamStatusDownloading: Baixando + livestreamStatusCompleted: Concluído + livestreamStatusErrored: Erro + livestreamStatusUnknown: Desconhecido + livestreamDownloadInfo: | + Isso monitorará uma transmissão ao vivo que ainda não começou. Cada processo será executado com --wait-for-video 10. + Se uma transmissão ao vivo já iniciada for fornecida, ela ainda será baixada, mas seu progresso não será rastreado. + Uma vez iniciada, a transmissão ao vivo será migrada para a página de downloads. + livestreamExperimentalWarning: Este recurso ainda é experimental. Algo pode quebrar! + accentSelect: 'Accent' \ No newline at end of file diff --git a/frontend/src/assets/i18n/ru.yaml b/frontend/src/assets/i18n/ru.yaml new file mode 100644 index 00000000..f2527e66 --- /dev/null +++ b/frontend/src/assets/i18n/ru.yaml @@ -0,0 +1,63 @@ +keys: + urlInput: URL-адрес YouTube или любого другого поддерживаемого сервиса + statusTitle: Статус + startButton: Начать + statusReady: Готово + abortAllButton: Прервать все + updateBinButton: Обновить бинарный файл yt-dlp + darkThemeButton: Темная тема + lightThemeButton: Светлая тема + settingsAnchor: Настройки + serverAddressTitle: Адрес сервера + serverPortTitle: Порт + extractAudioCheckbox: Извлечь аудио + noMTimeCheckbox: Не устанавливать время модификации файла + bgReminder: Как только вы закроете эту страницу, загрузка продолжится в фоновом режиме. + toastConnected: 'Подключен к ' + toastUpdated: Бинарный файл yt-dlp обновлен! + formatSelectionEnabler: Активировать выбор видео/аудио форматов + themeSelect: 'Тема' + languageSelect: 'Язык' + overridesAnchor: Переопределить + pathOverrideOption: Активировать переопределение выходного пути + filenameOverrideOption: Активировать переопределение имени выходного файла + customFilename: Задать имя файла (оставьте пустым, чтобы использовать значение по умолчанию) + customPath: Задать путь + customArgs: Включить настраиваемые аргументы yt-dlp (большая сила = большая ответственность) + customArgsInput: Пользовательские аргументы yt-dlp + rpcConnErr: Ошибка при подключении к серверу RPC + splashText: Нет активных загрузок + archiveTitle: Архив + clipboardAction: URL скопирован в буфер обмена + playlistCheckbox: Скачать плейлист. Это займет время, после отправки вы сможете закрыть окно + servedFromReverseProxyCheckbox: Находится за обратным прокси + newDownloadButton: Новая загрузка + homeButtonLabel: Home + archiveButtonLabel: Архив + settingsButtonLabel: Настройки + rpcAuthenticationLabel: RPC-аутентификация + themeTogglerLabel: Переключить тему + loadingLabel: Загрузка... + appTitle: Название приложения + savedTemplates: Сохраненные шаблоны + templatesEditor: Редактор шаблонов + templatesEditorNameLabel: Имя шаблона + templatesEditorContentLabel: Содержание шаблона + logsTitle: 'Логи' + awaitingLogs: 'Ожидание логов...' + bulkDownload: 'Скачать файлы в zip архиве' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/sv.yaml b/frontend/src/assets/i18n/sv.yaml new file mode 100644 index 00000000..80bf90a2 --- /dev/null +++ b/frontend/src/assets/i18n/sv.yaml @@ -0,0 +1,66 @@ +keys: + urlInput: Videolänk (en per rad) + statusTitle: Status + statusReady: Redo + selectFormatButton: Välj format + startButton: Start + abortAllButton: Avbryt alla + updateBinButton: Uppdatera yt-dlp + darkThemeButton: Mörkt tema + lightThemeButton: Ljust tema + settingsAnchor: Inställningar + serverAddressTitle: Serveraddress + serverPortTitle: Port + extractAudioCheckbox: Extrahera ljud + noMTimeCheckbox: Lägg inte till info om när filen senast modifierades + bgReminder: När du stänger denna sida så kommer nedladdningen att fortsätta i bakgrunden. + toastConnected: 'Ansluten till ' + toastUpdated: Uppdaterade yt-dlp! + formatSelectionEnabler: Tillåt val av ljud- och bildformat + themeSelect: 'Tema' + languageSelect: 'Språk' + overridesAnchor: Överskrivningar + pathOverrideOption: Tillåt överskrivning av filsökvägen + filenameOverrideOption: Tillåt överskrivning av filnamn + customFilename: Eget filnamn (lämna blankt för standardnamn) + customPath: Egen filsökväg + customArgs: Tillåt egna yt-dlp-argument (frihet under ansvar!) + customArgsInput: Egna yt-dlp-argument + rpcConnErr: Ett fel inträffade vid anslutning till RPC-server + splashText: Inga pågående nedladdningar + archiveTitle: Arkiv + clipboardAction: Kopierade länken + playlistCheckbox: Ladda ner spellista (detta kommer ta did, efter start så kan du stänga detta fönster) + restartAppMessage: En sidomladdning behövs innan förändringen får effekt + servedFromReverseProxyCheckbox: Servern befinner sig bakom en omvänd proxy + urlBase: "URL-bas, måste anges när en omvänd proxy används. Standardinställning: lämna blank" + newDownloadButton: Ny nedladdning + homeButtonLabel: Hem + archiveButtonLabel: Arkiv + settingsButtonLabel: Inställningar + rpcAuthenticationLabel: RPC-Autentisering + themeTogglerLabel: Tema-knapp + loadingLabel: Laddar... + appTitle: Apptitel + savedTemplates: Sparade mallar + templatesEditor: Mallredigerare + templatesEditorNameLabel: Namn + templatesEditorContentLabel: Innehåll + logsTitle: 'Loggar' + awaitingLogs: 'Väntar på loggar...' + bulkDownload: 'Ladda ner filer i ett zip-arkiv' + rpcPollingTimeTitle: Frekvens av RPC-uppdateringar + rpcPollingTimeDescription: En högre frekvens kräver mer CPU-resurser för både server och klient + templatesReloadInfo: För att registrera en ny mall så kan en sidomladdning krävas. + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' \ No newline at end of file diff --git a/frontend/src/assets/i18n/uk.yaml b/frontend/src/assets/i18n/uk.yaml new file mode 100644 index 00000000..b2751e13 --- /dev/null +++ b/frontend/src/assets/i18n/uk.yaml @@ -0,0 +1,63 @@ +keys: + urlInput: URL-адреса YouTube або будь-якого іншого підтримуваного сервісу + statusTitle: Статус + startButton: Почати + statusReady: Готово + abortAllButton: Перервати все + updateBinButton: Оновити бінарний файл yt-dlp + darkThemeButton: Темна тема + lightThemeButton: Світла тема + settingsAnchor: Налаштування + serverAddressTitle: Адреса сервера + serverPortTitle: Порт + extractAudioCheckbox: Витягти аудіо + noMTimeCheckbox: Не встановлювати час модифікації файлу + bgReminder: Як тільки ви закриєте цю сторінку, завантаження продовжиться у фоновому режимі. + toastConnected: 'Підключений до ' + toastUpdated: Бінарний файл yt-dlp оновлено! + formatSelectionEnabler: Активувати вибір відео/аудіо форматів + themeSelect: 'Тема' + languageSelect: 'Мова' + overridesAnchor: Перевизначити + pathOverrideOption: Активувати перевизначення вихідного шляху + filenameOverrideOption: Активувати перевизначення імені вихідного файлу + customFilename: Введіть ім'я файлу (залишіть порожнім, щоб використовувати значення за замовчуванням) + customPath: Задати шлях + customArgs: Включити аргументи, що настроюються yt-dlp (велика сила = велика відповідальність) + customArgsInput: Користувальницькі аргументи yt-dlp + rpcConnErr: Помилка при підключенні до сервера RPC + splashText: Немає активних завантажень + archiveTitle: Архів + clipboardAction: URL скопійовано в буфер обміну + playlistCheckbox: Download playlist (it will take time, after submitting you may even close this window) + servedFromReverseProxyCheckbox: Is behind a reverse proxy subfolder + newDownloadButton: New download + homeButtonLabel: Home + archiveButtonLabel: Archive + settingsButtonLabel: Settings + rpcAuthenticationLabel: RPC authentication + themeTogglerLabel: Theme toggler + loadingLabel: Loading... + appTitle: App title + savedTemplates: Saved templates + templatesEditor: Templates editor + templatesEditorNameLabel: Template name + templatesEditorContentLabel: Template content + logsTitle: 'Logs' + awaitingLogs: 'Awaiting logs...' + bulkDownload: 'Download files in a zip archive' + livestreamURLInput: Livestream URL + livestreamStatusWaiting: Waiting/Wait start + livestreamStatusDownloading: Downloading + livestreamStatusCompleted: Completed + livestreamStatusErrored: Errored + livestreamStatusUnknown: Unknown + livestreamDownloadInfo: | + This will monitor yet to start livestream. Each process will be executed with --wait-for-video 10. + If an already started livestream is provided it will be still downloaded but its progress will not be tracked. + Once started the livestream will be migrated to the downloads page. + livestreamExperimentalWarning: This feature is still experimental. Something might break! + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/assets/i18n/zh_CN.yaml b/frontend/src/assets/i18n/zh_CN.yaml new file mode 100644 index 00000000..681c0511 --- /dev/null +++ b/frontend/src/assets/i18n/zh_CN.yaml @@ -0,0 +1,65 @@ +keys: + urlInput: 视频 URL + statusTitle: 状态 + statusReady: 就绪 + selectFormatButton: 选择格式 + startButton: 开始 + abortAllButton: 全部中止 + updateBinButton: 更新 yt-dlp 可执行文件 + darkThemeButton: 黑暗主题 + lightThemeButton: 明亮主题 + settingsAnchor: 设置 + serverAddressTitle: 服务器地址 + serverPortTitle: 端口 + extractAudioCheckbox: 提取音频 + noMTimeCheckbox: 不设置文件修改时间 + bgReminder: 关闭页面后,下载会继续在后台运行。 + toastConnected: '已连接到 ' + toastUpdated: 已更新 yt-dlp 可执行文件! + formatSelectionEnabler: 启用视频/音频格式选择 + themeSelect: '主题' + languageSelect: '语言' + overridesAnchor: 覆盖 + pathOverrideOption: 启用输出路径覆盖 + filenameOverrideOption: 启用输出文件名覆盖 + customFilename: 自定义文件名(留空使用默认值) + customPath: 自定义路径 + customArgs: 启用自定义 yt-dlp 参数(能力越大 = 责任越大) + customArgsInput: 自定义 yt-dlp 参数 + rpcConnErr: 连接 RPC 服务器发生错误 + splashText: 没有正在进行的下载 + archiveTitle: 归档 + clipboardAction: 复制 URL 到剪贴板 + playlistCheckbox: 下载播放列表(可能需要一段时间,提交后可以关闭页面等待) + restartAppMessage: 需要刷新页面才能生效 + servedFromReverseProxyCheckbox: 处于反向代理的子目录后 + newDownloadButton: 新下载 + homeButtonLabel: 主页 + archiveButtonLabel: 归档 + settingsButtonLabel: 设置 + rpcAuthenticationLabel: RPC 身份验证 + themeTogglerLabel: 主题切换 + loadingLabel: 正在加载… + appTitle: App 标题 + savedTemplates: 保存模板 + templatesEditor: 模板编辑器 + templatesEditorNameLabel: 模板名称 + templatesEditorContentLabel: 模板内容 + logsTitle: '日志' + awaitingLogs: '正在等待日志…' + bulkDownload: '下载 zip 压缩包中的文件' + livestreamURLInput: 直播 URL + livestreamStatusWaiting: 等待直播开始 + livestreamStatusDownloading: 下载中 + livestreamStatusCompleted: 已完成 + livestreamStatusErrored: 发生错误 + livestreamStatusUnknown: 未知 + livestreamDownloadInfo: | + 本功能将会监控即将开始的直播流,每个进程都会传入参数:--wait-for-video 10 (重试间隔10秒) + 如果直播已经开始,那么依然可以下载,但是不会记录下载进度。 + 直播开始后,将会转移到下载页面 + livestreamExperimentalWarning: 实验性功能,可能存在未知Bug,请谨慎使用 + accentSelect: 'Accent' + urlBase: URL base, for reverse proxy support (subdir), defaults to empty + rpcPollingTimeTitle: RPC polling time + rpcPollingTimeDescription: A lower interval results in higher CPU usage (server and client side) \ No newline at end of file diff --git a/frontend/src/atoms/i18n.ts b/frontend/src/atoms/i18n.ts deleted file mode 100644 index c9e0299b..00000000 --- a/frontend/src/atoms/i18n.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { atom } from 'jotai' -import I18nBuilder from '../lib/intl' -import { languageState } from './settings' - -export const i18nBuilderState = atom((get) => new I18nBuilder(get(languageState))) diff --git a/frontend/src/hooks/useI18n.ts b/frontend/src/hooks/useI18n.ts index d98d187b..82872064 100644 --- a/frontend/src/hooks/useI18n.ts +++ b/frontend/src/hooks/useI18n.ts @@ -1,8 +1,7 @@ -import { useAtomValue } from 'jotai' -import { i18nBuilderState } from '../atoms/i18n' +import Translator from '../lib/i18n' export const useI18n = () => { - const instance = useAtomValue(i18nBuilderState) + const instance = Translator.instance return { i18n: instance, diff --git a/frontend/src/lib/i18n.ts b/frontend/src/lib/i18n.ts new file mode 100644 index 00000000..e35af34a --- /dev/null +++ b/frontend/src/lib/i18n.ts @@ -0,0 +1,53 @@ +//@ts-ignore +import i18n from '../assets/i18n.yaml' +//@ts-ignore +import fallback from '../assets/i18n/en_US.yaml' + +export default class Translator { + static #instance: Translator + + private language: string + private current: string[] = [] + + constructor() { + this.language = localStorage.getItem('language')?.replaceAll('"', '') ?? 'english' + this.setLanguage(this.language) + } + + getLanguage(): string { + return this.language + } + + async setLanguage(language: string): Promise { + this.language = language + + let isoCodeFile: string = i18n.languages[language] + + // extension needs to be in source code to help vite bundle all yaml files + if (isoCodeFile.endsWith('.yaml')) { + isoCodeFile = isoCodeFile.replaceAll('.yaml', '') + } + + if (isoCodeFile) { + const { default: translations } = await import(`../assets/i18n/${isoCodeFile}.yaml`) + + this.current = translations.keys + } + } + + t(key: string): string { + if (this.current) { + //@ts-ignore + return this.current[key] ?? fallback.keys[key] + } + return 'caption not defined' + } + + public static get instance(): Translator { + if (!Translator.#instance) { + Translator.#instance = new Translator() + } + + return Translator.#instance + } +} diff --git a/frontend/src/lib/intl.ts b/frontend/src/lib/intl.ts deleted file mode 100644 index 0190b120..00000000 --- a/frontend/src/lib/intl.ts +++ /dev/null @@ -1,28 +0,0 @@ -// @ts-nocheck -import i18n from "../assets/i18n.yaml" - -export default class I18nBuilder { - private language: string - private textMap = i18n.languages - private current: string[] - - constructor(language: string) { - this.setLanguage(language) - } - - getLanguage(): string { - return this.language - } - - setLanguage(language: string): void { - this.language = language - this.current = this.textMap[this.language] - } - - t(key: string): string { - if (this.current) { - return this.current[key] ?? 'caption not defined' - } - return 'caption not defined' - } -} diff --git a/frontend/src/views/Settings.tsx b/frontend/src/views/Settings.tsx index ed49ed96..0f56c146 100644 --- a/frontend/src/views/Settings.tsx +++ b/frontend/src/views/Settings.tsx @@ -18,7 +18,7 @@ import { capitalize } from '@mui/material' import { useAtom } from 'jotai' -import { Suspense, useEffect, useMemo, useState } from 'react' +import { Suspense, useCallback, useEffect, useMemo, useState } from 'react' import { Subject, debounceTime, @@ -50,6 +50,7 @@ import CookiesTextField from '../components/CookiesTextField' import UpdateBinaryButton from '../components/UpdateBinaryButton' import { useToast } from '../hooks/toast' import { useI18n } from '../hooks/useI18n' +import Translator from '../lib/i18n' import { validateDomain, validateIP } from '../utils' // NEED ABSOLUTELY TO BE SPLIT IN MULTIPLE COMPONENTS @@ -82,6 +83,9 @@ export default function Settings() { const serverAddr$ = useMemo(() => new Subject(), []) const serverPort$ = useMemo(() => new Subject(), []) + const [, updateState] = useState({}) + const forceUpdate = useCallback(() => updateState({}), []) + useEffect(() => { const sub = baseURL$ .pipe(debounceTime(500)) @@ -133,6 +137,11 @@ export default function Settings() { */ const handleLanguageChange = (event: SelectChangeEvent) => { setLanguage(event.target.value as Language) + + Translator.instance.setLanguage(event.target.value) + setTimeout(() => { + forceUpdate() + }, 100) } /**