Main Menu UI Overhaul (#2829)

## Description:

Overhauls the Main Menu UI, visit https://menu.openfront.dev to see
everything.

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

w.o.n
This commit is contained in:
Ryan
2026-01-09 20:26:34 -08:00
committed by GitHub
parent 848a3a5633
commit 5e6c90d9bb
60 changed files with 7671 additions and 4546 deletions
+78 -24
View File
@@ -7,6 +7,7 @@
},
"common": {
"close": "Close",
"back": "Back",
"available": "Available",
"preset_max": "Max",
"summary_send": "Send",
@@ -17,7 +18,9 @@
"cap_tooltip": "Recipients remaining capacity",
"target_dead": "Target eliminated",
"target_dead_note": "You can't send resources to an eliminated player.",
"none": "None"
"none": "None",
"copied": "Copied!",
"click_to_copy": "Click to copy"
},
"main": {
"title": "OpenFront (ALPHA)",
@@ -26,18 +29,28 @@
"checking_login": "Checking login...",
"logged_in": "Logged in!",
"log_out": "Log out",
"create_lobby": "Create Lobby",
"join_lobby": "Join Lobby",
"single_player": "Single Player",
"create": "Create Lobby",
"join": "Join Lobby",
"solo": "Solo Lobby",
"instructions": "Instructions",
"game_info": "Game info",
"wiki": "Wiki",
"privacy_policy": "Privacy Policy",
"terms_of_service": "Terms of Service",
"reddit": "Reddit"
"copyright": "© OpenFront™ and Contributors",
"reddit": "Reddit",
"play": "Play",
"news": "News",
"store": "Store",
"options": "Options",
"keys": "Keys",
"stats": "Stats",
"account": "Account",
"help": "Help",
"menu": "Menu",
"pick_pattern": "Pick a pattern!"
},
"news": {
"see_all_releases": "See all releases",
"github_link": "on GitHub",
"title": "Release Notes"
},
@@ -136,10 +149,11 @@
"bomb_direction": "Atom / Hydrogen bomb arc direction"
},
"single_modal": {
"title": "Single Player",
"title": "Solo",
"random_spawn": "Random spawn",
"allow_alliances": "Allow alliances",
"toggle_achievements": "Toggle achievements",
"sign_in_for_achievements": "Sign in for achievements",
"options_title": "Options",
"bots": "Bots: ",
"bots_disabled": "Disabled",
@@ -150,6 +164,8 @@
"infinite_troops": "Infinite troops",
"compact_map": "Compact Map",
"max_timer": "Game length (minutes)",
"max_timer_placeholder": "Mins",
"max_timer_invalid": "Please enter a valid max timer value (1-120 minutes)",
"disable_nukes": "Disable Nukes",
"enables_title": "Enable Settings",
"start": "Start Game"
@@ -161,11 +177,22 @@
},
"account_modal": {
"title": "Account",
"connected_as": "Connected as",
"stats_overview": "Stats Overview",
"save_progress_title": "Save Your Progress",
"save_progress_desc": "Link your account to keep your stats, rank, and cosmetics safe.",
"link_discord": "Link Discord Account",
"link_via_email_placeholder": "Link via Email",
"link_button": "Link",
"log_out": "Log Out",
"welcome_back": "Welcome Back",
"sign_in_desc": "Sign in to save your stats and progress",
"or": "OR",
"email_placeholder": "Enter your email address",
"get_magic_link": "Get Magic Link",
"linked_account": "Logged in as {account_name}",
"fetching_account": "Fetching account information...",
"logged_in_with_discord": "Logged in with Discord",
"recovery_email_sent": "Recovery email sent to {email}",
"player_id": "Player ID: {id}",
"not_found": "Not Found",
"clear_session": "Clear Session",
"failed_to_send_recovery_email": "Failed to send recovery email",
@@ -177,6 +204,7 @@
"loading": "Loading...",
"error": "Error loading clan stats",
"no_stats": "No clan stats available",
"no_data_yet": "No Data Yet",
"clan": "Clan",
"games": "Games",
"win_score": "Win Score",
@@ -184,7 +212,9 @@
"loss_score": "Loss Score",
"loss_score_tooltip": "Weighted losses based on clan participation and match difficulty",
"win_loss_ratio": "Win/Loss",
"rank": "Rank"
"ratio": "Ratio",
"rank": "Rank",
"try_again": "Try Again"
},
"game_info_modal": {
"title": "Game info",
@@ -263,10 +293,12 @@
"continental": "Continental",
"regional": "Regional",
"fantasy": "Other",
"special": "Special",
"arcade": "Arcade"
},
"map_component": {
"loading": "Loading..."
"loading": "Loading...",
"error": "Error"
},
"private_lobby": {
"title": "Join Private Lobby",
@@ -277,8 +309,9 @@
"checking": "Checking lobby...",
"not_found": "Lobby not found. Please check the ID and try again.",
"error": "An error occurred. Please try again or contact support.",
"joined_waiting": "Joined successfully! Waiting for game to start...",
"version_mismatch": "This game was created with a different version. Cannot join."
"joined_waiting": "Lobby joined! Waiting for host to start...",
"version_mismatch": "This game was created with a different version. Cannot join.",
"disabled_units": "Disabled Units"
},
"public_lobby": {
"join": "Join next Game",
@@ -291,26 +324,32 @@
"teams_hvn": "Humans vs Nations",
"teams_hvn_detailed": "{num} Humans vs {num} Nations",
"teams": "{num} teams",
"players_per_team": "teams of {num}"
"players_per_team": "of {num}",
"started": "Started"
},
"matchmaking_modal": {
"title": "1v1 Ranked Matchmaking (ALPHA)",
"elo": "ELO: {elo}",
"connecting": "Connecting to matchmaking server...",
"searching": "Searching for game...",
"waiting_for_game": "Waiting for game to start..."
"waiting_for_game": "Waiting for game to start...",
"elo": "Your ELO: {elo}"
},
"username": {
"enter_username": "Enter your username",
"not_string": "Username must be a string.",
"too_short": "Username must be at least {min} characters long.",
"too_long": "Username must not exceed {max} characters.",
"invalid_chars": "Username can only contain letters, numbers, spaces, underscores, and [square brackets]."
"invalid_chars": "Username can only contain letters, numbers, spaces, and underscores.",
"tag": "TAG",
"tag_too_short": "Clan tag must be 2-5 alphanumeric characters.",
"tag_invalid_chars": "Clan tag can only contain letters and numbers."
},
"host_modal": {
"title": "Private Lobby",
"title": "Create Private Lobby",
"label": "Private",
"mode": "Mode",
"team_count": "Number of Teams",
"team_type": "Team Type",
"options_title": "Options",
"bots": "Bots: ",
"bots_disabled": "Disabled",
@@ -318,6 +357,7 @@
"nations": "Nations: ",
"disable_nations": "Disable Nations",
"max_timer": "Game length (minutes)",
"mins_placeholder": "Mins",
"instant_build": "Instant build",
"infinite_gold": "Infinite gold",
"donate_gold": "Donate gold",
@@ -339,7 +379,8 @@
"remove_player": "Remove {username}",
"teams_Duos": "Duos (teams of 2)",
"teams_Trios": "Trios (teams of 3)",
"teams_Quads": "Quads (teams of 4)"
"teams_Quads": "Quads (teams of 4)",
"teams_Humans Vs Nations": "Humans vs Nations"
},
"team_colors": {
"red": "Red",
@@ -406,6 +447,7 @@
"anonymous_names_desc": "Hide real player names with random ones on your screen.",
"lobby_id_visibility_label": "Hidden Lobby IDs",
"lobby_id_visibility_desc": "Hide Lobby ID in private lobby creation",
"toggle_visibility": "Toggle Visibility",
"left_click_label": "Left Click to Open Menu",
"left_click_desc": "When ON, left-click opens menu and sword button attacks. When OFF, left-click attacks directly.",
"left_click_menu": "Left Click Menu",
@@ -419,6 +461,7 @@
"easter_writing_speed_desc": "Adjust how fast you pretend to code (x1x100)",
"easter_bug_count_label": "Bug Count",
"easter_bug_count_desc": "How many bugs you're okay with (01000, emotionally)",
"press_a_key": "Press a key",
"view_options": "View Options",
"toggle_view": "Toggle View",
"toggle_view_desc": "Alternate view (terrain/countries)",
@@ -477,7 +520,8 @@
"exit_game_label": "Exit Game",
"exit_game_info": "Return to main menu",
"background_music_volume": "Background Music Volume",
"sound_effects_volume": "Sound Effects Volume"
"sound_effects_volume": "Sound Effects Volume",
"keybind_conflict_error": "The key {key} is already bound to another action."
},
"chat": {
"title": "Quick Chat",
@@ -779,6 +823,7 @@
"colors": "Colors",
"purchase": "Purchase",
"show_only_owned": "My Skins",
"all_owned": "All skins owned! Check back later for new items.",
"not_logged_in": "Not logged in",
"blocked": {
"login": "You must be logged in to access this skin.",
@@ -786,7 +831,9 @@
},
"pattern": {
"default": "Default"
}
},
"select_skin": "Select Skin",
"selected": "selected"
},
"flag_input": {
"title": "Select Flag",
@@ -857,7 +904,7 @@
"mode": "Mode",
"mode_ffa": "Free-for-All",
"mode_team": "Team",
"view": "View",
"replay": "Replay",
"details": "Details",
"ranking": "Ranking",
"started": "Started",
@@ -868,13 +915,20 @@
"player_stats_tree": {
"public": "Public",
"private": "Private",
"singleplayer": "Single Player",
"singleplayer": "Solo",
"mode": "Mode",
"stats_wins": "Wins",
"stats_losses": "Losses",
"stats_wlr": "Win:Loss Ratio",
"stats_games_played": "Games Played",
"mode_ffa": "Free-for-All",
"mode_team": "Team"
"mode_team": "Team",
"no_stats": "No stats recorded for this selection."
},
"matchmaking_button": {
"play_ranked": "1v1 Ranked Matchmaking",
"description": "(ALPHA)",
"login_required": "Login to play ranked!",
"must_login": "You must be logged in to play ranked matchmaking."
}
}