UI/UX pass: i18n completion, responsive fixes, cleanup
Deploy Iddaai Frontend / build-and-deploy (push) Successful in 2m37s

- Fix flex 'align=flex-start' shrinking content to min width in column
  mode on matches, dashboard, and coupon-builder layouts (mobile/tablet
  cards now span full width)
- Localize all user-facing hardcoded Turkish strings: lineups card,
  odds card, v28 odds band panel, team/league pages, teams search,
  auth toasts, league headers (new keys in tr/en messages)
- Populate empty predictions.prediction-reasons group (20 veto reasons)
  and missing predictions.ui keys so the EN locale gets full coverage
- Use the active locale for all date formatting instead of hardcoded
  tr-TR (match card, match detail, team detail)
- Replace raw native date input with Chakra Input (dark mode + theming)
- Rename match-detail first tab from 'Tüm Maçlar' to 'Genel Bakış'
- Fix '4 maçlar' grammar with a proper {count} maç message
- Delete dead 3300-line Chakra showcase component (home-card.tsx)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 16:55:52 +03:00
parent 095992ad26
commit 5dc3d7e3a3
20 changed files with 407 additions and 3463 deletions
+126 -7
View File
@@ -38,7 +38,9 @@
"login-success": "Login successful!",
"register-success": "Registration successful!",
"login-required-title": "Login Required",
"login-required-message": "Please sign in or create an account to view match analysis."
"login-required-message": "Please sign in or create an account to view match analysis.",
"login-error": "Login failed!",
"register-error": "Registration failed!"
},
"all-right-reserved": "All rights reserved.",
"privacy-policy": "Privacy Policy",
@@ -155,7 +157,26 @@
"penalty": "Penalty",
"half-time": "1st Half",
"second-half": "2nd Half",
"assist": "Assist"
"assist": "Assist",
"live-odds": "Live Betting Odds",
"lineup-official-xi": "Official Starting XI",
"lineup-confirmed-squad": "Confirmed Squad",
"lineup-confirmed": "Confirmed",
"lineup-confirmed-live-desc": "The lineup has been officially confirmed.",
"lineup-participation-desc": "Lineup taken from match participation data.",
"lineup-probable-squad": "Probable Squad",
"lineup-probable": "Probable",
"lineup-probable-desc": "Probable lineup based on starting XI data from recent matches. The AI analysis is based on this squad.",
"lineup-info": "Lineup Info",
"lineup-pending": "Awaiting Lineup",
"lineup-pending-desc": "The lineup has not been announced yet. The AI analysis is based on overall team strength and statistics.",
"lineup-tbd": "Lineup not yet known",
"lineup-tbd-sub": "Will be updated close to kick-off",
"lineup-not-announced": "Lineup Not Announced Yet",
"lineup-not-announced-desc": "{home} and {away} lineups will be updated close to kick-off. The AI analysis is based on team statistics and balance of strength.",
"overview": "Overview",
"match-count": "{count} matches",
"odds-legend": "% = model's calibrated hit probability · ↓↑ = opening→closing movement"
},
"predictions": {
"title": "Predictions",
@@ -223,7 +244,27 @@
"no_bet_conditions_met": "The algorithm could not find a safe/valuable bet for this match.",
"insufficient_play_score": "Model signal is below the threshold.",
"no_ev_edge_minimum_stake": "Passed safety gates but no mathematical edge — minimum stake applied.",
"upset_risk_detected": "High upset risk detected, proceed with caution."
"upset_risk_detected": "High upset risk detected, proceed with caution.",
"confidence_interval_too_wide": "The confidence interval is too wide.",
"confidence_band_low": "The confidence band is low.",
"draw_probability_elevated": "The draw probability looks elevated.",
"balanced_match_risk": "The match looks balanced; there is upset risk.",
"high_total_goal_volatility": "High goal tempo increases the upset risk.",
"mutual_goal_pressure": "Both teams are generating goal threat.",
"late_goal_swing_risk": "High risk of a late goal or score swing.",
"live_match_open_state": "The live match has turned completely open.",
"live_match_active_state": "The live match is more active than expected.",
"live_state_impossible_market": "The live match state invalidates this market.",
"live_score_exceeds_under_line": "The live score is very close to or past the under line.",
"score_model_conflicts_with_under_pick": "The score and xG model conflict with this under pick.",
"score_model_conflicts_with_over_pick": "The score and xG model conflict with this over pick.",
"market_stack_conflict_over25": "The over 2.5 signal conflicts with this market.",
"market_stack_conflict_btts": "The BTTS signal conflicts with this market.",
"live_total_goals_close_to_line": "The live total goals are too close to this line.",
"score_model_conflicts_with_btts_no": "The score and xG model conflict with the BTTS-No pick.",
"score_model_conflicts_with_draw_pick": "The score model does not support the draw pick.",
"score_model_conflicts_with_home_pick": "The score model does not support the home pick.",
"score_model_conflicts_with_away_pick": "The score model does not support the away pick."
},
"ev-edge": "Theoretical Edge",
"implied-prob": "Market Probability",
@@ -360,7 +401,11 @@
"confidence-medium": "Medium",
"confidence-low": "Low",
"confidence-unknown": "Unknown",
"info": "Info"
"info": "Info",
"unified-confidence": "Confidence Score",
"underdog-ref-tooltip": "Model probability of the underdog side (informational)",
"trap-tooltip": "The market is overconfident",
"no-value-tooltip": "Model agrees with the favourite but the odds are too low"
}
},
"coupons": {
@@ -487,7 +532,8 @@
"freq-mode-active": "Frequency Engine active",
"ai-mode-active": "AI Engine active",
"engine-mode-label": "Engine Mode",
"engine-mode-help": "AI: Gemini-based AI prediction. Frequency: Database-driven statistical analysis."
"engine-mode-help": "AI: Gemini-based AI prediction. Frequency: Database-driven statistical analysis.",
"all-markets-scanned": "All markets will be scanned"
},
"profile": {
"title": "Profile",
@@ -519,7 +565,14 @@
"leagues": "Leagues",
"countries-leagues": "Countries & Leagues",
"search-at-least-2": "Type at least 2 characters to search teams.",
"all": "All"
"all": "All",
"back-to-leagues": "Back to Leagues",
"league-not-found": "League Not Found",
"past-matches": "Past Matches",
"not-found": "Not Found",
"no-leagues-found": "No leagues match the selected criteria.",
"team-not-found": "Team Not Found",
"no-teams-found": "No team found matching \"{query}\"."
},
"h2h": {
"title": "Head to Head",
@@ -809,5 +862,71 @@
"remaining": "remaining"
}
},
"refund-policy": "Refund Policy"
"refund-policy": "Refund Policy",
"teams": {
"search-placeholder": "Type a team name... (min 2 characters)",
"search-hint": "Type the name of the team you are looking for",
"search-example": "E.g.: Galatasaray, Barcelona, Manchester City",
"no-results": "No results found",
"upcoming": "Upcoming",
"not-found": "Team not found",
"matches-count": "Matches",
"upcoming-matches": "Upcoming Matches",
"past-matches": "Past Matches",
"page-info": "Page {page}/{totalPages} • {total} matches in total",
"no-past-matches-season": "No past matches found for this season"
},
"v28": {
"avg-cards": "Avg: {avg} cards",
"band": "Band",
"cards-analysis": "Cards Analysis",
"combined-over-rate": "Combined OVER Rate",
"combined-weighting": "Weighted 60% referee + 40% teams",
"confirmations": "Confirm",
"engines-agree": "Engines Agree",
"engines-disagree": "Engines Disagree",
"ft": "FT",
"ht": "HT",
"htft-info": "Historical hit rates of half-time/full-time combinations within a similar odds band.",
"htft-title": "HT/FT Combinations",
"insufficient": "LOW DATA",
"insufficient-data": "Insufficient data — not enough match samples yet.",
"label-away": "FT Away",
"label-btts_yes": "BTTS Yes",
"label-cards_over": "Cards Over",
"label-dc_12": "DC 12",
"label-dc_1x": "DC 1X",
"label-dc_x2": "DC X2",
"label-home": "FT Home",
"label-ht_away": "HT Away",
"label-ht_home": "HT Home",
"label-ht_ou05_over": "HT Over 0.5",
"label-ht_ou15_over": "HT Over 1.5",
"label-htft_11": "HT/FT 1/1",
"label-htft_12": "HT/FT 1/2",
"label-htft_1x": "HT/FT 1/X",
"label-htft_21": "HT/FT 2/1",
"label-htft_22": "HT/FT 2/2",
"label-htft_2x": "HT/FT 2/X",
"label-htft_x1": "HT/FT X/1",
"label-htft_x2": "HT/FT X/2",
"label-htft_xx": "HT/FT X/X",
"label-oe_odd": "Odd",
"label-ou15_over": "Over 1.5",
"label-ou25_over": "Over 2.5",
"label-ou35_over": "Over 3.5",
"matches-count": "{count} matches",
"odds": "Odds",
"over-rate": "Over rate",
"panel-info": "Statistical analysis of results that occurred at similar odds in past matches. Includes Triple Value, Cards Profile, and HT/FT combinations.",
"panel-title": "V28 Odds Band Analysis",
"pass": "PASS",
"referee-profile": "Referee Profile",
"strongest": "Strongest",
"team-profile": "Team Profile",
"triple-value-info": "Comparison of model probability, odds-band statistics, and market odds. A positive edge means the model sees an advantage.",
"triple-value-title": "Value Detection (Triple Value)",
"value": "VALUE",
"value-signals": "{count} Value Signals"
}
}