diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cef46abc..05b13277 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ env: jobs: quality: - runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04' || fromJSON('["self-hosted","Linux","X64","arko","typetype"]') }} + runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04' || fromJSON('["self-hosted","Linux","X64","r730","typetype"]') }} steps: - uses: actions/checkout@v7.0.1 @@ -70,7 +70,7 @@ jobs: build: needs: quality - runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04' || fromJSON('["self-hosted","Linux","X64","arko","typetype"]') }} + runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04' || fromJSON('["self-hosted","Linux","X64","r730","typetype"]') }} steps: - uses: actions/checkout@v7.0.1 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index f15f1f21..ec7019c5 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -11,7 +11,7 @@ env: jobs: coverage: - runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04' || fromJSON('["self-hosted","Linux","X64","arko","typetype"]') }} + runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04' || fromJSON('["self-hosted","Linux","X64","r730","typetype"]') }} steps: - uses: actions/checkout@v7.0.1 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9f15fa93..e8aa031c 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -19,7 +19,7 @@ jobs: prepare: needs: verify - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] permissions: contents: read outputs: @@ -70,7 +70,7 @@ jobs: build-platform: needs: prepare - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] timeout-minutes: 20 permissions: contents: read @@ -138,7 +138,7 @@ jobs: publish: needs: [prepare, build-platform] - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] timeout-minutes: 10 permissions: contents: read @@ -194,7 +194,7 @@ jobs: notify-orchestrator: needs: [prepare, publish] - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] permissions: contents: read env: diff --git a/.github/workflows/localization.yml b/.github/workflows/localization.yml index a17b3338..bb064ba0 100644 --- a/.github/workflows/localization.yml +++ b/.github/workflows/localization.yml @@ -12,7 +12,7 @@ env: jobs: report: - runs-on: ubuntu-24.04 + runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-24.04' || fromJSON('["self-hosted","Linux","X64","r730","typetype"]') }} steps: - uses: actions/checkout@v7.0.1 diff --git a/apps/web/messages/de.json b/apps/web/messages/de.json new file mode 100644 index 00000000..edb21ab2 --- /dev/null +++ b/apps/web/messages/de.json @@ -0,0 +1,1300 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "admin_access_description": "Lege fest, wer beitreten darf und welche Inhalte verfügbar sind.", + "admin_access_label": "Zugriff", + "admin_access_mode_description": "Die Jugendschutzfunktion beschränkt das Abrufen und Entdecken von Inhalten auf zugelassene Kanäle.", + "admin_access_mode_label": "Zugriff auf Inhalte", + "admin_allow_guest_description": "Erlaube die Nutzung ohne persönliches Konto.", + "admin_allow_guest_label": "Gastmodus zulassen", + "admin_allow_registration_description": "Ermögliche neuen Nutzern, ein Konto zu erstellen.", + "admin_allow_registration_label": "Registrierung zulassen", + "admin_authentication_description": "Verwalte Kontozugänge und YouTube Remote-Sitzungen.", + "admin_authentication_label": "Authentifizierung", + "admin_console_subtitle": "Verwalte diese Instanz und inspiziere deren Benutzer, Zugriffsrichtlinien, Sitzungen, Feeds und Berichte.", + "admin_console_title": "Verwaltungskonsole", + "admin_banner_url_label": "Banner URL", + "admin_identity_description": "Wird auf Anmeldeseiten und in dieser Instanz angezeigt.", + "admin_identity_label": "Identität", + "admin_instance_description": "Branding, Zugriff, Authentifizierung und Plattformverhalten.", + "admin_instance_label": "Instanz", + "admin_instance_name_label": "Instanzname", + "admin_local_login_description": "Erlaube Email- und Passwort-Authentifizierung.", + "admin_local_login_label": "Lokale Anmeldung", + "admin_logo_url_label": "Logo URL", + "admin_min_android_description": "Leer lassen, wenn kein Minimum erforderlich ist.", + "admin_min_android_label": "Mindestversion von Android", + "admin_oidc_description": "Leite Benutzer direkt zum konfigurierten Identitätsanbieter weiter.", + "admin_oidc_label": "Weiterleitung zu OIDC", + "admin_parental_description": "Wähle die Kanäle aus, die bei aktiviertem kontrolliertem Zugriff verfügbar sind.", + "admin_parental_label": "Jugendschutzfunktion", + "admin_reports_description": "Untersuche Berichte mithilfe von Abfrage- und Wiedergabediagnosen.", + "admin_reports_label": "Berichte", + "admin_rss_description": "Konfiguriere private Feeds, Limits und den Kontozugriff.", + "admin_save_changes": "Änderungen speichern", + "admin_saving": "Speichern", + "admin_sessions_description": "Überprüfe verbundene Geräte, Aktivitäten und die aktuelle Wiedergabe.", + "admin_sessions_label": "Sitzung", + "admin_tagline_label": "Slogan", + "admin_track_sessions_description": "Ermögliche den Überblick auf verbundene Geräte und Wiedergabeaktivitäten für Administratoren.", + "admin_track_sessions_label": "Verfolge aktive Sitzungen", + "admin_unrestricted_label": "Uneingeschränkt", + "admin_unsaved_changes": "Ungesicherte Änderungen", + "admin_users_description": "Verwalte Rollen, Sperrungen, Identitäten und die Kontowiederherstellung.", + "admin_users_label": "Nutzer", + "admin_verified_email_description": "Erfordere vor der Kontonutzung eine Verifizierung.", + "admin_verified_email_label": "Verifizierte Email nötig", + "admin_youtube_login_description": "Erlaube die Browser-basierte YouTube-Session Einrichtung.", + "admin_youtube_login_label": "Remote YouTube-Anmeldung", + "admin_preview_tagline": "Deine private Videoplattform", + "language_english": "Englisch", + "language_french": "Französisch", + "nav_admin": "Admin", + "nav_close_sidebar": "Seitenleiste schließen", + "nav_data_transfer": "Datenübertragung", + "nav_history": "Verlauf", + "nav_home": "Startseite", + "nav_login": "Anmeldung", + "nav_more": "Mehr", + "nav_open_menu": "Menü öffnen", + "nav_playlists": "Wiedergabelisten", + "nav_primary": "Hauptnavigation", + "nav_privacy": "Datenschutz", + "nav_services": "Dienste", + "nav_settings": "Einstellungen", + "nav_shorts": "Shorts", + "nav_sign_out": "Abmelden", + "nav_subscriptions": "Abonnements", + "shell_built_by_community": "Erstellt von der TypeType Community", + "shell_search": "Suchen", + "shell_support": "Hilfe", + "shell_support_typetype": "Unterstütze TypeType", + "watch_audio_loading": "Lade Ton…", + "watch_audio_only": "Nur Ton", + "watch_autoplay": "Automatische Wiedergabe", + "watch_block_channel": "Kanal sperren", + "watch_block_video": "Video sperren", + "watch_channel_blocked": "Kanal gesperrt:", + "watch_channel_unblocked": "Kanal entsperrt", + "watch_comments": "Kommentare", + "watch_comments_disabled": "Kommentare sind für dieses Video deaktiviert.", + "watch_could_not_update_later": "Später ansehen konnte nicht aktualisiert werden", + "watch_download": "Herunterladen", + "watch_favorite": "Favorit", + "watch_favorited": "Zu Favoriten hinzugefügt", + "watch_hide_replies": "Antworten ausblenden", + "watch_likes": "Likes", + "watch_link_copied": "Link in Zwischenablage kopiert", + "watch_load_more_replies": "Mehr Antworten laden", + "watch_more": "Mehr", + "watch_pinned": "Gepinnt", + "watch_removed_favorites": "Von Favoriten entfernt", + "watch_removed_later": "Aus Später ansehen entfernt", + "watch_remove_later": "Aus Später ansehen entfernen", + "watch_replies": "Antworten", + "watch_report": "Melden", + "watch_save": "Speichern", + "watch_save_later": "Zu Später ansehen hinzufügen", + "watch_save_playlist": "Zu Wiedergabeliste hinzufügen", + "watch_saved_favorites": "Zu Favoriten hinzugefügt", + "watch_saved_later": "Zu Später ansehen hinzugefügt", + "watch_saving": "Speichern…", + "watch_share": "Teilen", + "watch_show_less": "Weniger anzeigen", + "watch_show_more": "Mehr anzeigen", + "watch_show_replies": "Antworten einblenden", + "watch_subscribe": "Abonnieren", + "watch_subscribed": "Abonniert", + "watch_subscribed_to": "Abonniert", + "watch_subscription_failed": "Aktualisierung des Abonnements fehlgeschlagen", + "watch_unsubscribed_from": "Abonnement beendet von", + "watch_unblock_channel": "Kanal entsperren", + "watch_unblock_video": "Video entsperren", + "watch_verified": "Verifiziert", + "watch_video_blocked": "Video gesperrt", + "watch_video_options": "Videooptionen", + "watch_video_unblocked": "Video entsperrt", + "player_format": "Format", + "player_disable_cinema_mode": "Kinomodus deaktivieren", + "player_enable_cinema_mode": "Kinomodus aktivieren", + "player_language": "Sprache", + "player_mute": "Stummschalten", + "player_next_video": "Nächstes Video", + "player_original": "Original", + "player_pause": "Pause", + "player_play": "Wiedergeben", + "player_previous_video": "Vorheriges Video", + "player_quality": "Qualität", + "player_seek_backward_10": "10 Sekunden zurückspulen", + "player_seek_forward_10": "10 Sekunden Vorspulen", + "player_unmute": "Stummschaltung aufheben", + "player_accessibility": "Barrierefreiheit", + "player_announcements": "Ankündigungen", + "player_audio": "Ton", + "player_auto": "Automatisch", + "player_boost": "Verstärkung", + "player_caption_styles": "Untertitelformate", + "player_chapters": "Kapitel", + "player_closed_captions_off": "Untertitel deaktivieren", + "player_closed_captions_on": "Untertitel aktivieren", + "player_continue": "Fortsetzen", + "player_default": "Standard", + "player_disabled": "Deaktiviert", + "player_enter_fullscreen": "Vollbildmodus aktivieren", + "player_enter_pip": "Bild-in-Bild aktivieren", + "player_exit_fullscreen": "Vollbildmodus deaktivieren", + "player_exit_pip": "Bild-in-Bild deaktivieren", + "player_fullscreen": "Vollbild", + "player_keyboard_animations": "Tastaturanimationen", + "player_loop": "Schleife", + "player_normal": "Normal", + "player_off": "Deaktiviert", + "player_playback": "Wiedergabe", + "player_replay": "Wiederholung", + "player_reset": "Zurücksetzen", + "player_seek": "Durchsuchen", + "player_seek_backward": "Zurückspulen", + "player_seek_forward": "Vorwärtsspulen", + "player_settings": "Einstellungen", + "player_skip_to_live": "Zur Live-Übertragung springen", + "player_speed": "Geschwindigkeit", + "player_track": "Titel", + "player_volume": "Lautstärke", + "player_next_video_fallback": "Nächstes Video", + "player_unavailable_video": "Video nicht verfügbar", + "settings_about_description": "Versionen, Projektlinks und Informationen von Drittanbietern.", + "settings_about_label": "Über", + "settings_blocked_description": "Überprüfe Kanäle, Videos und Suchbegriffe, die du ausgeblendet hast.", + "settings_blocked_label": "Gesperrter Inhalt", + "settings_data_description": "Importiere, exportiere und stelle Accountdaten wieder her.", + "settings_data_label": "Daten", + "settings_interface_description": "Entscheide was TypeType öffnet und hervorhebt.", + "settings_interface_label": "Benutzeroberfläche", + "settings_language_description": "Benutzeroberflächen-, Ton- und Untertitel- Einstellungen.", + "settings_language_label": "Sprachen", + "settings_language_section": "Sprache", + "settings_playback_description": "Standardeinstellungen für Qualität, Geschwindigkeit, automatische Wiedergabe und „Nur Ton“.", + "settings_playback_label": "Wiedergabe", + "settings_privacy_description": "Wiedergabeverlauf, Sitzungen und Datenschutz des Kontos verwalten.", + "settings_privacy_label": "Datenschutz", + "settings_rss_description": "Private Feeds für dieses Konto verwalten.", + "settings_services_description": "Wähle den Anbieter welcher standardmäßig genutzt wird.", + "settings_services_label": "Dienste", + "settings_subtitle": "Passe Wiedergabe, Inhalte, Datenschutz und Kontodaten an. Die Änderungen gelten für dein gesamtes TypeType-Konto.", + "settings_subtitle_default_description": "Aktiviere Untertitel standardmäßig", + "settings_subtitle_default_label": "Untertitel", + "settings_subtitle_language_description": "Bevorzugte Untertitelspur", + "settings_subtitle_language_label": "Untertitelsprache", + "settings_title": "Einstellungen", + "settings_audio_language_description": "Bevorzugte Audiospur", + "settings_audio_language_ignored": "Wird ignoriert, wenn die Originalsprache erzwungen wird", + "settings_audio_language_label": "Tonsprache", + "settings_original_audio_description": "Verwende immer die ursprüngliche Tonspur", + "settings_original_audio_label": "Bevorzuge Originalsprache", + "settings_ui_language_description": "Sprache, welche von TypeType auf diesem Gerät verwendet wird.", + "settings_ui_language_label": "Benutzeroberflächensprache", + "settings_video_description": "Sichtbarkeit von Inhalten und Verhalten von SponsorBlock.", + "settings_video_label": "Video", + "profile_title": "Profil", + "profile_subtitle": "Lege fest, wie dein Konto angezeigt wird und wie du dich anmeldest.", + "profile_public_title": "Öffentliches Profil", + "profile_public_description": "Wähle den Namen und die Kurzbiografie, die bei deiner Aktivität angezeigt wird.", + "profile_no_public_username": "Kein öffentlicher Benutzername", + "profile_username_label": "Öffentlicher Benutzername", + "profile_username_help": "3–32 Zeichen: Buchstaben, Zahlen, Punkt, Unterstrich oder Bindestrich.", + "profile_bio_label": "Kurzbiografie", + "profile_bio_placeholder": "Teile Nutzern mit, wer du bist", + "profile_bio_help": "Bis zu 280 Zeichen", + "profile_save": "Profil speichern", + "profile_saved": "Profil aktualisiert", + "profile_username_taken": "Dieser Benutzername wird bereits verwendet.", + "profile_username_invalid_format": "Verwende ausschließlich Buchstaben, Zahlen, Punkte, Unterstriche oder Bindestriche.", + "profile_username_invalid_length": "Benutzername muss zwischen 3 und 32 Zeichen lang sein.", + "profile_username_too_short": "Benutzername muss mindestens 3 Zeichen lang sein.", + "profile_username_too_long": "Benutzername darf maximal 32 Zeichen lang sein.", + "profile_bio_too_long": "Die Kurzbiografie darf maximal 280 Zeichen lang sein.", + "profile_update_failed": "Profil konnte nicht aktualisiert werden.", + "account_identity_title": "Kontoidentität", + "account_identity_description": "Wird für die Anmeldung und die Anzeige des Kontos verwendet.", + "account_identity_managed": "Verwaltet von deinem Identitätsanbieter.", + "account_display_name": "Anzeigename", + "account_email": "Email Adresse", + "account_current_password": "Aktuelles Passwort", + "account_save": "Konto speichern", + "account_saved": "Konto aktualisiert", + "account_update_failed": "Aktualisierung fehlgeschlagen", + "account_password_title": "Passwort", + "account_password_description": "Setzte das Passwort für dein Konto zurück.", + "account_password_reset": "Passwort zurücksetzen", + "avatar_title": "Profilbild", + "avatar_custom_title": "Benutzerdefiniertes Bild", + "avatar_custom_description": "PNG, JPEG, WebP oder animiertes GIF bis 10 MB.", + "avatar_upload": "Hochladen", + "avatar_invalid_type": "Verwende ein PNG, JPEG, WebP oder GIF", + "avatar_too_large": "Profilbild darf maximal 10 MB groß sein", + "avatar_updated": "Profilbild aktualisiert", + "avatar_upload_failed": "Profilbild kann nicht hochgeladen werden", + "avatar_update_failed": "Profilbild kann nicht aktualisiert werden", + "avatar_clear_failed": "Profilbild kann nicht gelöscht werden", + "avatar_emoji_source": "Emojis von", + "avatar_search": "Emojis suchen", + "avatar_scroll_left": "Emoji-Liste nach links scrollen", + "avatar_scroll_right": "Emoji-Liste nach rechts scrollen", + "avatar_clear": "Leeren", + "not_found_title": "Diese Seite liegt außerhalb des Bildausschnitts", + "not_found_description": "Möglicherweise ist die Adresse falsch, oder die Seite wurde verschoben.", + "not_found_back": "Zurück", + "not_found_home": "Startseite", + "data_portability_title": "Datenübertragbarkeit", + "data_portability_subtitle": "Übertrage die Kontodaten zu TypeType oder erstelle eine Sicherungskopie für eine andere unterstützte App.", + "data_portability_import": "Importieren", + "data_portability_export": "Exportieren", + "data_portability_loading_formats": "Lade unterstützte Formate…", + "portability_export_download_started": "Export-Download wurde gestartet", + "portability_export_ready": "Export bereit", + "portability_no_export_format": "Kein Export-Format verfügbar.", + "portability_export_title": "Daten exportieren", + "portability_generate_export": "Export erstellen", + "portability_export_description": "Wähle ein Ziel und erstelle eine Sicherungskopie.", + "portability_destination_format": "Ziel-Format", + "portability_export_partial_warning": "Dieses Ziel kann nicht jedes TypeType-Feld abbilden. Im fertigen Bericht werden alle Daten aufgeführt, die nicht beibehalten werden konnten.", + "portability_export_notes": "Export-Hinweise", + "portability_download_export": "Export herunterladen", + "portability_new_export": "Neuer Export", + "portability_download_report": "Bericht herunterladen", + "portability_start_another_export": "Starte einen neuen Export", + "portability_export_failed": "Export fehlgeschlagen", + "portability_import_completed": "Import fertiggestellt", + "portability_items": "Einträge", + "portability_no_import_format": "Kein Import-Format verfügbar.", + "portability_import_title": "Daten importieren", + "portability_import_description": "Vorschau anzeigen und auswählen, was wiederhergestellt werden soll.", + "portability_import_from": "Importieren von", + "portability_choose_or_drop": "Backup auswählen oder ablegen", + "portability_drop_original_prefix": "Original ablegen", + "portability_drop_original_suffix": "Datei. Es wird nichts importiert bis du die Vorschau überprüfst.", + "portability_duplicate_records": "Doppelte Daten gefunden", + "portability_different_file": "Andere Datei", + "portability_compatibility_notes": "Kompatibilitätshinweise", + "portability_duplicate_policy": "Wenn ein Eintrag bereits vorhanden ist", + "portability_skip": "Überspringen", + "portability_replace": "Ersetzen", + "portability_import_selected": "Ausgewählte importieren", + "portability_start_another_import": "Einen neuen Import starten", + "portability_choose_another_backup": "Eine andere Sicherungskopie auswählen", + "portability_import_failed": "Import fehlgeschlagen", + "portability_job_waiting": "Warte auf den Beginn", + "portability_job_analyzing": "Sicherungskopie analysieren", + "portability_job_ready": "Bereit zu importieren", + "portability_job_importing": "Daten werden importiert", + "portability_job_generating": "Export wird erstellt", + "portability_job_import_completed": "Import abgeschlossen", + "portability_job_export_ready": "Export bereit", + "portability_job_cancelled": "Vorgang abgebrochen", + "portability_job_failed": "Vorgang fehlgeschlagen", + "portability_operation_failed": "Portabilitätsvorgang fehlgeschlagen", + "portability_copy_reference": "Supportreferenz kopieren", + "portability_cancel": "Abbrechen", + "portability_job_label": "Aufgabe", + "portability_request_label": "Anfrage", + "portability_code_label": "Code", + "portability_status_partial": "Teilunterstützung", + "portability_status_supported": "Unterstützt", + "portability_status_not_supported": "Nicht unterstützt", + "portability_get_backup": "Erhalte dein", + "portability_backup_suffix": "Sicherungskopie", + "portability_guide_typetype_description": "Daten aus einer anderen TypeType-Instanz übertragen oder eine Sicherungskopie wiederherstellen.", + "portability_guide_typetype_step_one": "Öffne die Einstellungen und anschließend Datenübertragbarkeit auf der ursprünglichen Instanz.", + "portability_guide_typetype_step_two": "Wähle TypeType als Ziel aus und lade den Export herunter.", + "portability_guide_typetype_step_three": "Lege unten die heruntergeladene Sicherungskopie unverändert ab.", + "portability_guide_takeout_description": "Google Takeout kann Abonnements, Wiedergabeverlauf, Wiedergabelisten, Videos in Später ansehen und mit Gefällt mir markierte Videos bereitstellen.", + "portability_guide_takeout_step_one": "Öffne Google Takeout mit YouTube und Meine Aktivitäten ausgewählt.", + "portability_guide_takeout_step_two": "Erstelle einen ZIP-Export und lade diesen von Google herunter.", + "portability_guide_takeout_step_three": "Lege die originale ZIP unten ab. Wenn Google mehrere ZIPs erstellt hat, importiere sie einzeln.", + "portability_guide_takeout_action": "Öffne Google Takeout", + "portability_guide_opml_description": "Übertrage Abonnements aus beliebigen Apps oder Diensten, die eine OPML-Datei exportieren können.", + "portability_guide_opml_step_one": "Suche in der ursprünglichen App den Abonnement-Export oder die Aktion zum erstellen einer Sicherungskopie.", + "portability_guide_opml_step_two": "Wähle OPML, wenn die App nach einem Export-Format fragt.", + "portability_guide_opml_step_three": "Lade die OPML-Datei herunter und lege sie unten ab.", + "portability_guide_generic_prefix": "Übertrage deine vorhandenen", + "portability_guide_generic_suffix": "Daten zu TypeType.", + "portability_guide_generic_open_prefix": "Öffnen", + "portability_guide_generic_open_suffix": "und suche dessen Aktion zum Exportieren oder zum erstellen einer Sicherungskopie.", + "portability_guide_generic_download": "Lade die originale Sicherungskopie herunter, ohne sie zu verändern oder zu extrahieren.", + "portability_guide_generic_drop": "Lege die Datei unten ab. TypeType erstellt eine Vorschau der Daten bevor etwas importiert wird.", + "portability_stale_job_toast": "Der vorherige Vorgang ist nicht mehr verfügbar. Starte von vorne.", + "portability_category_subscriptions": "Abonnements", + "portability_category_subscriptions_detail": "Kanäle, denen du folgst", + "portability_category_subscription_groups": "Abonnementgruppen", + "portability_category_subscription_groups_detail": "Benannte Kanalgruppen", + "portability_category_history": "Wiedergabeverlauf", + "portability_category_history_detail": "Zuletzt angesehene Videos", + "portability_category_playlists": "Wiedergabelisten", + "portability_category_playlists_detail": "Lokale Wiedergabelisten und deren Videos", + "portability_category_watch_later": "Später ansehen", + "portability_category_watch_later_detail": "Für später gespeicherte Videos", + "portability_category_favorites": "Favoriten", + "portability_category_favorites_detail": "Favorisierte Videos", + "portability_category_progress": "Wiedergabefortschritt", + "portability_category_progress_detail": "Gespeicherte Videopositionen", + "portability_category_search_history": "Suchverlauf", + "portability_category_search_history_detail": "Zuletzt gesucht", + "portability_category_saved_playlists": "Gesicherte Wiedergabelisten", + "portability_category_saved_playlists_detail": "Externe Wiedergabelisten, denen du folgst", + "portability_category_settings": "Einstellungen", + "portability_category_settings_detail": "Übertragbare Einstellungen", + "portability_category_content_filters": "Inhaltsfilter", + "portability_category_content_filters_detail": "Regeln für gesperrte Inhalte", + "groups_preview_data_transfer": "Datenübertragung", + "groups_preview_title": "Abonnementgruppen", + "groups_preview_import": "Importieren", + "groups_preview_groups": "Gruppen", + "groups_preview_done": "Fertig", + "groups_preview_import_complete": "Import abgeschlossen", + "groups_preview_import_summary": "{channels} Abonnements, {playlists} Wiedergabelisten, {history} Wiedergabeverlaufeinträge und {groups} Gruppen wurden wiederhergestellt.", + "groups_preview_channels": "Kanäle", + "groups_preview_groups_label": "Gruppen", + "groups_preview_ungrouped": "Nicht gruppiert", + "groups_preview_coverage": "Umfang", + "groups_preview_organize": "Gruppen organisieren", + "groups_preview_view_subscriptions": "Abonnements ansehen", + "groups_preview_restored_groups": "Wiederhergestellte Gruppen", + "groups_preview_channel_count": "{count} Kanal", + "groups_preview_channel_count_plural": "{count} Kanäle", + "groups_preview_group_name": "Gruppenname", + "groups_preview_all_channels": "Alle Kanäle ({count})", + "groups_preview_search": "Durchsuche importierte Kanäle", + "groups_preview_select_visible": "Sichtbare auswählen", + "groups_preview_clear_page": "Seite leeren", + "groups_preview_finish": "Abgeschlossen", + "groups_preview_no_group": "Keine Gruppe", + "groups_preview_no_match": "Kein Kanal entspricht dieser Ansicht", + "groups_preview_selected": "{count} ausgewählt", + "groups_preview_add_to_group": "Zu Gruppe hinzufügen", + "groups_preview_remove_from_group": "Aus Gruppe entfernen", + "groups_preview_clear": "Leeren", + "groups_preview_added": "{count} Kanäle zu {group} hinzugefügt", + "groups_preview_removed": "{count} Kanäle entfernt aus {group}", + "groups_preview_group_created": "{group} erstellt", + "groups_preview_group_removed": "{group} entfernt", + "groups_preview_organization_updated": "Organisation aktualisiert", + "groups_preview_coverage_line": "{grouped} von {total} Kanäle haben mindestens eine Gruppe ({coverage}%)", + "groups_preview_more": "+{count} mehr", + "groups_preview_open_subscriptions": "Abonnements öffnen", + "groups_preview_keep_organizing": "Weiter organisieren", + "groups_preview_mock": "Vortäuschen", + "groups_preview_reset": "Vorschau zurücksetzen", + "groups_preview_close_new_group": "Neue Gruppe schließen", + "groups_preview_create_group": "Eine Gruppe erstellen", + "groups_preview_select_channel": "Auswählen", + "groups_preview_remove_from_specific_group": "Aus {group} entfernen", + "admin_users_search": "Benutzer durchsuchen", + "admin_users_search_placeholder": "Name, Email oder ID suchen", + "admin_users_filter": "Status und Rolle", + "admin_users_filter_all": "Alle", + "admin_users_filter_admins": "Administratoren", + "admin_users_filter_moderators": "Moderatoren", + "admin_users_filter_users": "Benutzer", + "admin_users_filter_suspended": "Ausgeschlossen", + "admin_users_loading": "Lade Benutzer…", + "admin_users_load_error": "Laden der Benutzer derzeit nicht möglich.", + "admin_users_empty": "Kein Benutzer entspricht dieser Ansicht.", + "admin_users_column_user": "Benutzer", + "admin_users_column_role": "Rolle", + "admin_users_column_status": "Status", + "admin_users_column_joined": "Beigetreten", + "admin_users_column_actions": "Aktionen", + "admin_users_active": "Aktiv", + "admin_users_role_user": "Benutzer", + "admin_users_role_moderator": "Moderator", + "admin_users_role_admin": "Administrator", + "admin_users_manage": "Verwalten", + "admin_users_details": "Benutzerdaten", + "admin_users_details_description": "Verwalte Identitäten, Rollen und Zugriffsrechte", + "admin_users_close_details": "Benutzerdaten schließen", + "admin_users_close": "Schließen", + "admin_users_account_access": "Kontozugriff", + "admin_users_suspend": "Ausschließen", + "admin_users_unsuspend": "Ausschluss aufheben", + "admin_users_reset_token": "Token zurücksetzen", + "admin_users_previous_page": "Vorherige Seite", + "admin_users_next_page": "Nächste Seite", + "admin_users_page": "Seite", + "admin_users_of": "von", + "admin_users_display_name": "Anzeigename", + "admin_users_email": "Email", + "admin_users_email_address": "Email-Adresse", + "admin_users_save_identity": "Identität speichern", + "admin_users_identity_updated": "Benutzeridentität aktualisiert", + "admin_users_update_failed": "Aktualisierung fehlgeschlagen", + "admin_users_role_updated": "Rolle aktualisiert", + "admin_users_suspend_updated": "Kontozugriff aktualisiert", + "admin_users_reset_failed": "Rücksetz-Token konnte nicht generiert werden", + "admin_users_token_copied": "Token in Zwischenablage kopiert", + "admin_users_reset_title": "Passwort Rücksetz-Token", + "admin_users_reset_label": "Passwort Rücksetz-Token", + "admin_users_clipboard_unavailable": "Zugriff auf die Zwischenablage ist nicht möglich. Wähle den oben stehenden Token aus und kopiere ihn manuell.", + "admin_users_copy_token": "Token kopieren", + "login_title": "Einloggen", + "login_subtitle": "Gebe deine Anmeldedaten ein, um fortzufahren.", + "login_signed_in": "Angemeldet", + "login_invalid_credentials": "Ungültige Anmeldedaten.", + "login_or": "oder", + "login_identifier_placeholder": "Email oder Benutzername", + "login_password_placeholder": "Passwort", + "login_pending": "Anmelden…", + "login_no_method": "Keine Anmeldemethode verfügbar.", + "login_create_account": "Konto erstellen", + "login_reset_password": "Passwort zurücksetzen", + "login_oidc_redirecting": "Weiterleiten…", + "login_oidc_continue": "Fortsetzen mit", + "login_oidc_failed": "Anmeldung konnte nicht gestartet werden. Versuch es nochmal.", + "nav_sign_in": "Anmelden", + "nav_register": "Registrieren", + "nav_browse": "Durchsuchen", + "nav_account": "Konto", + "nav_guest": "Gast", + "nav_connected": "Verbunden", + "nav_loading": "Lädt", + "nav_signed_out": "Abgemeldet", + "ui_ranked_by_youtube": ", bewertet von YouTube.", + "ui_click_the_browser_area_before_typing": "Klicke auf das Browser-Feld, bevor du etwas eingibst.", + "ui_api_errors": "· API Fehler:", + "ui_accepted_entries": "Zugelassene Einträge", + "ui_add_blocked_keyword": "Gesperrtes Stichwort hinzufügen", + "ui_add_channel_for_this_user": "Kanal für diesen Nutzer hinzufügen", + "ui_add_global_channel": "Globalen Kanal hinzufügen", + "ui_add_global_playlist": "Globale Wiedergabeliste hinzufügen", + "ui_add_playlist_for_this_user": "Wiedergabeliste für diesen Nutzer hinzufügen", + "ui_advanced_display": "Erweiterte Anzeige", + "ui_after_connection_retry_the_video_and_streams_uses_your_youtube_sessio": "Nach dem Verbindungsaufbau versuche es erneut mit dem Video; /streams nutzt dabei deine YouTube-Sitzung.", + "ui_all_categories": "Alle Kategorien", + "ui_all_statuses": "Alle Status", + "ui_allowed_playlists": "Erlaubte Wiedergabelisten", + "ui_already_have_an_account_sign_in": "Du hast bereits ein Konto? Melde dich an", + "ui_applied_when_a_video_starts": "Wird angewendet, sobald ein Video abgespielt wird", + "ui_audio_only_playback": "„Nur-Ton“ Wiedergabe", + "ui_autoplay_countdown": "Countdown für automatische Wiedergabe", + "ui_back": "Zurück", + "ui_back_home": "Zurück zur Startseite", + "ui_back_to_all_videos": "Zurück zu allen Videos", + "ui_back_to_import_sources": "Zurück zu Quellen importieren", + "ui_back_to_login": "Zurück zur Anmeldung", + "ui_back_to_playlists": "Zurück zu Wiedergabelisten", + "ui_back_to_sign_in": "Zurück zur Anmeldung", + "ui_badge_temporarily_unavailable": "Abzeichen vorübergehend nicht verfügbar.", + "ui_blocked_channels": "Gesperrte Kanäle", + "ui_blocked_keywords": "Gesperrte Stichwörter", + "ui_blocked_videos": "Gesperrte Videos", + "ui_cancel_autoplay": "Automatische Wiedergabe abbrechen", + "ui_cancel_sign_in": "Anmeldung abbrechen", + "ui_captured_at": "Aufgenommen bei:", + "ui_category": "Kategorie", + "ui_channel": "Kanal", + "ui_channel_name_or_handle": "Kanalname oder @Benutzername", + "ui_channels": "Kanäle", + "ui_channels_available_when_allow_list_mode_is_enabled": "Verfügbare Kanäle, wenn der Whitelist-Modus aktiviert ist.", + "ui_choose_the_image_shown_for_youtube_videos": "Wähle das angezeigte Bild für YouTube-Videos aus.", + "ui_choose_the_title_shown_for_youtube_videos": "Wähle den angezeigten Titel für YouTube-Videos aus.", + "ui_choose_zip_format_any_size": "Wähle das ZIP-Format, jede Größe", + "ui_clear_all": "Alles leeren", + "ui_clear_filters": "Filter leeren", + "ui_clear_search_history_in_settings": "Leere den Suchverlauf in den Einstellungen.", + "ui_clear_search_history": "Suchverlauf leeren?", + "ui_clear_stored_watch_history_search_history_subscriptions_and_playback": "Lösche den gespeicherten Wiedergabeverlauf, Suchverlauf, die Abonnements und den Wiedergabefortschritt dieses Kontos.", + "ui_clear_watch_history_in_settings": "Leere den Wiedergabeverlauf in den Einstellungen.", + "ui_clear_watch_history": "Wiedergabeverlauf leeren?", + "ui_click_deselect_all_then_select_only_youtube_and_my_activity": "Klicke „Alles abwählen“ und wähle anschließend nur „YouTube“ und „Meine Aktivitäten“ aus", + "ui_close_download": "Downloads schließen", + "ui_close_filters": "Filter schließen", + "ui_close_picker": "Auswählen schließen", + "ui_collection": "Sammlung", + "ui_community_only": "Nur Community", + "ui_community_title": "Community Titel", + "ui_community_then_neutral_frame": "Community, dann neutraler Rahmen", + "ui_confidence": "Überzeugung", + "ui_connect_with_youtube": "Mit YouTube verbinden", + "ui_connect_youtube_inside_typetype": "Verbinde YouTube innerhalb von TypeType", + "ui_connect_youtube_on_typetype": "Verbinde YouTube auf TypeType", + "ui_content": "Verbinden", + "ui_content_controls": "Verbindungssteuerung", + "ui_continue": "Fortsetzen", + "ui_continue_watching": "Ansehen fortsetzen", + "ui_control_which_community_entries_are_used": "Verwalte, welche Communityinhalte verwendet werden.", + "ui_controls": "Steuerung", + "ui_cookies_and_playback_token_are_captured_server_side_only": "Cookies und Wiedergabetoken werden ausschließlich serverseitig erfasst.", + "ui_cooking_your_import": "Verarbeite deinen Import", + "ui_couldn_t_load_this_video": "Video konnte nicht geladen werden", + "ui_crash_logs": "Absturzprotokolle:", + "ui_create": "Erstellen", + "ui_create_export_and_wait_for_the_email": "Erstelle den Export und warte auf die Email", + "ui_create_github_issue": "GitHub Fehlermeldung erstellen", + "ui_created_feeds": "Erstellte Feeds", + "ui_date": "Datum", + "ui_dearrow_confidence": "DeArrow Überzeugung", + "ui_dearrow_thumbnails": "DeArrow Vorschaubilder", + "ui_dearrow_titles": "DeArrow Titel", + "ui_default_landing_page": "Standardansicht", + "ui_default_playback_speed": "Standard-Wiedergabegeschwindigkeit", + "ui_default_quality": "Standardqualität", + "ui_default_service": "Standardservice", + "ui_delete": "Löschen", + "ui_delete_2": "Löschen (", + "ui_delete_playlist": "Wiedergabeliste löschen", + "ui_describe_the_issue": "Beschreibe den Fehler…", + "ui_description": "Beschreibung", + "ui_diagnostics": "Diagnose", + "ui_did_you_mean": "Meintest du", + "ui_disabling_rss_keeps_existing_feed_configuration_intact": "Die Deaktivierung von RSS hält vorhandene Feed-Anpassungen intakt.", + "ui_disconnect": "Trennen", + "ui_discovery_surfaces": "Entdeckungsbereiche", + "ui_dismiss": "Verwerfen", + "ui_dismiss_notification": "Benachrichtigungen verwerfen", + "ui_do_you_know_how_much_time_i_spent_building_all_of_this": "Weißt du eigentlich, wie viel Zeit ich damit verbracht habe, das alles aufzubauen?!", + "ui_download_the_zip_and_drop_it_here": "Lade die ZIP-Datei herunter und lege sie hier ab", + "ui_drag_to_reorder": "Ziehen zum anordnen", + "ui_drop_one_or_more_takeout_zip_files_here": "Lege eine oder mehrere Takeout ZIP-Dateien hier ab", + "ui_drop_your_pipepipe_backup_zip_here": "Lege deine PipePipe Sicherheitskopie-ZIP hier ab", + "ui_embed_unavailable": "Einbettung nicht verfügbar", + "ui_empty_playlist": "Leere Wiedergabeliste", + "ui_enter_the_public_http_or_https_url_of_this_instance": "Trage die öffentliche HTTP oder HTTPS URL von dieser Instanz ein.", + "ui_entire_instance": "Komplette Instanz", + "ui_estimated_sync_in_progress": "voraussichtliche Synchronisierung in Bearbeitung…", + "ui_event_timeline": "Vorfallszeitlinie (", + "ui_export_selected": "Export ausgewählt", + "ui_failed_to_load_notifications_retry_in_a_few_seconds": "Laden der Benachrichtigungen fehlgeschlagen. Versuch es in ein paar Sekunden erneut.", + "ui_failed_to_submit_report_please_try_again": "Einreichung des Berichts fehlgeschlagen. Versuche es bitte erneut.", + "ui_family_list": "Familienliste", + "ui_file_is_ready_tap_below_to_open_it_in_ios_and_save_to_files": "Datei steht bereit. Drücke hier unten um es in iOS zu öffnen und in den Dateien abzuspeichern.", + "ui_filters": "Filter", + "ui_fine": "Gut!", + "ui_followed": "Gefolgt", + "ui_global_behavior_first_then_category_rules_decide_what_gets_skipped_or": "Zunächst gilt das globale Verhalten, dann entscheiden die Kategoreregeln, was übersprungen oder markiert wird.", + "ui_go_and_relax": "Geh und entspann dich", + "ui_go_back_to": "Gehe zurück zu", + "ui_go_to": "Gehe zu", + "ui_go_to_video": "Gehe zum Video", + "ui_guest_mode_disabled": "Gästemodus deaktiviert", + "ui_hide_every_recommendation_comment_and_surface_at_once": "Alle Empfehlungen, Kommentare und Oberflächen auf einmal ausblenden.", + "ui_hide_everything": "Alles ausblenden", + "ui_history": "Verlauf:", + "ui_how_to_export_from_youtube": "So werden Inhalte von YouTube exportiert", + "ui_import_from_pipepipe": "Von PipePipe importieren", + "ui_import_from_youtube": "Von YouTube importieren", + "ui_import_id": "Import ID:", + "ui_imported": "Importiert:", + "ui_import_phase_analyzing": "Analysieren", + "ui_import_phase_applying": "Wird angewendet", + "ui_import_phase_collecting": "Wird gesammelt", + "ui_import_phase_encoding": "Wird generiert", + "ui_import_phase_in_progress": "In Bearbeitung", + "ui_inherited_global_channels": "Übernommene globale Kanäle", + "ui_inherited_global_playlists": "Übernommene globale Wiedergabelisten", + "ui_instance_policy": "Instanzrichtlinie", + "ui_issue": "Problem", + "ui_keyword": "Stichwort", + "ui_keyword_to_block": "Stichwort welches gesperrt werden soll", + "ui_language": "Sprache:", + "ui_last_read": "Zuletzt gelesen:", + "ui_last_used": "Zuletzt genutzt", + "ui_library": "Bibliothek", + "ui_live_public_playlists_saved_to_your_library": "Öffentliche Live-Wiedergabelisten in deiner Bibliothek gespeichert.", + "ui_load_more": "Mehr laden", + "ui_loading_active_sessions": "Aktive Sitzungen werden geladen…", + "ui_loading_admin_settings": "Admin-Einstellungen werden geladen…", + "ui_loading_allow_list": "Whitelists werden geladen…", + "ui_loading_bug_reports": "Fehlermeldungen werden geladen…", + "ui_loading_more": "Mehr wird geladen…", + "ui_loading_notifications": "Benachrichtigungen werden geladen…", + "ui_loading_private_feeds": "Private Feeds werden geladen…", + "ui_loading_rss_controls": "RSS-Verwaltung wird geladen…", + "ui_loading_rss_feeds": "RSS-Feeds werden geladen…", + "ui_loading_rss_settings": "RSS-Einstellungen werden geladen…", + "ui_loading_session": "Session wird geladen…", + "ui_loading_user_allow_list": "Benutzer-Whitelist wird geladen...", + "ui_loading": "Wird geladen…", + "ui_local_registration_is_disabled": "Lokale Registrierung ist deaktiviert.", + "ui_locked_entries_only": "Nur gesperrte Einträge", + "ui_manage_stored_data": "Verwalte gespeicherte Inhalte", + "ui_mark_all_read": "Alles als gelesen markieren", + "ui_members_only": "Nur für Kanalmitglieder", + "ui_minimum_segment_duration": "Mindestdauer eines Segments", + "ui_move_data_between_supported_apps": "Verschiebe Daten zwischen unterstützen Apps", + "ui_move_down": "Nach unten bewegen", + "ui_move_up": "Nach oben bewegen", + "ui_name": "Name", + "ui_network": "Netzwerk:", + "ui_neutral_frame": "Neutraler Ausschnitt", + "ui_new_feed": "Neuer Feed", + "ui_new_password": "Neues Passwort", + "ui_new_playlist": "Neue Wiedergabeliste", + "ui_new_playlist_2": "Neue Wiedergabeliste…", + "ui_next": "Weiter", + "ui_next_month": "Nächster Monat", + "ui_no_active_playback": "Keine aktive Wiedergabe", + "ui_no_active_sessions_are_currently_reported": "Es werden derzeit keine aktiven Sitzungen gemeldet.", + "ui_no_blocked_keywords": "Keine gesperrte Stichwörter", + "ui_no_bug_reports_found": "Keine Fehlermeldungen gefunden.", + "ui_no_channels_added": "Keine Kanäle hinzugefügt.", + "ui_no_channels_found_try_the_exact_channel_name_or_handle": "Keine Kanäle gefunden. Versuch den exakten Kanal- oder Benutzernamen.", + "ui_no_custom_playlists_yet": "Noch keine eigenen Wiedergabelisten.", + "ui_no_episodes_found": "Keine Episoden gefunden.", + "ui_no_family_recommendations_yet": "Noch keine Familienvorschläge", + "ui_no_family_list_results": "Keine Ergebnisse für Familienliste", + "ui_no_favorites_yet": "Noch keine Favoriten.", + "ui_no_matching_subscriptions": "Keine übereinstimmende Abonnements", + "ui_no_notifications_yet": "Noch keine Benachrichtigungen.", + "ui_no_playlist_selected": "Keine Wiedergabeliste ausgewählt.", + "ui_no_playlists_added": "Keine Wiedergabeliste hinzugefügt.", + "ui_no_playlists_found": "Keine Wiedergabelisten gefunden.", + "ui_no_playlists_on_this_channel": "Keine Wiedergabelisten auf diesem Kanal.", + "ui_no_playlists_yet": "Noch keine Wiedergabelisten.", + "ui_no_podcast_selected": "Keine Podcasts ausgewählt.", + "ui_no_preference": "Keine Vorlieben", + "ui_no_private_feeds": "Keine privaten Feeds", + "ui_no_private_feeds_have_been_created": "Es wurden keine privaten Feeds erstellt.", + "ui_no_results_for": "Keine Ergebnisse für “", + "ui_no_shorts_available_right_now": "Derzeit keine Shorts verfügbar.", + "ui_no_subscriptions_yet": "Noch keine Abonnements", + "ui_no_subscriptions_yet_2": "Noch keine Abonnements.", + "ui_no_videos_saved_for_later": "Keine Videos für später gespeichert.", + "ui_notification_popups": "Benachrichtigungs-Popups", + "ui_notifications": "Benachrichtigungen", + "ui_open_allow_list": "Whitelist öffnen", + "ui_open_data_transfer": "Datenübertragung öffnen", + "ui_open_notifications_to_load_items": "Benachrichtigung öffnen um Einträge zu laden.", + "ui_open_settings": "Einstellungen öffnen", + "ui_or_click_to_select": "oder klicken zum auswählen", + "ui_or_click_to_select_multiple_zip_files": "Oder klicken um mehrere ZIP-Dateien auszuwählen", + "ui_original_thumbnail": "Ursprüngliches Vorschaubild", + "ui_original_title": "Ursprünglicher Titel", + "ui_password_updated_you_can_sign_in_with_your_new_password": "Passwort aktualisiert. Du kannst dich mit dem neuen Passwort anmelden.", + "ui_phase": "Phase:", + "ui_play_all": "Alle wiedergeben", + "ui_play_now": "Jetzt wiedergeben", + "ui_playback_failed": "Wiedergabe fehlgeschlagen", + "ui_playback_progress": "Wiedergabefortschritt.", + "ui_player_snapshot": "Player-Ausschnitt", + "ui_playlist_name": "Wiedergabelistenname", + "ui_playlist_name_2": "Wiedergabelistenname…", + "ui_playlist_not_found": "Wiedergabeliste nicht gefunden.", + "ui_playlist_url": "Wiedergabelisten-URL", + "ui_playlist_videos": "Videos der Wiedergabeliste", + "ui_playlist_videos_2": "Videos der Wiedergabeliste:", + "ui_playlists": "Wiedergabelisten,", + "ui_playlists_2": "Wiedergabelisten:", + "ui_please_wait": "Bitte warten…", + "ui_podcast": "Podcast", + "ui_podcast_playlists_from_this_channel": "Podcast-Wiedergabelisten von diesem Kanal", + "ui_podcasts": "Podcasts", + "ui_preferred_video_resolution": "Bevorzugte Videoqualität", + "ui_prev": "Vorschau", + "ui_preview_imports_or_create_a_compatible_export": "Importierte Daten in der Vorschau anzeigen oder einen kompatiblen Export erstellen.", + "ui_preview": "Vorschau:", + "ui_previous_month": "Vorheriger Monat", + "ui_private_feeds": "Private Feeds", + "ui_private_link_shown_once": "Private Links werden einmal angezeigt", + "ui_private_rss_link": "Privater RSS-Link", + "ui_public_instance_url": "Öffentliche Instanz-URL", + "ui_queued_archives": "Archive in der Warteschlange (", + "ui_rate_limited_while_loading_more": "Anfragen wurden während des Ladens von weiteren Daten begrenzt.", + "ui_recommended": "Empfohlen", + "ui_refresh_versions": "Versionen aktualisieren", + "ui_remote_browser": "Remote-Browser", + "ui_remote_youtube_login_is_disabled_on_this_instance": "Remote-Anmeldung bei YouTube ist auf dieser Instanz deaktiviert.", + "ui_remove": "Entfernen", + "ui_remove_from_history": "Aus Wiedergabeverlauf entfernen", + "ui_remove_from_history_2": "Aus Verlauf entfernen?", + "ui_remove_saved_playlist": "Gespeicherte Wiedergabeliste entfernen", + "ui_remove_video": "Video entfernen", + "ui_rename_playlist": "Wiedergabeliste umbenennen", + "ui_report": "Meldung", + "ui_report_a_bug": "Einen Fehler melden", + "ui_requestid": "Anfrage-ID:", + "ui_reset": "Zurücksetzen", + "ui_restore_backup": "Sicherungskopie wiederherstellen", + "ui_restoring_replaces_the_categories_included_in_the_backup": "Bei der Wiederherstellung werden die in der Sicherungskopie enthaltenen Kategorien ersetzt.", + "ui_restoring_your_backup": "Sicherungskopie wird wiederhergestellt", + "ui_restrict_entire_instance": "Gesamte Instanz einschränken", + "ui_restrict_everyone_to_the_admin_allow_list_including_guests": "Alle Benutzer, einschließlich Gäste, auf die Admin-Whitelist beschränken.", + "ui_retry": "Nochmal versuchen", + "ui_retry_video": "Video nochmal versuchen", + "ui_revoke_this_rss_feed": "Diesen RSS-Feed Widerrufen?", + "ui_route": "Route:", + "ui_save_videos_from_the_watch_page_using_the_save_button": "Speichere Videos von der Wiedergabeseite über die Schaltfläche „Speichern“.", + "ui_save_watched_videos_and_playback_progress": "Angesehene Videos und Wiedergabefortschritt speichern", + "ui_saved_public_playlists": "Öffentliche Wiedergabelisten gespeichert", + "ui_search_by_email_or_name": "Nach E-Mail-Adresse oder Namen suchen", + "ui_search_filters": "Suchfilter", + "ui_search_history": "Suchverlauf.", + "ui_search_history_2": "Suchverlauf…", + "ui_search_id_email_text": "Suche nach ID, Email, Text…", + "ui_search_instead_for": "Suche stattdessen nach “", + "ui_search_language": "Sprache suchen…", + "ui_search_results_for": "Suchergebnisse für", + "ui_search_subscriptions": "Durchsuche deine Abonnements", + "ui_search_this_channel": "Durchsuche diesen Kanal", + "ui_search_videos_channels": "Suche nach Videos, Kanälen…", + "ui_searching_channels": "Durchsuche Kanäle…", + "ui_searching_playlists": "Durchsuche Wiedergabelisten…", + "ui_searching_users": "Durchsuche Benutzer…", + "ui_secrets_are_never_available_from_this_console": "Geheimnisse sind über diese Konsole niemals verfügbar.", + "ui_seek": "Durchsuchen", + "ui_select_a_report_to_inspect_details": "Wähle eine Meldung aus, um Details anzuzeigen.", + "ui_selected": "ausgewählt", + "ui_selected_2": "Ausgewählt", + "ui_selected_3": "Ausgewählt:", + "ui_shorts_are_hidden": "Shorts sind ausgeblendet", + "ui_show_a_popup_when_a_subscribed_channel_publishes_a_video": "Zeige ein Popup-Fenster an, wenn ein abonnierter Kanal ein Video veröffentlicht.", + "ui_showing": "Zeige", + "ui_showing_results_for": "Zeige Ergebnisse für", + "ui_shuffle": "Zufallswiedergabe", + "ui_shuffle_playlist": "Playlist in zufälliger Reihenfolge abspielen", + "ui_sign_in_could_not_be_completed": "Anmeldung konnte nicht abgeschlossen werden.", + "ui_signing_in": "Anmeldung läuft", + "ui_size": "Größe", + "ui_skip_playlist_autoplay_screen": "Bildschirm für die automatische Wiedergabe der Wiedergabeliste überspringen", + "ui_sort": "Sortieren", + "ui_specific_users": "Spezifischer Benutzer", + "ui_speed": "Geschwindigkeit", + "ui_sponsorblock": "SponsorBlock", + "ui_sponsorblock_behavior": "SponsorBlock Verhalten", + "ui_sponsorblock_categories": "SponsorBlock Kategorien", + "ui_start_download": "Download beginnen", + "ui_start_import": "Import beginnen", + "ui_startup": "Hochfahren", + "ui_status": "Status:", + "ui_stored_data": "Gespeicherte Daten", + "ui_subscribe_to_channels_to_unlock_a_personalized_home_feed": "Abonniere Kanäle, um einen personalisierte Startseite freizuschalten.", + "ui_subscribers": "Abonnenten", + "ui_subscription_views": "Ansichten von Abonnements", + "ui_subscriptions": "Abonnements,", + "ui_subscriptions_2": "Abonnements:", + "ui_subscriptions_3": "Abonnements.", + "ui_the_admin_has_disabled_guest_access": "Der Administrator hat den Gastzugang deaktiviert.", + "ui_the_browser_context_is_destroyed_after_success_timeout_or_cancel": "Der Browser-Kontext wird nach Erfolg, Timeout oder Abbruch verworfen.", + "ui_the_client_is_connected_and_ready": "Der Client ist verbunden und bereit.", + "ui_the_login_page_is_rendered_by_a_disposable_chromium_session_running_i": "Die Anmeldeseite wird von einer einmalig verwendbaren Chromium-Sitzung gerendert, die in TypeType-Token ausgeführt wird.", + "ui_the_page_typetype_opens_on_when_you_launch_it": "Die Seite, auf welcher TypeType beim Aufruf geöffnet wird.", + "ui_the_youtube_sign_in_window_will_appear_here": "Hier erscheint das Anmeldefenster von YouTube.", + "ui_third_party_notices": "Drittanbieter-Anmerkungen", + "ui_this_channel_is_blocked": "Dieser Kanal ist gesperrt", + "ui_this_channel_is_outside_the_family_list": "Dieser Kanal ist nicht in der Familienliste", + "ui_this_instance_does_not_allow_guest_access_which_is_required_for_embed": "Diese Instanz erlaubt keinen Gastzugang, welcher für die eingebettete Wiedergabe erforderlich ist.", + "ui_this_link_will_open_in_a_new_tab": "Dieser Link wird in einem neuen Tab geöffnet:", + "ui_this_playlist_could_not_be_loaded": "Diese Wiedergabeliste konnte nicht geladen werden.", + "ui_this_playlist_has_no_videos": "Diese Wiedergabeliste beinhaltet keine Videos.", + "ui_this_video_could_not_be_played_the_stream_may_be_unavailable_or_unsup": "Dieses Video konnte nicht wiedergegeben werden. Der Stream ist eventuell nicht verfügbar oder wird nicht unterstützt.", + "ui_thumbnails": "Vorschaubilder", + "ui_titles": "Titel", + "ui_to_use_this_typetype_instance_create_an_account_or_sign_in_with_an_ex": "Um diese TypeType-Instanz zu nutzen, erstelle ein Konto oder melde dich mit einem bestehenden Konto an.", + "ui_toggle": "umschalten", + "ui_toggle_sidebar": "Seitenleiste umschalten", + "ui_total": "Insgesamt", + "ui_type_at_least_two_characters_to_search_channels": "Gebe mindestens zwei Zeichen ein, um nach Kanälen zu suchen.", + "ui_type_at_least_two_characters": "Gebe mindestens zwei Zeichen ein.", + "ui_typetype_backup": "TypeType Sicherungskopie", + "ui_typetype_opens_a_temporary_remote_browser_for_youtube_sign_in_cookies": "TypeType öffnet einen temporären Remote-Browser für die Anmeldung bei YouTube. Cookies und der Wiedergabetoken werden serverseitig erfasst, verschlüsselt und niemals an die Web-Benutzeroberfläche gesendet.", + "ui_unable_to_load_active_sessions": "Laden der aktiven Sitzungen nicht möglich.", + "ui_unable_to_load_admin_settings": "Laden der Admin-Einstellungen nicht möglich:", + "ui_unable_to_load_allow_list_settings": "Laden der Whitelist-Einstellungen nicht möglich.", + "ui_unable_to_load_bug_reports": "Laden der Fehlermeldungen nicht möglich.", + "ui_unavailable": "Nicht verfügbar", + "ui_unblock": "Freigeben", + "ui_unpacking_and_syncing_your_data_this_may_take_a_moment": "Extrahieren und synchronisieren deiner Daten. Dies kann einen Moment dauern.", + "ui_unsubscribe_all": "Alle deabonnieren", + "ui_unsubscribe_from_all_channels_in_settings": "Deabonnieren aller Kanäle in den Einstellungen.", + "ui_up_next": "Als Nächstes", + "ui_updated": "Aktualisiert", + "ui_use_a_secondary_youtube_account_the_remote_browser_is_temporary_and_c": "Verwende ein sekundäres YouTube-Konto. Der Remote-Browser ist nur vorübergehend aktiv und wird nach der Verbindung, nach Ablauf der Zeit oder bei Abbruch geschlossen.", + "ui_use_the_new_playlist_button_to_get_started": "Nutze die Schaltfläche „neue Wiedergabeliste“, um loszulegen.", + "ui_used": "verwendet", + "ui_user_agent": "User Agent:", + "ui_user_channels": "Kanäle des Benutzers", + "ui_user_playlists": "Wiedergabelisten des Benutzers", + "ui_users_with_admin_managed_access_appear_here_search_to_configure_anoth": "Hier werden Benutzer mit vom Administrator verwaltetem Zugriff angezeigt. Suche nach einem weiteren Benutzer, um ein weiteres Konto zu konfigurieren.", + "ui_verified": "Verifiziert", + "ui_versions": "Versionen", + "ui_video": "Video", + "ui_videos": "Videos", + "ui_view_github_issue": "Zeige den GitHub-Vorfall an", + "ui_viewport": "Ansichtsfenster:", + "ui_watch_dates": "Wiedergabedatum:", + "ui_watch_history_tracking": "Nachverfolgung des Wiedergabeverlaufs", + "ui_watch_history": "Wiedergabeverlauf.", + "ui_watch_page": "Wiedergabeseite", + "ui_watched": "Angesehen", + "ui_we_are_plating_your_data_now": "Wir laden deine Daten gerade hoch.", + "ui_we_import_subscriptions_playlists_and_watch_history_if_available": "Wir importieren Abonnements, Wiedergabelisten und den Wiedergabeverlauf (sofern verfügbar).", + "ui_what_happens": "Was passiert", + "ui_you_are_leaving_typetype": "Du verlässt TypeType", + "ui_you_can_re_enable_shorts_from_video_preferences": "Du kannst Shorts in den Video-Voreinstellungen wieder aktivieren.", + "ui_you_sign_in_inside_the_remote_browser_shown_above": "Du meldest dich innerhalb des Remote-Browsers, welcher oberhalb angezeigt wird, an.", + "ui_you_want_to_hide_everything": "Du willst alles ausblenden?", + "ui_your_backup_has_been_restored": "Deine Sicherungskopie wurde wiederhergestellt.", + "ui_your_data_has_been_plated_check_your_subscriptions_and_playlists": "Deine Daten wurden hochgeladen. Überprüfe deine Abonnements und Wiedergabelisten.", + "ui_youtube_remote_sign_in": "YouTube Remote-Anmeldung", + "ui_youtube_sign_in_remote_browser": "YouTube Anmeldung Remote-Browser", + "ui_yeah_hide_it": "Ja, blende es aus", + "ui_like_actually_sure_you_will_have_nothing_left_to_scroll": "Im Ernst, wirklich? Dann hast du nichts mehr zum scrollen.", + "ui_yes_gone": "Ja, verschwunden", + "ui_fine_i_ll_hide_it": "Na gut, ich blende es aus", + "ui_allowed_channels": "Zugelassene Kanäle", + "ui_unable_to_update_mode": "Aktualisierung des Modus fehlgeschlagen", + "ui_search_by_channel_name_or_handle_added_channels_apply_to_every_restri": "Suche nach Kanalnamen oder Benutzernamen. Hinzugefügte Kanäle gelten für alle Benutzer mit eingeschränkten Rechten.", + "ui_search_playlists_by_name_added_playlists_apply_to_every_restricted_us": "Wiedergabelisten mit deren Namen suchen. Die hinzugefügten Wiedergabelisten gelten für alle Benutzer mit eingeschränkten Rechten.", + "ui_user_specific_allow_list": "Benutzerspezifische Whitelist", + "ui_set_unrestricted_override": "Uneingeschränkte Überschreibung festlegen", + "ui_unrestrict_user": "Benutzer freigeben", + "ui_unrestricted_override_set": "Uneingeschränkte Überschreibung festgelegt", + "ui_user_unrestricted": "Benutzer freigegeben", + "ui_admin_unrestricted_override": "Uneingeschränkte Überschreibung für Administratoren", + "ui_restrict_user": "Benutzer einschränken", + "ui_user_restricted": "Benutzer eingeschränkt", + "ui_restricted_by_entire_instance": "Eingeschränkt auf die gesamte Instanz", + "ui_unable_to_update_user": "Aktualisierung des Benutzers nicht möglich", + "ui_search_by_channel_name_or_handle_this_does_not_affect_other_users": "Suche nach Kanalnamen oder Benutzernamen. Dies hat keine Auswirkungen auf andere Benutzer.", + "ui_search_playlists_by_name_this_does_not_affect_other_users": "Suche nach Wiedergabelisten mit deren Namen. Das hat keinen Einfluss auf andere Benutzer.", + "ui_failed_to_update": "Aktualisierung fehlgeschlagen", + "ui_failed_to_create_issue": "Erstellen der Problemmeldung fehlgeschlagen", + "ui_account_suspended": "Konto gesperrt", + "ui_account_rss_off": "Konto-RSS ausgeschalten", + "ui_feed_off": "Feed ausgeschalten", + "ui_disable_feed": "Feed ausschalten", + "ui_enable_feed": "Feed einschalten", + "ui_disable_rss_for_account": "RSS für dieses Konto ausschalten", + "ui_enable_rss_for_account": "RSS für dieses Konto einschalten", + "ui_revoke_feed": "Feed widerrufen", + "ui_enable_private_rss_feeds": "Private RSS-Feeds einschalten", + "ui_unable_to_update_rss_settings": "Aktualisierung der RSS-Einstellungen fehlgeschlagen", + "ui_unable_to_load_rss_controls": "Laden der RSS-Verwaltung fehlgeschlagen", + "ui_unable_to_load_private_feeds": "Laden der privaten Feeds fehlgeschlagen", + "ui_unable_to_update_rss_feed": "Aktualisierung der RSS-Feeds fehlgeschlagen", + "ui_unable_to_update_account_rss": "Aktualisierung der Konto-RSS fehlgeschlagen", + "ui_revoke": "Widerrufen", + "ui_unable_to_revoke_rss_feed": "Widerrufen des RSS-Feeds fehlgeschlagen", + "ui_paused": "Pausiert", + "ui_online": "Online", + "ui_unable_to_update_admin_settings": "Aktualisierung der Admin-Einstellungen nicht möglich", + "ui_unable_to_load_admin_settings_2": "Laden der Admin-Einstellungen nicht möglich.", + "ui_pause_audio": "Ton pausieren", + "ui_backward": "Zurück", + "ui_resume_autoplay_timer": "Timer für automatische Wiedergabe fortsetzen", + "ui_pause_autoplay_timer": "Timer für automatische Wiedergabe pausieren", + "ui_live": "Live", + "ui_a_parent_can_add_this_channel_if_it_belongs_in_your_trusted_family_sp": "Ein Elternteil kann diesen Kanal hinzufügen, wenn er in euren vertrauenswürdigen Familienbereich gehört.", + "ui_unable_to_load_channel_right_now": "Laden des Kanals derzeit nicht möglich.", + "ui_unblock_it_from_settings_to_see_this_channel_again": "Entsperre den Kanal in den Einstellungen, um ihn wieder anzuzeigen.", + "ui_audio": "Ton", + "ui_file": "Datei", + "ui_nothing_from_the_family_list_yet": "Bisher noch nichts aus der Familienliste", + "ui_add_trusted_channels_so_this_page_can_stay_focused_on_videos_you_pick": "Füge vertrauenswürdige Kanäle hinzu, damit diese Seite sich weiterhin auf die Videos konzentriert, die du für deine Familie ausgewählt hast.", + "ui_su": "So", + "ui_mo": "Mo", + "ui_tu": "Di", + "ui_th": "Do", + "ui_fr": "Fr", + "ui_sa": "Sa", + "ui_this_week": "Diese Woche", + "ui_this_month": "Dieser Monat", + "ui_this_removes_all_saved_searches_from_your_account": "Dadurch werden alle gespeicherten Suchanfragen aus deinem Konto gelöscht.", + "ui_recent": "Kürzlich", + "ui_just_now": "Jetzt gerade", + "ui_deselect": "Abwählen", + "ui_audio_language": "Tonsprache", + "ui_functionality": "Funktionalität", + "ui_create_rss_feed_for_this_channel": "Erstelle einen RSS-Feed für diesen Kanal", + "ui_create_subscription_rss_feed": "Erstelle einen Abonnement-RSS-Feed", + "ui_sabr_playback_is_unavailable_for_this_short": "SABR Wiedergabe ist für dieses Short nicht verfügbar", + "ui_this_short_stopped_playing": "Dieses Short hat die Wiedergabe angehalten", + "ui_this_short_is_only_available_for_members": "Dieses Short ist nur für Kanalmitglieder verfügbar", + "ui_original_audio_unavailable": "Originaler Ton nicht verfügbar", + "ui_skipped_automatically": "Automatisch übersprungen", + "ui_skipped": "Übersprungen", + "ui_add": "Hinzufügen", + "ui_switch_to_light_mode": "Schalte auf den hellen Modus um", + "ui_switch_to_dark_mode": "Schalte auf den dunklen Modus um", + "ui_light_mode": "Heller Modus", + "ui_dark_mode": "Dunkler Modus", + "ui_bullet_comments": "Einblendungen", + "ui_more_actions": "Mehr Aktionen", + "ui_report_bug": "Fehler melden", + "ui_likes": "Likes", + "ui_dislikes": "Dislikes", + "ui_audio_only_unavailable": "„Nur-Ton“ nicht verfügbar", + "ui_expand_playlist": "Wiedergabeliste erweitern", + "ui_error_occurs_when_fetching_the_page_try_increase_the_loading_timeout": "Beim Abrufen der Seite ist ein Fehler aufgetreten. Versuche, die Ladezeitbegrenzung in den Einstellungen zu verlängern.", + "ui_connect_youtube_to_access_this_video": "Verbinde YouTube, um dieses Video ansehen zu können.", + "ui_this_video_is_currently_unavailable": "Dieses Video ist derzeit nicht verfügbar", + "ui_failed_to_load_stream": "Laden des Streams fehlgeschlagen.", + "ui_mute_zen_music": "Zen-Musik stumm schalten", + "ui_completing_sign_in_with_your_provider": "Die Anmeldung bei deinem Anbieter wird abgeschlossen.", + "ui_could_not_load_player": "Player konnte nicht geladen werden.", + "ui_this_removes_every_video_from_your_watch_history": "Dies entfernt jedes Video aus deiner Wiedergabeliste.", + "ui_failed_to_clear_history": "Leeren der Wiedergabeliste fehlgeschlagen", + "ui_this_video_will_be_removed_from_your_watch_history": "Dieses Video wird aus deiner Wiedergabeliste entfernt.", + "ui_pipepipe_import_completed": "PipePipe Import abgeschlossen.", + "ui_pipepipe_import_failed": "PipePipe Import fehlgeschlagen.", + "ui_pipepipe_backup": "PipePipe Sicherungskopie", + "ui_restore_history_subscriptions_playlists_and_watch_progress_from_a_bac": "Stelle den Wiedergabeverlauf, Abonnements, Wiedergabelisten und den Wiedergabefortschritt aus einer ZIP-Sicherungsdatei wieder her.", + "ui_youtube_import_completed": "YouTube Import abgeschlossen.", + "ui_all_archives_processed": "Alle Archive verarbeitet.", + "ui_youtube_takeout": "YouTube Takeout", + "ui_drop_your_takeout_zip_below_we_import_subscriptions_playlists_and_his": "Lege deine Takeout-ZIP unten ab. Wir importieren Abonnements, Wiedergabelisten und den Wiedergabeverlauf.", + "ui_import_started": "Import begonnen.", + "ui_trending": "Beliebt", + "ui_this_playlist": "Diese Wiedergabeliste", + "ui_this_action_cannot_be_undone": "Diese Aktion kann nicht rückgängig gemacht werden.", + "ui_this_only_removes_the_saved_reference_from_your_library": "Dadurch wird nur der gespeicherte Verweis aus deiner Bibliothek entfernt.", + "ui_unable_to_load_podcast_episodes": "Laden der Podcast-Episode nicht möglich.", + "ui_first_installation_detected_set_up_the_administrator_account": "Neue Installation erkannt. Richte das Adminkonto ein.", + "ui_registrations_are_currently_closed": "Registrierungen sind derzeit geschlossen.", + "ui_use_your_email_to_create_an_account_you_can_sign_in_with_email_or_use": "Nutze deine Email um ein Konto zu erstellen. Du kannst dich mit Email oder Benutzernamen anmelden.", + "ui_account_created": "Konto erstellt", + "ui_unable_to_create_account": "Erstellen des Kontos nicht möglich.", + "ui_create_admin_account": "Adminkonto erstellen", + "ui_administrator_name": "Name des Administrator", + "ui_invalid_or_expired_reset_token": "Ungültiger oder abgelaufener Reset-Token.", + "ui_use_the_token_generated_from_the_admin_panel": "Nutze den in der Admin-Oberfläche generierten Token.", + "ui_try_a_channel_you_already_trust_or_add_more_channels_to_the_family_li": "Versuche einen Kanal, dem du schon vertraust oder füge mehr Kanäle zur Familienliste hinzu.", + "ui_youtube_session_connected": "YouTube-Sitzung verbunden", + "ui_remote_youtube_login_is_not_available_yet": "Remote YouTube-Anmeldung ist noch nicht verfügbar", + "ui_youtube_session_disconnected": "YouTube-Sitzung getrennt", + "ui_could_not_disconnect_youtube_session": "YouTube-Sitzung konnte nicht getrennt werden", + "ui_all_those_recommendations_comments_and_shorts_we_worked_so_hard_on_go": "All diese Empfehlungen, Kommentare und Shorts, an denen wir so hart gearbeitet haben – weg.", + "ui_are_you_sure": "Bist du dir sicher?", + "ui_i_am_sure": "Ich bin mir sicher", + "ui_are_you_sure_sure": "Bist du dir WIRKLICH sicher?!", + "ui_last_chance": "LETZTE MÖGLICHKEIT.", + "ui_okay_fine_do_not_say_we_did_not_warn_you": "Okay gut. Sag nicht, wir hätten dich nicht gewarnt.", + "settings_sponsorblock_hide": "Ausblenden", + "ui_upcoming": "Demnächst", + "ui_enabled": "Eingeschaltet", + "ui_disabled": "Ausgeschaltet", + "ui_copy_private_link": "Privaten Link kopieren", + "ui_edit_feed": "Feed bearbeiten", + "ui_replace_private_link": "Privaten Link ersetzen", + "ui_delete_feed": "Feed löschen", + "ui_export_completed": "Export fertiggestellt", + "ui_restore_failed": "Wiederherstellung fehlgeschlagen", + "ui_autoplay_next_video": "Nächstes Video automatisch wiedergeben", + "ui_automatically_continue_with_the_first_item_in_the_suggestions_column": "Automatisch mit dem ersten Eintrag in der Vorschlagsspalte fortfahren.", + "ui_dearrow_titles_and_thumbnails": "DeArrow Titel und Vorschaubilder", + "ui_use_community_written_titles_and_representative_thumbnails_for_youtub": "Verwende Community-Titel und aussagekräftige Vorschaubilder für YouTube-Videos.", + "ui_related_videos": "Ähnliche Videos", + "ui_comments_and_danmaku": "Kommentare und danmaku", + "ui_stop_loading_watch_comments_shorts_comments_and_bullet_comments": "Das Laden von Kommentaren zu Videos, Shorts und Einblendungen anhalten.", + "ui_shorts_surface": "Shorts-Oberfläche", + "ui_live_streams": "Livestreams", + "ui_members_only_videos": "Videos nur für Kanalmitglieder", + "ui_auto": "Automatisch", + "ui_automatically_play_the_next_video": "Nächstes Video automatisch abspielen", + "ui_seconds_before_autoplay_advances_or_0_for_immediate_playlists": "Sekunden vor dem nächsten Titel bei der automatischen Wiedergabe oder 0 für sofortige Wiedergabelisten", + "ui_load_a_backend_provided_audio_stream_when_available": "Einen vom Backend bereitgestellten Ton-Stream laden, sofern verfügbar", + "ui_unsubscribed_from_all_channels": "Abonnement von allen Kanälen beendet", + "ui_search_history_cleared": "Suchverlauf geleert", + "ui_action_failed": "Aktion fehlgeschlagen", + "ui_subscriptions_4": "Abonnements", + "ui_rss_feed_updated": "RSS-Feed aktualisiert", + "ui_rss_feed_deleted": "RSS-Feed gelöscht", + "ui_feed_limit_reached": "Feed-Limit erreicht", + "ui_create_rss_feed": "RSS-Feed erstellt", + "ui_delete_3": "Löschen", + "ui_delete_rss_feed": "RSS-Feed löschen?", + "ui_replace_private_link_2": "Privaten Link ersetzen?", + "ui_the_current_link_will_stop_working_immediately": "Der aktuelle Link wird sofort nicht mehr funktionieren.", + "ui_the_current_private_link_will_be_revoked_immediately": "Der aktuelle private Link wird sofort widerrufen.", + "ui_replace_link": "Link ersetzen", + "ui_mark": "Markieren", + "ui_use_category_rules_for_automatic_skips": "Nutze die Kategorieregeln für das automatische Überspringen.", + "ui_show_matching_segments_without_skipping": "Zeige passende Segmente, ohne sie zu überspringen.", + "ui_off": "Aus", + "ui_ignore_all_sponsorblock_data": "Alle SponsorBlock-Daten ignorieren.", + "ui_updating": "Aktualisieren…", + "ui_update_password": "Passwort aktualisieren", + "ui_registrations_closed": "Registrierungen geschlossen", + "ui_creating_account": "Konto wird erstellt…", + "ui_remote_browser_connection_failed": "Verbindung zum externen Browser fehlgeschlagen", + "ui_playlist_removed": "Wiedergabeliste entfernt", + "ui_playlist_saved": "Wiedergabeliste gespeichert", + "ui_watch_history_cleared": "Wiedergabeverlauf geleert", + "ui_private_rss_link_copied": "Privater RSS-Link kopiert", + "ui_allow_list_mode_updated": "Whitelist-Modus aktualisiert", + "ui_status_updated": "Status aktualisiert", + "ui_github_issue_created": "GitHub Meldung erstellt", + "ui_rss_settings_updated": "RSS Einstellungen aktualisiert", + "ui_rss_feed_revoked": "RSS-Feed widerrufen", + "video_premiere_scheduled": "Premiere geplant", + "video_premiere_starts_in": "Diese Premiere startet in {relativeTime}.", + "video_premiere_not_started": "Diese Premiere hat noch nicht begonnen.", + "video_paid": "Bezahltes Video", + "video_paid_message": "Dieses Video muss auf YouTube gekauft werden, bevor es wiedergegeben werden kann.", + "video_members_only": "Video nur für Kanalmitglieder", + "video_members_only_message": "Dieses Video ist nur für Kanalmitglieder verfügbar", + "channel_sort_newest": "Neuste", + "channel_sort_popular": "Beliebt", + "channel_sort_oldest": "Älteste", + "playlist_sort_manual": "Manuell", + "playlist_sort_added_newest": "Hinzugefügt am (zuletzt)", + "playlist_sort_added_oldest": "Hinzugefügt am (älteste)", + "playlist_sort_posted_newest": "Hochgeladen am (neuste)", + "playlist_sort_posted_oldest": "Hochgeladen am (älteste)", + "playlist_sort_popularity": "Beliebtheit", + "search_filter_sort_by": "Sortieren nach", + "search_filter_upload_date": "Datum des Uploads", + "search_filter_relevance": "Relevanz", + "search_filter_rating": "Bewertung", + "search_filter_view_count": "Aufrufe", + "search_filter_past_hour": "Letzte Stunde", + "search_filter_today": "Heute", + "search_filter_this_week": "Diese Woche", + "search_filter_this_year": "Dieses Jahr", + "search_filter_short": "Kurz", + "search_filter_long": "Lang", + "search_filter_creative_commons": "schöpferisches Gemeingut (CC)", + "sponsorblock_sponsored_message": "Bezahlte Nachricht", + "sponsorblock_sponsored_message_description": "Bezahlte Werbung, Sponsoring oder direkte Werbung.", + "sponsorblock_self_promotion": "Eigenwerbung", + "sponsorblock_self_promotion_description": "Unbezahlte Werbung, Merch, Spenden oder Gastwerbung.", + "sponsorblock_exclusive_access": "Exklusiver Zugriff", + "sponsorblock_exclusive_access_description": "Kennzeichnungen für den kostenlosen oder subventionierten Zugang zu ganzen Videos.", + "sponsorblock_interaction_reminder": "Erinnerung zur Interaktion", + "sponsorblock_interaction_reminder_description": "Kurze Aufforderungen zum Liken, Abonnieren oder Folgen.", + "sponsorblock_highlight": "Highlight", + "sponsorblock_highlight_description": "Der wichtigste Punkt, auf den es den meisten Zuschauern ankommt.", + "sponsorblock_intermission_or_intro": "Unterbrechung oder Intro", + "sponsorblock_intermission_or_intro_description": "Pausen mit wenig Inhalt, statischem Bildschirm oder sich wiederholende Animationen.", + "sponsorblock_endcards_or_credits": "Endcards oder Credits", + "sponsorblock_endcards_or_credits_description": "Credits oder YouTube End-Screens ohne nützlicher Zusammenfassung.", + "sponsorblock_preview_or_recap": "Vorschau oder Rückblick", + "sponsorblock_preview_or_recap_description": "Ausschnitte, die später im selben Video oder in derselben Serie wiederholt werden.", + "sponsorblock_tangents_or_jokes": "Abschweifungen oder Witze", + "sponsorblock_tangents_or_jokes_description": "Aggressives Überspringen von unwesentlichen Abschweifungen oder Witzen.", + "sponsorblock_chapter": "Kapitel", + "sponsorblock_chapter_description": "Benutzerdefinierte Kapitel, die wichtige Abschnitte beschreiben.", + "sponsorblock_music_non_music": "Musik: keine Musik", + "sponsorblock_music_non_music_description": "Abschnitte ohne Musik in Musikvideos.", + "ui_hide_in_progress_videos_from_the_home_page": "Videos, die Wiedergabefortschritt haben, auf der Startseite ausblenden.", + "ui_home_recommendations": "Empfehlungen auf der Startseite", + "ui_hide_personalized_recommendations_from_the_home_page": "Personalisierte Empfehlungen auf der Startseite ausblenden.", + "ui_hide_the_suggestions_column_on_watch_pages": "Die Spalte mit den Vorschlägen auf den Wiedergabeseite ausblenden.", + "ui_watch_and_shorts": "Wiedergeben + Shorts", + "ui_hide_shorts_navigation_and_block_the_shorts_page": "Die Shorts-Navigation ausblenden und die Shorts-Seite sperren.", + "ui_hide_active_and_scheduled_live_streams_from_the_subscriptions_feed": "Laufende und geplante Livestreams aus dem Abonnement-Feed ausblenden.", + "ui_hide_videos_that_require_a_paid_youtube_channel_membership": "Videos ausblenden, welche eine bezahlte YouTube Kanalmitgliedschaft benötigen.", + "ui_play_next_playlist_item_immediately_while_keeping_the_countdown_for_recommendations": "Den nächsten Eintrag der Wiedergabeliste sofort abspielen, dabei aber den Countdown für Empfehlungen beibehalten.", + "ui_john_doe": "john.doe", + "ui_admin_settings_updated": "Administrator-Einstellungen aktualisiert", + "ui_failed_to_clear_download_job": "Leeren des Download-Auftrags fehlgeschlagen", + "ui_hide_everything_question": "Alles ausblenden?", + "ui_we_spent_months_on_this_months_and_poof_you_want_it_gone": "Wir haben Monate daran gearbeitet. Monate. Und zack, jetzt soll es einfach weg sein?", + "ui_backup_restored": "Sicherungskopie wiederhergestellt: {count} Einträge", + "ui_unable_to_load_rss_feeds": "Laden des RSS-Feeds fehlgeschlagen", + "ui_large_history_in": "Großer Verlauf in {file}", + "ui_files_queued": "{count} Datei(en) zur Warteschlange hinzugefügt.", + "ui_unable_to_load_import_report": "Laden des Import-Berichts fehlgeschlagen.", + "ui_unable_to_process_archive": "Verarbeitung des Archives fehlgeschlagen.", + "ui_registration_rejected_server": "Die Registrierung wurde vom Server abgelehnt. Füge {origin} ohne abschließenden Schrägstrich zu ALLOWED_ORIGINS hinzu und starte anschließend den TypeType-Server neu.", + "ui_copied": "Kopiert", + "ui_link": "Link", + "ui_player": "Player", + "ui_bug_status_new": "Neu", + "ui_bug_status_triaged": "Geordnet", + "ui_bug_status_in_progress": "In Bearbeitung", + "ui_bug_status_fixed": "Repariert", + "ui_bug_status_closed": "Geschlossen", + "ui_bug_category_player": "Player", + "ui_bug_category_audio_language": "Ton-Sprache", + "ui_bug_category_subtitles": "Untertitel", + "ui_bug_category_interface": "Oberfläche", + "ui_bug_category_functionality": "Funktionalität", + "ui_sending": "Wird verschickt…", + "ui_submit": "Einreichen", + "ui_history_count": "{count} Einträge", + "ui_subscription_count": "{count} Kanäle", + "ui_search_history_count": "{count} Einträge", + "ui_clear_history_question": "{label} leeren?", + "ui_unsubscribe_from_count_question": "{label} deabonnieren?", + "ui_clear_search_history_question": "{label} leeren?", + "ui_playing": "Wird wiedergegeben", + "ui_we": "Wir", + "ui_play_zen_music": "Zen-Musik wiedergeben", + "ui_collapse_playlist": "Wiedergabeliste einklappen", + "ui_play_audio": "Ton wiedergeben", + "ui_channel_followed": "{count} Kanäle abonniert", + "ui_channels_followed": "{count} Kanäle abonniert", + "ui_channel_feed": "Kanal-Feed", + "ui_my_subscriptions": "Meine Abonnements", + "ui_edit_rss_feed": "RSS-Feed bearbeiten", + "ui_new_rss_feed": "Neuer RSS-Feed", + "ui_saving": "Wird gespeichert…", + "ui_save": "Speichern", + "ui_create_feed": "Feed erstellen", + "ui_all": "Alle", + "ui_all_subscriptions": "Alle Abonnements", + "ui_selected_channel": "{count} Kanäle ausgewählt", + "ui_selected_channels": "{count} Kanäle ausgewählt", + "ui_never": "Niemals", + "ui_no_users_found": "Kein Benutzer gefunden.", + "ui_no_managed_users_yet": "Kein Benutzer wird derzeit durch die Whitelist-Regel verwaltet.", + "ui_load_more_users": "Mehr Benutzer laden", + "ui_import_report_summary": "{subscriptions} Abonnements · {playlists} Wiedergabelisten · {videos} Videos der Wiedergabeliste", + "ui_import_started_keep_window_open": "Import begonnen. Lasse dieses Fenster offen.", + "ui_connected": "Verbunden", + "ui_reconnect_needed": "Verbindung muss neu hergestellt werden", + "ui_not_connected": "Nicht verbunden", + "ui_typetype_can_use_this_session": "TypeType kann diese Sitzung nutzen, wenn die Extraktion es verlangt.", + "ui_youtube_rejected_stored_session": "YouTube hat die gespeicherte Sitzung abgelehnt. Erstelle einen neuen Code.", + "ui_no_youtube_session_connected": "Es ist keine YouTube Sitzung verbunden.", + "ui_prepare": "Vorbereiten", + "ui_download": "Herunterladen", + "ui_finalize": "Abschließen", + "ui_opening_file": "Datei wird geöffnet", + "ui_failed": "Fehlgeschlagen", + "ui_ready_from_cache": "Bereitgestellt aus dem Zwischenspeicher", + "ui_ready": "Bereit", + "ui_queued": "In der Warteschlange", + "ui_downloading": "Wird heruntergeladen", + "ui_finalizing": "Wird fertiggestellt", + "ui_preparing_download": "Download wird vorbereitet", + "ui_handing_file_to_browser": "Übertrage die Datei zu deinem Browser.", + "ui_download_cancelled": "Der Download wurde abgebrochen.", + "ui_download_could_not_be_completed": "Der Download konnte nicht fertiggestellt werden.", + "ui_using_cached_file": "Nutze die zwischengespeicherte Datei.", + "ui_file_is_ready": "Deine Datei steht bereit.", + "ui_waiting_for_worker": "Warte auf einen verfügbaren Prozess.", + "ui_downloading_selected_media": "Die ausgewählten Medien werden heruntergeladen.", + "ui_combining_final_file": "Die endgültige Datei wird zusammengesetzt.", + "ui_preparing_streams_and_selecting_format": "Der Stream wird vorbereitet und das Format ausgewählt.", + "ui_unknown": "Unbekannt", + "ui_unknown_size": "Unbekannte Größe", + "ui_default": "Standard", + "ui_seconds_left": "{count}s verbleibend", + "ui_minutes_seconds_left": "{minutes}m {seconds}s verbleibend", + "ui_hours_minutes_left": "{hours}h {minutes}m verbleibend", + "ui_rss_feed_will_stop_working": "{name} wird sofort aufhören zu funktionieren.", + "ui_flag": "{code} flag", + "ui_video_count": "{count} Video", + "ui_videos_count": "{count} Videos", + "ui_remove_video_from_playlist_question": "\"{name}\" aus Wiedergabeliste entfernen?", + "ui_delete_playlist_confirmation": "\"{name}\" löschen? Dies kann nicht rückgängig gemacht werden.", + "ui_remove_filter": "{label} Filter entfernen", + "ui_select_named_channel": "{name} auswählen", + "ui_replay": "WIEDERHOLUNG", + "ui_subtitle_auto": "{label} (automatisch)", + "ui_requested_quality_unavailable": "Die gewünschte Qualität {height}p ist nicht verfügbar. Wähle ein anderes Format.", + "ui_selected_format_unavailable": "Das ausgewählte Format ist nicht verfügbar. Wähle ein anderes Format.", + "ui_downloaded_of": "{downloaded} von {total}", + "ui_playlist_deleted": "Wiedergabeliste gelöscht", + "ui_playlists_deleted": "{count} Wiedergabelisten gelöscht", + "ui_saved_playlist_removed": "{name} entfernt", + "ui_delete_playlist_question": "\"{name}\" löschen?", + "ui_delete_playlists_question": "{count} Wiedergabelisten löschen?", + "ui_playlist_created": "\"{name}\" erstellt", + "ui_remove_saved_playlist_question": "\"{name}\" entfernen?", + "ui_all_videos_in_playlist_blocked": "Alle Videos in dieser Wiedergabelisten sind gesperrt.", + "ui_no_videos_in_playlist_yet": "Noch keine Videos in dieser Wiedergabeliste.", + "ui_copy_json": "JSON kopieren", + "ui_cancel": "Abbrechen", + "ui_clear": "Leeren", + "ui_open_file": "Datei öffnen", + "ui_added": "Hinzugefügt", + "ui_saved": "Gespeichert", + "ui_allowed": "Erlaubt", + "ui_adding": "Wird hinzugefügt", + "ui_allow_channel": "Kanal erlauben", + "ui_january": "Januar", + "ui_february": "Februar", + "ui_march": "März", + "ui_april": "April", + "ui_may": "Mai", + "ui_june": "Juni", + "ui_july": "Juli", + "ui_august": "August", + "ui_september": "September", + "ui_october": "Oktober", + "ui_november": "November", + "ui_december": "Dezember", + "ui_add_url": "URL hinzufügen", + "ui_unknown_user": "Unbekannter Benutzer", + "ui_browser": "Browser", + "ui_rss_feed_disabled": "RSS-Feed deaktiviert", + "ui_rss_feed_enabled": "RSS-Feed eingeschaltet", + "ui_account_rss_disabled": "RSS-Feed des Accounts deaktiviert", + "ui_account_rss_enabled": "RSS-Feed des Accounts eingeschaltet", + "ui_feeds_per_account": "Feeds pro Konto", + "ui_items_per_feed": "Einträge pro Feed", + "ui_minimum_poll_minutes": "Mindestabfrage (Minuten)", + "ui_requests_per_minute": "Anfragen pro Minute", + "ui_save_policy": "Richtlinie speichern", + "ui_older": "Älter", + "ui_loading_videos": "Lade Videos", + "ui_simple_view": "Einfache Ansicht", + "ui_all_formats_count": "Alle Formate ({count})", + "ui_danmaku_on": "Danmaku ein", + "ui_danmaku": "Danmaku", + "ui_cancelling": "Wird abgebrochen…", + "ui_clearing": "Wird geleert…", + "ui_new_upload": "Neuer Upload", + "ui_new_uploads": "{count} neue Uploads", + "ui_checking_availability": "Überprüfe Verfügbarkeit…", + "ui_opening": "Wird geöffnet…", + "ui_hide_guide": "Anleitung ausblenden", + "ui_need_help": "Benötigst du Hilfe?", + "ui_playback_unavailable_for_short": "Wiedergabe für dieses Short nicht verfügbar", + "ui_unsubscribed_from": "{name} deabonniert", + "ui_subscribed_to": "{name} abonniert", + "ui_videos_waiting": "Neue Videos warten", + "ui_best_quality": "Beste Qualität", + "ui_best_sound": "Bester Ton", + "ui_recommended_quality": "Empfohlen ({height}p)", + "ui_balanced": "Ausgeglichen", + "ui_small_size_360p": "Kleine Größe (360p)", + "ui_small_size": "Kleine Größe", + "ui_removed_from_playlist": "Aus {name} entfernt", + "ui_saved_to_playlist": "In {name} gespeichert", + "ui_playlist_named_created": "Wiedergabeliste \"{name}\" erstellt", + "ui_watch_later_update_failed": "Später ansehen konnte nicht aktualisiert werden", + "ui_show_current_segment_next_to_time": "Zeige das aktuelle Segment neben der Zeit", + "ui_show_sponsorblock_chapters": "Zeige das SponsorBlock Kapitel an", + "ui_show_full_video_labels": "Label der vollständigen Videos anzeigen", + "ui_manual_skip_full_video_labels": "Label von vollständigen Videos manuell überspringen", + "ui_skip_non_music_on_music_videos": "Überspringe Abschnitte ohne Musik nur in Musikvideos", + "ui_mute_segments_instead_of_skipping": "Segmente stumm schalten, statt sie zu überspringen", + "ui_report_count": "{count} Meldung", + "ui_reports_count": "{count} Meldungen", + "ui_playlist": "Wiedergabeliste", + "ui_offline": "Offline", + "ui_episode_count": "{count} Episode", + "ui_episodes_count": "{count} Episoden", + "ui_ending_video": "Video beenden", + "ui_backup_archive": "Archiv sichern", + "ui_family_list_blocked": "Dieser Kanal ist nicht in deiner Familienliste enthalten. Ein Elternteil kann ihn über die Whitelist hinzufügen.", + "ui_views": "Aufrufe", + "ui_no_watch_date_range": "Kein Zeitbereich für die Wiedergabe verfügbar", + "data_portability_formats_failed": "Laden der unterstützten Formate nicht möglich.", + "ui_downloader_insufficient_storage": "Die Instanz hat nicht genug Speicherplatz um diesen Download abzuschließen.", + "ui_downloader_insufficient_storage_help": "Gebe Speicherplatz frei und versuche es nochmal. Wenn das Problem weiterhin besteht, kontaktiere den Administrator der Instanz mit dem Code: insufficient_storage (HTTP 507).", + "portability_progress_of": "{processed} von {total}", + "portability_progress_records": "Aufzeichnungen", + "portability_progress_categories": "Kategorien", + "portability_progress_bytes": "Bytes", + "ui_download_started": "Download begonnen: {selected}", + "ui_download_failed": "Download fehlgeschlagen.", + "portability_issue_detected": "Fehler erkannt: {code}", + "ui_remote_browser_error": "Der externe Browser hat einen Fehler zurückgegeben.", + "ui_remote_phase_idle": "Leerlauf", + "ui_remote_phase_connecting": "Verbinde", + "ui_remote_phase_opening": "Wird geöffnet", + "ui_remote_phase_awaiting_login": "Auf Anmeldung warten", + "ui_remote_phase_capturing_session": "Sitzung wird aufgenommen", + "ui_remote_phase_connected": "Verbunden", + "ui_remote_phase_closed": "Geschlossen", + "ui_remote_phase_error": "Fehler", + "watch_share_source_link": "{provider} Link teilen", + "watch_share_typetype_link": "TypeType Link teilen", + "ui_close_player": "Player schließen", + "ui_move_player": "Player bewegen", + "portability_preparing_upload": "Kontodaten werden vorbereitet und hochgeladen...", + "portability_takeout_metadata_limit": "Die Kontodaten in diesem Archiv überschreiten die Importgrenzen oder sind verschlüsselt. Exportiere YouTube separat in kleineren ZIP-Dateien.", + "portability_takeout_no_metadata": "Keine YouTube-Kontodaten gefunden. Wähle eine originale Takeout-ZIP mit deinem Verlauf, deinen Abonnements oder deinen Wiedergabelisten statt eines reinen Video-Teils oder einer ZIP-Datei, die weitere ZIP-Dateien enthält." +} diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index bd3e971a..043ee004 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -99,6 +99,8 @@ "watch_saved_later": "Saved to Watch later", "watch_saving": "Saving...", "watch_share": "Share", + "watch_share_source_link": "Share {provider} link", + "watch_share_typetype_link": "Share TypeType link", "watch_show_less": "Show less", "watch_show_more": "Show more", "watch_show_replies": "Show replies", @@ -266,6 +268,9 @@ "portability_import_completed": "Import completed", "portability_items": "items", "portability_no_import_format": "No import format is available.", + "portability_preparing_upload": "Preparing and uploading account data...", + "portability_takeout_metadata_limit": "The account data in this archive exceeds the import limits or is encrypted. Export YouTube separately with smaller ZIP parts.", + "portability_takeout_no_metadata": "No YouTube account data was found. Select an original Takeout ZIP containing your history, subscriptions or playlists, rather than a video-only part or a ZIP containing other ZIPs.", "portability_import_title": "Import data", "portability_import_description": "Preview and choose what to restore.", "portability_import_from": "Import from", @@ -506,6 +511,7 @@ "ui_click_deselect_all_then_select_only_youtube_and_my_activity": "Click \"Deselect all\", then select only YouTube and My Activity", "ui_close_download": "Close download", "ui_close_filters": "Close filters", + "ui_close_player": "Close player", "ui_close_picker": "Close picker", "ui_collection": "Collection", "ui_community_only": "Community only", @@ -619,6 +625,7 @@ "ui_members_only": "Members only", "ui_minimum_segment_duration": "Minimum segment duration", "ui_move_data_between_supported_apps": "Move data between supported apps", + "ui_move_player": "Move player", "ui_move_down": "Move down", "ui_move_up": "Move up", "ui_name": "Name", diff --git a/apps/web/messages/fr.json b/apps/web/messages/fr.json index b280d451..be1ac33a 100644 --- a/apps/web/messages/fr.json +++ b/apps/web/messages/fr.json @@ -86,7 +86,7 @@ "watch_link_copied": "Lien copié dans le presse-papiers", "watch_load_more_replies": "Charger plus de réponses", "watch_more": "Plus", - "watch_pinned": "Épinglé", + "watch_pinned": "Pin", "watch_removed_favorites": "Retiré des favoris", "watch_removed_later": "Retiré de À regarder plus tard", "watch_remove_later": "Retirer de À regarder plus tard", @@ -99,6 +99,8 @@ "watch_saved_later": "Ajouté à À regarder plus tard", "watch_saving": "Enregistrement...", "watch_share": "Partager", + "watch_share_source_link": "Partager le lien {provider}", + "watch_share_typetype_link": "Partager le lien TypeType", "watch_show_less": "Afficher moins", "watch_show_more": "Afficher plus", "watch_show_replies": "Afficher les réponses", @@ -266,6 +268,9 @@ "portability_import_completed": "Import terminé", "portability_items": "éléments", "portability_no_import_format": "Aucun format d'import n'est disponible.", + "portability_preparing_upload": "Préparation et envoi des données du compte...", + "portability_takeout_metadata_limit": "Les données de compte de cette archive dépassent les limites d'import ou sont chiffrées. Exportez YouTube séparément avec des parties ZIP plus petites.", + "portability_takeout_no_metadata": "Aucune donnée de compte YouTube trouvée. Sélectionnez un ZIP Takeout original contenant votre historique, vos abonnements ou vos playlists, plutôt qu'une partie contenant uniquement des vidéos ou un ZIP contenant d'autres ZIP.", "portability_import_title": "Importer des données", "portability_import_description": "Prévisualisez les données et choisissez ce qui doit être restauré.", "portability_import_from": "Importer depuis", @@ -506,6 +511,7 @@ "ui_click_deselect_all_then_select_only_youtube_and_my_activity": "Click \"Deselect all\", then select only YouTube and My Activity", "ui_close_download": "Fermer download", "ui_close_filters": "Fermer filters", + "ui_close_player": "Fermer le lecteur", "ui_close_picker": "Fermer picker", "ui_collection": "Collection", "ui_community_only": "Community only", @@ -619,6 +625,7 @@ "ui_members_only": "Members only", "ui_minimum_segment_duration": "Minimum segment duration", "ui_move_data_between_supported_apps": "Move data between supported apps", + "ui_move_player": "Déplacer le lecteur", "ui_move_down": "Move down", "ui_move_up": "Move up", "ui_name": "Nom", diff --git a/apps/web/package.json b/apps/web/package.json index 9c99ea8c..becf6fd0 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,7 +1,7 @@ { "name": "@typetype/web", "private": true, - "version": "1.7.1", + "version": "1.8.0", "type": "module", "scripts": { "dev": "vite", @@ -14,8 +14,9 @@ "dependencies": { "@tanstack/react-query": "^5.101.2", "@tanstack/react-router": "^1.170.17", - "@typetype/mse": "0.1.57", + "@typetype/mse": "0.1.59", "@vidstack/react": "1.12.13", + "@zip.js/zip.js": "^2.11.2", "dashjs": "^5.2.0", "hls.js": "1.6.16", "lucide-react": "^1.24.0", diff --git a/apps/web/project.inlang/settings.json b/apps/web/project.inlang/settings.json index d4485822..d5be4533 100644 --- a/apps/web/project.inlang/settings.json +++ b/apps/web/project.inlang/settings.json @@ -1,7 +1,7 @@ { "$schema": "https://inlang.com/schema/project-settings", "baseLocale": "en", - "locales": ["en", "fr"], + "locales": ["en", "fr", "de"], "modules": ["https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4.4.0/dist/index.js"], "plugin.inlang.messageFormat": { "pathPattern": "./messages/{locale}.json", diff --git a/apps/web/public/THIRD_PARTY_NOTICES.txt b/apps/web/public/THIRD_PARTY_NOTICES.txt index dfcde846..1fc99a96 100644 --- a/apps/web/public/THIRD_PARTY_NOTICES.txt +++ b/apps/web/public/THIRD_PARTY_NOTICES.txt @@ -1,5 +1,33 @@ TypeType Frontend includes software distributed under third-party licenses. +zip.js +https://github.com/gildas-lormeau/zip.js +BSD 3-Clause License +Copyright (c) 2023, Gildas Lormeau + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Paraglide JS Copyright (c) 2025 Opral US Inc. https://github.com/opral/paraglide-js diff --git a/apps/web/src/components/audio-play-button.tsx b/apps/web/src/components/audio-play-button.tsx index ca9c28b9..036006a7 100644 --- a/apps/web/src/components/audio-play-button.tsx +++ b/apps/web/src/components/audio-play-button.tsx @@ -1,18 +1,26 @@ import { useInterfaceLocale } from "../hooks/use-interface-locale"; +import { useVideoPaused } from "../hooks/use-video-paused"; import { requestSabrVidstackPlayback } from "../lib/sabr-vidstack-bridge"; import { useMediaRemote, useMediaState } from "../lib/vidstack"; import { m } from "../paraglide/messages.js"; import { AudioPauseIcon, AudioPlayIcon } from "./audio-control-icons"; -export function AudioPlayButton({ video = null }: { video?: HTMLVideoElement | null }) { +export function AudioPlayButton({ + video = null, + disabled = false, +}: { + video?: HTMLVideoElement | null; + disabled?: boolean; +}) { const { locale } = useInterfaceLocale(); const remote = useMediaRemote(); - const paused = useMediaState("paused"); + const mediaPaused = useMediaState("paused"); + const paused = useVideoPaused(video, mediaPaused); const Icon = paused ? AudioPlayIcon : AudioPauseIcon; const label = paused ? m.player_play({}, { locale }) : m.player_pause({}, { locale }); const togglePlayback = async () => { - if (video) return requestSabrVidstackPlayback(video, paused, true); + if (video) return requestSabrVidstackPlayback(video, video.paused, true); if (paused) await remote.play(); else await remote.pause(); }; @@ -23,6 +31,7 @@ export function AudioPlayButton({ video = null }: { video?: HTMLVideoElement | n className="typetype-audio-play-button" aria-label={label} title={label} + disabled={disabled} onClickCapture={(event) => { event.stopPropagation(); void togglePlayback().catch(() => {}); diff --git a/apps/web/src/components/audio-seek-button.tsx b/apps/web/src/components/audio-seek-button.tsx index 4bd1199a..b44b2b7f 100644 --- a/apps/web/src/components/audio-seek-button.tsx +++ b/apps/web/src/components/audio-seek-button.tsx @@ -23,7 +23,7 @@ export function AudioSeekButton({ direction, disabled = false, video = null }: P const Icon = direction === "backward" ? AudioSeekBackward10Icon : AudioSeekForward10Icon; const seek = () => { - const target = currentTime + seconds; + const target = (video?.currentTime ?? currentTime) + seconds; const bounded = Math.min(Math.max(target, 0), duration > 0 ? duration : target); if (video && requestSabrSeek(video, bounded)) return; remote.seek(bounded); diff --git a/apps/web/src/components/channel-filter-bar.tsx b/apps/web/src/components/channel-filter-bar.tsx index 540148b5..386b0b58 100644 --- a/apps/web/src/components/channel-filter-bar.tsx +++ b/apps/web/src/components/channel-filter-bar.tsx @@ -54,13 +54,13 @@ export function ChannelFilterBar({
{searchAvailable && ( -
+
{channelTabs().map((item) => (
)} {!isSearching && tab === "videos" && ( -
+
{CHANNEL_SORT_OPTIONS.map((option) => { const selected = option.value === sort; return ( @@ -112,7 +112,7 @@ export function ChannelFilterBar({ key={option.value} type="button" onClick={() => onSortChange(channelSortOrDefault(option.value))} - className={`border-border-strong border-b py-1 font-medium transition-colors ${ + className={`typetype-adaptive-control inline-flex max-w-full border-border-strong border-b py-1 font-medium transition-colors ${ selected ? "border-fg text-fg" : "border-transparent text-fg-soft hover:text-fg" }`} > diff --git a/apps/web/src/components/channel-page-content.tsx b/apps/web/src/components/channel-page-content.tsx index 94503d79..c6ac5745 100644 --- a/apps/web/src/components/channel-page-content.tsx +++ b/apps/web/src/components/channel-page-content.tsx @@ -2,11 +2,13 @@ import { useMemo } from "react"; import { useBlockedFilter } from "../hooks/use-blocked-filter"; import { useChannel } from "../hooks/use-channel"; import { useDocumentTitle } from "../hooks/use-document-title"; +import { useVideoProgressMap } from "../hooks/use-progress"; import { useSubscriptions } from "../hooks/use-subscriptions"; import { isChannelNotAllowedError } from "../lib/allow-list-error"; import type { ChannelSort } from "../lib/api-discovery"; import type { ChannelTab } from "../lib/channel-route-url"; import { detectProvider } from "../lib/provider"; +import { videoProgressUrl } from "../lib/video-progress"; import { m } from "../paraglide/messages.js"; import { ChannelFilterBar } from "./channel-filter-bar"; import { ChannelPageHeader } from "./channel-page-header"; @@ -47,6 +49,7 @@ export function ChannelPageContent({ sourceUrl, sort, searchQuery, tab, onNaviga const subscribed = isSubscribed(sourceUrl); const searchAvailable = detectProvider(sourceUrl) === "youtube"; const visibleVideos = useMemo(() => filter(videos), [filter, videos]); + const progressByUrl = useVideoProgressMap(visibleVideos); const isInitialLoading = isLoading && !meta; const isReplacingVideos = isFetching && !isFetchingNextPage && visibleVideos.length === 0; @@ -144,7 +147,10 @@ export function ChannelPageContent({ sourceUrl, sort, searchQuery, tab, onNaviga className="animate-card-pop-in" style={{ animationDelay: `${Math.min(index * 45, 270)}ms` }} > - +
))}
diff --git a/apps/web/src/components/compact-player-controls.tsx b/apps/web/src/components/compact-player-controls.tsx new file mode 100644 index 00000000..7b5bea9d --- /dev/null +++ b/apps/web/src/components/compact-player-controls.tsx @@ -0,0 +1,32 @@ +import { Volume2, VolumeX } from "lucide-react"; +import { useInterfaceLocale } from "../hooks/use-interface-locale"; +import { MuteButton, useMediaState } from "../lib/vidstack"; +import { m } from "../paraglide/messages.js"; +import { AudioPlayButton } from "./audio-play-button"; +import { AudioSeekButton } from "./audio-seek-button"; + +export function CompactPlayerControls({ + video, + seeking, +}: { + video: HTMLVideoElement | null; + seeking: boolean; +}) { + const { locale } = useInterfaceLocale(); + const muted = useMediaState("muted"); + const volume = useMediaState("volume"); + const canSeek = useMediaState("canSeek"); + const silent = muted || volume === 0; + const Icon = silent ? VolumeX : Volume2; + const label = silent ? m.player_unmute({}, { locale }) : m.player_mute({}, { locale }); + return ( +
+ + + + + +
+ ); +} diff --git a/apps/web/src/components/history-card.tsx b/apps/web/src/components/history-card.tsx index 0915c39d..89dc2780 100644 --- a/apps/web/src/components/history-card.tsx +++ b/apps/web/src/components/history-card.tsx @@ -41,7 +41,7 @@ export function HistoryCard({ item, onRemove }: HistoryCardProps) { {branding.title} diff --git a/apps/web/src/components/interface-language-picker.tsx b/apps/web/src/components/interface-language-picker.tsx index 35676b7a..e4f68675 100644 --- a/apps/web/src/components/interface-language-picker.tsx +++ b/apps/web/src/components/interface-language-picker.tsx @@ -4,13 +4,27 @@ import { useInterfaceLocale } from "../hooks/use-interface-locale"; import { m } from "../paraglide/messages.js"; import type { Locale } from "../paraglide/runtime.js"; -const OPTIONS: Locale[] = ["en", "fr"]; +const OPTIONS: Locale[] = ["en", "fr", "de"]; function languageName(locale: Locale): string { - return locale === "fr" ? m.language_french() : m.language_english(); + if (locale === "fr") return m.language_french(); + if (locale === "de") return "Deutsch"; + return m.language_english(); } function LanguageFlag({ locale }: { locale: Locale }) { + if (locale === "de") { + return ( +