screentinker/frontend/js/i18n/de.js
ScreenTinker 388e9e6ab8 Admin password reset + widget visibility fix
Password reset for other users:
- New PUT /api/auth/users/:id/password endpoint
- Superadmin can reset any local user; admin can reset role=user
  members of teams they own only (cannot reset other admins or
  superadmins, cannot self-reset — that goes through PUT /me with
  current_password)
- OAuth users are excluded (no password to reset)
- Rate-limited 20 req/min/IP to cap blast radius if an admin session
  is compromised
- Explicit audit log entry "password_reset_for_user / target: <email>"
  on every reset; activity logger's summarizeAction never reads the
  password field, so the password value is not stored anywhere

Frontend: Reset Password button in the Admin user table and Settings
> User Management table. Shown only for local-auth users that aren't
the current user; prompts for an 8+ char password.

Widgets visibility fix:
- routes/widgets.js had `const isAdmin = req.user.role === 'superadmin'`
  which mislabeled superadmin as admin and silently restricted real
  admins (role=admin) to seeing only their own widgets. Now matches
  /auth/users behavior: superadmin sees all, admin sees own + public
  + widgets owned by members of teams they own, user sees own + public.

7 new i18n keys (admin.reset_password, admin.prompt_reset_password,
admin.toast.password_min_8, admin.toast.password_reset, and the
matching settings.user.* / settings.toast.* trio). 1024 keys total,
parity 100% across en/es/fr/de/pt.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 20:45:25 -05:00

1073 lines
56 KiB
JavaScript

// German translations. Reviewed for UI register (formal Sie is the de-facto
// standard for B2B software in DACH). Native review recommended before
// publicizing as fully supported.
export default {
// Nav
'nav.displays': 'Bildschirme',
'nav.content': 'Inhalt',
'nav.playlists': 'Playlists',
'nav.layouts': 'Layouts',
'nav.widgets': 'Widgets',
'nav.schedule': 'Zeitplan',
'nav.walls': 'Videowände',
'nav.reports': 'Berichte',
'nav.kiosk': 'Kiosk',
'nav.designer': 'Designer',
'nav.activity': 'Aktivität',
'nav.teams': 'Teams',
'nav.help': 'Hilfe',
'nav.settings': 'Einstellungen',
'nav.subscription': 'Abonnement',
'nav.admin': 'Admin',
// Common
'common.save': 'Speichern',
'common.cancel': 'Abbrechen',
'common.delete': 'Löschen',
'common.edit': 'Bearbeiten',
'common.done': 'Fertig',
'common.loading': 'Wird geladen...',
'common.connected': 'Verbunden',
'common.disconnected': 'Getrennt',
'common.never': 'Nie',
'common.just_now': 'Gerade eben',
'common.minutes_ago': 'vor {n}m',
'common.hours_ago': 'vor {n}h',
'common.days_ago': 'vor {n}t',
'common.unknown': 'Unbekannt',
// Auth
'auth.sign_in': 'Anmelden',
'auth.sign_out': 'Abmelden',
'auth.create_account': 'Konto erstellen',
'auth.create_admin_account': 'Administratorkonto erstellen',
'auth.email': 'E-Mail',
'auth.password': 'Passwort',
'auth.name': 'Name',
'auth.placeholder_email': 'sie@beispiel.com',
'auth.placeholder_password': '••••••••',
'auth.placeholder_name': 'Ihr Name',
'auth.placeholder_register_password': 'Mindestens 6 Zeichen',
'auth.subtitle_setup': 'Erstellen Sie Ihr Administratorkonto, um zu beginnen',
'auth.subtitle_signin': 'Melden Sie sich an, um Ihre Bildschirme zu verwalten',
'auth.trial_notice': 'Neue Konten erhalten einen kostenlosen 14-Tage-Pro-Test',
'auth.divider_or': 'ODER',
'auth.signin_google': 'Mit Google anmelden',
'auth.signin_microsoft': 'Mit Microsoft anmelden',
'auth.back_to_signin': 'Zurück zur Anmeldung',
'auth.support_access': 'Support-Zugang',
'auth.support_token_placeholder': 'Support-Token einfügen',
'auth.support_authenticate': 'Mit Support-Token authentifizieren',
'auth.terms': 'Nutzungsbedingungen',
'auth.privacy': 'Datenschutzerklärung',
'auth.error_email_password_required': 'E-Mail und Passwort sind erforderlich',
'auth.error_password_min_6': 'Das Passwort muss mindestens 6 Zeichen lang sein',
'auth.error_login_failed': 'Anmeldung fehlgeschlagen',
'auth.error_registration_failed': 'Registrierung fehlgeschlagen',
'auth.error_paste_support_token': 'Fügen Sie einen Support-Token ein',
'auth.error_support_failed': 'Support-Anmeldung fehlgeschlagen',
'auth.error_google_failed': 'Google-Anmeldung fehlgeschlagen',
'auth.error_microsoft_failed': 'Microsoft-Anmeldung fehlgeschlagen',
// Dashboard
'dashboard.title': 'Bildschirme',
'dashboard.subtitle': 'Verwalten Sie Ihre Remote-Bildschirme',
'dashboard.help_tip': 'Ihre gekoppelten Bildschirmgeräte. Grün = online, rot = offline. Klicken Sie auf ein Gerät, um seine Playlist zu verwalten, die Telemetrie anzuzeigen oder die Fernsteuerung zu nutzen.',
'dashboard.add': 'Bildschirm hinzufügen',
'dashboard.create_group': '+ Gruppe',
'dashboard.search': 'Bildschirme suchen...',
'dashboard.all_status': 'Alle Status',
'dashboard.online': 'Online',
'dashboard.offline': 'Offline',
'dashboard.awaiting_pairing': 'Wartet auf Kopplung',
'dashboard.no_preview': 'Keine Vorschau verfügbar',
'dashboard.total_displays': 'Bildschirme gesamt',
'dashboard.ungrouped': 'Nicht gruppiert',
'dashboard.no_displays': 'Noch keine Bildschirme',
'dashboard.no_displays_desc': 'Installieren Sie die ScreenTinker-App auf Ihrem TV und koppeln Sie ihn mit dem obigen Button.',
'dashboard.failed_to_load': 'Bildschirme konnten nicht geladen werden',
'dashboard.unknown_playlist': 'Unbekannte Playlist',
'dashboard.mixed_playlists': 'Gemischte Playlists',
'dashboard.playlist_label': 'Playlist: {name}',
'dashboard.devices_count_one': '{n} Gerät',
'dashboard.devices_count_other': '{n} Geräte',
'dashboard.online_count': '{n} online',
'dashboard.set_playlist_placeholder': 'Playlist setzen...',
'dashboard.send_command_placeholder': 'Befehl senden...',
'dashboard.manage': 'Verwalten',
'dashboard.manage_tooltip': 'Geräte hinzufügen/entfernen',
'dashboard.delete_group_tooltip': 'Gruppe löschen',
'dashboard.no_devices_in_group': 'Keine Geräte in dieser Gruppe. Klicken Sie auf Verwalten, um welche hinzuzufügen.',
'dashboard.manage_group_subtitle': 'Markieren Sie Geräte, um sie dieser Gruppe hinzuzufügen',
'dashboard.draft_suffix': '(Entwurf)',
'dashboard.cmd.screen_on': 'Bildschirm an',
'dashboard.cmd.screen_off': 'Bildschirm aus',
'dashboard.cmd.restart_app': 'App neu starten',
'dashboard.cmd.check_update': 'Update prüfen',
'dashboard.cmd.reboot': 'Neustart',
'dashboard.cmd.shutdown': 'Herunterfahren',
'dashboard.prompt_group_name': 'Gruppenname:',
'dashboard.error_pairing_code': 'Geben Sie einen gültigen 6-stelligen Kopplungscode ein',
'dashboard.confirm_add_to_group': '{name} ist bereits in: {groups}\n\nAuch zu „{target}“ hinzufügen?',
'dashboard.confirm_assign_playlist': 'Playlist „{playlist}“ allen Geräten in „{group}“ zuweisen?',
'dashboard.confirm_destructive_command': '{cmd} alle {n} Geräte in „{group}“?\n\nDies kann nicht rückgängig gemacht werden.',
'dashboard.confirm_delete_group': 'Diese Gruppe löschen? Geräte sind nicht betroffen.',
'dashboard.toast.display_paired': 'Bildschirm erfolgreich gekoppelt!',
'dashboard.toast.group_created': 'Gruppe erstellt',
'dashboard.toast.group_deleted': 'Gruppe gelöscht',
'dashboard.toast.already_in_group': '{name} ist bereits in {group}',
'dashboard.toast.moved_device': '{name} nach {group} verschoben',
'dashboard.toast.removed_device_one': '{name} aus 1 Gruppe entfernt',
'dashboard.toast.removed_device_other': '{name} aus {n} Gruppen entfernt',
'dashboard.toast.playlist_assigned_one': 'Playlist 1 Gerät zugewiesen',
'dashboard.toast.playlist_assigned_other': 'Playlist {n} Geräten zugewiesen',
'dashboard.toast.command_sent': '{cmd} an {sent}/{total} Geräte gesendet',
'dashboard.toast.command_sent_with_offline': '{cmd} an {sent}/{total} Geräte gesendet ({offline} offline)',
// Content library
'content.title': 'Inhaltsbibliothek',
'content.subtitle': 'Laden Sie Ihre Mediendateien hoch und verwalten Sie sie',
'content.help_tip': 'Laden Sie hier Videos und Bilder hoch. Wählen Sie mehrere Dateien für einen Sammel-Upload. Verwenden Sie Remote-URL für externe Quellen. Klicken Sie auf eine Miniaturansicht für die Vorschau.',
'content.drop': 'Dateien hier ablegen oder zum Hochladen klicken',
'content.upload_hint': 'Unterstützt MP4, WebM, AVI, MKV, JPEG, PNG, GIF, WebP',
'content.upload_progress': 'Wird hochgeladen...',
'content.upload_progress_named': '{name} wird hochgeladen...',
'content.upload_progress_named_pct': '{name} wird hochgeladen... {pct}%',
'content.remote_url': 'Remote-URL',
'content.remote_desc': 'Direkt von einer URL streamen. Spart lokale Bandbreite.',
'content.remote_url_placeholder': 'https://beispiel.com/video.mp4',
'content.remote_name_placeholder': 'Anzeigename (optional)',
'content.remote_add_btn': 'Remote-URL hinzufügen',
'content.youtube': 'YouTube',
'content.youtube_desc': 'Betten Sie ein YouTube-Video auf Ihren Bildschirmen ein.',
'content.youtube_url_placeholder': 'https://youtube.com/watch?v=...',
'content.youtube_name_placeholder': 'Anzeigename (optional)',
'content.youtube_add_btn': 'YouTube-Video hinzufügen',
'content.search_placeholder': 'Inhalt suchen...',
'content.new_folder_btn': '+ Neuer Ordner',
'content.breadcrumb_root': 'Alle Inhalte',
'content.rename_btn': 'Umbenennen',
'content.delete_folder_btn': 'Ordner löschen',
'content.prompt_folder_name': 'Ordnername:',
'content.prompt_rename_folder': 'Ordner umbenennen:',
'content.confirm_delete_folder': 'Diesen Ordner löschen? Inhalte werden in den Hauptordner verschoben. Unterordner werden ebenfalls gelöscht.',
'content.empty_folder_title': 'Dieser Ordner ist leer',
'content.empty_folder_desc': 'Inhalte hierher ziehen oder die Aktion Verschieben verwenden.',
'content.no_content': 'Noch keine Inhalte',
'content.no_content_desc': 'Laden Sie Videos und Bilder hoch, um zu beginnen.',
'content.failed_to_load': 'Inhalt konnte nicht geladen werden',
'content.type_youtube': 'YouTube',
'content.type_remote': 'Remote-URL',
'content.type_remote_short': 'Remote',
'content.type_video': 'Video',
'content.type_image': 'Bild',
'content.btn_edit': 'Bearbeiten',
'content.btn_delete': 'Löschen',
'content.btn_confirm_delete': 'Löschen bestätigen?',
'content.btn_deleting': 'Wird gelöscht...',
'content.edit_modal_title': 'Inhalt bearbeiten',
'content.label_filename': 'Dateiname / Anzeigename',
'content.label_remote_url_field': 'Remote-URL',
'content.label_mime_type': 'MIME-Typ',
'content.label_folder': 'Ordner',
'content.label_replace_file': 'Datei ersetzen',
'content.replace_file_hint': 'Leer lassen, um die aktuelle Datei zu behalten',
'content.folder_root_option': '— Hauptordner —',
'content.save_changes': 'Änderungen speichern',
'content.mime.video_mp4': 'Video (MP4)',
'content.mime.video_webm': 'Video (WebM)',
'content.mime.image_jpeg': 'Bild (JPEG)',
'content.mime.image_png': 'Bild (PNG)',
'content.mime.image_gif': 'Bild (GIF)',
'content.mime.image_webp': 'Bild (WebP)',
'content.error_enter_url': 'Geben Sie eine URL ein',
'content.error_enter_youtube_url': 'Geben Sie eine YouTube-URL ein',
'content.error_update_failed': 'Aktualisierung fehlgeschlagen',
'content.toast.remote_added': 'Remote-Inhalt hinzugefügt',
'content.toast.youtube_added': 'YouTube-Video hinzugefügt',
'content.toast.deleted': 'Inhalt gelöscht',
'content.toast.updated': 'Inhalt aktualisiert',
'content.toast.uploaded_named': '{name} erfolgreich hochgeladen',
'content.toast.upload_failed_named': '{name} konnte nicht hochgeladen werden: {error}',
'content.toast.folder_created_named': 'Ordner „{name}“ erstellt',
'content.toast.folder_renamed': 'Ordner umbenannt',
'content.toast.folder_deleted': 'Ordner gelöscht',
'content.toast.moved': 'Verschoben',
'content.toast.moved_to_root': 'In den Hauptordner verschoben',
// Device detail
'device.back': 'Zurück zu Bildschirmen',
'device.owner_label': 'Besitzer: {owner}',
'device.rename': 'Umbenennen',
'device.screenshot_btn': 'Screenshot',
'device.remove': 'Entfernen',
'device.click_to_confirm': 'Erneut klicken zum Bestätigen',
'device.prompt_new_name': 'Neuen Namen eingeben:',
'device.confirm_discard_draft': 'Alle nicht veröffentlichten Änderungen verwerfen und zur letzten veröffentlichten Version zurückkehren?',
'device.failed_load': 'Gerät konnte nicht geladen werden',
'device.no_screenshot': 'Kein Screenshot verfügbar. Klicken Sie auf „Screenshot", um einen aufzunehmen.',
'device.no_content_assigned': 'Kein Inhalt zugewiesen',
'device.now_playing_id': 'Wiedergabe: {id}',
'device.playlist_count_one': '1 Element in der Playlist',
'device.playlist_count_other': '{n} Elemente in der Playlist',
'device.tab.now_playing': 'Aktuelle Wiedergabe',
'device.tab.now_playing_tip': 'Live-Screenshot dessen, was aktuell auf diesem Gerät angezeigt wird.',
'device.tab.playlist': 'Playlist',
'device.tab.playlist_tip': 'Diesem Gerät zugewiesener Inhalt. Ziehen zum Sortieren. Medien, Widgets oder Kioskseiten hinzufügen.',
'device.tab.info': 'Geräteinfos',
'device.tab.info_tip': 'Hardware-Telemetrie, Ausrichtung, Notizen und Gerätesteuerung.',
'device.tab.remote': 'Fernsteuerung',
'device.tab.remote_tip': 'Bildschirm in Echtzeit anzeigen und Tastendrücke senden. Funktioniert mit Android-APK und Web-Player.',
'device.draft.banner_title': 'Unveröffentlichte Änderungen',
'device.draft.devices_showing_published': 'Geräte zeigen weiterhin die zuletzt veröffentlichte Version.',
'device.draft.never_published': 'Diese Playlist wurde noch nie veröffentlicht. Geräte zeigen nichts an, bis Sie veröffentlichen.',
'device.draft.discard': 'Verwerfen',
'device.draft.publish': 'Veröffentlichen',
'device.draft.publishing': 'Wird veröffentlicht...',
'device.layout.label': 'Bildschirm-Layout',
'device.layout.fullscreen_default': 'Vollbild (Standard)',
'device.layout.zones_count': '{name} ({n} Zonen)',
'device.layout.template_zones_count': '[Vorlage] {name} ({n} Zonen)',
'device.layout.apply': 'Anwenden',
'device.playlist.label': 'Playlist',
'device.playlist.no_playlist': 'Keine Playlist',
'device.playlist.copy_to_btn': 'Kopieren nach...',
'device.playlist.add_content_btn': 'Inhalt hinzufügen',
'device.playlist.empty_title': 'Kein Inhalt zugewiesen',
'device.playlist.empty_desc': 'Fügen Sie Inhalt aus Ihrer Bibliothek zur Playlist dieses Bildschirms hinzu.',
'device.playlist_picker.with_count': '{name} — {n} Elemente',
'device.playlist_picker.with_auto': '{name} (auto) — {n} Elemente',
'device.info.status': 'Status',
'device.info.ip_address': 'IP-Adresse',
'device.info.battery': 'Akku',
'device.info.storage': 'Speicher',
'device.info.size_free': '{size} frei',
'device.info.player_type': 'Player-Typ',
'device.info.web_player': 'Web-Player',
'device.info.wifi': 'WLAN',
'device.info.uptime': 'Betriebszeit',
'device.info.android_version': 'Android-Version',
'device.info.app_version': 'App-Version',
'device.info.screen_resolution': 'Bildschirmauflösung',
'device.info.ram': 'RAM',
'device.info.cpu_usage': 'CPU-Auslastung',
'device.timeline.title': 'Verfügbarkeit (letzte 24 Stunden)',
'device.timeline.h24_ago': 'vor 24h',
'device.timeline.now': 'Jetzt',
'device.timeline.online': 'Online',
'device.timeline.offline': 'Offline',
'device.timeline.no_data': 'Keine Daten',
'device.timeline.uptime_pct_tracked': '{pct}% Verfügbarkeit ({n}min erfasst)',
'device.timeline.uptime_pct_no_data': '{pct}% Verfügbarkeit (keine Daten)',
'device.form.orientation_label': 'Ausrichtung / Drehung',
'device.form.orientation.landscape': 'Querformat (0°)',
'device.form.orientation.portrait': 'Hochformat (90° im UZS)',
'device.form.orientation.landscape_flipped': 'Querformat gedreht (180°)',
'device.form.orientation.portrait_flipped': 'Hochformat gedreht (270° im UZS)',
'device.form.default_content_label': 'Standardinhalt',
'device.form.default_content_none': 'Keiner ("Warten..." anzeigen)',
'device.form.notes_label': 'Notizen',
'device.form.notes_placeholder': 'Standort, Setup-Details usw.',
'device.form.save_settings': 'Einstellungen speichern',
'device.ctl.reboot_device': 'Gerät neu starten',
'device.ctl.screen_off': 'Bildschirm aus',
'device.ctl.screen_on': 'Bildschirm an',
'device.ctl.launch_player': 'Player starten',
'device.ctl.force_update': 'Update erzwingen',
'device.ctl.shutdown': 'Herunterfahren',
'device.remote.start_prompt': 'Auf „Fernsteuerung starten" klicken zum Beginnen',
'device.remote.start': 'Fernsteuerung starten',
'device.remote.stop': 'Fernsteuerung beenden',
'device.remote.vol_up': 'Vol +',
'device.remote.vol_down': 'Vol -',
'device.remote.home': 'Start',
'device.remote.back': 'Zurück',
'device.remote.recents': 'Zuletzt',
'device.remote.power': 'Power',
'device.remote.ok': 'OK',
'device.remote.settings': 'Einstellungen',
'device.remote.scrn_off': 'Bs. aus',
'device.remote.scrn_on': 'Bs. an',
'device.remote.enable_system_view': 'Systemansicht aktivieren',
'device.remote.system_view_tooltip': 'Fordert den Gerätenutzer auf, Vollbildaufnahme zu erlauben - aktiviert Fernansicht von Startbildschirm, Einstellungen und anderen Apps',
'device.remote.system_view_hint': 'Einmalige Genehmigung am Gerät erforderlich',
'device.remote.waiting_for_approval': 'Warte auf Genehmigung am Gerät...',
'device.remote.system_view_enabled': 'Systemansicht aktiviert',
'device.remote.unlocked_hint': 'Navigation und Systemsteuerung freigeschaltet',
'device.pl_item.widget_with_type': 'Widget ({type})',
'device.pl_item.youtube': 'YouTube',
'device.pl_item.video': 'Video',
'device.pl_item.image': 'Bild',
'device.pl_item.zone_label': 'Zone: {id}',
'device.pl_item.no_zone': 'Keine Zone',
'device.pl_item.mute': 'Stummschalten',
'device.pl_item.unmute': 'Stummschaltung aufheben',
'device.pl_item.remove': 'Entfernen',
'device.copy.no_other_devices': 'Keine anderen Geräte zum Kopieren',
'device.copy.prompt': 'Playlist auf welches Gerät kopieren?\n\n{list}\n\nNummer eingeben:',
'device.copy.invalid_selection': 'Ungültige Auswahl',
'device.copy.toast': '{n} Elemente nach {device} kopiert',
'device.assign.empty_all': 'Noch keine Inhalte, Widgets oder Kioskseiten. Erstellen Sie zuerst etwas!',
'device.assign.modal_title': 'Zur Playlist hinzufügen',
'device.assign.zone_label': 'Zone',
'device.assign.zone_default': 'Standard (Vollbild)',
'device.assign.duration_label': 'Anzeigedauer (Sekunden, für Bilder/Widgets)',
'device.assign.tab.media': 'Medien ({n})',
'device.assign.tab.widgets': 'Widgets ({n})',
'device.assign.tab.kiosk': 'Kiosk ({n})',
'device.assign.no_media': 'Noch keine Medien hochgeladen',
'device.assign.no_widgets': 'Noch keine Widgets erstellt.',
'device.assign.no_kiosk': 'Noch keine Kioskseiten.',
'device.assign.create_one': 'Eines erstellen',
'device.assign.add_selected': 'Auswahl hinzufügen',
'device.assign.select_first': 'Erst etwas auswählen',
'device.assign.kiosk_widget_name': 'Kiosk: {name}',
'device.toast.screenshot_requested': 'Screenshot angefordert',
'device.toast.renamed': 'Bildschirm umbenannt',
'device.toast.removing': 'Wird entfernt...',
'device.toast.removed': 'Bildschirm entfernt',
'device.toast.settings_saved': 'Einstellungen gespeichert',
'device.toast.published': 'Playlist veröffentlicht — Geräte aktualisiert',
'device.toast.draft_discarded': 'Entwurfsänderungen verworfen',
'device.toast.playlist_changed': 'Playlist geändert',
'device.toast.layout_applied': 'Layout angewendet',
'device.toast.switched_to_fullscreen': 'Auf Vollbild umgestellt',
'device.toast.added_to_playlist': 'Zur Playlist hinzugefügt',
'device.toast.unmuted': 'Stummschaltung aufgehoben',
'device.toast.muted': 'Stummgeschaltet',
'device.toast.zone_updated': 'Zone aktualisiert',
'device.toast.removed_from_playlist': 'Inhalt aus Playlist entfernt',
'device.toast.playlist_reordered': 'Playlist neu sortiert',
'device.toast.reboot_sent': 'Neustart-Befehl gesendet',
'device.toast.shutdown_sent': 'Herunterfahren-Befehl gesendet',
'device.toast.screen_off_sent': 'Befehl Bildschirm aus gesendet',
'device.toast.screen_on_sent': 'Befehl Bildschirm an gesendet',
'device.toast.launch_sent': 'Start-Befehl gesendet',
'device.toast.update_triggered': 'Update-Prüfung ausgelöst',
'device.toast.remote_started': 'Fernsteuerungssitzung gestartet',
// Settings
'settings.title': 'Einstellungen',
'settings.subtitle': 'Serverkonfiguration und Setup-Informationen',
'settings.account': 'Konto',
'settings.save_profile': 'Profil speichern',
'settings.change_password': 'Passwort ändern',
'settings.password_min_8': 'Muss mindestens 8 Zeichen lang sein.',
'settings.current_password': 'Aktuelles Passwort',
'settings.new_password': 'Neues Passwort',
'settings.confirm_new_password': 'Neues Passwort bestätigen',
'settings.sso_note': 'Sie melden sich über {provider} an. Verwalten Sie Ihr Passwort dort.',
'settings.license': 'Lizenz',
'settings.license_mit': 'MIT-Lizenz - alle Funktionen enthalten.',
'settings.platform_admin_link': 'Plattform-Admin-Tools sind auf der Seite',
'settings.platform_admin_page_suffix': '.',
'settings.user_management': 'Benutzerverwaltung',
'settings.loading_users': 'Benutzer werden geladen...',
'settings.white_label': 'White Label / Branding',
'settings.white_label_desc': 'Passen Sie das Erscheinungsbild des Dashboards und Players für Ihre Kunden an.',
'settings.brand_name': 'Markenname',
'settings.logo_url': 'Logo-URL',
'settings.primary_color': 'Primärfarbe',
'settings.bg_color': 'Hintergrundfarbe',
'settings.custom_domain': 'Benutzerdefinierte Domain',
'settings.favicon_url': 'Favicon-URL',
'settings.custom_css': 'Benutzerdefiniertes CSS (optional)',
'settings.hide_branding': '„ScreenTinker"-Branding ausblenden',
'settings.save_branding': 'Branding speichern',
'settings.preview': 'Vorschau',
'settings.white_label_enterprise_only': 'Benutzerdefiniertes Branding ist im Enterprise-Plan verfügbar',
'settings.view_plans': 'Pläne ansehen',
'settings.server_info': 'Serverinformationen',
'settings.server_url': 'Server-URL',
'settings.api_endpoint': 'API-Endpunkt',
'settings.server_url_hint': 'Verwenden Sie diese URL beim Einrichten der Android-App',
'settings.setup_guide': 'Setup-Anleitung',
'settings.setup_step_1': 'Installieren Sie die ScreenTinker APK auf Ihrem TV via Sideloading',
'settings.setup_step_2_prefix': 'Öffnen Sie die App und geben Sie diese Server-URL ein:',
'settings.setup_step_3': 'Die App zeigt einen 6-stelligen Kopplungscode an',
'settings.setup_step_4': 'Klicken Sie auf „Bildschirm hinzufügen" und geben Sie den Code ein',
'settings.setup_step_5': 'Inhalte in die Inhaltsbibliothek hochladen',
'settings.setup_step_6': 'Inhalte der Playlist des Bildschirms zuweisen',
'settings.your_data': 'Ihre Daten',
'settings.your_data_desc': 'Exportieren oder importieren Sie Ihre Geräte, Inhalte, Layouts, Zeitpläne und alle Einstellungen. Nutzen Sie dies zur Migration zwischen Cloud und Selfhosted.',
'settings.export_my_data': 'Meine Daten exportieren',
'settings.include_media_zip': 'Mediendateien einschließen (ZIP)',
'settings.import_data': 'Daten importieren',
'settings.language': 'Sprache',
'settings.about': 'Über',
'settings.about_tagline': 'Digital-Signage-Verwaltungssystem.',
'settings.third_party_licenses': 'Drittanbieter-Lizenzen',
'settings.import.reading_file': 'Datei wird gelesen...',
'settings.import.zip_detected': 'ZIP-Export erkannt: <strong>{name}</strong> ({size} MB)<br>Enthält Daten + Mediendateien.',
'settings.import.confirm': 'Import bestätigen',
'settings.import.invalid_file': 'Ungültige Datei. Muss ein ScreenTinker-Export-JSON oder ZIP sein.',
'settings.import.summary_devices': '{n} Geräte',
'settings.import.summary_content': '{n} Inhalte',
'settings.import.summary_widgets': '{n} Widgets',
'settings.import.summary_layouts': '{n} Layouts',
'settings.import.summary_schedules': '{n} Zeitpläne',
'settings.import.summary_walls': '{n} Videowände',
'settings.import.summary_kiosk': '{n} Kioskseiten',
'settings.import.found_summary': 'Gefunden: {summary}.<br>Von: {email} (exportiert {date})',
'settings.import.empty_export': 'leerer Export',
'settings.import.uploading_zip': 'Wird hochgeladen und importiert... Bei großen Dateien kann dies einen Moment dauern.',
'settings.import.importing': 'Wird importiert...',
'settings.import.complete': 'Import abgeschlossen: {imported}.',
'settings.import.pairing_codes_title': 'Geräte-Kopplungscodes:',
'settings.import.pairing_codes_hint': 'Geben Sie diese Codes an jedem Gerät ein, um sie neu zu verknüpfen. Zuweisungen und Zeitpläne bleiben erhalten.',
'settings.import.failed': 'Import fehlgeschlagen',
'settings.import.failed_with_error': 'Import fehlgeschlagen: {error}',
'settings.import.read_failed': 'Datei konnte nicht gelesen werden: {error}',
'settings.toast.support_token_generated': 'Support-Token erstellt (gültig {hours}h)',
'settings.toast.import_success': 'Daten erfolgreich importiert',
'settings.toast.name_required': 'Name darf nicht leer sein',
'settings.toast.profile_saved': 'Profil gespeichert',
'settings.toast.current_password_required': 'Geben Sie Ihr aktuelles Passwort ein',
'settings.toast.new_password_min_8': 'Neues Passwort muss mindestens 8 Zeichen lang sein',
'settings.toast.passwords_dont_match': 'Neue Passwörter stimmen nicht überein',
'settings.toast.password_changed': 'Passwort geändert',
'settings.toast.branding_saved': 'Branding gespeichert',
'settings.toast.preview_applied': 'Vorschau angewendet (zum Zurücksetzen neu laden)',
'settings.toast.plan_updated': 'Plan aktualisiert',
'settings.toast.user_removed': 'Benutzer entfernt',
'settings.user.col_user': 'Benutzer',
'settings.user.col_auth': 'Auth',
'settings.user.col_role': 'Rolle',
'settings.user.col_plan': 'Plan',
'settings.user.col_actions': 'Aktionen',
'settings.user.remove': 'Entfernen',
'settings.user.you': 'Sie',
'settings.user.confirm': 'Bestätigen?',
'settings.user.count_one': '1 Benutzer registriert',
'settings.user.count_other': '{n} Benutzer registriert',
'settings.user.reset_password': 'Passwort zurücksetzen',
'settings.user.prompt_reset_password': 'Geben Sie ein neues Passwort für {email} ein (mindestens 8 Zeichen):',
'settings.toast.password_reset_for_user': 'Passwort zurückgesetzt',
// Widgets
'widget.title': 'Widgets',
'widget.subtitle': 'Fügen Sie Ihren Layouts dynamische Inhalte hinzu',
'widget.help_tip': 'Dynamische Inhaltselemente: Live-Uhren, Wetter, RSS-Ticker, Text, Webseiten und Social-Feeds. Erstellen Sie ein Widget und weisen Sie es einer Geräte-Playlist zu.',
'widget.new_widget': 'Neues Widget',
'widget.configure': 'Widget konfigurieren',
'widget.preview': 'Vorschau',
'widget.preview_title': 'Vorschau',
'widget.close': 'Schließen',
'widget.edit_x': '{type} bearbeiten',
'widget.new_x': 'Neues {type}',
'widget.empty_title': 'Noch keine Widgets',
'widget.empty_desc': 'Erstellen Sie ein Widget, um Ihren Layouts dynamische Inhalte hinzuzufügen.',
'widget.this_widget': 'dieses Widget',
'widget.confirm_delete': '„{name}" löschen? Dies kann nicht rückgängig gemacht werden.',
'widget.toast.saved': 'Widget gespeichert',
'widget.toast.deleted': 'Widget gelöscht',
'widget.toast.preview_failed': 'Vorschau fehlgeschlagen',
'widget.type.clock.name': 'Uhr',
'widget.type.clock.desc': 'Digitaluhr mit Datum',
'widget.type.weather.name': 'Wetter',
'widget.type.weather.desc': 'Aktuelle Wetterbedingungen',
'widget.type.rss.name': 'Nachrichten-Ticker',
'widget.type.rss.desc': 'Scrollender RSS-Feed',
'widget.type.text.name': 'Text/HTML',
'widget.type.text.desc': 'Benutzerdefinierter Text oder HTML-Inhalt',
'widget.type.webpage.name': 'Webseite',
'widget.type.webpage.desc': 'Webseite einbetten',
'widget.type.social.name': 'Social Feed',
'widget.type.social.desc': 'Social-Media-Feed',
'widget.type.directory_board.name': 'Verzeichnistafel',
'widget.type.directory_board.desc': 'Scrollendes Mieter-/Raumverzeichnis für Lobbys',
'widget.field.name': 'Widget-Name',
'widget.field.format': 'Format',
'widget.field.format_12h': '12 Stunden',
'widget.field.format_24h': '24 Stunden',
'widget.field.timezone': 'Zeitzone',
'widget.field.font_size': 'Schriftgröße',
'widget.field.font_size_px': 'Schriftgröße (px)',
'widget.field.color': 'Farbe',
'widget.field.background': 'Hintergrund',
'widget.field.location': 'Standort',
'widget.field.location_placeholder': 'Stadt, Land',
'widget.field.units': 'Einheiten',
'widget.field.units_imperial': 'Imperial (°F)',
'widget.field.units_metric': 'Metrisch (°C)',
'widget.field.feed_url': 'Feed-URL',
'widget.field.scroll_speed_seconds': 'Scroll-Geschwindigkeit (Sekunden)',
'widget.field.max_items': 'Max. Elemente',
'widget.field.html_content': 'HTML-Inhalt',
'widget.field.css_optional': 'CSS (optional)',
'widget.field.url': 'URL',
'widget.field.zoom_pct': 'Zoom (%)',
'widget.field.refresh_interval': 'Aktualisierungsintervall (Sekunden, 0 = nie)',
'widget.field.platform': 'Plattform',
'widget.field.platform_twitter': 'Twitter/X',
'widget.field.platform_instagram': 'Instagram',
'widget.field.query': 'Abfrage',
'widget.field.query_placeholder': '@handle oder #hashtag',
'widget.picker.default_title': 'Bild auswählen',
'widget.picker.select_logo': 'Logo auswählen',
'widget.picker.select_bg_images': 'Hintergrundbilder auswählen',
'widget.picker.search': 'Bilder suchen...',
'widget.picker.no_matches': 'Keine Treffer.',
'widget.picker.no_images': 'Keine Bilder in Ihrer Bibliothek. Laden Sie zuerst Bilder aus der Inhaltsbibliothek hoch.',
'widget.picker.selected_count': '{n} ausgewählt',
'widget.dir.title_label': 'Titel',
'widget.dir.title_placeholder': 'Lincoln Lager',
'widget.dir.logo_label': 'Logo (optional)',
'widget.dir.footer_text_label': 'Fußzeile',
'widget.dir.footer_placeholder': 'Mietanfragen: Kontakt...',
'widget.dir.bg_images_label': 'Hintergrundbilder (optional)',
'widget.dir.bg_images_hint': 'Bilder wechseln alle 15 Sekunden bei 30 % Deckkraft. Mehrere für Rotation hinzufügen.',
'widget.dir.add_bg_image': '+ Hintergrundbild hinzufügen',
'widget.dir.theme': 'Thema',
'widget.dir.theme_dark': 'Dunkel',
'widget.dir.theme_light': 'Hell',
'widget.dir.scroll_speed': 'Scroll-Geschwindigkeit',
'widget.dir.speed_slow': 'Langsam',
'widget.dir.speed_medium': 'Mittel',
'widget.dir.speed_fast': 'Schnell',
'widget.dir.columns': 'Spalten',
'widget.dir.columns_auto': 'Auto',
'widget.dir.categories': 'Kategorien',
'widget.dir.add_category': '+ Kategorie hinzufügen',
'widget.dir.add_entry': '+ Eintrag hinzufügen',
'widget.dir.empty_categories': 'Fügen Sie Ihre erste Etage oder Abteilung hinzu, um zu beginnen',
'widget.dir.no_entries': 'Noch keine Einträge',
'widget.dir.entry': 'Eintrag',
'widget.dir.entries': 'Einträge',
'widget.dir.collapse': 'Einklappen',
'widget.dir.expand': 'Aufklappen',
'widget.dir.move_up': 'Nach oben',
'widget.dir.move_down': 'Nach unten',
'widget.dir.delete_category': 'Kategorie löschen',
'widget.dir.delete_entry': 'Eintrag löschen',
'widget.dir.unnamed': '(unbenannt)',
'widget.dir.confirm_delete_category': 'Kategorie „{name}" und alle Einträge löschen?',
'widget.dir.category_name_placeholder': 'z. B. Erste Etage',
'widget.dir.entry_id_placeholder': '101',
'widget.dir.entry_name_placeholder': 'Mietername',
'widget.dir.entry_subtitle_placeholder': 'Details (optional)',
'widget.dir.available': 'Verfügbar',
'widget.dir.change': 'Ändern',
'widget.dir.choose_logo': 'Logo wählen',
'widget.dir.remove_logo': 'Entfernen',
'widget.dir.no_bg_images': 'Keine Hintergrundbilder ausgewählt',
'widget.dir.remove_bg': 'Entfernen',
// Designer
'designer.title': 'Inhaltsdesigner',
'designer.subtitle': 'Erstellen Sie dynamischen Anzeigeinhalt',
'designer.help_tip': 'Erstellen Sie individuelle Anzeigen mit Live-Elementen: Uhren, Wetter, RSS-Ticker, Countdowns, QR-Codes. Als Widget veröffentlichen oder als PNG exportieren.',
'designer.load_design': 'Design laden',
'designer.export_png': 'PNG exportieren',
'designer.publish': 'In Bibliothek veröffentlichen',
'designer.preview_hint': 'Klicken Sie auf Elemente zur Auswahl. Ziehen zum Verschieben. Live-Vorschau aktualisiert in Echtzeit.',
'designer.add_element': 'Element hinzufügen',
'designer.background': 'Hintergrund',
'designer.bg_image': 'Bild',
'designer.properties': 'Eigenschaften',
'designer.layers': 'Ebenen',
'designer.no_elements': 'Noch keine Elemente',
'designer.save_design_file': 'Design-Datei speichern',
'designer.qr_label': 'QR-CODE',
'designer.loading_news': 'Nachrichten werden geladen...',
'designer.no_items': 'Keine Einträge',
'designer.feed_unavailable': 'Feed nicht verfügbar',
'designer.countdown_now': 'JETZT!',
'designer.widget_name': 'Design {date}',
'designer.el.text': 'Text',
'designer.el.heading': 'Überschrift',
'designer.el.image': 'Bild',
'designer.el.video': 'Video',
'designer.el.clock': 'Uhr',
'designer.el.date': 'Datum',
'designer.el.weather': 'Wetter',
'designer.el.ticker': 'Ticker',
'designer.el.shape': 'Form',
'designer.el.qr': 'QR-Code',
'designer.el.countdown': 'Countdown',
'designer.el.webpage': 'Webseite',
'designer.bg.black': 'Schwarz',
'designer.bg.dark_blue': 'Dunkelblau',
'designer.bg.dark_gradient': 'Dunkler Verlauf',
'designer.bg.blue_gradient': 'Blauer Verlauf',
'designer.bg.sunset': 'Sonnenuntergang',
'designer.bg.ocean': 'Ozean',
'designer.bg.forest': 'Wald',
'designer.bg.dark_red': 'Dunkelrot',
'designer.bg.white': 'Weiß',
'designer.default.text': 'Ihr Text hier',
'designer.default.heading': 'ÜBERSCHRIFT',
'designer.default.coming_soon': 'Demnächst',
'designer.prompt.video_url': 'Video-URL (MP4):',
'designer.prompt.weather_location': 'Stadt, Land:',
'designer.prompt.rss_url': 'RSS-Feed-URL:',
'designer.prompt.qr_url': 'QR-Code-URL:',
'designer.prompt.countdown_date': 'Zieldatum (JJJJ-MM-TT):',
'designer.prompt.webpage_url': 'Webseiten-URL:',
'designer.prop.text': 'Text',
'designer.prop.size': 'Größe',
'designer.prop.font': 'Schriftart',
'designer.prop.color': 'Farbe',
'designer.prop.bold': 'Fett',
'designer.prop.shadow': 'Schatten',
'designer.prop.format': 'Format',
'designer.prop.show_seconds': 'Sekunden anzeigen',
'designer.prop.muted': 'Stumm',
'designer.prop.loop': 'Schleife',
'designer.prop.opacity': 'Deckkraft',
'designer.prop.shape': 'Form',
'designer.prop.location': 'Standort',
'designer.prop.feed_url': 'Feed-URL',
'designer.prop.speed': 'Geschwindigkeit (Sekunden)',
'designer.prop.text_color': 'Textfarbe',
'designer.prop.bg_color': 'Hintergrundfarbe',
'designer.prop.target_date': 'Zieldatum',
'designer.prop.label': 'Beschriftung',
'designer.toast.published': 'Als Widget veröffentlicht! Weisen Sie es einer Layout-Zone zu.',
'designer.toast.publish_failed': 'Veröffentlichung fehlgeschlagen',
'designer.toast.export_failed': 'Export fehlgeschlagen: {error}',
'designer.toast.loaded': 'Design geladen',
'designer.toast.invalid_file': 'Ungültige Design-Datei',
// Playlists
'playlist.title': 'Playlists',
'playlist.subtitle': 'Erstellen und verwalten Sie Inhaltslisten',
'playlist.show_auto_generated': 'Auto-generierte anzeigen',
'playlist.new_playlist_btn': '+ Neue Playlist',
'playlist.new_playlist': 'Neue Playlist',
'playlist.empty_title': 'Noch keine Playlists',
'playlist.empty_desc': 'Erstellen Sie Ihre erste Playlist, um Inhalte für Ihre Bildschirme zu organisieren.',
'playlist.all_auto_generated': 'Alle Playlists sind auto-generiert. Aktivieren Sie „Auto-generierte anzeigen", um sie zu sehen.',
'playlist.tag_auto': 'auto',
'playlist.tag_draft': 'Entwurf',
'playlist.item_count_one': '1 Element',
'playlist.item_count_other': '{n} Elemente',
'playlist.created_at': 'Erstellt {date}',
'playlist.display_count_one': '1 Bildschirm',
'playlist.display_count_other': '{n} Bildschirme',
'playlist.assigned_to_one': 'Zugewiesen an 1 Bildschirm',
'playlist.assigned_to_other': 'Zugewiesen an {n} Bildschirme',
'playlist.load_failed': 'Playlists konnten nicht geladen werden: {error}',
'playlist.back_to_playlists': 'Zurück zu Playlists',
'playlist.name_placeholder': 'Playlist-Name',
'playlist.desc_placeholder': 'Beschreibung (optional)',
'playlist.create_btn': 'Erstellen',
'playlist.add_desc_placeholder': 'Beschreibung hinzufügen...',
'playlist.click_to_rename': 'Klicken zum Umbenennen',
'playlist.click_to_edit_desc': 'Klicken zum Bearbeiten der Beschreibung',
'playlist.add_content': '+ Inhalt hinzufügen',
'playlist.delete_playlist': 'Playlist löschen',
'playlist.back': 'Zurück',
'playlist.items_empty': 'Diese Playlist ist leer',
'playlist.items_empty_hint': 'Klicken Sie auf „Inhalt hinzufügen", um Elemente hinzuzufügen.',
'playlist.duration': 'Dauer',
'playlist.sec': 'Sek',
'playlist.move_up': 'Nach oben',
'playlist.move_down': 'Nach unten',
'playlist.remove_item': 'Element entfernen',
'playlist.item_widget': 'Widget',
'playlist.unknown_type': 'Unbekannter Typ',
'playlist.confirm_delete': '„{name}" löschen? Dies kann nicht rückgängig gemacht werden.',
'playlist.confirm_discard_draft': 'Alle nicht veröffentlichten Änderungen verwerfen und zur letzten veröffentlichten Version zurückkehren?',
'playlist.draft.banner_title': 'Unveröffentlichte Änderungen',
'playlist.draft.devices_showing_published': 'Geräte zeigen weiterhin die zuletzt veröffentlichte Version.',
'playlist.draft.never_published': 'Diese Playlist wurde noch nie veröffentlicht. Geräte zeigen nichts an, bis Sie veröffentlichen.',
'playlist.draft.discard_changes': 'Änderungen verwerfen',
'playlist.draft.publish': 'Veröffentlichen',
'playlist.draft.publishing': 'Wird veröffentlicht...',
'playlist.toast.created': 'Playlist erstellt',
'playlist.toast.deleted': 'Playlist gelöscht',
'playlist.toast.published': 'Playlist veröffentlicht — Geräte aktualisiert',
'playlist.toast.draft_discarded': 'Entwurfsänderungen verworfen',
'playlist.toast.item_removed': 'Element entfernt',
'playlist.add_modal_title': 'Inhalt zur Playlist hinzufügen',
'playlist.tab_content': 'Inhalt',
'playlist.tab_widgets': 'Widgets',
'playlist.search_placeholder': 'Suchen...',
'playlist.close': 'Schließen',
'playlist.no_content_found': 'Kein Inhalt gefunden',
'playlist.no_widgets_found': 'Keine Widgets gefunden',
'playlist.add_btn': 'Hinzufügen',
'playlist.adding': 'Wird hinzugefügt...',
'playlist.added': 'Hinzugefügt',
// Onboarding
'onboarding.back': 'Zurück',
'onboarding.next': 'Weiter',
'onboarding.skip': 'Assistent überspringen',
'onboarding.go_to_dashboard': 'Zum Dashboard',
'onboarding.pair_display': 'Bildschirm koppeln',
'onboarding.step.welcome.title': 'Willkommen bei ScreenTinker!',
'onboarding.step.welcome.intro': 'Lassen Sie uns alles in unter 5 Minuten einrichten.',
'onboarding.step.welcome.guide_through': 'Dieser Assistent führt Sie durch:',
'onboarding.step.welcome.bullet_download': 'Player-App herunterladen',
'onboarding.step.welcome.bullet_pair': 'Ersten Bildschirm koppeln',
'onboarding.step.welcome.bullet_upload': 'Inhalte hochladen und zuweisen',
'onboarding.step.player.title': 'Schritt 1: Player-App holen',
'onboarding.step.player.intro': 'Installieren Sie den Player auf Ihrem Anzeigegerät.',
'onboarding.step.player.android_label': 'Android-APK',
'onboarding.step.player.android_desc': 'TV-Boxen, Tablets, Fire TV',
'onboarding.step.player.web_label': 'Web-Player',
'onboarding.step.player.web_desc': 'Beliebiger Browser, Pi, ChromeOS',
'onboarding.step.player.url_hint': 'Öffnen Sie die App auf Ihrem Bildschirm und geben Sie diese Server-URL ein:',
'onboarding.step.pair.title': 'Schritt 2: Bildschirm koppeln',
'onboarding.step.pair.intro': 'Geben Sie den 6-stelligen Code ein, der auf Ihrem Bildschirm angezeigt wird.',
'onboarding.step.pair.name_placeholder': 'Anzeigename (z. B. Lobby-TV)',
'onboarding.step.upload.title': 'Schritt 3: Inhalt hochladen',
'onboarding.step.upload.intro': 'Laden Sie ein Video oder Bild zur Anzeige hoch.',
'onboarding.step.upload.click_to_select': 'Klicken, um eine Datei auszuwählen',
'onboarding.step.upload.formats': 'MP4, WebM, JPEG, PNG, GIF',
'onboarding.step.upload.uploading': 'Wird hochgeladen...',
'onboarding.step.done.title': 'Alles bereit!',
'onboarding.step.done.intro': 'Ihr Bildschirm ist gekoppelt und der Inhalt läuft!',
'onboarding.step.done.whats_next': 'Wie geht es weiter?',
'onboarding.step.done.next_content': 'Mehr Inhalte in der <strong>Inhaltsbibliothek</strong> hinzufügen',
'onboarding.step.done.next_layouts': 'Multi-Zonen-Layouts in <strong>Layouts</strong> erstellen',
'onboarding.step.done.next_schedule': 'Zeitplan im <strong>Zeitplan</strong>-Kalender einrichten',
'onboarding.step.done.next_widgets': 'Live-Widgets (Uhr, Wetter, Ticker) in <strong>Widgets</strong> hinzufügen',
'onboarding.step.done.next_kiosk': 'Interaktive Bildschirme in <strong>Kiosk</strong> erstellen',
'onboarding.step.done.next_designer': 'Individuelle Inhalte im <strong>Designer</strong> entwerfen',
'onboarding.toast.invalid_code': 'Geben Sie einen gültigen 6-stelligen Code ein',
'onboarding.toast.pairing': 'Wird gekoppelt...',
'onboarding.toast.pair_failed': 'Kopplung fehlgeschlagen',
'onboarding.toast.pair_failed_with_error': 'Kopplung fehlgeschlagen: {error}',
'onboarding.toast.paired': 'Bildschirm gekoppelt!',
'onboarding.toast.uploaded_assigning': 'Hochgeladen! Wird dem Bildschirm zugewiesen...',
'onboarding.toast.content_assigned': 'Inhalt hochgeladen und zugewiesen!',
'onboarding.toast.upload_failed': 'Upload fehlgeschlagen',
'onboarding.toast.error_with_error': 'Fehler: {error}',
// Admin
'admin.title': 'Plattform-Admin',
'admin.subtitle': 'Superadmin-Steuerung - nur Sie sehen dies',
'admin.access_denied': 'Zugriff verweigert',
'admin.access_denied_desc': 'Plattform-Admin-Zugriff erforderlich.',
'admin.all_users': 'Alle Benutzer',
'admin.plans': 'Abonnementpläne',
'admin.system': 'System',
'admin.col.user': 'Benutzer',
'admin.col.auth': 'Auth',
'admin.col.last_login': 'Letzte Anmeldung',
'admin.col.role': 'Rolle',
'admin.col.plan': 'Plan',
'admin.col.actions': 'Aktionen',
'admin.col.devices': 'Geräte',
'admin.col.storage': 'Speicher',
'admin.col.monthly': 'Monatlich',
'admin.col.yearly': 'Jährlich',
'admin.role.user': 'Benutzer',
'admin.role.admin': 'Admin',
'admin.role.superadmin': 'Superadmin',
'admin.remove': 'Entfernen',
'admin.owner': 'Eigentümer',
'admin.confirm': 'Bestätigen?',
'admin.total_users': '{n} Benutzer insgesamt',
'admin.unlimited': 'Unbegrenzt',
'admin.free': 'Kostenlos',
'admin.version': 'Version',
'admin.frontend_hash': 'Frontend-Hash',
'admin.download_db_backup': 'DB-Backup herunterladen',
'admin.server_status': 'Serverstatus',
'admin.toast.role_updated': 'Rolle aktualisiert',
'admin.toast.plan_updated': 'Plan aktualisiert',
'admin.toast.user_removed': 'Benutzer entfernt',
'admin.reset_password': 'Passwort zurücksetzen',
'admin.prompt_reset_password': 'Geben Sie ein neues Passwort für {email} ein (mindestens 8 Zeichen):',
'admin.toast.password_min_8': 'Passwort muss mindestens 8 Zeichen lang sein',
'admin.toast.password_reset': 'Passwort zurückgesetzt',
// Schedule
'schedule.title': 'Zeitplan',
'schedule.subtitle': 'Inhaltsplanungs-Kalender',
'schedule.help_tip': 'Visueller Wochenkalender für Inhaltsplanung. Klicken Sie auf Zeitplan hinzufügen, um Zeitfenster zu erstellen. Wiederholungen für regelmäßige Inhalte. Höhere Priorität überschreibt niedrigere. Geräteebene überschreibt Gruppenebene.',
'schedule.prev_week': '< Zurück',
'schedule.next_week': 'Weiter >',
'schedule.add_schedule': 'Zeitplan hinzufügen',
'schedule.edit_schedule': 'Zeitplan bearbeiten',
'schedule.apply_to': 'Anwenden auf',
'schedule.target_device': 'Gerät',
'schedule.target_group': 'Gruppe',
'schedule.group_devices_count': '{n} Geräte',
'schedule.no_groups_msg': 'Noch keine Gruppen erstellt. Erstellen Sie sie auf der Seite Bildschirme.',
'schedule.zone_note': 'Hinweis: Zonenbasierte Zeitpläne sind layout-spezifisch. Stellen Sie sicher, dass alle Geräte der Gruppe dasselbe Layout verwenden.',
'schedule.playlist_override': 'Playlist überschreiben',
'schedule.no_playlist_override': '— Keine Playlist-Überschreibung —',
'schedule.draft_suffix': '(Entwurf)',
'schedule.layout_override': 'Layout überschreiben',
'schedule.no_layout_override': '— Keine Layout-Überschreibung —',
'schedule.content_label': 'Inhalt',
'schedule.content_hint': '(einzelnes Element, optional)',
'schedule.content_none': '— Keiner —',
'schedule.title_label': 'Titel (optional)',
'schedule.title_placeholder': 'z. B. Morgenplaylist',
'schedule.start_time': 'Startzeit',
'schedule.end_time': 'Endzeit',
'schedule.repeat': 'Wiederholen',
'schedule.repeat_none': 'Keine Wiederholung',
'schedule.repeat_daily': 'Täglich',
'schedule.repeat_weekdays': 'Wochentags',
'schedule.repeat_weekends': 'Wochenenden',
'schedule.repeat_weekly': 'Wöchentlich',
'schedule.priority': 'Priorität',
'schedule.color': 'Farbe',
'schedule.scheduled_label': 'Geplant',
'schedule.tooltip_group_prefix': 'Gruppe: ',
'schedule.tooltip_priority': 'Priorität: {n}',
'schedule.day.sun': 'So',
'schedule.day.mon': 'Mo',
'schedule.day.tue': 'Di',
'schedule.day.wed': 'Mi',
'schedule.day.thu': 'Do',
'schedule.day.fri': 'Fr',
'schedule.day.sat': 'Sa',
'schedule.hour_12am': '00 Uhr',
'schedule.hour_am': ' Uhr',
'schedule.hour_12pm': '12 Uhr',
'schedule.hour_pm': ' Uhr',
'schedule.toast.no_groups': 'Keine Gruppen verfügbar. Erstellen Sie zuerst eine.',
'schedule.toast.saved': 'Zeitplan gespeichert',
// Reports
'report.title': 'Berichte',
'report.subtitle': 'Wiedergabe-Analytik und Geräteverfügbarkeit',
'report.help_tip': 'Wiedergabe-Analytik. Sehen Sie, was wann auf welchem Gerät gespielt wurde. Filtern Sie nach Zeitraum und Gerät. CSV-Export für Verifizierung.',
'report.export_csv': 'CSV exportieren',
'report.device': 'Gerät',
'report.all_devices': 'Alle Geräte',
'report.start_date': 'Startdatum',
'report.end_date': 'Enddatum',
'report.load_report': 'Bericht laden',
'report.select_range': 'Wählen Sie einen Zeitraum und klicken Sie auf Bericht laden',
'report.error': 'Fehler',
'report.total_plays': 'Wiedergaben gesamt',
'report.total_hours': 'Stunden gesamt',
'report.unique_content': 'Einzigartiger Inhalt',
'report.active_devices': 'Aktive Geräte',
'report.avg_duration': 'Durchschn. Dauer',
'report.plays_per_day': 'Wiedergaben pro Tag',
'report.plays_by_hour': 'Wiedergaben pro Stunde',
'report.top_content': 'Top-Inhalte',
'report.by_device': 'Nach Gerät',
'report.no_data': 'Keine Daten',
'report.col.content': 'Inhalt',
'report.col.device': 'Gerät',
'report.col.plays': 'Wiedergaben',
'report.col.total_hours': 'Stunden gesamt',
'report.col.completion': 'Abschluss',
// Kiosk
'kiosk.title': 'Kioskseiten',
'kiosk.subtitle': 'Erstellen Sie interaktive Touchscreen-Oberflächen',
'kiosk.help_tip': 'Erstellen Sie interaktive Touchscreen-Oberflächen. Fügen Sie Buttons mit Symbolen und Aktionen hinzu. Inklusive Leerlaufbildschirm. Geräten als Widget zuweisen.',
'kiosk.new_page': 'Neue Kioskseite',
'kiosk.prompt_name': 'Name der Kioskseite:',
'kiosk.empty_title': 'Noch keine Kioskseiten',
'kiosk.empty_desc': 'Erstellen Sie eine interaktive Touchscreen-Oberfläche für Ihre Bildschirme.',
'kiosk.label': 'Kioskseite',
'kiosk.preview': 'Vorschau',
'kiosk.confirm_delete': 'Kioskseite „{name}" löschen? Dies kann nicht rückgängig gemacht werden.',
'kiosk.toast.deleted': 'Kioskseite gelöscht',
'kiosk.toast.delete_failed': 'Löschen fehlgeschlagen',
'kiosk.toast.saved': 'Kioskseite gespeichert',
'kiosk.not_found': 'Seite nicht gefunden',
'kiosk.back': 'Zurück zu Kioskseiten',
'kiosk.page_settings': 'Seiteneinstellungen',
'kiosk.title_label': 'Titel',
'kiosk.subtitle_label': 'Untertitel',
'kiosk.logo_url': 'Logo-URL',
'kiosk.footer_text': 'Fußzeile',
'kiosk.idle_title': 'Leerlaufbildschirm-Titel',
'kiosk.idle_default': 'Zum Starten berühren',
'kiosk.idle_timeout': 'Leerlauf-Timeout (Sekunden)',
'kiosk.style': 'Stil',
'kiosk.background': 'Hintergrund',
'kiosk.text_color': 'Textfarbe',
'kiosk.columns': 'Spalten',
'kiosk.button_color': 'Button-Farbe',
'kiosk.button_hover': 'Button-Hoverfarbe',
'kiosk.buttons': 'Buttons',
'kiosk.add_btn': '+ Hinzufügen',
'kiosk.icon_placeholder': 'Emoji',
'kiosk.label_placeholder': 'Beschriftung',
'kiosk.sublabel_placeholder': 'Unterbeschriftung',
'kiosk.action_none': 'Keine Aktion',
'kiosk.action_url': 'URL öffnen',
'kiosk.action_page': 'Zu Seite',
'kiosk.url_placeholder': 'URL oder Seite',
'kiosk.no_buttons': 'Noch keine Buttons',
'kiosk.new_button': 'Neuer Button',
// Layout editor
'layout.title': 'Layouts',
'layout.subtitle': 'Bildschirm-Layouts und Vorlagen',
'layout.help_tip': 'Erstellen Sie Multi-Zonen-Bildschirmlayouts. Verwenden Sie Vorlagen oder erstellen Sie eigene. Ziehen Sie Zonen zum Positionieren, ändern Sie die Größe an der Ecke. Layouts auf der Playlist-Registerkarte zuweisen.',
'layout.new_layout': 'Neues Layout',
'layout.templates': 'Vorlagen',
'layout.my_layouts': 'Meine Layouts',
'layout.empty_custom': 'Noch keine benutzerdefinierten Layouts',
'layout.prompt_name': 'Layout-Name:',
'layout.default_zone_name': 'Hauptzone',
'layout.template_label': 'Vorlage',
'layout.use_template': 'Vorlage verwenden',
'layout.zone_count_one': '1 Zone',
'layout.zone_count_other': '{n} Zonen',
'layout.confirm_delete': 'Layout „{name}" löschen? Dies kann nicht rückgängig gemacht werden.',
'layout.toast.deleted': 'Layout gelöscht',
'layout.toast.delete_failed': 'Layout konnte nicht gelöscht werden',
'layout.toast.saved': 'Layout gespeichert',
'layout.not_found': 'Layout nicht gefunden',
'layout.back': 'Zurück zu Layouts',
'layout.add_zone': 'Zone hinzufügen',
'layout.zones': 'Zonen',
'layout.properties': 'Eigenschaften',
'layout.delete_zone': 'Zone löschen',
'layout.zone_n': 'Zone {n}',
'layout.prop.name': 'Name',
'layout.prop.x': 'X (%)',
'layout.prop.y': 'Y (%)',
'layout.prop.width': 'Breite (%)',
'layout.prop.height': 'Höhe (%)',
'layout.prop.type': 'Typ',
'layout.type_content': 'Inhalt',
'layout.type_widget': 'Widget',
// Video walls
'wall.title': 'Videowände',
'wall.subtitle': 'Kombinieren Sie mehrere Bildschirme zu einem großen',
'wall.help_tip': 'Kombinieren Sie mehrere Bildschirme zu einem großen. Rastergröße einstellen, Geräte in Positionen ziehen, Rahmenkompensation einstellen. Inhalt zuweisen, der über alle Geräte abgespielt wird.',
'wall.new_wall': 'Neue Videowand',
'wall.prompt_name': 'Name der Videowand:',
'wall.empty_title': 'Noch keine Videowände',
'wall.empty_desc': 'Erstellen Sie eine Videowand, um mehrere Bildschirme zu kombinieren.',
'wall.grid_summary': '{cols}x{rows}-Raster • {n} Geräte',
'wall.not_found': 'Wand nicht gefunden',
'wall.back': 'Zurück zu Videowänden',
'wall.delete_wall': 'Wand löschen',
'wall.grid_config': 'Raster-Konfiguration',
'wall.columns': 'Spalten',
'wall.rows': 'Zeilen',
'wall.h_bezel': 'H Rahmen (mm)',
'wall.v_bezel': 'V Rahmen (mm)',
'wall.update': 'Aktualisieren',
'wall.content': 'Inhalt',
'wall.no_content': 'Kein Inhalt',
'wall.set_content': 'Inhalt festlegen',
'wall.available_displays': 'Verfügbare Bildschirme',
'wall.all_assigned': 'Alle Geräte zugewiesen',
'wall.drop_here': 'Hier ablegen',
'wall.toast.placed': '{name} platziert bei [{col},{row}]',
'wall.toast.grid_updated': 'Raster aktualisiert',
'wall.toast.content_updated': 'Inhalt aktualisiert',
'wall.toast.deleted': 'Wand gelöscht',
// Billing
'billing.title': 'Abonnement',
'billing.subtitle': 'Verwalten Sie Ihren Plan und die Abrechnung',
'billing.current_plan': 'Aktueller Plan',
'billing.self_hosted': 'Selbstgehostet',
'billing.trial_days_left': 'Testversion - {n} Tage übrig',
'billing.trial_ends': 'Ihre {plan}-Testversion endet in {n} Tagen',
'billing.trial_after': 'Nach der Testversion werden Sie zum kostenlosen Plan (1 Gerät) verschoben. Upgraden Sie jetzt, um alle Geräte und Funktionen zu behalten.',
'billing.devices': 'Geräte',
'billing.devices_lc': 'Geräte',
'billing.storage': 'Speicher',
'billing.storage_lc': 'Speicher',
'billing.features': 'Funktionen',
'billing.feat.remote_control': 'Fernsteuerung',
'billing.feat.remote_urls': 'Remote-URLs',
'billing.feat.priority_support': 'Prioritäts-Support',
'billing.available_plans': 'Verfügbare Pläne',
'billing.current': 'Aktuell',
'billing.unlimited': 'Unbegrenzt',
'billing.free': 'Kostenlos',
'billing.per_month': '/Mon',
'billing.yearly_save': 'oder {price} $/Jahr ({pct}% sparen)',
'billing.monthly': 'Monatlich',
'billing.yearly': 'Jährlich',
'billing.manage_subscription': 'Abonnement verwalten',
'billing.self_hosted_note': 'Selbstgehosteter Modus: Pläne können von Administratoren ohne Abrechnung zugewiesen werden.',
'billing.failed_to_load': 'Laden fehlgeschlagen',
'billing.toast.checkout_failed': 'Bezahlung konnte nicht gestartet werden: {error}',
'billing.toast.portal_failed': 'Abrechnungsportal konnte nicht geöffnet werden: {error}',
'billing.toast.payment_success': 'Bezahlung erfolgreich! Ihr Plan wurde aktualisiert.',
// Teams
'team.title': 'Teams',
'team.subtitle': 'Teams und gemeinsamen Zugriff verwalten',
'team.help_tip': 'Erstellen Sie Teams, um Geräte mit anderen Nutzern zu teilen. Eigentümer verwalten das Team, Editoren ändern Inhalte/Playlists, Betrachter überwachen nur.',
'team.new_team': 'Neues Team',
'team.prompt_name': 'Teamname:',
'team.empty_title': 'Noch keine Teams',
'team.empty_desc': 'Erstellen Sie ein Team, um Geräte mit anderen Nutzern zu teilen.',
'team.your_role': 'Ihre Rolle: {role}',
'team.member_count_one': '1 Mitglied',
'team.member_count_other': '{n} Mitglieder',
'team.not_found': 'Team nicht gefunden',
'team.back': 'Zurück zu Teams',
'team.delete_team': 'Team löschen',
'team.members_count': 'Mitglieder ({n})',
'team.invite': '+ Einladen',
'team.role_viewer': 'Betrachter',
'team.role_editor': 'Editor',
'team.role_owner': 'Eigentümer',
'team.remove': 'Entfernen',
'team.remove_from_team': 'Aus Team entfernen',
'team.no_members': 'Keine Mitglieder',
'team.shared_devices': 'Geteilte Geräte ({n})',
'team.add_device': '+ Gerät hinzufügen...',
'team.no_devices': 'Keine Geräte mit diesem Team geteilt',
'team.prompt_email': 'E-Mail-Adresse zum Einladen:',
'team.prompt_role': 'Rolle (viewer, editor oder owner):',
'team.toast.invalid_role': 'Ungültige Rolle',
'team.toast.invitation_sent': 'Einladung gesendet',
'team.toast.role_updated': 'Rolle aktualisiert',
'team.toast.member_removed': 'Mitglied entfernt',
'team.toast.device_added': 'Gerät zum Team hinzugefügt',
'team.toast.device_removed': 'Gerät aus Team entfernt',
'team.toast.deleted': 'Team gelöscht',
// Activity
'activity.title': 'Aktivitätsprotokoll',
'activity.subtitle': 'Audit-Trail aller Aktionen',
'activity.load_more': 'Mehr laden',
'activity.empty_title': 'Noch keine Aktivität',
'activity.empty_desc': 'Aktionen erscheinen hier, sobald Sie das System nutzen.',
'activity.system': 'System',
'activity.verb_created': 'hat erstellt',
'activity.verb_updated': 'hat aktualisiert',
'activity.verb_deleted': 'hat gelöscht',
'activity.action_paired_device': 'hat ein Gerät gekoppelt',
'activity.action_added_remote_content': 'hat Remote-Inhalt hinzugefügt',
'activity.noun_content': 'Inhalt',
'activity.noun_device': 'Gerät',
'activity.noun_playlist_assignment': 'Playlist-Zuweisung',
'activity.noun_assignment': 'Zuweisung',
'activity.noun_layout': 'Layout',
'activity.noun_widget': 'Widget',
'activity.noun_schedule': 'Zeitplan',
'activity.noun_video_wall': 'Videowand',
'activity.alert_device_offline': 'Alarm: Gerät offline',
// Help
'help.title': 'Hilfe-Center',
'help.subtitle': 'Schnellanleitungen und FAQ',
'help.faq': 'Häufig gestellte Fragen',
'help.shortcuts': 'Tastaturkürzel',
'help.shortcut_esc': 'Web-Player zurücksetzen (auf Player-Seite)',
'help.shortcut_f': 'Vollbild umschalten (Web-Player)',
// Add Display modal
'add_display.title': 'Bildschirm hinzufügen',
'add_display.intro': 'Geben Sie den 6-stelligen Kopplungscode ein, der auf dem Bildschirm angezeigt wird.',
'add_display.pairing_code': 'Kopplungscode',
'add_display.display_name': 'Anzeigename (optional)',
'add_display.name_placeholder': 'z. B. Lobby-TV',
'add_display.need_player': 'Player-App benötigt? Installieren Sie eine, um einen Kopplungscode zu erhalten:',
'add_display.android_apk': 'Android-APK',
'add_display.web_player': 'Web-Player',
'add_display.raspberry_pi': 'Raspberry Pi',
'add_display.windows': 'Windows',
'add_display.smart_tv_note': 'Smart TVs (LG/Samsung): öffnen Sie den integrierten Browser und navigieren Sie zu <code style="background:var(--bg-input,#0f172a);padding:1px 4px;border-radius:3px">/player</code>',
'add_display.pair_btn': 'Bildschirm koppeln',
};