Files
Skigim 32adfa2f79 Add requeue button to Ranked victory/defeat modal (#3121)
## Description:

Adds a "Play Again" requeue button to the victory/defeat modal for
Ranked 1v1 games. When clicked, it navigates the player back to the
homepage and automatically opens the matchmaking modal to queue for
another ranked match.

Changes:

- WinModal.ts: Added isRankedGame state, purple "Play Again" button
(only shown for ranked 1v1), and _handleRequeue() method
- Main.ts: Added ?requeue URL parameter handling to trigger matchmaking
modal on page load
- en.json: Added "requeue": "Play Again" translation string
- added tests to WinModal.test.ts

Note: temporarily set isRanked flag to true to get the modal to pop in a
solo match on dev server and confirmed that ?requeue URL parameter
called _handleRequeue() correctly, which opened the sign in process
since actually signing in and queuing for a ranked match isn't possible
on dev server.

<img width="771" height="364" alt="play-again"
src="https://github.com/user-attachments/assets/6e3f5a02-f1ae-465a-9b28-656126c11d3d"
/>


## 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:

skigim
2026-02-07 12:51:02 -08:00

1018 lines
43 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"lang": {
"en": "English",
"native": "English",
"svg": "uk_us_flag",
"lang_code": "en"
},
"common": {
"close": "Close",
"copy": "Copy",
"back": "Back",
"available": "Available",
"preset_max": "Max",
"summary_send": "Send",
"summary_keep": "Keep",
"cancel": "Cancel",
"send": "Send",
"cap_label": "Cap",
"cap_tooltip": "Recipients remaining capacity",
"target_dead": "Target eliminated",
"target_dead_note": "You can't send resources to an eliminated player.",
"none": "None",
"copied": "Copied!",
"click_to_copy": "Click to copy",
"enabled": "Enabled"
},
"main": {
"title": "OpenFront (ALPHA)",
"join_discord": "Discord",
"login_discord": "Login with Discord",
"sign_in": "Sign in",
"discord_avatar_alt": "Discord profile avatar",
"user_avatar_alt": "{username}'s avatar",
"checking_login": "Checking login...",
"logged_in": "Logged in!",
"log_out": "Log out",
"create": "Create Lobby",
"join": "Join Lobby",
"solo": "Solo",
"instructions": "Instructions",
"game_info": "Game info",
"wiki": "Wiki",
"privacy_policy": "Privacy Policy",
"terms_of_service": "Terms of Service",
"copyright": "© OpenFront™ and Contributors",
"reddit": "Reddit",
"play": "Play",
"news": "News",
"store": "Store",
"store_new_badge": "NEW",
"settings": "Settings",
"keys": "Keys",
"stats": "Stats",
"leaderboard": "Leaderboard",
"account": "Account",
"help": "Help",
"menu": "Menu",
"troubleshooting": "Troubleshooting",
"go_to_troubleshooting": "Go to our troubleshooting page",
"pick_pattern": "Pick a pattern!"
},
"news": {
"github_link": "on GitHub",
"title": "Release Notes"
},
"troubleshooting": {
"title": "Troubleshooting",
"loading": "Loading...",
"environment": "Environment",
"rendering": "Rendering",
"power": "Power",
"browser": "Browser",
"platform": "Platform",
"copied_to_clipboard": "Info copied to the clipboard! Feel free to share it on our Discord if you need help.",
"os": "OS",
"device_pixel_ratio": "Device Pixel Ratio",
"chromium_tip": "OpenFront runs best on Chromium-based browsers.",
"hardware_acceleration_tip": "Make sure hardware acceleration is enabled in your browser settings for optimal performance.",
"renderer": "Renderer",
"max_texture_size": "Max Texture Size",
"high_precision_shaders": "High Precision Shaders",
"gpu": "GPU",
"unavailable": "Unavailable",
"gpu_tip": "Verify that this is the dedicated GPU, if one is available.",
"battery": "Battery",
"charging": "Charging",
"battery_level": "Battery Level",
"power_saving_tip": "Make sure that your browser is not set to power saving mode.",
"yes": "Yes",
"no": "No",
"unknown": "Unknown",
"software_rendering": "Software rendering",
"canvas_2d_no_gpu": "Canvas 2D (no GPU)"
},
"help_modal": {
"video_tutorial": "Video Tutorial",
"video_tutorial_title": "OpenFront.io Tutorial",
"hotkeys": "Hotkeys",
"table_key": "Key",
"table_action": "Action",
"action_alt_view": "Alternate view (terrain/countries)",
"action_attack_altclick": "Attack (when left click is set to open menu)",
"action_build": "Open build menu",
"action_emote": "Open emote menu",
"action_center": "Center camera on player",
"action_zoom": "Zoom out/in",
"action_move_camera": "Move camera",
"action_ratio_change": "Decrease/Increase attack ratio",
"action_reset_gfx": "Reset graphics",
"action_auto_upgrade": "Auto-upgrade nearest building",
"ui_section": "Game UI",
"ui_leaderboard": "Leaderboard",
"ui_your_team": "Your team:",
"ui_leaderboard_desc": "Shows the top players of the game and their names, % owned land, gold and troops. Using Show All shows all players in the game. If you don't want to see the leaderboard, click Hide.",
"ui_control": "Control panel",
"ui_control_desc": "The control panel contains the following elements:",
"ui_pop": "Pop - The amount of units you have, your max population and the rate at which you gain them.",
"ui_gold": "Gold - The amount of gold you have and the rate at which you gain it.",
"ui_attack_ratio": "Attack ratio - The amount of troops that will be used when you attack. You can adjust the attack ratio using the slider. Having more attacking troops than defending troops will make you lose fewer troops in the attack, while having less will increase the damage dealt to your attacking troops. The effect doesn't go beyond ratios of 2:1.",
"ui_events": "Event panel",
"ui_events_desc": "The Event panel displays the latest events, requests and Quick Chat messages. Some examples are:",
"ui_events_alliance": "Alliance - Alliance requests can be accepted or rejected. Allies can share resources and troops, but can't attack each other. Clicking Focus moves the view to the player who sent the request.",
"ui_events_attack": "Attacks - Incoming attacks and your outgoing attacks are shown. Click the message to center the view on the attack, nuke or Boat (transport ship). You can retreat troops by clicking the red X button. This will cost the lives of 25% of your attacking troops. If you retrieve a Boat attack, the boat returns to its starting point and will attack there if the land has been captured since. Nukes can't be retreated once launched.",
"ui_events_quickchat": "Quick Chat - You can see sent and received chat messages here. Send a message to a player by clicking the Quick Chat icon in their Info menu.",
"ui_options": "Options",
"ui_options_desc": "The following elements can be found inside:",
"ui_playeroverlay": "Player info overlay",
"ui_playeroverlay_desc": "When you hover over a country, the Player info overlay is displayed under Options. It shows the type of player: Human, Nation (smart bot), or Bot. A Nation's attitude towards you, ranging from Hostile to Friendly. And defending troops, gold, plus the number of Warships and various buildings the player has.",
"ui_wilderness": "Wilderness",
"option_pause": "Pause/Unpause the game - Only available in single player mode.",
"option_timer": "Timer - Time passed since the start of the game.",
"option_exit": "Exit button.",
"option_settings": "Settings - Open the settings menu. Inside you can toggle the Alternate view, Emojis, Dark Mode, Ninja (anonymous/random names mode), and action on left click.",
"radial_title": "Radial menu",
"radial_desc": "Right clicking (or touch on mobile) opens the Radial menu. Right click outside it to close it. From the menu you can:",
"radial_build": "Open the Build menu.",
"radial_attack": "Open the Attack menu.",
"radial_info": "Open the Info menu.",
"radial_boat": "Send a Boat (transport ship) to attack at the selected location. Only available if you have access to water.",
"radial_donate_troops": "Donate troops equivalent to your attack ratio slider percentage to the ally you opened the radial menu on.",
"radial_donate_gold": "Opens the gold donation slider menu so you can quickly send allies gold.",
"radial_close": "Close the menu.",
"info_title": "Info menu",
"info_enemy_desc": "Contains information such as the selected player's name, gold, troops, stopped trading with you, nukes sent to you, and if the player is a traitor. Stopped trading means you won't receive gold from them and they won't sent you gold via trade ships. Manually (if the player clicked \"Stop trading\", which lasts until you both click \"Start trading\") or automatically (if you betrayed your alliance, which lasts until you become allies again or after 5 minutes). Traitor displays Yes for 30 seconds when the player betrayed and attacked a player who was in an alliance with them. The icons below represent the following interactions:",
"info_chat": "Send a quick chat message to the player. Select a Category, a Phrase, and if the phrase contains [P1] select a Player name to replace it with. Hit Send.",
"info_target": "Place a target mark on the player, marking it for all allies, used to coordinate attacks.",
"info_alliance": "Send an alliance request to the player. Allies can share resources and troops, but can't attack each other.",
"info_emoji": "Send an emoji to the player.",
"info_trade": "Use \"Stop trading\" to stop giving the player gold and receiving their gold via trade ships. If you both click \"Start trading\" it will start again.",
"info_ally_panel": "Ally info panel",
"info_ally_desc": "When you ally with a player, the following new icons become available:",
"ally_betray": "Betray your ally, ending the alliance, halting trade, and weakening your defense. Trading between you is paused for 5 minutes (or until you become allies again) and others may stop trading too. And unless the other player was a traitor themselves, you'll be marked a traitor for 30 seconds. During this time an icon will be above your name and you will have a 50% defense debuff. Bots are less likely to ally with you and players will think twice before doing so.",
"ally_donate": "Donate some of your troops to your ally. Used when they're low on troops and are being attacked, or when they need that extra power to crush an enemy.",
"ally_donate_gold": "Donate some of your gold to your ally. Used when they're low on gold and need it for buildings, or when your team member is saving for that MIRV.",
"build_menu_title": "Build menu",
"build_menu_desc": "Build these or see how many of each you already build:",
"build_name": "Name",
"build_icon": "Icon",
"build_desc": "Description",
"build_city": "City",
"build_city_desc": "Increases your max population. Useful when you can't expand your territory or you're about to hit your population limit.",
"build_factory": "Factory",
"build_factory_desc": "Automatically builds railroads to nearby cities, ports and other factories, and can also link up with friendly neighbors. Trains spawn regularly and give you a fixed amount of gold for each building they visit along the route, with extra gold for visiting your neighbors' buildings.",
"build_defense": "Defense Post",
"build_defense_desc": "Increases defenses around nearby borders, which show a checkered pattern. Attacks from enemies are slower and have more casualties.",
"build_port": "Port",
"build_port_desc": "Can only be built near water. Allows building Warships. Automatically sends trade ships between ports of your country and other countries (except when trade is stopped), giving gold to both sides. Trade with a player stops automatically when you attack or are attacked by a player. It resumes after 5 minutes or if you become allies. You can manually toggle trading with \"Stop trading\" or \"Start trading\".",
"build_warship": "Warship",
"build_warship_desc": "Patrols in an area, capturing enemy trade ships and destroying their Boats (transport ships) and Warships. Spawns from the nearest Port and patrols the area you first clicked to build it. You can control Warships by attack-clicking on them (see action Attack under Hotkeys) and then attack-clicking the new area you want them to move to.",
"build_silo": "Missile Silo",
"build_silo_desc": "Allows launching missiles.",
"build_sam": "SAM Launcher",
"build_sam_desc": "Can intercept enemy missiles in its 100 pixel range. The SAM has a 7.5 second cooldown.",
"build_atom": "Atom Bomb",
"build_atom_desc": "Small explosive bomb that destroys territory, buildings, ships and boats. Spawns from the nearest Missile Silo and lands in the area you first clicked to build it.",
"build_hydrogen": "Hydrogen Bomb",
"build_hydrogen_desc": "Large explosive bomb. Spawns from the nearest Missile Silo and lands in the area you first clicked to build it.",
"build_mirv": "MIRV",
"build_mirv_desc": "The most powerful bomb in the game. Splits up into smaller bombs that will cover a huge range of territory. Only damages the player that you first clicked on to build it. Spawns from the nearest Missile Silo and lands in the area you first clicked to build it.",
"player_icons": "Player icons",
"troubleshooting_desc": "If you experience performance issues, crashes, or other problems while playing OpenFront, please visit our Troubleshooting page for help diagnosing and fixing common issues:",
"icon_desc": "Examples of some of the ingame icons you will encounter and what they mean:",
"icon_crown": "Crown - Number 1. This is the top player in the leaderboard.",
"icon_traitor": "Broken shield - Traitor. This player attacked an ally.",
"icon_ally": "Handshake - Ally. This player is your ally.",
"icon_embargo": "Dollar stop sign - Embargo. This player has stopped trading with you automatically or manually.",
"icon_request": "Envelope - Alliance request. This player has sent you an alliance request.",
"info_enemy_panel": "Enemy info panel",
"exit_confirmation": "Are you sure you want to exit the game?",
"bomb_direction": "Atom / Hydrogen bomb arc direction",
"icon_alt_player_leaderboard": "Player Leaderboard Icon",
"icon_alt_team_leaderboard": "Team Leaderboard Icon"
},
"single_modal": {
"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",
"nations": "Nations: ",
"disable_nations": "Disable Nations",
"instant_build": "Instant build",
"infinite_gold": "Infinite gold",
"infinite_troops": "Infinite troops",
"compact_map": "Compact Map",
"crowded": "Crowded",
"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",
"options_changed_no_achievements": "Custom settings achievements disabled",
"gold_multiplier": "Gold multiplier",
"gold_multiplier_placeholder": "2.0x",
"starting_gold": "Starting gold",
"starting_gold_placeholder": "5000000"
},
"token_login_modal": {
"title": "Logging in...",
"logging_in": "Logging in...",
"success": "Successfully logged in as {email}!"
},
"account_modal": {
"title": "Account",
"connected_as": "Connected as",
"stats_overview": "Stats Overview",
"link_discord": "Link Discord Account",
"log_out": "Log Out",
"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...",
"recovery_email_sent": "Recovery email sent to {email}",
"not_found": "Not Found",
"clear_session": "Clear Session",
"failed_to_send_recovery_email": "Failed to send recovery email",
"enter_email_address": "Please enter an email address",
"personal_player_id": "Personal Player ID:"
},
"leaderboard_modal": {
"title": "Leaderboard",
"title_plural": "Leaderboards",
"clan_stats": "Clan Stats",
"player_stats": "1v1 Ranked Stats",
"ranked_tab": "1v1 Ranked",
"clans_tab": "Clans",
"loading": "Loading...",
"error": "Error loading leaderboard",
"no_stats": "No stats available",
"no_data_yet": "No Data Yet",
"clan": "Clan",
"player": "Player",
"games": "Games",
"elo": "ELO",
"win_score": "Win Score",
"win_score_tooltip": "Weighted wins based on clan participation and match difficulty",
"loss_score": "Loss Score",
"loss_score_tooltip": "Weighted losses based on clan participation and match difficulty",
"win_loss_ratio": "Win/Loss",
"ratio": "Ratio",
"rank": "Rank",
"try_again": "Try Again",
"your_ranking": "Your Ranking"
},
"game_info_modal": {
"title": "Game info",
"players": "Players",
"atoms": "Atoms",
"hydros": "Hydros",
"mirv": "MIRV",
"bombs": "Bombs",
"total_gold": "Total",
"all_gold": "All gold",
"trade": "Trade",
"train_trade": "Train",
"naval_trade": "Tradeship",
"conquest_gold": "Conquered player gold",
"stolen_gold": "Stolen with warships",
"num_of_conquests_humans": "Player kills",
"num_of_conquests_bots": "Bot kills",
"duration": "Duration",
"survival_time": "Survival time",
"war": "War",
"economy": "Economy",
"conquests": "Conquests",
"pirate": "Pirate",
"conquered": "Conquered",
"loading_game_info": "Loading game stats",
"no_winner": "This game ended with no winner (or a Nation won)"
},
"map": {
"map": "Map",
"featured": "Featured",
"all": "All",
"world": "World",
"giantworldmap": "Giant World Map",
"europe": "Europe",
"mena": "MENA",
"northamerica": "North America",
"oceania": "Oceania",
"blacksea": "Black Sea",
"africa": "Africa",
"asia": "Asia",
"mars": "Mars",
"southamerica": "South America",
"britanniaclassic": "Britannia (Classic)",
"britannia": "Britannia",
"gatewaytotheatlantic": "Gateway to the Atlantic",
"australia": "Australia",
"random": "Random",
"iceland": "Iceland",
"pangaea": "Pangaea",
"eastasia": "East Asia",
"betweentwoseas": "Between Two Seas",
"faroeislands": "Faroe Islands",
"deglaciatedantarctica": "Deglaciated Antarctica",
"europeclassic": "Europe (Classic)",
"falklandislands": "Falkland Islands",
"baikal": "Baikal",
"halkidiki": "Halkidiki",
"straitofgibraltar": "Strait of Gibraltar",
"italia": "Italia",
"japan": "Japan",
"yenisei": "Yenisei",
"pluto": "Pluto",
"montreal": "Montreal",
"newyorkcity": "New York City",
"achiran": "Achiran",
"baikalnukewars": "Baikal (Nuke Wars)",
"fourislands": "Four Islands",
"gulfofstlawrence": "Gulf of St. Lawrence",
"lisbon": "Lisbon",
"svalmel": "Svalmel",
"manicouagan": "Manicouagan",
"lemnos": "Lemnos",
"sierpinski": "Sierpinski",
"thebox": "The Box",
"twolakes": "Two Lakes",
"straitofhormuz": "Strait of Hormuz",
"surrounded": "Surrounded",
"didier": "Didier",
"didierfrance": "Didier (France)",
"amazonriver": "Amazon River"
},
"map_categories": {
"featured": "Featured",
"continental": "Continental",
"regional": "Regional",
"fantasy": "Other",
"special": "Special",
"arcade": "Arcade"
},
"map_component": {
"loading": "Loading...",
"error": "Error"
},
"private_lobby": {
"title": "Join Private Lobby",
"enter_id": "Enter Lobby ID",
"player": "Player",
"players": "Players",
"join_lobby": "Join Lobby",
"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": "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": {
"title": "Waiting for Game Start...",
"join": "Join next Game",
"waiting": "players waiting",
"teams_Duos": "{team_count} teams of 2 (Duos)",
"teams_Trios": "{team_count} teams of 3 (Trios)",
"teams_Quads": "{team_count} teams of 4 (Quads)",
"waiting_for_players": "Waiting for players",
"connecting": "Connecting to lobby...",
"starting_in": "Starting in {time}",
"starting_game": "Starting game…",
"teams_hvn": "Humans vs Nations",
"teams_hvn_detailed": "{num} Humans vs {num} Nations",
"teams": "{num} teams",
"players_per_team": "of {num}",
"started": "Started",
"status": "Status",
"join_timeout": "You didn't enter the game in time."
},
"matchmaking_modal": {
"title": "1v1 Ranked Matchmaking (ALPHA)",
"connecting": "Connecting to matchmaking server...",
"searching": "Searching for game...",
"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, 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": "Create Private Lobby",
"label": "Private",
"mode": "Mode",
"team_count": "Number of Teams",
"team_type": "Team Type",
"options_title": "Options",
"bots": "Bots: ",
"bots_disabled": "Disabled",
"player_immunity_duration": "PVP immunity duration (minutes)",
"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",
"infinite_troops": "Infinite troops",
"donate_troops": "Donate troops",
"compact_map": "Compact Map",
"enables_title": "Enable Settings",
"player": "Player",
"players": "Players",
"nation_players": "Nations",
"nation_player": "Nation",
"waiting": "Waiting for players...",
"random_spawn": "Random spawn",
"start": "Start Game",
"host_badge": "Host",
"assigned_teams": "Assigned Teams",
"empty_teams": "Empty Teams",
"empty_team": "Empty",
"remove_player": "Remove {username}",
"teams_Duos": "Duos (teams of 2)",
"teams_Trios": "Trios (teams of 3)",
"teams_Quads": "Quads (teams of 4)",
"teams_Humans Vs Nations": "Humans vs Nations",
"gold_multiplier": "Gold multiplier",
"gold_multiplier_placeholder": "2.0x",
"starting_gold": "Starting gold",
"starting_gold_placeholder": "5000000",
"crowded": "Crowded modifier"
},
"team_colors": {
"red": "Red",
"blue": "Blue",
"teal": "Teal",
"purple": "Purple",
"yellow": "Yellow",
"orange": "Orange",
"green": "Green",
"bot": "Bot"
},
"game_starting_modal": {
"title": "Game is Starting...",
"credits": "Credits",
"code_license": "Code licensed under AGPL-3.0 (no warranty)"
},
"difficulty": {
"difficulty": "Nation difficulty",
"easy": "Easy",
"medium": "Medium",
"hard": "Hard",
"impossible": "Impossible"
},
"game_mode": {
"ffa": "Free for All",
"teams": "Teams",
"humans_vs_nations": "Humans vs Nations"
},
"public_game_modifier": {
"random_spawn": "Random Spawn",
"compact_map": "Compact Map",
"crowded": "Crowded",
"starting_gold": "5M Starting Gold"
},
"select_lang": {
"title": "Select Language"
},
"unit_type": {
"city": "City",
"defense_post": "Defense Post",
"port": "Port",
"warship": "Warship",
"missile_silo": "Missile Silo",
"sam_launcher": "SAM Launcher",
"atom_bomb": "Atom Bomb",
"hydrogen_bomb": "Hydrogen Bomb",
"mirv": "MIRV",
"factory": "Factory"
},
"user_setting": {
"title": "Settings",
"tab_basic": "Basic Settings",
"tab_keybinds": "Keybinds",
"dark_mode_label": "Dark Mode",
"dark_mode_desc": "Toggle the sites appearance between light and dark themes",
"emojis_label": "Emojis",
"emojis_desc": "Toggle whether emojis are shown in game",
"alert_frame_label": "Alert Frame",
"alert_frame_desc": "Toggle the alert frame. When enabled, the frame will be displayed when you are betrayed or attacked over land.",
"special_effects_label": "Special effects",
"special_effects_desc": "Toggle special effects. Deactivate to improve performances",
"structure_sprites_label": "Structure Sprites",
"structure_sprites_desc": "Toggle structure sprites",
"cursor_cost_label_label": "Cursor Build Cost",
"cursor_cost_label_desc": "Show a cost pill under the build cursor icon",
"anonymous_names_label": "Hidden Names",
"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",
"attack_ratio_label": "⚔️ Attack Ratio",
"attack_ratio_desc": "What percentage of your troops to send in an attack (1100%)",
"territory_patterns_label": "🏳️ Territory Skins",
"territory_patterns_desc": "Choose whether to display territory skin designs in game",
"performance_overlay_label": "Performance Overlay",
"performance_overlay_desc": "Toggle the performance overlay. When enabled, the performance overlay will be displayed. Press shift-D during game to toggle.",
"easter_writing_speed_label": "Writing Speed Multiplier",
"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)",
"build_controls": "Build Controls",
"build_city": "Build City",
"build_city_desc": "Build a City under your cursor.",
"build_factory": "Build Factory",
"build_factory_desc": "Build a Factory under your cursor.",
"build_defense_post": "Build Defense Post",
"build_defense_post_desc": "Build a Defense Post under your cursor.",
"build_port": "Build Port",
"build_port_desc": "Build a Port under your cursor.",
"build_warship": "Build Warship",
"build_warship_desc": "Build a Warship under your cursor.",
"build_missile_silo": "Build Missile Silo",
"build_missile_silo_desc": "Build a Missile Silo under your cursor.",
"build_sam_launcher": "Build SAM Launcher",
"build_sam_launcher_desc": "Build a SAM Launcher under your cursor.",
"build_atom_bomb": "Build Atom Bomb",
"build_atom_bomb_desc": "Build an Atom Bomb under your cursor.",
"build_hydrogen_bomb": "Build Hydrogen Bomb",
"build_hydrogen_bomb_desc": "Build a Hydrogen Bomb under your cursor.",
"build_mirv": "Build MIRV",
"build_mirv_desc": "Build a MIRV under your cursor.",
"menu_shortcuts": "Menu Shortcuts",
"build_menu_modifier": "Build Menu Modifier",
"build_menu_modifier_desc": "Hold this key while clicking to open the build menu.",
"emoji_menu_modifier": "Emoji Menu Modifier",
"emoji_menu_modifier_desc": "Hold this key while clicking to open the emoji menu.",
"attack_ratio_controls": "Attack Ratio Controls",
"attack_ratio_up": "Increase Attack Ratio",
"attack_ratio_up_desc": "Increase attack ratio by 10%",
"attack_ratio_down": "Decrease Attack Ratio",
"attack_ratio_down_desc": "Decrease attack ratio by 10%",
"attack_keybinds": "Attack Keybinds",
"boat_attack": "Boat Attack",
"boat_attack_desc": "Send a boat attack to the tile under your cursor.",
"ground_attack": "Ground Attack",
"ground_attack_desc": "Send a ground attack to the tile under your cursor.",
"swap_direction": "Swap Rocket Direction",
"swap_direction_desc": "Toggle rocket launch direction (up/down).",
"zoom_controls": "Zoom Controls",
"zoom_out": "Zoom Out",
"zoom_out_desc": "Zoom out the map",
"zoom_in": "Zoom In",
"zoom_in_desc": "Zoom in the map",
"camera_movement": "Camera Movement",
"center_camera": "Center Camera",
"center_camera_desc": "Center camera on player",
"move_up": "Move Camera Up",
"move_up_desc": "Move the camera upward",
"move_left": "Move Camera Left",
"move_left_desc": "Move the camera to the left",
"move_down": "Move Camera Down",
"move_down_desc": "Move the camera downward",
"move_right": "Move Camera Right",
"move_right_desc": "Move the camera to the right",
"reset": "Reset",
"unbind": "Unbind",
"on": "On",
"off": "Off",
"toggle_terrain": "Toggle Terrain",
"exit_game_label": "Exit Game",
"exit_game_info": "Return to main menu",
"background_music_volume": "Background Music Volume",
"sound_effects_volume": "Sound Effects Volume",
"keybind_conflict_error": "The key {key} is already bound to another action."
},
"chat": {
"title": "Quick Chat",
"to": "Sent {user}: {msg}",
"from": "From {user}: {msg}",
"category": "Category",
"phrase": "Phrase",
"player": "Player",
"send": "Send",
"search": "Search player...",
"build": "Build your message...",
"cat": {
"help": "Help",
"attack": "Attack",
"defend": "Defend",
"greet": "Greetings",
"misc": "Miscellaneous",
"warnings": "Warnings"
},
"help": {
"troops": "Please give me troops!",
"troops_frontlines": "Send troops to the frontlines!",
"gold": "Please give me gold!",
"no_attack": "Please don't attack me!",
"sorry_attack": "Sorry, I didnt mean to attack.",
"alliance": "Alliance?",
"help_defend": "Help me defend against [P1]!",
"trade_partners": "Let's be trade partners!"
},
"attack": {
"attack": "Attack [P1]!",
"mirv": "Launch a MIRV at [P1]!",
"focus": "Focus fire on [P1]!",
"finish": "Let's finish off [P1]!",
"build_warships": "Build Warships!"
},
"defend": {
"defend": "Defend [P1]!",
"defend_from": "Defend from [P1]!",
"dont_attack": "Dont attack [P1]!",
"ally": "[P1] is my ally!",
"build_posts": "Build Defense Posts!"
},
"greet": {
"hello": "Hello!",
"good_job": "Good job!",
"good_luck": "Good luck!",
"have_fun": "Have fun!",
"gg": "GG!",
"nice_to_meet": "Nice to meet you!",
"well_played": "Well played!",
"hi_again": "Hi again!",
"bye": "Bye!",
"thanks": "Thanks!",
"oops": "Oops, wrong button!",
"trust_me": "You can trust me. Promise!",
"trust_broken": "I trusted you...",
"ruining_games": "You're ruining both of our games.",
"dont_do_that": "Don't do that!",
"same_team": "I'm on your side!"
},
"misc": {
"go": "Lets go!",
"strategy": "Nice strategy!",
"fun": "This game is fun!",
"team_up": "Lets team up against [P1]!",
"pr": "When will my PR finally get merged...?",
"build_closer": "Build closer to get trains!",
"coastline": "Please let me get a coastline."
},
"warnings": {
"strong": "[P1] is strong.",
"weak": "[P1] is weak.",
"mirv_soon": "[P1] can launch a MIRV soon!",
"number1_warning": "The #1 player will win soon unless we team up!",
"stalemate": "Let's make peace. This is a stalemate, we will both lose.",
"has_allies": "[P1] has many allies.",
"no_allies": "[P1] has no allies.",
"betrayed": "[P1] betrayed their ally!",
"betrayed_me": "[P1] betrayed me!",
"getting_big": "[P1] is growing too fast!",
"danger_base": "[P1] is unprotected!",
"saving_for_mirv": "[P1] is saving up to launch a MIRV.",
"mirv_ready": "[P1] has enough gold to launch a MIRV!",
"snowballing": "[P1] is snowballing too fast!",
"cheating": "[P1] is cheating!",
"stop_trading": "Stop trading with [P1]!"
}
},
"build_menu": {
"desc": {
"atom_bomb": "Small explosion",
"hydrogen_bomb": "Large explosion",
"mirv": "Huge explosion, only targets selected player",
"missile_silo": "Used to launch nukes",
"sam_launcher": "Defends against incoming nukes",
"warship": "Captures trade ships, destroys ships and boats",
"port": "Sends trade ships to generate gold",
"defense_post": "Increases defenses of nearby borders",
"city": "Increases max population",
"factory": "Creates railroads and spawns trains"
},
"not_enough_money": "Not enough money"
},
"win_modal": {
"support_openfront": "Support OpenFront!",
"territory_pattern": "Purchase a territory skin to go ad-free!",
"died": "You died",
"your_team": "Your team won!",
"other_team": "{team} team has won!",
"you_won": "You Won!",
"other_won": "{player} has won!",
"nation_won": "Nation {nation} has won!",
"exit": "Exit Game",
"keep": "Keep Playing",
"spectate": "Spectate",
"requeue": "Play Again",
"wishlist": "Wishlist on Steam!",
"ofm_winter": "OpenFront Masters Winter Tournament!",
"ofm_winter_description": "Join the competitive tournament and compete against the best players",
"join_tournament": "Join Tournament",
"join_discord": "Join Our Discord Community!",
"discord_description": "Connect with players, discover new features, and win prizes!",
"join_server": "Join Server",
"youtube_tutorial": "Need some help?"
},
"leaderboard": {
"title": "Leaderboard",
"hide": "Hide",
"rank": "Rank",
"player": "Player",
"team": "Team",
"owned": "Owned",
"gold": "Gold",
"maxtroops": "Max troops",
"launchers": "Launchers",
"sams": "SAMs",
"warships": "Warships",
"cities": "Cities",
"show_control": "Show Control",
"show_units": "Show Units"
},
"events_display": {
"retreating": "retreating",
"retaliate": "Retaliate",
"boat": "Boat",
"alliance_request_status": "{name} {status} your alliance request",
"alliance_accepted": "accepted",
"alliance_rejected": "rejected",
"alliance_nukes_destroyed_outgoing": "{count, plural, one {# nuke launched toward {name} was destroyed due to the alliance} other {# nukes launched toward {name} were destroyed due to the alliance}}",
"alliance_nukes_destroyed_incoming": "{count, plural, one {# nuke launched by {name} was destroyed due to the alliance} other {# nukes launched by {name} were destroyed due to the alliance}}",
"duration_second": "1 second",
"betrayal_description": "You broke your alliance with {name}, making you a TRAITOR ({malusPercent}% defense debuff for {durationText})",
"duration_seconds_plural": "{seconds} seconds",
"betrayed_you": "{name} broke their alliance with you",
"about_to_expire": "Your alliance with {name} is about to expire!",
"alliance_expired": "Your alliance with {name} expired",
"attack_request": "{name} requests you attack {target}",
"sent_emoji": "Sent {name}: {emoji}",
"renew_alliance": "Request to renew",
"request_alliance": "{name} requests an alliance!",
"focus": "Focus",
"accept_alliance": "Accept",
"reject_alliance": "Reject",
"alliance_renewed": "Your alliance with {name} has been renewed",
"wants_to_renew_alliance": "{name} wants to renew your alliance",
"ignore": "Ignore",
"unit_voluntarily_deleted": "Unit voluntarily deleted",
"betrayal_debuff_ends": "{time} seconds left until betrayal debuff ends",
"attack_cancelled_retreat": "Attack cancelled, {troops} soldiers killed during retreat",
"received_gold_from_captured_ship": "Received {gold} gold from ship captured from {name}",
"received_gold_from_trade": "Received {gold} gold from trade with {name}",
"received_gold_from_conquest": "Conquered {name}, received {gold} gold",
"conquered_no_gold": "Conquered {name} (didn't play, no gold awarded)",
"missile_intercepted": "Missile intercepted {unit}",
"mirv_warheads_intercepted": "{count, plural, one {{count} MIRV warhead intercepted} other {{count} MIRV warheads intercepted}}",
"sent_troops_to_player": "Sent {troops} troops to {name}",
"received_troops_from_player": "Received {troops} troops from {name}",
"sent_gold_to_player": "Sent {gold} gold to {name}",
"received_gold_from_player": "Received {gold} gold from {name}",
"unit_captured_by_enemy": "Your {unit} was captured by {name}",
"captured_enemy_unit": "Captured {unit} from {name}",
"unit_destroyed": "Your {unit} was destroyed",
"no_boats_available": "No boats available, max {max}"
},
"unit_info_modal": {
"structure_info": "Structure Info",
"unit_type_unknown": "Unknown",
"close": "Close",
"cooldown": "Cooldown",
"type": "Type",
"upgrade": "Upgrade",
"level": "Level"
},
"player_type": {
"player": "Player",
"nation": "Nation",
"bot": "Bot"
},
"relation": {
"hostile": "Hostile",
"distrustful": "Distrustful",
"neutral": "Neutral",
"friendly": "Friendly",
"default": "Default"
},
"control_panel": {
"gold": "Gold",
"troops": "Troops",
"attack_ratio": "Attack Ratio"
},
"player_panel": {
"gold": "Gold",
"troops": "Troops",
"betrayals": "Betrayals",
"traitor": "Traitor",
"trading": "Trading",
"active": "Active",
"stopped": "Stopped",
"alliance_time_remaining": "Alliance Expires In",
"embargo": "Stopped trading with you",
"nuke": "Nukes sent by them to you",
"start_trade": "Start Trading",
"stop_trade": "Stop Trading",
"stop_trade_all": "Stop Trading with All",
"start_trade_all": "Start Trading with All",
"alliances": "Alliances",
"flag": "Flag",
"chat": "Chat",
"target": "Target",
"break_alliance": "Break Alliance",
"alliance": "Alliance",
"send_alliance": "Send Alliance",
"send_troops": "Send Troops",
"send_gold": "Send Gold",
"emotes": "Emojis",
"moderation": "Moderation",
"kick": "Kick player",
"kicked": "Already kicked",
"kick_confirm": "Kick {name}?\n\nThey won't be able to rejoin this game.",
"arc_up": "Upward arc",
"arc_down": "Downward arc",
"flip_rocket_trajectory": "Flip rocket trajectory"
},
"kick_reason": {
"duplicate_session": "Kicked from game (you may have been playing on another tab)",
"lobby_creator": "Kicked by lobby creator"
},
"send_troops_modal": {
"title_with_name": "Send Troops to {name}",
"available_tooltip": "Your current available troops",
"min_keep": "Min keep",
"slider_tooltip": "{{percent}}% • {{amount}}",
"aria_slider": "Troops slider",
"capacity_note": "Receiver can accept only {{amount}} right now."
},
"send_gold_modal": {
"title_with_name": "Send Gold to {name}",
"available_tooltip": "Your current available gold",
"aria_slider": "Amount slider",
"slider_tooltip": "{{percent}}% • {{amount}}"
},
"replay_panel": {
"replay_speed": "Replay speed",
"game_speed": "Game speed",
"fastest_game_speed": "Max"
},
"error_modal": {
"crashed": "Game crashed!",
"connection_error": "Connection error!",
"paste_discord": "Please paste the following in your bug report in Discord:",
"copy_clipboard": "Copy to clipboard",
"copied": "Copied!",
"failed_copy": "Failed to copy",
"spawn_failed": {
"title": "Spawn failed",
"description": "Automatic spawn selection failed. You can't play this game."
},
"desync_notice": "You are desynced from other players. What you see might differ from other players."
},
"performance_overlay": {
"reset": "Reset",
"copy_json_title": "Copy current performance metrics as JSON",
"copy_clipboard": "Copy JSON",
"copied": "Copied!",
"failed_copy": "Failed to copy",
"fps": "FPS:",
"avg_60s": "Avg (60s):",
"frame": "Frame:",
"tick_exec": "Tick Exec:",
"tick_delay": "Tick Delay:",
"layers_header": "Layers (avg / max, sorted by total time):"
},
"heads_up_message": {
"choose_spawn": "Choose a starting location",
"random_spawn": "Random spawn is enabled. Selecting starting location for you...",
"singleplayer_game_paused": "Game paused",
"multiplayer_game_paused": "Game paused by Lobby Creator"
},
"territory_patterns": {
"title": "Skins",
"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.",
"purchase": "Purchase this skin to unlock it."
},
"pattern": {
"default": "Default"
},
"select_skin": "Select Skin",
"selected": "selected"
},
"flag_input": {
"title": "Select Flag",
"button_title": "Pick a flag!",
"search_flag": "Search..."
},
"spawn_ad": {
"loading": "Loading advertisement..."
},
"auth": {
"login_required": "Login is required to access this website.",
"redirecting": "You are being redirected...",
"not_authorized": "You are not authorized to access this website.",
"contact_admin": "If you believe you are seeing this message in error, please contact the website administrator."
},
"radial_menu": {
"delete_unit_title": "Delete Unit",
"delete_unit_description": "Click to delete the nearest unit"
},
"discord_user_header": {
"avatar_alt": "Avatar"
},
"player_stats_table": {
"building_stats": "Building Statistics",
"ship_arrivals": "Ship Arrivals",
"nuke_stats": "Nuke Statistics",
"player_metrics": "Player Metrics",
"building": "Building",
"ship_type": "Ship Type",
"weapon": "Weapon",
"built": "Built",
"destroyed": "Destroyed",
"captured": "Captured",
"lost": "Lost",
"hits": "Hits",
"launched": "Launched",
"landed": "Landed",
"sent": "Sent",
"arrived": "Arrived",
"attack": "Attack",
"received": "Received",
"cancelled": "Cancelled",
"count": "Count",
"gold": "Gold",
"workers": "Workers",
"war": "War",
"trade": "Trade",
"steal": "Steal",
"unit": {
"city": "City",
"port": "Port",
"defp": "Defense Post",
"saml": "SAM Launcher",
"silo": "Missile Silo",
"wshp": "Warship",
"fact": "Factory",
"trade": "Trade Ship",
"trans": "Transport Ship",
"abomb": "Atom Bomb",
"hbomb": "Hydrogen Bomb",
"mirv": "MIRV",
"mirvw": "MIRV Warhead"
}
},
"game_list": {
"recent_games": "Recent Games",
"game_id": "Game ID",
"mode": "Mode",
"mode_ffa": "Free-for-All",
"mode_team": "Team",
"replay": "Replay",
"details": "Details",
"ranking": "Ranking",
"started": "Started",
"map": "Map",
"difficulty": "Difficulty",
"type": "Type"
},
"player_stats_tree": {
"public": "Public",
"private": "Private",
"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",
"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."
}
}