Spielerpositionen, Statistiken, Fahrgemeinschaften, Spielfeld-Visualisierung

- PlayerPosition Enum (7 Handball-Positionen) mit Label/ShortLabel
- Spielerstatistik pro Spiel (Tore, Würfe, TW-Paraden, Bemerkung)
- Position-Dropdown in Spieler-Editor und Event-Stats-Formular
- Statistik-Seite: TW zuerst, Trennlinie, Feldspieler, Position-Badges
- Spielfeld-SVG mit Ampel-Performance (grün/gelb/rot)
- Anklickbare Spieler im Spielfeld öffnen Detail-Modal
- Fahrgemeinschaften (Anbieten, Zuordnen, Zurückziehen)
- Übersetzungen in allen 6 Sprachen (de, en, pl, ru, ar, tr)
- .gitignore für Laravel hinzugefügt
- Demo-Daten mit Positionen und Statistiken

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Rhino
2026-03-02 11:47:34 +01:00
parent 2e24a40d68
commit ad60e7a9f9
46 changed files with 2041 additions and 86 deletions

View File

@@ -306,6 +306,10 @@ return [
'log_participant_changed' => 'Participation status for ":event" changed to :status',
'log_catering_changed' => 'Catering status for ":event" changed to :status',
'log_timekeeper_changed' => 'Timekeeper status for ":event" changed to :status',
'log_carpool_offer' => 'Ride offered for ":event" (:seats seats)',
'log_carpool_withdrawn' => 'Ride for ":event" withdrawn (:passengers passengers removed)',
'log_carpool_joined' => ':player rides with :driver (Event: ":event")',
'log_carpool_left' => ':player removed from ride with :driver (Event: ":event")',
'log_comment_created' => 'Comment added to ":event"',
'log_comment_deleted' => 'Comment deleted from ":event"',
'log_file_uploaded' => 'File ":name" uploaded',
@@ -355,6 +359,15 @@ return [
'favicon_uploaded' => 'Favicon has been updated.',
'favicon_removed' => 'Favicon has been removed.',
// Logos
'logo_login_label' => 'Login Logo',
'logo_login_desc' => 'Displayed on the login page above the app name.',
'logo_app_label' => 'App Logo (Navigation)',
'logo_app_desc' => 'Displayed in the navigation bar next to the app name.',
'logo_current' => 'Current logo',
'logo_remove' => 'Remove logo',
'logo_hint' => 'PNG, SVG, JPG, GIF, WebP (max. 1 MB)',
// Undo / Revert
'log_revert' => 'Undo',
'log_revert_confirm' => 'Are you sure you want to undo this action?',
@@ -545,4 +558,21 @@ return [
'mail_test_button' => 'Test Connection',
'mail_testing' => 'Testing connection...',
'mail_test_success' => 'SMTP connection successful!',
// Player statistics
'stats_player_detail' => 'Player details',
'stats_total_goals' => 'Total goals',
'stats_total_shots' => 'Total shots',
'stats_gk_appearances' => 'GK appearances',
'stats_total_saves' => 'Total saves',
'stats_close' => 'Close',
'player_goals' => 'Goals',
// Positions & Court
'position' => 'Position',
'court_visualization' => 'Court Formation',
'court_no_data' => 'No data',
'performance_good' => 'Good',
'performance_average' => 'Average',
'performance_below' => 'Below average',
];

View File

@@ -30,6 +30,25 @@ return [
'timekeeper_short' => 'Timekeeper',
'no_timekeeper_yet' => 'No timekeeper assigned yet.',
'timekeeper_updated' => 'Timekeeper status updated.',
// Carpooling
'carpool' => 'Carpooling',
'carpool_offer' => 'Offer a ride',
'carpool_update' => 'Update ride',
'carpool_seats' => 'Available seats',
'carpool_seats_count' => ':free of :total seats available',
'carpool_seats_too_few' => 'There are already more passengers assigned than the new seat count.',
'carpool_note_placeholder' => 'e.g. meeting point, departure time...',
'carpool_withdraw' => 'Withdraw ride',
'carpool_withdraw_confirm' => 'Really withdraw ride? All passengers will be removed.',
'carpool_join' => 'Assign',
'carpool_leave' => 'Remove',
'carpool_full' => 'All seats taken',
'no_carpool_yet' => 'No carpooling offers yet.',
'carpool_my_offer' => 'My ride',
'carpool_driver' => 'Driver',
'carpool_passengers' => 'Passengers',
'comments' => 'Comments',
'comment_placeholder' => 'Write a comment...',
'no_comments' => 'No comments yet.',
@@ -56,6 +75,22 @@ return [
'score_away' => 'Away',
'vs' => 'vs.',
// Player statistics
'stats' => 'Player Statistics',
'stats_save' => 'Save statistics',
'stats_saved' => 'Statistics saved.',
'stats_goalkeeper' => 'GK',
'stats_goalkeeper_long' => 'Goalkeeper',
'stats_saves' => 'Saves',
'stats_shots_on_goal' => 'Shots on goal',
'stats_goals' => 'Goals',
'stats_shots' => 'Shots',
'stats_note' => 'Note',
'stats_hit_rate' => 'Hit rate',
'stats_save_rate' => 'Save rate',
'stats_no_data' => 'No statistics data.',
'stats_position' => 'Position',
// Staff visibility
'signed_up' => 'signed up',
'withdrawn' => 'withdrawn',

View File

@@ -81,6 +81,24 @@ return [
'parent_rep' => 'Parent Representative',
'user' => 'Parent',
],
'player_position' => [
'torwart' => 'Goalkeeper',
'links_aussen' => 'Left Wing',
'rechts_aussen' => 'Right Wing',
'rueckraum_links' => 'Left Back',
'rueckraum_mitte' => 'Centre Back',
'rueckraum_rechts' => 'Right Back',
'kreislaeufer' => 'Pivot',
],
'player_position_short' => [
'torwart' => 'GK',
'links_aussen' => 'LW',
'rechts_aussen' => 'RW',
'rueckraum_links' => 'LB',
'rueckraum_mitte' => 'CB',
'rueckraum_rechts' => 'RB',
'kreislaeufer' => 'PV',
],
],
'locales' => [
'de' => 'Deutsch',