mirror of
https://github.com/screentinker/screentinker.git
synced 2026-05-15 07:32:23 -06:00
Session 1 of 2 of the i18n rollout. - Split i18n module into per-language files under frontend/js/i18n/ so a translator can edit one language without touching the others. - Add Portuguese (pt) and seed Hindi (hi). Hindi is intentionally a skeleton -- 0 keys, full English fallback -- because we have an active Indian user and would rather ship "no Hindi" than ship machine-quality Hindi that could read as unprofessional or get formality/gender register wrong. - 183 keys, 100% parity across en/es/fr/de/pt; native review still recommended before publicizing as "fully supported". - Add t(key, vars) variable substitution and tn(keyBase, n, vars) plural helper for _one/_other key pairs. - setLanguage() now triggers a CustomEvent + HashChangeEvent so the existing hash router naturally re-renders the current view, plus a subscriber pattern for nav labels rendered once outside the router. - Wire t() into 3 high-traffic views end-to-end: dashboard, login, content-library. Sidebar nav labels in app.js update on language change. - The remaining 16 views still ship with hardcoded English; they will be wired in session 2. The t() lookup is robust against unwired views, so the dashboard works in 5 languages while clicking into e.g. Schedule still shows English. No regressions. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
198 lines
10 KiB
JavaScript
198 lines
10 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',
|
|
};
|