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

@@ -307,6 +307,10 @@ return [
'log_participant_changed' => 'تم تغيير حالة المشاركة لـ ":event" إلى :status',
'log_catering_changed' => 'تم تغيير حالة التموين لـ ":event" إلى :status',
'log_timekeeper_changed' => 'تم تغيير حالة الميقاتي لـ ":event" إلى :status',
'log_carpool_offer' => 'تم عرض رحلة لـ ":event" (:seats مقاعد)',
'log_carpool_withdrawn' => 'تم سحب الرحلة لـ ":event" (تم إزالة :passengers ركاب)',
'log_carpool_joined' => ':player يركب مع :driver (الموعد: ":event")',
'log_carpool_left' => 'تم إزالة :player من رحلة :driver (الموعد: ":event")',
'log_comment_created' => 'تم إضافة تعليق إلى ":event"',
'log_comment_deleted' => 'تم حذف تعليق من ":event"',
'log_file_uploaded' => 'تم رفع الملف ":name"',
@@ -356,6 +360,15 @@ return [
'favicon_uploaded' => 'تم تحديث الأيقونة.',
'favicon_removed' => 'تم إزالة الأيقونة.',
// Logos
'logo_login_label' => 'شعار تسجيل الدخول',
'logo_login_desc' => 'يُعرض في صفحة تسجيل الدخول فوق اسم التطبيق.',
'logo_app_label' => 'شعار التطبيق (شريط التنقل)',
'logo_app_desc' => 'يُعرض في شريط التنقل بجانب اسم التطبيق.',
'logo_current' => 'الشعار الحالي',
'logo_remove' => 'إزالة الشعار',
'logo_hint' => 'PNG, SVG, JPG, GIF, WebP (الحد الأقصى 1 ميجابايت)',
// Undo / Revert
'log_revert' => 'تراجع',
'log_revert_confirm' => 'هل تريد حقاً التراجع عن هذا الإجراء؟',
@@ -546,4 +559,21 @@ return [
'mail_test_button' => 'اختبار الاتصال',
'mail_testing' => 'جاري اختبار الاتصال...',
'mail_test_success' => 'اتصال SMTP ناجح!',
// إحصائيات اللاعبين
'stats_player_detail' => 'تفاصيل اللاعب',
'stats_total_goals' => 'إجمالي الأهداف',
'stats_total_shots' => 'إجمالي التسديدات',
'stats_gk_appearances' => 'مباريات كحارس',
'stats_total_saves' => 'إجمالي التصديات',
'stats_close' => 'إغلاق',
'player_goals' => 'أهداف',
// المراكز والملعب
'position' => 'المركز',
'court_visualization' => 'تشكيلة الملعب',
'court_no_data' => 'لا توجد بيانات',
'performance_good' => 'جيد',
'performance_average' => 'متوسط',
'performance_below' => 'أقل من المتوسط',
];

View File

@@ -31,6 +31,25 @@ return [
'timekeeper_short' => 'ميقاتي',
'no_timekeeper_yet' => 'لم يتم تعيين ميقاتي بعد.',
'timekeeper_updated' => 'تم تحديث حالة الميقاتي.',
// مشاركة السيارات
'carpool' => 'مشاركة السيارات',
'carpool_offer' => 'عرض رحلة',
'carpool_update' => 'تحديث الرحلة',
'carpool_seats' => 'المقاعد المتاحة',
'carpool_seats_count' => ':free من :total مقاعد متاحة',
'carpool_seats_too_few' => 'عدد الركاب المسجلين أكبر من عدد المقاعد الجديد.',
'carpool_note_placeholder' => 'مثلاً نقطة اللقاء، وقت المغادرة...',
'carpool_withdraw' => 'سحب الرحلة',
'carpool_withdraw_confirm' => 'هل تريد حقاً سحب الرحلة؟ سيتم إزالة جميع الركاب.',
'carpool_join' => 'تعيين',
'carpool_leave' => 'إزالة',
'carpool_full' => 'جميع المقاعد مشغولة',
'no_carpool_yet' => 'لا توجد عروض مشاركة سيارات بعد.',
'carpool_my_offer' => 'رحلتي',
'carpool_driver' => 'السائق',
'carpool_passengers' => 'الركاب',
'comments' => 'التعليقات',
'comment_placeholder' => 'اكتب تعليقاً...',
'no_comments' => 'لا توجد تعليقات بعد.',
@@ -57,6 +76,22 @@ return [
'score_away' => 'الفريق الضيف',
'vs' => 'ضد',
// إحصائيات اللاعبين
'stats' => 'إحصائيات اللاعبين',
'stats_save' => 'حفظ الإحصائيات',
'stats_saved' => 'تم حفظ الإحصائيات.',
'stats_goalkeeper' => 'حارس',
'stats_goalkeeper_long' => 'حارس المرمى',
'stats_saves' => 'تصديات',
'stats_shots_on_goal' => 'تسديدات على المرمى',
'stats_goals' => 'أهداف',
'stats_shots' => 'تسديدات',
'stats_note' => 'ملاحظة',
'stats_hit_rate' => 'نسبة الإصابة',
'stats_save_rate' => 'نسبة التصدي',
'stats_no_data' => 'لا توجد بيانات إحصائية.',
'stats_position' => 'المركز',
// Staff visibility
'signed_up' => 'سجّل',
'withdrawn' => 'انسحب',

View File

@@ -82,6 +82,24 @@ return [
'parent_rep' => 'ممثل أولياء الأمور',
'user' => 'ولي أمر',
],
'player_position' => [
'torwart' => 'حارس مرمى',
'links_aussen' => 'جناح أيسر',
'rechts_aussen' => 'جناح أيمن',
'rueckraum_links' => 'ظهير أيسر',
'rueckraum_mitte' => 'صانع ألعاب',
'rueckraum_rechts' => 'ظهير أيمن',
'kreislaeufer' => 'دوّار',
],
'player_position_short' => [
'torwart' => 'حر',
'links_aussen' => 'جأ',
'rechts_aussen' => 'جي',
'rueckraum_links' => 'ظأ',
'rueckraum_mitte' => 'صأ',
'rueckraum_rechts' => 'ظي',
'kreislaeufer' => 'دو',
],
],
'locales' => [
'de' => 'Deutsch',