From dbc36c7cb8214ba264276f61615231d5a4789f1f Mon Sep 17 00:00:00 2001 From: Luke Policinski Date: Thu, 9 Jul 2026 22:28:18 -0400 Subject: [PATCH] Update source file en.json [ci skip] --- i18n/locales/en.json | 8835 +++++++++++------------------------------- 1 file changed, 2324 insertions(+), 6511 deletions(-) diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 40a1887d2..2471a9d57 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -1,6565 +1,2378 @@ { - "system_alerts": { - "page_title": "Alerts", - "description": "Post temporary site-wide banners to warn users about outages, maintenance or other notices. Banners appear at the top of every page for all visitors.", - "create_title": "New Alert", - "edit_title": "Edit Alert", - "active_title": "Alerts", - "dismiss": "Dismiss", - "saved": "Alert saved", - "deleted": "Alert deleted", - "create": "Create Alert", - "update": "Save Changes", - "cancel": "Cancel", - "delete": "Delete", - "empty": "No alerts yet.", - "empty_description": "Create an alert to post a site-wide banner for everyone.", - "inactive": "Inactive", - "expired": "Expired", - "expires": "Expires", - "preview": "Preview", - "preview_placeholder": "Your alert message will appear here.", - "not_dismissible": "Users can't dismiss this alert", - "delete_confirm_title": "Delete this alert?", - "delete_confirm_description": "This permanently removes the alert. If it's active, the banner disappears for everyone immediately.", - "types": { - "info": "Info", - "warning": "Warning", - "critical": "Critical" + "pagination": { + "items_per_page": "per page" }, - "fields": { - "type": "Severity", - "expires_at": "Expires at (optional)", - "title": "Title (optional)", - "title_placeholder": "Scheduled maintenance", - "message": "Message", - "message_placeholder": "Matchmaking is temporarily down while we investigate.", - "is_active": "Active", - "is_active_hint": "Show this banner to everyone right now.", - "dismissible": "Dismissible", - "dismissible_hint": "Let users close the banner (turn off for critical notices)." - } - }, - "glossary": { - "title": "How Our Stats Work", - "intro": "We don't hide our math. Every stat on the site is explained below — what it means and exactly how we work it out. Think something is wrong, or know a better way to measure it? We'd genuinely love to hear it.", - "github_cta": "Suggest an improvement on GitHub", - "calc_label": "How it's calculated", - "legend": { - "title": "Notation", - "note": "Brackets narrow a stat to a subset — e.g. H (rifle) = rifle hits, S (spotted) = shots while an enemy was visible. Per-round rates (KPR, DPR, APR, ADR, KAST) reuse these letters over R." - }, - "scores": { - "title": "Reading the 0–100 ratings", - "body": "Aim, Positioning, Utility and the per-stat ratings are scored out of 100 — but it's a percentile, not a percentage. 50 is an average player; 90 means you're better than ~90% of players; 20 means most players do better. This can surprise you: almost everyone counter-strafes, and the typical player does it ~81% of the time — so counter-strafing 80% of the time actually lands around 22 (just below average), even though 80% sounds high. The rating tells you where you stand versus everyone else; the raw rate is still in the match stat tables." - }, - "performance": { - "title": "Performance ratings (Aim / Positioning / Utility)", - "body": "We take the underlying stats for each area, score each one as a percentile against every other player (using players with at least 30 rounds), then average them into a single 0–100 rating per area. Aim grows richer over time: stats like crosshair placement and time-to-damage fold in as more demos are parsed." - }, - "consistency": { - "title": "Consistency", - "body": "Each match gets one overall score — your Aim, Positioning and Utility for that match, combined. The chart plots it over your recent matches, and the consistency number reflects how little it swings: a flatter line scores higher." - }, - "focus": { - "title": "Focus areas", - "body": "Your three lowest-scoring underlying stats — the spots with the most room to grow — each with a short tip. They update as you play." - }, - "geometry": { - "title": "Line of sight & the 3D model", - "body": "On maps we have a collision mesh for, we load the map's 3D geometry and ray-cast between players to confirm a real line of sight. So 'spotted', crosshair placement, time-to-damage and engagement stats only count when you could actually see the enemy — not through smoke or a wall. On maps without a mesh we fall back to the game's spotted flag and label those stats 'Estimated'." - }, - "sections": { - "aim": "Aim stats", - "impact": "Impact & trade stats", - "utility": "Utility & flash stats", - "economy": "Economy & buy stats", - "clutches": "Clutch stats", - "roles": "Roles", - "elo": "ELO & rating", - "head_to_head": "Head-to-head stats", - "arsenal": "Arsenal (per weapon)" - }, - "guide_link": "Stats Guide", - "scale_worse": "Subpar", - "scale_better": "Elite", - "scale_legend": "— rough scale of what subpar to elite looks like for each stat", - "scale_hint": "Rough subpar → elite scale (estimated, not from your data yet)", - "mesh_help": "Uses the map's 3D collision mesh. We ray-cast a line of sight between the two players, so only real sightlines count — spots through smoke, walls or thin gaps are filtered out. Needs the map geometry to be available; falls back to the raw engine data when it isn't.", - "mesh_legend": "marks a stat validated against the map's 3D collision mesh (line-of-sight checked)", - "mesh_coverage_title": "Map mesh coverage", - "mesh_coverage_note": "Mesh-validated stats (marked above) only get their line-of-sight check on maps we have a collision mesh for. Official maps without a mesh fall back to the raw engine spotted flag. Workshop maps are not listed here.", - "mesh_coverage_loading": "Checking which maps have a mesh…", - "mesh_have": "Mesh available ({count})", - "mesh_missing": "No mesh yet ({count})", - "mesh_missing_none": "Every official map has a mesh.", - "var_help": { - "k": "Kills", - "d": "Deaths", - "a": "Assists", - "r": "Rounds played", - "h": "Hits — bullets that hit an enemy", - "s": "Shots fired", - "dmg": "Damage dealt", - "e": "Distinct enemies", - "t": "Time", - "theta": "Angle from your aim to the enemy", - "sv": "Survived — you lived to the end of the round", - "tr": "Traded — your death was avenged by a teammate", - "kpr": "Kills per round", - "dpr": "Deaths per round", - "apr": "Assists per round", - "adr": "Damage per round", - "kast": "Kill / Assist / Survive / Trade %", - "i": "Impact — the sub-formula shown below", - "kda": "Kills / Deaths / Assists", - "n": "a count — the number used in this expression", - "spotted": "only while the enemy was visible to you", - "rifle": "rifles only — AK, M4 and similar", - "pistol": "pistols only", - "sniper": "the AWP and scoped rifles", - "head": "headshots only", - "first_sight": "the first moment the mesh confirms you could see the enemy", - "first_shot": "the first bullet of an engagement", - "spray": "the bullets after the first in a burst", - "stopped": "fired while standing still — you counter-strafed first", - "eligible": "shots where counter-strafing was possible", - "on_target": "time your crosshair was on the enemy", - "engaged": "the full time you were in the fight", - "damaged": "enemies you actually dealt damage to", - "traded": "your death was avenged by a teammate moments later", - "trade_chance": "deaths where a teammate was positioned to trade", - "util": "grenade damage — HE and molotov", - "he": "a high-explosive (HE) grenade", - "awp": "the AWP specifically" - }, - "formulas": { - "accuracy": { - "num": "H", - "den": "S" - }, - "accuracy_spotted": { - "num": "H (spotted)", - "den": "S (spotted)" - }, - "rifle_accuracy": { - "num": "H (rifle)", - "den": "S (rifle)" - }, - "pistol_accuracy": { - "num": "H (pistol)", - "den": "S (pistol)" - }, - "sniper_accuracy": { - "num": "H (sniper)", - "den": "S (sniper)" - }, - "head_accuracy": { - "num": "H (head)", - "den": "H", - "note": "AWP excluded" - }, - "hs_kill_pct": { - "num": "K (head)", - "den": "K" - }, - "first_bullet_accuracy": { - "num": "H (first shot)", - "den": "S (first shot)" - }, - "spray_accuracy": { - "num": "H (spray)", - "den": "S (spray)" - }, - "time_to_damage": { - "expr": "avg(t from first sight to first damage)", - "note": "milliseconds; capped to 0.2–3s" - }, - "crosshair_placement": { - "expr": "avg(θ at first sight)", - "note": "degrees; lower is better" - }, - "counter_strafing": { - "num": "S (stopped)", - "den": "S (eligible)", - "note": "rifle shots at a spotted enemy" - }, - "tracking": { - "num": "t (on target)", - "den": "t (engaged)" - }, - "spotted_acc": { - "num": "E (damaged)", - "den": "E (spotted)" - }, - "hltv": { - "expr": "0.0073·KAST + 0.3591·KPR − 0.5329·DPR + 0.2372·I + 0.0032·ADR + 0.1587", - "note": "I (impact) = 2.13·KPR + 0.42·APR − 0.41" - }, - "kast": { - "num": "R (K / A / SV / TR)", - "den": "R" - }, - "adr": { - "num": "DMG", - "den": "R" - }, - "kd": { - "num": "K", - "den": "D" - }, - "kpr": { - "num": "K", - "den": "R" - }, - "dpr": { - "num": "D", - "den": "R" - }, - "mkr": { - "expr": "count(rounds with K ≥ 2)" - }, - "survived_pct": { - "num": "R − D", - "den": "R" - }, - "trade_kills": { - "expr": "count(kills that avenge a teammate ≤ 5s)" - }, - "traded": { - "num": "D (traded)", - "den": "D (trade chance)" - }, - "opening": { - "num": "opening duels won", - "den": "opening duels" - }, - "opening_attempts": { - "num": "opening duels", - "den": "R" - }, - "flash_assists": { - "expr": "count(assists set up by your flash)" - }, - "flash_blind": { - "num": "enemy blind time", - "den": "R" - }, - "util_efficiency": { - "num": "DMG (util)", - "den": "nades thrown" - }, - "enemies_flashed_per": { - "num": "enemies blinded", - "den": "flashes thrown" - }, - "udr": { - "num": "DMG (util)", - "den": "R" - }, - "trade_kill_pct": { - "num": "trade kills", - "den": "trade chances" - }, - "he_damage": { - "expr": "DMG (HE, to enemies)" - }, - "molotov_damage": { - "expr": "DMG (molotov, to enemies)" - }, - "he_team_damage": { - "expr": "DMG (HE, to teammates)" - }, - "enemies_flashed": { - "expr": "count(enemies blinded > 1s)" - }, - "team_flashed": { - "expr": "count(teammates blinded > 1s)" - }, - "avg_flash_duration": { - "num": "enemy blind time", - "den": "enemy flashes" - }, - "unused_utility": { - "expr": "total nade $ still on you when you die" - }, - "wasted_magazine_pct": { - "num": "bullets left at reload", - "den": "S" - }, - "elo": { - "expr": "skill rating, updated every match" - }, - "elo_change": { - "expr": "Kf × (result − expected) × performance × series", - "note": "Kf (K-factor) = 500; series scales by map differential in a Bo-N" - }, - "elo_impact": { - "expr": "your KDA vs the team + damage share → 0.8–1.2", - "note": "on a loss it's inverted so strong performers lose less" - }, - "buy_pistol": { - "expr": "round 1 or 13" - }, - "buy_eco": { - "expr": "team $ < $5,000" - }, - "buy_force": { - "expr": "$5,000 ≤ team $ ≤ $20,000" - }, - "buy_full": { - "expr": "team $ > $20,000" - }, - "buy_win_rate": { - "num": "rounds won (buy type)", - "den": "rounds (buy type)" - }, - "man_advantage": { - "num": "rounds won (won opening duel)", - "den": "rounds (won opening duel)" - }, - "man_disadvantage": { - "num": "rounds won (lost opening duel)", - "den": "rounds (lost opening duel)" - }, - "clutch": { - "expr": "last alive vs N enemies (N ≥ 1)" - }, - "clutch_won": { - "expr": "1vN → 1v0 (all enemies down)" - }, - "clutch_saved": { - "expr": "round won while you survived" - }, - "clutch_lost": { - "expr": "you died, round lost" - }, - "clutch_win_rate": { - "num": "clutches won", - "den": "won + lost + saved" - }, - "clutch_against": { - "expr": "enemies alive when the clutch began" - }, - "kills_in_clutch": { - "expr": "count(kills during a 1vN)" - }, - "role_sniper": { - "expr": "main AWPer — K(awp) ≥ 5 and ≥ 20% of K" - }, - "role_entry": { - "expr": "most opening duels (AWPer aside)" - }, - "role_support": { - "expr": "top utility score (AWPer & entry aside)" - }, - "role_rifler": { - "expr": "default — none of the above" - }, - "awp_share": { - "num": "K (awp)", - "den": "K" - }, - "entry_rate": { - "num": "opening duels", - "den": "R" - }, - "support_idx": { - "expr": "(flash assists + DMG (util) ÷ 100 + flashes × 0.3) ÷ R" - }, - "net_trade": { - "expr": "trade kills − untraded deaths" - }, - "trade_kill_opportunities": { - "expr": "count(teammate deaths near you)" - }, - "trade_kill_attempts": { - "expr": "count(trade chances you shot at)" - }, - "traded_death_opportunities": { - "expr": "count(D with a teammate able to trade)" - }, - "traded_death_attempts": { - "expr": "count(D a teammate shot to avenge)" - }, - "traded_death_pct": { - "num": "D (traded)", - "den": "D (trade chance)" - }, - "total_damage": { - "expr": "total DMG (to enemies)" - }, - "team_damage": { - "expr": "total DMG (to teammates)" - }, - "knife_kills": { - "expr": "count(K with knife)" - }, - "zeus_kills": { - "expr": "count(K with zeus)" - }, - "multi_kill_breakdown": { - "expr": "count(rounds with exactly N K), N = 2–5" - }, - "flashes_thrown": { - "expr": "count(flashes thrown)" - }, - "smokes_thrown": { - "expr": "count(smokes thrown)" - }, - "round_win_pct": { - "num": "R won", - "den": "R" - }, - "pistol_win_pct": { - "num": "pistol R won", - "den": "pistol R" - }, - "opening_win_pct": { - "num": "opening duels won (team)", - "den": "opening duels (team)" - }, - "team_trade_pct": { - "num": "team trades won", - "den": "team trade chances" - }, - "buy_matchup": { - "expr": "R won (your buy vs theirs) ÷ R (matchup) × 100" - }, - "h2h_kills": { - "expr": "count(your K on this enemy)" - }, - "h2h_damage": { - "expr": "total DMG to this enemy" - }, - "h2h_flashes": { - "expr": "count(your flashes that blind this enemy)" - }, - "h2h_weapon_class": { - "expr": "your K on this enemy, by weapon class" - }, - "weapon_usage_pct": { - "num": "K (weapon)", - "den": "K" - }, - "weapon_rating": { - "expr": "blend of KPR, ADR & impact per weapon", - "note": "approx — no per-weapon D / KAST" - }, - "weapon_economy": { - "expr": "weapon rating × (baseline $ ÷ weapon $)", - "note": "≈ 1.0 = on par for its price" - }, - "consistency": { - "expr": "100 − match-to-match swing in overall rating" - } - } - }, - "stat_glossary": { - "aim": { - "label": "Aim", - "description": "Your shooting — accuracy, headshots, and how quickly/cleanly you hit visible enemies. Scored 0–100 as the average percentile of those aim stats vs all players (50 = average)." - }, - "positioning": { - "label": "Positioning", - "description": "Where you fight — surviving rounds, dying near teammates so you get traded, and contributing every round (KAST). Scored 0–100 as the average percentile of those stats vs all players (50 = average)." - }, - "utility": { - "label": "Utility", - "description": "Grenade impact — flash assists, how much you blind enemies, and HE/molotov damage per nade. Scored 0–100 as the average percentile vs all players. Provisional: utility doesn't yet cleanly separate skill on our data." - }, - "consistency": { - "label": "Consistency", - "description": "Each match gets one overall score (Aim, Positioning and Utility combined). Consistency reflects how little that score swings match to match — less swing is better." - }, - "accuracy": { - "label": "Accuracy", - "description": "Bullets that hit an enemy, out of every bullet you fired." - }, - "accuracy_spotted": { - "label": "Spotted Accuracy", - "description": "Your hit rate while an enemy was actually visible — spam through smoke or walls doesn't count." - }, - "crosshair_placement": { - "label": "Crosshair Placement", - "description": "How close your crosshair already is to the enemy when they appear. A smaller angle means less to move before firing." - }, - "time_to_damage": { - "label": "Time to Damage", - "description": "How fast you deal damage after first seeing an enemy — a proxy for reaction speed." - }, - "counter_strafing": { - "label": "Counter-Strafing", - "description": "How often you fully stop moving before firing. Shots while moving are wildly inaccurate." - }, - "first_bullet": { - "label": "First Bullet", - "description": "How often your opening shot of a duel hits — the shot that decides most fights." - }, - "tracking": { - "label": "Tracking", - "description": "While engaging a visible enemy, how much of the time your crosshair stays on them." - }, - "flash_assists": { - "label": "Flash Assists", - "description": "Kills your flash set up — you blinded an enemy and a teammate killed them shortly after." - }, - "flash_blind": { - "label": "Flash Effectiveness", - "description": "How much enemy blindness your flashes actually cause — rewards pop-flashes, not flashes thrown over heads." - }, - "util_efficiency": { - "label": "Utility Damage", - "description": "Damage dealt per HE/molotov you throw — rewards landing nades, not just buying them." - }, - "trade_kills": { - "label": "Trade Kills", - "description": "Kills where you avenged a teammate who had just died (within a few seconds)." - }, - "traded": { - "label": "Traded Deaths", - "description": "How often, when you die, a teammate trades the kill back right after — a sign of fighting near your team." - }, - "opening": { - "label": "Opening Duels", - "description": "Your win rate in the first duel of the round — first kill versus first death." - }, - "opening_attempts": { - "label": "Opening Attempts", - "description": "How often you take the round's first duel." - }, - "buy_pistol": { - "label": "Pistol Round", - "description": "The first round of each half — everyone starts with only a pistol and limited cash." - }, - "buy_eco": { - "label": "Eco", - "description": "An 'eco' round: the team deliberately saves, buying little or nothing (under $5,000 total)." - }, - "buy_force": { - "label": "Force Buy", - "description": "A force / half buy: the team spends most of its money but can't afford a full setup ($5,000–$20,000)." - }, - "buy_full": { - "label": "Full Buy", - "description": "A full buy: rifles, armour and utility for the whole team (over $20,000)." - }, - "buy_win_rate": { - "label": "Buy Win %", - "description": "How often the team wins rounds on a given buy type — useful for spotting weak eco or anti-eco rounds." - }, - "man_advantage": { - "label": "Man Advantage %", - "description": "How often you win the round after winning the opening duel — closing out the rounds you start ahead in." - }, - "man_disadvantage": { - "label": "Man Disadvantage %", - "description": "How often you still win the round after losing the opening duel — clawing back rounds you start behind in." - }, - "net_trade": { - "label": "Net Trade", - "description": "Your trade kills minus your own deaths that a teammate failed to trade back — positive means you trade more than you cost the team." - }, - "trade_kill_opportunities": { - "label": "Trade Kill Opps", - "description": "How often a teammate died near you, giving you a chance to trade the killer." - }, - "trade_kill_attempts": { - "label": "Trade Kill Attempts", - "description": "Of those chances, how often you actually shot at the killer." - }, - "traded_death_opportunities": { - "label": "Traded Death Opps", - "description": "Your deaths where a teammate was positioned to trade you back." - }, - "traded_death_attempts": { - "label": "Traded Death Attempts", - "description": "Of those, how often a teammate actually shot at your killer." - }, - "traded_death_pct": { - "label": "Traded Death %", - "description": "Share of your deaths that a teammate traded back — the same idea as Traded Deaths, shown as its own column." - }, - "total_damage": { - "label": "Total Damage", - "description": "Total damage you dealt to enemies across the map (ADR is this per round)." - }, - "team_damage": { - "label": "Team Damage", - "description": "Damage you dealt to teammates (friendly fire) — lower is better." - }, - "knife_kills": { - "label": "Knife Kills", - "description": "Kills with the knife." - }, - "zeus_kills": { - "label": "Zeus Kills", - "description": "Kills with the Zeus x27 taser." - }, - "multi_kill_breakdown": { - "label": "Multi-Kill Rounds (2K–5K)", - "description": "How many rounds you got exactly 2, 3, 4 or 5 kills in — the breakdown behind Multi-Kill Rounds." - }, - "flashes_thrown": { - "label": "Flashes Thrown", - "description": "How many flashbangs you threw, effective or not." - }, - "smokes_thrown": { - "label": "Smokes Thrown", - "description": "How many smoke grenades you threw." - }, - "round_win_pct": { - "label": "Round Win %", - "description": "Share of rounds the team won." - }, - "pistol_win_pct": { - "label": "Pistol Win %", - "description": "Win rate on pistol rounds — the first round of each half." - }, - "opening_win_pct": { - "label": "Opening Win % (team)", - "description": "Team win rate in the round's first duel." - }, - "team_trade_pct": { - "label": "Trade % (team)", - "description": "How often the team converts its trade chances into trade kills." - }, - "buy_matchup": { - "label": "Buy Matchup Win %", - "description": "Round win rate for each buy-type matchup (e.g. full-buy vs eco), not just your own buy type." - }, - "h2h_kills": { - "label": "H2H Kills", - "description": "Kills you got on a specific opponent in this match." - }, - "h2h_damage": { - "label": "H2H Damage", - "description": "Damage you dealt to a specific opponent in this match." - }, - "h2h_flashes": { - "label": "H2H Flashes", - "description": "How many times your flashes blinded a specific opponent." - }, - "h2h_weapon_class": { - "label": "H2H by Weapon", - "description": "Your kills on an opponent grouped by weapon class — rifle, pistol, sniper, and so on." - }, - "weapon_usage_pct": { - "label": "Most Used %", - "description": "Share of all your kills that came with this weapon." - }, - "weapon_rating": { - "label": "Weapon Rating", - "description": "Approximate HLTV-style rating for a single weapon from its KPR, ADR and impact — directional, since there are no per-weapon deaths or KAST." - }, - "weapon_economy": { - "label": "Weapon Economy", - "description": "A weapon's rating adjusted for its buy cost — about 1.0 means it performs on par for the price, higher means great value." - }, - "trade_kill_pct": { - "label": "Trade Kill %", - "description": "Share of your trade chances you convert — when a teammate dies near you, how often you get the avenging kill." - }, - "he_damage": { - "label": "HE Damage", - "description": "Damage your HE grenades deal to enemies." - }, - "molotov_damage": { - "label": "Molotov Damage", - "description": "Damage your molotovs and incendiaries deal to enemies." - }, - "he_team_damage": { - "label": "HE Team Damage", - "description": "Damage your HE grenades deal to teammates — lower is better." - }, - "enemies_flashed": { - "label": "Enemies Flashed", - "description": "Number of enemies your flashes blinded for a meaningful amount of time (over one second)." - }, - "team_flashed": { - "label": "Teammates Flashed", - "description": "Number of teammates your flashes blinded — lower is better." - }, - "avg_flash_duration": { - "label": "Avg Flash Duration", - "description": "Average time an enemy stays blinded per flash that hits — longer pop-flashes score higher." - }, - "unused_utility": { - "label": "Unused Utility", - "description": "The dollar value of grenades you were still holding when you died — utility you bought but never used." - }, - "wasted_magazine_pct": { - "label": "Wasted Mag %", - "description": "Share of your magazine left unfired when you reload — high values mean reloading too early." - }, - "elo_change": { - "label": "ELO Change", - "description": "How much your ELO moved after a match — scaled by the result, your performance and the series length." - }, - "elo_impact": { - "label": "ELO Impact", - "description": "A 0.8–1.2 multiplier on your ELO change from how you performed relative to your team (KDA and damage share)." - }, - "clutch": { - "label": "Clutch", - "description": "A 1vN situation — you're the last player alive on your team against one or more standing enemies." - }, - "clutch_against": { - "label": "Against (N)", - "description": "How many enemies were alive when your clutch began — the N in 1vN." - }, - "clutch_won": { - "label": "Clutch Won", - "description": "You won the clutch by eliminating every remaining enemy yourself." - }, - "clutch_saved": { - "label": "Clutch Saved", - "description": "Your team won the round while you were still alive, without you having to kill everyone." - }, - "clutch_lost": { - "label": "Clutch Lost", - "description": "You died before the round was won." - }, - "clutch_win_rate": { - "label": "Clutch Win %", - "description": "Share of your clutches that ended in a win (saves and losses count in the denominator)." - }, - "kills_in_clutch": { - "label": "Clutch Kills", - "description": "Kills you made while in a clutch situation." - }, - "role_sniper": { - "label": "Sniper (role)", - "description": "The team's primary AWPer on the map — at least 5 AWP kills and 20%+ of their kills with the AWP." - }, - "role_entry": { - "label": "Entry (role)", - "description": "The player who takes the round's first duel most often (the AWPer aside)." - }, - "role_support": { - "label": "Support (role)", - "description": "The player contributing the most utility value (the AWPer and entry aside)." - }, - "role_rifler": { - "label": "Rifler (role)", - "description": "The default role — a rifler who isn't the AWPer, entry, or main support." - }, - "awp_share": { - "label": "AWP Share", - "description": "The share of your kills that came with the AWP or scoped rifle — drives the Sniper role." - }, - "entry_rate": { - "label": "Entry Rate", - "description": "How often you take the round's first duel — drives the Entry role." - }, - "support_idx": { - "label": "Support Index", - "description": "A utility score combining flash assists, grenade damage and flashes thrown, per round — drives the Support role." - }, - "enemies_flashed_per": { - "label": "Enemies / Flash", - "description": "Average number of enemies blinded per flash thrown — higher means more effective flashes." - }, - "opening_attempts_pct": { - "label": "Attempt Rate", - "description": "Share of rounds where this player took the opening duel (first engagement of the round)." - }, - "opening_success_pct": { - "label": "Win Rate", - "description": "Share of opening duels this player won." - }, - "opening_traded_pct": { - "label": "Traded Rate", - "description": "Share of opening deaths that were traded back by a teammate." - }, - "survived_pct": { - "label": "Survival Rate", - "description": "Share of rounds this player survived (lived to the end of the round)." - }, - "hltv": { - "label": "HLTV Rating", - "description": "HLTV 2.0 overall performance rating combining kills, deaths, KAST, damage and impact. ~1.0 is average." - }, - "rating": { - "label": "HLTV Rating", - "description": "HLTV 2.0 overall performance rating combining kills, deaths, KAST, damage and impact. ~1.0 is average." - }, - "adr": { - "label": "ADR", - "description": "Average Damage per Round — how much damage you deal each round." - }, - "kpr": { - "label": "KPR", - "description": "Kills Per Round." - }, - "dpr": { - "label": "DPR", - "description": "Deaths Per Round." - }, - "kast": { - "label": "KAST", - "description": "Percentage of rounds where you got a Kill, Assist, Survived, or were Traded." - }, - "udr": { - "label": "UDR", - "description": "Utility Damage per Round — grenade (HE + molotov) damage each round." - }, - "hs": { - "label": "Headshot %", - "description": "Share of your kills that were headshots." - }, - "far": { - "label": "FAR", - "description": "First-Action Rating — performance in opening (first kill of the round) duels." - }, - "elo": { - "label": "ELO", - "description": "5Stack matchmaking skill rating — rises and falls with wins and losses." - }, - "kda": { - "label": "K / D / A", - "description": "Average Kills / Deaths / Assists per match." - }, - "k": { - "label": "Kills", - "description": "Total kills." - }, - "a": { - "label": "Assists", - "description": "Total assists — you damaged or flashed an enemy a teammate then killed." - }, - "d": { - "label": "Deaths", - "description": "Total deaths." - }, - "kd": { - "label": "K/D", - "description": "Kill/Death ratio — kills divided by deaths. Above 1.0 means more kills than deaths." - }, - "mkr": { - "label": "Multi-Kill Rounds", - "description": "Rounds in which you got two or more kills." - }, - "mp": { - "label": "Maps Played", - "description": "Number of maps this player has played in the stage." - }, - "cl": { - "label": "Clutch %", - "description": "Share of clutch situations (last player alive, 1vX) that you won." - }, - "cast": { - "label": "CAST", - "description": "Clutch attempts — the number of clutch (1vX) situations you were put in." - }, - "awp": { - "label": "AWP", - "description": "AWP usage / sniper role signal — how much a player relies on the AWP." - } - }, - "pagination": { - "items_per_page": "per page", - "showing_range": "Showing {start}–{end} of {total}", - "first_page": "First page", - "previous_page": "Previous page", - "more_pages": "More pages", - "next_page": "Next page", - "last_page": "Last page" - }, - "trophies_modal": { - "view_tournament": "VIEW TOURNAMENT" - }, - "toasts": { - "link_copied": "Link copied", - "copy_failed": "Copy failed", - "clip_deleted": "Clip deleted", - "delete_failed": "Delete failed", - "clip_removed_named": "\"{title}\" was removed.", - "highlight_removed": "Highlight was removed.", - "could_not_delete_clip": "Could not delete clip. Try again.", - "demo_parsed": "Demo parsed", - "demo_parse_failed": "Failed to parse demo", - "reconnecting": "Reconnecting", - "reconnecting_description": "Re-issuing the connect to the game server.", - "cant_switch": "Can't switch", - "destination_not_ready": "destination match isn't ready", - "stream_switched": "Stream switched", - "stream_switched_description": "Pod reused — feed will repoint in a few seconds.", - "switch_failed": "Switch failed", - "gpu_session_stopped": "GPU session stopped", - "stop_gpu_session": "stop gpu session", - "request_failed": "request failed", - "preview_reset_failed": "Unable to preview tournament match reset", - "resolve_validation_errors": "Please resolve validation errors", - "set_winner_failed": "Unable to set selected winner", - "set_winner_failed_description": "Selected lineup id is missing for this match.", - "match_reset_applied": "Tournament match reset applied", - "match_reset_failed": "Unable to reset tournament match", - "please_try_again": "Please try again.", - "hevc_missing_title": "Can't play this clip", - "hevc_missing_body": "This video is encoded with HEVC (H.265). Your browser can't decode it — install the HEVC Video Extensions on Windows to enable playback:", - "hevc_missing_link": "Get the HEVC Video Extensions" - }, - "shortcut_groups": { - "playback": "Playback", - "kills": "Kills", - "spectate": "Spectate", - "quick_actions": "Quick actions", - "view": "View", - "switch_player": "Switch player (slot 1–{count})", - "prev_spec": "Previous spec target", - "next_spec": "Next spec target", - "lock_free_roam": "Lock / free-roam", - "toggle_fullscreen": "Toggle fullscreen", - "hold_show_scoreboard": "Hold to show scoreboard", - "show_help": "Show this help", - "play_pause": "Play / pause", - "skip_back_15s": "Skip back 15s", - "skip_forward_15s": "Skip forward 15s", - "prev_round": "Previous round", - "next_round": "Next round", - "prev_kill": "Previous kill", - "next_kill": "Next kill", - "toggle_xray": "Toggle x-ray", - "hide_show_openhud": "Hide / show OpenHud", - "reload_demo": "Reload demo" - }, - "recent_highlights": { - "default_title": "Recent Highlights" - }, - "player_roles": { - "user": "User", - "verified_user": "Verified User", - "streamer": "Streamer", - "match_organizer": "Match Organizer", - "tournament_organizer": "Tournament Organizer", - "administrator": "Administrator" - }, - "live_stages": { - "stream_boot": "Stream boot", - "initializing": "Initializing", - "booting": "Allocating GPU", - "downloading_cs2": "Installing CS2", - "install_phase": { - "downloading": "Downloading", - "verifying": "Verifying", - "finalizing": "Finalizing" - }, - "launching_steam": "Launching Steam", - "logging_in": "Logging in", - "launching_cs2": "Launching CS2", - "processing_shaders": "Processing Vulkan shaders", - "skip_shaders": "Skip shaders", - "connecting_to_game": "Connecting to game server", - "live": "Streaming live", - "downloading_demo": "Downloading demo", - "downloading_workshop_map": "Downloading workshop map", - "loading_demo_in_cs2": "Loading demo in CS2", - "queuing_demo": "Queuing demo", - "loading_demo_into_cs2": "Loading demo into CS2", - "demo_loading": "Demo Loading" - }, - "stream_status": { - "errored": "Errored", - "gpu_busy": "GPU busy" - }, - "replay_extras": { - "hud_layout": "HUD layout / visibility", - "reissue_connect": "Re-issue connect (recover from a disconnect)", - "fullscreen_key": "Fullscreen (F)", - "toggle_cs2_hud": "Toggle CS2 demo HUD", - "skip_forward_15s": "Skip forward 15s" - }, - "map_dots": { - "team_1": "TEAM 1", - "team_2": "TEAM 2", - "pick": "PICK", - "winner": "WINNER", - "complete": "COMPLETE", - "live": "LIVE", - "unplayed": "UNPLAYED", - "upcoming": "UPCOMING", - "decider": "Decider" - }, - "elo_change_badge": { - "comp": "COMP", - "wingman": "WINGMAN", - "duel": "DUEL" - }, - "render_queue_status": { - "queued": "Queued", - "rendering": "Rendering", - "uploading": "Uploading", - "done": "Done", - "error": "Error", - "missing": "Missing", - "cancelled": "Cancelled", - "uploading_to_library": "Uploading to your library", - "render_failed": "Render failed", - "queued_waiting": "Queued — waiting for a render slot", - "rendering_on_pod": "Rendering on the game-streamer pod", - "submitting": "Submitting…", - "highlight_queued_title": "Highlight queued", - "highlight_queued_desc_named": "{name}'s highlight will render once a slot is free — find it in Highlights when it's done.", - "highlight_queued_desc": "Your highlight will render once a slot is free — find it in Highlights when it's done." - }, - "match_extras": { - "unknown_date": "Unknown date", - "all_players": "All players" - }, - "round_history": { - "bomb_exploded": "Bomb Exploded", - "bomb_defused": "Bomb Defused", - "time_ran_out": "Time Ran Out", - "ts_eliminated_cts": "Ts Eliminated CTs", - "cts_eliminated_ts": "CTs Eliminated Ts", - "won_man": "Closed out {state}", - "survivors": "Survivors", - "unknown": "Unknown" - }, - "role_radar": { - "all": "All", - "radar_title": "Role Matchup", - "radar_description": "Filter by the role this player was in. Pin a comparison player to overlay them.", - "no_data": "Not enough recent matches to chart." - }, - "notification_context": { - "online": "ONLINE", - "offline": "OFFLINE", - "loading_status": "Loading status…", - "create_team": "Create a team", - "match_default": "Match", - "server_default": "Server", - "node_default": "Node", - "scheduled": "Scheduled", - "expired": "Expired", - "expires_in_days": "Expires in {days}d", - "expires_in_hours": "Expires in {hours}h", - "expires_in_minutes": "Expires in {minutes}m" - }, - "scrim": { - "request_scrim": "Request Scrim", - "request_scrim_vs": "Request scrim vs {name}", - "preferred_maps": "Preferred maps", - "your_team": "Your team", - "select_team": "Select a team", - "proposed_time": "Proposed time", - "pick_from_availability": "← Pick from their availability", - "request_other_time": "Request any other time instead", - "best_of_indicator": "· Best of {bestOf}", - "availability_help": "Pick a start inside their availability, then set the date — you can schedule weeks ahead. A best of {count} runs about {count} hour. | Pick a start inside their availability, then set the date — you can schedule weeks ahead. A best of {count} runs about {count} hours.", - "accepts_outside_hours": "This team accepts requests outside their posted hours — pick any date and time.", - "accepts_any_time": "This team hasn't posted availability but takes requests at any time — pick a date and time.", - "they_must_accept": "They still have to accept.", - "series": "Series", - "no_hour_slot": "{team} has no {hours}-hour slot", - "best_of": "Best of {option}", - "send_request": "Send Request", - "cannot_scrim_self": "A team can't scrim itself", - "time_must_be_future": "Proposed time must be in the future", - "request_sent": "Scrim request sent", - "request_send_error": "Could not send scrim request", - "elo_range": "ELO range", - "any_region": "Any region", - "alerts_description": "Get pinged when a team matching your criteria opens up for scrims.", - "add_alert": "+ Add Alert", - "no_alerts": "No alerts yet.", - "alert_created": "Scrim alert created", - "playtime_tooltip": "Playtime — a scrim started here would still be running", - "available_start": "Available start", - "playtime_legend": "Playtime (~1 hour)", - "selected_start": "Selected start", - "match_window": "Match window ({hours}h)", - "opponents_can_request": "— opponents can request", - "longest_block": "Longest block ≈ {hours}h", - "paint_to_unlock": "— paint a {hours}h+ block to unlock {format}.", - "availability_grid_help": "Drag to paint the start times your team is available (local time). A scrim runs about an hour, so the faded blocks show your real commitment.", - "no_availability_set": "This team hasn't set any availability yet.", - "finder_title": "Scrim Finder", - "finder_description": "Advertise your team, set who you'll play, and run your scrim schedule.", - "open_to_scrims": "Open to Scrims", - "closed": "Closed", - "finder_tab": "Finder", - "requests_tab": "Requests", - "elo_label": "ELO", - "no_active_requests": "No active scrim requests.", - "start_challenge_help": "Challenge a team from the {link} to get started.", - "finder_link": "Scrim Finder", - "outgoing": "Outgoing →", - "incoming": "Incoming ←", - "auto_matched": "· auto-matched", - "view_scheduled_match": "View scheduled match →", - "cancel_scrim": "Cancel scrim", - "counter": "Counter", - "waiting_response": "Waiting on {name} to respond.", - "waiting_opponent": "Waiting on {name}.", - "scrim_accepted": "Scrim accepted", - "scrim_declined": "Scrim declined", - "new_time_proposed": "New time proposed", - "request_cancelled": "Scrim request cancelled", - "discoverable_help": "Make your team discoverable for scrims. Opponents pick the match format when they challenge you.", - "regions_section": "Regions", - "no_regions_available": "No regions are currently available.", - "maps_section": "Maps", - "no_maps_selected": "No maps selected — click Edit to pick maps to scrim.", - "search_maps": "Search maps…", - "official": "Official", - "workshop": "Workshop", - "active_duty": "Active Duty", - "no_maps_match": "No maps match your filters.", - "accepted_elo_range": "Accepted ELO Range", - "fivestack_elo": "5stack ELO", - "weekly_availability": "Weekly Availability", - "allow_outside_hours": "Allow requests outside these hours", - "outside_hours_help": "Opponents can propose any time, not just your painted availability. Leave your availability empty to take requests at any time.", - "notes_section": "Notes", - "notes_placeholder": "Anything opponents should know — server prefs, anti-cheat, voice, etc.", - "settings_saved": "Scrim settings saved", - "settings_save_error": "Failed to save scrim settings" - }, - "elo_chart_bucket": { - "monthly": "Monthly", - "weekly": "Weekly", - "per_match": "Per match" - }, - "tournament_match_impact": { - "source_reset": "Source match (winner reset)", - "delete_recreate": "Match will be deleted and recreated", - "slot_reset": "Bracket slot/state will be reset" - }, - "stream_deck_status": { - "live": "LIVE", - "booting": "BOOTING", - "veto": "VETO", - "spinning_up": "SPINNING UP", - "check_in": "CHECK-IN", - "starting_capture": "Starting capture", - "connecting_to_game_short": "Connecting to game", - "live_short": "Live", - "errored": "Errored" - }, - "gpu_pool_status": { - "no_nodes": "No GPU nodes are currently available", - "live_busy": "GPU busy: a live stream is in progress", - "demo_busy": "GPU busy: a demo is being watched", - "highlights_busy": "GPU busy: highlights are rendering", - "streaming_disabled": "Live streaming is disabled on all GPU nodes", - "demo_disabled": "Demo playback is disabled on all GPU nodes", - "rendering_disabled": "Rendering is disabled on all GPU nodes", - "live_gotv": "Live (GOTV)", - "live_direct": "Live (Direct)", - "live_match": "Live match", - "unknown_user": "Unknown user", - "system_user": "System", - "demo_playback_label": "Demo Playback", - "demo_playback_subline": "Demo playback", - "highlights_render_label": "Highlights Render", - "highlight_render_subline": "Highlight render" - }, - "trophies_manage_form": { - "placement": "Placement", - "team": "Team", - "player": "Player" - }, - "shortcut_overlay": { - "to_close": "to close" - }, - "trophies": { - "title": "Trophies", - "no_trophies": "No Trophies Yet", - "no_trophies_description": "Finish in the top 3 of a tournament to earn a trophy.", - "mvp": "MVP", - "first_place": "1st Place", - "second_place": "2nd Place", - "third_place": "3rd Place", - "tournament": "Tournament", - "placement": "Placement" - }, - "avatar": { - "upload": "Upload avatar", - "change": "Change avatar", - "remove": "Remove avatar", - "upload_roster": "Upload roster", - "change_roster": "Change roster", - "remove_roster": "Remove roster", - "team_avatar": "Team avatar", - "player_avatar": "Player avatar", - "player_roster_image": "Player roster image", - "upload_success": "Avatar uploaded", - "upload_failed": "Avatar upload failed", - "remove_success": "Avatar removed", - "remove_failed": "Failed to remove avatar", - "too_large": "Image must be {size}MB or smaller", - "invalid_type": "Only PNG, JPEG, or WebP images are allowed", - "uploading": "Uploading...", - "drop_to_upload": "Drop to upload", - "hint": "Drag & drop or click · PNG, JPEG, WebP · up to 5 MB", - "roster_hint": "Drag & drop or click · head & shoulders, 400×420 · resized in the browser, then crop and remove background", - "bg_removal_failed": "Failed to remove background", - "roster_editor": { - "title": "Edit roster image", - "description": "Crop to a head-and-shoulders portrait. Optionally remove the background for a transparent image.", - "size_hint": "Output: {w}×{h} WebP · transparent background supported", - "remove_bg": "Remove background", - "removing_bg": "Removing background…", - "notice_player": "Used in matches when this player is not assigned to a team. In team-assigned matches the team's roster image is used instead.", - "notice_team": "Used in matches when this player joins as part of this team. For solo / individual matches the player's own roster image is used.", - "bulk_label": "Also apply to your teams", - "bulk_will_overwrite": "Will overwrite existing", - "bulk_success": "Applied to {count} team(s)", - "bulk_failed": "Failed to apply to {name}" - } - }, - "pages": { - "system_metrics": { - "cpu_usage": "CPU Usage", - "memory_usage": "Memory Usage", - "services": "Services", - "service": "Service", - "network": "Network", - "search_services_placeholder": "Search services or nodes...", - "filter_by_node": "Filter by Node", - "no_services_found": "No services match your current filters.", - "search_nodes_placeholder": "Search game server nodes...", - "cpu_short": "CPU", - "memory_short": "Memory", - "memory_share_tooltip": "{label} in use — {percent}% of this node's total RAM. A near-full red bar means one service is taking over the node's memory.", - "disk_short": "Disks", - "network_short": "Network", - "no_nodes_found": "No game server nodes match your current filters.", - "only_online_nodes": "Only Online Nodes" - }, - "system_logs": { - "follow_logs": "Follow Logs", - "timestamps": "Timestamps" - }, - "coming_soon": "Coming Soon!", - "tournaments": { - "title": "Tournaments", - "description": "Browse live, open, and upcoming tournaments, or filter by status and date to find a specific bracket.", - "create": "Create Tournament", - "open_for_registration": "Open for Registration", - "section_live": "LIVE.TOURNAMENTS", - "section_registration": "REGISTRATION.FEED", - "section_upcoming": "UPCOMING.TOURNAMENTS", - "section_recent": "RECENT.TOURNAMENTS", - "section_results": "FILTERED.RESULTS", - "no_tournaments_title": "Standby — No Tournaments", - "no_tournaments_description": "Nothing live, scheduled, or recently finished.", - "filter": { - "search_placeholder": "Search tournaments by name…", - "status_all": "All", - "status_live": "Live", - "status_registration": "Open", - "status_upcoming": "Upcoming", - "status_finished": "Finished", - "date_all": "All time", - "date_7d": "Last 7 days", - "date_30d": "Last 30 days", - "date_90d": "Last 90 days", - "date_6m": "Last 6 months", - "date_1y": "Last year", - "no_results_title": "No tournaments match", - "no_results_description": "Try clearing filters or widening your search." - }, - "tabs": { - "upcoming": "Upcoming" - } - }, - "manage_tournaments": { - "title": "Manage Tournaments", - "description": "View and manage all tournaments across the platform.", - "search_by_id": "Search by Tournament ID", - "enter_tournament_id": "Enter tournament ID...", - "search_by_name": "Search by Name", - "enter_tournament_name": "Enter tournament name...", - "clear_all": "Clear All", - "sort_by": "Sort by", - "created_at": "Created Date", - "start": "Start Date", - "newest_first": "Newest First", - "oldest_first": "Oldest First", - "only_my_tournaments": "Only My Organized Tournaments" - }, - "scrims": { - "title": "Scrim Finder", - "description": "Browse teams open to scrims, filter by region and maps, then send a request.", - "disabled_message": "The Scrim Finder is currently disabled by your administrator.", - "search_placeholder": "Search teams", - "regions_label": "Regions", - "regions_section": "Regions", - "filter_regions_placeholder": "Filter regions", - "no_regions_found": "No regions found.", - "preferred_maps": "Preferred maps", - "no_map_preferences": "No map preferences set.", - "team_avg_elo": "Team avg ELO", - "sort_by": "Sort by", - "sort_name": "Name", - "sort_elo": "ELO", - "sort_reliable": "Reliable", - "sort_instructions": "Click to add · again to flip direction. Order sets priority.", - "today": "Today", - "no_teams_today": "No teams available today.", - "time_to": "to", - "open_team_new_tab": "Open team in new tab", - "request_scrim": "Request Scrim", - "available_teams": "Available Teams", - "no_teams_match": "No teams match your filters." - }, - "teams": { - "title": "Teams", - "create": "Create Team", - "no_teams_title": "No Teams Found", - "no_teams": "No teams found.", - "search": "Search...", - "vetos": { - "section": "Map Preference & Veto Tendencies", - "description": "How this team approaches the map veto, and how each map performs once it reaches the server.", - "loading": "Loading veto history…", - "empty_title": "No veto history", - "empty_description": "This team has not completed any matches with recorded map vetos yet.", - "most_banned": "Most Banned", - "most_picked": "Most Picked", - "comfort_map": "Comfort Map", - "comfort_hint": "Needs {n}+ played", - "bans_short": "bans", - "picks_short": "picks", - "played_short": "played", - "col_map": "Map", - "col_played": "Played", - "col_win": "Win%", - "col_banned": "Banned", - "col_picked": "Picked", - "col_first_ban": "1st Ban", - "col_first_pick": "1st Pick", - "col_decider": "Decider", - "based_on": "Based on {n} veto records" - }, - "veto_sim": { - "section": "Veto Simulation", - "description": "Estimate the likely veto outcome and map win chances against a chosen opponent, based on both teams' veto history.", - "opponent": "Opponent", - "select_opponent": "Select opponent team", - "estimate_notice": "Estimate only — derived from historical veto tendencies, not a guaranteed outcome.", - "loading": "Loading opponent veto history…", - "no_self_title": "No veto history for this team", - "no_self_description": "Simulation needs this team to have recorded map vetos first.", - "pick_opponent_title": "Choose an opponent", - "pick_opponent_description": "Select an opponent team to simulate the map veto.", - "no_opp_title": "No veto history for opponent", - "no_opp_description": "The selected opponent has no recorded map vetos to simulate against.", - "confidence_self": "This team: {n} records", - "confidence_opp": "Opponent: {n} records", - "col_map": "Map", - "col_ban": "Ban Likelihood", - "col_pick": "Pick Likelihood", - "col_play": "Play Likelihood", - "col_predicted_win": "Predicted Win%" - } - }, - "settings": { - "account": { - "my_account": "My Account", - "api_keys": "API Keys", - "external_matches": "Linked Accounts", - "api_keys_management": { - "add_api_key": "Add API Key", - "description": "Keys authenticate requests to the 5Stack API — treat them like passwords.", - "view_docs": "View API docs", - "no_api_keys": "No API keys yet", - "no_api_keys_hint": "Create your first key to start making authenticated requests to the 5Stack API.", - "add_first_api_key": "Create your first key", - "create_new_api_key": "Create New API Key", - "create_new_description": "Create a new API key with a descriptive label to identify its purpose.", - "label": "Label", - "label_placeholder": "e.g., My App, Development, Production", - "label_description": "Choose a descriptive name to identify this API key.", - "created": "Created", - "last_used": "Last Used", - "never": "Never", - "actions": "Actions", - "delete_confirmation_title": "Delete API Key", - "delete_confirmation_description": "Are you sure you want to delete the API key \"{label}\"? This action cannot be undone and any applications using this key will lose access.", - "create_api_key": "Create API Key", - "delete_api_key_action": "Delete API Key", - "api_key_deleted": "API Key Deleted", - "api_key_deleted_description": "The API key has been deleted successfully.", - "error_creating": "Error", - "error_creating_description": "Failed to create API key. Please try again.", - "error_deleting": "Error", - "error_deleting_description": "Failed to delete API key. Please try again.", - "copy_key_dialog": { - "title": "API Key Created", - "description": "Your new API key has been created successfully. Please copy it now as it won't be shown again.", - "api_key_label": "API Key", - "copied_button": "I've Copied the Key", - "warning_title": "Important:", - "warning_message": "This is the only time you'll be able to see this API key. Make sure to copy and store it securely.", - "docs_hint": "New to the API?", - "docs_link": "Read the API docs" - } - }, - "name": "Name", - "avatar_url": "Avatar URL", - "country": "Country", - "select_country": "Select country...", - "search_country": "Search country...", - "no_country_found": "No country found.", - "update": "Update Account", - "matchmaking": "Matchmaking", - "update_success": "Updated Profile", - "discord": { - "unlink": "Unlink Discord", - "link": "Link Discord", - "unlink_dialog": { - "title": "Unlink Discord Account", - "description": "Are you sure you want to unlink your Discord account? This will remove the connection between your 5Stack and Discord accounts.", - "confirm": "Unlink" - }, - "unlinked": "Discord account unlinked successfully" - } - }, - "notifications": { - "title": "Sound Settings", - "description": "Preview and adjust the alert sounds 5Stack plays for chat, matches, and more.", - "enabled": { - "title": "Notification sounds", - "description": "Play a sound for chat messages, match events, and other alerts." - }, - "test": "Test", - "volume": { - "title": "Volume" - }, - "preview": "Preview sounds", - "play": "Play", - "sounds": { - "chat": { - "title": "Chat message", - "description": "New chat messages" - }, - "match_found": { - "title": "Match found", - "description": "A match is ready to play" - }, - "tick": { - "title": "Tick", - "description": "Ready-up tick" - }, - "countdown": { - "title": "Countdown", - "description": "Match start countdown" - } - } - }, - "application": { - "update_success": "Updated", - "db_backups": { - "name": "Name", - "size": "Size", - "created_at": "Created" - }, - "telemetry": { - "title": "Telemetry", - "telemetry": "Telemetry", - "telemetry_description": "Help improve 5stack by sharing anonymous usage data.", - "update": "Update Telemetry Settings", - "update_success": "Telemetry settings updated successfully", - "google_tag_manager_code": "Google Tag Manager Code", - "analytics_section": "Analytics", - "analytics_section_description": "Connect a third-party analytics provider to your platform." - }, - "matchmaking": { - "title": "Matchmaking", - "description": "Matchmaking allows players to join a queue and be matched with other players.", - "updated": "Settings updated successfully" - }, - "fivestack_ranks": { - "title": "5stack Ranks", - "description": "Send each player's 5stack ELO to the server so the plugin can display ranks in-game.", - "matches": "Show ranks in regular matches", - "tournaments": "Show ranks in tournament matches", - "warning_title": "Warning: this can get your Steam GSLTs banned", - "warning_description": "Showing ranks uses plugin functionality that falls outside Valve's official server guidelines. Per Valve, this can trigger every Game Server Login Token (GSLT) on the server owner's Steam account to be banned. Enable at your own risk.", - "warning_link_label": "Valve's server guidelines" - }, - "chat": { - "title": "Chat Settings", - "description": "Configure how long chat messages are retained.", - "chat_message_ttl": "Chat Message TTL (seconds)", - "chat_message_ttl_description": "How long (in seconds) chat messages are kept before being permanently deleted.", - "updated": "Chat settings updated successfully" - }, - "news": { - "title": "News", - "section": "News", - "description": "Publish your own Counter-Strike news posts to a News page on your platform. Authorized authors write posts with a Markdown editor and images; drafts stay private until you publish them.", - "manage": "Manage Posts", - "manage_description": "Create, edit and publish news posts.", - "label_section": "Label", - "label_description": "Rename the News section as it appears in navigation and page titles.", - "label": "Display name", - "permissions_section": "Permissions", - "permissions_description": "Choose the minimum role allowed to create and publish news posts.", - "post_news_role": "Who can post news" - }, - "seasons": { - "title": "Seasons", - "section": "Seasons", - "description": "Competitive seasons reset regular-match ELO to a 5000 baseline each season and scope stats and filtering per season; when disabled, ELO is a single global ladder. Tournament ELO stays season-independent.", - "manage": "Manage Seasons", - "manage_description": "Create, end and backfill competitive seasons." - }, - "discord": { - "title": "Discord Notifications", - "support_section": "Defaults", - "support_section_description": "The default Discord webhook and role used for support and invite notifications, plus your Discord invite link. Every other Discord notification below falls back to these when it doesn't have its own webhook or role set.", - "invite_link": "Discord Invite Link", - "webhook": "Default Discord Webhook", - "webhook_description": "We use this discord webhook to send notifications that require action from a player. Ex. match issues, bugs, etc.", - "support_role": "Default Role ID", - "support_role_description": "These roles will be pinged when used for support actions. You can add multiple Role IDs separated by commas. Get a Role ID from Discord by enabling developer mode, then right-clicking the role and selecting Copy ID.", - "updated": "Updated Discord Settings", - "match_notifications": { - "title": "Match Status Notifications", - "description": "Configure Discord notifications for match status changes. These settings control both panel and Discord notifications.", - "webhook": "Match Notifications Webhook URL", - "webhook_description": "Dedicated webhook for match status notifications. Falls back to the default webhook if not set.", - "role_id": "Match Notifications Role ID", - "role_id_description": "These roles will be mentioned in match status notifications. You can add multiple Role IDs separated by commas." - }, - "gamedata_notifications": { - "title": "Gamedata Validation Notifications", - "description": "Configure where CS2 gamedata signature validation results are posted.", - "webhook": "Gamedata Notifications Webhook URL", - "webhook_description": "Dedicated webhook for gamedata validation results. Falls back to the default webhook if not set.", - "role_id": "Gamedata Notifications Role ID", - "role_id_description": "These roles will be mentioned in gamedata validation notifications. You can add multiple Role IDs separated by commas. Falls back to the default role if not set." - }, - "server_notifications": { - "title": "Server Notifications", - "description": "Configure Discord notifications for game server nodes.", - "disk_warning_percent": "Disk Warning Threshold (%)", - "disk_warning_percent_description": "Send a deletable notification when disk usage exceeds this percentage. Set to 0 to disable.", - "disk_critical_percent": "Disk Critical Threshold (%)", - "disk_critical_percent_description": "Send a non-deletable notification when disk usage exceeds this percentage. Set to 0 to disable." - } - }, - "game_type_configs": { - "title": "Game Type Configs" + "trophies": { + "title": "Trophies", + "no_trophies": "No Trophies Yet", + "no_trophies_description": "Finish in the top 3 of a tournament to earn a trophy.", + "gold": "Gold", + "silver": "Silver", + "bronze": "Bronze", + "mvp": "MVP", + "first_place": "1st Place", + "second_place": "2nd Place", + "third_place": "3rd Place", + "tournament": "Tournament", + "placement": "Placement", + "teammates": "Teammates" + }, + "avatar": { + "upload": "Upload avatar", + "change": "Change avatar", + "remove": "Remove avatar", + "team_avatar": "Team avatar", + "player_avatar": "Player avatar", + "upload_success": "Avatar uploaded", + "upload_failed": "Avatar upload failed", + "remove_success": "Avatar removed", + "remove_failed": "Failed to remove avatar", + "too_large": "Image must be 5MB or smaller", + "invalid_type": "Only PNG, JPEG, or WebP images are allowed", + "uploading": "Uploading...", + "drop_to_upload": "Drop to upload", + "hint": "Drag & drop or click · PNG, JPEG, WebP · up to 5 MB" + }, + "pages": { + "system_metrics": { + "cpu_usage": "CPU Usage", + "memory_usage": "Memory Usage", + "services": "Services", + "network": "Network", + "search_services_placeholder": "Search services or nodes...", + "filter_by_node": "Filter by Node", + "no_services_found": "No services match your current filters.", + "search_nodes_placeholder": "Search game server nodes...", + "cpu_short": "CPU", + "memory_short": "Memory", + "disk_short": "Disks", + "network_short": "Network", + "no_nodes_found": "No game server nodes match your current filters.", + "only_online_nodes": "Only Online Nodes" + }, + "system_logs": { + "follow_logs": "Follow Logs", + "timestamps": "Timestamps" + }, + "coming_soon": "Coming Soon!", + "tournaments": { + "title": "Tournaments", + "create": "Create Tournament", + "open_for_registration": "Open for Registration", + "tabs": { + "upcoming": "Upcoming", + "no_live_title": "No Live Tournaments", + "no_upcoming_title": "No Upcoming Tournaments", + "no_finished_title": "No Finished Tournaments" + }, + "no_finished": "No finished tournaments found." + }, + "manage_tournaments": { + "title": "Manage Tournaments", + "description": "View and manage all tournaments across the platform.", + "search_by_id": "Search by Tournament ID", + "enter_tournament_id": "Enter tournament ID...", + "search_by_name": "Search by Name", + "enter_tournament_name": "Enter tournament name...", + "filter_by_status": "Filter by Status", + "select_statuses": "Select statuses...", + "clear_all": "Clear All", + "sort_by": "Sort by", + "created_at": "Created Date", + "start": "Start Date", + "newest_first": "Newest First", + "oldest_first": "Oldest First", + "only_my_tournaments": "Only My Organized Tournaments", + "showing": "Showing", + "tournaments": "tournaments" }, - "streaming": { - "title": "Streaming", - "access_section": "Spectator Access", - "minimum_role_to_stream": "Minimum Role Allowed to Connect to TV (Delayed)", - "minimum_role_to_stream_description": "GOTV broadcast — viewers connect to the delayed TV port (broadcast delay applies). Safe for casters and audiences.", - "minimum_role_to_spectate": "Minimum Role Allowed to Spectate (No Delay)", - "minimum_role_to_spectate_description": "Real-time spectator — connects directly to the game server with no delay. Restrict to trusted roles to prevent ghosting.", - "require_login_section": "Require Sign-In to View Live Streams", - "require_login_description": "Hide live game streams from signed-out visitors. Discourages cheating by ensuring every viewer is an identifiable account.", - "playcast": "Playcast", - "playcast_description": "Enable Playcast over using TV ports directly. ", - "playcast_learn_more": "Learn more", - "encoding_section": "Encoding", - "live_video_codec": "Live Stream Codec", - "live_video_codec_description": "H.264 is the default for the broadest browser and device compatibility, including the lowest-latency WebRTC path on every browser. H.265 (HEVC) is ~30% smaller at matched quality, but HEVC-over-WebRTC is Safari 17+ only — Chrome and Firefox viewers fall back to the HLS path. H.265 falls back to H.264 automatically if the GPU lacks NVENC HEVC.", - "codec_h265": "H.265 / HEVC", - "codec_h264": "H.264 (recommended)", - "updated": "Updated Streaming Settings" + "teams": { + "title": "Teams", + "create": "Create Team", + "no_teams_title": "No Teams Found", + "no_teams": "No teams found.", + "search": "Search..." + }, + "settings": { + "account": { + "title": "Account Settings", + "description": "Your Account Details", + "my_account": "My Account", + "api_keys": "API Keys", + "api_keys_management": { + "your_api_keys": "Your API Keys", + "api_keys_description": "API keys allow you to authenticate with the 5Stack API programmatically.", + "add_api_key": "Add API Key", + "create_new_api_key": "Create New API Key", + "create_new_description": "Create a new API key with a descriptive label to identify its purpose.", + "label": "Label", + "label_placeholder": "e.g., My App, Development, Production", + "label_description": "Choose a descriptive name to identify this API key.", + "created": "Created", + "last_used": "Last Used", + "never": "Never", + "actions": "Actions", + "delete_confirmation_title": "Delete API Key", + "delete_confirmation_description": "Are you sure you want to delete the API key \"{label}\"? This action cannot be undone and any applications using this key will lose access.", + "create_api_key": "Create API Key", + "delete_api_key_action": "Delete API Key", + "api_key_deleted": "API Key Deleted", + "api_key_deleted_description": "The API key has been deleted successfully.", + "error_creating": "Error", + "error_creating_description": "Failed to create API key. Please try again.", + "error_deleting": "Error", + "error_deleting_description": "Failed to delete API key. Please try again.", + "copy_key_dialog": { + "title": "API Key Created", + "description": "Your new API key has been created successfully. Please copy it now as it won't be shown again.", + "api_key_label": "API Key", + "copied_button": "I've Copied the Key", + "warning_title": "Important:", + "warning_message": "This is the only time you'll be able to see this API key. Make sure to copy and store it securely." + } + }, + "name": "Name", + "avatar_url": "Avatar URL", + "country": "Country", + "select_country": "Select country...", + "search_country": "Search country...", + "no_country_found": "No country found.", + "update": "Update Account", + "matchmaking": "Matchmaking", + "update_success": "Updated Profile", + "discord": { + "unlink": "Unlink Discord", + "link": "Link Discord", + "unlink_dialog": { + "title": "Unlink Discord Account", + "description": "Are you sure you want to unlink your Discord account? This will remove the connection between your 5Stack and Discord accounts.", + "confirm": "Unlink" + }, + "unlinked": "Discord account unlinked successfully" + } + }, + "notifications": { + "title": "Notifications", + "description": "Configure notification preferences for chat and other events.", + "chat_sound": { + "title": "Chat Sound Notifications", + "description": "Play a sound when receiving new chat messages" + }, + "volume": { + "title": "Volume" + }, + "test_chat_sound": "Test Chat Sound", + "test_match_found_sound": "Test Match Found Sound", + "test_tick_sound": "Test Tick Sound", + "test_countdown_sound": "Test Countdown Sound" + }, + "application": { + "update_success": "Updated", + "db_backups": { + "name": "Name", + "size": "Size", + "created_at": "Created" + }, + "telemetry": { + "title": "Telemetry", + "telemetry": "Telemetry", + "telemetry_description": "Help improve 5stack by sharing anonymous usage data.", + "update": "Update Telemetry Settings", + "update_success": "Telemetry settings updated successfully", + "google_tag_manager_code": "Google Tag Manager Code", + "google_tag_manager_code_description": "Google Tag Manager is a tag management system that allows you to manage and deploy tags on your website." + }, + "matchmaking": { + "title": "Matchmaking", + "description": "Matchmaking allows players to join a queue and be matched with other players.", + "updated": "Settings updated successfully" + }, + "chat": { + "title": "Chat Settings", + "description": "Configure how long chat messages are retained.", + "chat_message_ttl": "Chat Message TTL (seconds)", + "chat_message_ttl_description": "Number of seconds to keep chat messages before they are deleted.", + "updated": "Chat settings updated successfully" + }, + "discord": { + "title": "Discord / Notifications", + "invite_link": "Discord Invite Link", + "webhook": "Discord Webhook", + "webhook_description": "We use this discord webhook to send notifications that require action from a player. Ex. match issues, bugs, etc.", + "support_role": "Discord Support Role ID", + "support_role_description": "These roles will be pinged when used for support actions. You can add multiple Role IDs separated by commas. Get a Role ID from Discord by enabling developer mode, then right-clicking the role and selecting Copy ID.", + "updated": "Updated Discord Settings", + "match_notifications": { + "title": "Match Status Notifications", + "description": "Configure Discord notifications for match status changes. These settings control both panel and Discord notifications.", + "webhook": "Match Notifications Webhook URL", + "webhook_description": "Dedicated webhook for match status notifications. Falls back to the support webhook if not set.", + "role_id": "Match Notifications Role ID", + "role_id_description": "These roles will be mentioned in match status notifications. You can add multiple Role IDs separated by commas.", + "statuses_title": "Notify on Status Changes", + "events_title": "Notify on Match Events" + }, + "server_notifications": { + "title": "Server Notifications", + "description": "Configure Discord notifications for game server nodes.", + "disk_warning_percent": "Disk Warning Threshold (%)", + "disk_warning_percent_description": "Send a deletable notification when disk usage exceeds this percentage. Set to 0 to disable.", + "disk_critical_percent": "Disk Critical Threshold (%)", + "disk_critical_percent_description": "Send a non-deletable notification when disk usage exceeds this percentage. Set to 0 to disable." + } + }, + "game_type_configs": { + "title": "Game Type Configs" + }, + "streaming": { + "title": "Streaming", + "minimum_role_to_stream": "Minimum Role Allowed to Connect to TV (Delayed)", + "minimum_role_to_stream_description": "This role will be able to connect to TV.", + "minimum_role_to_spectate": "Minimum Role Allowed to Spectate (No Delay)", + "minimum_role_to_spectate_description": "This role will be able to connect and spectate matches.", + "playcast": "Playcast", + "playcast_description": "Enable Playcast over using TV ports directly. ", + "playcast_learn_more": "Learn more", + "updated": "Updated Streaming Settings" + }, + "create_matches_role": "Minimum Role Allowed to Create Matches", + "create_matches_role_description": "This role will be able to create matches.", + "create_tournaments_role": "Minimum Role Allowed to Create Tournaments", + "create_tournaments_role_description": "This role will be able to create tournaments.", + "dedicated_servers_min_role_to_connect": "Minimum Role to Connect to Dedicated Password-Protected Servers", + "dedicated_servers_min_role_to_connect_description": "Only players at or above this role may connect to dedicated servers that require a password.", + "matchmaking_min_role": "Minimum Role Allowed to Join Matchmaking", + "matchmaking_min_role_description": "This role will be able to join matchmaking.", + "max_acceptable_latency": "Maximum Acceptable Latency", + "max_acceptable_latency_description": "This is the maximum latency that a player can have to join a match.", + "lineup_add_without_invite": "Minimum Role to Add Players to Lineup Without Invite", + "lineup_add_without_invite_description": "This role will be able to add players to match lineups without sending an invite first.", + "default_models": "Default Player Models", + "auto_cancel_duration": "Auto Cancel Duration", + "auto_cancel_duration_description": "This is the duration in minutes that a match will be auto canceled if not started within the duration.", + "live_match_timeout": "Live Match Timeout", + "live_match_timeout_description": "Duration in minutes before a live match is auto-cancelled (safety timeout). Default: 180 minutes (3 hours).", + "matchmaking_type_description": "Toggle matchmaking for each type that will allow players to join matchmaking for this type of match.", + "players": { + "force_name_registration": "Force Player Name Registration", + "force_name_registration_description": "If forced to have player registration, the player will be required to submit a name that will be used on the platform.", + "refresh_all_title": "Refresh All Players", + "refresh_all_description": "Re-sync all player data in the search index. Use this if player information (like ELO) appears outdated or missing.", + "refresh_button": "Refresh All Players", + "refreshing": "Refreshing...", + "refresh_queued": "Player refresh queued successfully", + "refresh_failed": "Failed to refresh players", + "error_occurred": "An error occurred", + "refresh_dialog_title": "Refresh All Players?", + "refresh_dialog_description": "This will queue a job to re-sync all player data in the Typesense search index. This may take a few minutes depending on the number of players." + }, + "branding": { + "general": "General", + "general_description": "Basic panel appearance settings.", + "brand_name": "Brand Name", + "brand_name_description": "Displayed in the sidebar and page title.", + "border_radius": "Border Radius", + "border_radius_description": "Controls the roundness of buttons, cards, and inputs.", + "show_separators": "Show Separators", + "show_separators_description": "Display horizontal divider lines between sections.", + "logo": "Logo", + "logo_description": "Upload a custom logo for the sidebar. Recommended: square image, PNG or SVG.", + "upload_logo": "Upload Logo", + "favicon": "Favicon", + "favicon_description": "Upload a custom favicon. Recommended: square image, PNG or ICO.", + "upload_favicon": "Upload Favicon", + "remove": "Remove", + "login_page": "Login Page", + "login_page_description": "Customize the login page footer link.", + "show_login_footer": "Show Login Footer", + "show_login_footer_description": "Display a footer link on the login page.", + "footer_text": "Footer Text", + "footer_url": "Footer URL", + "theme_colors": "Theme Colors", + "theme_colors_description": "Customize the theme colors. Changes are previewed live.", + "light_mode": "Light Mode", + "dark_mode": "Dark Mode", + "save_branding": "Save Branding", + "reset_to_defaults": "Reset to Defaults", + "export_theme": "Export Theme", + "import_theme": "Import Theme", + "upload_failed": "Upload failed", + "delete_failed": "Delete failed", + "branding_saved": "Branding saved", + "save_failed": "Save failed", + "branding_reset": "Branding reset to defaults", + "reset_failed": "Reset failed", + "theme_exported": "Theme exported", + "export_failed": "Export failed", + "import_failed": "Import failed", + "invalid_theme_file": "Invalid theme file", + "sections": { + "core": "Core", + "cards_borders": "Cards & Borders", + "sidebar": "Sidebar", + "top_nav": "Top Nav", + "tactical": "Tactical" + }, + "colors": { + "background": "Background", + "foreground": "Foreground (text)", + "primary": "Primary (buttons)", + "primary_foreground": "Primary Foreground (button text)", + "secondary": "Secondary", + "secondary_foreground": "Secondary Foreground", + "accent": "Accent (selected items)", + "accent_foreground": "Accent Foreground", + "muted": "Muted (subtle backgrounds)", + "muted_foreground": "Muted Foreground (secondary text)", + "destructive": "Destructive (delete/error)", + "destructive_foreground": "Destructive Foreground", + "warning": "Warning", + "warning_foreground": "Warning Foreground", + "card": "Card Background", + "card_foreground": "Card Text", + "border": "Borders", + "popover": "Popover Background", + "popover_foreground": "Popover Text", + "input": "Input Borders", + "ring": "Focus Ring", + "sidebar_background": "Sidebar Background", + "sidebar_foreground": "Sidebar Text", + "sidebar_accent": "Sidebar Active/Hover", + "sidebar_accent_foreground": "Sidebar Active Text", + "sidebar_border": "Sidebar Border", + "sidebar_primary": "Sidebar Primary", + "sidebar_primary_foreground": "Sidebar Primary Text", + "sidebar_ring": "Sidebar Focus Ring", + "topnav_background": "Top Nav Background", + "topnav_foreground": "Top Nav Text", + "topnav_accent": "Top Nav Hover", + "topnav_accent_foreground": "Top Nav Hover Text", + "topnav_border": "Top Nav Border", + "topnav_primary": "Top Nav Primary", + "topnav_primary_foreground": "Top Nav Primary Text", + "topnav_ring": "Top Nav Focus Ring", + "tactical_amber": "Tactical Accent (amber highlights)", + "tactical_amber_foreground": "Tactical Accent Foreground" + } + }, + "fixtures": { + "dev_only_notice": "Fixtures are only available in development mode.", + "load_title": "Load Demo Fixtures", + "load_description": "Populate the database with sample players, teams, matches, and tournaments for testing.", + "loading": "Loading...", + "loaded_title": "Demo Fixtures Loaded", + "loaded_description": "Fixture data is currently loaded in the database.", + "processing": "Processing...", + "load_dialog_title": "Load Fixture Data?", + "load_dialog_description": "This will insert 40 players, 8 teams, ~120 matches, and 4 tournaments into the database. This is sample data for development purposes.", + "load_button": "Load Fixtures", + "reload_dialog_title": "Reload Fixture Data?", + "reload_dialog_description": "This will delete all existing fixture data and reload fresh copies. Any changes you've made to fixture players, matches, or tournaments will be lost.", + "reload_button": "Reload Fixtures", + "remove_dialog_title": "Remove Fixture Data?", + "remove_dialog_description": "This will delete all fixture players, teams, matches, and tournaments from the database. This action cannot be undone.", + "remove_button": "Remove Fixtures", + "loaded_success": "Fixtures loaded successfully", + "load_failed": "Failed to load fixtures", + "removed_success": "Fixtures removed successfully", + "remove_failed": "Failed to remove fixtures" + }, + "servers": { + "title": "Server Settings", + "enable_cpu_pinning": "Enable CPU Pinning", + "enable_cpu_pinning_description": "Enable CPU pinning on game server nodes for better performance", + "number_of_cpus_per_server": "Number of CPUs per Server", + "number_of_cpus_per_server_description": "Number of CPUs to allocate per server", + "reserved_disk_space_fresh_gb": "Required Disk Space - Fresh Install (GB)", + "reserved_disk_space_fresh_gb_description": "Minimum disk space in GB required for a fresh node provisioning (CS2 not yet installed). Set to 0 to disable.", + "reserved_disk_space_existing_gb": "Required Disk Space - Existing Install (GB)", + "reserved_disk_space_existing_gb_description": "Minimum disk space in GB required when CS2 is already installed on the node. Set to 0 to disable.", + "update_cpu_pinning": "CPU Pinning updated" + }, + "demo_settings": { + "title": "Demo Settings", + "min_retention": "Minimum Retention", + "max_storage": "Maximum Storage", + "cloudflare_worker_url": "Cloudflare Worker URL", + "max_storage_description": "The maximum storage size for the demo files in GB.", + "cloudflare_worker_url_description": "The URL of the Cloudflare worker that will be used to store and retrieve the demo files.", + "min_retention_description": "The minimum retention days for the demo files.", + "used_storage": "Approximate Storage Used", + "test_s3_title": "Test S3", + "test_s3_description": "Test the S3 connection and upload a file to the demo bucket.", + "test_upload": "Test Upload", + "test_upload_success": "Test Upload Success", + "test_upload_failed": "Test Upload Failed", + "test_download": "Test Download", + "test_download_failed": "Test Download Failed", + "demo_network_limiter": "Global Demo Network Limiter", + "demo_network_limiter_description": "The global network limiter for the demo files.", + "updated_s3_settings": "Updated S3 Settings" + }, + "update_map_pools": { + "title": "Automatic Update Map Pools", + "description": "Automatically add / update map pools when new maps are added or removed from the active duty pool." + } + }, + "language": { + "title": "Language", + "description": "Choose your preferred language for the application interface.", + "select": "Select Language", + "search": "Search language..." + }, + "matchmaking": { + "title": "Matchmaking Settings", + "description": "Configure your matchmaking preferences and view region latencies.", + "average_latency": "Latency", + "preferred": "Preferred", + "max_acceptable_latency": "Maximum Acceptable Latency", + "max_latency_description": "If no regions are preferred, matchmaking will only use regions with latency below this value." + } }, - "create_matches_role": "Minimum Role Allowed to Create Matches", - "create_tournaments_role": "Minimum Role Allowed to Create Tournaments", - "dedicated_servers_min_role_to_connect": "Minimum Role to Connect to Dedicated Password-Protected Servers", - "matchmaking_min_role": "Minimum Role Allowed to Join Matchmaking", - "draft_add_without_invite": { - "title": "Draft Lobby Invites", - "description": "Controls who can add players directly to a draft lobby versus sending an invite the player must accept.", - "label": "Minimum Role to Add Players to Lineup Without Invite" + "watch": { + "title": "Watch", + "upcoming_matches": "Upcoming" + }, + "regions": { + "title": "Regions", + "description": "Regions allow you to group game servers by geographic location. Players can select preferred regions during matchmaking and veto undesired regions during match setup.", + "create": "Create Region", + "table": { + "available_servers": "Available Servers / Total Servers", + "use_lan_ip": "Use LAN IP", + "use_steam_relay": "Use Steam Relay", + "use_steam_relay_description": "Enable Steam Relay for game servers to hide their IP address from the public." + }, + "edit": "Edit Region", + "delete": { + "title": "Delete Region", + "description": "Are you sure you want to delete this region? This action cannot be undone." + }, + "deleted": "Deleted Region" }, - "max_acceptable_latency": "Maximum Acceptable Latency", - "max_acceptable_latency_description": "Players above this ping to a server are filtered out when picking the best server for a match.", - "default_models_section": "Player Models", - "default_models": "Default Player Models", - "auto_cancel_duration": "Auto Cancel Duration", - "auto_cancel_duration_description": "Cancels a match that hasn't gone live (still in picking / veto / waiting) after this many minutes.", - "live_match_timeout": "Live Match Timeout", - "live_match_timeout_description": "Safety timeout — a live match is auto-cancelled after this many minutes if it never finishes.", - "matchmaking_type_description": "Toggle matchmaking for each type that will allow players to join matchmaking for this type of match.", "players": { - "permissions_section": "Role Permissions", - "force_name_registration": "Force Player Name Registration", - "force_name_registration_description": "If forced to have player registration, the player will be required to submit a name that will be used on the platform.", - "refresh_all_title": "Reindex Search Index", - "refresh_all_description": "Re-sync all player data (name, ELO, stats, sanctions) into the search index. Use this if a player looks outdated or missing in search but their profile is correct.", - "refresh_button": "Reindex Search", - "refreshing": "Reindexing...", - "refresh_queued": "Search reindex started", - "refresh_failed": "Failed to start search reindex", - "error_occurred": "An error occurred", - "refresh_dialog_title": "Reindex the search index?", - "refresh_dialog_description": "This will re-sync every player into the Typesense search index in batches. It runs in the background and you can watch its progress here.", - "recompute_elo_title": "Recompute Player ELO", - "recompute_elo_description": "Wipe and rebuild every player's ELO by replaying all finished matches in order, in batches. When seasons are enabled this also rebuilds each season's ELO from the matches that fall within it. Use this after an ELO formula change or if ratings look wrong. Search results update automatically as ELO is recalculated.", - "recompute_elo_button": "Recompute ELO", - "recomputing_elo": "Recomputing...", - "recompute_elo_queued": "ELO recompute started", - "recompute_elo_failed": "Failed to start ELO recompute", - "recompute_elo_dialog_title": "Recompute all player ELO?", - "recompute_elo_dialog_description": "This wipes all existing ELO and rebuilds it from scratch by replaying every finished match in chronological order (in batches). The leaderboard will be temporarily incomplete while it runs. You can watch its progress here.", - "progress_running": "{processed} / {total} ({percent}%)", - "progress_eta": "~{eta} remaining", - "progress_failed_count": "{failed} failed", - "progress_completed": "Completed {total}", - "progress_canceled": "Canceled at {completed} / {total}", - "progress_errored": "Failed — see server logs", - "already_running": "Already running", - "cancel_button": "Cancel", - "cancel_requested": "Cancellation requested", - "recompute_elo_canceled_title": "ELO recompute canceled", - "recompute_elo_complete_title": "ELO recompute complete", - "recompute_elo_complete_desc": "{completed} of {total} matches processed, {failed} failed", - "reindex_canceled_title": "Search reindex canceled", - "reindex_complete_title": "Search reindex complete", - "reindex_complete_desc": "{completed} of {total} players reindexed, {failed} failed", - "scan_bans_title": "Scan Steam Bans", - "scan_bans_description": "Check every player who has been on a lineup for Steam VAC/game bans. Accounts with an active ban are auto-banned.", - "scan_button": "Scan Steam Bans", - "scanning": "Scanning...", - "scan_queued": "Steam ban scan queued", - "scan_failed": "Failed to queue Steam ban scan", - "scan_dialog_title": "Scan all players for Steam bans?", - "scan_dialog_description": "This queues a background Steam VAC/game-ban check for every player who has been on a lineup. Detected bans are applied automatically; this may take a while depending on the number of players.", - "danger_zone_title": "Danger Zone", - "danger_zone_description": "These actions are resource-intensive and run in the background across every player. They run automatically when needed — only trigger them manually if you really need to." - }, - "branding": { - "general": "General", - "general_description": "Basic panel appearance settings.", - "brand_name": "Brand Name", - "brand_name_description": "Displayed in the sidebar and page title.", - "border_radius": "Border Radius", - "border_radius_description": "Controls the roundness of buttons, cards, and inputs.", - "show_separators": "Show Separators", - "show_separators_description": "Display horizontal divider lines between sections.", - "logo": "Logo", - "logo_description": "Upload one square image (512×512 PNG recommended). Used app-wide and to generate your PWA install icon. ICO files aren't supported.", - "upload_logo": "Upload Logo", - "favicon": "Favicon", - "favicon_description": "Optional. A simpler mark for the browser tab. PNG, ICO or WebP.", - "upload_favicon": "Upload Favicon", - "remove": "Remove", - "login_page": "Login Page", - "login_page_description": "Customize the login page footer link.", - "show_login_footer": "Show Login Footer", - "show_login_footer_description": "Display a footer link on the login page.", - "footer_text": "Footer Text", - "footer_url": "Footer URL", - "theme_colors": "Theme Colors", - "theme_colors_description": "Customize the theme colors. Changes are previewed live.", - "light_mode": "Light Mode", - "dark_mode": "Dark Mode", - "save_branding": "Save Branding", - "reset_to_defaults": "Reset to Defaults", - "reset_confirm_title": "Reset branding to defaults?", - "reset_confirm_description": "This clears your brand name, colors, login footer, and uploaded logo/favicon/app icon, restoring the default 5Stack theme. This cannot be undone.", - "export_theme": "Export Theme", - "import_theme": "Import Theme", - "upload_failed": "Upload failed", - "delete_failed": "Delete failed", - "logo_uploaded": "Logo uploaded", - "favicon_uploaded": "Favicon uploaded", - "icon_uploaded": "App icon uploaded", - "logo_removed": "Logo removed", - "favicon_removed": "Favicon removed", - "icon_removed": "App icon removed", - "branding_saved": "Branding saved", - "save_failed": "Save failed", - "branding_reset": "Branding reset to defaults", - "reset_failed": "Reset failed", - "theme_exported": "Theme exported", - "export_failed": "Export failed", - "import_failed": "Import failed", - "invalid_theme_file": "Invalid theme file", - "sections": { - "core": "Core", - "cards_borders": "Cards & Borders", - "sidebar": "Sidebar", - "top_nav": "Top Nav", - "tactical": "Tactical" - }, - "colors": { - "background": "Background", - "foreground": "Foreground (text)", - "primary": "Primary (buttons)", - "primary_foreground": "Primary Foreground (button text)", - "secondary": "Secondary", - "secondary_foreground": "Secondary Foreground", - "accent": "Accent (selected items)", - "accent_foreground": "Accent Foreground", - "muted": "Muted (subtle backgrounds)", - "muted_foreground": "Muted Foreground (secondary text)", - "destructive": "Destructive (delete/error)", - "destructive_foreground": "Destructive Foreground", - "warning": "Warning", - "warning_foreground": "Warning Foreground", - "card": "Card Background", - "card_foreground": "Card Text", - "border": "Borders", - "popover": "Popover Background", - "popover_foreground": "Popover Text", - "input": "Input Borders", - "ring": "Focus Ring", - "sidebar_background": "Sidebar Background", - "sidebar_foreground": "Sidebar Text", - "sidebar_accent": "Sidebar Active/Hover", - "sidebar_accent_foreground": "Sidebar Active Text", - "sidebar_border": "Sidebar Border", - "sidebar_primary": "Sidebar Primary", - "sidebar_primary_foreground": "Sidebar Primary Text", - "sidebar_ring": "Sidebar Focus Ring", - "topnav_background": "Top Nav Background", - "topnav_foreground": "Top Nav Text", - "topnav_accent": "Top Nav Hover", - "topnav_accent_foreground": "Top Nav Hover Text", - "topnav_border": "Top Nav Border", - "topnav_primary": "Top Nav Primary", - "topnav_primary_foreground": "Top Nav Primary Text", - "topnav_ring": "Top Nav Focus Ring", - "tactical_amber": "Tactical Accent (amber highlights)", - "tactical_amber_foreground": "Tactical Accent Foreground" - }, - "assets_section": "Logo & Favicon", - "assets_section_description": "Upload a logo (used app-wide and to generate your PWA install icon) and an optional favicon." - }, - "fixtures": { - "dev_only_notice": "Fixtures are only available in development mode.", - "load_title": "Load Demo Fixtures", - "load_description": "Populate the database with sample players, teams, matches, and tournaments for testing.", - "loading": "Loading...", - "loaded_title": "Demo Fixtures Loaded", - "loaded_description": "Fixture data is currently loaded in the database.", - "processing": "Processing...", - "load_dialog_title": "Load Fixture Data?", - "load_dialog_description": "This will insert 40 players, 8 teams, ~120 matches, and 4 tournaments into the database. This is sample data for development purposes.", - "load_button": "Load Fixtures", - "reload_dialog_title": "Reload Fixture Data?", - "reload_dialog_description": "This will delete all existing fixture data and reload fresh copies. Any changes you've made to fixture players, matches, or tournaments will be lost.", - "reload_button": "Reload Fixtures", - "remove_dialog_title": "Remove Fixture Data?", - "remove_dialog_description": "This will delete all fixture players, teams, matches, and tournaments from the database. This action cannot be undone.", - "remove_button": "Remove Fixtures", - "loaded_success": "Fixtures loaded successfully", - "load_failed": "Failed to load fixtures", - "removed_success": "Fixtures removed successfully", - "remove_failed": "Failed to remove fixtures" - }, - "servers": { - "title": "Server Settings", - "plugin_runtime_section": "Plugin Runtime", - "plugin_runtime_description": "Which CS2 plugin framework your game servers run. Both frameworks implement the same match logic, but they load different third-party plugins and gamedata files.", - "plugin_runtime_warning": "Switching does not move your custom plugins between addons/swiftlys2 and addons/counterstrikesharp. Servers already running keep their current image until they are recycled.", - "plugin_runtime_locked": "The SERVER_IMAGE environment variable is set on the panel API and overrides this choice. Remove it to select a runtime here.", - "cpu_section": "CPU Pinning", - "disk_section": "Disk Reservation", - "enable_cpu_pinning": "Enable CPU Pinning", - "enable_cpu_pinning_description": "Enable CPU pinning on game server nodes for better performance", - "number_of_cpus_per_server": "Number of CPUs per Server", - "number_of_cpus_per_server_description": "Number of dedicated CPU cores assigned to each game server (only used when CPU pinning is enabled).", - "reserved_disk_space_fresh_gb": "Required Disk Space - Fresh Install (GB)", - "reserved_disk_space_fresh_gb_description": "Minimum disk space in GB required for a fresh node provisioning (CS2 not yet installed). Set to 0 to disable.", - "reserved_disk_space_existing_gb": "Required Disk Space - Existing Install (GB)", - "reserved_disk_space_existing_gb_description": "Minimum disk space in GB required when CS2 is already installed on the node. Set to 0 to disable.", - "update_cpu_pinning": "CPU Pinning updated" - }, - "release_channel": { - "title": "Release Channel", - "section": "Release Channel", - "description": "Choose which release channel this install tracks. Latest is the stable channel; Beta receives pre-release builds early.", - "latest": "Latest", - "beta": "Beta", - "beta_warning": "Beta is a pre-release channel and may be unstable. Services will be updated to pre-release builds as they become available.", - "service_status": "Service Status", - "fell_back": "beta not available yet — using latest", - "updated": "Release channel updated" + "title": "Players", + "filter_by_privilege": "Filter by Privilege", + "select_privileges": "Select Privileges", + "filter_by_country": "Filter by Country", + "select_country": "Select country...", + "search_country": "Search country...", + "no_country_found": "No country found.", + "countries_selected": "countries selected", + "elo_range": "Elo Range", + "filter_chips": { + "elo_min": "Elo Min", + "elo_max": "Elo Max", + "countries": "Countries", + "privilege": "Privilege", + "sanctions_min": "Sanctions ≥", + "played": "Played", + "banned": "Banned", + "gagged": "Gagged", + "muted": "Muted", + "headshot_pct": "HeadShot %" + }, + "played_matches": "Played Matches", + "min_sanctions": "Minimum Sanctions", + "is_banned": "Banned", + "is_gagged": "Gagged", + "is_muted": "Muted", + "table": { + "elo": "Elo", + "last_sign_in_at": "Last Sign In At", + "privilege": "Privilege", + "kdr": "KDR", + "no_players": "No players found" + }, + "detail": { + "kd": "KD", + "recent_wins_and_losses": "Recent Wins and Losses", + "elo_history": "ELO History", + "no_elo_history": "Play A Match to genreate ELO", + "play_a_match": "Play", + "matches": "Matches", + "tournaments": "Tournaments", + "no_matches": "No matches yet", + "no_matches_description": "Match history will appear here after playing games.", + "no_tournaments": "No tournaments found for this player.", + "no_tournaments_description": "Tournaments this player has joined will appear here.", + "weapon_kills": "Most Used Weapons", + "no_weapon_kills": "No weapons recorded", + "edit_player": "Edit Player", + "name": "Name", + "role": "Role" + } + }, + "play": { + "title": "Play", + "open_matches": { + "description": "Matches that are open lobbies for anyone to join." + }, + "open_registration_tournaments": { + "description": "Tournaments that are open for registration for anyone to join." + } + }, + "matches": { + "create": "Create Match", + "match_updated": "Match Updated", + "create_page": { + "pick_up_game": "Pick Up Game", + "pick_up_game_description": "A Pick up game does not require selection of teams.", + "team_1": "Team 1", + "search_team": "Search for a Team ...", + "team_2": "Team 2", + "intra_team_scrimmage": "You can select the same team for both slots to create an intra-team scrimmage.", + "create_button": "Create Match", + "update_button": "Update Match" + } + }, + "toasts": { + "copied_to_clipboard": "Copied to Clipboard" + }, + "game_server_nodes": { + "title": "Game Server Nodes", + "description": "Game server nodes expand your server offerings into different regions or provide redundancy for on-demand servers.", + "not_supported": { + "title": "Your Panel currently does not support Game Server Nodes.", + "description": "View the documentation to setup Game Server Nodes." + }, + "no_nodes_title": "No Game Server Nodes", + "display_metrics": "Display Metrics", + "create": "Create Game Server Node", + "cs_version_info": "CS2 Version Information:", + "hide_offline": "Hide Offline Nodes", + "only_enabled": "Only Enabled Nodes", + "setup_dialog": { + "title": "Game Server Node Setup", + "description": "Run this installation script on your server to connect it to 5Stack", + "installation_script": "Installation Script", + "waiting_title": "Waiting for node to connect...", + "waiting_description": "Run the installation script on your server. The status will update automatically when the node connects.", + "new_node": "Game server node successfully connected", + "close": "Close" + }, + "status": { + "setup": "Setup", + "not_accepting": "Not Accepting New Matches" + }, + "table": { + "node": "Node", + "cs_build_id": "CS2 Build", + "capacity": "Capacity", + "ports": "Ports", + "ports_tooltip": "Forwarded Ports to Node", + "no_nodes": "No Game Server Nodes", + "supports_low_latency": "Supports Low Latency", + "supports_cpu_pinning": "Supports CPU Pinning", + "cpu_governor": "CPU Governor" + }, + "build_id": "Build ID: {id}", + "last_updated": "Last Updated: {date}" + }, + "dedicated_servers": { + "title": "Dedicated Servers", + "description": "You can set up a dedicated server that will always run the game server mod", + "no_servers_title": "No Dedicated Servers", + "no_servers": "No dedicated servers found.", + "create": { + "title": "Create Dedicated Server" + }, + "table": { + "connection_details": "Connection Details", + "label": "Label", + "type": "Type", + "port": "Game Port", + "tv_port": "TV Port", + "enabled": "Enabled" + }, + "detail": { + "enabled": "Enabled", + "server_plugin_config": "Server Plugin Config", + "hide_config": "Hide Config", + "show_config": "Show Config", + "config_location": "This config should be placed in:", + "files": "Files", + "status": { + "disconnected": "Server is disconnected", + "no_rcon": "Server is connected but RCON is not available", + "connected": "Server is connected and RCON is available", + "plugin_version_mismatch": "plugin version is not up to date" + }, + "delete_confirm": { + "title": "Are you absolutely sure?", + "description": "This action cannot be undone. This will permanently delete your server and remove associated data from our servers.", + "continue": "Continue" + } + } + }, + "public_servers": { + "title": "Public Servers", + "players": "Players", + "no_servers_title": "No Servers Available", + "no_public_servers": "No public servers available at the moment.", + "lan_servers_title": "LAN Servers" + }, + "map_pools": { + "title": "Map Pools", + "form": { + "name": "Name", + "name_description": "This must match the name of the map in the game that the server recognizes.", + "label": "Label", + "poster": "Poster (optional)", + "poster_placeholder": "http://example.com/poster.png", + "patch": "Patch (optional)", + "patch_placeholder": "http://example.com/patch.png", + "workshop_map_id": "Workshop Map ID (optional)", + "create_map": "Create Map", + "update_map": "Update Map", + "delete_map": "Delete Map", + "delete_confirm": { + "title": "Delete Map", + "description": "Are you sure you want to delete this map? This action cannot be undone." + }, + "success": { + "create": "Map created successfully", + "update": "Map updated successfully", + "delete": "Map deleted successfully", + "workshop_refresh": "Workshop map details refreshed successfully" + }, + "error": { + "create": "Error creating map", + "update": "Error updating map", + "invalid_workshop": "Invalid workshop map ID. Please verify the ID exists on Steam Workshop.", + "workshop_refresh": "Error refreshing workshop map details" + }, + "refresh_workshop": "Refresh Details" + }, + "pool": { + "modify_maps": "Modify maps in the pool", + "pool_heading": "{type} Pool" + }, + "add_new_map": "Add New Map", + "maps": "Available Maps", + "active_duty": "Active Duty", + "available_modes": "Available In Modes", + "workshop_id": "Workshop Link", + "search": "Search Maps" + }, + "map_pool": { + "toggle_pool_type": "Updated Map Pools", + "toggle_active_pool": "Maps Activity Status Updated", + "save_success": "Map pool saved successfully" + }, + "manage_matches": { + "title": "Manage Matches", + "only_my_matches": "Only My Organized Matches", + "description": "View and manage all matches across the platform.", + "no_matches": "No matches found.", + "search_by_name": "Search by Name", + "enter_name": "Enter name...", + "search_by_id": "Search by Match ID", + "enter_match_id": "Enter match ID...", + "search_by_team": "Search by Team", + "enter_team_name": "Enter team name...", + "filter_by_status": "Filter by Status", + "select_statuses": "Select statuses...", + "filter_by_regions": "Filter by Regions", + "select_regions": "Select regions...", + "clear_all": "Clear All", + "sort_by": "Sort by", + "created_at": "Created Date", + "started_at": "Started Date", + "scheduled_at": "Scheduled Date", + "ended_at": "Ended Date", + "newest_first": "Newest First", + "oldest_first": "Oldest First", + "showing": "Showing", + "matches": "matches" }, - "highlights": { - "title": "Highlights", - "updated": "Updated highlight settings" - }, - "external_matches": { - "title": "Match Imports", - "section": "Match Imports", - "enabled": "Allow CS2 match imports", - "enabled_description": "Let players link their Steam match-history auth code to import official CS2 matches, and allow demo uploads. Turn this off to hide the auth-code form and block external imports.", - "updated": "Updated external match settings", - "disabled_notice": "External match importing is currently disabled by your administrator.", - "faceit_enabled": "Import Faceit Matches", - "faceit_enabled_description": "Off by default. Poll linked players' Faceit match history (last 30 days) and import their matches. Requires External Matches enabled and a Faceit API key — demo download also needs Downloads API access.", - "faceit_setup_guide": "Setup guide", - "faceit_downloads_api_link": "Apply for Downloads API access", - "faceit_test": "Test Faceit Integration", - "faceit_test_description": "Verify the Faceit API key works and whether it can download demos.", - "faceit_test_button": "Test", - "faceit_testing": "Testing…", - "faceit_data_api": "Data API", - "faceit_downloads_api": "Downloads API", - "faceit_test_failed": "Faceit test failed" - }, - "steam_presence": { - "title": "Steam Presence", - "section": "Steam Presence", - "enabled": "Enable Presence", - "enabled_description": "On by default. Friend bots watch linked players' live Steam presence and import their matches the moment they finish, instead of waiting for the hourly poll. Turn off as a kill-switch.", - "updated": "Updated steam presence settings", - "active": "Active", - "disabled": "Disabled", - "live": "Live", - "setup": "How it works", - "setup_step1": "Dedicate a Steam account for the bot with Steam Guard enabled. Don't reuse your STEAM_USER account — that one is used elsewhere and would conflict.", - "setup_step2": "Add it below. It logs in automatically; if Steam Guard prompts, a 2FA box appears on the bot — enter the code from email or the Steam app. After the first login it stays signed in and won't ask again.", - "setup_step3": "Players add the bot as a Steam friend (from their settings or the profile link). Once friends, their matches import the moment they finish.", - "add_bot": "Add Bot", - "add_bot_description": "Add a Steam account to the presence pool. Its credentials are stored to keep it signed in.", - "username": "Steam username", - "password": "Password", - "add": "Add", - "account_added": "Bot account added — it will log in shortly", - "account_add_failed": "Failed to add bot account", - "account_removed": "Bot account removed", - "account_remove_failed": "Failed to remove bot account", - "remove_confirm": "Remove bot account {name}? Players assigned to it will be reassigned.", - "needs_2fa": "Needs 2FA", - "needs_2fa_email": "Enter the Steam Guard code emailed to this account to finish login.", - "needs_2fa_app": "Enter the Steam Guard code from the Steam mobile app for this account to finish login.", - "code_wrong": "Previous code was incorrect — try again.", - "code_placeholder": "Code", - "submit_code": "Submit", - "code_submitted": "Code submitted — logging in…", - "code_failed": "Failed to submit Steam Guard code", - "status": "Status", - "bots": "Bots", - "bots_description": "Steam accounts in the presence pool and their live status.", - "no_bots": "No bots yet", - "no_bots_hint": "Add a Steam account to start watching players' matches.", - "add_first_bot": "Add your first bot", - "bot": "Bot", - "online": "Online", - "online_yes": "Online", - "online_no": "Offline", - "watching": "Watching", - "pending": "Pending", - "pending_tooltip": "Players who were assigned a bot but haven't added it as a Steam friend yet.", - "capacity": "Capacity", - "capacity_tooltip": "Total friend slots across all bots. Auto-detected from each bot's Steam level (250 + 5 × level, max 2000).", - "fetch_failed": "Failed to load presence status", - "fetch_hint": "Make sure the API is running the latest build, migrations and Hasura metadata are applied, and the web GraphQL types are regenerated (yarn codegen)." - }, - "scrim_finder": { - "title": "Scrim Finder", - "section": "Scrim Finder", - "enabled": "Enable Scrim Finder", - "enabled_description": "Let teams advertise availability, find opponents, and schedule scrims. Enabled by default. Turn this off to hide the Scrim Finder everywhere and stop auto-matching.", - "updated": "Updated scrim finder settings" - }, - "demo_settings": { - "title": "Demos", - "storage_section": "Storage & Backend", - "render_output_section": "Render Output", - "clip_storage_section": "Storage & Retention", - "min_retention": "Minimum Retention", - "max_storage": "Maximum Storage", - "unit_days": "(days)", - "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", - "retention_storage_description": "Demos are kept at least the minimum retention period. Once total storage exceeds the maximum, the oldest demos past their retention are deleted first.", - "cloudflare_worker_url_description": "Optional Cloudflare Worker that proxies requests to your S3 bucket so demo + highlight downloads don't count against your bucket's egress (free Backblaze ↔ Cloudflare bandwidth). Leave blank to serve directly from S3.", - "test_s3_description": "Test the S3 connection and upload a file to the demo bucket.", - "test_upload": "Test Upload", - "test_upload_success": "Test Upload Success", - "test_upload_failed": "Test Upload Failed", - "test_download": "Test Download", - "test_download_failed": "Test Download Failed", - "demo_network_limiter": "Global Demo Network Limiter", - "demo_network_limiter_description": "Caps the upload bandwidth a game-server node will use when transferring finished demo files to S3.", - "updated_s3_settings": "Updated S3 Settings", - "clips_min_retention": "Minimum Retention", - "clips_retention_storage_description": "Highlights are kept at least the minimum retention period. Once total storage exceeds the maximum, the oldest highlights past their retention are deleted first.", - "clips_max_storage": "Maximum Storage", - "highlights_section": "Highlights", - "clip_video_codec": "Highlight Codec", - "clip_video_codec_description": "H.264 is the default for the broadest playback compatibility across browsers and devices. H.265 (HEVC) produces ~30% smaller files at matched visual quality and is decoded in hardware by modern Chrome, Edge, Safari, and iOS, but is less universally supported. H.265 falls back to H.264 automatically if the GPU lacks NVENC HEVC.", - "clip_fps": "Highlight FPS", - "clip_fps_description": "Output frame rate for rendered highlights and manually-edited clips. 60 FPS is smoother but doubles the encode work and file size; 30 FPS is the lighter option.", - "clip_resolution": "Highlight Resolution", - "clip_resolution_description": "Default output resolution for rendered highlights and manually-edited clips. Users can still override per-clip in the render dialog. 1080p balances quality and file size; 720p produces ~50% smaller files. Both benefit when GPU nodes render at 1440p — the streamer supersamples that down to the selected output resolution.", - "codec_h265": "H.265 / HEVC", - "codec_h264": "H.264 (recommended)", - "clip_bake_branding": "Bake player chip + outro into highlights", - "clip_bake_branding_description": "Renders the player chip overlay and brand outro directly into the highlight file. Disable to ship raw captures without overlays.", - "auto_generate_match_clips": "Auto-generate match highlights", - "auto_generate_match_clips_description": "Queue a match-recap highlight for each player after their match finishes.", - "auto_generate_match_clips_imported": "Include imported matches", - "auto_generate_match_clips_imported_description": "Also auto-generate highlights for matches imported from outside 5stack (e.g. Valve match history). Off by default so imported matches don't flood the render queue.", - "pause_renders_during_active_match": "Pause Highlight Renders During Active Match", - "pause_renders_during_active_match_description": "When a match goes Live on a server backed by a GPU node, auto-pause in-flight highlight renders so the game server isn't competing with the render pod for GPU. Renders resume automatically once the match ends.", - "auto_clip_default_visibility": "Default visibility for auto-generated highlights", - "auto_clip_filters_section": "Auto-highlight filters", - "auto_clip_always_include_knife": "Always include knife kills", - "auto_clip_always_include_knife_description": "Append up to 3 knife kills to the end of a player's highlight reel when they got a knife kill — even when their round doesn't meet the minimum-kills filter.", - "auto_clip_min_kills": "Minimum kills to generate a highlight", - "auto_clip_min_kills_description": "Only auto-generate a player's highlight when their best round reached this many kills. Raise it so a match doesn't spawn a clip for everyone.", - "auto_clip_min_kills_any": "Any kill (everyone)", - "auto_clip_min_kills_2k": "Double kill or better (2K+)", - "auto_clip_min_kills_3k": "Triple kill or better (3K+)", - "auto_clip_min_kills_4k": "Quad kill or better (4K+)", - "auto_clip_min_kills_ace": "Aces only (5K)", - "visibility_private": "Private", - "visibility_public": "Public", - "default_hud_mode": "Default HUD style", - "default_hud_mode_description": "Which JTs Hud Manager layout the game-streamer pod loads at boot for live streams, demo playback, and batch highlights. Streamers can still switch styles per-stream from the player controls.", - "hud_mode_horizontal": "Horizontal", - "hud_mode_vertical": "Vertical", - "playback_section": "Playback", - "reparse_warning_title": "This reparses every demo — it can take a very long time.", - "reparse_warning_body": "Demos are reprocessed one at a time, which can run for hours or days depending on how many you have. Only do this if you know what you're doing, or after a major update changes how demos are parsed. New stats from updates are reparsed automatically as matches are viewed — this is only to force everything at once.", - "reparse_button": "Reparse All Demos", - "reparse_running": "Reparsing demos…", - "reparse_failed_count": "{count} failed", - "reparse_cancel": "Cancel", - "reparse_last_run": "Last run: {completed} / {total} processed, {failed} failed.", - "reparse_confirm_title": "Reparse every demo?", - "reparse_confirm_body": "This queues a background job that reparses all demos one at a time and can take a very long time. It's not recommended unless you know what you're doing or a major update changed demo parsing. You can cancel it at any point.", - "reparse_confirm_action": "Start Reparse", - "reparse_started": "Reparse started — it runs in the background, one demo at a time. You can close this page.", - "reparse_cancel_requested": "Cancel requested — stopping after the current demo.", - "reparse_complete_title": "Demo reparse complete", - "reparse_canceled_title": "Demo reparse canceled", - "reparse_complete_desc": "{completed} / {total} processed, {failed} failed.", - "orphaned_open_button": "Scan Orphaned Uploads", - "orphaned_title": "Orphaned Uploads", - "orphaned_dialog_description": "Scans the bucket for demo, playback and highlight objects with no matching database row, and corrects the tracked storage sizes. Runs in the background — you can close this dialog and check back.", - "orphaned_scan_now": "Scan Now", - "orphaned_rescan": "Re-scan", - "orphaned_scanning": "Scanning… this can take a while. You can safely close this and check back later.", - "orphaned_no_results": "No scan has been run yet.", - "orphaned_last_scanned": "Last scanned", - "orphaned_total_size": "Total size", - "orphaned_tracked": "Tracked", - "orphaned_orphaned": "Orphaned", - "orphaned_other": "Other", - "orphaned_largest": "Largest orphaned objects", - "orphaned_more": "…and {count} more not shown", - "orphaned_delete_all": "Delete All Orphaned", - "orphaned_delete_confirm": "Permanently delete {count} orphaned object(s) ({size})? This cannot be undone.", - "orphaned_deleted": "Deleted {count} object(s), freed {size}", - "orphaned_scan_started": "Scan started — this can take a while depending on how many objects you have. You'll get a notification when it's done, so you can close this.", - "orphaned_none_found": "No orphaned objects found.", - "orphaned_tooltip": "Find demo, playback and highlight files in S3 that are no longer referenced in the database, and reclaim the space. Runs in the background.", - "orphaned_complete_title": "Orphaned uploads scan complete", - "orphaned_complete_found": "Found {count} orphaned object(s) — {size}", - "orphaned_complete_none": "No orphaned uploads found", - "orphaned_view_results": "View results", - "orphaned_demos": "Demos", - "orphaned_highlights": "Highlights", - "orphaned_breakdown": "Tracked breakdown", - "orphaned_scanning_short": "Scanning…", - "orphaned_demos_count": "{count} demos", - "orphaned_highlights_count": "{count} highlights", - "orphaned_object_count": "{count} files" - }, - "update_map_pools": { - "title": "Automatic Update Map Pools", - "description": "Automatically add / update map pools when new maps are added or removed from the active duty pool." - }, - "leagues": { - "title": "League", - "section": "Leagues", - "description": "Seasonal round-robin play across skill divisions with weekly match windows, roster locks, playoffs and promotion/relegation between seasons. Managed by administrators.", - "manage_description": "Create and manage seasons, registrations and schedules from the league page.", - "manage": "Manage seasons", - "divisions_section": "Divisions", - "divisions_description": "The tiers teams are placed into and promoted/relegated between each season. A tier with no teams simply does not run that season.", - "allow_request_title": "Let teams request a division", - "allow_request_hint": "When off, teams register with no division preference and admins place them.", - "registration_section": "Registration", - "registration_description": "How teams register for league seasons" - }, - "teams": { - "title": "Teams", - "roster_section": "Roster & substitutes", - "roster_description": "Team-wide roster rules used across leagues and tournaments: how many players a roster holds, and how many substitutes back up the five starters.", - "min_roster": "Minimum roster size", - "max_roster": "Maximum roster size", - "roster_hint": "Teams need at least the minimum to be approved and can't exceed the maximum.", - "max_subs": "Substitutes" - } - }, - "language": { - "select": "Select Language", - "search": "Search language..." - }, - "matchmaking": { - "title": "Matchmaking Settings", - "average_latency": "Latency", - "preferred": "Preferred", - "max_acceptable_latency": "Maximum Acceptable Latency", - "max_latency_description": "If no regions are preferred, matchmaking will only use regions with latency below this value.", - "show_match_ready_modal": { - "title": "Match & Draft Room Popup", - "description": "Show a popup when your match or draft room is ready, with a quick link to jump to it. When disabled, you won't be redirected — reach it from the button in the top nav instead." + "leaderboard": { + "title": "Leaderboard", + "no_results": "No leaderboard data available for the selected filters.", + "categories": { + "elo": "ELO", + "best_kdr": "KDR", + "best_win_rate": "Win Rate", + "highest_hs_pct": "HS%", + "trophies": "Trophies" + }, + "time_periods": { + "last_7_days": "Last 7 Days", + "last_30_days": "Last 30 Days", + "all_time": "All Time" + }, + "match_types": { + "all": "All Types", + "competitive": "Competitive", + "wingman": "Wingman", + "duel": "Duel" + }, + "columns": { + "rank": "#", + "matches": "Matches" + }, + "col": { + "elo": "ELO", + "elo_change": "ELO Change", + "win_streak": "Win Streak", + "kdr": "K/D Ratio", + "kills": "Kills", + "deaths": "Deaths", + "wins": "Wins", + "losses": "Losses", + "hs_pct": "HS%", + "total_kills": "Total Kills", + "gold": "Gold", + "silver": "Silver", + "bronze": "Bronze", + "mvp": "MVP", + "total_trophies": "Total" + }, + "exclude_tournaments": "Exclude Tournaments" + }, + "database": { + "query_copied": "Query copied to clipboard", + "copy_failed": "Failed to copy to clipboard", + "filters": { + "select_schemas": "Select schemas...", + "search_schemas": "Search schemas...", + "no_schemas": "No schemas found", + "schemas_selected": "schemas selected" + }, + "tabs": { + "queries": "Query Performance", + "connections": "Connections", + "locks": "Locks & Transactions", + "io": "I/O & Buffers", + "index_usage": "Index Usage", + "storage": "Storage", + "timescale": "TimescaleDB", + "backups": "Backups" + }, + "columns": { + "schema": "Schema", + "table": "Table", + "index": "Index", + "user": "User", + "app": "App", + "client": "Client", + "state": "State", + "duration": "Duration", + "query": "Query", + "pid": "PID" + }, + "query_performance": { + "no_stats": "No query statistics found", + "search_query": "Search Query", + "min_calls": "Min Calls", + "sort_by": "Sort By", + "avg_time": "Avg Time", + "max_time": "Max Time", + "total_time": "Total Time", + "calls": "Calls", + "temp_blocks": "Temp Blocks", + "filter_by_query_text": "Filter by query text...", + "search_tables": "Search tables...", + "search_indexes": "Search indexes...", + "granted": "Granted", + "mode": "Mode", + "relation": "Relation" + }, + "connections": { + "no_active_queries": "No active queries", + "no_connections": "No connections found", + "active_queries_title": "Active Queries", + "all_connections_title": "All Connections", + "wait_event": "Wait Event", + "total": "Total", + "active": "Active", + "idle": "Idle", + "idle_in_txn": "Idle in Txn", + "waiting": "Waiting" + }, + "locks": { + "no_locks": "No active locks", + "no_table_stats": "No table statistics available", + "stats_title": "Database Statistics", + "cache_hit_ratio": "Cache Hit Ratio", + "active_backends": "Active Backends", + "tuples_inserted": "Tuples Inserted", + "tuples_updated": "Tuples Updated", + "tuples_deleted": "Tuples Deleted", + "current_locks": "Current Locks", + "lock_type": "Lock Type", + "table_maintenance_title": "Table Maintenance Statistics", + "live_tuples": "Live Tuples", + "dead_tuples": "Dead Tuples", + "last_vacuum": "Last Vacuum", + "last_autovacuum": "Last Autovacuum", + "last_analyze": "Last Analyze", + "commits": "Commits", + "rollbacks": "Rollbacks", + "deadlocks": "Deadlocks" + }, + "io": { + "tabs": { + "table_io": "Table I/O", + "index_io": "Index I/O" + }, + "table_io_stats": "Table I/O Statistics", + "index_io_stats": "Index I/O Statistics", + "no_table_stats": "No table I/O statistics available", + "no_index_io_stats": "No index I/O statistics available", + "heap_hits": "Heap Hits", + "heap_reads": "Heap Reads", + "index_hits": "Index Hits", + "index_reads": "Index Reads", + "blocks_hit": "Blocks Hit", + "blocks_read": "Blocks Read", + "cache_hit_pct": "Cache Hit %" + }, + "index_usage": { + "title": "Index Usage Statistics", + "schema": "Schema", + "table": "Table", + "index": "Index", + "index_scans": "Index Scans", + "tuples_read": "Tuples Read", + "tuples_fetched": "Tuples Fetched", + "index_size": "Index Size", + "table_size": "Table Size", + "size_ratio": "% of Table", + "no_stats": "No index usage statistics available" + }, + "storage": { + "overview": "Storage Overview", + "total_database_size": "Total Database Size", + "total_table_size": "Total Table Size", + "total_indexes_size": "Total Index Size", + "reclaimable_space": "Reclaimable Space", + "from_dead_tuples": "From dead tuples", + "table_sizes": "Table Storage Details", + "schema": "Schema", + "table": "Table", + "total_size": "Total Size", + "table_size": "Table Size", + "indexes_size": "Indexes", + "live_tuples": "Live Tuples", + "dead_tuples": "Dead Tuples", + "dead_tuple_size": "Dead Tuple Size", + "no_tables": "No table storage information available" + }, + "timescale": { + "no_data_title": "No TimescaleDB Data", + "no_data_description": "TimescaleDB extension is not installed or no hypertables are configured.", + "no_jobs": "No background jobs configured", + "total_chunks": "Total Chunks", + "background_jobs": "Background Jobs", + "hypertable_name": "Hypertable Name", + "hypertables": "Hypertables", + "hypertable": "Hypertable", + "chunks": "Chunks", + "compression": "Compression", + "job_id": "Job ID", + "job_type": "Job Type", + "last_run_status": "Last Run Status", + "next_start": "Next Start", + "not_run": "Not run", + "not_scheduled": "Not scheduled" + }, + "backups": { + "no_backups": "No database backups available" + }, + "query_detail": { + "title": "Query Details", + "query": "Query", + "copy": "Copy", + "query_copied": "Query copied to clipboard", + "plan_copied": "Execution plan copied to clipboard", + "copy_failed": "Failed to copy to clipboard", + "statistics": "Statistics", + "calls": "Calls", + "avg_time": "Avg Time", + "max_time": "Max Time", + "total_rows": "Total Rows", + "execution_times": "Execution Times (ms)", + "min": "Min", + "mean": "Mean", + "max": "Max", + "std_dev": "Std Dev", + "buffer_stats": "Buffer Statistics", + "shared_blocks_hit": "Shared Blocks Hit", + "shared_blocks_read": "Shared Blocks Read", + "cache_hit_ratio": "Cache Hit Ratio", + "local_blocks_hit": "Local Blocks Hit", + "local_blocks_read": "Local Blocks Read", + "temp_blocks_written": "Temp Blocks Written", + "execution_plan": "Execution Plan", + "no_explain_plan": "EXPLAIN plan could not be generated for this query", + "not_found": "Query details not found" + } } - }, - "external_matches": { - "presence_title": "5stack Steam bot", - "presence_description": "Add the bot as a Steam friend to auto-import your Competitive & Premier matches the moment they end.", - "presence_connect": "Add bot as friend", - "presence_add_bot": "Open the bot on Steam", - "presence_pending": "Once you send the request the bot accepts within a minute — this flips to Connected automatically.", - "presence_connected": "Connected — imports are instant.", - "presence_not_connected": "Not connected yet.", - "presence_self_label": "As your friends see you", - "presence_unavailable": "The 5stack bot isn't available right now — please try again later or contact an admin.", - "need_two_codes": "You'll need two codes from Valve:", - "step_auth_prefix": "Your", - "steam_auth_code": "Steam Game Authentication Code", - "step_auth_mid": "— on the Steam help page, look under", - "access_match_history": "“Access to Your Match History”", - "step_auth_and_click": "and click", - "create_auth_code": "Create Authentication Code", - "generated_once": "Generated once per Steam account.", - "step_share_prefix": "A recent", - "match_share_code": "Match Share Code", - "step_share_copy": "— copy from", - "watch_your_matches": "Watch → Your Matches", - "step_share_within_30": "in CS2 (any match within the last 30 days works as a starting point).", - "auth_code": "Auth code", - "share_code": "Share code", - "linking": "Linking…", - "link_match_history": "Link match history", - "toast_linked": "Linked CS2 match history", - "toast_could_not_link": "Could not link", - "toast_unlinked": "Unlinked CS2 match history", - "toast_polled": "Polled match history", - "toast_collected": "Collected {count} new share codes", - "toast_poll_failed": "Poll failed", - "toast_cleared_import": "Cleared pending import", - "unknown_error": "Unknown error", - "linked_errors": "Linked · errors", - "linked": "Linked", - "last_poll": "Last poll", - "never": "never", - "polling": "Polling…", - "poll_now": "Poll now", - "unlinking": "Unlinking…", - "unlink": "Unlink", - "most_recent_share_code": "Most recent share code", - "scanned": "scanned", - "last_error": "Last error", - "unlink_confirm_title": "Unlink match history?", - "unlink_confirm_description": "We'll stop importing your official CS2 matches and Premier rank. You can re-link anytime with your Steam auth and share codes.", - "polling_banner_title": "Polling your match history…", - "polling_banner_description": "Scanning Valve for your recent matches. Pending imports will appear below as we find them.", - "pending_imports": "Pending imports", - "pending_imports_description": "Matches your linked accounts are waiting on. Demos that fail here are typically older than 30 days and no longer hosted by Valve.", - "importing": "Importing…", - "show_less": "Show less", - "show_more": "Show {count} more", - "upload_demo": "Upload a demo", - "upload_demo_description": "Drop in a CS2 .dem file to import the match stats. Works whether or not your match history is linked.", - "drop_to_upload": "Drop to upload", - "click_to_choose": "Click to choose or drag a .dem file", - "demo_files_only": "CS2 demo files only · single file", - "uploading": "Uploading…", - "finishing": "Finishing…", - "toast_wrong_file_type": "Wrong file type", - "toast_drop_dem_file": "Please drop a CS2 .dem file.", - "error_invalid_demo": "Not a valid CS2 demo (.dem) file", - "upload_success_message": "Uploaded — importing now. Your match will appear shortly.", - "toast_demo_uploaded": "Demo uploaded", - "toast_demo_uploaded_description": "Importing now — your match will appear shortly.", - "toast_upload_failed": "Upload failed" - } - }, - "watch": { - "title": "Watch", - "section_live_tournaments": "LIVE.TOURNAMENTS", - "section_streaming_now": "STREAMING.NOW", - "section_live_matches": "LIVE.MATCHES", - "section_upcoming_tournaments": "UPCOMING.TOURNAMENTS", - "section_upcoming_matches": "UPCOMING.MATCHES", - "section_recent_matches": "RECENT.MATCHES", - "section_recent_tournaments": "RECENT.TOURNAMENTS", - "section_recent_highlights": "RECENT.HIGHLIGHTS", - "no_live_matches": "STANDBY · NO LIVE MATCHES", - "upcoming": "Upcoming" }, - "highlights": { - "title": "Highlights", - "queue": "Queue", - "render_queue": "Render Queue", - "render_queue_description": "Active and recently-finished render batches across the platform.", - "clear_player_filter": "Clear player filter", - "filter_by_player": "Filter by player", - "view_mode": "View mode", - "view_mode_filter_disabled": "Cleared while filtering", - "filter_labels": { - "visibility": "Visibility", - "date": "Date", - "kills": "Kills", - "sort": "Sort" - }, - "since": { - "all": "All time", - "24h": "Last 24 hours", - "7d": "Last 7 days", - "30d": "Last 30 days", - "90d": "Last 90 days" - }, - "kills": { - "2": "2+ kills", - "3": "3+ kills", - "4": "4+ kills", - "5": "5 kills", - "any": "Any kills" - }, - "view_modes": { - "matches": "Match Clips", - "singles": "Singular Clips" - }, - "sort": { - "recent": "Most recent", - "views": "Most viewed" - }, - "visibility_filter": { - "all": "All", - "public": "Public", - "private": "Private" - }, - "empty": { - "no_match_filters": "No clips match these filters", - "no_clips_yet": "No clips here yet", - "try_widening": "Try widening the filters or clearing one.", - "try_different_admin": "Try a different filter — or wait for new clips to render.", - "check_back_soon": "Public clips will appear here as they're rendered. Check back soon.", - "clear_player": "Clear player", - "clear_date": "Clear date", - "clear_kills": "Clear kills" - } - }, - "news": { - "title": "News", - "back": "Back to News", - "updated": "Updated {date}", - "written_by": "Written by", - "cover_editor": { - "title": "Adjust Cover Image", - "description": "Crop to fit the article. Use Remove Background to make logos sit cleanly on the page.", - "hint": "Scroll to zoom · drag to move · Fit shows the whole image", - "fit": "Fit" - }, - "new_article": "New Article", - "mark_read": "Mark as read", - "empty": "No news articles yet — check back soon.", - "manage": { - "title": "Manage News", - "view_news": "View News", - "new_post": "New Post", - "edit": "Edit", - "delete": "Delete", - "delete_confirm_title": "Delete this post?", - "delete_confirm_description": "This permanently removes the news post. This cannot be undone.", - "publish": "Publish", - "unpublish": "Unpublish", - "draft": "Draft", - "published": "Published", - "saved": "Post saved", - "deleted": "Post deleted", - "published_toast": "Post published", - "unpublished_toast": "Post moved to draft", - "save_failed": "Unable to save the post", - "empty": "No posts yet. Create your first one.", - "views": "Views" - }, - "form": { - "title_label": "Title", - "title_placeholder": "Post title", - "teaser_label": "Teaser", - "teaser_placeholder": "A short summary shown in the news list", - "cover_label": "Cover Image", - "cover_hint": "Click or drop an image", - "cover_formats": "PNG · JPG · WEBP · GIF · up to 10MB", - "cover_replace": "Replace", - "cover_remove": "Remove", - "content_label": "Content", - "save_draft": "Save Draft", - "save_changes": "Save Changes", - "publish": "Publish", - "write": "Write", - "preview": "Preview", - "preview_full": "Preview Post", - "preview_empty": "Start writing to see your post preview.", - "back_to_edit": "Back to Editor", - "upload_image": "Upload image", - "uploading": "Uploading…", - "uploading_image": "Uploading image…" - } - }, - "seasons": { - "title": "Seasons", - "description": "Create and manage competitive seasons. Regular-match ELO resets to 5000 each season.", - "create_title": "Create Season", - "season_number": "Season {number}", - "description_label": "Description", - "description_placeholder": "Optional description", - "start_label": "Start Date", - "end_label": "End Date", - "pick_date": "Pick a date", - "ongoing": "Ongoing", - "current": "Current", - "off_season": "Off-Season", - "matches_label": "Matches", - "ledger_title": "Season Ledger", - "utc_hint": "Dates are in UTC and begin at 00:00. Leave the end date empty for an ongoing season.", - "create_button": "Create Season {number}", - "active": "Active", - "upcoming": "Upcoming", - "ended": "Ended", - "ends_in": "Ends in {time}", - "ends_in_label": "Ends In", - "set_end": "Set End Date", - "change_start": "Change Start", - "change_end": "Change End Date", - "make_ongoing": "Make Ongoing", - "end_now": "End Now", - "updated": "Season updated", - "upcoming_title": "Upcoming Seasons", - "past_title": "Past Seasons", - "rebuild": "Rebuild", - "rebuild_elo": "Rebuild ELO", - "rebuild_required": "Rebuild Required", - "needs_rebuild_notice": "This season's ELO is out of date and its standings are incorrect. Rebuild to recompute ELO and stats from its matches.", - "delete": "Delete", - "deleted": "Season deleted", - "delete_confirm_title": "Delete this season?", - "delete_confirm_description": "The season is removed and its matches revert to no season (their ELO history is kept, not deleted). Per-season stats for it are cleared. This cannot be undone.", - "rebuild_confirm_title": "Rebuild season ELO?", - "rebuild_confirm_description": "Recomputes this season's ELO and stats from all of its matches. This normally runs automatically — only rebuild if the data looks wrong. It runs in the background and may take a while.", - "empty": "No seasons created yet. Create your first season above.", - "created": "Season created", - "error_end_before_start": "End date must be after the start date.", - "error_overlap": "This range overlaps an existing season.", - "error_generic": "Something went wrong. Please try again.", - "backfill_running": "Rebuilding season ELO…", - "backfill_queued": "Season backfill queued", - "backfill_cancel_requested": "Cancellation requested", - "backfill_canceled_title": "Season backfill canceled", - "backfill_complete_title": "Season backfill complete", - "backfill_complete_desc": "Rebuilt {completed} of {total} matches ({failed} failed)." - }, - "regions": { - "title": "Regions", - "description": "Regions allow you to group game servers by geographic location. Players can select preferred regions during matchmaking and veto undesired regions during match setup.", - "create": "Create Region", - "table": { - "available_servers": "Available Servers / Total Servers", - "use_lan_ip": "Require LAN Connection", - "use_lan_ip_description": "Enforces that game servers in this region must be connected to from a LAN IP address.", - "use_steam_relay": "Use Steam Relay", - "use_steam_relay_description": "Enable Steam Relay for game servers to hide their IP address from the public." - }, - "edit": "Edit Region", - "set_label": "Edit Label", - "delete": { - "title": "Delete Region", - "description": "Are you sure you want to delete this region? This action cannot be undone." - }, - "deleted": "Deleted Region" - }, - "players": { - "title": "Players", - "filter_by_privilege": "Filter by Privilege", - "select_privileges": "Select Privileges", - "filter_by_country": "Filter by Country", - "select_country": "Select country...", - "search_country": "Search country...", - "no_country_found": "No country found.", - "countries_selected": "countries selected", - "privileges_selected": "privileges selected", - "elo_range": "Elo Range", - "filter_chips": { - "elo_min": "Elo Min", - "elo_max": "Elo Max", - "countries": "Countries", - "privilege": "Privilege", - "sanctions_min": "Sanctions ≥", - "played": "Played", - "banned": "Banned", - "gagged": "Gagged", - "muted": "Muted", - "headshot_pct": "HeadShot %" - }, - "played_matches": "Played Matches", - "min_sanctions": "Minimum Sanctions", - "is_banned": "Banned", - "is_gagged": "Gagged", - "is_muted": "Muted", - "table": { - "elo": "Elo", - "elo_track_season": "Season", - "elo_track_tournament": "Tournament", - "last_sign_in_at": "Last Sign In At", - "privilege": "Privilege", - "kdr": "KDR", - "no_players": "No players found" - }, - "detail": { - "all_short": "All", - "settings_changed": "Custom settings active", - "source_all_unavailable_elo": "\"All\" isn't available on the ELO tab — showing 5Stack ELO only.", - "external_warning": { - "title": "No match history linked", - "description": "Link your Steam match-history auth code to import your Premier, Competitive and Wingman matches.", - "cta": "Set up" - }, - "tabs": { - "performance": "Performance", - "breakdown": "Breakdown", - "elo": "ELO", - "maps": "Maps", - "arsenal": "Arsenal", - "combat": "Combat" - }, - "roles": { - "no_data": "Not enough recent matches to detect a role.", - "primary": "Primary", - "secondary": "Secondary", - "rifler_detail": "balanced rifler", - "maps_count": "{count} maps" - }, - "recent_wins_and_losses": "Recent Wins and Losses", - "elo_history": "ELO History", - "no_elo_history": "Play a match to generate ELO", - "play_a_match": "Play", - "matches": "Matches", - "no_matches": "No matches yet", - "no_matches_description": "Match history will appear here after playing games.", - "no_matches_self_description": "Jump into a match — your stats, ELO, and match history will start filling in here.", - "edit_player": "Edit Player", - "friend": "Friend", - "name": "Name", - "role": "Role", - "range_settings": "Range settings", - "view_full_elo_history": "View History", - "rank": "Rank", - "global_rank": "Global Rank", - "top_percent": "Top {percent}%", - "player_profile": "Player Profile", - "recent_form": "Recent Form", - "range": "Range", - "custom_range": "Custom Range", - "custom_window_active": "Custom window active. Choosing a preset clears it.", - "exclude_tournaments": "Exclude tournaments", - "exclude_tournaments_description": "Skip tournament matches in stats and chart.", - "current_elo": "Current ELO", - "source": "Source", - "provider": "Provider", - "mode": "Mode", - "section": "Section", - "range_l30": "L30", - "range_7d": "7D", - "range_30d": "30D", - "range_90d": "90D", - "range_1y": "1Y", - "range_all": "ALL", - "range_season": "Season", - "season_current": "Current Season", - "last_n_matches": "Last 10", - "start_date": "Start", - "end_date": "End", - "peak_lowest": "Peak / Lowest", - "peak": "Peak", - "no_matches_in_window": "No matches in this window", - "no_matches_in_window_period": "No matches in this window.", - "expand_to_all_time": "Expand to all time", - "acquiring_telemetry": "Acquiring telemetry…", - "matches_section": "MATCHES", - "intro": { - "section": "Performance Intro", - "last_n": "Last {n} matches", - "empty_title": "No parsed matches", - "empty_description": "Detailed performance stats appear here once this player has finished and parsed matches.", - "adr": "ADR", - "kd": "K/D", - "kpr": "KPR", - "dpr": "DPR", - "win_rate": "Win Rate", - "hs_pct": "HS%", - "series": { - "hltv": "HLTV", - "adr": "ADR", - "kd": "K/D", - "kpr": "KPR", - "udr": "UDR", - "kast": "KAST" - }, - "tooltip": { - "won": "WON", - "lost": "LOST", - "tied": "TIED" - } - }, - "maps": { - "section": "MAPS", - "description": "Career performance broken down by map, with terrorist and counter-terrorist side splits.", - "empty_title": "No map data yet", - "empty_description": "Once this player finishes matches, per-map performance will appear here.", - "played_short": "PLD", - "rating_label": "HLTV Rating", - "win_rate": "Win Rate", - "both": "BOTH", - "t_side": "T", - "ct_side": "CT", - "adr_short": "ADR", - "table_section": "ALL MAPS", - "col_map": "Map", - "col_played": "Played", - "col_win": "Win%", - "col_rating": "HLTV Rating", - "col_adr": "ADR", - "col_kd": "K/D", - "col_udr": "UDR", - "col_avg_kda": "Avg K/D/A" - }, - "weapons_table": { - "section": "Weapons", - "empty_title": "No weapon data", - "empty_description": "This player has no recorded weapon kills yet.", - "weapon": "Weapon", - "kills": "Kills", - "adr": "ADR", - "kpr": "KPR", - "rounds": "Rounds", - "rounds_tooltip": "Rounds with a kill using this weapon (we can't see rounds a weapon was only held)", - "rating": "HLTV Rating", - "rating_tooltip": "Approximate rating from KPR + ADR + impact (no per-weapon deaths/KAST, so it's directional)", - "economy": "Economy", - "economy_tooltip": "Weapon rating adjusted for buy cost — frags with cheaper weapons rate higher (~1.0 = on par for the price)" - }, - "career_duels": { - "section": "Opening Duels", - "description": "First-kill-of-round outcomes across the last {count} maps.", - "empty_title": "No opening duels", - "empty_description": "This player has no recorded opening duels in their recent matches.", - "win_label": "Open Win", - "attempts_label": "Opening Attempts", - "kills_short": "K", - "deaths_short": "D", - "kd_label": "Opening K/D", - "traded_label": "Traded When Opened", - "table_section": "By Map", - "col_map": "Map", - "col_attempts": "Attempts", - "col_win": "Win %", - "col_kd": "K/D", - "col_traded": "Traded %" - }, - "career_clutches": { - "section": "Clutches", - "description": "1vX clutch situations across the last {count} maps.", - "empty_title": "No clutches", - "empty_description": "This player has no recorded clutch situations in their recent matches.", - "win_label": "Clutch Win", - "attempts_label": "Attempts", - "won_label": "Won", - "table_section": "Clutches by Situation", - "col_situation": "Situation", - "col_attempts": "Attempts", - "col_won": "Won", - "col_win": "Win %" - }, - "compare": { - "label": "Compare vs", - "select_label": "Compare player", - "description": "Overlays this player's numbers across every stats tab.", - "vs": "vs" - }, - "elo_history_dialog": { - "current": "Current", - "peak": "Peak", - "lowest": "Lowest", - "matches": "Matches", - "win_rate": "Win Rate", - "avg_delta_elo": "Avg ΔELO:", - "no_matches_window": "No matches in selected window", - "expand_to_all_time": "Expand to all time", - "best_gain": "Best Single Gain", - "worst_loss": "Worst Single Loss", - "view_match": "View match" + "custom_match": { + "description": "Build your own match with custom rules, maps, and lineups" + }, + "layouts": { + "account_settings": { + "title": "Account Settings", + "description": "Manage your account settings and preferences", + "select_section": "Select section" + }, + "application_settings": { + "title": "Application Settings", + "description": "Settings that effect the application.", + "select_section": "Select section", + "branding_nav": "Branding", + "fixtures_nav": "Fixtures" + }, + "system_update": { + "title": "System Update Available", + "description": "The following services have updates:", + "note": "Please note: It will take a few minutes to process and verify the new updates.", + "fix_link": "If a system upgrade persists, you may need to fix your versions", + "updating": "System is Updating", + "panel_update": "Your panel is out of date, pull and run the update script" + }, + "match_lobby": { + "versus": "VS" + }, + "notifications": { + "title": "Notifications", + "dismiss": "Dismiss", + "dismiss_all": "Dismiss All Notifications", + "delete_all_read": "Delete All Read Notifications", + "no_notifications_title": "No notifications", + "no_notifications": "No notifications at the moment." + }, + "app_nav": { + "brand": "5stack", + "systems_online": "{count} System Online | {count} Systems Online", + "navigation": { + "dashboard": "My Stats", + "play": "Play", + "watch": "Watch", + "tournaments": "Tournaments", + "public_servers": "Public Servers", + "players": "Players", + "teams": "Teams", + "leaderboard": "Leaderboard", + "search": "Search" + }, + "community": { + "title": "Community" + }, + "administration": { + "title": "Administration", + "regions": "Regions", + "servers": "Servers", + "dedicated_servers": "Dedicated Servers", + "game_server_nodes": "Game Server Nodes", + "app_settings": "App Settings", + "manage_matches": "Manage Matches", + "manage_tournaments": "Manage Tournaments" + }, + "system": { + "title": "System", + "logs": "Logs", + "database": "Database", + "metrics": "Metrics" + }, + "profile": { + "my_account": "My Settings", + "logout": "Logout" + }, + "footer": { + "report_issue": "Report an Issue", + "join_discord": "Join our Discord" + }, + "tooltips": { + "dashboard": "My Stats", + "play": "Play", + "watch": "Watch", + "tournaments": "Tournaments", + "players": "Players", + "teams": "Teams", + "leaderboard": "Leaderboard", + "public_servers": "Public Servers", + "regions": "Regions", + "servers": "Servers", + "dedicated_servers": "Dedicated Servers", + "game_server_nodes": "Game Server Nodes", + "system_logs": "System Logs", + "database": "Database", + "system_metrics": "System Metrics", + "app_settings": "App Settings", + "report_issue": "Report an Issue", + "join_discord": "Join our Discord", + "manage_matches": "Manage Matches", + "manage_tournaments": "Manage Tournaments", + "search_players": "Search Players" + }, + "logout_dialog": { + "title": "Logout", + "description": "Are you sure you want to logout?", + "confirm": "Logout" + } + }, + "top_nav": { + "home": "My Stats", + "play_menu": "Play", + "community_menu": "Community", + "watch_menu": "Watch", + "login": "Login to Play", + "login_mobile": "Login", + "play": { + "find_match": "Find a Match", + "tournaments": "Tournaments", + "public_servers": "Public Servers", + "hero": { + "title": "Play & Compete", + "subtitle": "Join matches, tournaments." + } + }, + "community": { + "watch": { + "title": "Watch", + "subtitle": "Watch matches, tournaments." + }, + "players": { + "title": "Players", + "subtitle": "Browse and search for players" + }, + "teams": { + "title": "Teams", + "subtitle": "Find and manage teams" + }, + "leaderboard": { + "title": "Leaderboard", + "subtitle": "Top players and rankings" + }, + "social": { + "title": "Social", + "join_discord": { + "title": "Join our Discord", + "subtitle": "Chat, support, and announcements" + } + } + } + }, + "lobby_panel": { + "lobby_invites": "Lobby Invites", + "your_squad": "Your Squad", + "squad_description": "Organize your team, send invites, and prepare for voice / Discord comms.", + "create_lobby_description": "Create a lobby to invite friends and queue together.", + "create_lobby_button": "Create Lobby", + "voice_discord": "Voice & Discord", + "discord_linked": "Discord Linked", + "link_discord": "Link Discord" + }, + "chat_panel": { + "default_title": "Chat", + "participants_in_chat": "{count} in chat", + "pop_out_tooltip": "Pop out to window", + "no_chats_title": "No chats yet", + "no_chats_description": "Once you join a chat, it will appear here." + }, + "recent_games": { + "title": "Recent Games", + "last_matches": "Last {count} matches", + "performance": "Performance", + "draws_label": "Draws", + "most_played_maps": "Most Played Maps", + "no_maps": "Maps will appear here as you play.", + "no_recent_matches_title": "No recent matches", + "no_recent_matches_description": "Once you play some games, they will appear here." } - } - }, - "play": { - "title": "Play", - "open_registration_tournaments": { - "description": "Tournaments that are open for registration for anyone to join." - }, - "matchmaking": { - "description": "Queue solo or with your party — teams are auto-balanced and the match starts for you.", - "leader_required": "Only the party leader can start matchmaking." - }, - "draft_games": { - "section_label": "OPEN.MATCHES", - "description": "Browse open pick-up games or create one — captains draft the teams." - } - }, - "matches": { - "title": "Matches", - "create": "Create Match", - "schedule": { - "title": "Schedule Match", - "step_settings": "Settings", - "step_teams": "Teams", - "kickoff": "Kickoff Time", - "kickoff_future": "Pick a time in the future.", - "kickoff_asap": "Leave empty to start ASAP", - "team": "Team", - "individual": "Individual", - "select_team": "Select a team", - "team_n": "Team {n}", - "lineups_desc": "Pick a team for each side, or assign {count} players individually.", - "submit": "Schedule Match" - }, - "match_updated": "Match Updated", - "teams": "TEAMS", - "players": "PLAYERS", - "status_label": "STATUS", - "window": "WINDOW", - "from": "FROM", - "to": "TO", - "options": "OPTIONS", - "preset_upcoming_live": "Upcoming & Live", - "preset_finished": "Finished", - "clear": "CLEAR", - "clear_short": "Clear", - "lineup_only": "Only matches I'm in", - "include_external": "Include external matches", - "standby_no_matches": "STANDBY · NO MATCHES FOUND", - "create_page": { - "pick_up_game": "Pick Up Game", - "pick_up_game_description": "A Pick up game does not require selection of teams.", - "team_1": "Team 1", - "search_team": "Search for a Team ...", - "team_2": "Team 2", - "intra_team_scrimmage": "You can select the same team for both slots to create an intra-team scrimmage.", - "create_button": "Create Match", - "update_button": "Update Match" - } }, - "toasts": { - "copied_to_clipboard": "Copied to Clipboard" - }, - "gpu_nodes": { - "title": "GPU Nodes", - "gpu_unknown": "GPU", - "description": "GPU-capable game server nodes that host live streams, demo playback, and highlight renders. Each GPU runs at most one consumer at a time.", - "metrics": "Metrics", - "meter": { - "compute": "GPUs" - }, - "stat": { - "available": "Available" - }, - "idle": "Idle", - "disabled": "Disabled", - "enabled": "Enabled", - "accepting_matches": "Accepting Matches", - "toggle_enabled_help": "When off, the node is fully disabled — no GPU work and no match scheduling.", - "toggle_scheduling_help": "When off, the node keeps running existing matches but won't accept new ones.", - "toggle_enabled_failed": "Failed to toggle node enabled state", - "toggle_scheduling_failed": "Failed to toggle scheduling state", - "toggle_workload_failed": "Failed to toggle GPU workload availability", - "control": { - "title": "Node Control" - }, - "workload": { - "section": "GPU Workloads", - "streaming": "Live Streaming", - "streaming_desc": "Live spectator streams", - "demos": "Demo Playback", - "demos_desc": "On-demand demo replay", - "rendering": "Rendering", - "rendering_desc": "Highlight & clip renders" - }, - "bake": { - "help": "Pre-bake this node's Vulkan shader cache so the first match starts warm.", - "cancel_help": "Cancel the running shader pre-bake.", - "logs_help": "View the shader pre-bake job logs.", - "started": "Shader bake started", - "failed": "Failed to start shader bake", - "cancelled": "Shader bake cancelled", - "cancel_failed": "Failed to cancel shader bake", - "in_progress": "Pre-bake in progress", - "stages": { - "errored": "Bake failed" - } - }, - "empty": { - "title": "No GPU Nodes", - "description": "No game server nodes have been registered with a GPU. Enable GPU support on a node to make it available for streaming and rendering." - }, - "steam_pool": { - "title": "Steam Accounts", - "description": "Pool used by GPU nodes for rendering, demo playback, and live spectating. Each running pod holds one account, so the pool needs at least as many accounts as you have GPU nodes for full parallelism.", - "accounts_label": "Pool", - "add": "Add Account", - "add_title": "Add Steam Account", - "add_description": "Account must have Steam Guard disabled. Username and password are stored as-is and injected into render pods.", - "username": "Username", - "password": "Password", - "empty": "No Steam accounts yet.", - "empty_warning_title": "GPU nodes are registered but the Steam account pool is empty — highlight renders and live spectating will fail until you add at least one account.", - "short_warning_title": "Only {accounts} Steam account(s) for {nodes} GPU node(s) — some renders will queue waiting for an account.", - "added": "Steam account added", - "add_failed": "Failed to add account", - "deleted": "Steam account deleted", - "delete_failed": "Failed to delete account", - "delete_title": "Delete {username}?", - "delete_description": "Any running pod using this account keeps its credentials and finishes normally. The account will be removed from the pool and not available for future jobs.", - "idle": "Idle", - "purpose": { - "live": "Live Stream", - "demo": "Demo Playback", - "highlights": "Highlights", - "bake": "Shader Bake" + "alt_text": { + "steam_login": "Steam login", + "discord": "Discord", + "map_poster": "Map poster", + "map_patch": "Map patch" + }, + "pwa": { + "install": { + "title": "Add to Home Screen", + "description": "This website offers app-like features. Add it to your home screen for easy access.", + "step1": "Press the 'Share' button", + "step2": "Select 'Add to Home Screen'", + "tooltip": "Install App", + "button": "Install App" } - }, - "stop": "Stop" }, - "game_server_nodes": { - "title": "Game Server Nodes", - "description": "Game server nodes expand your server offerings into different regions or provide redundancy for on-demand servers.", - "not_supported": { - "title": "Your Panel currently does not support Game Server Nodes.", - "description": "View the documentation to setup Game Server Nodes." - }, - "no_nodes_title": "No Game Server Nodes", - "display_metrics": "Display Metrics", - "create": "Create Game Server Node", - "cs_version_info": "CS2 Version Information:", - "hide_offline": "Hide Offline Nodes", - "only_enabled": "Only Enabled Nodes", - "setup_dialog": { - "title": "Game Server Node Setup", - "description": "Run this installation script on your server to connect it to 5Stack", - "installation_script": "Installation Script", - "waiting_title": "Waiting for node to connect...", - "waiting_description": "Run the installation script on your server. The status will update automatically when the node connects.", - "new_node": "Game server node successfully connected", - "close": "Close" - }, - "status": { - "setup": "Setup", - "not_accepting": "Not Accepting New Matches" - }, - "table": { - "node": "Node", - "cs_build_id": "CS2 Build", - "capacity": "Capacity", - "ports": "Ports", - "available": "Available", - "ports_tooltip": "Forwarded Ports to Node", - "no_nodes": "No Game Server Nodes", - "supports_low_latency": "Supports Low Latency", - "supports_cpu_pinning": "Supports CPU Pinning", - "cpu_governor": "CPU Governor" - }, - "last_updated": "Last Updated: {date}", - "max_label": "Max:", - "ports_label": "Ports:", - "cpu_hardware": "CPU & Hardware" - }, - "dedicated_servers": { - "title": "Dedicated Servers", - "description": "Dedicated servers stay connected to 5Stack and are automatically used to host matches, tournaments, and public play.", - "docs_link": "View setup guide", - "no_servers_title": "No Dedicated Servers", - "no_servers": "No dedicated servers found.", - "create": { - "title": "Create Dedicated Server" - }, - "table": { - "connection_details": "Connection Details", - "label": "Label", - "type": "Type", - "port": "Game Port", - "tv_port": "TV Port", - "enabled": "Enabled" - }, - "detail": { + "common": { + "manage_custom_plugins_and_shared_files": "These files are moutned to `csgo` directory when the server is started.", + "delete": "Delete", + "cancel": "Cancel", + "save": "Save", + "update": "Update", + "error": "Error", "enabled": "Enabled", - "eyebrow": "Dedicated Server", - "status_label": { - "connected": "Connected", - "disconnected": "Disconnected", - "no_rcon": "No RCON", - "version_mismatch": "Version Mismatch" - }, - "server_plugin_config": "Server Plugin Config", - "hide_config": "Hide Config", - "show_config": "Show Config", - "config_location": "This config should be placed in:", - "files": "Files", - "player_management": "Player Management", - "no_players": "No players currently on this server", - "sanctions_wip_title": "Work in progress", - "sanctions_wip": "Kicks work today. Live mute/gag enforcement on public servers is a work in progress — a new 5Stack public server plugin is coming soon, and mutes/gags will apply automatically once it ships.", - "status": { - "disconnected": "Server is disconnected", - "no_rcon": "Server is connected but RCON is not available", - "connected": "Server is connected and RCON is available", - "plugin_version_mismatch": "plugin version is not up to date" - }, - "delete_confirm": { - "title": "Are you absolutely sure?", - "description": "This action cannot be undone. This will permanently delete your server and remove associated data from our servers.", - "continue": "Continue" + "all": "All", + "tbd": "TBD", + "yes": "Yes", + "no": "No", + "more": "More", + "none": "None", + "failed": "Failed", + "disabled": "Disabled", + "online": "Online", + "offline": "Offline", + "degraded": "Degraded", + "never": "Never", + "live": "Live", + "finished": "Finished", + "scheduled": "Scheduled", + "show_metrics": "Show metrics", + "hide_metrics": "Hide metrics", + "connected": "Connected", + "disconnected": "Disconnected", + "system": "System", + "hide_details": "Hide details", + "show_details": "Show details", + "enter_fullscreen": "Enter Fullscreen", + "exit_fullscreen": "Exit Fullscreen", + "download": "Download", + "upload": "Upload", + "sort_ascending": "Sort ascending", + "sort_descending": "Sort descending", + "boolean": { + "yes": "Yes", + "no": "No" + }, + "are_you_sure": "Are you sure you want to run this command?", + "are_you_sure_short": "Are you sure?", + "no_tables_found": "No tables found", + "actions": { + "edit": "Edit", + "delete": "Delete" + }, + "actions_label": "Actions", + "close": "Close", + "confirm": "Confirm", + "refresh": "Refresh", + "create": "Create", + "rename": "Rename", + "creating": "Creating...", + "saving": "Saving...", + "loading": "Loading...", + "undo": "Undo", + "redo": "Redo", + "name": "Name", + "description": "Description", + "status": "Status", + "region": "Region", + "filters": "Filters", + "reset_filters": "Reset Filters", + "player": "Player", + "plugin_version": "Plugin Version", + "pick_date": "Pick a date", + "team_name": "Team Name", + "coaches": "Coaches", + "map_veto": "Map Veto", + "round": "Round {number}", + "stats": { + "wins": "Wins", + "losses": "Losses", + "kills": "Kills", + "deaths": "Deaths", + "assists": "Assists", + "win_rate": "Win Rate" } - } }, - "public_servers": { - "title": "Public Servers", - "players": "Players", - "no_servers_title": "No Servers Available", - "no_public_servers": "No public servers available at the moment.", - "no_public_servers_admin": "Set up a public server from the Dedicated Servers page to make it available here.", - "setup_public_server": "Set Up a Public Server", - "lan_servers_title": "LAN Servers", - "manage": "Manage" - }, - "map_pools": { - "title": "Map Pools", - "form": { - "name": "Name", - "name_description": "This must match the name of the map in the game that the server recognizes.", - "label": "Label", - "poster": "Poster (optional)", - "poster_placeholder": "http://example.com/poster.png", - "patch": "Patch (optional)", - "patch_placeholder": "http://example.com/patch.png", - "workshop_map_id": "Workshop Map ID (optional)", - "create_map": "Create Map", - "delete_map": "Delete Map", - "delete_confirm": { - "title": "Delete Map", - "description": "Are you sure you want to delete this map? This action cannot be undone." - }, - "success": { - "create": "Map created successfully", - "update": "Map updated successfully", - "delete": "Map deleted successfully", - "workshop_refresh": "Workshop map details refreshed successfully" + "spotlight_search": { + "placeholder": "Search players...", + "searching": "Searching..." + }, + "file_manager_store": { + "load_directory_failed": "Failed to load directory", + "read_file_failed": "Failed to read file", + "create_directory_failed": "Failed to create directory", + "delete_item_failed": "Failed to delete item", + "rename_item_failed": "Failed to rename item", + "move_item_failed": "Failed to move item", + "save_file_failed": "Failed to save file", + "network_error": "Network error", + "upload_cancelled": "Upload cancelled" + }, + "file_manager": { + "location": "Location", + "dedicated_server_files": "Dedicated Server Files", + "game_server_node_files": "Game Server Node Files", + "loading_server_info": "Loading server information...", + "create_directory": { + "title": "Create New Directory", + "description": "Enter a name for the new directory", + "label": "Directory Name", + "placeholder": "my-directory" + }, + "create_file": { + "title": "Create New File", + "description": "Enter a name for the new file", + "label": "File Name", + "placeholder": "my-file.txt", + "failed": "Failed to create file" }, - "error": { - "create": "Error creating map", - "update": "Error updating map", - "invalid_workshop": "Invalid workshop map ID. Please verify the ID exists on Steam Workshop.", - "workshop_refresh": "Error refreshing workshop map details" + "delete_confirm": { + "title_file": "Delete File", + "title_directory": "Delete Directory", + "description_file": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", + "description_directory": "Are you sure you want to delete \"{name}\"? All contents will be permanently deleted." + }, + "rename": { + "title_file": "Rename File", + "title_directory": "Rename Directory", + "description": "Enter a new name for \"{name}\"", + "label": "New Name" + }, + "editor": { + "title": "Edit File: {path}", + "description": "Make changes to the file content", + "loading": "Loading file...", + "save_success": "File saved successfully!", + "load_failed": "Failed to load file", + "save_failed": "Failed to save file", + "unsaved_close": "You have unsaved changes. Are you sure you want to close?" + }, + "upload": { + "title": "Upload Files", + "description": "Select files to upload to the current directory", + "drag_drop": "Drag and drop files here or click to browse", + "max_size": "Maximum file size: 100MB", + "uploading": "Uploading files...", + "complete": "Upload complete", + "complete_with_errors": "Upload complete with errors", + "files_failed": "{count} file(s) failed to upload" + }, + "toolbar": { + "new_file": "New File", + "new_folder": "New Folder", + "upload_files": "Upload Files", + "refresh": "Refresh" + }, + "tree": { + "folder_name_placeholder": "folder name", + "file_name_placeholder": "file name", + "drop_hint": "Drop files here or right-click to create", + "files": "files", + "current": "Current" + }, + "details_panel": { + "menu_file_label": "File", + "menu_edit_label": "Edit", + "menu_view_label": "View", + "no_file_open_title": "No file open", + "no_file_open_description": "Select a file from the browser to edit", + "close": "Close", + "close_all": "Close All", + "enable_word_wrap": "Enable Word Wrap", + "disable_word_wrap": "Disable Word Wrap", + "show_minimap": "Show Minimap", + "hide_minimap": "Hide Minimap", + "no_file_open": "No file open", + "unsaved_changes": "You have unsaved changes. Are you sure you want to close?", + "unsaved_changes_all": "You have unsaved changes. Are you sure you want to close all files?" }, - "refresh_workshop": "Refresh Details" - }, - "pool": { - "modify_maps": "Modify maps in the pool", - "pool_heading": "{type} Pool" - }, - "add_new_map": "Add New Map", - "maps": "Available Maps", - "active_duty": "Active Duty", - "available_modes": "Available In Modes", - "workshop_id": "Workshop Link", - "search": "Search Maps" - }, - "map_pool": { - "toggle_pool_type": "Updated Map Pools", - "toggle_active_pool": "Maps Activity Status Updated", - "save_success": "Map pool saved successfully" + "tabs": { + "unsaved_changes_warning": "You have unsaved changes in other files. Are you sure you want to close them?", + "unsaved_changes_right_warning": "You have unsaved changes in files to the right. Are you sure you want to close them?", + "unsaved_changes_left_warning": "You have unsaved changes in files to the left. Are you sure you want to close them?" + } }, - "manage_matches": { - "only_my_matches": "Only My Organized Matches", - "no_matches": "No matches found.", - "enter_name": "Enter name...", - "enter_match_id": "Enter match ID...", - "enter_team_name": "Enter team name...", - "filter_by_regions": "Filter by Regions", - "sort_by": "Sort by", - "created_at": "Created Date", - "started_at": "Started Date", - "ended_at": "Ended Date", - "newest_first": "Newest First", - "oldest_first": "Oldest First", - "showing": "Showing", - "matches": "matches" + "error": { + "generic": "An error occurred. Please try again." }, - "leaderboard": { - "title": "Leaderboard", - "no_results": "No leaderboard data available for the selected filters.", - "categories": { - "elo": "ELO", - "best_rating": "HLTV Rating", - "best_adr": "ADR", - "best_kpr": "KPR", - "best_kast": "KAST", - "best_udr": "UDR", - "best_kdr": "KDR", - "best_win_rate": "Win Rate", - "highest_hs_pct": "HS%", - "trophies": "Trophies" - }, - "time_periods": { - "last_7_days": "Last 7 Days", - "last_30_days": "Last 30 Days", - "all_time": "All Time" - }, - "match_types": { - "all": "All Types", - "competitive": "Competitive", - "wingman": "Wingman", - "duel": "Duel", - "scrimmage": "Scrimmage" - }, - "roles": { - "all": "All Roles", - "Sniper": "Sniper", - "Entry": "Entry", - "Support": "Support", - "Rifler": "Rifler" - }, - "columns": { - "rank": "#", - "matches": "Matches" - }, - "col": { - "elo": "ELO", - "elo_change": "ELO Change", - "win_streak": "Win Streak", - "kdr": "K/D Ratio", - "kills": "Kills", - "deaths": "Deaths", - "wins": "Wins", - "losses": "Losses", - "hs_pct": "HS%", - "total_kills": "Total Kills", - "gold": "Gold", - "silver": "Silver", - "bronze": "Bronze", - "mvp": "MVP", - "rating": "HLTV Rating", - "adr": "ADR", - "kpr": "KPR", - "dpr": "DPR", - "kast": "KAST", - "udr": "UDR", - "util_damage": "Util Dmg", - "rounds": "Rounds" - }, - "exclude_tournaments": "Exclude Tournaments" - }, - "database": { - "query_copied": "Query copied to clipboard", - "copy_failed": "Failed to copy to clipboard", - "filters": { - "select_schemas": "Select schemas...", - "search_schemas": "Search schemas...", - "no_schemas": "No schemas found", - "schemas_selected": "schemas selected" - }, - "tabs": { - "queries": "Query Performance", - "connections": "Connections", - "locks": "Locks & Transactions", - "io": "I/O & Buffers", - "index_usage": "Index Usage", - "storage": "Storage", - "timescale": "TimescaleDB", - "backups": "Backups" - }, - "columns": { - "schema": "Schema", - "table": "Table", - "index": "Index", + "roles": { "user": "User", - "app": "App", - "client": "Client", - "state": "State", - "duration": "Duration", - "query": "Query", - "pid": "PID" - }, - "query_performance": { - "no_stats": "No query statistics found", - "search_query": "Search Query", - "min_calls": "Min Calls", - "sort_by": "Sort By", - "avg_time": "Avg Time", - "max_time": "Max Time", - "total_time": "Total Time", - "calls": "Calls", - "temp_blocks": "Temp Blocks", - "filter_by_query_text": "Filter by query text...", - "search_tables": "Search tables...", - "search_indexes": "Search indexes...", - "granted": "Granted", - "mode": "Mode", - "relation": "Relation" - }, - "connections": { - "no_active_queries": "No active queries", - "no_connections": "No connections found", - "active_queries_title": "Active Queries", - "all_connections_title": "All Connections", - "wait_event": "Wait Event", - "total": "Total", - "active": "Active", - "idle": "Idle", - "idle_in_txn": "Idle in Txn", - "waiting": "Waiting" - }, - "locks": { - "no_locks": "No active locks", - "no_table_stats": "No table statistics available", - "stats_title": "Database Statistics", - "cache_hit_ratio": "Cache Hit Ratio", - "active_backends": "Active Backends", - "tuples_inserted": "Tuples Inserted", - "tuples_updated": "Tuples Updated", - "tuples_deleted": "Tuples Deleted", - "current_locks": "Current Locks", - "lock_type": "Lock Type", - "table_maintenance_title": "Table Maintenance Statistics", - "live_tuples": "Live Tuples", - "dead_tuples": "Dead Tuples", - "last_vacuum": "Last Vacuum", - "last_autovacuum": "Last Autovacuum", - "last_analyze": "Last Analyze", - "commits": "Commits", - "rollbacks": "Rollbacks", - "deadlocks": "Deadlocks" - }, - "io": { - "tabs": { - "table_io": "Table I/O", - "index_io": "Index I/O" + "verified_user": "Verified User", + "streamer": "Streamer", + "match_organizer": "Match Organizer", + "tournament_organizer": "Tournament Organizer", + "administrator": "Administrator" + }, + "chat_tab_labels": { + "match": "Match chat", + "team": "Team chat", + "tournament": "Tournament chat", + "organizers": "Organizers chat", + "matchmaking": "Queue chat", + "lobby_default": "Lobby", + "organizers_default": "Organizers" + }, + "chat_room_subtitles": { + "organizers": "Global Lobby", + "tournament": "Tournament Chat", + "matchmaking": "Queue Chat", + "match": "Match Chat", + "team": "Team Chat" + }, + "latency_status": { + "measuring": "Measuring...", + "excellent": "Excellent", + "good": "Good", + "fair": "Fair", + "poor": "Poor" + }, + "chat_page": { + "fallback_title": "Chat", + "not_found": "Chat not found", + "back_to_hub": "Back to hub", + "not_open_title": "This chat is not currently open in your session.", + "not_open_description": "Open it from the hub sidebar first, then pop it out again." + }, + "tournament": { + "admin_label": "Admin", + "round_robin": { + "games_played": "Games Played", + "rounds_won": "Rounds Won", + "rounds_lost": "Rounds Lost", + "matches_remaining": "Matches Remaining" + }, + "team_invite": { + "pending": "Pending" + }, + "results_table": { + "matches": "Matches" + }, + "paused_banner": "This tournament is paused. No new matches will be auto-scheduled.", + "overview": "Overview", + "updated": "Updated Tournament", + "settings": "Settings", + "join": { + "title": "Join Tournament", + "add_self_to_lineup": "Add Self to Lineup", + "team_owner": "Team Owner", + "requirements": "You need at least {count} players to join this tournament" + }, + "tournament_team": { + "remove": "Remove Team" + }, + "add_team": { + "title": "Add Team", + "description": "Invite an existing team or create a new one for this tournament." + }, + "form": { + "create": "Create Tournament", + "description_help": "Create a new tournament for your community", + "name": "Tournament Name", + "description": "Description", + "start": "Start Date", + "update": "Update Tournament", + "discord_notifications": "Discord Notifications", + "discord_notifications_description": "Enable Discord notifications for match status changes in this tournament. When off, only panel notifications are sent.", + "auto_start": { + "label": "Auto Start", + "description": "When enabled, tournament matches are automatically scheduled. When disabled, an organizer must schedule each match manually." + } + }, + "notifications": { + "title": "Discord", + "webhook": "Webhook URL", + "webhook_placeholder": "Leave empty to use global default", + "role_id": "Role ID", + "role_id_placeholder": "Leave empty to use global default", + "role_id_description": "You can add multiple Role IDs separated by commas.", + "statuses_title": "Notify on Status Changes", + "events_title": "Notify on Match Events", + "save": "Save", + "saved": "Notification settings updated", + "save_error": "Failed to save notification settings", + "map_paused": "Map Paused", + "status": { + "PickingPlayers": "Picking Players", + "Scheduled": "Scheduled", + "WaitingForCheckIn": "Waiting for Check-In", + "WaitingForServer": "Waiting for Server", + "Veto": "Veto", + "Live": "Live", + "Finished": "Finished", + "Tie": "Tie", + "Canceled": "Canceled", + "Forfeit": "Forfeit", + "Surrendered": "Surrendered" + } + }, + "voice": { + "title": "Voice Channels", + "description": "Automatically create Discord voice channels for tournament matches. Players are moved to team channels when matches begin.", + "guild_id_placeholder": "Discord Server ID", + "enable_voice": "Enable Voice Channels" + }, + "table": { + "tournament": "Tournament", + "type": "Type", + "teams_joined": "Teams Joined", + "starts": "Starts", + "no_tournaments_found": "No tournaments found" + }, + "stage": { + "stages": "Stages", + "edit": "Edit Stage", + "delete": "Delete Stage", + "edit_title": "Edit Stage", + "confirm_delete": "Delete Stage", + "delete_description": "Are you sure you want to delete this stage?", + "deleted": "Stage deleted", + "delete_failed": "Failed to delete stage", + "group": "Group {group}", + "stage_tab": "Stage {stage}", + "min_teams": "Minimum Teams", + "min_teams_placeholder": "Select minimum teams...", + "max_teams": "Maximum Teams", + "max_teams_placeholder": "Select maximum teams...", + "update": "Update Stage", + "create": "Create Stage", + "add_another": "Add Another Stage", + "not_setup": "Tournament stages not set up", + "groups": "Groups", + "groups_placeholder": "Enter number of groups for this stage...", + "match_options": "Match Options", + "default_best_of": "Default Best Of", + "default_best_of_description": "The default match format used for all rounds in this stage.", + "per_round_best_of": "Per-Round Best Of", + "third_place_match": "Enable 3rd Place Match", + "third_place_match_description": "Create a 3rd place match between the two semifinal losers.", + "decider_best_of": "3rd Place Decider", + "advanced_settings": "Advanced Stage Settings" + }, + "bracket": { + "schedule_title": "Schedule Match", + "currently_scheduled": "Currently scheduled", + "save_schedule": "Save Schedule", + "clear_schedule": "Clear", + "past_time_error": "Scheduled time must be in the future" + }, + "match": { + "team_1": "Team 1", + "team_2": "Team 2", + "round_match": "{prefix} Round {round} Match {match}", + "bye_round": "Bye Round", + "scheduled_for": "Scheduled for", + "upper_bracket": "Upper Bracket", + "lower_bracket": "Lower Bracket", + "winner_of": "Winner of", + "loser_of": "Loser of", + "winner_arrow": "Winner →", + "loser_arrow": "Loser →", + "winner_bracket_arrow": "Winner Bracket →", + "round_match_ref": "Round {round}, Match {match}", + "round_ref": "Round {round}", + "wb_round_match_ref": "WB Round {round}, Match {match}", + "wb_round_ref": "WB Round {round}", + "lb_round_match_ref": "LB Round {round}, Match {match}", + "lb_round_ref": "LB Round {round}", + "winner": "Winner", + "loser": "Loser", + "round_match_compact": "R{round}M{match}", + "round_compact": "R{round}", + "wb_round_match_compact": "WB R{round}M{match}", + "wb_round_compact": "WB R{round}", + "lb_round_match_compact": "LB R{round}M{match}", + "lb_round_compact": "LB R{round}", + "third_place_decider": "3rd Place Decider" + }, + "round_labels": { + "round": "Round {number}", + "opening_round": "Opening Round", + "quarter_finals": "Quarter Finals", + "semi_finals": "Semi Finals", + "final": "Final", + "grand_final": "Grand Final", + "wb_round": "WB Round {number}", + "wb_opening_round": "WB Opening Round", + "wb_quarter_finals": "WB Quarter Finals", + "wb_semi_finals": "WB Semi Finals", + "wb_final": "WB Final", + "lb_round": "LB Round {number}", + "lb_final": "LB Final", + "winner": "Winner", + "advances_to_next_stage": "Advances to Next Stage", + "regular_rounds": "Regular Rounds", + "advancement_matches": "Advancement Matches", + "elimination_matches": "Elimination Matches" + }, + "standings": { + "title": "Standings" + }, + "results": { + "title": "Results" + }, + "organizer": { + "title": "Tournament Organizers", + "description": "Manage tournament organizers", + "add": "Add Organizer", + "no_organizers": "No Organizers", + "no_organizers_description": "No organizers have been added to this tournament yet", + "remove": "Remove Organizer", + "confirm_remove": "Are you sure you want to remove this organizer?", + "remove_description": "This will remove the organizer from the tournament", + "organized_by": "Organized by" + }, + "team": { + "eligible": "Eligible", + "not_eligible": "Need {count} more players", + "leave_tournament": "Leave Tournament", + "leave_team": "Leave Team", + "slot": "Slot {number}", + "add_player": "Add Player", + "pending_invites": "Pending Invites", + "new": "Create New Team", + "select": "Select Existing Team", + "select_role": "Select Role", + "no_roles": "No Roles Available", + "remove_member": "Remove Member", + "confirm_remove_member": "Are you sure you want to remove this member?", + "remove_member_description": "This will remove the member from the tournament team", + "cancel_invite": "Cancel Invite", + "confirm_cancel_invite": "Are you sure you want to cancel this invite?", + "cancel_invite_description": "This will cancel the invite for this member", + "seed_label": "Seed", + "seed_display": "Seed #{seed}" }, - "table_io_stats": "Table I/O Statistics", - "index_io_stats": "Index I/O Statistics", - "no_table_stats": "No table I/O statistics available", - "no_index_io_stats": "No index I/O statistics available", - "heap_hits": "Heap Hits", - "heap_reads": "Heap Reads", - "index_hits": "Index Hits", - "index_reads": "Index Reads", - "blocks_hit": "Blocks Hit", - "blocks_read": "Blocks Read", - "cache_hit_pct": "Cache Hit %" - }, - "index_usage": { - "title": "Index Usage Statistics", - "schema": "Schema", - "table": "Table", - "index": "Index", - "index_scans": "Index Scans", - "tuples_read": "Tuples Read", - "tuples_fetched": "Tuples Fetched", - "index_size": "Index Size", - "table_size": "Table Size", - "size_ratio": "% of Table", - "no_stats": "No index usage statistics available" - }, - "storage": { - "overview": "Storage Overview", - "total_database_size": "Total Database Size", - "total_table_size": "Total Table Size", - "total_indexes_size": "Total Index Size", - "reclaimable_space": "Reclaimable Space", - "from_dead_tuples": "From dead tuples", - "table_sizes": "Table Storage Details", - "schema": "Schema", - "table": "Table", - "total_size": "Total Size", - "table_size": "Table Size", - "indexes_size": "Indexes", - "live_tuples": "Live Tuples", - "dead_tuples": "Dead Tuples", - "dead_tuple_size": "Dead Tuple Size", - "no_tables": "No table storage information available" - }, - "timescale": { - "no_data_title": "No TimescaleDB Data", - "no_data_description": "TimescaleDB extension is not installed or no hypertables are configured.", - "no_jobs": "No background jobs configured", - "total_chunks": "Total Chunks", - "background_jobs": "Background Jobs", - "hypertable_name": "Hypertable Name", - "hypertables": "Hypertables", - "hypertable": "Hypertable", - "chunks": "Chunks", - "compression": "Compression", - "job_id": "Job ID", - "job_type": "Job Type", - "last_run_status": "Last Run Status", - "next_start": "Next Start", - "not_run": "Not run", - "not_scheduled": "Not scheduled" - }, - "backups": { - "no_backups": "No database backups available" - }, - "query_detail": { - "title": "Query Details", - "query": "Query", - "copy": "Copy", - "query_copied": "Query copied to clipboard", - "plan_copied": "Execution plan copied to clipboard", - "copy_failed": "Failed to copy to clipboard", - "statistics": "Statistics", - "calls": "Calls", - "avg_time": "Avg Time", - "max_time": "Max Time", - "total_rows": "Total Rows", - "execution_times": "Execution Times (ms)", - "min": "Min", - "mean": "Mean", - "max": "Max", - "std_dev": "Std Dev", - "buffer_stats": "Buffer Statistics", - "shared_blocks_hit": "Shared Blocks Hit", - "shared_blocks_read": "Shared Blocks Read", - "cache_hit_ratio": "Cache Hit Ratio", - "local_blocks_hit": "Local Blocks Hit", - "local_blocks_read": "Local Blocks Read", - "temp_blocks_written": "Temp Blocks Written", - "execution_plan": "Execution Plan", - "no_explain_plan": "EXPLAIN plan could not be generated for this query", - "not_found": "Query details not found" - } - } - }, - "custom_match": { - "description": "Build your own match with custom rules, maps, and lineups" - }, - "layouts": { - "account_settings": { - "title": "Account Settings", - "description": "Manage your account settings and preferences", - "select_section": "Select section" - }, - "application_settings": { - "title": "Application Settings", - "description": "Settings that effect the application.", - "select_section": "Select section", - "branding_nav": "Branding", - "fixtures_nav": "Fixtures", - "seasons_nav": "Seasons", - "groups": { - "platform": "Platform", - "competition": "Competition", - "match_setup": "Match Setup", - "content_media": "Content & Media", - "integrations": "Integrations", - "infrastructure": "Infrastructure", - "theme": "Appearance", - "developer": "Developer" - } - }, - "system_update": { - "title": "System Update Available", - "description": "The following services have updates:", - "note": "Please note: It will take a few minutes to process and verify the new updates.", - "fix_link": "If a system upgrade persists, you may need to fix your versions", - "updating": "System is Updating", - "panel_update": "Your panel is out of date, pull and run the update script" - }, - "match_lobby": { - "versus": "VS" - }, - "notifications": { - "title": "Notifications", - "dismiss": "Dismiss", - "dismiss_all": "Dismiss All", - "delete_all_read": "Delete All Read", - "review_orphaned_uploads": "Review orphaned uploads", - "no_notifications_title": "No notifications", - "no_notifications": "No notifications at the moment.", - "toast": { - "draft_invite": "Draft Invite", - "team_invite": "Team Invite", - "tournament_invite": "Tournament Invite", - "lobby_invite": "Lobby Invite", - "friend_request": "Friend Request", - "invited_you": "invited you to", - "invited_party": "invited you to their party", - "wants_to_be_friends": "wants to be friends" - } - }, - "app_nav": { - "brand": "5stack", - "systems_online": "{count} System Online | {count} Systems Online", - "navigation": { - "dashboard": "My Stats", - "play": "Play", - "watch": "Watch", - "tournaments": "Tournaments", - "public_servers": "Public Servers", - "players": "Players", - "teams": "Teams", - "scrims": "Scrim Finder", - "leaderboard": "Leaderboard", - "search": "Search", - "highlights": "Highlights", - "news": "News", - "leagues": "League" - }, - "community": { - "title": "Community" - }, - "social": { - "title": "Social" - }, - "administration": { - "title": "Administration", - "regions": "Regions", - "servers": "Servers", - "dedicated_servers": "Dedicated Servers", - "game_server_nodes": "Game Server Nodes", - "gpu_nodes": "GPU Nodes", - "app_settings": "App Settings", - "alerts": "Alerts", - "seasons": "Seasons", - "manage_matches": "Manage Matches", - "manage_tournaments": "Manage Tournaments", - "manage_league": "Manage League", - "stream_deck": "Stream Deck" - }, - "system": { - "title": "System", - "logs": "Logs", - "database": "Database", - "metrics": "Metrics", - "render_queue": "Render Queue" - }, - "profile": { - "my_account": "My Settings", - "logout": "Logout" - }, - "footer": { - "report_issue": "Report an Issue", - "join_discord": "Join our Discord" - }, - "tooltips": { - "dashboard": "My Stats", - "play": "Play", - "watch": "Watch", - "tournaments": "Tournaments", - "players": "Players", - "teams": "Teams", - "leaderboard": "Leaderboard", - "news": "News", - "public_servers": "Public Servers", - "regions": "Regions", - "servers": "Servers", - "dedicated_servers": "Dedicated Servers", - "game_server_nodes": "Game Server Nodes", - "gpu_nodes": "GPU Nodes", - "system_logs": "System Logs", - "database": "Database", - "system_metrics": "System Metrics", - "app_settings": "App Settings", - "alerts": "Manage site-wide alert banners", - "report_issue": "Report an Issue", - "join_discord": "Join our Discord", - "manage_matches": "Manage Matches", - "manage_tournaments": "Manage Tournaments", - "manage_league": "Manage League", - "search_players": "Search Players", - "leagues": "League" - }, - "logout_dialog": { - "title": "Logout", - "description": "Are you sure you want to logout?", - "confirm": "Logout" - } + "teams": { + "count": "{count} Teams", + "my_teams": "My Team" + }, + "actions": { + "open_registration": "Open Registration", + "close_registration": "Close Registration", + "start": "Start Tournament", + "cancel": "Cancel Tournament", + "delete": "Delete Tournament", + "confirm_delete": "Delete Tournament", + "delete_description": "Are you sure you want to delete this tournament? This action cannot be undone.", + "deleted": "Tournament Deleted", + "delete_failed": "Failed to delete tournament", + "pause": "Pause Tournament", + "resume": "Resume Tournament", + "reset_to_setup": "Reset to Setup", + "confirm_pause": "Pause Tournament", + "pause_description": "Are you sure you want to pause this tournament? No new matches will be auto-scheduled until it's resumed.", + "resume_description": "Are you sure you want to resume this tournament? All pending matches will be scheduled immediately.", + "update_status_failed": "Failed to update tournament status" + }, + "server": { + "remove": "Remove Server", + "confirm_remove": "Are you sure you want to remove this server?", + "remove_description": "This will remove the server from the tournament" + } }, - "top_nav": { - "home": "My Stats", - "play_menu": "Play", - "community_menu": "Community", - "watch_menu": "Watch", - "login": "Login to Play", - "login_aria": "Sign in through Steam", - "authorize": "AUTHORIZE", - "secure_access": "/ SECURE ACCESS", - "play": { - "find_match": "Find a Match", - "tournaments": "Tournaments", - "leagues": "League", - "scrim_finder": "Scrim Finder", - "public_servers": "Public Servers", + "team": { "hero": { - "title": "Play & Compete", - "subtitle": "Join matches, tournaments.", - "primary": "PRIMARY" + "roster": "Roster", + "matches": "Matches" }, - "operations": "OPERATIONS" - }, - "community": { - "watch": { - "title": "Watch", - "subtitle": "Watch matches, tournaments" - }, - "players": { - "title": "Players", - "subtitle": "Browse and search for players" - }, - "teams": { - "title": "Teams", - "subtitle": "Find and manage teams" - }, - "leaderboard": { - "title": "Leaderboard", - "subtitle": "Top players and rankings" + "table": { + "team": "Team" }, - "social": { - "title": "Social", - "join_discord": { - "title": "Join our Discord", - "subtitle": "Chat, support, and announcements" - } + "invite": { + "team_title": "Team Invite", + "tournament_title": "Tournament Invite", + "tournament_message": "You have been invited to join a tournament", + "team_message": "You have been invited to join a team", + "invited_by": "Invited by", + "deny": "Deny", + "accept": "Accept" }, - "roster": "ROSTER", - "highlights": { - "title": "Highlights", - "subtitle": "Clips from across the platform" - }, - "news": { - "title": "News", - "subtitle": "{brand} news" + "roles": { + "captain": "Captain" + }, + "leave": "Leave Team", + "management": { + "edit": "Edit Team" + }, + "confirm": { + "leave": "Are you sure you want to leave this team?", + "delete": { + "title": "Delete Team", + "description": "Are you sure you want to delete this team? This action cannot be undone." + } + }, + "members": { + "title": "Team Members", + "role": "Role", + "starters": "Starters", + "bench": "Bench", + "substitutes": "Substitutes", + "invite_player": "Invite Player", + "pending_invites": "Pending Invites" + }, + "form": { + "identity": "Identity", + "name_placeholder": "Enter team name...", + "short_name": "Short Name", + "short_name_placeholder": "Enter short name (max 3 characters)...", + "owner": "Team Owner", + "select_owner": "Select team owner...", + "update": "Update Team", + "create": "Create Team" + }, + "roster_count_players": "players", + "search": { + "found_teams": "{count} teams found", + "placeholder": "Search for a team...", + "my_teams_only": "My Teams Only", + "no_teams_found": "No teams found", + "owner": "Owner", + "captain": "Captain", + "ineligible_short": "Locked", + "tournament_join_requires_owner_or_captain": "You can only join a tournament with teams where you are the owner or captain." + }, + "member": { + "coach": "Coach", + "starter": "Starter", + "benched": "Benched", + "substitute": "Substitute", + "remove": "Remove Member", + "cancel_invite": "Cancel Invite", + "confirm_cancel_invite": "Are you sure you want to cancel this invite?", + "confirm_remove": "Are you sure you want to remove this member?", + "cancel_invite_description": "This will cancel the invite for this member", + "remove_description": "This will remove the member from the team" } - } - }, - "hub": { - "social": "Social", - "notifications": "Notifications", - "lobby": "Lobby" - }, - "lobby_panel": { - "lobby_invites": "Lobby Invites", - "your_squad": "Your Squad", - "squad_description": "Organize your team, send invites, and prepare for voice / Discord comms.", - "create_lobby_description": "Create a lobby to invite friends and queue together.", - "create_lobby_button": "Create Lobby", - "voice_discord": "Voice & Discord", - "discord_linked": "Discord Linked", - "link_discord": "Link Discord", - "find_match": "Find a Match" - }, - "chat_panel": { - "default_title": "Chat", - "participants_in_chat": "{count} in chat", - "pop_out_tooltip": "Pop out to window", - "no_chats_title": "No chats yet", - "no_chats_description": "Once you join a chat, it will appear here." - }, - "recent_games": { - "title": "Recent Games", - "last_matches": "Last {count} matches", - "performance": "Performance", - "draws_label": "Draws", - "most_played_maps": "Most Played Maps", - "no_maps": "Maps will appear here as you play.", - "no_recent_matches_title": "No recent matches", - "no_recent_matches_description": "Once you play some games, they will appear here." - }, - "public_header": { - "secure_channel": "SECURE CHANNEL" - } - }, - "alt_text": { - "steam_login": "Steam login", - "discord": "Discord", - "map_poster": "Map poster", - "map_patch": "Map patch" - }, - "pwa": { - "install": { - "title": "Add to Home Screen", - "description": "This website offers app-like features. Add it to your home screen for easy access.", - "step1": "Press the 'Share' button", - "step2": "Select 'Add to Home Screen'", - "tooltip": "Install App", - "button": "Install App" - } - }, - "roster_picker": { - "add_starter": "Add starter", - "add_substitute": "Add substitute", - "search": "Search players…", - "none": "No players available" - }, - "common": { - "manage_custom_plugins_and_shared_files": "These files are moutned to `csgo` directory when the server is started.", - "any": "Any", - "remove": "Remove", - "edit": "Edit", - "view": "View", - "done": "Done", - "accept": "Accept", - "decline": "Decline", - "previous": "Previous", - "next": "Next", - "back": "Back", - "delete": "Delete", - "clear": "Clear", - "cancel": "Cancel", - "save": "Save", - "reset": "Reset", - "copy": "Copy", - "update": "Update", - "discard": "Discard", - "save_changes": "Save changes", - "save_bar": { - "unsaved_changes": "Unsaved changes", - "review_and_save": "Review your edits, then save", - "has_errors": "Invalid settings", - "resolve_errors": "Fix the highlighted fields to save" - }, - "error": "Error", - "enabled": "Enabled", - "all": "All", - "tbd": "TBD", - "team_a": "Team A", - "team_b": "Team B", - "team_1": "Team 1", - "team_2": "Team 2", - "unknown": "Unknown", - "untitled": "Untitled", - "na": "N/A", - "clip": "Clip", - "vs": "vs", - "or": "or", - "yes": "Yes", - "no": "No", - "more": "More", - "columns": "Columns", - "none": "None", - "failed": "Failed", - "disabled": "Disabled", - "online": "Online", - "offline": "Offline", - "degraded": "Degraded", - "never": "Never", - "live": "Live", - "finished": "Finished", - "scheduled": "Scheduled", - "show_metrics": "Show metrics", - "hide_metrics": "Hide metrics", - "connected": "Connected", - "disconnected": "Disconnected", - "system": "System", - "hide_details": "Hide details", - "show_details": "Show details", - "enter_fullscreen": "Enter Fullscreen", - "exit_fullscreen": "Exit Fullscreen", - "download": "Download", - "upload": "Upload", - "sort_ascending": "Sort ascending", - "sort_descending": "Sort descending", - "see_all": "See all", - "standby_no_activity": "STANDBY · NO ACTIVITY", - "players": "players", - "duration": "Duration", - "your_schedule": "Your Schedule", - "your_schedule_description": "Matches and tournaments you're currently part of.", - "highlights": "HIGHLIGHTS", - "boolean": { - "yes": "Yes", - "no": "No" - }, - "are_you_sure": "Are you sure you want to run this command?", - "are_you_sure_short": "Are you sure?", - "no_tables_found": "No tables found", - "actions": { - "edit": "Edit", - "delete": "Delete" - }, - "actions_label": "Actions", - "close": "Close", - "confirm": "Confirm", - "refresh": "Refresh", - "create": "Create", - "rename": "Rename", - "creating": "Creating...", - "saving": "Saving...", - "loading": "Loading...", - "undo": "Undo", - "redo": "Redo", - "name": "Name", - "description": "Description", - "status": "Status", - "region": "Region", - "filters": "Filters", - "options": "Options", - "date": "Date", - "reset_filters": "Reset Filters", - "player": "Player", - "plugin_version": "Plugin Version", - "pick_date": "Pick a date", - "team_name": "Team Name", - "coaches": "Coaches", - "map_veto": "Map Veto", - "round": "Round {number}", - "stats": { - "wins": "Wins", - "losses": "Losses", - "kills": "Kills", - "deaths": "Deaths", - "assists": "Assists", - "win_rate": "Win Rate" - } - }, - "spotlight_search": { - "placeholder": "Search players...", - "searching": "Searching...", - "no_players_found": "No players found", - "start_typing": "Start typing to search players" - }, - "file_manager_store": { - "load_directory_failed": "Failed to load directory", - "read_file_failed": "Failed to read file", - "create_directory_failed": "Failed to create directory", - "delete_item_failed": "Failed to delete item", - "rename_item_failed": "Failed to rename item", - "move_item_failed": "Failed to move item", - "save_file_failed": "Failed to save file", - "network_error": "Network error", - "upload_cancelled": "Upload cancelled" - }, - "file_manager": { - "location": "Location", - "dedicated_server_files": "Dedicated Server Files", - "game_server_node_files": "Game Server Node Files", - "loading_server_info": "Loading server information...", - "create_directory": { - "title": "Create New Directory", - "description": "Enter a name for the new directory", - "label": "Directory Name", - "placeholder": "my-directory" - }, - "create_file": { - "title": "Create New File", - "description": "Enter a name for the new file", - "label": "File Name", - "placeholder": "my-file.txt", - "failed": "Failed to create file" - }, - "delete_confirm": { - "title_file": "Delete File", - "title_directory": "Delete Directory", - "description_file": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", - "description_directory": "Are you sure you want to delete \"{name}\"? All contents will be permanently deleted." - }, - "rename": { - "title_file": "Rename File", - "title_directory": "Rename Directory", - "description": "Enter a new name for \"{name}\"", - "label": "New Name" - }, - "editor": { - "title": "Edit File: {path}", - "description": "Make changes to the file content", - "loading": "Loading file...", - "save_success": "File saved successfully!", - "load_failed": "Failed to load file", - "save_failed": "Failed to save file", - "unsaved_close": "You have unsaved changes. Are you sure you want to close?" - }, - "upload": { - "title": "Upload Files", - "description": "Select files to upload to the current directory", - "drag_drop": "Drag and drop files here or click to browse", - "max_size": "Maximum file size: 100MB", - "uploading": "Uploading files...", - "complete": "Upload complete", - "complete_with_errors": "Upload complete with errors", - "files_failed": "{count} file(s) failed to upload" - }, - "toolbar": { - "new_file": "New File", - "new_folder": "New Folder", - "upload_files": "Upload Files", - "refresh": "Refresh" - }, - "tree": { - "folder_name_placeholder": "folder name", - "file_name_placeholder": "file name", - "drop_hint": "Drop files here or right-click to create", - "files": "files", - "current": "Current" - }, - "details_panel": { - "menu_file_label": "File", - "menu_edit_label": "Edit", - "menu_view_label": "View", - "no_file_open_title": "No file open", - "no_file_open_description": "Select a file from the browser to edit", - "close": "Close", - "close_all": "Close All", - "enable_word_wrap": "Enable Word Wrap", - "disable_word_wrap": "Disable Word Wrap", - "show_minimap": "Show Minimap", - "hide_minimap": "Hide Minimap", - "no_file_open": "No file open", - "unsaved_changes": "You have unsaved changes. Are you sure you want to close?", - "unsaved_changes_all": "You have unsaved changes. Are you sure you want to close all files?" - }, - "tabs": { - "unsaved_changes_warning": "You have unsaved changes in other files. Are you sure you want to close them?", - "unsaved_changes_right_warning": "You have unsaved changes in files to the right. Are you sure you want to close them?", - "unsaved_changes_left_warning": "You have unsaved changes in files to the left. Are you sure you want to close them?" - } - }, - "error": { - "generic": "An error occurred. Please try again." - }, - "roles": { - "user": "User", - "verified_user": "Verified User", - "streamer": "Streamer", - "moderator": "Moderator", - "match_organizer": "Match Organizer", - "tournament_organizer": "Tournament Organizer", - "administrator": "Administrator" - }, - "chat_tab_labels": { - "match": "Match chat", - "team": "Team chat", - "tournament": "Tournament chat", - "organizers": "Organizers chat", - "matchmaking": "Queue chat", - "lobby_default": "Lobby", - "organizers_default": "Organizers" - }, - "chat_room_subtitles": { - "organizers": "Global Lobby", - "tournament": "Tournament Chat", - "matchmaking": "Queue Chat", - "match": "Match Chat", - "team": "Team Chat" - }, - "latency_status": { - "measuring": "Measuring...", - "excellent": "Excellent", - "good": "Good", - "fair": "Fair", - "poor": "Poor" - }, - "chat_page": { - "fallback_title": "Chat", - "not_found": "Chat not found", - "back_to_hub": "Back to hub", - "not_open_title": "This chat is not currently open in your session.", - "not_open_description": "Open it from the hub sidebar first, then pop it out again." - }, - "tournament": { - "admin_label": "Admin", - "team_invite": { - "pending": "Pending" - }, - "results_table": { - "matches": "Matches" - }, - "final_standings_podium": "▚ FINAL STANDINGS · PODIUM", - "page": { - "tournament_eyebrow": "Tournament", - "back_to_league": "Back to League", - "view_match_options": "View match options", - "match_options_tab": "Match Options", - "organizers_tab": "Organizers", - "my_team": "My Team", - "my_team_hint": "Manage your roster, invites, and readiness for this tournament.", - "roster_section": "Roster", - "no_teams_yet": "No teams yet." - }, - "feature_card": { - "tournament": "Tournament", - "teams": "Teams", - "stages": "Stages", - "default_label": "Tournament" - }, - "results_section": { - "no_data": "NO DATA", - "mvp": "MOST VALUABLE PLAYER", - "no_matches_played": "No matches played yet" - }, - "swiss": { - "advanced": "ADVANCED", - "eliminated": "ELIMINATED", - "final_results": "Final Results" - }, - "standings_section": { - "no_roster": "NO ROSTER" - }, - "trophies_config": { - "title": "Trophy Configuration", - "organizer_access_required": "ORGANIZER ACCESS REQUIRED", - "award_trophies": "AWARD TROPHIES", - "custom": "CUSTOM", - "custom_image": "Custom Image", - "custom_name": "Custom Name", - "silhouette": "Silhouette", - "reset": "Reset", - "remove_image_hint": "Remove image to customize name or silhouette" - }, - "trophies_manage": { - "manual_awards": "Manual Awards", - "add_award": "Add Award", - "no_manual_awards": "NO MANUAL AWARDS", - "remove": "Remove" - }, - "compact_card": { - "tournament": "Tournament", - "live": "Live", - "ended": "Ended", - "starts": "Starts", - "teams": "Teams", - "champion": "Champion", - "second": "2nd", - "third": "3rd", - "player_finished": "Player finished {rank}" - }, - "recent": { - "see_all": "See all", - "standby_no_tournaments": "STANDBY · NO TOURNAMENTS" - }, - "paused_banner": "This tournament is paused. No new matches will be auto-scheduled.", - "overview": "Overview", - "updated": "Updated Tournament", - "settings": "Settings", - "join": { - "title": "Join Tournament", - "add_self_to_lineup": "Add Self to Lineup", - "team_owner": "Team Owner", - "requirements": "You need at least {count} players to join this tournament", - "roster_range": "Lineup ({selected} selected · up to {max} players)", - "group": { - "starters": "Starters", - "substitutes": "Substitutes", - "benched": "Benched" - }, - "already_rostered": "On another team", - "min_lineup_warning": "Select at least {min} players to register." - }, - "tournament_team": { - "remove": "Remove Team", - "confirm_remove": "Are you sure you want to remove {name} from this tournament? This cannot be undone." - }, - "add_team": { - "title": "Add Team", - "description": "Invite an existing team or create a new one for this tournament." - }, - "form": { - "create": "Create Tournament", - "name": "Tournament Name", - "description": "Description", - "start": "Start Date", - "discord_notifications": "Discord Notifications", - "discord_notifications_description": "Enable Discord notifications for match status changes in this tournament. When off, only panel notifications are sent.", - "auto_start": { - "label": "Auto Start", - "description": "When enabled, tournament matches are automatically scheduled. When disabled, an organizer must schedule each match manually." - }, - "negotiated_scheduling": { - "label": "Negotiated Scheduling", - "description": "Team captains propose and agree on match times (with optional per-stage windows), instead of matches starting automatically." - }, - "create_bar": { - "ready": "Ready to create", - "ready_hint": "Everything looks good — create your tournament", - "incomplete": "Required fields missing", - "incomplete_hint": "Fill in the tournament name and start date to continue" - } - }, - "notifications": { - "title": "Discord", - "webhook": "Webhook URL", - "webhook_placeholder": "Leave empty to use global default", - "role_id": "Role ID", - "role_id_placeholder": "Leave empty to use global default", - "role_id_description": "You can add multiple Role IDs separated by commas.", - "save": "Save", - "saved": "Notification settings updated", - "save_error": "Failed to save notification settings", - "map_paused": "Map Paused", - "status": { - "PickingPlayers": "Picking Players", - "Scheduled": "Scheduled", - "WaitingForCheckIn": "Waiting for Check-In", - "WaitingForServer": "Waiting for Server", - "Veto": "Veto", - "Live": "Live", - "Finished": "Finished", - "Tie": "Tie", - "Canceled": "Canceled", - "Forfeit": "Forfeit", - "Surrendered": "Surrendered" - } - }, - "voice": { - "title": "Voice Channels", - "description": "Automatically create Discord voice channels for tournament matches. Players are moved to team channels when matches begin.", - "guild_id_placeholder": "Discord Server ID", - "enable_voice": "Enable Voice Channels" - }, - "table": { - "tournament": "Tournament", - "type": "Type", - "teams_joined": "Teams Joined", - "starts": "Starts", - "no_tournaments_found": "No tournaments found", - "maps_label": "Maps:" - }, - "stage": { - "title": "Stage", - "stages": "Stages", - "edit": "Edit Stage", - "delete": "Delete Stage", - "edit_title": "Edit Stage", - "confirm_delete": "Delete Stage", - "delete_description": "Are you sure you want to delete this stage?", - "deleted": "Stage deleted", - "delete_failed": "Failed to delete stage", - "group": "Group {group}", - "no_standings": "No standings yet", - "stage_tab": "Stage {stage}", - "min_teams": "Minimum Teams", - "min_teams_placeholder": "Select minimum teams...", - "max_teams": "Maximum Teams", - "max_teams_placeholder": "Select maximum teams...", - "max_rounds": "Max Rounds (optional)", - "max_rounds_placeholder": "Leave blank for a full round robin", - "max_rounds_description": "Cap the round robin at this many rounds; each team plays that many distinct opponents. Leave blank to play everyone.", - "swiss_no_elimination": "Swiss group (no elimination)", - "swiss_no_elimination_description": "Pair by record each round but never eliminate — every team plays a fixed number of rounds and is ranked in one table (ESEA-style). Off = Valve Swiss (advance at 3 wins / out at 3 losses).", - "swiss_rounds": "Rounds", - "swiss_rounds_placeholder": "Number of Swiss rounds", - "swiss_rounds_description": "How many rounds the Swiss group plays.", - "create": "Create Stage", - "add_another": "Add Another Stage", - "not_setup": "Tournament stages not set up", - "groups": "Groups", - "groups_placeholder": "Enter number of groups for this stage...", - "default_best_of": "Default Best Of", - "default_best_of_description": "The default match format used for all rounds in this stage.", - "per_round_best_of": "Per-Round Best Of", - "third_place_match": "Enable 3rd Place Match", - "third_place_match_description": "Create a 3rd place match between the two semifinal losers.", - "decider_best_of": "3rd Place Decider", - "advanced_settings": "Advanced Stage Settings", - "teams_count": "{count} teams" - }, - "bracket": { - "schedule_title": "Schedule Match", - "currently_scheduled": "Currently scheduled", - "save_schedule": "Save Schedule", - "clear_schedule": "Clear", - "past_time_error": "Scheduled time must be in the future", - "fit_to_view": "Fit to view", - "share_title": "Share Bracket", - "share_description": "Share or embed this bracket on event sites and screens.", - "share_link": "Direct link", - "share_embed": "Embed code", - "share_specific_stage": "Specific stage", - "share_specific_stage_help": "Always shows this exact stage.", - "share_current_stage": "Current stage", - "share_current_stage_help": "Auto-advances to whichever stage is live; falls back to the latest.", - "share_cycle_all": "Cycle all stages", - "share_cycle_all_help": "Rotates through every stage on a timer. In double-elimination it alternates winner/loser brackets too.", - "share_cycle_interval": "Cycle interval (seconds)", - "share_open": "Open", - "share_copy": "Copy", - "share_copied": "Copied!", - "share_button": "Share", - "popout_button": "Popout", - "view_split": "Split view", - "view_scroll": "Page scroll", - "hide_finished": "Hide finished rounds", - "focus_upper": "Focus on Upper Bracket", - "focus_lower": "Focus on Lower Bracket", - "restore_split": "Restore split view", - "click_to_expand": "click to expand", - "expand_button": "Expand", - "divider_hint": "Drag to resize · double-click to reset", - "embed_current_label": "LIVE", - "embed_winner_label": "Upper Bracket", - "embed_loser_label": "Lower Bracket", - "embed_no_stage": "No active stage.", - "zoom_fit": "Fit" }, "match": { - "reset_winner": "Reset winner", - "reset_warning": "Changing this result can delete downstream matches in the bracket", - "winner_after_reset": "Winner after reset", - "scheduled_at": "Scheduled at", - "continue": "Continue", - "reset_chain_warning": "This will reset the selected bracket chain and can remove already played downstream matches. Use this only for tournament admin corrections.", - "final_confirmation_required": "Final confirmation required", - "confirm_reset": "Confirm reset", - "team_1": "Team 1", - "team_2": "Team 2", - "round_match": "{prefix} Round {round} Match {match}", - "bye_round": "Bye Round", - "scheduled_for": "Scheduled for", - "upper_bracket": "Upper Bracket", - "lower_bracket": "Lower Bracket", - "winner_of": "Winner of", - "loser_of": "Loser of", - "winner_arrow": "Winner →", - "loser_arrow": "Loser →", - "winner_bracket_arrow": "Winner Bracket →", - "round_match_ref": "Round {round}, Match {match}", - "round_ref": "Round {round}", - "wb_round_match_ref": "WB Round {round}, Match {match}", - "wb_round_ref": "WB Round {round}", - "lb_round_match_ref": "LB Round {round}, Match {match}", - "lb_round_ref": "LB Round {round}", - "winner": "Winner", - "loser": "Loser", - "round_match_compact": "R{round}M{match}", - "round_compact": "R{round}", - "wb_round_match_compact": "WB R{round}M{match}", - "wb_round_compact": "WB R{round}", - "lb_round_match_compact": "LB R{round}M{match}", - "lb_round_compact": "LB R{round}", - "third_place_decider": "3rd Place Decider", - "reset_title": "Reset tournament match winner?", - "affected_chain_preview": "Affected match chain preview:", - "delete_recreate": "Delete & recreate", - "reset_only": "Reset only", - "no_affected_chain": "No affected bracket chain was returned.", - "no_winner_reset": "No winner (reset to setup)", - "winner_cleared_hint": "The winner will be cleared. Add a time to keep this match Scheduled, or leave it empty to move it to Waiting for Check-In.", - "winner_reassigned_hint": "The winner will be reassigned to the lineup you select.", - "scheduled_optional_hint": "Optional. Set a time if you want this match to remain Scheduled.", - "remove_downstream_ack": "I understand this can remove already played downstream matches.", - "review_chain_hint": "Review the affected chain above before continuing.", - "irreversible_action": "Irreversible action", - "confirm_reset_chain_ack": "I confirm I want to reset this tournament match chain." - }, - "round_labels": { - "round": "Round {number}", - "opening_round": "Opening Round", - "quarter_finals": "Quarter Finals", - "semi_finals": "Semi Finals", - "final": "Final", - "grand_final": "Grand Final", - "wb_round": "WB Round {number}", - "wb_opening_round": "WB Opening Round", - "wb_quarter_finals": "WB Quarter Finals", - "wb_semi_finals": "WB Semi Finals", - "wb_final": "WB Final", - "lb_round": "LB Round {number}", - "lb_final": "LB Final", - "winner": "Winner", - "advances_to_next_stage": "Advances to Next Stage", - "regular_rounds": "Regular Rounds", - "advancement_matches": "Advancement Matches", - "elimination_matches": "Elimination Matches" - }, - "standings": { - "title": "Standings" - }, - "results": { - "title": "Results" - }, - "organizer": { - "title": "Tournament Organizers", - "description": "Manage tournament organizers", - "add": "Add Organizer", - "no_organizers": "No Organizers", - "no_organizers_description": "No organizers have been added to this tournament yet", - "remove": "Remove Organizer", - "confirm_remove": "Are you sure you want to remove this organizer?", - "remove_description": "This will remove the organizer from the tournament", - "organized_by": "Organized by" - }, - "team": { - "eligible": "Eligible", - "not_eligible": "Need {count} more players", - "leave_tournament": "Leave Tournament", - "leave_team": "Leave Team", - "slot": "Slot {number}", - "add_player": "Add Player", - "pending_invites": "Pending Invites", - "new": "Create New Team", - "select": "Select Existing Team", - "select_role": "Select Role", - "no_roles": "No Roles Available", - "remove_member": "Remove Member", - "confirm_remove_member": "Are you sure you want to remove this member?", - "remove_member_description": "This will remove the member from the tournament team", - "cancel_invite": "Cancel Invite", - "confirm_cancel_invite": "Are you sure you want to cancel this invite?", - "cancel_invite_description": "This will cancel the invite for this member", - "seed_label": "Seed", - "seed_display": "Seed #{seed}" - }, - "teams": { - "count": "{count} Teams", - "my_teams": "My Team" - }, - "actions": { - "open_registration": "Open Registration", - "close_registration": "Close Registration", - "start": "Start Tournament", - "cancel": "Cancel Tournament", - "delete": "Delete Tournament", - "confirm_delete": "Delete Tournament", - "delete_description": "Are you sure you want to delete this tournament? This action cannot be undone.", - "deleted": "Tournament Deleted", - "delete_failed": "Failed to delete tournament", - "pause": "Pause Tournament", - "resume": "Resume Tournament", - "reset_to_setup": "Reset to Setup", - "confirm_pause": "Pause Tournament", - "pause_description": "Are you sure you want to pause this tournament? No new matches will be auto-scheduled until it's resumed.", - "resume_description": "Are you sure you want to resume this tournament? All pending matches will be scheduled immediately.", - "update_status_failed": "Failed to update tournament status" - }, - "server": { - "remove": "Remove Server", - "confirm_remove": "Are you sure you want to remove this server?", - "remove_description": "This will remove the server from the tournament" - }, - "open_match_actions": "Open match actions" - }, - "team": { - "highlights": { - "subtitle": "Recent clips featuring this team's players.", - "empty": "No highlights yet for this team's players." - }, - "rank_summary": { - "reliable": "{pct}% reliable", - "reputation_title": "{completed} completed · {noShows} no-shows" - }, - "tabs": { - "overview": "Overview", - "stats": "Stats", - "highlights": "Highlights", - "scrim": "Scrim Finder" - }, - "scrim_open_description": "This team is open to scrims — pick a time from their availability and send a challenge.", - "career": { - "title": "Team Performance", - "description": "Lifetime per-player aggregates across every match this team has played.", - "empty_title": "No stats yet", - "empty_description": "This team has no completed matches with recorded stats.", - "matches": "Matches", - "maps_played": "Maps", - "map_win_pct": "Map Win %", - "team_rating": "Avg HLTV Rating", - "player": "Player", - "maps": "Maps", - "rounds": "Rounds", - "rating": "HLTV Rating", - "kpr": "KPR", - "dpr": "DPR", - "kd": "K/D", - "adr": "ADR", - "kast": "KAST" - }, - "hero": { - "roster": "Roster", - "matches": "Matches" - }, - "table": { - "team": "Team", - "no_roster": "No roster yet." - }, - "invite": { - "team_title": "Team Invite", - "tournament_title": "Tournament Invite", - "tournament_message": "You have been invited to join a tournament", - "team_message": "You have been invited to join a team", - "invited_by": "Invited by", - "deny": "Deny", - "accept": "Accept" - }, - "roles": { - "captain": "Captain" - }, - "leave": "Leave Team", - "management": { - "edit": "Edit Team" - }, - "confirm": { - "leave": "Are you sure you want to leave this team?", - "delete": { - "title": "Delete Team", - "description": "Are you sure you want to delete this team? This action cannot be undone." - } - }, - "members": { - "title": "Team Members", - "role": "Role", - "starters": "Starters", - "bench": "Bench", - "substitutes": "Substitutes", - "invite_player": "Invite Player", - "pending_invites": "Pending Invites", - "rank_source": "Rank" - }, - "form": { - "identity": "Identity", - "name_placeholder": "Enter team name...", - "short_name": "Short Name", - "short_name_placeholder": "Enter short name (max 5 characters)...", - "owner": "Team Owner", - "select_owner": "Select team owner...", - "inviting": "Inviting", - "inviting_hint": "These players will be invited when you create the team.", - "create": "Create Team" - }, - "roster_count_players": "players", - "search": { - "found_teams": "{count} teams found", - "placeholder": "Search for a team...", - "my_teams_only": "My Teams Only", - "tournament_winners": "Tournament Winners", - "scrims_only": "Open to Scrims", - "no_teams_found": "No teams found", - "owner": "Owner", - "captain": "Captain", - "ineligible_short": "Locked", - "tournament_join_requires_owner_or_captain": "You can only join a tournament with teams where you are the owner or captain.", - "not_enough_players": "Needs at least {count} players to challenge.", - "selected": "Selected" - }, - "member": { - "coach": "Coach", - "starter": "Starter", - "benched": "Benched", - "substitute": "Substitute", - "remove": "Remove Member", - "cancel_invite": "Cancel Invite", - "confirm_cancel_invite": "Are you sure you want to cancel this invite?", - "confirm_remove": "Are you sure you want to remove this member?", - "cancel_invite_description": "This will cancel the invite for this member", - "remove_description": "This will remove the member from the team", - "roster_image": "Roster image", - "roster_image_description": "Upload a roster image for {name} on this team. Overrides the player's default." - }, - "calendar": { - "subscribe": "Subscribe to Matches", - "link_copied": "Calendar link copied", - "subscription_help": "Subscribe to this URL in your calendar app to see every match this team plays — scrims, league fixtures and tournaments.", - "link_error": "Could not get calendar link" - } - }, - "match": { - "open_match": "Open match", - "picks_label": "Picks", - "full_page": "Full page", - "match_overview": "Match Overview", - "no_multi_kill_rounds": "No {count}-kill rounds found.", - "map_filter_active": "Map Filter Active", - "scoreboard": "Scoreboard", - "maps_not_picked": "Maps not picked yet", - "admin": "Admin", - "round_kills": "Round Kills", - "planting": "PLANTING", - "defusing": "DEFUSING", - "lineups": "Lineups", - "tap_to_unmute": "Tap to unmute", - "auto_director": "Auto director", - "match_scheduled_for": "Match scheduled for {time}.", - "start_now_or_schedule": "Start the match now or schedule it for later.", - "keyboard_shortcuts": "Keyboard shortcuts", - "up_next": "Up Next", - "head_to_head_matrix": { - "damage": "Damage", - "your_weapons": "Your weapons", - "their_weapons": "Their weapons", - "flashes_on_them": "Flashes on them", - "flashes_on_you": "Flashes on you" - }, - "team_stats_heading": "{name} Stats", - "all_maps": "All Maps", - "stream": { - "watch": "Live Stream", - "no_preview": "No preview yet", - "rendering_highlights": "Rendering Highlights", - "expand_preview": "Expand preview", - "watching": "{count} watching", - "rendering_clip": "Rendering clip", - "acquiring_signal": "Acquiring signal", - "signal_lost": "Signal lost", - "idle": "Idle", - "access_denied": "Stream unavailable", - "access_denied_hint": "You don't have access to this live stream — players can't watch a match they're in." - }, - "elo_details": { - "title": "Elo Change Details", - "formula": { - "k_factor_hint": "K-factor — base ELO swing rate before any modifiers.", - "delta_hint": "Δ = actual ({actual}) − expected ({expected}). Positive means you outperformed the team-ELO prediction.", - "perf_hint": "Performance multiplier — scaled by your KDA vs team average and your share of team damage. Bounded 0.8×–1.2× on wins.", - "series_hint": "Series multiplier — net map differential. BO1 = ×1, BO3 sweep = ×2, BO5 sweep = ×3. Closer series move ELO less.", - "result_hint": "Final ELO change after all multipliers, rounded to the nearest integer." - } - }, - "simple": { - "vs": "vs" - }, - "recent": { - "title": "Recent Matches" - }, - "options": { - "allow_coaches": "Allow Coaches", - "group": { - "game_settings": "Game Settings", - "team_settings": "Team Settings", - "veto_settings": "Veto Settings", - "control_settings": "Control Settings" - }, - "filter_maps": "Filter Maps", - "table": { - "no_matches_found": "No Matches Found" - }, - "type": { - "label": "Match Type" - }, - "best_of": { - "label": "Best Of", - "description": "The winner is determined by who wins the majority of a specified number of games", - "placeholder": "Select a best of value", - "option": "Best of {count}" - }, - "map_veto_settings": { - "short_on": "Teams ban and pick maps from the pool.", - "short_off": "Maps are chosen manually below.", - "learn_more": "How veto works", - "custom_pool": "Custom Map Pool", - "active_duty": "Active Duty Map Pool", - "custom_pool_tooltip": "Choosing a custom map pool allows you to select maps outside the current active duty pool" - }, - "advanced": { - "title": "Advanced Settings", - "hide": "Hide", - "show": "Show", - "toggle": "Toggle Advanced Settings", - "overtime": { - "label": "Overtime", - "description": "Each overtime is a best of 6." - }, - "knife_round": { - "label": "Knife Round", - "description": "Knife rounds are only played when neither team picked the map in the veto." - }, - "max_rounds": { - "label": "Max Rounds", - "description": "The number of rounds played before teams switch sides.", - "placeholder": "Select max rounds" - }, - "region": { - "title": "Region Settings", - "lan_match": "LAN Match", - "veto": { - "label": "Veto", - "description": "Allows teams to veto and select the server region." - }, - "preferred": "Preferred Regions", - "placeholder": "Select Region", - "any": "Any", - "description": "Select preferred regions for the match." - }, - "substitutes": { - "label": "Number of Substitutes", - "description": "Adds additional slots to be added to each lineup.", - "range": "Enter value between 0 and 5." - }, - "tv_delay": { - "label": "TV Delay", - "range": "Enter value between 0 and 120." - }, - "timeouts": { - "tactical": { - "label": "Tactical Timeout Settings", - "description": "Tactical Timeouts are called by typing .tac, and are 30 seconds long." - }, - "technical": { - "label": "Technical Timeout Settings", - "description": "Technical timeouts are called by typing .pause, and do not have a time limit." - }, - "options": { - "admins": "Admins", + "team_stats_heading": "{name} Stats", + "elo_details": { + "title": "Elo Change Details", + "elo": "Elo", + "team_elo_avg": "Team Elo Avg", + "performance_multiplier": "Performance Multiplier", + "series_multiplier": "Series Multiplier", + "maps_won_lost": "Maps Won / Lost", + "kills_deaths_assists": "Kills / Deaths / Assists", + "kda_ratio": "Kills + Assits / Deaths Ratio", + "team_avg_kda": "Team Avg Kills + Assits / Deaths Ratio", + "damage": "Damage", + "teams_damage_suffix": "of teams damage", + "formula": { + "k_factor_hint": "K-factor — base ELO swing rate before any modifiers.", + "delta_hint": "Δ = actual ({actual}) − expected ({expected}). Positive means you outperformed the team-ELO prediction.", + "perf_hint": "Performance multiplier — scaled by your KDA vs team average and your share of team damage. Bounded 0.8×–1.2× on wins.", + "series_hint": "Series multiplier — net map differential. BO1 = ×1, BO3 sweep = ×2, BO5 sweep = ×3. Closer series move ELO less.", + "result_hint": "Final ELO change after all multipliers, rounded to the nearest integer." + } + }, + "no_matches": "No Matches Found", + "no_matches_description": "There are currently no matches available.", + "simple": { + "vs": "vs" + }, + "recent": { + "title": "Recent Matches" + }, + "options": { + "allow_coaches": "Allow Coaches", + "group": { + "game_settings": "Game Settings", + "team_settings": "Team Settings", + "veto_settings": "Veto Settings", + "control_settings": "Control Settings" + }, + "filter_maps": "Filter Maps", + "table": { + "no_matches_found": "No Matches Found", + "join": "Join" + }, + "type": { + "label": "Match Type" + }, + "best_of": { + "label": "Best Of", + "description": "The winner is determined by who wins the majority of a specified number of games", + "placeholder": "Select a best of value", + "option": "Best of {count}" + }, + "map_veto_settings": { + "description": "Map Veto process: team 1 ban, team 2 ban, team 1 pick, team 2 pick side, team 2 pick, team 1 pick side, team 2 ban. Process repeats until final map is selected", + "custom_pool": "Custom Map Pool", + "active_duty": "Active Duty Map Pool", + "custom_pool_tooltip": "Choosing a custom map pool allows you to select maps outside the current active duty pool" + }, + "advanced": { + "title": "Advanced Settings", + "hide": "Hide", + "show": "Show", + "toggle": "Toggle Advanced Settings", + "overtime": { + "label": "Overtime", + "description": "Each overtime is a best of 6." + }, + "knife_round": { + "label": "Knife Round", + "description": "Knife rounds are only played when neither team picked the map in the veto." + }, + "max_rounds": { + "label": "Max Rounds", + "description": "The number of rounds played before teams switch sides.", + "placeholder": "Select max rounds" + }, + "region": { + "title": "Region Settings", + "lan_match": "LAN Match", + "veto": { + "label": "Veto", + "description": "Allows teams to veto and select the server region." + }, + "preferred": "Preferred Regions", + "placeholder": "Select Region", + "any": "Any", + "description": "Select preferred regions for the match." + }, + "substitutes": { + "label": "Number of Substitutes", + "description": "Adds additional slots to be added to each lineup.", + "range": "Enter value between 0 and 5." + }, + "tv_delay": { + "label": "TV Delay", + "range": "Enter value between 0 and 120." + }, + "timeouts": { + "tactical": { + "label": "Tactical Timeout Settings", + "description": "Tactical Timeouts are called by typing .tac, and are 30 seconds long." + }, + "technical": { + "label": "Technical Timeout Settings", + "description": "Technical timeouts are called by typing .pause, and do not have a time limit." + }, + "options": { + "admins": "Admins", + "coaches": "Coaches", + "captains": "Coaches / Captains", + "everyone": "Anyone" + } + }, + "default_models": { + "label": "Default Player Models", + "description": "Enable default player models for all players in the match." + }, + "check_in_settings": { + "label": "Check In Settings", + "description": "Controls how players check in before the match starts.", + "options": { + "admins": "Admins", + "captains": "Captains", + "everyone": "All Players Required to Check In" + } + }, + "ready_settings": { + "label": "Ready Settings", + "description": "Controls how the match determines to be ready to start.", + "options": { + "admins": "Admins", + "coaches": "Coaches", + "captains": "Captains", + "everyone": "All Players Required to be Ready" + } + }, + "auto_cancellation": { + "label": "Match Cancellation", + "description": "Automatically cancel matches that are not started within the configured duration.", + "auto_cancel_duration": { + "label": "Auto Cancel Duration (minutes)", + "description": "Override the app-level auto cancel duration for this match/tournament." + }, + "live_match_timeout": { + "label": "Live Match Timeout (minutes)", + "description": "Override the app-level live match timeout for this match/tournament." + } + }, + "match_mode": { + "label": "Match Mode", + "description": "Controls how the match is scheduled. Auto mode lets the system schedule automatically, Admin mode requires manual scheduling.", + "options": { + "auto": "Auto", + "admin": "Admin" + } + }, + "default_player_models": { + "description": "Enable default player models for all players in the match." + } + }, + "max_rounds": "Max Rounds", + "tv_delay": "TV Delay", + "seconds": "seconds", "coaches": "Coaches", - "captains": "Coaches / Captains", - "everyone": "Anyone" - } + "overtime": "Overtime", + "knife_round": "Knife Round", + "region_veto": "Region Veto", + "substitutes": "Substitutes", + "timeout_setting": "Timeout Setting", + "tech_timeout_setting": "Tech Timeout Setting", + "ready_setting": "Ready Setting", + "check_in_setting": "Check In Setting", + "advanced_settings": "Show Advanced Settings", + "default_player_models": "Default Player Models" + }, + "schedule": { + "schedule": "Schedule", + "start_match": "Start Match", + "reset": "Reset scheduled time" + }, + "player": { + "captain": "Captain", + "status": { + "offline_not_ready": "Offline and not ready", + "online_not_ready": "Online but not ready", + "ready": "Ready", + "online_not_in_game": "Online but not in game", + "in_game": "In game" + }, + "assign_slot": "Assign Slot" }, - "default_models": { - "label": "Default Player Models", - "description": "Enable default player models for all players in the match." - }, - "check_in_settings": { - "label": "Check In Settings", - "description": "Controls how players check in before the match starts.", - "options": { - "admins": "Admins", - "captains": "Captains", - "everyone": "All Players Required to Check In" - } - }, - "ready_settings": { - "label": "Ready Settings", - "description": "Controls how the match determines to be ready to start.", - "options": { - "admins": "Admins", - "coaches": "Coaches", - "captains": "Captains", - "everyone": "All Players Required to be Ready" - } - }, - "auto_cancellation": { - "label": "Match Cancellation", - "description": "Automatically cancel matches that are not started within the configured duration.", - "auto_cancel_duration": { - "label": "Auto Cancel Duration (minutes)", - "description": "Override the app-level auto cancel duration for this match/tournament." - }, - "live_match_timeout": { - "label": "Live Match Timeout (minutes)", - "description": "Override the app-level live match timeout for this match/tournament." - } - }, - "match_mode": { - "label": "Match Mode", - "description": "Controls how the match is scheduled. Auto mode lets the system schedule automatically, Admin mode requires manual scheduling.", - "options": { - "auto": "Auto", - "admin": "Admin" - } + "tabs": { + "overview": "Overview", + "utility": "Utility", + "opening_duels": "Opening Duels", + "clutches": "Clutches", + "settings": "Match Settings", + "streams": "Match Live Streams", + "admin": "Admin", + "randomize_teams": "Randomize Teams", + "swap_lineups": "Swap Lineups", + "invited_to_match": "Invited to Match", + "join_roster": "Join a roster", + "restore_round": "Restore Round", + "select_round_to_restore": "Select the round to restore", + "server_information": "Server Information", + "type": "Type", + "region": "Region" + }, + "show_players": "Show Players", + "hide_players": "Hide Players", + "status": { + "cancelled": "Cancelled", + "waiting_server": "Waiting for server ...", + "scheduled_asap": "Scheduled ASAP", + "paused": "Paused" + }, + "winner": { + "set": "Set Match Winner", + "select_lineup": "Select Lineup" + }, + "region_veto": { + "ban_label": "Ban", + "banning": "is Banning a Region", + "organizer_override": "Match Organizer Override", + "confirm_ban": "Confirm Ban", + "server_region": "Server Region", + "select_region": "Select A Region", + "no_regions_available": "No regions available", + "no_regions_available_description": "No regions are available for this server. Please contact an administrator to add a region.", + "set_server_region": "Set Server Region" + }, + "picks": { + "decider": "Decider" + }, + "decider": "Decider", + "map_veto": { + "is_picking": "is Picking a", + "organizer_override": "Match Organizer Override", + "pick": "Pick", + "confirm": "Confirm {type}" + }, + "map_lineup": { + "picked": "Picked" + }, + "auto_canceling": "Auto Canceling", + "server_error": { + "title": "Server provisioning failed", + "short_label": "Server Issue" + }, + "actions": { + "call_support": "Call for Support", + "start_veto": "Start Veto", + "skip_checkin": "Skip Check In", + "cancel": "Cancel Match", + "delete": "Delete Match", + "canceled": "Match Canceled", + "deleted": "Match Deleted", + "requested_organizer": "Requested Organizer", + "pause": "Pause Match", + "resume": "Resume Match", + "match_paused": "Match paused", + "match_resumed": "Match resumed" }, - "default_player_models": { - "description": "Enable default player models for all players in the match." + "delete_confirm": { + "title": "Delete Match", + "description": "Are you sure you want to delete this match? This action cannot be undone." + }, + "lineup": { + "stats": { + "flashes_thrown": "Flashes Thrown", + "flash_assists": "Flash Assists", + "enemies_flashed": "Enemies Flashed", + "team_flashed": "Team Flashed", + "avg_blind_time": "Avg blind time", + "he_damage": "HE Damage", + "molotov_damage": "Incendiary / Molotov Damage", + "seconds": "seconds" + }, + "discord_user": "This is a Discord user, register your discord id to enable stat tracking by typing", + "discord_link": "in the official discord channel." + }, + "invites": { + "title": "Invites", + "invited_player": "Invited Player", + "invited_by": "Invited By", + "deleted_success": "Invite deleted successfully", + "delete_error": "Failed to delete invite", + "delete_confirm": { + "title": "Delete Invite", + "description": "Are you sure you want to delete the invite for {player} ({steam_id})? This action cannot be undone." + } + }, + "overview": { + "promote_captain": "Promote to Captain", + "switch_teams": "Switch Teams", + "remove_from_lineup": "Remove from Lineup", + "leave_lineup": "Leave Lineup", + "update_team_name": "Update Team Name", + "kd": "K/D", + "hs": "HS%", + "team_damage": "Team Damage", + "multi_kill_rounds": "Multi Kill Rounds", + "mkr": "MKR", + "k2": "2K", + "k3": "3K", + "k4": "4K", + "k5": "5K", + "knifes": "Knives", + "zeus": "Zeus", + "total_damage": "Total Damage", + "substitute": "(substitute)", + "join": "Join", + "slot": "Slot {number}" + }, + "opening_duels": { + "attempts": "Attempts", + "success": "Success" + }, + "clutches": { + "won": "Won", + "lost": "Lost", + "against": "Against", + "no_clutches": "No clutches this round", + "vs": "vs {count}" + }, + "check_in": { + "checked_in": "Checked In", + "check_in": "Check In", + "checked_in_description": "You have checked in {checked} out of {required} players required to start the match" + }, + "coach": { + "assign": "Assign Coach" + }, + "map_number": "Map {count}", + "map_tbd": "Map TBD", + "server": { + "offline": "Server is offline!", + "booting": "Server Booting", + "assign": "Assign Match Server", + "select": "Select a server", + "dedicated": "Dedicated Servers", + "on_demand": "On Demand", + "assigned": "Assigned Match Server", + "join_server": "Join Server", + "join_as_spectator": "Spectator Details", + "join_tv_stream": "TV Stream Details", + "tv_delay": "TV is delayed by {delay} seconds, waiting for stream to be ready." + }, + "lobby": { + "access_updated": "Match lobby access updated to {access}" } - }, - "max_rounds": "Max Rounds", - "tv_delay": "TV Delay", - "seconds": "seconds", - "coaches": "Coaches", - "overtime": "Overtime", - "knife_round": "Knife Round", - "region_veto": "Region Veto", - "substitutes": "Substitutes", - "timeout_setting": "Timeout Setting", - "tech_timeout_setting": "Tech Timeout Setting", - "ready_setting": "Ready Setting", - "check_in_setting": "Check In Setting", - "advanced_settings": "Show Advanced Settings", - "default_player_models": "Default Player Models" - }, - "schedule": { - "schedule": "Schedule", - "start_match": "Start Match", - "reset": "Reset scheduled time" - }, - "player": { - "captain": "Captain", - "status": { - "offline_not_ready": "Offline and not ready", - "online_not_ready": "Online but not ready", - "ready": "Ready", - "online_not_in_game": "Online but not in game", - "in_game": "In game" - }, - "assign_slot": "Assign Slot" - }, - "buy_types": { - "section_title": "Buy Type Breakdown", - "win": "win", - "you": "Your team", - "opponent": "Opponent", - "win_axis": "Win %", - "no_data": "No buy-type data available", - "matchups": { - "pistol_v_pistol": "Pistol v Pistol", - "full_v_full": "Full v Full", - "full_v_eco": "Full v Eco", - "full_v_force": "Full v Force", - "eco_v_full": "Eco v Full", - "force_v_full": "Force v Full" - } }, - "radar": { - "title": "Player Matchup", - "player_a": "Player A", - "player_b": "Player B", - "select_player": "Select player", - "vs": "vs", - "metric": "Metric", - "no_data": "No stats available for the selected players.", - "axes": { - "rating": "HLTV Rating", - "kast": "KAST", - "adr": "ADR", - "kpr": "KPR", - "opening": "Opening K/D", - "opening_attempts": "Opening Attempts", - "trade_kills": "Trade Kills/Round", - "kd": "K/D", - "traded": "Traded Deaths/Round", - "dpr": "DPR", - "udr": "UDR", - "flash_assists": "Flash Assists/Round" - } - }, - "team_stats": { - "sides_title": "Sides Breakdown", - "no_data": { - "title": "No round data", - "description": "Team stats are available once round-by-round data has been recorded for this match." - }, - "kpi": { - "round_win": "Round Win %", - "pistol_win": "Pistol Win %", - "opening_win": "Opening Win %", - "trade": "Trade %", - "man_advantage": "5v5 Win %", - "man_disadvantage": "4v5 Win %", - "udr": "UDR", - "flash_assists_pr": "Flash Assists / Round" - }, - "side": { - "ct": "CT Side", - "t": "T Side" - }, - "buy": { - "pistol": "Pistol", - "eco": "Eco", - "force": "Force", - "full": "Full" - }, - "buy_mix": "Buy Mix", - "rounds_won": "rounds won" - }, - "heatmaps": { - "select_map": "Select map", - "kills": "Kills", - "deaths": "Deaths", - "utility": "Utility", - "util_damage": "Util Damage", - "render_heat": "Heat", - "render_dots": "Dots", - "trajectories": "Trajectories", - "all_players": "All players", - "all_rounds": "All rounds", - "plotted": "{count} positions plotted", - "no_radar_title": "No radar available", - "no_radar_description": "There is no radar image or calibration data for this map.", - "utility_types": { - "HighExplosive": "HE", - "Molotov": "Molotov", - "Smoke": "Smoke", - "Flash": "Flash", - "Decoy": "Decoy" - } - }, - "map_analysis": { - "title": "Map Analysis", - "mode_heatmap": "Heatmap", - "mode_movement": "Paths", - "filter_stat": "Stat", - "filter_render": "Render", - "filter_side": "Side", - "filter_player": "Player", - "filter_type": "Type", - "filter_team": "Team", - "filter_window": "Window", - "open_2d_playback": "Open 2D Playback", - "open_3d_playback": "Open 3D Replay" - }, - "roles": { - "title": "Detected Roles", - "description": "Auto-detected from each player's AWP usage, opening-duel involvement, and utility output this match.", - "no_data": "Not enough data to detect roles for this match.", - "names": { - "sniper": "Sniper", - "entry": "Entry", - "support": "Support", - "lurker": "Lurker", - "rifler": "Rifler" - }, - "signals": { - "awp": "Sniper", - "entry": "Entry", - "support": "Util" - } - }, - "economy": { - "section": "Round Economy", - "description": "Each team's start-of-round money across the map.", - "select_map": "Select map", - "empty_title": "No economy data", - "empty_description": "Per-round money isn't available for this map yet.", - "round_won_by": "Round won by {team}", - "no_winner": "No winner", - "team_1": "Team 1", - "team_2": "Team 2" - }, - "movement": { - "loading": "Loading playback data", - "all_players": "All players", - "seconds": "{count}s", - "side_both": "Both", - "side_ct": "CT", - "side_t": "T", - "team_all": "Both Teams", - "team_1": "Team 1", - "team_2": "Team 2", - "summary": "{rounds} rounds, {paths} paths", - "sampled": "Paths sampled to keep rendering fast" - }, - "tabs": { - "overview": "Overview", - "scoreboard": "Scoreboard", - "general": "General", - "more": "More", - "economy": "Economy", - "utility": "Utility", - "trade_stats": "Trades", - "aim_stats": "Aim", - "opening_duels": "Opening Duels", - "clutches": "Clutches", - "head_to_head": "Head to Head", - "roles": "Roles", - "map_analysis": "Map Analysis", - "mobile_label_map": "Map Filter", - "mobile_label_view": "View", - "settings": "Match Settings", - "streams": "Match Live Streams", - "admin": "Admin", - "randomize_teams": "Randomize Teams", - "swap_lineups": "Swap Lineups", - "restore_round": "Restore Round", - "select_round_to_restore": "Select the round to restore", - "server_information": "Server Information", - "type": "Type", - "region": "Region", - "no_logs_title": "No Logs Available", - "no_logs_description": "No logs are available and no server is connected." - }, - "status": { - "cancelled": "Cancelled", - "waiting_server": "Waiting for server ...", - "scheduled_asap": "Scheduled ASAP", - "paused": "Paused", - "tied": "Tied" - }, - "winner": { - "set": "Set Match Winner", - "select_lineup": "Select Lineup" - }, - "map_winner": { - "set": "Set Map Winner" - }, - "region_veto": { - "ban_label": "Ban", - "banning": "is Banning a Region", - "organizer_override": "Match Organizer Override", - "confirm_ban": "Confirm Ban", - "server_region": "Server Region", - "select_region": "Select A Region", - "no_regions_available": "No regions available", - "no_regions_available_description": "No regions are available for this server. Please contact an administrator to add a region.", - "set_server_region": "Set Server Region" - }, - "commands": { - "pause_match": "Pause Match", - "resume_match": "Resume Match", - "skip_knife": "Skip Knife", - "force_ready": "Force Ready", - "reset_to_knife": "Reset to Knife", - "reset_to_warmup": "Reset to Warmup" - }, - "picks": { - "decider": "Decider", - "empty": "No Veto Picks", - "counter_terrorist": "Counter-Terrorist", - "terrorist": "Terrorist", - "action_pick": "{team} picked {map}", - "action_ban": "{team} banned {map}", - "action_side": "{team} chose {side} on {map}", - "action_decider": "{map} was the decider", - "side_picked_by": "{team} chose {side}", - "starts_on": "{team} starts {side}" - }, - "decider": "Decider", - "map_veto": { - "is_picking": "is Picking a", - "organizer_override": "Match Organizer Override", - "pick": "Pick", - "confirm": "Confirm {type}" - }, - "map_lineup": { - "picked": "Picked" - }, - "auto_canceling": "Auto Canceling", - "actions": { - "call_support": "Call for Support", - "start_veto": "Start Veto", - "skip_checkin": "Skip Check In", - "cancel": "Cancel Match", - "delete": "Delete Match", - "canceled": "Match Canceled", - "deleted": "Match Deleted", - "requested_organizer": "Requested Organizer", - "pause": "Pause Match", - "resume": "Resume Match", - "match_paused": "Match paused", - "match_resumed": "Match resumed", - "start_live": "Start Live Stream", - "pause_highlights_and_start_live": "Pause Highlights & Start Live Stream", - "start_live_preempt_highlights_hint": "Highlights pause after current · live goes up once GPU frees", - "start_live_direct": "Direct", - "start_live_direct_hint": "Game-port observer · no delay", - "start_live_tv": "TV (GOTV)", - "start_live_tv_hint": "Honors tv_delay · safe while playing", - "start_live_waiting_tv": "Waiting for TV connection…", - "stop_live": "Stop Live Stream", - "cancel_live_boot": "Cancel Live Stream (booting…)", - "create_clips": "Create Player Highlights", - "create_clips_needs_gpu_node": "Register a GPU node to queue highlights (offline is fine — jobs dispatch when it's back online)", - "live_started": "Live stream starting", - "live_stopped": "Live stream stopped", - "live_switched": "Live stream switched to this match", - "live_busy_elsewhere": "Live stream is already running on another match — switch instead", - "live_unavailable": "Live stream unavailable", - "switch_stream_here": "Switch Stream To This Match", - "server_offline": "Server is offline", - "cancel_live_pending": "Cancel Live Stream (pending…)", - "live_pending_hint": "Waiting for GPU — auto-promotes once free", - "pause_renders": "Pause Highlight Renders", - "pause_renders_hint": "Stops after the current highlight", - "pause_renders_started": "Renders will pause after the current highlight", - "resume_renders": "Resume Highlight Renders", - "resume_renders_hint": "Pick up remaining highlights", - "resume_renders_started": "Resuming highlight renders", - "clips_started": "Player highlight renders queued", - "reparse_demos": "Reparse Match Demos", - "reparse_demos_started": "Reparsing all demos for this match" - }, - "delete_confirm": { - "title": "Delete Match", - "description": "Are you sure you want to delete this match? This action cannot be undone." - }, - "lineup": { - "lineup_1": "Lineup 1", - "lineup_2": "Lineup 2", - "stats": { - "flashes_thrown": "Flashes Thrown", - "flash_assists": "Flash Assists", - "enemies_flashed": "Enemies Flashed", - "team_flashed": "Team Flashed", - "avg_blind_time": "Avg blind time", - "he_damage": "HE Damage", - "molotov_damage": "Fire Damage", - "utility_summary_total": "total", - "utility_summary_flashes": "Flashes", - "utility_summary_smokes": "Smokes", - "utility_summary_hes": "HEs", - "utility_summary_molotovs": "Molotovs", - "he_team_damage": "HE Team Dmg", - "unused_utility": "Unused Utility", - "seconds": "seconds", - "trade_kill_opportunities": "Trade Kill Opps", - "trade_kill_attempts": "Trade Kill Attempts", - "trade_kill_pct": "Trade Kill %", - "traded_death_opportunities": "Traded Death Opps", - "traded_death_attempts": "Traded Death Attempts", - "traded_death_pct": "Traded Death %", - "net_trade": "Net Trade", - "accuracy": "Accuracy", - "estimated": "Estimated", - "estimated_tooltip": "This map has no collision mesh, so line-of-sight couldn't be validated — spotted, crosshair, time-to-damage and engagement stats here are estimated.", - "rifle_accuracy": "Rifle Accuracy", - "pistol_accuracy": "Pistol Accuracy", - "sniper_accuracy": "Sniper Accuracy", - "head_accuracy": "Head Accuracy", - "hs_kill_pct": "HS Kill %", - "time_to_damage": "Time to Damage", - "spotted_acc": "Spot Conversion", - "crosshair_placement": "Crosshair Placement", - "counter_strafing": "Counter-Strafing", - "first_bullet_accuracy": "First Bullet Accuracy", - "tracking": "Tracking", - "wasted_magazine_pct": "Wasted Mag %", - "spray_accuracy": "Spray Accuracy", - "accuracy_spotted": "Accuracy (Spotted)", - "calc_header": "How it is calculated", + "ui": { "tooltips": { - "accuracy": { - "title": "Accuracy (All Shots)", - "description": "Out of the total bullets you fired, how many hit an enemy. Volume-dependent — snipers and pistol players fire rarely and hit a high fraction, so this number flatters them. Compare the per-weapon accuracies instead.", - "calculation": "All hits divided by all shots, across every weapon." - }, - "rifle_accuracy": { - "title": "Rifle Accuracy", - "description": "Accuracy with rifles only (AK, M4, AUG, Galil, FAMAS, SG). The fairest aim comparison — rifle vs rifle — since it isn't inflated by low-fire-rate weapons.", - "calculation": "Rifle hits divided by rifle shots. Shown only with at least 5 rifle shots." - }, - "pistol_accuracy": { - "title": "Pistol Accuracy", - "description": "Accuracy with pistols only (Glock, USP, P250, Deagle, Five-Seven, Tec-9, CZ, Dualies, Revolver).", - "calculation": "Pistol hits divided by pistol shots. Shown only with at least 5 pistol shots." - }, - "sniper_accuracy": { - "title": "Sniper Accuracy", - "description": "Accuracy with scoped rifles (AWP, SSG, SCAR-20, G3SG1). Naturally high — these are low-volume, one-shot weapons — so judge AWPers against each other.", - "calculation": "Sniper hits divided by sniper shots. Shown only with at least 5 sniper shots." - }, - "accuracy_spotted": { - "title": "Accuracy (Enemy Spotted)", - "description": "Accuracy when you were actually shooting at an enemy in your field of view. Spam through smoke or walls is excluded.", - "calculation": "Hits on spotted enemies divided by shots fired while an enemy was in vision." - }, - "head_accuracy": { - "title": "Headshot Accuracy", - "description": "How many of your hits landed in the head. Excludes shots with AWP.", - "calculation": "Head hits divided by total hits (AWP excluded from both)." - }, - "hs_kill_pct": { - "title": "HS Kill %", - "description": "Share of your kills that were headshots, as the scoreboard shows.", - "calculation": "Headshot kills divided by total kills." - }, - "time_to_damage": { - "title": "Time to Damage", - "description": "Average time from first seeing an enemy to dealing damage to them. Trigger-discipline / hold-angle plays are excluded.", - "calculation": "Per engagement, time from the rising-edge spot to the first damage on that enemy. Averaged across all engagements; capped at 3s." - }, - "spotted_acc": { - "title": "Spot Conversion", - "description": "Of the enemies you spotted, how many you then dealt damage to — an engagement/aggression measure, not aim. (Contrast with Accuracy (Spotted), which is your bullet hit-rate while shooting a visible enemy.)", - "calculation": "Enemies you spotted and then damaged that round, divided by the total enemies you spotted." - }, - "crosshair_placement": { - "title": "Crosshair Placement", - "description": "Average angle (degrees) your crosshair moved from first seeing the enemy until you hit them. Lower is better.", - "calculation": "Per engagement, the angle between your eye direction at the moment of first spot and at the first hit. Outliers above 45° are excluded." - }, - "counter_strafing": { - "title": "Counter-Strafing", - "description": "How often you stopped before firing with a rifle. Only counts rifle shots at an enemy in vision; excludes movement while fully crouched.", - "calculation": "Rifle shots at a spotted enemy where speed was under 34% of the weapon's max, divided by all rifle shots at spotted enemies (not crouched)." - }, - "first_bullet_accuracy": { - "title": "First Bullet Accuracy", - "description": "How often your opening shot of an engagement connects — the shot that decides most duels. Higher is better.", - "calculation": "First shots that dealt damage divided by first shots fired, across every engagement (one per enemy you opened up on)." - }, - "tracking": { - "title": "Tracking (Time on Target)", - "description": "While engaging a live enemy, how much of the time your crosshair stayed on them. Higher is better.", - "calculation": "Frames where your view stayed within ~5° of the enemy, divided by all frames of the engagement window." - }, - "spray_accuracy": { - "title": "Spray Accuracy", - "description": "Your accuracy on the second and later shots of a burst — the shots where recoil matters most.", - "calculation": "Hits attributed to spray shots divided by total spray shots. A shot is a spray shot if the same shooter fired within 250ms before it." - }, - "wasted_magazine_pct": { - "title": "Wasted Magazine %", - "description": "How often you reload with bullets still in the magazine. Lower is better — finishing the clip is more efficient.", - "calculation": "Bullets left in the mag at each reload, divided by (shots fired + wasted bullets)." - }, - "trade_kill_opportunities": { - "title": "Trade Kill Opportunities", - "description": "Rounds where a teammate died while you were alive — i.e. you had a chance to trade.", - "calculation": "Distinct rounds in which at least one teammate was killed by an enemy while you were still alive." - }, - "trade_kill_attempts": { - "title": "Trade Kill Attempts", - "description": "Enemies you killed shortly after they killed a teammate.", - "calculation": "Kills against an enemy within 5 seconds of them killing one of your teammates." - }, - "trade_kill_pct": { - "title": "Trade Kill %", - "description": "How often you converted a trade opportunity into a trade kill.", - "calculation": "Trade kill successes divided by trade kill opportunity rounds." - }, - "traded_death_opportunities": { - "title": "Traded Death Opportunities", - "description": "Your enemy deaths — i.e. each death was a chance for a teammate to trade for you.", - "calculation": "Total times you were killed by an enemy." - }, - "traded_death_attempts": { - "title": "Traded Death Attempts", - "description": "Total trade attempts your team made on your deaths (a teammate killing your killer within 5s).", - "calculation": "Sum of every teammate kill that traded one of your deaths within 5 seconds." - }, - "traded_death_pct": { - "title": "Traded Death %", - "description": "How often your deaths were avenged by a teammate.", - "calculation": "Your deaths a teammate traded within 5 seconds, divided by total deaths." - }, - "net_trade": { - "title": "Net Trade", - "description": "Your contribution to your team's trade balance.", - "calculation": "Trade kills you completed minus your untraded deaths." - } + "expand": "Expand", + "fullscreen": "Fullscreen", + "toggle_right_sidebar": "Toggle Right Sidebar", + "view_steam_profile": "View Steam Profile", + "zoom_in": "Zoom In", + "zoom_in_scroll": "Zoom In (Ctrl/Cmd + Scroll)", + "zoom_out": "Zoom Out", + "zoom_out_scroll": "Zoom Out (Ctrl/Cmd + Scroll)", + "reset_zoom": "Reset Zoom", + "loading": "Loading", + "settings_section": "Settings section", + "match_section": "Match section", + "database_section": "Database section" + }, + "logs": { + "follow": "Follow Logs", + "timestamps": "Show Timestamps", + "jump_to_live": "Jump to Live" } - }, - "discord_user": "This is a Discord user, register your discord id to enable stat tracking by typing", - "discord_link": "in the official discord channel." }, - "overview": { - "promote_captain": "Promote to Captain", - "switch_teams": "Switch Teams", - "remove_from_lineup": "Remove from Lineup", - "leave_lineup": "Leave Lineup", - "render_highlight": "Render highlight…", - "update_team_name": "Update Team Name", - "kd": "K/D", - "hltv": "HLTV", - "hs": "HS%", - "kast": "KAST", - "survived": "Survived", - "team_damage": "Team Damage", - "multi_kill_rounds": "Multi Kill Rounds", - "mkr": "MKR", - "knifes": "Knives", - "zeus": "Zeus", - "total_damage": "Total Damage", - "substitute": "(substitute)", - "slot": "Slot {number}", - "tooltips": { - "hltv": { - "title": "HLTV Rating 2.0", - "description": "Composite rating from kills/round, deaths/round, assists/round, ADR, and KAST. >1.0 means above-average; >1.2 is elite, <0.85 is poor." - }, - "kast": { - "title": "KAST %", - "description": "Percent of rounds where you contributed: got a Kill, an Assist, Survived the round, or were Traded after dying. Pros average 70–80%." + "player": { + "player": { + "steam_id": "Steam ID", + "steam": "Steam" + }, + "sanction": { + "button": "Sanction Player", + "typed_player": "{type} Player", + "reason_label": "Reason", + "reason_placeholder": "Enter reason for sanction...", + "reason_description": "Please provide a clear reason for this sanction", + "types": { + "ban_description": "Player is not able to participate in any activity", + "mute_description": "Player cannot use voice chat in game", + "gag_description": "Player cannot use text chat in game", + "silence_description": "Player muted and gagged" + }, + "durations": { + "15_minutes": "15 minutes", + "30_minutes": "30 minutes", + "1_hour": "1 hour", + "1_day": "1 day", + "1_week": "1 week", + "1_month": "1 month", + "permanent": "Permanent" + } + }, + "search": { + "no_players_found": "No Players Found.", + "found_players": "Players Found", + "placeholder": "Search players..." + }, + "sanctions": { + "title": "Sanctions", + "duration_label": "Duration", + "select_duration": "Select duration", + "sanctions": "Sanctions", + "expires": "Expires", + "edit": "Edit", + "remove": "Remove", + "edit_title": "Edit Sanction", + "edit_description": "Update the end time for this sanction", + "clear_date": "Clear date", + "updated": "Sanction updated", + "update_failed": "Failed to update sanction", + "confirm_remove": "Remove Sanction", + "remove_description": "Are you sure you want to remove this sanction? This action cannot be undone.", + "removed": "Sanction removed", + "remove_failed": "Failed to remove sanction", + "abandoned_matches": "Abandoned Matches", + "match": "Match", + "no_sanctions": "No sanctions", + "remove_abandoned": "Remove Abandoned Match", + "confirm_remove_abandoned": "Remove Abandoned Match", + "remove_abandoned_description": "Are you sure you want to remove this abandoned match record? This action cannot be undone.", + "abandoned_removed": "Abandoned match removed", + "abandoned_remove_failed": "Failed to remove abandoned match" + }, + "registration": { + "title": "Register your name", + "description": "This name will be used for all matches / tournaments you participate in.", + "warning": "This name cannot be changed after being submitted", + "name_label": "Name", + "confirm_button": "Confirm Name", + "success": "Name confirmed" }, - "survived": { - "title": "Rounds Survived", - "description": "Rounds you finished alive (didn't appear as the victim of any kill). Includes won, lost, and saved rounds." + "status": { + "banned": "Player is banned", + "muted": "Player is muted", + "gagged": "Player is gagged", + "add_friend": "Add as friend" + }, + "change_name": { + "button": "Change Name", + "title": "Change Name", + "request_title": "Request Name Change", + "description": "Please enter the name you would like to change to.", + "request_description": "Please enter the name you would like to change your account to.", + "name_label": "Name", + "success": "Changed Players Name", + "request_success": "Requested Name Change" } - } - }, - "opening_duels": { - "attempts": "Attempts", - "success": "Success", - "traded": "Traded", - "most_killed": "Most Killed", - "best_weapon": "Best Weapon", - "most_died_to": "Most Died To" - }, - "clutches": { - "won": "Won", - "lost": "Lost", - "saved": "Saved", - "no_attempts": "No clutch attempts", - "vs": "vs {count}", - "vs_short": "1v{count}", - "total_kills": "Total Kills", - "clutches_won": "Clutches Won", - "saves": "Saves" - }, - "check_in": { - "checked_in": "Checked In", - "check_in": "Check In", - "checked_in_description": "You have checked in {checked} out of {required} players required to start the match" - }, - "coach": { - "assign": "Assign Coach" - }, - "map_number": "Map {count}", - "map_tbd": "Map TBD", - "server": { - "offline": "Server is offline!", - "booting": "Server Booting", - "assign": "Assign Match Server", - "select": "Select a server", - "dedicated": "Dedicated Servers", - "on_demand": "On Demand", - "assigned": "Assigned Match Server", - "reboot_label": "Server Reboot", - "reboot": "Reboot Server", - "rebooting": "Rebooting...", - "reboot_description": "Recreate this match's on-demand game server without changing the match state.", - "reboot_confirm_title": "Reboot match server?", - "reboot_confirm_description": "This will restart the current on-demand match server and keep the match in its current state while the server reconnects.", - "reboot_started": "Server reboot started", - "join_server": "Join Server", - "join_as_spectator": "Spectator Details", - "join_tv_stream": "TV Stream Details", - "tv_delay": "TV is delayed by {delay} seconds, waiting for stream to be ready." }, - "replay": { - "select_map": "Select a map above to replay", - "select": "Select", - "selected": "Selected", - "load": "Load Replay", - "open": "Open 2D Replay", - "open_3d": "Open 3D Replay", - "loading": "Loading replay…", - "no_position_data": "No position data — re-parse the demo to populate the replay.", - "toggle_to_slots": "Switch to slot numbers", - "toggle_to_avatars": "Switch to player avatars", - "hide_scoreboard": "Hide scoreboard", - "show_scoreboard": "Show scoreboard", - "rotate_title": "Rotate your device", - "rotate_description": "The replay viewer works best in landscape. Turn your device sideways to continue.", - "popout": "Pop out into a separate window", - "phase_freeze": "Freeze", - "phase_bomb": "Bomb", - "bomb_planted": "Planted {site}", - "bomb_defused": "Defused", - "bomb_exploded": "Exploded", - "prev_round": "Previous round", - "next_round": "Next round", - "step_back": "Step back", - "step_forward": "Step forward", - "play": "Play", - "pause": "Pause", - "headshot": "Headshot", - "defuse_kit": "Defuse kit", - "follow_hint": "Click a player below to follow them on the map.", - "follow_stop": "Click to stop following", - "follow_player": "Click to follow {name} on the map", - "counter_terrorists": "Counter-Terrorists", - "terrorists": "Terrorists", - "shortcuts_title": "Shortcuts", - "shortcut_play": "play", - "shortcut_step": "step", - "shortcut_round": "round", - "shortcut_speed": "speed", - "overlays": "Overlays", - "overlay_c4": "C4 carrier", - "overlay_defuser": "Defuse kits", - "overlay_ground_bomb": "Dropped / planted bomb", - "overlay_ground_kits": "Dropped kits", - "pathing_off": "Pathing off", - "pathing_progress": "Pathing to current tick", - "overlay_buy_section": "Buy-round overlay", - "overlay_buy_window": "Window: {sec}s since freezetime", - "overlay_buy_explainer": "{count} full-buy rounds · first {sec}s after freeze", - "loading_map": "loading map…", - "chrome": { - "view_2d": "2D top-down radar view", - "view_3d": "3D map view", - "enter_fullscreen": "Fullscreen", - "exit_fullscreen": "Exit fullscreen", - "cam_orbit": "ORBIT", - "cam_orbit_tip": "Orbit camera — left-drag look, right-drag orbit, scroll zoom, WASD fly", - "cam_top": "TOP", - "cam_top_tip": "Top-down camera", - "cam_chase": "CHASE", - "cam_chase_tip": "Chase the followed player", - "roof": "ROOF", - "roof_tip": "Roof cut — middle is auto (roofs off, action visible). Up = reveal more, down = cut more, max = full map.", - "play_by_play": "PLAY BY PLAY", - "play_by_play_tip": "Show the round's play-by-play event log", - "more": "More options", - "utility_heatmap": "UTILITY HEATMAP", - "utility_heatmap_tip": "Utility landing heatmap for the round", - "pbp_header": "PLAY BY PLAY · RD {round}", - "clear_count": "clear {count}", - "no_events": "no events yet", - "alive_count": "{count} alive", - "showing_avatars": "Showing avatars — click for numbers", - "showing_numbers": "Showing numbers — click for avatars", - "trace_tip": "Player movement trace (dotted path)", - "deaths_tip": "Death (kill-location) markers", - "util_summary": "UTIL SUMMARY", - "util_summary_tip": "Utility Summary — stack multiple buy rounds on one shared clock to compare each team's utility setups, timings and positions", - "round_remove": "Round {n} — click to remove from the summary", - "round_add": "Round {n} — click to add to the summary", - "round_jump": "Jump to round {n}", - "clear_highlighted_util": "Clear highlighted utility", - "hide_util": "Hide {type} utility", - "show_util": "Show {type} utility", - "util_thrown_by": "{type} · thrown by {name}", - "utility": "Utility", - "click_to_clear": " — click to clear", - "click_to_highlight": " — click to highlight", - "pause": "Pause", - "play": "Play", - "window": "WINDOW", - "team": "TEAM", - "all": "ALL", - "team_1": "Team 1", - "team_2": "Team 2", - "kb_play_pause": "play / pause", - "kb_step_frame": "step frame", - "kb_prev_next_round": "prev / next round", - "kb_speed": "speed", - "kb_3d_camera": "3D camera", - "kb_look": "look / follow-orbit", - "kb_orbit": "orbit", - "kb_zoom": "zoom", - "kb_fly": "fly", - "kb_up_down": "up / down", - "following_on_map": "Following on the map", - "bomb_carrier": "Bomb carrier" - }, - "auto_clip_preset": "Auto clip from preset", - "hold_scoreboard": "Hold to show scoreboard", - "swap_sides": "Swap sides (manual override)", - "hide_clip_editor": "Hide clip editor", - "open_clip_editor": "Open clip editor", - "kills_by": "Kills by", - "deaths_of": "Deaths of", - "has_c4": "Has C4", - "damage_this_round": "Damage this round", - "kevlar_helmet": "Kevlar + helmet", - "kevlar_only": "Kevlar only", - "bomb_dropped": "Bomb dropped", - "bomb_planted_label": "Bomb planted", - "bomb_dropped_by": "By {name}", - "kit_dropped_by": "Dropped by {name}", - "unknown_player": "unknown", - "kill_filter_by_title": "Showing kills BY player — click to switch to deaths OF player", - "kill_filter_of_title": "Showing deaths OF player — click to switch to kills BY player" - }, - "player_details_panel": { - "stats_unavailable": "Stats unavailable for this match.", - "map_label": "Map", - "all_maps": "All", - "map_not_played": "This map was not played" - }, - "player_strip": { - "highlights": "Highlights", - "overflow_more": "+{count} more", - "default_clip_title": "Highlight", - "kills": "Kills", - "deaths": "Deaths", - "assists": "Assists", - "adr": "ADR", - "hs_pct": "HS%", - "kd": "K/D" - }, - "side_filter": { - "all": "All" - }, - "source_badge": { - "imported_external": "Imported from an external source — not a 5stack match" - }, - "scoreboard_overlay": { - "final": "Final", - "live": "Live" - }, - "admin_bar": { - "rcon_unavailable": "RCON unavailable", - "not_controllable": "Match is not in a controllable state." - } - }, - "ui": { - "tooltips": { - "fullscreen": "Fullscreen", - "toggle_right_sidebar": "Toggle Right Sidebar", - "view_steam_profile": "View Steam Profile", - "zoom_in": "Zoom In", - "zoom_in_scroll": "Zoom In (Ctrl/Cmd + Scroll)", - "zoom_out": "Zoom Out", - "zoom_out_scroll": "Zoom Out (Ctrl/Cmd + Scroll)", - "loading": "Loading", - "settings_section": "Settings section", - "match_section": "Match section", - "database_section": "Database section" - }, - "logs": { - "title": "Server Logs", - "timestamps": "Show Timestamps", - "jump_to_live": "Jump to Live", - "download_visible": "Download visible logs", - "download_full": "Download full logs", - "empty": "No logs yet", - "empty_hint": "Logs will appear here once the service starts streaming output." - }, - "scroll": { - "left": "Scroll left", - "right": "Scroll right" - }, - "toggle_sidebar": "Toggle Sidebar", - "volume": "Volume", - "unmute": "Unmute", - "mute": "Mute", - "edit_title": "Edit title", - "tournament_match": "Tournament match", - "pin_overlay": "Pin as floating overlay", - "open_new_window": "Open in new window", - "playing_in_popout": "Playing in popped-out window", - "focus_window": "Focus window", - "playing_in_pip": "Playing in picture-in-picture", - "return_here": "Return here", - "login_to_watch": "Log in to watch the live stream", - "login_to_watch_action": "Login", - "show_keyboard_shortcuts": "Show keyboard shortcuts", - "hold_to_show_scoreboard": "Hold to show scoreboard", - "close_popout": "Close popout", - "trophy_rack": "Trophy rack", - "click_to_view_tournament": "Click to view tournament", - "auto_clip": "Auto clip", - "create_clip": "Create clip", - "reload_demo": "Reload demo" - }, - "player": { - "performance": { - "description": "Each area is scored out of 100 as your percentile vs every other player — 50 is an average player, higher is better. Hover any label to see what it measures.", - "you": "You", - "compare": "Comparison", - "focus_areas": "Focus Areas", - "provisional": "Provisional", - "not_enough_data": "Not enough games yet to rate this player — play more to unlock your performance breakdown.", - "categories": { - "aim": "Aim", - "positioning": "Positioning", - "utility": "Utility" - }, - "consistency": { - "title": "Consistency", - "description": "Each match gets one overall score (your Aim, Positioning and Utility for that match, combined). This tracks it over your recent matches — a flatter line means more consistent play.", - "overall": "Overall", - "not_enough": "Play a few more matches to see your form trend.", - "rock_solid": "Rock Solid", - "steady": "Steady", - "streaky": "Streaky" - }, - "tiers": { - "subpar": "Subpar", - "average": "Average", - "good": "Good", - "elite": "Elite" - }, - "metrics": { - "accuracy_score": { - "label": "Accuracy", - "coach": "Fewer, more deliberate shots land more often than spraying — slow down and commit to each shot." - }, - "hs_score": { - "label": "Headshots", - "coach": "Keep your crosshair at head level as you hold and clear angles so your first shot is a headshot." - }, - "spotted_score": { - "label": "Spotted Accuracy", - "coach": "Your hit-rate when an enemy is actually visible — pre-aim the spots enemies appear from." - }, - "crosshair_score": { - "label": "Crosshair Placement", - "coach": "Hold head-level pre-aim spots so you barely have to move to land the shot." - }, - "ttd_score": { - "label": "Reaction", - "coach": "Hold tighter angles — the less screen an enemy can appear in, the faster you react and fire." + "maps": { + "veto": { + "pick": "Pick Map" }, - "counter_strafe_score": { - "label": "Counter-Strafing", - "coach": "Tap the opposite key to stop dead before firing — shots while moving are wildly inaccurate." - }, - "survival_score": { - "label": "Survival", - "coach": "Trade your life for value — avoid dry-peeking and over-extending away from your team." - }, - "traded_score": { - "label": "Trade Positioning", - "coach": "Fight near teammates so when you die it gets traded, instead of dying for free." - }, - "kast_score": { - "label": "Round Impact", - "coach": "Do something every round — a kill, assist, survive, or get traded. Empty rounds hurt your team." - }, - "flash_assists_score": { - "label": "Flash Assists", - "coach": "Pop-flash for teammates pushing an angle, not just for yourself." - }, - "blind_score": { - "label": "Flash Effectiveness", - "coach": "Throw flashes that actually blind enemies right before a peek — not over their heads." - }, - "util_eff_score": { - "label": "Utility Damage", - "coach": "Learn a few HE / molotov line-ups for common spots to get real damage out of each nade." - } - } - }, - "player": { - "steam_id": "Steam ID", - "steam": "Steam" - }, - "kick": { - "button": "Kick", - "title": "Kick {name}", - "description": "Removes the player from the server. They can rejoin unless banned. Optionally provide a reason shown to the player.", - "reason_label": "Reason", - "reason_placeholder": "Optional reason...", - "confirm": "Kick Player", - "kicked": "Kicked {name}" - }, - "sanction": { - "button": "Sanction Player", - "typed_player": "{type} Player", - "reason_label": "Reason", - "reason_placeholder": "Enter reason for sanction...", - "reason_description": "Please provide a clear reason for this sanction", - "types": { - "ban_description": "Player is not able to participate in any activity", - "mute_description": "Player cannot use voice chat in game", - "gag_description": "Player cannot use text chat in game", - "silence_description": "Player muted and gagged" - }, - "durations": { - "15_minutes": "15 minutes", - "30_minutes": "30 minutes", - "1_hour": "1 hour", - "1_day": "1 day", - "1_week": "1 week", - "1_month": "1 month", - "permanent": "Permanent" - } - }, - "search": { - "no_players_found": "No Players Found.", - "found_players": "Players Found", - "placeholder": "Search players..." - }, - "sanctions": { - "title": "Sanctions", - "banned": "Banned", - "muted": "Muted", - "gagged": "Gagged", - "silenced": "Silenced", - "duration_label": "Duration", - "select_duration": "Select duration", - "sanctions": "Sanctions", - "expires": "Expires", - "expired_on": "Expired", - "issued": "Issued", - "view_steam": "View ban on Steam", - "permanent": "Permanent", - "active": "Active", - "expired": "Expired", - "cannot_edit_expired": "Expired sanctions can't be edited — add a new one", - "edit": "Edit", - "remove": "Remove", - "edit_title": "End Sanction", - "edit_description": "Set when this sanction lifts.", - "end_time": "End time", - "end_time_hint": "Leave empty to keep this sanction permanent. Set a past date to end it now.", - "clear_date": "Clear date", - "updated": "Sanction updated", - "update_failed": "Failed to update sanction", - "confirm_remove": "Remove Sanction", - "remove_description": "Are you sure you want to remove this sanction? This action cannot be undone.", - "removed": "Sanction removed", - "remove_failed": "Failed to remove sanction", - "abandoned_matches": "Abandoned Matches", - "match": "Match", - "no_sanctions": "No sanctions", - "remove_abandoned": "Remove Abandoned Match", - "confirm_remove_abandoned": "Remove Abandoned Match", - "remove_abandoned_description": "Are you sure you want to remove this abandoned match record? This action cannot be undone.", - "abandoned_removed": "Abandoned match removed", - "abandoned_remove_failed": "Failed to remove abandoned match" - }, - "registration": { - "title": "Register your name", - "description": "This name will be used for all matches / tournaments you participate in.", - "warning": "This name cannot be changed after being submitted", - "name_label": "Name", - "confirm_button": "Confirm Name", - "success": "Name confirmed" + "official": "Official Maps", + "workshop": "Workshop Maps", + "active_duty": "Active Duty" }, - "status": { - "add_friend": "Add as friend", - "vac_banned": "VAC banned on Steam", - "vac_banned_count": "{count} VAC ban(s) on Steam", - "game_banned": "Game banned on Steam", - "game_banned_count": "{count} game ban(s) on Steam" - }, - "change_name": { - "name_label": "Name", - "success": "Changed Players Name", - "request_success": "Requested Name Change" - }, - "pending_imports": { - "title": "Pending CS2 imports", - "importing": "Importing…" - }, - "all_time_peak": "ALL-TIME PEAK" - }, - "maps": { - "label": "Maps", - "veto": { - "pick": "Pick Map" - }, - "official": "Official Maps", - "workshop": "Workshop Maps", - "active_duty": "Active Duty" - }, - "region": { - "form": { - "name": "Name", - "description": "Description", - "update": "Update Region", - "create": "Create Region" - } - }, - "matchmaking": { - "match_types": { - "competitive": { - "description": "The classic 5 vs 5 competitive experience with full team coordination" - }, - "wingman": { - "description": "Team up with a friend and compete in fast-paced 2v2 matches" - }, - "duel": { - "description": "A competitive 1 vs 1 experience, perfect for practicing individual skill" - } - }, - "cancel_matchmaking": "Cancel Matchmaking", - "in_queue_label": "In Queue", - "searching": "Searching", - "elapsed": "Elapsed", - "queue_wait": { - "zero": "0 seconds", - "seconds": "{count} seconds", - "minutes_seconds": "{minutes}m {seconds}s" - }, - "match_found": "Match Found", - "waiting_for_players": "Waiting for Players", - "waiting_on_others": "Waiting on Others", - "confirmed": "Confirmed", - "ready": "Ready", - "locked_in": "Locked In", - "check_in": "Check In", - "go_to_match": "Go to Match", - "toasts": { - "your_veto_title": "Your turn to veto", - "your_veto_desc": "You're up — ban or pick on the match page." - }, - "disable_match_ready_modal_hint": "Don't want this popup?", - "disable_match_ready_modal_action": "Disable in Matchmaking Settings", - "invites": "Invites", - "lobby": { - "access": "Lobby Access", - "access_description": "Controls who can join the lobby. Open allows anyone to join, Friends allows only friends to join, and Invite allows only players you invite to join.", - "leave": "Leave Lobby", - "invite_player": "Invite Player to Lobby", - "access_updated": "Lobby access updated to {access}", - "invited": "Invited", - "waiting_for_players": "Waiting for players to join your lobby. Use the Invite button above to add friends." - }, - "friends": { - "title": "Friends", - "sync": "Sync Friends", - "search_placeholder": "Search friends...", - "invite_to_lobby": "Invite to Lobby", - "remove": "Remove Friend", - "in_match": "In a match", - "in_lobby": "In a lobby", - "in_draft": "In draft lobby", - "playing_cs2": "Playing Counter-Strike 2", - "available": "Available", - "join": "Join", - "live": "Live", - "watch": "Watch", - "accept": "Accept", - "decline": "Decline", - "requested": "Requested", - "cancel_request": "Cancel Request", - "incoming_requests": "Requests", - "sent_requests": "Sent" - }, - "others": { - "title": "Others" - }, - "banned": "You are banned from matchmaking", - "confirm_selection": "Join Queue", - "in_queue": "in queue", - "temp_banned": "You are temporarily banned from matchmaking", - "settings_section": { - "toggle": "Adjust Settings" - }, - "high_latency_warning": "Your latency is too high for competitive matches", - "no_preferred_regions": "Please select at least one preferred region in matchmaking settings" - }, - "game_server": { - "lan_ip": "LAN IP", - "public_ip": "Public IP", - "low_latency": "Low Latency", - "cpu_pinning": "CPU Pinning", - "game_server_versions": "Game Server Versions", - "cs_build": "CS Build", - "update_cs": "Update CS2", - "updating_to": "Updating to {version}", - "update_to_version": "Update to {version}", - "validate_gamedata": "Validate Gamedata", - "note_label": "Note:", - "one_cpu_core": "1 CPU core", - "cpu_reservation_note": " {cores} is reserved for the system on each node to keep it responsive.", - "unpin_build_id": "Use Latest Version", - "use_latest_version": "Use the latest CS2 version automatically", - "pinned_build_id": "Server version pinned", - "unpin_plugin_version": "Use Latest Plugin Version", - "use_latest_plugin": "Use the latest plugin version automatically", - "auto": "Latest", - "current": "current", - "plugin_not_supported": "Plugin version not supported", - "pinned_plugin_version": "Plugin version pinned", - "plugin_version_supports": "Supports", - "plugin_version_published": "Published", - "install_cs": "Install CS2", - "install_csgo": "Install CS:GO", - "update_csgo": "Update CS:GO", - "overprovisioned_warning": "Overprovisioned", - "overprovisioned_warning_description": "You have assigned {total_server_count} possible servers, but your server can only support {max_servers} servers.", - "cpu_model": "CPU Model", - "cpu_sockets": "CPU Sockets", - "cpu_cores_per_socket": "CPU Cores/Socket", - "cpu_threads_per_core": "CPU Threads/Core", - "cpu_frequency_warning": "CPU Max Frequency is less than 3GHz may effect CS2 server performance", - "disks_label": "Disks", - "select_region": "Select Region", - "no_region": "Unassigned", - "remove_node": "Remove Node", - "remove_ports": "Remove Ports", - "mode": { - "use_as_match": "Use as Match Server", - "use_as_gpu_only": "Use as GPU Only" + "region": { + "form": { + "name": "Name", + "description": "Description", + "update": "Update Region", + "create": "Create Region" + } }, - "show_update_logs": "Show Update Logs", - "edit_label": "Edit Label", - "edit_cs2_options": "Edit Video Settings", - "cs2_options": { - "title": "Video Settings", - "description": "Per-node video settings applied when this node hosts a live stream, demo playback, or batch highlight job.", - "section_video": "Video Settings", - "section_video_description": "Tune the rendering quality used while CS2 is captured on this node.", - "preset": { - "title": "Quality preset", - "description": "Auto lets CS2 generate the video config on first launch against the node's actual GPU. The Low / Medium / High presets apply explicit overrides on top of that.", - "auto": "Auto (default)", - "auto_active": "Auto mode — CS2 will generate its own video config on first launch. The fields below are ignored until you pick another preset.", - "low": "Low", - "medium": "Medium", - "high": "High" - }, - "video": { - "resolution": "Render Resolution", - "resolution_desc": "Resolution CS2 renders at on this node. Capture always downsamples to 1080p before encoding — picking 1440p supersamples (renders 1440p → encodes 1080p), trading more GPU for sharper edges and cleaner anti-aliasing in the final stream/clip. Viewers see 1080p either way.", - "aa": { - "label": "Anti-aliasing", - "description": "MSAA renders multiple samples per pixel for clean geometry edges; CMAA2 is a cheaper post-process that softens edges but blurs the image. They're mutually exclusive.", - "off": "Off", - "cmaa": "CMAA2 (cheap)", - "msaa2": "MSAA 2x", - "msaa4": "MSAA 4x", - "msaa8": "MSAA 8x" - }, - "r_texturefilteringquality": "Texture filtering", - "r_texturefilteringquality_desc": "Anisotropic filtering quality. 0 = bilinear, 5 = aniso 16x.", - "shaderquality": "Shader quality", - "shaderquality_desc": "0 = flatter and faster, 1 = complex highlights and reflections.", - "videocfg_shadow_quality": "Shadow quality", - "videocfg_shadow_quality_desc": "Overall shadow detail. Higher tiers improve tactical visibility at the expense of FPS.", - "videocfg_dynamic_shadows": "Dynamic shadows", - "videocfg_dynamic_shadows_desc": "Shadows cast by sun and players. Off saves FPS.", - "videocfg_texture_detail": "Texture detail", - "videocfg_texture_detail_desc": "Texture resolution. Minimal FPS impact with enough VRAM.", - "videocfg_particle_detail": "Particle detail", - "videocfg_particle_detail_desc": "Affects smoke, fire, and Molotov rendering. High improves molly visibility, lowers FPS.", - "videocfg_ao_detail": "Ambient occlusion", - "videocfg_ao_detail_desc": "Soft contact shadows. Competitive setups usually run this off.", - "low": "Low", - "medium": "Medium", - "high": "High", - "very_high": "Very High" - } + "match_access": { + "private": "Private", + "invite": "Invite", + "friends": "Friends", + "open": "Open", + "invite_only_description": "Only invited players can join", + "invite_code_description": "Invite code required to join", + "friends_only_description": "Only your Steam friends can join", + "open_description": "Anyone can join the lobby" + }, + "matchmaking": { + "cancel_matchmaking": "Cancel Matchmaking", + "searching_for_match": "Searching for a {type} match", + "in_queue_label": "In Queue", + "searching": "Searching", + "elapsed": "Elapsed", + "others_searching": "{count} other searching | {count} others searching", + "match_found": "Match Found", + "waiting_for_players": "Waiting for Players", + "waiting_on_others": "Waiting on Others", + "confirmed": "Confirmed", + "ready": "Ready", + "locked_in": "Locked In", + "invites": "Invites", + "lobby": { + "access": "Lobby Access", + "access_description": "Controls who can join the lobby. Open allows anyone to join, Friends allows only friends to join, and Invite allows only players you invite to join.", + "leave": "Leave Lobby", + "invite_player": "Invite Player to Lobby", + "access_updated": "Lobby access updated to {access}" + }, + "friends": { + "title": "Friends", + "sync": "Sync Friends", + "search_placeholder": "Search friends...", + "pending_requests": "Pending Requests", + "invite_to_lobby": "Invite to Lobby", + "invite_to_match": "Invite Player to Match", + "remove": "Remove Friend", + "in_match": "In a match", + "in_lobby": "In a lobby" + }, + "others": { + "title": "Others" + }, + "banned": "You are banned from matchmaking", + "go_to_match": "Go to Match", + "confirm_selection": "Join Queue", + "in_queue": "in queue", + "temp_banned": "You are temporarily banned from matchmaking", + "settings_section": { + "toggle": "Adjust Settings" + }, + "high_latency_warning": "Your latency is too high for competitive matches", + "no_preferred_regions": "Please select at least one preferred region in matchmaking settings" + }, + "game_server": { + "lan_ip": "LAN IP", + "public_ip": "Public IP", + "low_latency": "Low Latency", + "cpu_pinning": "CPU Pinning", + "game_server_versions": "Game Server Versions", + "cs_build": "CS Build", + "update_cs": "Update CS2", + "note_label": "Note:", + "one_cpu_core": "1 CPU core", + "unpin_build_id": "Use Latest Version", + "use_latest_version": "Use the latest CS2 version automatically", + "pinned_build_id": "Server version pinned", + "unpin_plugin_version": "Use Latest Plugin Version", + "use_latest_plugin": "Use the latest plugin version automatically", + "auto": "Latest", + "current": "current", + "plugin_not_supported": "Plugin version not supported", + "pinned_plugin_version": "Plugin version pinned", + "plugin_version_supports": "Supports", + "plugin_version_published": "Published", + "install_cs": "Install CS2", + "install_csgo": "Install CS:GO", + "update_csgo": "Update CS:GO", + "overprovisioned_warning": "Overprovisioned", + "overprovisioned_warning_description": "You have assigned {total_server_count} possible servers, but your server can only support {max_servers} servers.", + "cpu_model": "CPU Model", + "cpu_sockets": "CPU Sockets", + "cpu_cores_per_socket": "CPU Cores/Socket", + "cpu_threads_per_core": "CPU Threads/Core", + "cpu_frequency_warning": "CPU Max Frequency is less than 3GHz may effect CS2 server performance", + "disks_label": "Disks", + "select_region": "Select Region", + "remove_node": "Remove Node", + "show_update_logs": "Show Update Logs", + "edit_label": "Edit Label", + "edit_ports": "Edit Ports", + "edit_ports_description": "Set the allowed port range for this node.", + "port_start": "Start Port", + "port_end": "End Port", + "files": "Files", + "label_placeholder": "Enter node label", + "update_label": "Update Label", + "version_pinning_not_supported": "Version pinning is not supported on this server.", + "validation": { + "end_port_greater_than_start": "End port range must be greater than start port range by at least 2" + }, + "toast": { + "cs_updating": "CS2 is being updated on the node", + "csgo_installing": "CS:GO is being installed on the node", + "ports_updated": "Node Ports Updated", + "label_updated": "Node Label Updated", + "scheduling_updated": "Node Scheduling Updated" + }, + "enable_scheduling": "Enable Scheduling", + "disable_scheduling": "Disable Scheduling", + "enable_node": "Enable Node", + "disable_node": "Disable Node", + "learn_more": "Learn more", + "governor_performance_recommended": "Performance governor is recommended for optimal server performance", + "max_servers": "Max Servers", + "hardware": "Hardware", + "cpu_info_title": "CPU Info", + "cpu_speed": "Speed", + "gpu_present": "GPU Available", + "gpu_not_present": "GPU not available", + "gpu_description": "This node has a graphics card available for server workloads", + "disk_usage": "Disk Usage", + "disk_used": "Used", + "disk_available": "Available" }, - "edit_ports": "Edit Ports", - "edit_ports_description": "Set the allowed port range for this node.", - "region_required_for_ports": "Assign a region to this node before setting its ports.", - "port_start": "Start Port", - "port_end": "End Port", - "files": "Files", - "label_placeholder": "Enter node label", - "update_label": "Update Label", - "version_pinning_not_supported": "Version pinning is not supported on this server.", - "validation": { - "end_port_greater_than_start": "End port range must be greater than start port range by at least 2" + "system_metrics": { + "no_metrics_available": "No Metrics Available", + "node_telemetry": "Node telemetry", + "loading_metrics": "Loading metrics data...", + "no_metrics_description": "No metrics data available for this node yet. Metrics will appear once the node starts reporting data." + }, + "chat": { + "lobby_chat": "Lobby Chat", + "message_placeholder": "Type a message...", + "new_since_last_visit": "New", + "no_participants": "No one else is in this chat yet.", + "no_messages_yet": "No messages yet", + "start_the_conversation": "Say something to start the conversation.", + "jump_to_new": "Jump to new", + "new_messages": "New messages", + "organizers": { + "title": "Organizer Chat", + "no_access": "You do not have access to this page.", + "sidebar_hint": "Chat is available in the right sidebar under the Chats tab." + } }, - "toast": { - "cs_updating": "CS2 is being updated on the node", - "csgo_installing": "CS:GO is being installed on the node", - "validating_gamedata": "Validating gamedata signatures on the node", - "ports_updated": "Node Ports Updated", - "ports_removed": "Node Ports Removed", - "made_gpu_only": "Node Set To GPU Only", - "made_match_node": "Node Set To Match Server", - "label_updated": "Node Label Updated", - "cs2_options_updated": "Video settings updated" + "charts": { + "usage": "Usage", + "mount_os": "OS", + "mount_demos": "Demos" }, - "learn_more": "Learn more", - "governor_performance_recommended": "Performance governor is recommended for optimal server performance", - "max_servers": "Max Servers", - "hardware": "Hardware", - "cpu_info_title": "CPU Info", - "cpu_speed": "Speed", - "gpu_present": "GPU Available", - "gpu_not_present": "GPU not available", - "gpu_description": "This node has a graphics card available for server workloads", - "disk_usage": "Disk Usage", - "disk_used": "Used", - "disk_available": "Available", - "disk_label": "Disk:" - }, - "system_metrics": { - "no_metrics_available": "No Metrics Available", - "node_telemetry": "Node telemetry", - "loading_metrics": "Loading metrics data...", - "no_metrics_description": "No metrics data available for this node yet. Metrics will appear once the node starts reporting data.", - "current": "current", - "percent_used": "{percent}% used", - "col_name": "NAME" - }, - "chat": { - "readonly": "Chat is read-only.", - "lobby_chat": "Lobby Chat", - "message_placeholder": "Type a message...", - "new_since_last_visit": "New", - "no_participants": "No one else is in this chat yet.", - "no_messages_yet": "No messages yet", - "start_the_conversation": "Say something to start the conversation.", - "jump_to_new": "Jump to new", - "new_messages": "New messages", - "organizers": { - "title": "Organizer Chat", - "no_access": "You do not have access to this page.", - "sidebar_hint": "Chat is available in the right sidebar under the Chats tab." + "server": { + "join_server": "Join Server", + "form": { + "label": "Server Label", + "host": "Host", + "region": "Region", + "select_region": "Select Region", + "server_configuration": "Server Setup Type", + "use_game_server_node": "Game Node Server", + "use_manual_host_configuration": "Manual Host Configuration", + "game_server_node": "Game Server Node", + "select_game_server_node": "Select Game Server Node", + "game_server_node_description": "Select a game server node with CS installed", + "type": "Server Type", + "select_type": "Select Server Type", + "game": "Game", + "csgo_ranked_unavailable_title": "Ranked Not Available", + "csgo_ranked_unavailable_description": "Ranked mode is not yet available for CS:GO servers.", + "ranked_server": "Ranked Server", + "ranked_server_description": "Fully managed ranked experience by 5stack.", + "valve_presets": "Valve Presets", + "valve_presets_description": "Choose from casual/competitive and other Valve-presets.", + "connect_password": "Connect Password", + "connect_password_description": "Password required to connect to the server (optional)", + "rcon_password": "RCON Password", + "rcon_password_description": "Leave blank to keep the current password", + "port": "Game Port", + "tv_port": "TV Port", + "update": "Update Server", + "create": "Create Server", + "max_players": "Max Players", + "max_players_description": "The maximum number of players that can connect to the server" + }, + "rcon": { + "console_output": "Console Output", + "no_commands_yet": "No commands executed yet", + "enter_command_hint": "Enter a command above to get started", + "connect_failed": "Failed to connect to game server RCON", + "refresh_match": "Refresh Match", + "metamod_info": "Metamod Info", + "css_info": "CSS Info", + "command_placeholder": "Enter command..." + } }, - "in_chat": "in chat" - }, - "charts": { - "usage": "Usage", - "mount_os": "OS", - "mount_demos": "Demos" - }, - "server": { - "join_server": "Join Server", - "form": { - "identity": "Identity", - "connection": "Connection", - "label": "Server Label", - "host": "Host", - "region": "Region", - "select_region": "Select Region", - "server_configuration": "Server Setup Type", - "use_game_server_node": "Game Node Server", - "use_manual_host_configuration": "Manual Host Configuration", - "game_server_node": "Game Server Node", - "select_game_server_node": "Select Game Server Node", - "game_server_node_description": "Select a game server node with CS installed", - "type": "Server Type", - "select_type": "Select Server Type", - "game": "Game", - "csgo_ranked_unavailable_title": "Ranked Not Available", - "csgo_ranked_unavailable_description": "Ranked mode is not yet available for CS:GO servers.", - "ranked_server": "Ranked Server", - "ranked_server_description": "Fully managed ranked experience by 5stack.", - "valve_presets": "Valve Presets", - "valve_presets_description": "Choose from casual/competitive and other Valve-presets.", - "connect_password": "Connect Password", - "connect_password_description": "Password required to connect to the server (optional)", - "rcon_password": "RCON Password", - "rcon_password_description": "Leave blank to keep the current password", - "port": "Game Port", - "tv_port": "TV Port", - "create": "Create Server", - "max_players": "Max Players", - "max_players_description": "The maximum number of players that can connect to the server" + "components": { + "map_pools": { + "view_on_steam": "View on Steam" + } }, - "rcon": { - "console_output": "Console Output", - "no_commands_yet": "No commands executed yet", - "enter_command_hint": "Enter a command above to get started", - "connect_failed": "Failed to connect to game server RCON", - "refresh_match": "Refresh Match", - "metamod_info": "Metamod Info", - "css_info": "CSS Info", - "command_placeholder": "Enter command...", - "send": "Send" - } - }, - "components": { "map_pools": { - "view_on_steam": "View on Steam" - } - }, - "map_pools": { - "edit_map": "Edit Map" - }, - "validation_extras": { - "min_teams_number": "min teams must be a number", - "max_teams_number": "max teams must be a number", - "max_teams_gt_min": "max teams must be greater than min teams", - "min_max_teams_min_value": "min and max teams must be at least 3 for Round Robin, 4 otherwise", - "team_owner_required": "team owner is required", - "team_name_required": "team name is required", - "short_name_required": "short name is required", - "team_required": "team is required", - "rcon_password_required": "RCON password is required" - }, - "ui_extras": { - "mute": "Mute", - "unmute": "Unmute", - "play": "Play", - "pause": "Pause", - "fullscreen": "Fullscreen", - "exit_fullscreen": "Exit fullscreen", - "fullscreen_f_key": "Fullscreen (F)", - "exit_fullscreen_f_key": "Exit fullscreen (F)", - "enter_fullscreen": "Enter fullscreen", - "hide_hud": "Hide HUD", - "show_hud": "Show HUD", - "visibility_label": "Visibility: {value}", - "visibility_change_hint": "Visibility: {value}. Click to change.", - "quick_overview": "Quick Overview", - "pod_boot": "Pod boot", - "batch_progress": "Batch progress", - "batch_paused": "Paused", - "resume": "Resume", - "delete_clip": "Delete clip", - "play_clip": "Play {title}", - "match_highlights_for_count": "{count} highlights for this match", - "match_highlights_alt": "Match highlights", - "select_team_placeholder": "Select team…", - "select_player_placeholder": "Select player…", - "open_highlight": "Open highlight", - "previous_clip": "Previous clip", - "next_clip": "Next clip", - "hide_xray": "Hide x-ray", - "show_xray": "Show x-ray" - }, - "branding": { - "site_title_suffix": "Counter-Strike Management System" - }, - "validation": { - "map_pool_required": "Map pool is required", - "date_must_be_future": "Date must be in the future", - "label_required": "Label is required", - "label_too_long": "Label must be less than 50 characters" - }, - "game_type_configs": { - "form": { - "cfg": "Config", - "create": "Create Config", - "update": "Update Config", - "revert_to_defaults": "Revert to Defaults", - "revert_confirm": { - "title": "Revert to Defaults", - "description": "Are you sure you want to revert this config to its default values? This action cannot be undone.", - "confirm": "Revert" - }, - "success": { - "create": "Config created successfully", - "update": "Config updated successfully", - "revert": "Config reverted to defaults successfully" - }, - "error": { - "create": "Error creating config", - "update": "Error updating config", - "revert": "Error reverting config to defaults" - } - } - }, - "streams": { - "move_to_global_view": "Move to global view", - "section_title": "Live Streams", - "section_description": "Manage the live stream links for this match. These links are shown to viewers and casters.", - "no_streams_title": "No Live Streams", - "no_streams": "No live streams are currently available for this match.", - "add": "Add Stream", - "add_new": "Add New Stream", - "add_description": "Add a new stream link for this match.", - "added_successfully": "Stream Added", - "stream_added_message": "The stream has been added successfully.", - "add_error": "Failed to add stream. Please try again.", - "update": "Update Stream", - "edit_stream": "Edit Stream", - "edit_description": "Update the stream information.", - "updated_successfully": "Stream Updated", - "stream_updated_message": "The stream has been updated successfully.", - "update_error": "Failed to update stream. Please try again.", - "deleted_successfully": "Stream Deleted", - "stream_deleted_message": "The stream has been deleted successfully.", - "delete_error": "Failed to delete stream. Please try again.", - "priority_update_error": "Failed to update stream priorities. Please try again.", - "link": "Link", - "title": "Title", - "stream_title_placeholder": "Stream Title", - "live_badge": "LIVE", - "booting_badge": "BOOTING", - "mode_live": "Direct", - "mode_tv": "TV" - }, - "stream_deck": { - "match_status_wait": "match is {status} — wait for it to go live", - "no_server_assigned": "no server assigned for this match", - "server_offline_waiting": "server is offline — waiting for it to come online", - "no_server": "no server", - "server_assigned": "server assigned", - "off_air": "Off air", - "on_air": "On Air", - "control": "Control", - "in_window": "In window", - "reconnect": "Reconnect", - "switch_short": "Switch", - "switch_to_match": "Repoint this pod to another live match", - "switch_pick_match": "Switch broadcast to…", - "bring_window_to_front": "Bring window to front", - "observer_target": "Observer target", - "live_matches": "Live matches", - "click_another_match": "Click another match to reuse the pod", - "no_live_matches": "No live matches", - "open_broadcast_controls": "Open broadcast controls", - "back_to_deck": "Back to deck", - "scoreboard": "Scoreboard", - "shortcuts": "Shortcuts", - "spectator": { - "slot": "Slot {slot}", - "slot_waiting": "Slot {slot} · waiting for player…", - "take_manual_control": "Click to take manual control" - }, - "page_title": "Stream Deck", - "page_description": "Take over a GPU to broadcast a live match, switch destinations, and run the auto-director.", - "capacity": "Capacity", - "full": "Full", - "off_air_description": "No active game-streamer broadcast. Pick a live match below to take over a GPU and start streaming.", - "auto_director": "Auto-director", - "stop": "Stop", - "playing_in_popout": "Playing in pop-out", - "preview_paused": "Preview is paused here so the focus window owns the stream.", - "cycle": "Cycle", - "prev": "Prev", - "next": "Next", - "use_keyboard": "Use keyboard", - "match_count": "{count} match | {count} matches", - "tiles_hint": "Tiles will appear here as soon as a match goes Live.", - "offline": "offline", - "exit": "Exit", - "swap_sides": "Swap sides (manual override)", - "refresh_hud": "Refresh HUD (reload player images)", - "autodirector_on": "Auto-director is on.", - "autodirector_hint": "CS2 is choosing the camera — clicking a target or pressing a key will turn this off and take manual control." - }, - "system_metrics_extras": { - "gpu_usage": "GPU usage", - "gpu_vram_usage": "GPU VRAM Usage", - "live_performance_timeline": "Live performance timeline", - "memory": "Memory", - "network": "Network" - }, - "rcon": { - "console": "RCON Console", - "suggestions": "Suggestions" - }, - "game_server_node": { - "set_ports": "Set Ports" - }, - "file_manager_extras": { - "close": "Close", - "close_others": "Close Others", - "close_to_right": "Close to Right", - "close_to_left": "Close to Left", - "upload_cancelled": "Upload cancelled", - "upload_complete": "Upload complete" - }, - "database_extras": { - "all_tables": "All tables", - "details": "Details", - "modal_description": "Detailed query statistics and execution plan visualization" - }, - "demo_network_limiter": { - "network_limit": "Network limit (Mbps)", - "unlimited": "Unlimited", - "unlimited_short": "Unlimited", - "title": "Demo Network Limiter", - "description": "Configure the network speed limit for demo file downloads", - "updated": "Network limiter updated" - }, - "clips": { - "editor": { - "title": "Clip Editor", - "auto": "Auto", - "auto_current_spectator": "Auto (current spectator)", - "no_players_yet_demo": "No players yet — wait for the demo to start.", - "split": "Split", - "delete": "Delete", - "close": "Close", - "segments": "Segments", - "title_label": "Title", - "resolution": "Resolution", - "render": "Render", - "add": "Add", - "stop": "Stop", - "preview": "Preview", - "drag_rail_hint": "click + drag empty rail to add range", - "pov_hint": "click chip to switch the spectated player" - }, - "detail": { - "default_title": "Highlight", - "visibility": "Visibility", - "signal_lost": "Signal lost", - "clip_not_found": "Clip not found", - "clip_not_found_description": "It may have been deleted, or you don't have permission to view it.", - "title_label": "Title", - "other_clips": "Other clips", - "view_match": "View match", - "highlight_clip_viewer": "Highlight clip viewer", - "render_finalizing": "Render finalizing…", - "just_now": "just now" - }, - "render_queue": { - "queued": "Queued", - "cancel": "Cancel", - "render": "Render", - "upload": "Upload", - "recently_finished": "Recently Finished", - "status_rendering": "Rendering on {count} GPU | Rendering on {count} GPUs", - "status_paused": "Paused", - "status_no_gpu_registered": "No GPU nodes registered", - "status_no_gpu_free": "Waiting for free GPU", - "status_blocked_live": "Waiting — live stream in progress", - "status_blocked_demo": "Waiting — demo session in progress", - "status_paused_active_match": "Renders paused — match live on GPU", - "status_idle": "Idle", - "status_waiting": "Waiting", - "resume_blocked_live": "Can't resume — a live stream is currently using the GPU", - "unknown_match": "Unknown match", - "open_match": "Open match", - "retry_failed": "Retry failed", - "render_pod_booting": "Render pod booting", - "requeue_clip": "Re-queue clip", - "preview_clip": "Preview clip", - "view_logs": "View render job logs", - "hide_clips": "Hide clips", - "show_all_clips": "Show all {count} clips", - "clear_all": "Clear all", - "clear_batch": "Clear batch", - "show_less": "Show less", - "show_more": "Show {count} more", - "empty_title": "Render queue is empty", - "empty_description": "Highlight render jobs queued from matches will show up here while they boot, render, and upload.", - "done_count": "{done}/{total} done", - "err_count": "{count} err", - "queued_count": "{count} queued", - "clip_count": "{count} clips", - "done_only_count": "{count} done", - "cancelled_count": "{count} cancelled", - "retry_failed_count": "Retry failed ({count})", - "retry_all_clips": "Retry all {count} clips" + "edit_map": "Edit Map" }, - "create_dialog": { - "title": "Auto Clip", - "description": "Pick a player and a preset — the server scans the match's parsed kills, builds the segments, and renders an mp4.", - "player": "Player", - "pick_player_placeholder": "Pick a player to highlight", - "no_players_yet": "No players found yet — wait for the demo to start playing, then try again.", - "other_group": "Other", - "preset": "Preset", - "title_label": "Title", - "title_placeholder": "Defaults to preset name", - "resolution": "Resolution", - "submit": "Generate highlights" - }, - "presets": { - "multikills": "Multi-kills", - "multikills_hint": "Every round with 2+ kills, trimmed to the action", - "best_round": "Best round", - "best_round_hint": "Single round with the most kills", - "knife": "Knife kills", - "knife_hint": "Each knife frag with a 5s lead-in", - "recap": "Match recap", - "recap_hint": "Every round the player got at least one kill" - }, - "render_progress": { - "render": "Render", - "upload": "Upload", - "cancel_render": "Cancel render", - "download": "Download", - "open_clip": "Open clip", - "open_library": "Open library", - "close": "Close" - }, - "ct": "(CT)", - "t": "(T)", - "untitled_clip": "Untitled clip", - "delete_dialog": { - "title": "Delete this clip?", - "description": "The clip is removed from the library and the underlying file is deleted. This cannot be undone.", - "deleting": "Deleting…", - "delete": "Delete" - }, - "featured_highlight": "Featured highlight", - "match_highlight": "Match highlight", - "default_clip": "clip", - "default_player": "Player", - "clip_count": "clip | clips", - "details": "Details", - "link_copied": "Link copied!", - "share_clip": "Share clip", - "open_details": "Open {title} details", - "open_player_profile": "Open {name}'s profile", - "kills_in_clip": "{count} kill in clip | {count} kills in clip", - "plays_count": "{count} play | {count} plays", - "now_playing": "Now playing", - "selected": "Selected", - "visibility": { - "public": "Public", - "public_hint": "Listed in the highlights feed", - "private": "Private", - "private_hint": "Hidden from feeds — file URL still plays if shared" - }, - "no_highlights_from_map": "No highlights from this map.", - "render_dialog": { - "title": "Render highlight", - "description": "Queue a one-click highlight from a demo on this match.", - "map": "Map", - "pick_map": "Pick a map", - "no_moments": "No highlight-worthy moments for {target} on this map.", - "this_player": "this player", - "queue_render": "Queue render" - } - }, - "time_ago": { - "just_now": "just now", - "minutes": "{n}m ago", - "hours": "{n}h ago", - "days": "{n}d ago", - "weeks": "{n}w ago", - "months": "{n}mo ago" - }, - "player_match": { - "tournament": "Tournament", - "maps_count": "{count} maps", - "headers": { - "date": "Date", - "type": "Type", - "result": "Result", - "map": "Map", - "rating": "HLTV Rating", - "elo": "Elo" - }, - "source": { - "internal": "5Stack", - "external": "External" - }, - "view_short": "View", - "premier": "Premier", - "competitive": "Competitive", - "wingman": "Wingman" - }, - "breadcrumbs": { - "dashboard": "dashboard" - }, - "pod_logs": { - "tail_since": "tail // since" - }, - "elo_change": { - "win": "WIN", - "loss": "LOSS", - "maps": "MAPS", - "damage": "DAMAGE", - "score": "SCORE", - "impact": "IMPACT", - "current": "CURRENT", - "updated": "UPDATED", - "series_multiplier": "SERIES MULTIPLIER", - "team_elo": "TEAM ELO", - "kda": "KDA", - "kda_breakdown": "K / D / A", - "perf": "PERF" - }, - "stat": { - "level": { - "best": "Best", - "above_average": "Above average", - "below_average": "Below average", - "poor": "Poor" - } - }, - "draft_games": { - "nav_label": "Draft Lobby", - "create_custom_match": "Host Draft Room", - "leader_required": "Only the party leader can create a match.", - "rehost": "Re-host Last", - "rehost_hint": "Re-create your last lobby with the same settings", - "search_placeholder": "Search by any player...", - "no_results": "No matches fit your filters.", - "filters": { - "avg_rank": "Avg Rank", - "has_space": "Has Space", - "any": "Any", - "clear": "Clear ({count})" - }, - "sort": { - "filling": "Closest to Full", - "newest": "Newest", - "rank_high": "Rank: High", - "rank_low": "Rank: Low" - }, - "empty": "No open matches. Create one to get started.", - "create": { - "captain_selection": "Captain Selection", - "draft_order": "Draft Order", - "rank_gate": "Rank Gate (optional)", - "start": "Start", - "deploy": "Create", - "require_approval": "Require Approval", - "require_approval_desc": "Players request to join — you pick who plays from the queue.", - "host_only": "Host Only", - "host_only_desc": "Create and manage this lobby without being added as a player.", - "keep_lobby": "Keep Lobby Together", - "keep_lobby_desc": "Your {count} lobby players join on the same team.", - "access": "Lobby Access", - "teams": "Teams", - "no_formats": "Duel has no formats — it's always auto-split 1v1.", - "teams_desc": "A single team is required. The second team is optional — leave it open for a team-against-the-world match.", - "team_1_required": "Team 1 (required)", - "team_2_optional": "Team 2 (optional)", - "team_1_required_error": "Select at least one team before creating.", - "inner_squad": "Inner Squad", - "inner_squad_on_desc": "Split this team's roster across both sides for an intra-squad scrim.", - "inner_squad_off_desc": "Fill one side from this team and leave the other open for outside players.", - "roster_desc": "Starters are filled in automatically — tap a player to swap them between the lineup and the bench. Members can also be swapped in the lobby.", - "starting": "Starting", - "bench": "Bench", - "no_roster": "No roster members found.", - "clear_team": "Clear team", - "both_teams_private": "With both teams set the lineup is locked, so this lobby stays private.", - "step_format": "Draft Mode", - "step_settings": "Match Settings", - "step_rules": "Lobby Rules", - "back": "Back", - "next": "Next" - }, - "host": "The host", - "invite": { - "invited_you": "invited you to their", - "lobby": "lobby" - }, - "captain_selection": { - "top_elo_two": "Top 2 by Rank", - "host_and_next": "Host & Next Highest", - "random_two": "Random Two", - "manual": "Manual" - }, - "draft_order": { - "snake": "Snake (1-2-2-1)", - "alternating": "Alternating (1-2-1-2)", - "front_loaded": "Front-Loaded (1-2-2-1-2-1)" - }, - "card": { - "pool": "Pool", - "region": "Region", - "custom": "Custom", - "pending_requests": "Pending requests", - "players": "Players", - "subs": "Subs", - "requests": "Requests", - "join_party": "Join w/ Party ({count})", - "join_party_hint": "Bring your whole matchmaking party into this lobby", - "join": "Join", - "view": "View", - "request": "Request", - "requested": "Requested", - "join_error": "Failed to join the match. Please try again." - }, - "room": { - "team": "Team {team}", - "pool": "Available Players", - "captain": "Captain", - "pick": "Pick", - "empty_pool": "All players have been drafted", - "leave": "Leave", - "loading": "Loading draft room...", - "avg": "Avg", - "open_slot": "Open Slot", - "draft_log": "Draft Log", - "log_picked": "picked", - "log_empty": "No picks yet.", - "team_alpha": "Team 1", - "team_bravo": "Team 2", - "squad_ready": "Squad Ready", - "expires_in": "Lobby Expires In", - "extend": "Keep the room open for another 30 minutes", - "host_assigning": "Host Assigning Teams", - "host_hint": "Fill the open slots above to add players straight to a team.", - "make_captain": "Make captain", - "choose_captains": "Choose Captains", - "choose_captains_hint": "Pick a captain for each team to start the draft.", - "pick_captains": "Choose Captains", - "captain_picking": "{name} is picking…", - "your_pick": "Your Pick", - "alpha_picking": "Team 1 Picking", - "bravo_picking": "Team 2 Picking", - "standby": "Standby", - "pick_order": "Pick Order", - "on_the_clock": "On The Clock", - "draft": "Draft", - "comms": "Lobby Chat", - "chat_players_only": "Only players can chat during the draft.", - "login_to_chat": "Log in to join the conversation.", - "login": "Log In", - "host_label": "Host", - "avg_rank": "Avg Rank", - "queue": "Join Requests", - "queue_empty": "No pending requests.", - "accept": "Accept", - "accept_backup": "Accept as backup", - "deny": "Deny", - "request": "Request to Join", - "edit_settings": "Edit Settings", - "start_match": "Start Match", - "starting": "Starting…", - "pick_teams": "Select both teams to start", - "vs": "vs", - "copy_invite": "Copy Invite Link", - "invite_copied": "Invite link copied", - "back_to_room": "Back to Draft Room", - "join_prompt": "Jump in — there's an open slot", - "request_prompt": "This lobby needs host approval to join", - "request_pending": "Your request is awaiting host approval", - "waitlist": "Substitutes", - "backups": "Backups", - "waitlist_prompt": "Lobby's full — join the sub queue and auto-fill if a slot opens", - "waitlist_pending": "You're on the sub queue — you'll auto-join when a slot opens", - "join_waitlist": "Join Waitlist", - "leave_waitlist": "Leave Waitlist", - "invite_pending": "You've been invited to this lobby", - "accept_invite": "Accept", - "decline_invite": "Decline", - "invited": "Invited", - "invite_pending_short": "Pending", - "cancel_invite": "Cancel Invite", - "invite_to_draft": "Invite to Draft", - "invite_sent": "Invited {name} to your draft", - "picks_first": "{name} picks first", - "match_starting": "Match Starting — Booting Server", - "assign_all": "Assign All Players", - "need_full": "Waiting For Players", - "search_requests": "Search requests", - "sort_elo_high": "Rank: High", - "sort_elo_low": "Rank: Low", - "sort_recent": "Most Recent", - "add_player_slot": "Add Player", - "search_player": "Search players...", - "current_draft": "Your Draft Room", - "host_room": "{name}'s Draft Room", - "kick": "Kick", - "start_player": "Start", - "go_to_room": "Go To Draft Room", - "min": "Min", - "max": "Max", - "no_matches": "No matching requests", - "cancel_draft": "Cancel Draft", - "cancel_draft_confirm_title": "Cancel this draft room?", - "cancel_draft_confirm_description": "This will close the room for everyone and cannot be undone.", - "kick_confirm_title": "Remove this player?", - "kick_confirm_description": "They will be removed from the draft room.", - "load_failed": "Could not load this draft room.", - "match_settings": "Match Settings" - }, - "bar": { - "region": "Region", - "region_veto": "Region Veto", - "pool": "Map Pool", - "approval": "Approval", - "approval_on": "Required", - "approval_off": "Open", - "players": "Players", - "overtime": "Overtime", - "knife": "Knife Round", - "coaches": "Coaches", - "best_of": "Best Of", - "map_veto": "Map Veto", - "on": "On", - "off": "Off" - }, - "mode": { - "captains": "Captains Draft", - "captains_desc": "Two captains take turns picking players.", - "host": "Host Assigns", - "host_desc": "You build both teams yourself.", - "pug": "Auto-Split", - "pug_desc": "No draft — teams are auto-balanced when the lobby fills.", - "teams": "Pre-Made Teams", - "teams_desc": "Pick two saved teams to face off." - }, - "mode_short": { - "captains": "Captains", - "host": "Host", - "pug": "Auto-Split", - "teams": "Teams" - }, - "access": { - "open": "Open", - "open_desc": "Anyone can find and join from the public list.", - "friends": "Friends", - "friends_desc": "Only friends of players in the lobby can see it.", - "invite": "Invite", - "invite_desc": "Joinable only via the invite link you share.", - "private": "Private", - "private_desc": "Only people you let in — hidden from the list." - }, - "active_alert_title": "You're In A Draft Room", - "active_alert_desc": "You have an active draft room. Jump back in to keep your squad together.", - "toasts": { - "your_pick_title": "It's your pick", - "your_pick_desc": "You're on the clock — draft your next player.", - "removed_title": "Removed from draft", - "removed_desc": "You're no longer in the draft room." - } - }, - "league": { - "created": "League created", - "not_found": "League not found", - "status": { - "Setup": "Setup", - "Active": "Active", - "Archived": "Archived" - }, - "season_status": { - "Setup": "Setup", - "RegistrationOpen": "Registration Open", - "RegistrationClosed": "Registration Closed", - "Live": "Live", - "Playoffs": "Playoffs", - "Finished": "Finished", - "Canceled": "Canceled" - }, - "list": { - "eyebrow": "Competition", - "title": "League", - "subtitle": "Seasonal divisions, weekly match play, promotion and relegation", - "settings": "League Settings" - }, - "history": { - "seasons": "Season history", - "playing_in": "Playing in {season}", - "current_division": "Current division", - "highest_division": "Highest division", - "none": "—" - }, - "divisions": { - "title": "Divisions", - "empty": "No divisions configured yet.", - "add": "Add tier {tier}", - "name_placeholder": "Division name (e.g. Open, Main, Invite)", - "tier_hint": "Tier 1 is the top division. Teams are promoted toward tier 1 and relegated away from it.", - "reorder_hint": "Drag divisions to reorder the ladder. Tier 1 is the top division; teams are promoted toward it and relegated away from it.", - "delete_title": "Delete division?", - "delete_description": "Remove {name} from the ladder. Remaining divisions are renumbered. This cannot be undone." - }, - "seasons": { - "title": "Seasons", - "empty": "No seasons yet.", - "teams_count": "{count} teams", - "deleted": "Season deleted", - "delete_title": "Delete season?", - "delete_description": "Permanently delete {name}, including its registrations, schedule and results. This cannot be undone." - }, - "season_form": { - "title": "Create Season", - "name": "Name", - "name_placeholder": "e.g. Season 1", - "signup_opens": "Signups open", - "signup_closes": "Signups close", - "starts_at": "Season starts", - "weeks": "Match weeks", - "games_per_week": "Games per week", - "auto_format_hint": "Each division's format is chosen automatically from its size: a full round robin when it fits the season's rounds, otherwise a Swiss group.", - "roster_lock_week": "Roster lock week", - "playoff_seats": "Playoff seats", - "min_roster": "Min roster", - "promote": "Promote", - "relegate": "Relegate", - "direct_promote": "Direct promote", - "relegation_up": "Relegation up", - "relegation_down": "Relegation down", - "direct_relegate": "Direct relegate", - "best_of": "Best of", - "playoff_best_of": "Playoff best of", - "default_day": "Default match day", - "default_time": "Default match time", - "weekdays": { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday" - }, - "weeks_hint": "One match week per calendar week from the season start. Teams agree on a time inside each week; unagreed matchups fall back to the default day and time.", - "create": "Create Season", - "created": "Season created", - "no_map_pool": "No active competitive map pool found", - "errors": { - "signup_order": "Signups must open before they close.", - "signup_after_start": "Signups must close before the season starts." - }, - "min_teams_hint": "A division needs at least 4 approved teams to run — smaller divisions are skipped at season start." - }, - "overview": { - "signup_window": "Signup window", - "starts": "Starts", - "weeks": "Match weeks", - "playoff_seats": "Playoff seats", - "roster_locked": "Roster locked", - "roster_locks": "Roster locks {date}", - "format": "Format", - "teams": "Teams", - "playoffs": "Playoffs", - "weeks_count": "{count} weeks", - "across_divisions": "across {count} divisions", - "playoff_seats_count": "{count} seats" - }, - "phases": { - "registration": "Registration", - "regular_season": "Regular Season", - "playoffs": "Playoffs", - "complete": "Complete", - "opens_soon": "Opens soon", - "teams_stat": "{count} teams", - "advance_stat": "{count} advance" - }, - "bracket": { - "regular_season": "Regular Season", - "playoffs": "Playoffs", - "open_full": "Open full view", - "empty": "The bracket appears once the season starts and its tournaments are generated.", - "format": { - "RoundRobin": "Round Robin", - "Swiss": "Swiss", - "SingleElimination": "Single Elim", - "DoubleElimination": "Double Elim" - } - }, - "manage": { - "title": "Settings", - "open": "Open manage tab", - "phase_controls": "Season phase", - "current": "Current", - "registrations": "Registrations", - "danger_zone": "Danger zone" - }, - "tabs": { - "overview": "Overview", - "teams": "Teams", - "schedule": "Schedule", - "standings": "Standings", - "playoffs": "Playoffs", - "bracket": "Bracket", - "movements": "Movements", - "stats": "Stats" - }, - "actions": { - "open_registration": "Open Registration", - "close_registration": "Close Registration", - "reopen_registration": "Reopen Registration", - "start_season": "Start Season", - "cancel_season": "Cancel Season" - }, - "join": { - "title": "Register your team", - "title_admin": "Register a team", - "team": "Team", - "pick_team": "Pick a team", - "requested_division": "Requested division", - "assign_division": "Assign division (auto-approves)", - "no_preference": "No preference", - "roster": "Season roster ({selected} selected, minimum {min})", - "roster_range": "Season roster ({selected} selected · {min}–{max} players)", - "group": { - "starters": "Starters", - "substitutes": "Substitutes", - "benched": "Benched" - }, - "available": "Available", - "min_roster_warning": "Select at least {min} players to register.", - "register": "Register", - "registered": "Team registered", - "no_teams": "You don't manage any teams that can register. Create a team first.", - "cta_hint": "Register a team you manage and lock in its season roster." - }, - "my_team": { - "title": "My team — {team}", - "add_players": "Add player", - "make_starter": "Make starter", - "make_sub": "Move to substitutes", - "subs_full": "Bench is full ({max} max)", - "lineup_full": "Lineup is full ({max} starters)", - "no_starters": "No starters yet — add players to fill your lineup.", - "roster_changes": "Roster changes", - "withdraw": "Withdraw from season", - "declined": "Your registration was declined.", - "declined_with_reason": "Your registration was declined: {reason}", - "resubmit": "Resubmit for review" - }, - "registration_status": { - "Pending": "Pending", - "Approved": "Approved", - "Waitlisted": "Waitlisted", - "Declined": "Declined" - }, - "registrations": { - "search": "Search team", - "all_statuses": "All statuses", - "team": "Team", - "roster": "Roster", - "division": "Division", - "status": "Status", - "actions": "Actions", - "empty": "No teams registered yet.", - "unassigned": "Unassigned", - "assign_to_approve": "Assign a division to approve", - "requested": "requested", - "approve_needs_division": "Assign a division before approving this team.", - "approve_needs_roster": "Team needs at least {min} players before it can be approved.", - "approve": "Approve", - "waitlist": "Waitlist", - "decline": "Decline", - "decline_title": "Decline registration?", - "decline_reason_hint": "Optionally tell the team why. They can resubmit while registration is open.", - "decline_reason_placeholder": "Reason (optional)", - "players": "players", - "remove": "Remove", - "remove_title": "Remove team from season?", - "remove_description": "The team is withdrawn and all of its remaining matchups are forfeited to the opponents. This cannot be undone.", - "removed": "Team removed from the season" - }, - "schedule": { - "week": "Week {week}", - "season_number": "Season {number}", - "default_time": "Default", - "my_matches": "My matches", - "no_matches_filter": "No matches match these filters.", - "unscheduled_count": "{count} unscheduled", - "needs_you": "{count} need you", - "filter": { - "all": "All", - "unscheduled": "Unscheduled", - "scheduled": "Scheduled", - "finished": "Finished" - }, - "no_matchups": "No matchups this week.", - "bye": "Bye (free win)", - "unscheduled": "Unscheduled", - "view_match": "View match", - "propose": "Propose time", - "propose_new": "Propose new time", - "proposed": "Time proposed", - "propose_title": "Propose a match time", - "propose_description": "Pick a time between {from} and {to}. The opposing captain must accept.", - "message_placeholder": "Message (optional)", - "outside_window": "The proposed time is outside the match week window.", - "proposed_by": "by", - "accept": "Accept", - "counter": "Counter", - "decline": "Decline", - "awaiting_opponent": "Waiting on opponent", - "winner": "Winner", - "defaults_to": "Auto-scheduled {time} if no time is agreed", - "history": "Past proposals ({count})", - "status_chip": { - "needs_scheduling": "Needs scheduling", - "scheduled": "Scheduled", - "finished": "Finished" - }, - "status": { - "Accepted": "Accepted", - "Declined": "Declined", - "Countered": "Countered", - "Superseded": "Superseded", - "Expired": "Expired" - }, - "forfeit": "Forfeit", - "forfeit_win": "Award win to {team}", - "forfeit_awarded": "Forfeit awarded", - "not_started": "The season hasn't started yet — the schedule appears once divisions are seeded." - }, - "schedule_task": { - "schedule_title": "Schedule your match", - "respond_title": "A match time was proposed", - "confirm_title": "Confirm your match time", - "context": "Season {season} · Week {week}", - "more": "{count} more" - }, - "standings": { - "team": "Team", - "record": "W–L", - "rounds": "Rounds", - "round_diff": "RD", - "remaining": "Left", - "playoffs": "Playoffs", - "search": "Search team", - "empty": "No results yet.", - "removed": "Removed", - "open_tournament": "Open tournament", - "legend": { - "advances": "Advances to playoffs (top {n})", - "cutoff": "Playoff cutoff", - "your_team": "Your team", - "all_advance": "Every team advances to playoffs" - } - }, - "playoffs": { - "view_bracket": "View bracket", - "pending": "Playoff bracket is seeded when the regular season completes.", - "not_started": "Playoffs haven't started yet.", - "scheduling": "{division} · playoff scheduling" - }, - "movements": { - "rank": "Rank", - "team": "Team", - "movement": "Movement", - "override": "Override", - "status": "Status", - "empty": "No movements computed yet.", - "keep_computed": "Keep computed", - "approved": "Approved", - "pending": "Pending review", - "approve_all": "Approve all movements", - "approved_all": "Movements approved", - "relegation_playoffs": "Relegation playoffs", - "playoff_resolved": "Resolved", - "bands": { - "RelegationUp": "Relegation playoff (up)", - "RelegationDown": "Relegation playoff (down)" - } - }, - "settings": { - "title": "Season setup", - "hint": "Almost everything stays editable — only the match-week count and games per week lock once the season starts (they define the brackets).", - "schedule": "Schedule", - "dates": "Dates", - "locked_started": "Locked — season started", - "weeks_count": "Match weeks", - "games_per_week": "Games per week", - "signup_opens": "Signups open", - "signup_closes": "Signups close", - "starts_at": "Season starts", - "roster_lock": "Roster locks" - }, - "series": { - "title": "Series format", - "week_title": "Regular season (per week)", - "playoff_title": "Playoffs (per round)", - "hint": "Changes apply to matches that haven't been created yet — already scheduled matches keep their format.", - "save": "Save series format", - "saved": "Series format saved", - "third_place_match": "Third-place decider match", - "bracket_type": "Bracket type", - "advance_count": "Teams that advance", - "advance_hint": "How many per division make the playoff bracket.", - "structure_locked": "The bracket type and decider match are locked once the season starts; series length stays editable.", - "stage_types": { - "SingleElimination": "Single Elimination", - "DoubleElimination": "Double Elimination" - } - }, - "stats": { - "player": "Player", - "team": "Team", - "maps": "Maps", - "kdr": "K/D", - "empty": "No stats yet — they appear once league matches are played." - }, - "rollover": { - "create_next": "Create next season", - "created": "{name} created" - }, - "restart": { - "action": "Restart season", - "done": "Season restarted" - }, - "readiness": { - "title": "Season readiness", - "division_sizes": "Division sizes", - "rosters_ok": "All registered teams meet the minimum roster size", - "rosters_thin": "Teams below the minimum roster size" - }, - "about": { - "title": "How the league works", - "register": "Register your team while signups are open and pick the players on your season roster.", - "placement": "Admins review registrations and place teams into skill divisions. Returning teams keep their earned division.", - "weekly": "Each week you get one matchup. Either captain proposes a time inside the match week and the opposing captain accepts — you can renegotiate until the match goes live.", - "default_night": "If no time is agreed, the match defaults to the league's match night for that week.", - "roster_lock": "Rosters lock partway through the season — only rostered players can play league matches, and a player can only be on one team per season.", - "playoffs": "The top teams from the standings qualify for the playoff bracket; captains schedule playoff matches the same way.", - "movement": "Final standings decide promotion and relegation between divisions for next season." - }, - "confirm": { - "cancel_season_title": "Cancel this season?", - "cancel_season_description": "Cancelling ends the season for every team: registrations close, all remaining matches are called off, and the season cannot be restarted.", - "withdraw_title": "Withdraw from the season?", - "withdraw_description": "Your team gives up its spot in this season. If registration is still open you can register again, but your place and division assignment are not held." + "validation": { + "map_pool_required": "Map pool is required", + "date_must_be_future": "Date must be in the future", + "label_required": "Label is required", + "label_too_long": "Label must be less than 50 characters" + }, + "game_type_configs": { + "configuration_title": "{type} Configuration", + "form": { + "cfg": "Config", + "create": "Create Config", + "update": "Update Config", + "revert_to_defaults": "Revert to Defaults", + "revert_confirm": { + "title": "Revert to Defaults", + "description": "Are you sure you want to revert this config to its default values? This action cannot be undone.", + "confirm": "Revert" + }, + "success": { + "create": "Config created successfully", + "update": "Config updated successfully", + "revert": "Config reverted to defaults successfully" + }, + "error": { + "create": "Error creating config", + "update": "Error updating config", + "revert": "Error reverting config to defaults" + } + } }, - "calendar": { - "month": "Month", - "agenda": "Agenda", - "times_in": "Times in", - "default_night": "Default night", - "default_short": "Default", - "needs_you": "Needs you", - "all_clear": "Nothing is waiting on you. Every match this season has a time.", - "upcoming": "Upcoming", - "no_upcoming": "No matches left to play.", - "more": "more", - "status": { - "won": "Won", - "lost": "Lost", - "played": "Played", - "live": "Live now", - "pending-me": "They proposed", - "pending-them": "Awaiting opponent", - "agreed": "Agreed", - "default": "Not scheduled", - "bye": "Bye", - "unscheduled": "Not scheduled" - }, - "legend": { - "awaiting": "Awaiting you", - "agreed": "Agreed / default", - "won": "Won", - "lost": "Lost", - "window": "Inside your match window" - }, - "table": "All matches", - "search_teams": "Search teams…", - "all_weeks": "All weeks", - "all_statuses": "All statuses", - "no_results": "No matches match these filters.", - "n_unscheduled": "{count} unscheduled", - "n_awaiting": "{count} awaiting a response", - "col": { - "week": "Wk", - "matchup": "Matchup", - "status": "Status", - "time": "Time", - "proposed_by": "Proposed by" - } + "streams": { + "move_to_global_view": "Move to global view", + "section_title": "Live Streams", + "section_description": "Manage the live stream links for this match. These links are shown to viewers and casters.", + "no_streams_title": "No Live Streams", + "no_streams": "No live streams are currently available for this match.", + "add": "Add Stream", + "add_new": "Add New Stream", + "add_description": "Add a new stream link for this match.", + "added_successfully": "Stream Added", + "stream_added_message": "The stream has been added successfully.", + "add_error": "Failed to add stream. Please try again.", + "update": "Update Stream", + "edit_stream": "Edit Stream", + "edit_description": "Update the stream information.", + "updated_successfully": "Stream Updated", + "stream_updated_message": "The stream has been updated successfully.", + "update_error": "Failed to update stream. Please try again.", + "deleted_successfully": "Stream Deleted", + "stream_deleted_message": "The stream has been deleted successfully.", + "delete_error": "Failed to delete stream. Please try again.", + "priority_update_error": "Failed to update stream priorities. Please try again.", + "link": "Link", + "title": "Title", + "stream_title_placeholder": "Stream Title" + }, + "demo_network_limiter": { + "network_limit": "Network limit (Mbps)", + "unlimited": "Unlimited", + "unlimited_short": "Unlimited", + "title": "Demo Network Limiter", + "description": "Configure the network speed limit for demo file downloads", + "updated": "Network limiter updated" } - } }