Stand: SMTP-Test, Admin-Mail-Tab, Notifiable-Fix, Lazy-Quill

- Fix: Notifiable-Trait zum User-Model hinzugefuegt (behebt notify()-500er)
- Installer: SMTP-Verbindungstest mit EsmtpTransport + Ueberspringen-Link
- Admin: Neuer E-Mail-Tab mit SMTP-Konfiguration + Verbindungstest
- Admin: Lazy Quill-Initialisierung (nur sichtbare Locale wird geladen)
- Uebersetzungen: 17 neue Mail-Keys in allen 6 Sprachen

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Rhino
2026-03-02 07:30:37 +01:00
commit 2e24a40d68
9633 changed files with 1300799 additions and 0 deletions

585
lang/de/admin.php Executable file
View File

@@ -0,0 +1,585 @@
<?php
return [
// Dashboard
'dashboard_title' => 'Admin-Dashboard',
'stat_users' => 'Benutzer',
'stat_players' => 'Spieler',
'stat_upcoming' => 'Anstehende Termine',
'stat_invitations' => 'Offene Einladungen',
'quick_links' => 'Schnellzugriff',
'new_event' => 'Neuer Termin',
'new_player' => 'Neuer Spieler',
'new_invitation' => 'Neue Einladung',
'new_team' => 'Neues Team',
'open_responses_title' => 'Termine mit offenen Rückmeldungen',
'x_open' => ':count offen',
// Navigation
'nav_teams' => 'Teams',
'nav_players' => 'Spieler',
'nav_users' => 'Benutzer',
'nav_invitations' => 'Einladungen',
'nav_events' => 'Events',
'nav_settings' => 'Einstellungen',
'nav_verwaltung' => 'Verwaltung',
// Allgemein
'actions' => 'Aktionen',
'action' => 'Aktion',
'please_select' => 'Bitte wählen',
'back_to_list' => 'Zurück zur Liste',
'inactive' => 'Inaktiv',
'nr' => 'Nr.',
'photo' => 'Foto',
'date' => 'Datum',
'location' => 'Ort',
'all_status' => 'Alle Status',
'copied' => 'Kopiert!',
'copy' => 'Kopieren',
'created_by' => 'von',
'valid_until' => 'gültig bis',
// Teams
'teams_title' => 'Teams',
'team_created' => 'Team wurde erstellt.',
'team_updated' => 'Team wurde aktualisiert.',
'team_name' => 'Teamname',
'year_group' => 'Jahrgang',
'year_group_placeholder' => 'z.B. 2017/18',
'active' => 'Aktiv',
'team_is_active' => 'Team ist aktiv',
'create_team' => 'Team erstellen',
'edit_team' => 'Team bearbeiten',
'no_teams_yet' => 'Noch keine Teams vorhanden.',
'team_notes' => 'Notizen',
'team_notes_placeholder' => 'Notizen zum Team (intern, nur für Admins sichtbar)...',
'team_coaches' => 'Trainer',
'no_coaches_available' => 'Keine Trainer im System vorhanden.',
'team_players' => 'Spieler',
'team_parent_reps' => 'Elternvertretung',
'team_parent_reps_hint' => 'Eltern mit der Rolle "Elternvertretung", die Kinder in diesem Team haben.',
'no_parent_reps' => 'Keine Elternvertretung für dieses Team.',
'log_team_updated' => 'Team ":name" wurde aktualisiert',
'log_player_team_changed' => 'Spieler :name wurde in ein anderes Team verschoben',
// Players
'players_title' => 'Spieler',
'player_created' => 'Spieler wurde erstellt.',
'player_updated' => 'Spieler wurde aktualisiert.',
'first_name' => 'Vorname',
'last_name' => 'Nachname',
'birth_year' => 'Geburtsjahr',
'jersey_number' => 'Trikotnummer',
'photo_permission' => 'Fotoerlaubnis',
'notes' => 'Notizen',
'parent_assigned' => 'Elternteil wurde zugeordnet.',
'parent_removed' => 'Zuordnung wurde entfernt.',
'assign_parent' => 'Elternteil zuordnen',
'add_parent' => 'Elternteil hinzufügen',
'select_user' => 'Benutzer wählen',
'assign' => 'Zuordnen',
'relationship_label' => 'Beziehung',
'relationship_placeholder' => 'z.B. Mutter, Vater',
'parents' => 'Eltern',
'player_data' => 'Stammdaten',
'parent_assignment' => 'Eltern-Zuordnung',
'no_parents_yet' => 'Noch keine Eltern zugeordnet.',
'confirm_remove_parent' => 'Zuordnung wirklich entfernen?',
'remove' => 'Entfernen',
'no_players_yet' => 'Noch keine Spieler vorhanden.',
// Users
'users_title' => 'Benutzer',
'user_toggled' => 'Benutzer wurde :status.',
'role_updated' => 'Rolle wurde aktualisiert.',
'cannot_deactivate_self' => 'Du kannst deinen eigenen Account nicht deaktivieren.',
'cannot_change_own_role' => 'Du kannst deine eigene Rolle nicht ändern.',
'activated' => 'aktiviert',
'deactivated' => 'deaktiviert',
'deactivated_label' => 'Deaktiviert',
'children' => 'Kinder',
'phone' => 'Erreichbarkeit',
'last_login' => 'Letzter Login',
'never' => 'Nie',
'deactivate' => 'Deaktivieren',
'activate' => 'Aktivieren',
'you_suffix' => '(du)',
'edit' => 'Bearbeiten',
'edit_user' => 'Benutzer bearbeiten',
'user_data' => 'Benutzerdaten',
'user_updated' => 'Benutzer wurde aktualisiert.',
'reset_password' => 'Passwort zurücksetzen',
'reset_password_hint' => 'Sendet dem Benutzer einen Link zum Zurücksetzen des Passworts per E-Mail.',
'reset_password_confirm' => 'Dem Benutzer einen Passwort-Reset-Link per E-Mail senden?',
'password_reset_success' => 'Neues Passwort wurde generiert.',
'new_password_label' => 'Neues Passwort (einmalig sichtbar):',
'password_only_visible_now' => 'Dieses Passwort wird nur jetzt angezeigt. Bitte weitergeben und Seite nicht neu laden.',
'cannot_edit_own_role' => 'Du kannst deine eigene Rolle nicht hier ändern.',
'cannot_assign_admin_role' => 'Du kannst die Admin-Rolle nicht vergeben.',
'cannot_reset_own_password' => 'Du kannst dein eigenes Passwort nicht über den Admin-Bereich zurücksetzen.',
'registered_at' => 'Registriert am',
// Invitations
'invitations_title' => 'Einladungen',
'invitation_created' => 'Einladung erstellt. Link: :link',
'invitation_deleted' => 'Einladung wurde gelöscht.',
'invitation_already_used' => 'Bereits eingelöste Einladungen können nicht gelöscht werden.',
'create_invitation' => 'Einladung erstellen',
'assign_players' => 'Spieler zuordnen',
'email_optional' => 'E-Mail-Adresse (optional)',
'email_optional_hint' => 'Wenn gesetzt, kann nur diese E-Mail sich registrieren',
'expires_at' => 'Gültig bis',
'valid_for_days' => 'Gültig für (Tage)',
'token' => 'Token',
'status' => 'Status',
'used' => 'Eingelöst',
'expired' => 'Abgelaufen',
'pending' => 'Offen',
'copy_link' => 'Link kopieren',
'invite_link' => 'Einladungslink',
'no_assignment' => 'Keine Zuordnung',
'no_invitations_yet' => 'Noch keine Einladungen erstellt.',
'no_active_players' => 'Keine aktiven Spieler vorhanden.',
'confirm_delete_invitation' => 'Einladung wirklich löschen?',
'created_label' => 'Erstellt',
'player_assignment_hint' => 'Wähle die Kinder aus, die dem neuen Eltern-Account automatisch zugeordnet werden sollen.',
// Events
'events_title' => 'Events',
'event_created' => 'Event wurde erstellt.',
'event_updated' => 'Event wurde aktualisiert.',
'event_deleted' => 'Event wurde gelöscht.',
'event_title' => 'Titel',
'start_at' => 'Start',
'date' => 'Datum',
'time' => 'Uhrzeit',
'end_at' => 'Ende',
'location_name' => 'Ortsname',
'address' => 'Adresse',
'description' => 'Beschreibung',
'search_address' => 'Adresse suchen...',
'new_event_title' => 'Neues Event',
'edit_event_title' => 'Event bearbeiten',
'no_events_yet' => 'Noch keine Events vorhanden.',
'confirm_delete_event' => 'Event wirklich löschen?',
'location_address' => 'Ort / Adresse',
'location_name_hint' => 'Ortsname (z.B. Sporthalle Nord)',
'search_by_name' => 'Adresse suchen',
'location_name_placeholder' => 'z.B. BVB Stadion, Sporthalle West...',
'search_address_hint' => 'Adresse eingeben (min. 3 Zeichen)...',
'description_placeholder' => 'Beschreibung eingeben...',
'assignments' => 'Zuweisungen',
'catering_assignment' => 'Catering',
'timekeeper_assignment' => 'Zeitnehmer',
'geocoding_error' => 'Adresssuche fehlgeschlagen. Bitte erneut versuchen.',
'geocoding_rate_limit' => 'Zu viele Anfragen. Bitte kurz warten.',
'geocoding_no_results' => 'Keine Adresse gefunden. Bitte genauer eingeben.',
// Mindestanforderungen
'min_requirements' => 'Mindestanforderungen',
'min_players' => 'Min. Spieler',
'min_parents' => 'Min. Eltern',
'min_catering' => 'Min. Catering',
'min_timekeepers' => 'Min. Zeitnehmer',
'event_defaults_title' => 'Standard-Mindestwerte für Events',
'event_defaults_description' => 'Lege Standard-Mindestwerte für neue Events pro Typ fest. Admins können diese beim Erstellen überschreiben.',
// Orte-Verwaltung
'nav_locations' => 'Orte',
'locations_title' => 'Orte verwalten',
'location_add' => 'Neuen Ort anlegen',
'location_name_label' => 'Name',
'location_save' => 'Speichern',
'location_created' => 'Ort wurde angelegt.',
'location_updated' => 'Ort wurde aktualisiert.',
'location_deleted' => 'Ort wurde gelöscht.',
'location_confirm_delete' => 'Ort wirklich löschen?',
'locations_empty' => 'Noch keine Orte vorhanden.',
'known_locations' => 'Bekannte Orte',
'address_manual_hint' => 'Adresse manuell eingeben...',
// Settings
'settings_title' => 'Einstellungen',
'settings_saved' => 'Einstellungen gespeichert.',
'settings_tab_general' => 'Allgemein',
'settings_tab_legal' => 'Rechtliches',
'settings_tab_defaults' => 'Event-Standards',
'settings_tab_categories' => 'Dateikategorien',
'settings_tab_maintenance' => 'Wartung',
// Demo-Daten löschen
'demo_data_delete_title' => 'Beispieldaten löschen',
'demo_data_delete_description' => 'Entferne alle Beispieldaten, die bei der Installation angelegt wurden. Die App wird auf den Zustand direkt nach der Installation zurückgesetzt.',
'demo_data_delete_warning' => 'Achtung: Dieser Vorgang kann nicht rückgängig gemacht werden! Alle Benutzer (außer dem Administrator), Teams, Spieler, Termine, Kommentare, Dateien und Aktivitätsprotokolle werden unwiderruflich gelöscht.',
'demo_data_delete_button' => 'Alle Beispieldaten löschen',
'demo_data_delete_confirm' => 'Bist du sicher, dass du ALLE Beispieldaten unwiderruflich löschen möchtest?',
'demo_data_deleted' => 'Alle Beispieldaten wurden erfolgreich gelöscht.',
'demo_data_deletes' => 'Wird gelöscht:',
'demo_data_keeps' => 'Bleibt erhalten:',
'demo_data_except_admin' => 'außer Administrator',
'demo_data_keeps_admin' => 'Dein Administrator-Konto',
// Dateiverwaltung
'nav_files' => 'Dateien',
'files_title' => 'Dateiverwaltung',
'upload_file' => 'Datei hochladen',
'file_uploaded' => 'Datei wurde hochgeladen.',
'file_deleted' => 'Datei wurde gelöscht.',
'file_category' => 'Kategorie',
'select_category' => 'Kategorie wählen',
'no_files_yet' => 'Noch keine Dateien in dieser Kategorie.',
'no_files_at_all' => 'Noch keine Dateien hochgeladen.',
'file_size' => 'Größe',
'uploaded_by' => 'Hochgeladen von',
'uploaded_at' => 'Hochgeladen am',
'confirm_delete_file' => 'Datei wirklich löschen? Alle Event-Verknüpfungen werden entfernt.',
'allowed_file_types' => 'Erlaubte Dateitypen: PDF, DOCX, XLSX, Bilder (JPG, PNG, GIF, WEBP)',
'max_file_size' => 'Maximale Dateigröße: 10 MB',
'file_categories' => 'Dateikategorien',
'file_categories_description' => 'Verwalte die Kategorien für die Dateiverwaltung.',
'new_category' => 'Neue Kategorie',
'category_name' => 'Kategoriename',
'category_created' => 'Kategorie wurde erstellt.',
'category_updated' => 'Kategorie wurde aktualisiert.',
'category_deleted' => 'Kategorie wurde gelöscht.',
'category_not_empty' => 'Kategorie kann nicht gelöscht werden, da sie noch Dateien enthält.',
'confirm_delete_category' => 'Kategorie wirklich löschen?',
'event_files' => 'Dateien',
'attach_from_library' => 'Aus Bibliothek anhängen',
'upload_new_file' => 'Neue Datei hochladen',
'attached_files' => 'Angehängte Dateien',
'detach_file' => 'Entfernen',
'no_attached_files' => 'Keine Dateien angehängt.',
'profile_picture' => 'Profilbild',
'upload_picture' => 'Bild hochladen',
'remove_picture' => 'Bild entfernen',
'picture_uploaded' => 'Profilbild wurde aktualisiert.',
'picture_removed' => 'Profilbild wurde entfernt.',
'max_picture_size' => 'Max. 2 MB (JPG, PNG, GIF, WEBP)',
'html_anchor_hint' => 'Tipp: Sprungmarken setzen mit id-Attribut, z. B. &lt;h3 id="cookies"&gt;',
// Soft-Delete
'danger_zone' => 'Gefahrenzone',
'delete_user' => 'Benutzer löschen',
'delete_user_hint' => 'Der Benutzer wird deaktiviert und kann 7 Tage lang wiederhergestellt werden. Historische Daten (Kommentare, Teilnahmen) bleiben erhalten.',
'delete_player' => 'Spieler löschen',
'delete_player_hint' => 'Der Spieler wird entfernt und kann 7 Tage lang wiederhergestellt werden. Historische Daten (Teilnahmen, Events) bleiben erhalten.',
'user_status_label' => 'Benutzerstatus',
'player_status_label' => 'Spielerstatus',
'deactivate_user_hint' => 'Der Benutzer kann sich nicht mehr einloggen.',
'activate_user_hint' => 'Der Benutzer kann sich wieder einloggen.',
'deactivate_player_hint' => 'Der Spieler wird nicht mehr in Terminlisten angezeigt.',
'activate_player_hint' => 'Der Spieler wird wieder in Terminlisten angezeigt.',
'player_toggled' => 'Spieler :status.',
'log_player_toggled' => 'Spieler :name :status',
'confirm_delete_user' => 'Möchtest du diesen Benutzer wirklich löschen? Er kann 7 Tage lang wiederhergestellt werden.',
'confirm_delete_player' => 'Möchtest du diesen Spieler wirklich löschen? Er kann 7 Tage lang wiederhergestellt werden.',
'user_deleted' => 'Benutzer wurde gelöscht.',
'user_restored' => 'Benutzer wurde wiederhergestellt.',
'player_deleted' => 'Spieler wurde gelöscht.',
'player_restored' => 'Spieler wurde wiederhergestellt.',
'cannot_delete_self' => 'Du kannst dich nicht selbst löschen.',
'cannot_delete_main_admin' => 'Der Haupt-Admin kann nicht gelöscht werden.',
'restore_expired' => 'Die Wiederherstellungsfrist ist abgelaufen.',
'trash' => 'Papierkorb',
'restore' => 'Wiederherstellen',
'delete' => 'Löschen',
'deleted_at' => 'Gelöscht am',
// Activity Log
'activity_log_title' => 'Aktivitätslog',
'nav_activity_log' => 'Aktivitätslog',
'log_category' => 'Kategorie',
'log_all_categories' => 'Alle Kategorien',
'log_cat_auth' => 'Authentifizierung',
'log_cat_users' => 'Benutzer',
'log_cat_players' => 'Spieler',
'log_cat_events' => 'Termine',
'log_cat_files' => 'Dateien',
'log_cat_settings' => 'Einstellungen',
'log_cat_dsgvo' => 'DSGVO',
'log_from' => 'Von',
'log_to' => 'Bis',
'log_filter' => 'Filtern',
'log_reset' => 'Zurücksetzen',
'log_time' => 'Zeitpunkt',
'log_user' => 'Benutzer',
'log_action' => 'Aktion',
'log_description' => 'Beschreibung',
'log_ip' => 'IP-Adresse',
'log_system' => 'System',
'log_empty' => 'Keine Einträge vorhanden.',
'log_details' => 'Details',
'log_field' => 'Feld',
'log_old_value' => 'Vorher',
'log_new_value' => 'Nachher',
// Log descriptions
'log_login' => ':name hat sich angemeldet',
'log_logout' => ':name hat sich abgemeldet',
'log_login_failed' => 'Fehlgeschlagener Login-Versuch für :email',
'log_registered' => ':name hat sich registriert',
'log_user_updated' => 'Benutzer :name wurde aktualisiert',
'log_user_toggled' => 'Benutzer :name: Status geändert auf :status',
'log_role_changed' => 'Rolle von :name geändert auf :role',
'log_password_reset' => 'Passwort von :name wurde zurückgesetzt',
'log_user_deleted' => 'Benutzer :name wurde gelöscht',
'log_user_restored' => 'Benutzer :name wurde wiederhergestellt',
'log_player_created' => 'Spieler :name wurde erstellt',
'log_player_updated' => 'Spieler :name wurde aktualisiert',
'log_player_deleted' => 'Spieler :name wurde gelöscht',
'log_player_restored' => 'Spieler :name wurde wiederhergestellt',
'log_parent_assigned' => ':parent wurde :player als Elternteil zugeordnet',
'log_parent_removed' => ':parent wurde als Elternteil von :player entfernt',
'log_event_created' => 'Termin ":title" wurde erstellt',
'log_event_updated' => 'Termin ":title" wurde aktualisiert',
'log_event_deleted' => 'Termin ":title" wurde gelöscht',
'log_participant_changed' => 'Teilnahme-Status für ":event" geändert auf :status',
'log_catering_changed' => 'Catering-Status für ":event" geändert auf :status',
'log_timekeeper_changed' => 'Zeitnehmer-Status für ":event" geändert auf :status',
'log_comment_created' => 'Kommentar zu ":event" hinzugefügt',
'log_comment_deleted' => 'Kommentar zu ":event" gelöscht',
'log_file_uploaded' => 'Datei ":name" hochgeladen',
'log_file_deleted' => 'Datei ":name" gelöscht',
'log_settings_updated' => 'Einstellungen wurden aktualisiert',
'log_invitation_created' => 'Einladung erstellt für :email',
// Statistik
'nav_statistics' => 'Statistik',
'statistics_title' => 'Spiel-Statistik',
'total_games' => 'Spiele gesamt',
'wins' => 'Siege',
'losses' => 'Niederlagen',
'draws' => 'Unentschieden',
'win_rate' => 'Siegquote',
'chart_win_loss' => 'Siege / Niederlagen',
'chart_player_participation' => 'Spieler-Teilnahme',
'chart_parent_involvement' => 'Eltern-Engagement',
'no_games_yet' => 'Noch keine Spiele vorhanden.',
'filter_from' => 'Von',
'filter_to' => 'Bis',
'filter_apply' => 'Filtern',
'filter_reset' => 'Zurücksetzen',
'all_teams' => 'Alle Teams',
'not_applicable' => 'N/A',
'min_users' => 'Min. Benutzer',
'home_short' => 'H',
'away_short' => 'A',
'player_ranking_title' => 'Spieler-Teilnahme',
'player_ranking_desc' => 'Teilnahmequote der Spieler an :count Spielen (Heim- und Auswärtsspiele).',
'games_played' => 'Gespielt',
'games_assigned' => 'Aufgestellt',
'participation_rate' => 'Quote',
'parent_ranking_title' => 'Eltern-Engagement',
'parent_ranking_desc' => 'Catering (:catering Events) und Zeitnehmer (:timekeeper Events) — alle publizierten Termine.',
'total_contributions' => 'Gesamt',
// Statistik-Sichtbarkeit
'statistics_enabled_label' => 'Statistik-Seite aktivieren',
'statistics_enabled_hint' => 'Wenn deaktiviert, ist die Statistik-Seite nur für den Administrator sichtbar.',
// Slogan & Favicon
'slogan_label' => 'Slogan',
'slogan_hint' => 'Wird auf der Login-Seite und im Footer angezeigt.',
'favicon_label' => 'Favicon',
'favicon_hint' => 'ICO, PNG, SVG, JPG (max. 512 KB)',
'favicon_current' => 'Aktuelles Favicon',
'favicon_remove' => 'Favicon entfernen',
'favicon_uploaded' => 'Favicon wurde aktualisiert.',
'favicon_removed' => 'Favicon wurde entfernt.',
// Undo / Revert
'log_revert' => 'Rückgängig',
'log_revert_confirm' => 'Möchtest du diese Aktion wirklich rückgängig machen?',
'log_revert_success' => 'Aktion wurde erfolgreich rückgängig gemacht.',
'log_revert_not_possible' => 'Diese Aktion kann nicht rückgängig gemacht werden.',
'log_reverted' => 'Rückgängig gemacht: ":desc"',
'event_restored' => 'Event wurde wiederhergestellt.',
'log_event_restored' => 'Event ":title" wurde wiederhergestellt',
// Sichtbarkeit
'settings_tab_visibility' => 'Sichtbarkeit',
'visibility_description' => 'Steuere, welche Funktionen für welche Rollen sichtbar sind. Administratoren sehen immer alles.',
'visibility_feature_statistics' => 'Statistik-Seite',
'visibility_feature_catering_history' => 'Catering/Zeitnehmer-Verlauf',
// Listenerstellung
'nav_list_generator' => 'Listenerstellung',
'list_generator_title' => 'Liste erstellen',
'list_title' => 'Betreff',
'list_subtitle' => 'Untertitel (optional)',
'list_notes' => 'Notizen / Beschreibung',
'list_source' => 'Zeilen-Quelle',
'list_source_players' => 'Spieler',
'list_source_parents' => 'Eltern',
'list_source_freetext' => 'Freitext',
'list_freetext_hint' => 'Eine Zeile pro Eintrag',
'list_columns' => 'Spalten',
'list_custom_columns' => 'Zusätzliche Spalten',
'list_add_column' => 'Spalte hinzufügen',
'list_column_name' => 'Spaltenname',
'list_generate' => 'Liste erstellen',
'list_result_title' => 'Liste erstellt',
'list_print' => 'Drucken / Als PDF speichern',
'list_new' => 'Neue Liste erstellen',
'list_to_library' => 'Zur Datei-Bibliothek',
'list_generated_at' => 'Erstellt am',
'list_all_teams' => 'Alle Teams',
'list_saved_info' => 'Datei ":name" wurde automatisch in der Bibliothek unter "Allgemein" gespeichert.',
'list_download_pdf' => 'PDF herunterladen',
'list_entries_count' => 'Einträge',
'log_list_generated' => 'Liste ":title" wurde erstellt',
'no_entries' => 'Keine Einträge vorhanden.',
// DSGVO
'dsgvo_title' => 'DSGVO-Einverständniserklärung',
'dsgvo_short' => 'DSGVO',
'dsgvo_consent_label' => 'Einverständniserklärung bestätigt',
'dsgvo_view_document' => 'Dokument ansehen',
'dsgvo_confirm' => 'Bestätigen',
'dsgvo_revoke' => 'Widerrufen',
'dsgvo_toggled' => 'DSGVO-Status wurde aktualisiert.',
'dsgvo_no_file' => 'Es wurde noch kein Dokument hochgeladen.',
'dsgvo_no_document' => 'Der Benutzer hat noch keine Einverständniserklärung hochgeladen.',
'dsgvo_not_confirmed' => 'Noch nicht bestätigt. Bitte Dokument prüfen und dann bestätigen.',
'dsgvo_confirmed_info' => 'Bestätigt von :name am :date',
'dsgvo_confirmed_tooltip' => 'DSGVO-Einverständnis bestätigt',
'dsgvo_pending_tooltip' => 'Dokument hochgeladen, Bestätigung ausstehend',
'dsgvo_missing_tooltip' => 'Kein Dokument hochgeladen',
'dsgvo_events_title' => 'DSGVO-Ereignisse (letzte 10)',
// DSGVO Action-Labels
'dsgvo_action_dsgvo_consent_uploaded' => 'Hochgeladen',
'dsgvo_action_dsgvo_consent_confirmed' => 'Bestätigt',
'dsgvo_action_dsgvo_consent_revoked' => 'Widerrufen',
'dsgvo_action_dsgvo_consent_removed' => 'Entfernt',
'dsgvo_action_account_self_deleted' => 'Account gelöscht',
'dsgvo_action_child_auto_deactivated' => 'Kind deaktiviert',
// DSGVO Log-Beschreibungen
'log_dsgvo_consent_uploaded' => ':name hat eine Einverständniserklärung hochgeladen',
'log_dsgvo_confirmed' => 'Einverständniserklärung von :name wurde bestätigt',
'log_dsgvo_revoked' => 'Bestätigung der Einverständniserklärung von :name wurde widerrufen',
'log_dsgvo_consent_removed' => ':name hat die Einverständniserklärung entfernt',
'log_account_self_deleted' => ':name hat den eigenen Account gelöscht',
'log_child_auto_deactivated' => 'Spieler :child wurde automatisch deaktiviert (einziger Elternteil :parent hat Account gelöscht)',
// DSGVO Pending Widget
'dsgvo_pending_title' => 'DSGVO — Bestätigung ausstehend',
'dsgvo_pending_count' => ':count Erklärung(en) ausstehend',
'dsgvo_consent_document' => 'DSGVO-Einverständniserklärung',
'dsgvo_reject' => 'Ablehnen',
'dsgvo_reject_confirm' => 'Bist du sicher, dass du diese Einverständniserklärung ablehnen möchtest? Das Dokument wird gelöscht und der Benutzer muss es erneut hochladen.',
'dsgvo_rejected' => 'Einverständniserklärung wurde abgelehnt.',
'log_dsgvo_rejected' => 'Einverständniserklärung von :name wurde abgelehnt',
'dsgvo_action_dsgvo_consent_rejected' => 'Abgelehnt',
'dsgvo_preview_not_available' => 'Vorschau für diesen Dateityp nicht verfügbar.',
// Factory Reset
'factory_reset_title' => 'Kompletter Reset',
'factory_reset_description' => 'Setzt die gesamte WebApp auf den Ausgangszustand zurück. Nach dem Reset wird der Installations-Assistent erneut gestartet.',
'factory_reset_deletes' => 'Folgendes wird unwiderruflich gelöscht',
'factory_reset_item_users' => 'Alle Benutzer (inkl. Administrator)',
'factory_reset_item_data' => 'Alle Teams, Spieler, Termine, Kommentare',
'factory_reset_item_settings' => 'Alle Einstellungen und Dateikategorien',
'factory_reset_item_files' => 'Alle hochgeladenen Dateien und Profilbilder',
'factory_reset_warning' => 'Dieser Vorgang kann NICHT rückgängig gemacht werden! Die App wird vollständig zurückgesetzt und der Installations-Assistent gestartet.',
'factory_reset_confirm' => 'ACHTUNG: Die gesamte WebApp wird unwiderruflich zurückgesetzt und alle Daten gelöscht. Der Installations-Assistent wird erneut gestartet. Bist du sicher?',
'factory_reset_button' => 'WebApp komplett zurücksetzen',
// Lizenz & Support
'settings_tab_license' => 'Lizenz & Support',
'license_title' => 'Lizenzschlüssel',
'license_description' => 'Geben Sie Ihren Lizenzschlüssel ein, um Support und Updates zu erhalten.',
'license_key_label' => 'Lizenzschlüssel',
'license_invalid' => 'Der eingegebene Lizenzschlüssel ist ungültig.',
'registration_status' => 'Registrierungsstatus',
'registration_active' => 'Registriert',
'registration_inactive' => 'Nicht registriert',
'register_now' => 'Jetzt registrieren',
'registration_success' => 'Installation erfolgreich registriert.',
'registration_failed' => 'Registrierung fehlgeschlagen. Bitte versuchen Sie es später erneut.',
'version_info' => 'Systeminformationen',
'update_available' => 'Update verfügbar: Version :version',
'update_details' => 'Details anzeigen',
'download_update' => 'Update herunterladen',
'installation_id_label' => 'Installations-ID',
'nav_support' => 'Support',
'support_title' => 'Support-Tickets',
'support_not_registered' => 'Installation nicht registriert',
'support_register_hint' => 'Um den Support zu nutzen, muss die Installation registriert sein. Es werden nur technische Daten (App-Name, URL, PHP-Version) übermittelt.',
'support_new_ticket' => 'Neues Ticket erstellen',
'support_subject' => 'Betreff',
'support_category' => 'Kategorie',
'support_category_bug' => 'Fehlerbericht',
'support_category_feature' => 'Feature-Wunsch',
'support_category_question' => 'Frage',
'support_category_other' => 'Sonstiges',
'support_message' => 'Nachricht',
'support_submit' => 'Ticket senden',
'support_reply' => 'Antworten',
'support_send_reply' => 'Antwort senden',
'support_reply_placeholder' => 'Schreiben Sie Ihre Antwort...',
'support_ticket_created' => 'Ticket wurde erfolgreich erstellt.',
'support_reply_sent' => 'Antwort wurde gesendet.',
'support_submit_failed' => 'Ticket konnte nicht erstellt werden. Bitte versuchen Sie es später erneut.',
'support_reply_failed' => 'Antwort konnte nicht gesendet werden. Bitte versuchen Sie es später erneut.',
'support_ticket_not_found' => 'Ticket nicht gefunden.',
'support_no_tickets' => 'Noch keine Tickets vorhanden.',
'support_no_messages' => 'Noch keine Nachrichten.',
'support_ticket_id' => 'Ticket-Nr.',
'support_status' => 'Status',
'support_status_open' => 'Offen',
'support_status_in_progress' => 'In Bearbeitung',
'support_status_waiting' => 'Wartend',
'support_status_closed' => 'Geschlossen',
'support_created_at' => 'Erstellt',
'support_last_reply' => 'Letzte Antwort',
'support_back_to_list' => 'Zurück zur Übersicht',
'support_system_info_note' => 'Systeminformationen werden automatisch mitgesendet.',
'support_sender_support' => 'Support',
'support_sender_you' => 'Sie',
'support_ticket_closed' => 'Dieses Ticket ist geschlossen.',
'installer_register_label' => 'Installation registrieren',
'installer_register_hint' => 'Ermöglicht Update-Benachrichtigungen und Support. Es werden nur technische Daten übermittelt (App-Name, URL, PHP-Version, App-Version).',
'installer_license_label' => 'Lizenzschlüssel (optional)',
'installer_license_hint' => 'Kann auch später in den Einstellungen eingetragen werden.',
// Password Reset (Admin + Self-Service)
'factory_reset_password_label' => 'Dein Passwort zur Bestätigung',
'factory_reset_confirmation_label' => 'Sicherheitsbestätigung',
'factory_reset_confirmation_hint' => 'Tippe RESET-BESTÄTIGT ein, um den Vorgang zu bestätigen.',
'password_reset_link_sent' => 'Ein Link zum Zurücksetzen des Passworts wurde per E-Mail gesendet.',
'password_reset_email_label' => 'Passwort-Reset E-Mail-Vorlage',
'password_reset_email_hint' => 'Platzhalter: {name} = Benutzername, {link} = Reset-Link, {app_name} = App-Name',
'log_password_reset_requested' => 'Passwort-Zurücksetzen angefordert',
'log_password_changed_self' => ':name hat das Passwort geändert',
'log_dsgvo_viewed' => 'DSGVO-Dokument von :name angesehen',
// Multi-Language Legal Editor
'legal_language_label' => 'Sprache',
'legal_impressum_label' => 'Impressum',
'legal_datenschutz_label' => 'Datenschutzerklärung',
'legal_password_reset_email_label' => 'Passwort-Reset E-Mail',
// E-Mail Tab
'settings_tab_mail' => 'E-Mail',
'mail_config_title' => 'E-Mail-Konfiguration',
'mail_config_hint' => 'SMTP-Einstellungen fuer den E-Mail-Versand (z.B. Passwort-Reset, Benachrichtigungen).',
'mail_mailer_label' => 'Versandmethode',
'mail_log_mode' => 'Kein Versand (Log)',
'mail_host_label' => 'SMTP-Host',
'mail_port_label' => 'Port',
'mail_username_label' => 'Benutzername',
'mail_password_label' => 'Passwort',
'mail_from_address_label' => 'Absender-Adresse',
'mail_from_name_label' => 'Absender-Name',
'mail_encryption_label' => 'Verschluesselung',
'mail_encryption_none' => 'Keine',
'mail_save' => 'Mail-Einstellungen speichern',
'mail_saved' => 'Mail-Einstellungen wurden gespeichert.',
'mail_test_button' => 'Verbindung testen',
'mail_testing' => 'Teste Verbindung...',
'mail_test_success' => 'SMTP-Verbindung erfolgreich!',
];

7
lang/de/auth.php Executable file
View File

@@ -0,0 +1,7 @@
<?php
return [
'failed' => 'Diese Anmeldedaten stimmen nicht mit unseren Aufzeichnungen überein.',
'password' => 'Das angegebene Passwort ist falsch.',
'throttle' => 'Zu viele Anmeldeversuche. Bitte versuche es in :seconds Sekunden erneut.',
];

43
lang/de/auth_ui.php Executable file
View File

@@ -0,0 +1,43 @@
<?php
return [
// Login
'login_title' => 'Anmelden',
'email_label' => 'E-Mail',
'password_label' => 'Passwort',
'remember_me' => 'Angemeldet bleiben',
'login_button' => 'Anmelden',
// Register
'register_title' => 'Registrieren',
'name_label' => 'Name',
'children_assigned' => 'Dein Account wird folgenden Kindern zugeordnet:',
'password_min' => '(min. 8 Zeichen)',
'password_confirm_label' => 'Passwort bestätigen',
'create_account' => 'Account erstellen',
'already_registered' => 'Bereits registriert?',
'go_to_login' => 'Zum Login',
'email_fixed_by_invitation' => 'Die E-Mail-Adresse ist durch die Einladung festgelegt.',
'invalid_invitation' => 'Dieser Einladungslink ist ungültig oder abgelaufen.',
'welcome' => 'Willkommen! Dein Account wurde erstellt.',
// Forgot / Reset Password
'forgot_password_link' => 'Passwort vergessen?',
'forgot_password_title' => 'Passwort zurücksetzen',
'forgot_password_description' => 'Gib deine E-Mail-Adresse ein und wir senden dir einen Link zum Zurücksetzen deines Passworts.',
'send_reset_link' => 'Link senden',
'back_to_login' => 'Zurück zum Login',
'reset_password_title' => 'Neues Passwort setzen',
'reset_password_button' => 'Passwort zurücksetzen',
'new_password_label' => 'Neues Passwort',
'confirm_password_label' => 'Passwort bestätigen',
// Security
'login_failed' => 'Die Anmeldedaten sind ungültig.',
'email_must_match_invitation' => 'Die E-Mail-Adresse muss mit der Einladung übereinstimmen: :email',
// Cookie notice
'cookie_notice' => 'Diese Seite nutzt nur ein technisch notwendiges Session-Cookie. Kein Tracking.',
'cookie_notice_link' => 'Mehr erfahren',
'account_deactivated' => 'Dein Account wurde deaktiviert. Bitte wende dich an den Administrator.',
];

78
lang/de/events.php Executable file
View File

@@ -0,0 +1,78 @@
<?php
return [
'title' => 'Termine',
'no_events' => 'Keine Termine gefunden.',
'no_upcoming' => 'Keine anstehenden Termine.',
'upcoming_title' => 'Nächste Termine',
'cancelled_label' => 'Abgesagt',
'draft_label' => 'Entwurf',
'cancelled_banner' => 'Dieser Termin wurde abgesagt.',
'draft_banner' => 'Entwurf — nur für Admins sichtbar.',
'back_to_list' => 'Zurück zur Terminliste',
// Detail-Seite
'description' => 'Beschreibung',
'plan_route' => 'Route planen',
'start_navigation' => 'Navigation starten',
// Teilnehmer
'participants' => 'Teilnehmer',
'confirmations' => 'Zusagen',
'rejections' => 'Absagen',
'open_responses' => 'Offen',
'participation_updated' => 'Teilnahme aktualisiert.',
// Catering
'catering' => 'Catering / Verpflegung',
'bring_something' => 'Bringe etwas mit',
'bring_nothing' => 'Bringe nichts mit',
'catering_note_placeholder' => 'z.B. Bringe Kuchen mit',
'no_catering_yet' => 'Noch keine Zusagen für Verpflegung.',
'catering_updated' => 'Catering-Status aktualisiert.',
// Zeitnehmer
'timekeeper' => 'Zeitnehmer',
'timekeeper_yes' => 'Ja, ich kann',
'timekeeper_no' => 'Nein',
'catering_short' => 'Catering',
'timekeeper_short' => 'Zeitnehmer',
'no_timekeeper_yet' => 'Noch kein Zeitnehmer eingetragen.',
'timekeeper_updated' => 'Zeitnehmer-Status aktualisiert.',
// Kommentare
'comments' => 'Kommentare',
'comment_placeholder' => 'Kommentar schreiben...',
'no_comments' => 'Noch keine Kommentare.',
'comment_deleted' => '[Gelöscht]',
'confirm_delete_comment' => 'Kommentar löschen?',
'comment_added' => 'Kommentar hinzugefügt.',
'comment_removed' => 'Kommentar gelöscht.',
// Dashboard
'hello_user' => 'Hallo, :name!',
'upcoming_events' => 'Nächste Termine',
// Kalender
'calendar' => 'Kalender',
'today' => 'Heute',
'month_view' => 'Monat',
'year_view' => 'Jahr',
// Dateien
'files' => 'Dateien',
'download' => 'Herunterladen',
'no_files' => 'Keine Dateien angehängt.',
// Gegner & Ergebnis
'opponent' => 'Gegner',
'score' => 'Ergebnis',
'score_home' => 'Heim',
'score_away' => 'Gast',
'vs' => 'vs.',
// Staff-Sichtbarkeit
'signed_up' => 'zugesagt',
'withdrawn' => 'abgemeldet',
'deleted_label' => 'gelöscht',
];

6
lang/de/pagination.php Executable file
View File

@@ -0,0 +1,6 @@
<?php
return [
'previous' => '&laquo; Zurück',
'next' => 'Weiter &raquo;',
];

14
lang/de/passwords.php Executable file
View File

@@ -0,0 +1,14 @@
<?php
return [
'reset' => 'Dein Passwort wurde zurückgesetzt.',
'sent' => 'Wir haben dir einen Link zum Zurücksetzen des Passworts gesendet.',
'throttled' => 'Bitte warte, bevor du es erneut versuchst.',
'token' => 'Dieses Token zum Zurücksetzen des Passworts ist ungültig.',
'user' => 'Es konnte kein Benutzer mit dieser E-Mail-Adresse gefunden werden.',
'reset_subject' => 'Passwort zurücksetzen — :app',
'reset_greeting' => 'Hallo :name,',
'reset_line1' => 'Du erhältst diese E-Mail, weil eine Anfrage zum Zurücksetzen deines Passworts gestellt wurde.',
'reset_line2' => 'Dieser Link zum Zurücksetzen ist :count Minuten gültig.',
'reset_line3' => 'Falls du kein Zurücksetzen angefordert hast, kannst du diese E-Mail ignorieren.',
];

44
lang/de/profile.php Executable file
View File

@@ -0,0 +1,44 @@
<?php
return [
'title' => 'Mein Profil',
'name_label' => 'Name',
'email_label' => 'E-Mail',
'email_readonly' => 'Die E-Mail-Adresse kann nicht geändert werden.',
'phone_label' => 'Erreichbarkeit (Mobilnummer)',
'role_label' => 'Rolle',
'language_label' => 'Sprache',
'my_children' => 'Meine Kinder',
'updated' => 'Profil aktualisiert.',
// Profilbild
'profile_picture' => 'Profilbild',
'upload_picture' => 'Bild hochladen',
'remove_picture' => 'Bild entfernen',
'max_picture_size' => 'Max. 2 MB (JPG, PNG, GIF, WEBP)',
// DSGVO-Einverständniserklärung
'dsgvo_title' => 'DSGVO-Einverständniserklärung',
'dsgvo_description' => 'Lade hier die unterschriebene Einverständniserklärung als Foto oder PDF hoch. Eine Erklärung gilt für beide Elternteile gemeinsam.',
'dsgvo_upload' => 'Erklärung hochladen',
'dsgvo_replace' => 'Ersetzen',
'dsgvo_remove' => 'Erklärung entfernen',
'dsgvo_file_hint' => 'PDF oder Bild (max. 10 MB)',
'dsgvo_uploaded' => 'Einverständniserklärung wurde hochgeladen.',
'dsgvo_removed' => 'Einverständniserklärung wurde entfernt.',
'dsgvo_view' => 'Ansehen',
'dsgvo_confirmed' => 'Bestätigt',
'dsgvo_pending' => 'Warte auf Bestätigung durch Admin/Trainer',
'dsgvo_confirmed_by' => 'Bestätigt von :name am :date',
'dsgvo_confirm_remove' => 'Einverständniserklärung wirklich entfernen? Eine vorhandene Bestätigung wird ebenfalls zurückgesetzt.',
// Account löschen
'danger_zone' => 'Gefahrenzone',
'delete_account' => 'Account löschen',
'delete_account_hint' => 'Dein Profil wird deaktiviert und kann 7 Tage lang vom Administrator wiederhergestellt werden. Historische Daten (Kommentare, Teilnahmen) bleiben erhalten.',
'delete_warning_children' => 'Achtung: Du bist der einzige Elternteil für folgende Kinder. Diese werden ebenfalls deaktiviert:',
'delete_confirm' => 'Möchtest du deinen Account wirklich löschen? Dieser Vorgang kann nur vom Administrator rückgängig gemacht werden.',
'account_deleted' => 'Dein Account wurde gelöscht.',
'cannot_delete_admin' => 'Der Administrator-Account kann nicht gelöscht werden.',
'cannot_delete_staff' => 'Trainer und Admins können ihren Account nicht über die Profilseite löschen.',
];

126
lang/de/ui.php Executable file
View File

@@ -0,0 +1,126 @@
<?php
return [
// Navigation
'dashboard' => 'Dashboard',
'events' => 'Termine',
'admin' => 'Admin',
'profile' => 'Profil',
'logout' => 'Abmelden',
'back_to_app' => 'Zur App',
'login' => 'Anmelden',
// Allgemeine Buttons
'save' => 'Speichern',
'cancel' => 'Abbrechen',
'edit' => 'Bearbeiten',
'delete' => 'Löschen',
'create' => 'Erstellen',
'filter' => 'Filtern',
'send' => 'Senden',
'back' => 'Zurück',
'yes' => 'Ja',
'no' => 'Nein',
'open' => 'Offen',
// Allgemeine Labels
'all_teams' => 'Alle Teams',
'all_types' => 'Alle Typen',
'upcoming' => 'Kommende',
'past' => 'Vergangene',
'period' => 'Zeitraum',
'team' => 'Team',
'type' => 'Typ',
'name' => 'Name',
'email' => 'E-Mail',
'password' => 'Passwort',
'role' => 'Rolle',
'language' => 'Sprache',
'impressum' => 'Impressum',
'privacy' => 'Datenschutz',
'no_entries' => 'Keine Einträge vorhanden.',
'clock' => 'Uhr',
// Datumsformat
'date_format' => 'D, d.m.Y, H:i',
'date_format_long' => 'l, d. F Y, H:i',
'date_format_short' => 'd.m.Y H:i',
'date_format_date' => 'd.m.Y',
// Footer
'footer_impressum' => 'Impressum',
'footer_privacy' => 'Datenschutz',
// PWA
'pwa_install_title' => 'App installieren',
'pwa_install_text' => 'Füge die App zum Startbildschirm hinzu für schnelleren Zugriff.',
'pwa_install_btn' => 'Installieren',
'pwa_ios_steps' => 'Tippe auf <strong>⋯</strong> (Menü), dann auf <strong>⬆</strong> (Teilen) und wähle „Zum Home-Bildschirm".',
// Fehlerseiten
'error_403_title' => 'Zugriff verweigert',
'error_403_text' => 'Du hast keine Berechtigung, diese Seite aufzurufen.',
'error_404_title' => 'Seite nicht gefunden',
'error_404_text' => 'Die angeforderte Seite konnte nicht gefunden werden.',
'error_500_title' => 'Serverfehler',
'error_500_text' => 'Es ist ein interner Fehler aufgetreten. Bitte versuche es später erneut.',
'back_to_dashboard' => 'Zum Dashboard',
// Enums
'enums' => [
'event_type' => [
'home_game' => 'Heimspiel',
'away_game' => 'Auswärtsspiel',
'training' => 'Training',
'tournament' => 'Turnier',
'meeting' => 'Besprechung',
'other' => 'Sonstiges',
],
'event_status' => [
'published' => 'Veröffentlicht',
'cancelled' => 'Abgesagt',
'draft' => 'Entwurf',
],
'participant_status' => [
'yes' => 'Zugesagt',
'no' => 'Abgesagt',
'unknown' => 'Offen',
],
'catering_status' => [
'yes' => 'Ja',
'no' => 'Nein',
'unknown' => 'Offen',
],
'user_role' => [
'admin' => 'Administrator',
'coach' => 'Trainer',
'parent_rep' => 'Elternvertretung',
'user' => 'Elternteil',
],
],
// Sprachen
'locales' => [
'de' => 'Deutsch',
'en' => 'English',
'pl' => 'Polski',
'ru' => 'Русский',
'ar' => 'العربية',
'tr' => 'Türkçe',
],
// DSGVO-Banner
'dsgvo_banner_title' => 'DSGVO-Einverständniserklärung erforderlich',
'dsgvo_banner_text' => 'Für die Nutzung dieser App ist eine unterschriebene DSGVO-Einverständniserklärung erforderlich. Bitte lade die Erklärung als Foto oder PDF in deinem Profil hoch. Erst danach kann die App vollständig genutzt werden.',
'dsgvo_banner_action' => 'Jetzt im Profil hochladen',
'dsgvo_banner_pending_title' => 'Einverständniserklärung wird geprüft',
'dsgvo_banner_pending_text' => 'Deine DSGVO-Einverständniserklärung wurde eingereicht und wird geprüft. Bis zur Bestätigung durch einen Administrator ist die App im Lesemodus — Teilnahme, Catering, Zeitnehmer und Kommentare sind gesperrt.',
'dsgvo_restricted' => 'Deine DSGVO-Einverständniserklärung wurde noch nicht bestätigt. Bitte warte auf die Freigabe durch einen Administrator.',
'dsgvo_restricted_hint' => 'DSGVO-Einverständniserklärung noch nicht bestätigt — Aktionen gesperrt.',
// Dateien
'files' => 'Dateien',
'download' => 'Herunterladen',
'all' => 'Alle',
'close' => 'Schließen',
];

130
lang/de/validation.php Executable file
View File

@@ -0,0 +1,130 @@
<?php
return [
'accepted' => ':attribute muss akzeptiert werden.',
'active_url' => ':attribute ist keine gültige URL.',
'after' => ':attribute muss ein Datum nach :date sein.',
'after_or_equal' => ':attribute muss ein Datum nach oder gleich :date sein.',
'alpha' => ':attribute darf nur Buchstaben enthalten.',
'alpha_dash' => ':attribute darf nur Buchstaben, Zahlen, Bindestriche und Unterstriche enthalten.',
'alpha_num' => ':attribute darf nur Buchstaben und Zahlen enthalten.',
'array' => ':attribute muss ein Array sein.',
'before' => ':attribute muss ein Datum vor :date sein.',
'before_or_equal' => ':attribute muss ein Datum vor oder gleich :date sein.',
'between' => [
'numeric' => ':attribute muss zwischen :min und :max liegen.',
'file' => ':attribute muss zwischen :min und :max Kilobytes groß sein.',
'string' => ':attribute muss zwischen :min und :max Zeichen lang sein.',
'array' => ':attribute muss zwischen :min und :max Elemente haben.',
],
'boolean' => ':attribute muss wahr oder falsch sein.',
'confirmed' => ':attribute Bestätigung stimmt nicht überein.',
'date' => ':attribute ist kein gültiges Datum.',
'date_equals' => ':attribute muss ein Datum gleich :date sein.',
'date_format' => ':attribute entspricht nicht dem Format :format.',
'different' => ':attribute und :other müssen sich unterscheiden.',
'digits' => ':attribute muss :digits Stellen haben.',
'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.',
'email' => ':attribute muss eine gültige E-Mail-Adresse sein.',
'exists' => 'Der gewählte Wert für :attribute ist ungültig.',
'file' => ':attribute muss eine Datei sein.',
'filled' => ':attribute muss einen Wert haben.',
'gt' => [
'numeric' => ':attribute muss größer als :value sein.',
'file' => ':attribute muss größer als :value Kilobytes sein.',
'string' => ':attribute muss mehr als :value Zeichen haben.',
'array' => ':attribute muss mehr als :value Elemente haben.',
],
'gte' => [
'numeric' => ':attribute muss größer oder gleich :value sein.',
'file' => ':attribute muss größer oder gleich :value Kilobytes sein.',
'string' => ':attribute muss mindestens :value Zeichen haben.',
'array' => ':attribute muss mindestens :value Elemente haben.',
],
'image' => ':attribute muss ein Bild sein.',
'in' => 'Der gewählte Wert für :attribute ist ungültig.',
'in_array' => ':attribute kommt nicht in :other vor.',
'integer' => ':attribute muss eine ganze Zahl sein.',
'ip' => ':attribute muss eine gültige IP-Adresse sein.',
'json' => ':attribute muss ein gültiger JSON-String sein.',
'lt' => [
'numeric' => ':attribute muss kleiner als :value sein.',
'file' => ':attribute muss kleiner als :value Kilobytes sein.',
'string' => ':attribute muss weniger als :value Zeichen haben.',
'array' => ':attribute muss weniger als :value Elemente haben.',
],
'lte' => [
'numeric' => ':attribute muss kleiner oder gleich :value sein.',
'file' => ':attribute muss kleiner oder gleich :value Kilobytes sein.',
'string' => ':attribute darf höchstens :value Zeichen haben.',
'array' => ':attribute darf höchstens :value Elemente haben.',
],
'max' => [
'numeric' => ':attribute darf nicht größer als :max sein.',
'file' => ':attribute darf nicht größer als :max Kilobytes sein.',
'string' => ':attribute darf nicht mehr als :max Zeichen haben.',
'array' => ':attribute darf nicht mehr als :max Elemente haben.',
],
'min' => [
'numeric' => ':attribute muss mindestens :min sein.',
'file' => ':attribute muss mindestens :min Kilobytes groß sein.',
'string' => ':attribute muss mindestens :min Zeichen haben.',
'array' => ':attribute muss mindestens :min Elemente haben.',
],
'not_in' => 'Der gewählte Wert für :attribute ist ungültig.',
'numeric' => ':attribute muss eine Zahl sein.',
'present' => ':attribute muss vorhanden sein.',
'regex' => ':attribute hat ein ungültiges Format.',
'required' => ':attribute ist erforderlich.',
'required_if' => ':attribute ist erforderlich, wenn :other :value ist.',
'required_unless' => ':attribute ist erforderlich, es sei denn :other ist :values.',
'required_with' => ':attribute ist erforderlich, wenn :values vorhanden ist.',
'required_with_all' => ':attribute ist erforderlich, wenn :values vorhanden sind.',
'required_without' => ':attribute ist erforderlich, wenn :values nicht vorhanden ist.',
'required_without_all' => ':attribute ist erforderlich, wenn keiner der Werte :values vorhanden ist.',
'same' => ':attribute und :other müssen übereinstimmen.',
'size' => [
'numeric' => ':attribute muss :size sein.',
'file' => ':attribute muss :size Kilobytes groß sein.',
'string' => ':attribute muss :size Zeichen lang sein.',
'array' => ':attribute muss :size Elemente enthalten.',
],
'string' => ':attribute muss ein String sein.',
'timezone' => ':attribute muss eine gültige Zeitzone sein.',
'unique' => ':attribute ist bereits vergeben.',
'url' => ':attribute muss eine gültige URL sein.',
'password' => [
'letters' => ':attribute muss mindestens einen Buchstaben enthalten.',
'mixed' => ':attribute muss mindestens einen Groß- und einen Kleinbuchstaben enthalten.',
'numbers' => ':attribute muss mindestens eine Zahl enthalten.',
'symbols' => ':attribute muss mindestens ein Sonderzeichen enthalten.',
'uncompromised' => ':attribute wurde in einem Datenleck gefunden. Bitte ein anderes Passwort wählen.',
],
'attributes' => [
'name' => 'Name',
'email' => 'E-Mail',
'password' => 'Passwort',
'password_confirmation' => 'Passwort-Bestätigung',
'title' => 'Titel',
'body' => 'Nachricht',
'type' => 'Typ',
'status' => 'Status',
'team_id' => 'Team',
'start_date' => 'Datum',
'start_time' => 'Uhrzeit',
'location_name' => 'Ort',
'address_text' => 'Adresse',
'description_html' => 'Beschreibung',
'first_name' => 'Vorname',
'last_name' => 'Nachname',
'birth_year' => 'Geburtsjahr',
'jersey_number' => 'Trikotnummer',
'note' => 'Notiz',
'season' => 'Saison',
'player_id' => 'Spieler',
'parent_id' => 'Elternteil',
'relationship_label' => 'Beziehung',
],
];