{
    "home_local_level_loading_error": "This file is not a valid .shlv file:",
    "title_levellist": "Levels",
    "head_meta_og_description": "Selfless Heroes is a game that will teach you how to program without you noticing. Solve puzzles and help your heroes emerge victorious from the dungeon!",
    "head_meta_description": "Selfless Heroes is a game that will teach you how to program without you noticing. Solve puzzles and help your heroes emerge victorious from the dungeon!",
    "head_meta_keywords": "puzzle game, video game, serious game, programming, development, puzzle, education, fun, logic, algorithm",
    "app_exit_warning_modal": "Are you sure you want to\nleave Selfless Heroes?",
    "app_fullscreen_modal": "In order to have the best game experience,\nit is recommended to go fullscreen.",
    "app_fullscreen_modal_stop_propose": "Don't show this message again",
    "app_warn_local_storage_modal_1": "The online version of Selfless Heroes saves your game in the browser.\n\nIf you delete your history or use a cleaning utility such as CCleaner, you may delete your game.",
    "app_warn_local_storage_modal_2": "\nTo make sure you don't lose your game:\n\n",
    "app_warn_local_storage_modal_3": "install Selfless Heroes",
    "app_warn_local_storage_modal_4": "\nor\nsave your game (%%mdi mdi-content-save-move$%%)",
    "app_warn_local_storage_modal_stop_warning": "Don't show this message again",
    "navigation_exit_button": "Exit",
    "navigation_menu_button": "Menu",
    "navigation_discord_button": "Join the community on Discord",
    "menu_fullscreen_label": "Fullscreen",
    "menu_enable_fullscreen": "Fullscreen",
    "menu_disable_fullscreen": "Exit fullscreen",
    "menu_music_label": "Music",
    "menu_sound_label": "Sound",
    "mute_button_mute": "Mute",
    "mute_button_unmute": "Unmute",
    "menu_language_label": "Language",
    "menu_credits_label": "credits",
    "menu_credits_link": "view online",
    "screen_size_warning_1": "The screen of your device is too small to play Selfless Heroes",
    "screen_size_warning_2": "Selfless Heroes is designed to work on desktop, laptop and tablet. To play this game, you must have a screen size of at least {minMaxDimension} x {minMinDimension} pixels: your screen is only {maxDimension} x {minDimension} pixels.",
    "home_new_game": "new game:",
    "home_new_career_name_placeholder": "pseudo",
    "home_new_career_or_separator": "or",
    "home_load_career_button": "%%mdi mdi-content-save-move$%% Load a game",
    "home_save_career_button": "Save as…",
    "home_remove_career_button": "Remove",
    "home_remove_career_warning": "Are you really sure you want to delete this game?\nAll progress will be lost.",
    "home_drop_career_file": "Load a saved game\n%%mdi mdi-content-save-move$%% .shsv file",
    "home_wrong_file_format_error": "This file is not a valid .shsv file",
    "level_list_back_button": "Back",
    "level_list_bonus_label": "BONUS",
    "level_list_boss_label": "BOSS",
    "level_list_premium_levels_button": "Unlock more levels",
    "premium_modal_title": "Premium content",
    "premium_modal_content_description": "%%content-number$3%% new level categories for a total of\n%%content-number$34%% additional levels",
    "premium_modal_action_variables": "Heroes can calculate\nand write on eggs",
    "premium_modal_action_speach": "Heroes can speak\nto each other",
    "premium_modal_action_clone": "Heroes can clone themselves",
    "premium_modal_back_button": "back",
    "premium_modal_unlock_button": "unlock\npremium content",
    "unlock_premium_modal_title": "Unlock premium content",
    "unlock_premium_modal_get_key_button": "get activation key",
    "unlock_premium_modal_activation_key_label": "activation key:",
    "unlock_premium_modal_wrong_activation_key": "This is not a valid activation key.",
    "premium_activated_modal": "Congratulations!\n\nYou've successfully unlocked Selfless Heroes premium content.",
    "level_details_edit_button": "play",
    "level_details_edit_button_tooltip": "Play",
    "level_details_back_button": "back",
    "level_details_back_button_tooltip": "Back",
    "level_details_add_solution_button": "New solution",
    "level_details_duplicate_solution_button": "Duplicate",
    "level_details_duplicate_solution_suffix": " copy",
    "level_details_delete_solution_button": "Delete",
    "level_details_rename_solution_button": "Rename",
    "level_details_name_input_placeholder": "name",
    "level_details_delete_solution_warning": "Are you really sure you want to delete this solution?",
    "modal_confirm_button": "ok",
    "modal_cancel_button": "cancel",
    "modal_close_button": "Close",
    "modal_confirm_yes": "yes",
    "modal_cancel_no": "no",
    "tutorial_button_next": "Next",
    "tutorial_basic_step_tutorial_warning": "It is advisable to follow this tutorial carefully in order to be able to play as soon as possible.\n\nClick on the arrow to launch the tutorial.",
    "tutorial_basic_step_graphcode": "The heroes follow these instructions step by step",
    "tutorial_basic_step_palette": "Drag new instructions from here to change heroes behavior",
    "tutorial_basic_step_objective": "To see the level objective click here",
    "tutorial_basic_step_runbar": "When your program is ready, click here to run it",
    "tutorial_basic_step_help": "If you need more help or want to see this tutorial again, click here",
    "tutorial_advanced_step_undo": "Undo last edit",
    "tutorial_advanced_step_redo": "Redo",
    "tutorial_advanced_step_delete": "Delete all instructions",
    "tutorial_advanced_step_editor_switch": "Switch to code editor.\nCode editor can be used to copy a code from one level to another.\nIt is also intended to be used by advanced players who want to write their program using code instead of the graphic interface.",
    "tutorial_advanced_step_game": "Select a hero by clicking on it to better follow its behaviour.\nWhile the program is running, a blue cursor will appear to the left of the instructions to show at which step of the program the selected hero is.",
    "tutorial_advanced_step_play_pause": "Run or pause the program",
    "tutorial_advanced_step_step": "Run the program step by step",
    "tutorial_advanced_step_stop": "Stop the program",
    "tutorial_advanced_step_speed": "Speed setting",
    "tutorial_advanced_step_menu": "Open the menu",
    "level_back_button": "Back to level list",
    "level_help_button": "Help",
    "level_objective_button": "Objective",
    "level_help_modal_title": "Help",
    "level_help_modal_tab_general_title": "general",
    "level_help_basic_tutorial_button": "Basic tutorial",
    "level_help_advanced_tutorial_button": "Advanced tutorial",
    "level_help_tab_general_objectives_stars": "There are 3 stars to win per level:",
    "level_help_tab_general_objectives_star1": "star 1:",
    "level_help_tab_general_objectives_star1_objective": "achieve the level objective",
    "level_help_tab_general_objectives_star2": "star 2:",
    "level_help_tab_general_objectives_star2_objective": "run time secondary objective",
    "level_help_tab_general_objectives_star2_advice": "To achieve this objective, your program should take as few steps as possible to achieve the final result. In other words, it should go as fast as possible.",
    "level_help_tab_general_objectives_star3": "star 3:",
    "level_help_tab_general_objectives_star3_objective": "code length secondary objective",
    "level_help_tab_general_objectives_star3_advice": "To achieve this objective, your program should be as few lines as possible (line numbers are displayed to the left of the heroes' instructions).",
    "level_help_tab_statement_code_example": "code example:",
    "level_help_tab_statement_graph_code_example": "example:",
    "level_help_tab_if_statement_1": "%%statement branching-statement$if%% allows to run instructions only if a given condition is true.",
    "level_help_tab_if_statement_2": "You could read the above example as \"If the square to the right of me is a wall, then go to the left. Otherwise go to the right\".",
    "level_help_tab_if_statement_3": "%%statement branching-statement$if%% checks if the condition is true in which case it will run the instructions inside it (instructions to the right of the vertical gray line). Otherwise it will run the instructions inside the %%statement branching-statement$else%% if there is one.",
    "level_help_tab_if_statement_4": "%%statement branching-statement$else%% is not initially part of the %%statement branching-statement$if%%. To make it appear, drag any instruction over the %%statement branching-statement$if%%.\nIf you remove all the instructions inside %%statement branching-statement$else%%, it will disappear.",
    "level_help_tab_if_statement_6": "Click on the plus sign to add other conditions.",
    "level_help_tab_if_statement_7": "You could read the above example as \"If the square to the right of me is a wall or if the square to the right of me is a hole, then go to the left\".",
    "level_help_tab_jump_statement_1": "%%statement branching-statement$jump%% allows to jump backward or forward in the program.",
    "level_help_tab_jump_statement_2": "You could read the above example as \"Step to the right infinitely many times\".",
    "level_help_tab_jump_statement_4": "The first line creates an \"anchor\" named \"a\". The third line says to jump back to this anchor.\nYou can choose any name you want for your anchors. Each jump must match a unique anchor.",
    "level_help_tab_jump_statement_5": "%%statement branching-statement$jump%% is usually used with %%statement branching-statement$if%% to create loops which stop at a condition.",
    "level_help_tab_jump_statement_6": "You could read the above example as \"Step to the right as long as the square to the right is not a wall\".",
    "level_help_tab_clone_statement_1": "%%statement branching-statement$clone%% creates a clone of the hero next to him.",
    "level_help_tab_clone_statement_2": "You could read the above example as \"Create a clone on your left. Then step to the right\".\n\nFor the created hero, %%statement branching-statement$clone%% acts like %%statement branching-statement$jump%%. In this example, the created clone won't step to the right because he will begin to follow instructions after the arrow of %%statement branching-statement$clone%%.",
    "level_help_tab_clone_statement_4": "The created clone starts his life with the same variables values as his creator's.\n\n%%icon mdi mdi-alert-octagon-outline$%%Warning: if you try to create a clone on a square already occupied (by a %%icon icon-hero$%% hero, a %%icon icon-cauldron$%% cauldron etc.) or on a forbidden square (like a %%icon icon-wall$%% wall), the cloning process will fail. In certain levels, this failure causes the death of the hero trying to clone himself.",
    "level_help_tab_step_function_1": "%%statement action-statement$step%% says to your hero to go in a direction. If you specify multiple directions, the hero will decide randomly between these directions.",
    "level_help_tab_step_function_2": "You could read the above example as \"Go one step to the left or to the right\".",
    "level_help_tab_step_once_function_1": "%%statement action-statement$step%% says to your hero to go in a direction.",
    "level_help_tab_step_once_function_2": "You could read the above example as \"Go one step to the right\".",
    "level_help_tab_fireball_function_1": "%%statement action-statement$fireball%% throws a fireball on a square around the hero.\nIf the fireball hits another hero it will kill him. You can use a fireball to light a %%icon icon-bonfire$%% bonfire.",
    "level_help_tab_fireball_function_2": "You could read the above example as \"Throw a fireball to the right\".",
    "level_help_tab_take_function_1": "%%statement action-statement$take%% says to your hero to take an item.",
    "level_help_tab_take_function_2": "You could read the above example as \"If there is an egg on the square on your right, take this egg\".",
    "level_help_tab_drop_function_1": "%%statement action-statement$drop%% says to your hero to drop his item.",
    "level_help_tab_drop_function_2": "You could read the above example as \"Drop your item on the square on your right\".",
    "level_help_tab_write_function_1": "%%statement action-statement$write%% says to your hero to write something on his item.",
    "level_help_tab_write_function_2": "You could read the above example as \"Write 3 on your item\".",
    "level_help_tab_set_function_1": "%%statement assign-statement$set%% initializes a variable.",
    "level_help_tab_set_function_2": "You could read the above example as \"Set the variable a to 3\".",
    "level_help_tab_calc_function_1": "%%statement assign-statement$calc%% makes a calculation and puts the result in a variable.",
    "level_help_tab_calc_function_2": "You could read the above example as \"Set the variable b to a + 2\".",
    "level_help_tab_calc_function_4": "In Selfless Heroes, there are only integer numbers.\n\nThe operator %%type-operator$\"/\"%% is integer division.\nFor example, %%type-operator$9 / 2 = 4%%.\n\nThe operator %%type-operator$\"%\"%% is called \"modulo\". It calculates the remainder of the integer division.\nFor example, %%type-operator$9 % 2 = 1%% because %%type-operator$9 / 2 = 4%% has a remainder of 1.",
    "level_help_tab_nearest_function_1": "%%statement assign-statement$nearest%% searches for the nearest object of a given type (%%icon icon-cauldron$%% cauldron, %%icon icon-egg$%%egg etc.) and puts the result in a variable.",
    "level_help_tab_nearest_function_2": "You could read the above example as \"Memorize the nearest egg in the variable a and then go get that egg\".",
    "level_help_tab_tell_function_1": "%%statement speach-statement$tell%% allows you to say a message to other heroes.",
    "level_help_tab_tell_function_2": "You could read the above example as \"Tell 'ok' to the hero on the right of you\".",
    "level_help_tab_tell_function_4": "You can also %%statement speach-statement$tell%% a message to every %%icon icon-hero$%% hero of the level.",
    "level_help_tab_tell_function_5": "You could read the above example as \"Tell \"hey\" to everyone\".",
    "level_help_tab_listen_function_1": "%%statement speach-statement$listen%% tells the hero to wait until he hears a specific message.",
    "level_help_tab_listen_function_2": "You could read the above example as \"Wait for a hero to tell you \"hey\" then go right\".",
    "level_modal_speed_target_unit": "steps",
    "level_modal_length_target_unit": "lines",
    "level_modal_secondary_objectives_difficulty_warning": "secondary objectives can be very difficult and it is often impossible to achieve both with the same solution",
    "level_objective_modal_objective_title": "objective",
    "level_objective_modal_secondary_objectives_title": "secondary objectives",
    "win_modal_testing_explanation": "your solution is tested to make sure it works every time",
    "win_modal_prior_code_speed": "your fastest was %%score-number${minStep}%% steps",
    "win_modal_prior_code_length": "your smallest was %%score-number${minLength}%% lines",
    "win_modal_back_button": "back",
    "win_modal_continue_edit_button": "improve",
    "run_bar_play_button": "Run [ctrl+space]",
    "run_bar_pause_button": "Pause [ctrl+space]",
    "run_bar_step_button": "Step by step [ctrl+enter]",
    "run_bar_stop_button": "Stop [ctrl+backspace]",
    "run_bar_speed_range": "Speed [alt+←] [alt+→]",
    "editor_bar_undo_button": "Undo [ctrl+z]",
    "editor_bar_redo_button": "Redo [ctrl+y]",
    "editor_bar_delete_button": "Delete",
    "editor_bar_switch_to_graph": "Switch to graphic editor [ctrl+e]",
    "editor_bar_switch_to_code": "Switch to code editor [ctrl+e]",
    "code_state_ok_tooltip": "Your code is ready to be run",
    "code_state_not_runnable_tooltip": "Your instructions are not complete:\nclick me for more details",
    "code_state_not_compilable_tooltip": "There is an error in your code:\nclick me for more details",
    "code_state_ok_modal": "Your code is ready to be run",
    "code_state_not_runnable_modal": "Your code contains %%undefined$undefined%% keywords.\nReplace them by correct values before running your code.",
    "switch_editor_warning": "There is an error in your code.\nIf you switch to graphic editor now,\nparts of it risk to be erased.",
    "code_error_position_template": "line {line}",
    "errors_modal_title": "Errors",
    "exception_mismatch_statement_template": "you wrote something erroneous after this {statementType}.",
    "exception_mismatch_keyword_template": "you wrote something erroneous after this %%keyword${statementType}%%.",
    "exception_forbidden_primary_statement_template": "%%keyword${statementType}%% is not available in this level.",
    "exception_forbidden_message_literal_type_template": "messages are not available in this level.",
    "exception_forbidden_arithmetic_operator_literal_type_template": "Arithmetic operators are not available in this level.",
    "exception_mismatch_function_template": "you wrote something erroneous after the function %%function${keyword}()%%.",
    "exception_invalid_clone_params_template": "%%keyword${statementType}%% expects a direction (%%literal${allowedDirections}%%) and an anchor.",
    "exception_invalid_variable_identifier_template": "%%variable${variable}%% variable name is not allowed. Use one of the following instead: %%variable${allowedIdentifiers}%%.",
    "exception_forbidden_integer_template": "%%number${value}%% number is either too small or too large: numbers must be between %%number${min}%% and %%number${max}%%.",
    "exception_forbidden_message_literal_template": "%%string$\"{message}\"%% message is not allowed. Use one of the following instead: %%string${allowedMessages}%%.",
    "exception_invalid_value_function_template": "%%function${code}%% is not a valid function. Use one of the following instead: %%function${allowedFunctions}%%.",
    "exception_invalid_action_function_template": "%%function${code}%% is not a valid action. Use one of the following instead: %%function${allowedFunctions}%%.",
    "exception_forbidden_action_function_template": "%%function${keyword}()%% is not available in this level. Use one of the following instead: %%function${allowedFunctions}%%",
    "exception_forbidden_value_function_template": "%%function${keyword}()%% is not available in this level. Use one of the following instead: %%function${allowedFunctions}%%",
    "exception_forbidden_direction_literal_type_template": "Directions are not available in this level.",
    "exception_forbidden_everyone_literal_type_template": "%%literal$everyone%% is not available in this level.",
    "exception_forbidden_integer_literal_type_template": "Numbers are not available in this level.",
    "exception_forbidden_myitem_literal_type_template": "%%literal$myitem%% is not available in this level.",
    "exception_forbidden_object_type_literal_type_template": "Object types are not available in this level.",
    "exception_forbidden_terrain_type_literal_type_template": "Terrain types are not available in this level.",
    "exception_invalid_params_one_dir_integer_variable_myitem_template": "%%function${keyword}()%% requires exactly one parameter which can be a number, a variable, a direction or %%literal$myitem%%",
    "exception_invalid_dir_integer_variable_myitem_param_template": "%%variable${param}%% is not a valid number, variable, direction or %%literal$myitem%%",
    "exception_invalid_dir_variable_param_template": "%%variable${param}%% is not a valid variable or direction. You can use these instead: %%variable${allowedVariables}%% %%literal${allowedDirections}%%",
    "exception_invalid_params_one_integer_or_variable_template": "%%function${keyword}()%% requires exactly one parameter which can be a number or a variable (%%variable${allowedVariables}%%)",
    "exception_invalid_params_one_integer_template": "%%function${keyword}()%% requires exactly one number parameter",
    "exception_invalid_integer_param_template": "%%variable${param}%% is not a valid number",
    "exception_invalid_integer_or_variable_param_template": "%%variable${param}%% is not a valid number or variable",
    "exception_invalid_params_one_dir_template": "%%function${keyword}()%% requires exactly one direction parameter: %%literal${directions}%%",
    "exception_invalid_params_one_dir_variable_template": "%%function${keyword}()%% requires one direction (%%literal${allowedDirections}%%) or a variable (%%variable${allowedVariables}%%)",
    "exception_invalid_params_one_more_dir_variable_template": "%%function${keyword}()%% requires one or more direction parameters (%%literal${allowedDirections}%%) or a variable (%%variable${allowedVariables}%%)",
    "exception_invalid_params_one_object_type_param_template": "%%function${keyword}()%% requires exactly one object type parameter: %%literal${allowedValues}%%",
    "exception_invalid_direction_param_template": "%%variable${param}%% is not a valid direction. Use one of these instead: %%literal${allowedValues}%%",
    "exception_invalid_object_type_param_template": "%%variable${param}%% is not a valid object type. Use one of these instead: %%literal${allowedValues}%%",
    "exception_invalid_direction_param_not_here_template": "%%function${keyword}()%% does not accept direction %%literal${param}%%. Use one of these instead: %%literal${allowedValues}%%",
    "exception_primary_statement_invalid_direction_param_not_here_template": "%%keyword${keyword}%% does not accept direction %%literal${param}%%. Use one of these instead: %%literal${allowedValues}%%",
    "exception_invalid_object_type_param_not_nothing_template": "%%function${keyword}()%% does not accept object type %%literal${param}%%. Use one of these instead: %%literal${allowedValues}%%",
    "exception_invalid_params_calc_function_template": "%%function${keyword}()%% takes 3 parameters. Params 1 and 3 must be either numbers, directions, %%literal$myitem%% or variables and param 2 must be an operator (%%operator${operators}%%)",
    "exception_invalid_params_tell_function_template": "%%function${keyword}()%% takes 2 parameters. Param 1 must be a message (%%string${allowedMessages}%%) and param 2 must be either a direction (%%literal${allowedDirections}%%) or %%literal$everyone%%",
    "exception_duplicate_param_template": "you cannot pass %%literal${param}%% parameter twice to %%function${keyword}()%%",
    "exception_multiple_param_several_types_template": "when you give several parameters to the %%function${keyword}()%% function, they must be of the same type",
    "exception_forbidden_object_type_template": "%%literal${keyword}%% object type is not available in this level. You can use one of the following: %%literal${allowedValues}%%",
    "exception_forbidden_terrain_type_template": "%%literal${keyword}%% terrain type is not available in this level. You can use one of the following: %%literal${allowedValues}%%",
    "exception_boolean_no_comparison_operator_template": "a condition must contain a valid comparator like these: %%operator${allowedOperators}%%",
    "exception_invalid_expression_template": "%%variable${code}%% is not a valid keyword",
    "exception_invalid_statement_template": "%%variable${code}%% is not a valid instruction",
    "exception_forbidden_variable_identifier_template": "%%variable${variable}%% variable is unavailable in this level. Use one of the following: %%variable${allowedNames}%%",
    "exception_all_forbidden_variable_identifier_template": "variables are not available in this level",
    "exception_open_statement_template": "%%keyword${keyword}%% condition must be closed with a %%code$:%%",
    "exception_else_no_if_template": "%%keyword${elseKeyword}%% without %%keyword${ifKeyword}%% before",
    "exception_endif_no_if_template": "%%keyword${endifKeyword}%% without %%keyword${ifKeyword}%% before",
    "exception_if_no_endif_template": "%%keyword${ifKeyword}%% without %%keyword${endifKeyword}%%",
    "exception_duplicate_anchor_template": "%%bracket${anchorName}:%% found twice. Anchors must have unique names",
    "exception_jump_to_unknown_anchor_template": "%%keyword${jumpKeyword}%% to unknown anchor %%bracket${anchorName}:%%",
    "type_anchor": "anchor",
    "type_assign": "assignment",
    "type_direction": "direction",
    "graph_node_if": "if",
    "graph_node_else": "else",
    "graph_node_jump": "jump",
    "graph_node_clone": "clone",
    "graph_node_function_step": "step",
    "graph_node_function_fireball": "fireball",
    "graph_node_function_take": "take",
    "graph_node_function_drop": "drop",
    "graph_node_function_write": "write",
    "graph_node_function_tell": "tell",
    "graph_node_function_tell_after_1": "to",
    "graph_node_function_listen": "listen",
    "graph_node_function_set": "set",
    "graph_node_function_calc": "calc",
    "graph_node_function_nearest": "nearest",
    "operator_boolean_and": "and",
    "operator_boolean_or": "or",
    "operator_boolean_delete": "delete",
    "drop_down_list_direction": "direction",
    "drop_down_list_number": "number",
    "drop_down_list_my_item_literal": "my item",
    "drop_down_list_everyone_literal": "everyone",
    "drop_down_list_message_literal_hey": "\"hey\"",
    "drop_down_list_message_literal_lol": "\"lol\"",
    "drop_down_list_message_literal_ho": "\"ho\"",
    "drop_down_list_message_literal_kiss": "\"kiss\"",
    "drop_down_list_message_literal_stop": "\"stop\"",
    "drop_down_list_message_literal_wait": "\"wait\"",
    "drop_down_list_message_literal_ok": "\"ok\"",
    "drop_down_list_message_literal_coffee": "\"coffee\"",
    "drop_down_list_object_type_nothing": "nothing",
    "drop_down_list_object_type_hero": "hero",
    "drop_down_list_object_type_npc": "beast",
    "drop_down_list_object_type_switch": "switch",
    "drop_down_list_object_type_bonfire": "bonfire",
    "drop_down_list_object_type_cauldron": "cauldron",
    "drop_down_list_object_type_spikes": "spikes",
    "drop_down_list_object_type_egg": "egg",
    "drop_down_list_terrain_type_wall": "wall",
    "drop_down_list_terrain_type_floor": "floor",
    "drop_down_list_terrain_type_hole": "hole",
    "drop_down_list_terrain_type_infected": "infected",
    "drop_down_list_terrain_type_void": "nothing",
    "level_test_failed_modal": "Some of the tests failed.\nWe reproduced the same situation as in these failed attempts.",
    "loss_reason_too_many_steps": "Your program takes too much time",
    "loss_reason_all_hero_ended": "Your heroes fell asleep before completing the objective",
    "loss_reason_all_hero_dead": "All your heroes are dead",
    "loss_reason_one_hero_dead": "One of your heroes is dead"
}
