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

@@ -325,6 +325,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" загружен',
@@ -374,6 +378,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' => 'Вы действительно хотите отменить это действие?',
@@ -564,4 +577,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

@@ -40,6 +40,24 @@ return [
'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' => 'Написать комментарий...',
@@ -71,6 +89,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',