From 2cd361ea48739a3df3dbed44cb9d1c18e53cefaa Mon Sep 17 00:00:00 2001 From: fourinone41 Date: Mon, 1 Jul 2024 07:53:30 -0400 Subject: [PATCH] i18n WIP --- js/data/strings_en.json | 537 +++++++++++++++++++ js/data/strings_ja.json | 537 +++++++++++++++++++ js/simulator-ui/cmp.js | 154 +----- js/simulator-ui/fleet-editor.js | 17 +- js/simulator-ui/selector.js | 5 +- js/simulator-ui/ui-main.js | 23 +- js/vue-i18n.global.prod.js | 6 + simulator.html | 899 +++++++++++++++++--------------- 8 files changed, 1593 insertions(+), 585 deletions(-) create mode 100644 js/data/strings_en.json create mode 100644 js/data/strings_ja.json create mode 100644 js/vue-i18n.global.prod.js diff --git a/js/data/strings_en.json b/js/data/strings_en.json new file mode 100644 index 00000000..a558d628 --- /dev/null +++ b/js/data/strings_en.json @@ -0,0 +1,537 @@ +{ + "kancolle_sortie_simulator": "KanColle Sortie Simulator", + "save_load_simulator_backup": "Save/Load Simulator Backup", + "import_export_deckbuilder_format": "Import/Export DeckBuilder Format", + "fleets": "Fleets", + "main_fleet": "Main Fleet", + "support_fleet_normal": "Support Fleet (Normal)", + "support_fleet_boss": "Support Fleet (Boss)", + "use_normal_support": "Use Normal Support", + "use_boss_support": "Use Boss Support", + "land_base_aerial_support": "Land Base Aerial Support", + "friend_fleet": "Friend Fleet", + "use_friend_fleet": "Use Friend Fleet", + "battles": "Battles", + "insert_node": "Insert Node", + "settings": "Settings", + "retreat_on_taiha": "Retreat on {img_taiha} ?", + "retreat_on_taiha_even": "Retreat on {img_taiha} even if ship has {img_repair} if on Node {sel_node} or before", + "none_node": "None", + "fcf_settings": "FCF Settings", + "replace_formations": "Replace formation with {closest_alternative} if not enough ships", + "closest_alternative": "closest alternative", + "closest_alternative_tooltip": "< 3 Ships \u2192 Line Ahead\nDiamond \u2192 Double Line\nCF3 \u2192 CF1\nCF4 \u2192 CF2", + "historical_bonus": "Historical Bonus:", + "auto_set_bonus": "Auto-Set Historical Bonuses", + "import_mapwide_bonuses_once": "Import Mapwide Bonuses Once", + "mechanics": "Mechanics:", + "day_shelling_softcap": "Day Shelling Soft-Cap:", + "asw_softcap": "ASW Soft-Cap:", + "torpedo_softcap": "Torpedo Soft-Cap:", + "night_softcap": "Night Soft-Cap:", + "air_softcap": "Air Soft-Cap:", + "support_softcap": "Support Soft-Cap:", + "use_default_w6_air_raid": "Use default World 6 costs for Air Raid", + "bucket_count_use": "Count use if HP \u2264 {inp_hp}% OR repair time > {inp_time} hours", + "bucket_do_not_count_use": "Do not count if repair time < {inp_time} hours (regardless of above)", + "carry_over_ship_hp": "Carry over ship HP between sims unless {img_bucket} conditions (not including \"Do not count if repair time <\")", + "carry_over_ship_morale": "Carry over ship morale between sims", + "show_advanced": "Show Advanced", + "vanguard_evasion_bonus": "Vanguard Evasion Bonus:", + "use_flat_evasion_bonus": "Use Flat Evasion Bonus", + "shelling": "Shelling", + "torpedo": "Torpedo", + "DD_n": "DD {0}:", + "other_n": "Other {0}:", + "use_accuracy_multiplier": "Use Accuracy Multiplier", + "set_event_values": "Set Event Values", + "set_normal_values": "Set Normal Values", + "special_attack_activation_rate": "Special Attack Activation Rate:", + "nelson_touch": "Nelson Touch:", + "nagato_special": "Nagato Special:", + "mutsu_special": "Mutsu Special:", + "colorado_special": "Colorado Special:", + "kongou_special": "Kongou Special:", + "yamato_special_3": "Yamato Special (3-ship):", + "yamato_special_2": "Yamato Special (2-ship):", + "submarine_special": "Submarine Special Attack:", + "use_provisional_B-25": "Use provisional B-25 bonuses for Abyssal skip bomb airstrikes", + "cf_airstrike_base_mods": "Combined Fleet Airstrike Base Mods:", + "damage_base": "Damage (Base {0}):", + "accuracy_base": "Accuracy (Base {0}):", + "main": "Main", + "escort": "Escort", + "player_target_battle": "Player Target (Battle)", + "player_target_raid": "Player Target (Raid)", + "enemy_target": "Enemy Target", + "arctic_camo_bonuses": "Arctic Camo Bonuses:", + "armour": "Armour:", + "evasion_shelling": "Evasion (Shelling):", + "smokescreen_mods": "Smokescreen Mods:", + "smoke_level": "Smoke Level:", + "activation_rate": "Activation Rate:", + "use_provisional_link": "Use provisional {link}", + "activation_formula": "activation rate formula", + "shelling_accuracy_multiplier": "Shelling Accuracy Multiplier:", + "player_no_radar": "Player (No Radar)", + "player_radar": "Player (Radar)", + "enemy_no_radar": "Enemy (No Radar)", + "enemy_radar": "Enemy (Radar)", + "asw_accuracy_multiplier": "ASW Accuracy Multiplier:", + "player": "Player", + "enemy": "Enemy", + "torpedo_accuracy_multiplier": "Torpedo Accuracy Multiplier:", + "airstrike_accuracy_multiplier": "Airstrike Accuracy Multiplier:", + "set_simulator_suggested_values": "Set Simulator's Suggested Values (Provisional)", + "airstrike_may_be_inaccurate": "(Airstrike may be inaccurate)", + "activation_rate_suggestions": "Activation Rate Suggestions", + "other_suggestions_and_data": "Other Suggestions and Data", + "shelling_range_tie_randomness_weights": "Shelling Range Tie Randomness Weights:", + "enable_heuristic_weights": "Enable heuristic weights", + "warning_experimental_subject_to_change": "Warning: This setting is experimental and subject to change.", + "shelling_range_tie_description": "This setting's weights are based on sampling the number of occurrences of each ordering in DB data: this is only an estimate, the actual formula is unknown. Note this also means that some orderings may be incorrectly impossible to roll in simulator with this setting, if they are extremely rare in the actual game and were never recorded in DB.{br}Only range combinations with sufficient data are included, other combinations default to \"uniform weights\" (same as without this setting).", + "explanation": "Explanation:", + "override_support_chance": "Override Support Fleet Chance:", + "normal_day": "Normal (Day):", + "normal_night": "Normal (Night):", + "boss": "Boss:", + "restore_defaults": "Restore Defaults", + "simulation": "Simulation", + "watch_sortie": "Watch a Sortie", + "opens_in_replayer": "(Opens in Replayer)", + "simulate_n_times_and_show_stats": "Simulate {inp_num} times and show statistics:", + "go": "Go", + "cancel": "Cancel", + "clear": "Clear", + "statistics": "Statistics", + "note_calc_wip": "Accuracy of calculations is a work in progress and will be improved as new information is discovered. Please note that values are rough and may not exactly reflect real in-game rates.", + "warn_combined_fleet": "Warning: Combined fleet and vanguard calculations are extremely tentative, so these results are especially rough. See Show Advanced for settings.", + "number_of_runs": "Number of runs:", + "final_rank_rate": "Final Rank Rate:", + "retreat": "Retreat", + "enemy_flagship_sunk_rate": "Enemy Flagship Sunk Rate:", + "flagship_sunk": "Flagship Sunk", + "avg_n_hp_per_run": "Avg {txt_hp} HP per run", + "avg_n_hp_per_boss": "Avg {txt_hp} HP per boss", + "avg_n_tp_per_run": "Avg {txt_tp} TP per run", + "rank_per_battle": "Rank Per Battle:", + "mvp_rate_per_battle": "{img_mvp} Rate Per Battle:", + "ship_n": "Ship {0}", + "air_state_rate_per_battle": "Air State Rate Per Battle:", + "air_state_ASP": "AS+", + "air_state_AS": "AS", + "air_state_AP": "AP", + "air_state_AD": "AD", + "air_state_AI": "AI", + "taiha_rate_per_battle": "{img_taiha} Rate Per Battle:", + "heavy_damage": "Heavy Damage", + "any": "Any", + "no_chuuha_after_battle": "No {img_chuuha} After Battle:", + "moderate_damage": "Moderate Damage", + "all": "All", + "avg_resupply": "Avg Resupply:", + "fuel": "Fuel", + "ammo": "Ammo", + "steel": "Steel", + "baux": "Bauxite", + "bucket": "Bucket", + "repair_team": "Repair Team", + "avg_repair": "Avg Repair:", + "avg_resource_per": "Avg Resource Per {img}:", + "copy_to_clipboard": "Copy to Clipboard", + "copied_to_clipboard": "Copied to Clipboard", + "avg_emptied_plane_slot": "Avg Emptied Plane Slot:", + "avg_emptied_lbas_slot": "Avg Emptied LBAS Slot:", + + "node_n": "Node {0}", + "battle_type": "Battle Type:", + "battle_normal": "Normal", + "battle_night_only": "Night Only", + "battle_air_raid": "Air Raid", + "battle_air_only": "Air Only", + "night_battle": "Night Battle?", + "always_if_possible": "Always if possible", + "only_day_rank_less_than_A": "Only if Day Rank less than A", + "only_day_rank_less_than_B": "Only if Day Rank less than B", + "only_flag_not_sunk": "Only if Enemy Flagship not sunk", + "resupply_cost": "Resupply Cost:", + "submarine_only": "Submarine Only", + "add_cost": "Add Cost (% of current supply before battle):", + "max": "Max:", + "player_formation": "Player Formation:", + "use_form_if_special_impossible": "Use \u00a0{img_form}\u00a0 if Special Attack becomes impossible", + "line_ahead": "Line Ahead", + "CF4": "CF4", + "lbas_waves": "LBAS Waves:", + "support": "Support:", + "support_normal": "Normal", + "support_boss": "Boss", + "use_smokescreen": "Use Smokescreen", + "enable_barrage_balloon_effects": "Enable Barrage Balloon Effects", + "enable_atoll_node_effects": "Enable Atoll Node Effects", + "use_anchorage_repair_before_battle": "Use Anchorage Repair BEFORE battle", + "override_historical_bonuses": "Override Historical Bonuses:", + "set_bonuses": "Set Bonuses", + "main_fleet_set": "Main Fleet set", + "lbas_set": "Land Base Aerial Support set", + "friend_fleet_set": "Friend Fleet set", + "import_bonuses_once": "Import Bonuses Once", + + "fleet_comp_num": "{0} - Comp {1}", + "weight": "Weight", + "import_kcnav": "Import KCNav", + + "ship_has_customised_stats": "Ship has customised stats", + "ship_has_unknown_stats": "Ship has unknown stats", + + "load_options": "Load options:", + "from_text": "From text:", + "from_text_note": "Can use: Simulator's default JSON, Deckbuilder JSON, KC3 Replay JSON", + "load": "Load", + "fleet": "Fleet:", + "CTF": "CTF", + "STF": "STF", + "TCF": "TCF", + "from_kc3_file": "From .kc3 file", + "from_preset": "From preset:", + "clear_all": "Clear All", + "export_deckbuilder": "Export DeckBuilder", + "stat_level": "Level", + "stat_HP": "HP", + "stat_true_value_unknown": "This stat's true value is currently unknown.", + "stat_true_value_placeholder": "This stat's true value is unknown, it is a placeholder not backed by data. Recommended to try setting your own value.", + "stat_true_value_db_estimate": "This stat's true value is unknown, it is an estimate based on data from DB submissions.", + "stat_Firepower": "Firepower", + "stat_Torpedo": "Torpedo", + "stat_Anti-Air": "Anti-Air", + "stat_Armour": "Armour", + "stat_Evasion": "Evasion", + "stat_Anti-Submarine": "Anti-Submarine", + "stat_Line of Sight": "Line of Sight", + "stat_luck": "Luck", + "stat_range": "Range", + "stat_divebomb": "Divebomb", + "stat_accuracy": "Accuracy", + "stat_torpedo_accuracy": "Torpedo Accuracy", + "bonus_dmg": "Bonus Dmg", + "bonus_dmg_desc": "Mapwide Historical Damage Bonus Multiplier", + "bonus_acc": "Bonus Acc", + "bonus_acc_desc": "Mapwide Historical Accuracy Bonus Multiplier", + "bonus_eva": "Bonus Eva", + "bonus_eva_desc": "Mapwide Historical Evasion Bonus Multiplier", + "debuff_dmg": "Debuff Dmg", + "debuff_dmg_desc": "Multiplier applied to LAST NODE FLAGSHIP only, stacks with above", + "slot_size": "Slot Size", + "proficiency": "Proficiency", + "improvement": "Improvement", + "hp_init": "HP Init", + "init": "Init:", + "morale": "Morale:", + "fuel_percent": "Fuel Percent", + "ammo_percent": "Ammo Percent", + "air_sub_node": "Air Sub Node", + "air_sub_support": "Support:", + "show_equipped_stats": "Show Equipped Stats", + "autoscale_stats": "Auto-Scale {img_hp}/{img_ev}/{img_asw}/{img_los} with {img_lv}", + "preserve_bonus_on_change": "Preserve Bonus on ship change", + "show_additional_stats": "Show Additional Stats", + "single_fleet": "Single Fleet", + "combined_fleet": "Combined Fleet", + "carrier_task_force": "Carrier Task Force", + "surface_task_force": "Surface Task Force", + "transport_combined_fleet": "Transport Combined Fleet", + "strike_force": "Strike Force", + "set_all_morale_to": "Set All Morale To:", + + "fleet_air_power": "Fleet Air Power:", + "fleet_air_power_combined": "combined", + "fleet_air_power_lbas": "vs LBAS", + "transport": "Transport:", + "effective_los": "Effective LoS (HQ120):", + "shell_power": "Shell Power:", + "nb_power": "NB Power:", + "asw_power": "ASW Power:", + "can_oasw": "Can OASW", + "standard_accuracy": "Standard Accuracy:", + "fit_accuracy": "Fit Accuracy:", + "fit_accuracy_night": "Fit Accuracy Night:", + "standard_evasion": "Standard Evasion:", + "artillery_spot_rate": "Artillery Spot Rate:", + "in_ASP_AS": "(in AS+ / AS)", + "night_attack": "Night Attack:", + "anti_air": "Anti-Air:", + "proportional": "Proportional:", + "flat": "Flat:", + "aaci": "AACI", + "aaci_none": "None", + "aaci_planes": "Planes:", + "aaci_rate": "Rate:", + "aaci_rate_fleet": "Fleet:", + "aaci_multiplier": "Multiplier:", + "rocket_barrage": "Rocket Barrage:", + "plane_proficiency": "Plane Proficiency:", + "prof_acc_bonus": "Acc Bonus:", + "prof_crit_rate_bonus": "Crit Rate Bonus:", + "prof_crit_multiplier": "Crit Multiplier:", + "prof_air_power": "Air Power:", + "night_contact": "Night Contact:", + "sas_improvement": "Improvement:", + "impr_shelling_power": "Shelling Power:", + "impr_shelling_acc": "Shelling Acc:", + "impr_shelling_evade": "Shelling Evade:", + "impr_night_power": "Night Power:", + "impr_night_acc": "Night Acc:", + "impr_torpedo_power": "Torpedo Power:", + "impr_torpedo_acc": "Torpedo Acc:", + "impr_torpedo_evade": "Torpedo Evade:", + "impr_asw_power": "ASW Power:", + "impr_asw_acc": "ASW Acc:", + "impr_armour": "Armour:", + "vs_installation_power": "VS Installation Power:", + "soft_skin": "Soft-skin:", + "pillbox": "Pillbox:", + "iso_hime": "Iso Hime:", + "harbour_summer": "Harbour Summer:", + "supply_post_mod": "Supply Post-mod:", + "anchorage_post_mod": "Anchorage Post-mod:", + "dock_post_mod": "Dock Post-mod:", + + "sortie_air_power": "Sortie Air Power:", + "defence_air_power": "Defence Air Power:", + "high_altitude": "High-Altitude:", + "lbas_range": "Range:", + "lbas_sortie_cost": "Sortie Cost:", + "lbas_fuel": "Fuel:", + "lbas_ammo": "Ammo:", + + "import_export_data_format": "Import/Export data format used by {link_db} and {link_aircalc}.", + "deckbuilder": "DeckBuilder", + "aerial_combat_simulator": "Aerial Combat Simulator", + "note_db_from_text": "Note: Can also import to specific fleet by pasting DeckBuilder format in fleet editor's From Text.", + "lbas": "LBAS", + "import_support_normal": "Support (Normal):", + "import_support_boss": "Support (Boss):", + "export_text": "Export Text", + "open_in_deckbuilder": "Open in DeckBuilder", + "open_in_aircalc": "Open in Air Sim", + + "world": "World:", + "map": "Map:", + "edges": "Edges:", + "edges_desc": "e.g. 1,2,3", + "gauge": "Phase:", + "map_hp": "Map HP:", + "difficulty": "Difficulty:", + "diff_all": "All", + "diff_A": "Hard", + "diff_B": "Normal", + "diff_C": "Easy", + "diff_D": "Casual", + "hq_level": "HQ Level:", + "ff_skip_comps": "Skip comps with same ship in Main Fleet?", + "date": "Date:", + "submit": "Submit", + "no_comps_found": "No Comps Found", + "kcnav_error": "KCNav Error", + "kcnav_timed_out": "KCNav timed out", + + "import_bonuses_dewy": "Import Bonuses from {link_dewy}:", + "dewy": "Dewy", + "node": "Node:", + "debuffed": "Debuffed", + "from_friend_fleet": "From Friend Fleet", + "from_targeting_boss": "From Targeting Boss", + "import_to_main_fleet": "Import to Main Fleet", + "import_to_friend_fleets": "Import to Friend Fleets", + "load_from_dewy": "Load from Dewy", + "load_from_kcnav": "Load from KCNav", + "no_data_found": "No Data Found", + "no_ship_matches_found": "No Ship Matches Found", + "request_error_not_found": "Request error/Not found", + "request_timed_out": "Request timed out", + "ship": "Ship", + "count": "Count", + "max_low": "Max Low", + "min_high": "Min High", + "import_value": "Import Value", + "low_all": "Low All", + "high_all": "High All", + "average_all": "Average All", + "confirm": "Confirm", + + "warn_replay_import": "Warning: Replay import will overwrite existing data.", + "download_backup_of_current": "Download backup of current fleet and node data?", + "download_a_backup": "Download a backup of current fleet and node data to a file.", + "download": "Download", + "load_backup": "Load Backup:", + "error": "Error", + "import_all": "Import All (Reloads Page)", + "import_player_only": "Import Player Fleets + LBAS Only", + "reset_all_data": "Reset All Data (Reloads Page)", + "reset_confirm": "Confirm", + "continue": "Continue", + + "require_los_after_fcf": "Require LoS (after FCF):", + "require_on_node": "on Node", + "node_all": "All", + "require_radar_after_fcf": "Require Ships with Surface Radar (after FCF):", + "require_ship_counts": "Require Ship Counts (after FCF):", + "ship_counts_desc": "e.g. \"DD\", \"DE/DD/CL\", \"XX\"", + "add": "Add", + "never_use_on": "Never Use On:", + "note_require_on_node": "* (\"on Node\" = applies check after battle on this node and on all nodes before it, for example: \"on Node 2\" = checks on nodes 1 and 2, does not check on node 3 and after)", + + "auto_set_historical_bonus": "Auto-Set Historical Bonus", + "current_data_set_updated": "Current data set has been updated{date}. Re-apply all bonuses now?", + "manually_compiled_bonuses": "Manually compiled bonuses (Recommended if available)", + "simulator_preset": "Simulator Preset", + "bonus_ranges_auto_calc": "Bonus ranges automatically calculated from TsunDB", + "set": "Set:", + "none": "None", + "note": "Note:", + "damage": "Damage:", + "use_preset_values": "Use Preset Values", + "use_average": "Use Average", + "use_min": "Use Min", + "use_max": "Use Max", + "accuracy_evasion": "Accuracy/Evasion:", + "none_ignore": "None (Ignore)", + "none_overwrite": "None (Overwrite)", + "use_estimated_values": "Use Estimated Values", + "use_equal_damage_mod": "Use Equal to Damage Mod", + "use_half_damage_mod": "Use Half of Damage Mod", + "include_speculated_ships": "Include Speculated Ships", + "include_speculated_ships_desc": "Ships which have no data confirmation yet, but are speculated to have bonus based on historical formations", + "start": "Start", + "dismiss": "Dismiss", + "apply_to_current": "Apply to Current", + "apply_to_current_desc": "\u2610 All newly added ships starting now will have these bonuses as defaults.\n\u2611 Also apply these bonuses now to all currently set ships (Set: None = remove all).", + "apply_dmg_only": "Apply Dmg Only", + "loading": "Loading", + "load_error_autobonus_turn_off": "Load error, Auto-Bonus will be turned off", + + "mechanic": { + "artillerySpotting": "Artillery Spotting", + "AACI": "Anti-Air Cut-In", + "fitGun": "Fit Gun", + "OASW": "Opening ASW", + "CVCI": "Carrier Cut-In", + "destroyerNBCI": "Destroyer NB Cut-In", + "LBASBuff": "LBAS/Support Revamp (Fall 17)", + "eqBonus": "Equipment Bonus", + "installRevamp": "New Soft-Skin Installation Mods", + "newSupply": "New Fuel/Ammo Node Costs", + "enable_echelon": "New Echelon Mods", + "aaResist": "Anti-Air Resist", + "divebomberInstall": "Divebomber Installation Targeting", + "enable_DDCI": "Destroyer NB Cut-In Buff (Double Hit)", + "subFleetAttack": "Submarine Fleet Attack", + "kongouSpecialBuff": "Kongou Special Buff", + "coloradoSpecialFix": "Colorado Special Fix", + "eqBonusTorp": "Torpedo Airstrike Use Equipment Bonus", + "eqBonusASW": "ASW Use Equipment Bonus", + "ffReroll": "Friend Fleet Flagship Reroll", + "eqBonusAA": "Anti-Air Use Equipment Bonus", + "antiSubRaid": "Anti-Sub Air Raid", + "enable_ASWPlaneAir": "Autogyro/Liaison Air Battle", + "enable_AACIRework": "AACI Rework (Sequential Roll + New Priority)" + }, + "spotting": { + "DA": "DA", + "Sec. CI": "Sec. CI", + "Radar CI": "Radar CI", + "AP+Sec. CI": "AP+Sec. CI", + "AP CI": "AP CI", + "CVCI (FBA)": "CVCI (FBA)", + "CVCI (BBA)": "CVCI (BBA)", + "CVCI (BA)": "CVCI (BA)", + "Zuiun CI": "Zuiun CI", + "DB CI": "DB CI" + }, + "nbatk": { + "Single": "Single", + "DA": "DA", + "Mixed CI": "Mixed CI", + "Torpedo CI": "Torpedo CI", + "Sec. Gun CI": "Sec. Gun CI", + "Main Gun CI": "Main Gun CI", + "CVCI (1.25)": "CVCI (1.25)", + "CVCI (1.2)": "CVCI (1.2)", + "CVCI (1.18)": "CVCI (1.18)", + "DDCI (GTR) x1": "DDCI (GTR) x1", + "DDCI (LTR) x1": "DDCI (LTR) x1", + "DDCI (TTL) x1": "DDCI (TTL) x1", + "DDCI (TDL) x1": "DDCI (TDL) x1", + "DDCI (GTR) x2": "DDCI (GTR) x2", + "DDCI (LTR) x2": "DDCI (LTR) x2", + "DDCI (TTL) x2": "DDCI (TTL) x2", + "DDCI (TDL) x2": "DDCI (TDL) x2", + "NZuiun CI (ZZR)": "NZuiun CI (ZZR)", + "NZuiun CI (ZZ)": "NZuiun CI (ZZ)", + "NZuiun CI (ZR)": "NZuiun CI (ZR)", + "NZuiun CI (Z)": "NZuiun CI (Z)" + }, + + "ui_search": "Search", + "ui_back": "Back", + "ship_name_0": "", + "equip_name_0": "", + "selector": { + "ship_section_Shipgirls": "Shipgirls", + "ship_section_Abyssals": "Abyssals", + "ship_section_Extra": "Extra", + "ship_cat_DD": "DD", + "ship_cat_CL(T)": "CL(T)", + "ship_cat_CA(V)": "CA(V)", + "ship_cat_BB(V)": "BB(V)", + "ship_cat_CVL": "CVL", + "ship_cat_CV": "CV", + "ship_cat_CV(L)": "CV(L)", + "ship_cat_SS(V)": "SS(V)", + "ship_cat_Other": "Other", + "ship_cat_Installation": "Installation", + "ship_cat_Arpeggio": "Arpeggio", + "ship_cat_Vita": "Vita", + "ship_cat_???": "???", + "ship_title_Base": "Base", + "equip_section_Player": "Player", + "equip_section_Abyssal": "Abyssal", + "equip_cat_Main Gun (S)": "Main Gun (S)", + "equip_cat_Main Gun (M)": "Main Gun (M)", + "equip_cat_Main Gun (L)": "Main Gun (L)", + "equip_cat_Secondary Gun": "Secondary Gun", + "equip_cat_Torpedo": "Torpedo", + "equip_cat_Midget Sub": "Midget Sub", + "equip_cat_Fighter": "Fighter", + "equip_cat_Dive Bomber": "Dive Bomber", + "equip_cat_Torpedo Bomber": "Torpedo Bomber", + "equip_cat_Other Aircraft": "Other Aircraft", + "equip_cat_Seaplane": "Seaplane", + "equip_cat_Seaplane Bomber": "Seaplane Bomber", + "equip_cat_Seaplane Fighter": "Seaplane Fighter", + "equip_cat_Radar": "Radar", + "equip_cat_Sonar": "Sonar", + "equip_cat_Depth Charge": "Depth Charge", + "equip_cat_Engine": "Engine", + "equip_cat_Shell": "Shell", + "equip_cat_Anti-Air Gun": "Anti-Air Gun", + "equip_cat_Bulge": "Bulge", + "equip_cat_Night Gear": "Night Gear", + "equip_cat_Landing Craft": "Landing Craft", + "equip_cat_Land-based Bomber": "Land-based Bomber", + "equip_cat_Interceptor": "Interceptor", + "equip_cat_Other": "Other" + }, + "results": { + "retreat_rate": "Retreat", + "S_rate": "S Rate", + "flagsunk_rate": "Flagship Sunk Rate", + "avg_per_S": "Avg Resource Per S", + "avg_per_flagsunk": "Avg Resource Per Flagship Sunk", + "fuel": "Fuel", + "ammo": "Ammo", + "steel": "Steel", + "baux": "Bauxite", + "buckets": "Buckets" + } +} \ No newline at end of file diff --git a/js/data/strings_ja.json b/js/data/strings_ja.json new file mode 100644 index 00000000..c1310d53 --- /dev/null +++ b/js/data/strings_ja.json @@ -0,0 +1,537 @@ +{ + "kancolle_sortie_simulator": "艦これ出撃シミュレーター", + "save_load_simulator_backup": "Save/Load Simulator Backup", + "import_export_deckbuilder_format": "Import/Export DeckBuilder Format", + "fleets": "Fleets", + "main_fleet": "主力艦隊", + "support_fleet_normal": "Support Fleet (Normal)", + "support_fleet_boss": "Support Fleet (Boss)", + "use_normal_support": "道中支援を派遣する", + "use_boss_support": "決戦支援を派遣する", + "land_base_aerial_support": "基地航空隊", + "friend_fleet": "友軍艦隊", + "use_friend_fleet": "友軍艦隊を要請する", + "battles": "Battles", + "insert_node": "Insert Node", + "settings": "設定", + "retreat_on_taiha": "{img_taiha}したら撤退する", + "retreat_on_taiha_even": "{img_taiha}したときに{img_repair}を積んでいてもNode: {sel_node}より前なら撤退する", + "none_node": "None", + "fcf_settings": "司令部設定", + "replace_formations": "陣形に必要な隻数が足りない場合、{closest_alternative}で置き換える", + "closest_alternative": "最も近い陣形", + "closest_alternative_tooltip": "< 3 Ships \u2192 Line Ahead\nDiamond \u2192 Double Line\nCF3 \u2192 CF1\nCF4 \u2192 CF2", + "historical_bonus": "史実特効", + "auto_set_bonus": "Auto-Set Historical Bonuses", + "import_mapwide_bonuses_once": "Import Mapwide Bonuses Once", + "mechanics": "Mechanics:", + "day_shelling_softcap": "昼戦(砲撃戦)キャップ:", + "asw_softcap": "対潜キャップ:", + "torpedo_softcap": "昼戦(雷撃戦)キャップ:", + "night_softcap": "夜戦キャップ:", + "air_softcap": "航空戦キャップ:", + "support_softcap": "支援(砲撃)キャップ:", + "use_default_w6_air_raid": "6面の空襲マスでデフォルトのコストを消費する", + "bucket_count_use": "HPが {inp_hp}%以下、または入渠が {inp_time} 時間以上でバケツを使用する", + "bucket_do_not_count_use": "入渠が {inp_time} 時間未満なら使用しない(上記とは関係なく)", + "carry_over_ship_hp": "{img_bucket} の使用条件に合致しない限りHPを持ち越す(不使用条件は含まない)", + "carry_over_ship_morale": "艦のcond値を持ち越す", + "show_advanced": "詳細設定", + "vanguard_evasion_bonus": "警戒陣回避ボーナス:", + "use_flat_evasion_bonus": "一律で適用", + "shelling": "砲撃", + "torpedo": "雷撃", + "DD_n": "駆逐{0}:", + "other_n": "その他艦種{0}:", + "use_accuracy_multiplier": "個別に指定(倍率)", + "set_event_values": "イベント海域での値をセット", + "set_normal_values": "通常海域での値をセット", + "special_attack_activation_rate": "特殊砲撃発動率", + "nelson_touch": "Nelsonタッチ:", + "nagato_special": "長陸奥タッチ(長門旗艦):", + "mutsu_special": "長陸奥タッチ(陸奥旗艦):", + "colorado_special": "Coloradoタッチ:", + "kongou_special": "金剛タッチ(僚艦夜戦突撃):", + "yamato_special_3": "大和タッチ (3隻):", + "yamato_special_2": "大和タッチ (2隻):", + "submarine_special": "潜水艦隊攻撃:", + "use_provisional_B-25": "深海棲艦による跳躍爆撃にはB-25のボーナスを仮適用", + "cf_airstrike_base_mods": "連合艦隊の航空戦における補正値:", + "damage_base": "ダメージ(基礎: {0})", + "accuracy_base": "命中(基礎: {0})", + "main": "主力", + "escort": "随伴", + "player_target_battle": "自艦隊(砲撃戦)", + "player_target_raid": "自艦隊(空襲)", + "enemy_target": "敵艦隊", + "arctic_camo_bonuses": "北方迷彩(+北方装備)ボーナス", + "armour": "装甲:", + "evasion_shelling": "回避(砲撃戦):", + "smokescreen_mods": "煙幕補正値:", + "smoke_level": "煙幕レベル:", + "activation_rate": "活性化率:", + "use_provisional_link": "Use provisional {link}", + "activation_formula": "activation rate formula", + "shelling_accuracy_multiplier": "砲撃命中率:", + "player_no_radar": "自艦隊(電探なし)", + "player_radar": "自艦隊(電探あり)", + "enemy_no_radar": "敵艦隊(電探なし)", + "enemy_radar": "敵艦隊(電探あり)", + "asw_accuracy_multiplier": "対潜命中率:", + "player": "自艦隊", + "enemy": "敵艦隊", + "torpedo_accuracy_multiplier": "雷撃命中率:", + "airstrike_accuracy_multiplier": "航空戦命中率:", + "set_simulator_suggested_values": "シミュレータの推奨値(暫定)をセット", + "airstrike_may_be_inaccurate": "航空戦は不正確かもしれません", + "activation_rate_suggestions": "発動率についての提案", + "other_suggestions_and_data": "その他の提案とデータ", + "shelling_range_tie_randomness_weights": "砲撃戦において同射程の艦が複数存在するときの攻撃順の偏向:", + "enable_heuristic_weights": "偏向(推定値)を有効にする", + "warning_experimental_subject_to_change": "警告: この設定は実験的な機能で変更される可能性があります", + "shelling_range_tie_description": "この設定の偏向は、DBデータ内の各順序の出現回数のサンプルに基づいています。これはあくまで推定であり、実際の計算式は不明です。また、実際のゲームで非常に稀でDBに記録されていない順序が、シミュレーターではこの設定で不可能になるかもしれません。十分なデータがある範囲の組み合わせのみが含まれ、それ以外の組み合わせは「一様な偏向」(この設定を使用しない場合と同じ)に設定されます。", + "explanation": "詳細:", + "override_support_chance": "支援艦隊来援率上書き:", + "normal_day": "道中支援(昼戦):", + "normal_night": "道中支援(夜戦):", + "boss": "決戦支援:", + "restore_defaults": "設定をリセット", + "simulation": "Simulation", + "watch_sortie": "出撃記録", + "opens_in_replayer": "プレーヤーで開く", + "simulate_n_times_and_show_stats": "シミュレート{inp_num}回の統計を表示:", + "go": "Go", + "cancel": "Cancel", + "clear": "Clear", + "statistics": "演算結果", + "note_calc_wip": "計算の精度は現在も改善中で、新しい情報が発見されるにつれて改善されます。値は大まかなものであり、実際のゲーム内レートを正確に反映していない可能性があることに注意してください。", + "warn_combined_fleet": "警告: 連合艦隊と警戒陣の計算は非常に暫定的なため、これらの結果は特に大まかです。設定については、「詳細設定」を参照してください。", + "number_of_runs": "演算回数:", + "final_rank_rate": "出撃あたりのの最終評価:", + "retreat": "Retreat", + "enemy_flagship_sunk_rate": "旗艦撃沈率:", + "flagship_sunk": "Flagship Sunk", + "avg_n_hp_per_run": "出撃あたり{txt_hp}HP", + "avg_n_hp_per_boss": "ボス到達あたり{txt_hp}HP", + "avg_n_tp_per_run": "出撃あたり{txt_tp}TP", + "rank_per_battle": "戦闘ごとの戦闘評価:", + "mvp_rate_per_battle": "{img_mvp}戦闘ごとのMVP率:", + "ship_n": "Ship {0}", + "air_state_rate_per_battle": "戦闘ごとの制空状態:", + "air_state_ASP": "確保", + "air_state_AS": "優勢", + "air_state_AP": "拮抗", + "air_state_AD": "劣勢", + "air_state_AI": "喪失", + "taiha_rate_per_battle": "{img_taiha}戦闘ごとの大破率:", + "heavy_damage": "大破", + "any": "Any", + "no_chuuha_after_battle": "戦闘後に{img_chuuha}艦がいない割合:", + "moderate_damage": "中破", + "all": "All", + "avg_resupply": "平均補給コスト:", + "fuel": "燃料", + "ammo": "弾薬", + "steel": "鋼材", + "baux": "ボーキ", + "bucket": "バケツ", + "repair_team": "Repair Team", + "avg_repair": "平均入渠コスト:", + "avg_resource_per": "最終ノード{img}あたり:", + "copy_to_clipboard": "Copy to Clipboard", + "copied_to_clipboard": "Copied to Clipboard", + "avg_emptied_plane_slot": "平均艦載機スロット全滅数:", + "avg_emptied_lbas_slot": "平均基地航空部隊全滅数:", + + "node_n": "Node {0}", + "battle_type": "Battle Type:", + "battle_normal": "Normal", + "battle_night_only": "Night Only", + "battle_air_raid": "Air Raid", + "battle_air_only": "Air Only", + "night_battle": "夜戦する?", + "always_if_possible": "Always if possible", + "only_day_rank_less_than_A": "Only if Day Rank less than A", + "only_day_rank_less_than_B": "Only if Day Rank less than B", + "only_flag_not_sunk": "Only if Enemy Flagship not sunk", + "resupply_cost": "Resupply Cost:", + "submarine_only": "Submarine Only", + "add_cost": "追加コスト(戦闘開始前に現在の残り資源から):", + "max": "Max:", + "player_formation": "自艦隊陣形:", + "use_form_if_special_impossible": "Use \u00a0{img_form}\u00a0 if Special Attack becomes impossible", + "line_ahead": "Line Ahead", + "CF4": "CF4", + "lbas_waves": "基地航空隊派遣:", + "support": "Support:", + "support_normal": "Normal", + "support_boss": "Boss", + "use_smokescreen": "Use Smokescreen", + "enable_barrage_balloon_effects": "Enable Barrage Balloon Effects", + "enable_atoll_node_effects": "Enable Atoll Node Effects", + "use_anchorage_repair_before_battle": "Use Anchorage Repair BEFORE battle", + "override_historical_bonuses": "史実ボーナス上書き", + "set_bonuses": "Set Bonuses", + "main_fleet_set": "Main Fleet set", + "lbas_set": "Land Base Aerial Support set", + "friend_fleet_set": "Friend Fleet set", + "import_bonuses_once": "Import Bonuses Once", + + "fleet_comp_num": "{0} - Comp {1}", + "weight": "Weight", + "import_kcnav": "Import KCNav", + + "ship_has_customised_stats": "Ship has customised stats", + "ship_has_unknown_stats": "Ship has unknown stats", + + "load_options": "Load options:", + "from_text": "From text:", + "from_text_note": "Can use: Simulator's default JSON, Deckbuilder JSON, KC3 Replay JSON", + "load": "Load", + "fleet": "Fleet:", + "CTF": "CTF", + "STF": "STF", + "TCF": "TCF", + "from_kc3_file": "From .kc3 file", + "from_preset": "From preset:", + "clear_all": "Clear All", + "export_deckbuilder": "Export DeckBuilder", + "stat_level": "Level", + "stat_HP": "HP", + "stat_true_value_unknown": "This stat's true value is currently unknown.", + "stat_true_value_placeholder": "This stat's true value is unknown, it is a placeholder not backed by data. Recommended to try setting your own value.", + "stat_true_value_db_estimate": "This stat's true value is unknown, it is an estimate based on data from DB submissions.", + "stat_Firepower": "Firepower", + "stat_Torpedo": "Torpedo", + "stat_Anti-Air": "Anti-Air", + "stat_Armour": "Armour", + "stat_Evasion": "Evasion", + "stat_Anti-Submarine": "Anti-Submarine", + "stat_Line of Sight": "Line of Sight", + "stat_luck": "Luck", + "stat_range": "Range", + "stat_divebomb": "Divebomb", + "stat_accuracy": "Accuracy", + "stat_torpedo_accuracy": "Torpedo Accuracy", + "bonus_dmg": "Bonus Dmg", + "bonus_dmg_desc": "Mapwide Historical Damage Bonus Multiplier", + "bonus_acc": "Bonus Acc", + "bonus_acc_desc": "Mapwide Historical Accuracy Bonus Multiplier", + "bonus_eva": "Bonus Eva", + "bonus_eva_desc": "Mapwide Historical Evasion Bonus Multiplier", + "debuff_dmg": "Debuff Dmg", + "debuff_dmg_desc": "Multiplier applied to LAST NODE FLAGSHIP only, stacks with above", + "slot_size": "Slot Size", + "proficiency": "Proficiency", + "improvement": "Improvement", + "hp_init": "HP Init", + "init": "開始HP:", + "morale": "Cond値:", + "fuel_percent": "Fuel Percent", + "ammo_percent": "Ammo Percent", + "air_sub_node": "Air Sub Node", + "air_sub_support": "Support:", + "show_equipped_stats": "装備補正値を見る", + "autoscale_stats": "自動調整 {img_hp}/{img_ev}/{img_asw}/{img_los} with {img_lv}", + "preserve_bonus_on_change": "艦の変更時にボーナスを維持", + "show_additional_stats": "ステータス詳細", + "single_fleet": "Single Fleet", + "combined_fleet": "Combined Fleet", + "carrier_task_force": "Carrier Task Force", + "surface_task_force": "Surface Task Force", + "transport_combined_fleet": "Transport Combined Fleet", + "strike_force": "Strike Force", + "set_all_morale_to": "Cond値一括適用:", + + "fleet_air_power": "Fleet Air Power:", + "fleet_air_power_combined": "combined", + "fleet_air_power_lbas": "vs LBAS", + "transport": "Transport:", + "effective_los": "Effective LoS (HQ120):", + "shell_power": "Shell Power:", + "nb_power": "NB Power:", + "asw_power": "ASW Power:", + "can_oasw": "Can OASW", + "standard_accuracy": "Standard Accuracy:", + "fit_accuracy": "Fit Accuracy:", + "fit_accuracy_night": "Fit Accuracy Night:", + "standard_evasion": "Standard Evasion:", + "artillery_spot_rate": "Artillery Spot Rate:", + "in_ASP_AS": "(in AS+ / AS)", + "night_attack": "Night Attack:", + "anti_air": "Anti-Air:", + "proportional": "Proportional:", + "flat": "Flat:", + "aaci": "AACI", + "aaci_none": "None", + "aaci_planes": "Planes:", + "aaci_rate": "Rate:", + "aaci_rate_fleet": "Fleet:", + "aaci_multiplier": "Multiplier:", + "rocket_barrage": "Rocket Barrage:", + "plane_proficiency": "Plane Proficiency:", + "prof_acc_bonus": "Acc Bonus:", + "prof_crit_rate_bonus": "Crit Rate Bonus:", + "prof_crit_multiplier": "Crit Multiplier:", + "prof_air_power": "Air Power:", + "night_contact": "Night Contact:", + "sas_improvement": "Improvement:", + "impr_shelling_power": "Shelling Power:", + "impr_shelling_acc": "Shelling Acc:", + "impr_shelling_evade": "Shelling Evade:", + "impr_night_power": "Night Power:", + "impr_night_acc": "Night Acc:", + "impr_torpedo_power": "Torpedo Power:", + "impr_torpedo_acc": "Torpedo Acc:", + "impr_torpedo_evade": "Torpedo Evade:", + "impr_asw_power": "ASW Power:", + "impr_asw_acc": "ASW Acc:", + "impr_armour": "Armour:", + "vs_installation_power": "VS Installation Power:", + "soft_skin": "Soft-skin:", + "pillbox": "Pillbox:", + "iso_hime": "Iso Hime:", + "harbour_summer": "Harbour Summer:", + "supply_post_mod": "Supply Post-mod:", + "anchorage_post_mod": "Anchorage Post-mod:", + "dock_post_mod": "Dock Post-mod:", + + "sortie_air_power": "Sortie Air Power:", + "defence_air_power": "Defence Air Power:", + "high_altitude": "High-Altitude:", + "lbas_range": "Range:", + "lbas_sortie_cost": "Sortie Cost:", + "lbas_fuel": "Fuel:", + "lbas_ammo": "Ammo:", + + "import_export_data_format": "Import/Export data format used by {link_db} and {link_aircalc}.", + "deckbuilder": "DeckBuilder", + "aerial_combat_simulator": "Aerial Combat Simulator", + "note_db_from_text": "Note: Can also import to specific fleet by pasting DeckBuilder format in fleet editor's From Text.", + "lbas": "LBAS", + "import_support_normal": "Support (Normal):", + "import_support_boss": "Support (Boss):", + "export_text": "Export Text", + "open_in_deckbuilder": "Open in DeckBuilder", + "open_in_aircalc": "Open in Air Sim", + + "world": "World:", + "map": "Map:", + "edges": "Edges:", + "edges_desc": "e.g. 1,2,3", + "gauge": "Phase:", + "map_hp": "Map HP:", + "difficulty": "Difficulty:", + "diff_all": "All", + "diff_A": "Hard", + "diff_B": "Normal", + "diff_C": "Easy", + "diff_D": "Casual", + "hq_level": "HQ Level:", + "ff_skip_comps": "Skip comps with same ship in Main Fleet?", + "date": "Date:", + "submit": "Submit", + "no_comps_found": "No Comps Found", + "kcnav_error": "KCNav Error", + "kcnav_timed_out": "KCNav timed out", + + "import_bonuses_dewy": "Import Bonuses from {link_dewy}:", + "dewy": "Dewy", + "node": "Node:", + "debuffed": "Debuffed", + "from_friend_fleet": "From Friend Fleet", + "from_targeting_boss": "From Targeting Boss", + "import_to_main_fleet": "Import to Main Fleet", + "import_to_friend_fleets": "Import to Friend Fleets", + "load_from_dewy": "Load from Dewy", + "load_from_kcnav": "Load from KCNav", + "no_data_found": "No Data Found", + "no_ship_matches_found": "No Ship Matches Found", + "request_error_not_found": "Request error/Not found", + "request_timed_out": "Request timed out", + "ship": "Ship", + "count": "Count", + "max_low": "Max Low", + "min_high": "Min High", + "import_value": "Import Value", + "low_all": "Low All", + "high_all": "High All", + "average_all": "Average All", + "confirm": "Confirm", + + "warn_replay_import": "Warning: Replay import will overwrite existing data.", + "download_backup_of_current": "Download backup of current fleet and node data?", + "download_a_backup": "Download a backup of current fleet and node data to a file.", + "download": "Download", + "load_backup": "Load Backup:", + "error": "Error", + "import_all": "Import All (Reloads Page)", + "import_player_only": "Import Player Fleets + LBAS Only", + "reset_all_data": "Reset All Data (Reloads Page)", + "reset_confirm": "Confirm", + "continue": "Continue", + + "require_los_after_fcf": "Require LoS (after FCF):", + "require_on_node": "on Node", + "node_all": "All", + "require_radar_after_fcf": "Require Ships with Surface Radar (after FCF):", + "require_ship_counts": "Require Ship Counts (after FCF):", + "ship_counts_desc": "e.g. \"DD\", \"DE/DD/CL\", \"XX\"", + "add": "Add", + "never_use_on": "Never Use On:", + "note_require_on_node": "* (\"on Node\" = applies check after battle on this node and on all nodes before it, for example: \"on Node 2\" = checks on nodes 1 and 2, does not check on node 3 and after)", + + "auto_set_historical_bonus": "Auto-Set Historical Bonus", + "current_data_set_updated": "Current data set has been updated{date}. Re-apply all bonuses now?", + "manually_compiled_bonuses": "Manually compiled bonuses (Recommended if available)", + "simulator_preset": "Simulator Preset", + "bonus_ranges_auto_calc": "Bonus ranges automatically calculated from TsunDB", + "set": "Set:", + "none": "None", + "note": "Note:", + "damage": "Damage:", + "use_preset_values": "Use Preset Values", + "use_average": "Use Average", + "use_min": "Use Min", + "use_max": "Use Max", + "accuracy_evasion": "Accuracy/Evasion:", + "none_ignore": "None (Ignore)", + "none_overwrite": "None (Overwrite)", + "use_estimated_values": "Use Estimated Values", + "use_equal_damage_mod": "Use Equal to Damage Mod", + "use_half_damage_mod": "Use Half of Damage Mod", + "include_speculated_ships": "Include Speculated Ships", + "include_speculated_ships_desc": "Ships which have no data confirmation yet, but are speculated to have bonus based on historical formations", + "start": "Start", + "dismiss": "Dismiss", + "apply_to_current": "Apply to Current", + "apply_to_current_desc": "\u2610 All newly added ships starting now will have these bonuses as defaults.\n\u2611 Also apply these bonuses now to all currently set ships (Set: None = remove all).", + "apply_dmg_only": "Apply Dmg Only", + "loading": "Loading", + "load_error_autobonus_turn_off": "Load error, Auto-Bonus will be turned off", + + "mechanic": { + "artillerySpotting": "Artillery Spotting", + "AACI": "Anti-Air Cut-In", + "fitGun": "Fit Gun", + "OASW": "Opening ASW", + "CVCI": "Carrier Cut-In", + "destroyerNBCI": "Destroyer NB Cut-In", + "LBASBuff": "LBAS/Support Revamp (Fall 17)", + "eqBonus": "Equipment Bonus", + "installRevamp": "New Soft-Skin Installation Mods", + "newSupply": "New Fuel/Ammo Node Costs", + "enable_echelon": "New Echelon Mods", + "aaResist": "Anti-Air Resist", + "divebomberInstall": "Divebomber Installation Targeting", + "enable_DDCI": "Destroyer NB Cut-In Buff (Double Hit)", + "subFleetAttack": "Submarine Fleet Attack", + "kongouSpecialBuff": "Kongou Special Buff", + "coloradoSpecialFix": "Colorado Special Fix", + "eqBonusTorp": "Torpedo Airstrike Use Equipment Bonus", + "eqBonusASW": "ASW Use Equipment Bonus", + "ffReroll": "Friend Fleet Flagship Reroll", + "eqBonusAA": "Anti-Air Use Equipment Bonus", + "antiSubRaid": "Anti-Sub Air Raid", + "enable_ASWPlaneAir": "Autogyro/Liaison Air Battle", + "enable_AACIRework": "AACI Rework (Sequential Roll + New Priority)" + }, + "spotting": { + "DA": "DA", + "Sec. CI": "Sec. CI", + "Radar CI": "Radar CI", + "AP+Sec. CI": "AP+Sec. CI", + "AP CI": "AP CI", + "CVCI (FBA)": "CVCI (FBA)", + "CVCI (BBA)": "CVCI (BBA)", + "CVCI (BA)": "CVCI (BA)", + "Zuiun CI": "Zuiun CI", + "DB CI": "DB CI" + }, + "nbatk": { + "Single": "Single", + "DA": "DA", + "Mixed CI": "Mixed CI", + "Torpedo CI": "Torpedo CI", + "Sec. Gun CI": "Sec. Gun CI", + "Main Gun CI": "Main Gun CI", + "CVCI (1.25)": "CVCI (1.25)", + "CVCI (1.2)": "CVCI (1.2)", + "CVCI (1.18)": "CVCI (1.18)", + "DDCI (GTR) x1": "DDCI (GTR) x1", + "DDCI (LTR) x1": "DDCI (LTR) x1", + "DDCI (TTL) x1": "DDCI (TTL) x1", + "DDCI (TDL) x1": "DDCI (TDL) x1", + "DDCI (GTR) x2": "DDCI (GTR) x2", + "DDCI (LTR) x2": "DDCI (LTR) x2", + "DDCI (TTL) x2": "DDCI (TTL) x2", + "DDCI (TDL) x2": "DDCI (TDL) x2", + "NZuiun CI (ZZR)": "NZuiun CI (ZZR)", + "NZuiun CI (ZZ)": "NZuiun CI (ZZ)", + "NZuiun CI (ZR)": "NZuiun CI (ZR)", + "NZuiun CI (Z)": "NZuiun CI (Z)" + }, + + "ui_search": "検索", + "ui_back": "戻る", + "ship_name_0": "", + "equip_name_0": "", + "selector": { + "ship_section_Shipgirls": "艦娘", + "ship_section_Abyssals": "深海棲艦", + "ship_section_Extra": "EXTRA", + "ship_cat_DD": "駆逐艦", + "ship_cat_CL(T)": "軽巡級", + "ship_cat_CA(V)": "重巡級", + "ship_cat_BB(V)": "戦艦級", + "ship_cat_CVL": "軽空母", + "ship_cat_CV": "正規空母", + "ship_cat_CV(L)": "航空母艦", + "ship_cat_SS(V)": "潜水艦", + "ship_cat_Other": "その他", + "ship_cat_Installation": "陸上施設", + "ship_cat_Arpeggio": "アルペジオ", + "ship_cat_Vita": "艦これ改", + "ship_cat_???": "???", + "ship_title_Base": "未改", + "equip_section_Player": "艦娘", + "equip_section_Abyssal": "深海棲艦", + "equip_cat_Main Gun (S)": "小口径主砲", + "equip_cat_Main Gun (M)": "中口径主砲", + "equip_cat_Main Gun (L)": "大口径主砲", + "equip_cat_Secondary Gun": "副砲", + "equip_cat_Torpedo": "魚雷", + "equip_cat_Midget Sub": "特殊潜航艇", + "equip_cat_Fighter": "艦上戦闘機", + "equip_cat_Dive Bomber": "艦上爆撃機", + "equip_cat_Torpedo Bomber": "艦上攻撃機", + "equip_cat_Other Aircraft": "他の艦載機", + "equip_cat_Seaplane": "水上偵察機", + "equip_cat_Seaplane Bomber": "水上爆撃機", + "equip_cat_Seaplane Fighter": "水上戦闘機", + "equip_cat_Radar": "電探", + "equip_cat_Sonar": "ソナー", + "equip_cat_Depth Charge": "爆雷", + "equip_cat_Engine": "機関部強化", + "equip_cat_Shell": "強化弾", + "equip_cat_Anti-Air Gun": "対空機銃", + "equip_cat_Bulge": "追加装甲", + "equip_cat_Night Gear": "夜戦", + "equip_cat_Landing Craft": "上陸用舟艇", + "equip_cat_Land-based Bomber": "陸上攻撃機", + "equip_cat_Interceptor": "局地戦闘機", + "equip_cat_Other": "その他" + }, + "results": { + "retreat_rate": "撤退率", + "S_rate": "S率", + "flagsunk_rate": "旗艦撃沈率", + "avg_per_S": "S勝利あたり", + "avg_per_flagsunk": "旗艦撃沈あたり", + "fuel": "燃料", + "ammo": "弾薬", + "steel": "鋼材", + "baux": "ボーキ", + "buckets": "バケツ" + } +} \ No newline at end of file diff --git a/js/simulator-ui/cmp.js b/js/simulator-ui/cmp.js index 0a344fff..d255d22b 100644 --- a/js/simulator-ui/cmp.js +++ b/js/simulator-ui/cmp.js @@ -69,132 +69,10 @@ COMMON.CMP_LOADING = { let messages = { en: { - 'ui_search': 'Search', - 'ui_back': 'Back', - 'ship_name_0': '', - 'equip_name_0': '', - 'selector': { - 'ship_section_Shipgirls': 'Shipgirls', - 'ship_section_Abyssals': 'Abyssals', - 'ship_section_Extra': 'Extra', - 'ship_cat_DD': 'DD', - 'ship_cat_CL(T)': 'CL(T)', - 'ship_cat_CA(V)': 'CA(V)', - 'ship_cat_BB(V)': 'BB(V)', - 'ship_cat_CVL': 'CVL', - 'ship_cat_CV': 'CV', - 'ship_cat_CV(L)': 'CV(L)', - 'ship_cat_SS(V)': 'SS(V)', - 'ship_cat_Other': 'Other', - 'ship_cat_Installation': 'Installation', - 'ship_cat_Arpeggio': 'Arpeggio', - 'ship_cat_Vita': 'Vita', - 'ship_cat_???': '???', - 'ship_title_Base': 'Base', - 'equip_section_Player': 'Player', - 'equip_section_Abyssal': 'Abyssal', - 'equip_cat_Main Gun (S)': 'Main Gun (S)', - 'equip_cat_Main Gun (M)': 'Main Gun (M)', - 'equip_cat_Main Gun (L)': 'Main Gun (L)', - 'equip_cat_Secondary Gun': 'Secondary Gun', - 'equip_cat_Torpedo': 'Torpedo', - 'equip_cat_Midget Sub': 'Midget Sub', - 'equip_cat_Fighter': 'Fighter', - 'equip_cat_Dive Bomber': 'Dive Bomber', - 'equip_cat_Torpedo Bomber': 'Torpedo Bomber', - 'equip_cat_Other Aircraft': 'Other Aircraft', - 'equip_cat_Seaplane': 'Seaplane', - 'equip_cat_Seaplane Bomber': 'Seaplane Bomber', - 'equip_cat_Seaplane Fighter': 'Seaplane Fighter', - 'equip_cat_Radar': 'Radar', - 'equip_cat_Sonar': 'Sonar', - 'equip_cat_Depth Charge': 'Depth Charge', - 'equip_cat_Engine': 'Engine', - 'equip_cat_Shell': 'Shell', - 'equip_cat_Anti-Air Gun': 'Anti-Air Gun', - 'equip_cat_Bulge': 'Bulge', - 'equip_cat_Night Gear': 'Night Gear', - 'equip_cat_Landing Craft': 'Landing Craft', - 'equip_cat_Land-based Bomber': 'Land-based Bomber', - 'equip_cat_Interceptor': 'Interceptor', - 'equip_cat_Other': 'Other', - }, - 'results': { - 'retreat_rate': 'Retreat', - 'S_rate': 'S Rate', - 'flagsunk_rate': 'Flagship Sunk Rate', - 'avg_per_S': 'Avg Resource Per S', - 'avg_per_flagsunk': 'Avg Resource Per Flagship Sunk', - 'fuel': 'Fuel', - 'ammo': 'Ammo', - 'steel': 'Steel', - 'baux': 'Bauxite', - 'buckets': 'Buckets', - }, + }, ja: { - 'ui_search': '検索', - 'ui_back': '戻る', - 'ship_name_0': '', - 'equip_name_0': '', - 'selector': { - 'ship_section_Shipgirls': '艦娘', - 'ship_section_Abyssals': '深海棲艦', - 'ship_section_Extra': 'EXTRA', - 'ship_cat_DD': '駆逐艦', - 'ship_cat_CL(T)': '軽巡級', - 'ship_cat_CA(V)': '重巡級', - 'ship_cat_BB(V)': '戦艦級', - 'ship_cat_CVL': '軽空母', - 'ship_cat_CV': '正規空母', - 'ship_cat_CV(L)': '航空母艦', - 'ship_cat_SS(V)': '潜水艦', - 'ship_cat_Other': 'その他', - 'ship_cat_Installation': '陸上施設', - 'ship_cat_Arpeggio': 'アルペジオ', - 'ship_cat_Vita': '艦これ改', - 'ship_cat_???': '???', - 'ship_title_Base': '未改', - 'equip_section_Player': '艦娘', - 'equip_section_Abyssal': '深海棲艦', - 'equip_cat_Main Gun (S)': '小口径主砲', - 'equip_cat_Main Gun (M)': '中口径主砲', - 'equip_cat_Main Gun (L)': '大口径主砲', - 'equip_cat_Secondary Gun': '副砲', - 'equip_cat_Torpedo': '魚雷', - 'equip_cat_Midget Sub': '特殊潜航艇', - 'equip_cat_Fighter': '艦上戦闘機', - 'equip_cat_Dive Bomber': '艦上爆撃機', - 'equip_cat_Torpedo Bomber': '艦上攻撃機', - 'equip_cat_Other Aircraft': '他の艦載機', - 'equip_cat_Seaplane': '水上偵察機', - 'equip_cat_Seaplane Bomber': '水上爆撃機', - 'equip_cat_Seaplane Fighter': '水上戦闘機', - 'equip_cat_Radar': '電探', - 'equip_cat_Sonar': 'ソナー', - 'equip_cat_Depth Charge': '爆雷', - 'equip_cat_Engine': '機関部強化', - 'equip_cat_Shell': '強化弾', - 'equip_cat_Anti-Air Gun': '対空機銃', - 'equip_cat_Bulge': '追加装甲', - 'equip_cat_Night Gear': '夜戦', - 'equip_cat_Landing Craft': '上陸用舟艇', - 'equip_cat_Land-based Bomber': '陸上攻撃機', - 'equip_cat_Interceptor': '局地戦闘機', - 'equip_cat_Other': 'その他', - }, - 'results': { - 'retreat_rate': '撤退率', - 'S_rate': 'S率', - 'flagsunk_rate': '旗艦撃沈率', - 'avg_per_S': 'S勝利あたり', - 'avg_per_flagsunk': '旗艦撃沈あたり', - 'fuel': '燃料', - 'ammo': '弾薬', - 'steel': '鋼材', - 'baux': 'ボーキ', - 'buckets': 'バケツ', - }, + }, } for (let id in SHIPDATA) { @@ -207,11 +85,27 @@ for (let id in EQDATA) { messages.en[key] = EQDATA[id].name; messages.ja[key] = EQDATA[id].nameJP; } -//note: using dev because prod behaves different? (component locale not reactive on $t) -COMMON.i18n = VueI18n.createI18n({ - locale: 'en', - fallbackLocale: 'en', - messages, -}); +async function init() { + let datas = await Promise.all([ + fetch('js/data/strings_en.json').then(resp => resp.json()), + fetch('js/data/strings_ja.json').then(resp => resp.json()) + ]); + let stringsEN = datas[0]; + let stringsJA = datas[1]; + for (let key in stringsEN) { + messages.en[key] = stringsEN[key]; + } + for (let key in stringsJA) { + messages.ja[key] = stringsJA[key]; + } + + //note: using dev because prod behaves different? (component locale not reactive on $t) + COMMON.i18n = VueI18n.createI18n({ + locale: 'en', + fallbackLocale: 'en', + messages, + }); +} +COMMON.promiseI18n = init(); })(); \ No newline at end of file diff --git a/js/simulator-ui/fleet-editor.js b/js/simulator-ui/fleet-editor.js index 57dcb1e4..fabd3d02 100644 --- a/js/simulator-ui/fleet-editor.js +++ b/js/simulator-ui/fleet-editor.js @@ -1,4 +1,4 @@ -(() => { +COMMON.promiseI18n.then(() => { var CONST = window.COMMON.getConst({ numShipMax: 7, @@ -13,9 +13,9 @@ var CONST = window.COMMON.getConst({ shipImgNameDefault: 'Kblank.png', equipImgNameDefault: 'empty', - tooltipUnknownStat: 'This stat\'s true value is currently unknown.', - tooltipUnknownStatPlaceholder: 'This stat\'s true value is unknown, it is a placeholder not backed by data. Recommended to try setting your own value.', - tooltipUnknownStatDBEstimate: 'This stat\'s true value is unknown, it is an estimate based on data from DB submissions.', + tooltipUnknownStat: 'stat_true_value_unknown', + tooltipUnknownStatPlaceholder: 'stat_true_value_placeholder', + tooltipUnknownStatDBEstimate: 'stat_true_value_db_estimate', rankExceptTypes: [], rankDefaultSpecial: {}, @@ -523,10 +523,11 @@ var UI_FLEETEDITOR = Vue.createApp({ if (ship.statsUnknown[stat] == CONST.STAT_UNKNOWN.DB_ESTIMATE) return {unknownMed:true}; }, getTitleStat: function(ship,stat) { - if (ship.statsBase[stat] != ship.statsDefault[stat]) return null; + if (ship.statsBase[stat] != ship.statsDefault[stat]) return ''; if (ship.statsUnknown[stat] == CONST.STAT_UNKNOWN.NONE) return CONST.tooltipUnknownStat; if (ship.statsUnknown[stat] == CONST.STAT_UNKNOWN.PLACEHOLDER) return CONST.tooltipUnknownStatPlaceholder; if (ship.statsUnknown[stat] == CONST.STAT_UNKNOWN.DB_ESTIMATE) return CONST.tooltipUnknownStatDBEstimate; + return ''; }, getClassHP: function(ship) { if (ship.hpInit/ship.hp <= .25) return 'damage heavy'; @@ -1066,7 +1067,7 @@ var UI_ADDITIONALSTATS = Vue.createApp({ this.active = false; }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divAdditionalStats'); +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divAdditionalStats'); var UI_ADDITIONALSTATSLBAS = Vue.createApp({ @@ -1118,7 +1119,7 @@ var UI_ADDITIONALSTATSLBAS = Vue.createApp({ this.active = false; }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divAdditionalStatsLBAS'); +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divAdditionalStatsLBAS'); @@ -1144,4 +1145,4 @@ COMMON.global.fleetEditorMoveTemp = function(elFrom) { } } -})(); \ No newline at end of file +}) \ No newline at end of file diff --git a/js/simulator-ui/selector.js b/js/simulator-ui/selector.js index 2a57df3f..cc51a799 100644 --- a/js/simulator-ui/selector.js +++ b/js/simulator-ui/selector.js @@ -1,4 +1,4 @@ -(() => { +COMMON.promiseI18n.then(() => { var CONST = window.COMMON.getConst({ MAX_RESULTS: 9999, @@ -471,6 +471,7 @@ COMMON.global.equipSelectorOpen = function(callbackSubmit,callbackClose,keyInit) COMMON.global.equipSelectorClose = function() { UI_EQUIPSELECTOR.doClose(); } +COMMON.global.selectorInit = init; -})(); \ No newline at end of file +}) \ No newline at end of file diff --git a/js/simulator-ui/ui-main.js b/js/simulator-ui/ui-main.js index 3832baab..f57dcfdb 100644 --- a/js/simulator-ui/ui-main.js +++ b/js/simulator-ui/ui-main.js @@ -1,4 +1,4 @@ -(() => { +COMMON.promiseI18n.then(() => { var CONST = window.COMMON.getConst({ numBattlesMax: 9, @@ -549,7 +549,7 @@ ${t('results.baux')}: ${this.results.bauxSunk} ${t('results.buckets')}: ${this.results.bucketSunk}`; } navigator.clipboard.writeText(txt); - this.noticeTxt = 'Copied to Clipboard'; + this.noticeTxt = t('copied_to_clipboard'); let n = ++this.showNoticeCount; setTimeout(() => n == this.showNoticeCount && (this.showNoticeCount = 0), 1000); }, @@ -658,9 +658,6 @@ ${t('results.buckets')}: ${this.results.bucketSunk}`; }, }, methods: { - getCompName: function(comp) { - return this.fleetname + ' - Comp ' + comp.num; - }, getCompPercent: function(comp) { let total = this.comps.reduce((a,b) => a + Math.max(0,b.rate),0); if (total <= 0) return Math.round(100/this.comps.length); @@ -709,7 +706,7 @@ var UI_BONUSEDITOR = Vue.createApp({ this.active = false; }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divBonusEditor'); +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divBonusEditor'); var UI_DECKBUILDERIMPORTER = Vue.createApp({ @@ -798,7 +795,7 @@ var UI_DECKBUILDERIMPORTER = Vue.createApp({ event.target.select(); }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divDeckbuilderImporter'); +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divDeckbuilderImporter'); var UI_KCNAVCOMPIMPORTER = Vue.createApp({ @@ -986,7 +983,7 @@ var UI_KCNAVCOMPIMPORTER = Vue.createApp({ }.bind(this),500); }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divKCNavCompImporter'); +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divKCNavCompImporter'); var UI_BONUSIMPORTER = Vue.createApp({ @@ -1211,7 +1208,7 @@ var UI_BONUSIMPORTER = Vue.createApp({ }.bind(this),500); }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divBonusImporter'); +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divBonusImporter'); var UI_BACKUP = Vue.createApp({ @@ -1302,7 +1299,7 @@ var UI_BACKUP = Vue.createApp({ window.location.reload(); }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divSimBackup');; +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divSimBackup');; var UI_FCFSETTINGS = Vue.createApp({ @@ -1365,7 +1362,7 @@ var UI_FCFSETTINGS = Vue.createApp({ ship.neverFCF = !ship.neverFCF; }, }, -}).component('vmodal',COMMON.CMP_MODAL).mount('#divFCFSettings');; +}).component('vmodal',COMMON.CMP_MODAL).use(COMMON.i18n).mount('#divFCFSettings');; @@ -1709,7 +1706,7 @@ var UI_AUTOBONUS = Vue.createApp({ this.canStart ? this.$refs.txtLoading.stop() : this.$refs.txtLoading.start(); }, }, -}).component('vmodal',COMMON.CMP_MODAL).component('vloading',COMMON.CMP_LOADING).mount('#divAutoBonus'); +}).component('vmodal',COMMON.CMP_MODAL).component('vloading',COMMON.CMP_LOADING).use(COMMON.i18n).mount('#divAutoBonus'); @@ -1721,4 +1718,4 @@ document.body.onunload = function() { COMMON.UI_MAIN = UI_MAIN; //debug -})(); \ No newline at end of file +}) \ No newline at end of file diff --git a/js/vue-i18n.global.prod.js b/js/vue-i18n.global.prod.js new file mode 100644 index 00000000..e897339e --- /dev/null +++ b/js/vue-i18n.global.prod.js @@ -0,0 +1,6 @@ +/*! + * vue-i18n v9.11.0 + * (c) 2024 kazuya kawaguchi + * Released under the MIT License. + */ +var VueI18n=function(e,t){"use strict";const n="undefined"!=typeof window,r=(e,t=!1)=>t?Symbol.for(e):Symbol(e),a=(e,t,n)=>l({l:e,k:t,s:n}),l=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),o=e=>"number"==typeof e&&isFinite(e),s=e=>"[object Date]"===h(e),c=e=>"[object RegExp]"===h(e),u=e=>L(e)&&0===Object.keys(e).length,i=Object.assign;function f(e){return e.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const m=Object.prototype.hasOwnProperty;function _(e,t){return m.call(e,t)}const p=Array.isArray,d=e=>"function"==typeof e,g=e=>"string"==typeof e,E=e=>"boolean"==typeof e,b=e=>null!==e&&"object"==typeof e,v=e=>b(e)&&d(e.then)&&d(e.catch),k=Object.prototype.toString,h=e=>k.call(e),L=e=>{if(!b(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t.constructor===Object};function N(e,t=""){return e.reduce(((e,n,r)=>0===r?e+n:e+t+n),"")}function T(e){let t=e;return()=>++t}function y(e,t){"undefined"!=typeof console&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const I=e=>!b(e)||p(e);function C(e,t){if(I(e)||I(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:e,des:t}=n.pop();Object.keys(e).forEach((r=>{I(e[r])||I(t[r])?t[r]=e[r]:n.push({src:e[r],des:t[r]})}))}}function O(e,t,n){const r={start:e,end:t};return null!=n&&(r.source=n),r}const P={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17};function A(e,t,n={}){const{domain:r,messages:a,args:l}=n,o=new SyntaxError(String(e));return o.code=e,t&&(o.location=t),o.domain=r,o}function R(e){throw e}const F=" ",S="\r",D="\n",M=String.fromCharCode(8232),w=String.fromCharCode(8233);function x(e){const t=e;let n=0,r=1,a=1,l=0;const o=e=>t[e]===S&&t[e+1]===D,s=e=>t[e]===w,c=e=>t[e]===M,u=e=>o(e)||(e=>t[e]===D)(e)||s(e)||c(e),i=e=>o(e)||s(e)||c(e)?D:t[e];function f(){return l=0,u(n)&&(r++,a=0),o(n)&&n++,n++,a++,t[n]}return{index:()=>n,line:()=>r,column:()=>a,peekOffset:()=>l,charAt:i,currentChar:()=>i(n),currentPeek:()=>i(n+l),next:f,peek:function(){return o(n+l)&&l++,l++,t[n+l]},reset:function(){n=0,r=1,a=1,l=0},resetPeek:function(e=0){l=e},skipToPeek:function(){const e=n+l;for(;e!==n;)f();l=0}}}const W=void 0,U=".",$="'";function H(e,t={}){const n=!1!==t.location,r=x(e),a=()=>r.index(),l=()=>{return e=r.line(),t=r.column(),n=r.index(),{line:e,column:t,offset:n};var e,t,n},o=l(),s=a(),c={currentType:14,offset:s,startLoc:o,endLoc:o,lastType:14,lastOffset:s,lastStartLoc:o,lastEndLoc:o,braceNest:0,inLinked:!1,text:""},u=()=>c,{onError:i}=t;function f(e,t,r){e.endLoc=l(),e.currentType=t;const a={type:t};return n&&(a.loc=O(e.startLoc,e.endLoc)),null!=r&&(a.value=r),a}const m=e=>f(e,14);function _(e,t){return e.currentChar()===t?(e.next(),t):(P.EXPECTED_TOKEN,l(),"")}function p(e){let t="";for(;e.currentPeek()===F||e.currentPeek()===D;)t+=e.currentPeek(),e.peek();return t}function d(e){const t=p(e);return e.skipToPeek(),t}function g(e){if(e===W)return!1;const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||95===t}function E(e,t){const{currentType:n}=t;if(2!==n)return!1;p(e);const r=function(e){if(e===W)return!1;const t=e.charCodeAt(0);return t>=48&&t<=57}("-"===e.currentPeek()?e.peek():e.currentPeek());return e.resetPeek(),r}function b(e){p(e);const t="|"===e.currentPeek();return e.resetPeek(),t}function v(e,t=!0){const n=(t=!1,r="",a=!1)=>{const l=e.currentPeek();return"{"===l?"%"!==r&&t:"@"!==l&&l?"%"===l?(e.peek(),n(t,"%",!0)):"|"===l?!("%"!==r&&!a)||!(r===F||r===D):l===F?(e.peek(),n(!0,F,a)):l!==D||(e.peek(),n(!0,D,a)):"%"===r||t},r=n();return t&&e.resetPeek(),r}function k(e,t){const n=e.currentChar();return n===W?W:t(n)?(e.next(),n):null}function h(e){return k(e,(e=>{const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||95===t||36===t}))}function L(e){return k(e,(e=>{const t=e.charCodeAt(0);return t>=48&&t<=57}))}function N(e){return k(e,(e=>{const t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}))}function T(e){let t="",n="";for(;t=L(e);)n+=t;return n}function y(e){let t="";for(;;){const n=e.currentChar();if("{"===n||"}"===n||"@"===n||"|"===n||!n)break;if("%"===n){if(!v(e))break;t+=n,e.next()}else if(n===F||n===D)if(v(e))t+=n,e.next();else{if(b(e))break;t+=n,e.next()}else t+=n,e.next()}return t}function I(e){const t=e.currentChar();switch(t){case"\\":case"'":return e.next(),`\\${t}`;case"u":return C(e,t,4);case"U":return C(e,t,6);default:return P.UNKNOWN_ESCAPE_SEQUENCE,l(),""}}function C(e,t,n){_(e,t);let r="";for(let a=0;a=1&&(P.NOT_ALLOW_NEST_PLACEHOLDER,l()),e.next(),n=f(t,2,"{"),d(e),t.braceNest++,n;case"}":return t.braceNest>0&&2===t.currentType&&(P.EMPTY_PLACEHOLDER,l()),e.next(),n=f(t,3,"}"),t.braceNest--,t.braceNest>0&&d(e),t.inLinked&&0===t.braceNest&&(t.inLinked=!1),n;case"@":return t.braceNest>0&&(P.UNTERMINATED_CLOSING_BRACE,l()),n=S(e,t)||m(t),t.braceNest=0,n;default:{let r=!0,a=!0,o=!0;if(b(e))return t.braceNest>0&&(P.UNTERMINATED_CLOSING_BRACE,l()),n=f(t,1,A(e)),t.braceNest=0,t.inLinked=!1,n;if(t.braceNest>0&&(5===t.currentType||6===t.currentType||7===t.currentType))return P.UNTERMINATED_CLOSING_BRACE,l(),t.braceNest=0,M(e,t);if(r=function(e,t){const{currentType:n}=t;if(2!==n)return!1;p(e);const r=g(e.currentPeek());return e.resetPeek(),r}(e,t))return n=f(t,5,function(e){d(e);let t="",n="";for(;t=h(e);)n+=t;return e.currentChar()===W&&(P.UNTERMINATED_CLOSING_BRACE,l()),n}(e)),d(e),n;if(a=E(e,t))return n=f(t,6,function(e){d(e);let t="";return"-"===e.currentChar()?(e.next(),t+=`-${T(e)}`):t+=T(e),e.currentChar()===W&&(P.UNTERMINATED_CLOSING_BRACE,l()),t}(e)),d(e),n;if(o=function(e,t){const{currentType:n}=t;if(2!==n)return!1;p(e);const r=e.currentPeek()===$;return e.resetPeek(),r}(e,t))return n=f(t,7,function(e){d(e),_(e,"'");let t="",n="";const r=e=>e!==$&&e!==D;for(;t=k(e,r);)n+="\\"===t?I(e):t;const a=e.currentChar();return a===D||a===W?(P.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,l(),a===D&&(e.next(),_(e,"'")),n):(_(e,"'"),n)}(e)),d(e),n;if(!r&&!a&&!o)return n=f(t,13,function(e){d(e);let t="",n="";const r=e=>"{"!==e&&"}"!==e&&e!==F&&e!==D;for(;t=k(e,r);)n+=t;return n}(e)),P.INVALID_TOKEN_IN_PLACEHOLDER,l(),n.value,d(e),n;break}}return n}function S(e,t){const{currentType:n}=t;let r=null;const a=e.currentChar();switch(8!==n&&9!==n&&12!==n&&10!==n||a!==D&&a!==F||(P.INVALID_LINKED_FORMAT,l()),a){case"@":return e.next(),r=f(t,8,"@"),t.inLinked=!0,r;case".":return d(e),e.next(),f(t,9,".");case":":return d(e),e.next(),f(t,10,":");default:return b(e)?(r=f(t,1,A(e)),t.braceNest=0,t.inLinked=!1,r):function(e,t){const{currentType:n}=t;if(8!==n)return!1;p(e);const r="."===e.currentPeek();return e.resetPeek(),r}(e,t)||function(e,t){const{currentType:n}=t;if(8!==n&&12!==n)return!1;p(e);const r=":"===e.currentPeek();return e.resetPeek(),r}(e,t)?(d(e),S(e,t)):function(e,t){const{currentType:n}=t;if(9!==n)return!1;p(e);const r=g(e.currentPeek());return e.resetPeek(),r}(e,t)?(d(e),f(t,12,function(e){let t="",n="";for(;t=h(e);)n+=t;return n}(e))):function(e,t){const{currentType:n}=t;if(10!==n)return!1;const r=()=>{const t=e.currentPeek();return"{"===t?g(e.peek()):!("@"===t||"%"===t||"|"===t||":"===t||"."===t||t===F||!t)&&(t===D?(e.peek(),r()):g(t))},a=r();return e.resetPeek(),a}(e,t)?(d(e),"{"===a?R(e,t)||r:f(t,11,function(e){const t=(n=!1,r)=>{const a=e.currentChar();return"{"!==a&&"%"!==a&&"@"!==a&&"|"!==a&&"("!==a&&")"!==a&&a?a===F?r:a===D||a===U?(r+=a,e.next(),t(n,r)):(r+=a,e.next(),t(!0,r)):r};return t(!1,"")}(e))):(8===n&&(P.INVALID_LINKED_FORMAT,l()),t.braceNest=0,t.inLinked=!1,M(e,t))}}function M(e,t){let n={type:14};if(t.braceNest>0)return R(e,t)||m(t);if(t.inLinked)return S(e,t)||m(t);switch(e.currentChar()){case"{":return R(e,t)||m(t);case"}":return P.UNBALANCED_CLOSING_BRACE,l(),e.next(),f(t,3,"}");case"@":return S(e,t)||m(t);default:{if(b(e))return n=f(t,1,A(e)),t.braceNest=0,t.inLinked=!1,n;const{isModulo:r,hasSpace:a}=function(e){const t=p(e),n="%"===e.currentPeek()&&"{"===e.peek();return e.resetPeek(),{isModulo:n,hasSpace:t.length>0}}(e);if(r)return a?f(t,0,y(e)):f(t,4,function(e){d(e);const t=e.currentChar();return"%"!==t&&(P.EXPECTED_TOKEN,l()),e.next(),"%"}(e));if(v(e))return f(t,0,y(e));break}}return n}return{nextToken:function(){const{currentType:e,offset:t,startLoc:n,endLoc:o}=c;return c.lastType=e,c.lastOffset=t,c.lastStartLoc=n,c.lastEndLoc=o,c.offset=a(),c.startLoc=l(),r.currentChar()===W?f(c,14):M(r,c)},currentOffset:a,currentPosition:l,context:u}}const V=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function j(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const e=parseInt(t||n,16);return e<=55295||e>=57344?String.fromCodePoint(e):"�"}}}function X(e={}){const t=!1!==e.location,{onError:n}=e;function r(e,n,r){const a={type:e};return t&&(a.start=n,a.end=n,a.loc={start:r,end:r}),a}function a(e,n,r,a){a&&(e.type=a),t&&(e.end=n,e.loc&&(e.loc.end=r))}function l(e,t){const n=e.context(),l=r(3,n.offset,n.startLoc);return l.value=t,a(l,e.currentOffset(),e.currentPosition()),l}function o(e,t){const n=e.context(),{lastOffset:l,lastStartLoc:o}=n,s=r(5,l,o);return s.index=parseInt(t,10),e.nextToken(),a(s,e.currentOffset(),e.currentPosition()),s}function s(e,t){const n=e.context(),{lastOffset:l,lastStartLoc:o}=n,s=r(4,l,o);return s.key=t,e.nextToken(),a(s,e.currentOffset(),e.currentPosition()),s}function c(e,t){const n=e.context(),{lastOffset:l,lastStartLoc:o}=n,s=r(9,l,o);return s.value=t.replace(V,j),e.nextToken(),a(s,e.currentOffset(),e.currentPosition()),s}function u(e){const t=e.context(),n=r(6,t.offset,t.startLoc);let l=e.nextToken();if(9===l.type){const t=function(e){const t=e.nextToken(),n=e.context(),{lastOffset:l,lastStartLoc:o}=n,s=r(8,l,o);return 12!==t.type?(P.UNEXPECTED_EMPTY_LINKED_MODIFIER,n.lastStartLoc,s.value="",a(s,l,o),{nextConsumeToken:t,node:s}):(null==t.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,n.lastStartLoc,G(t)),s.value=t.value||"",a(s,e.currentOffset(),e.currentPosition()),{node:s})}(e);n.modifier=t.node,l=t.nextConsumeToken||e.nextToken()}switch(10!==l.type&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(l)),l=e.nextToken(),2===l.type&&(l=e.nextToken()),l.type){case 11:null==l.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(l)),n.key=function(e,t){const n=e.context(),l=r(7,n.offset,n.startLoc);return l.value=t,a(l,e.currentOffset(),e.currentPosition()),l}(e,l.value||"");break;case 5:null==l.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(l)),n.key=s(e,l.value||"");break;case 6:null==l.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(l)),n.key=o(e,l.value||"");break;case 7:null==l.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(l)),n.key=c(e,l.value||"");break;default:{P.UNEXPECTED_EMPTY_LINKED_KEY,t.lastStartLoc;const o=e.context(),s=r(7,o.offset,o.startLoc);return s.value="",a(s,o.offset,o.startLoc),n.key=s,a(n,o.offset,o.startLoc),{nextConsumeToken:l,node:n}}}return a(n,e.currentOffset(),e.currentPosition()),{node:n}}function f(e){const t=e.context(),n=r(2,1===t.currentType?e.currentOffset():t.offset,1===t.currentType?t.endLoc:t.startLoc);n.items=[];let i=null;do{const r=i||e.nextToken();switch(i=null,r.type){case 0:null==r.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(r)),n.items.push(l(e,r.value||""));break;case 6:null==r.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(r)),n.items.push(o(e,r.value||""));break;case 5:null==r.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(r)),n.items.push(s(e,r.value||""));break;case 7:null==r.value&&(P.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,G(r)),n.items.push(c(e,r.value||""));break;case 8:{const t=u(e);n.items.push(t.node),i=t.nextConsumeToken||null;break}}}while(14!==t.currentType&&1!==t.currentType);return a(n,1===t.currentType?t.lastOffset:e.currentOffset(),1===t.currentType?t.lastEndLoc:e.currentPosition()),n}function m(e){const t=e.context(),{offset:n,startLoc:l}=t,o=f(e);return 14===t.currentType?o:function(e,t,n,l){const o=e.context();let s=0===l.items.length;const c=r(1,t,n);c.cases=[],c.cases.push(l);do{const t=f(e);s||(s=0===t.items.length),c.cases.push(t)}while(14!==o.currentType);return a(c,e.currentOffset(),e.currentPosition()),c}(e,n,l,o)}return{parse:function(n){const l=H(n,i({},e)),o=l.context(),s=r(0,o.offset,o.startLoc);return t&&s.loc&&(s.loc.source=n),s.body=m(l),e.onCacheKey&&(s.cacheKey=e.onCacheKey(n)),14!==o.currentType&&(P.UNEXPECTED_LEXICAL_ANALYSIS,o.lastStartLoc,n[o.offset]),a(s,l.currentOffset(),l.currentPosition()),s}}}function G(e){if(14===e.type)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function Y(e,t){for(let n=0;nn,helper:e=>(n.helpers.add(e),e)}}(e);n.helper("normalize"),e.body&&B(e.body,n);const r=n.context();e.helpers=Array.from(r.helpers)}function z(e){if(1===e.items.length){const t=e.items[0];3!==t.type&&9!==t.type||(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;n1){e.push(`${n("plural")}([`),e.indent(r());const a=t.cases.length;for(let n=0;n{const n=g(t.mode)?t.mode:"normal",r=g(t.filename)?t.filename:"message.intl",a=!!t.sourceMap,l=null!=t.breakLineCode?t.breakLineCode:"arrow"===n?";":"\n",o=t.needIndent?t.needIndent:"arrow"!==n,s=e.helpers||[],c=function(e,t){const{sourceMap:n,filename:r,breakLineCode:a,needIndent:l}=t,o=!1!==t.location,s={filename:r,code:"",column:1,line:1,offset:0,map:void 0,breakLineCode:a,needIndent:l,indentLevel:0};function c(e,t){s.code+=e}function u(e,t=!0){const n=t?a:"";c(l?n+" ".repeat(e):n)}return o&&e.loc&&(s.source=e.loc.source),{context:()=>s,push:c,indent:function(e=!0){const t=++s.indentLevel;e&&u(t)},deindent:function(e=!0){const t=--s.indentLevel;e&&u(t)},newline:function(){u(s.indentLevel)},helper:e=>`_${e}`,needIndent:()=>s.needIndent}}(e,{mode:n,filename:r,sourceMap:a,breakLineCode:l,needIndent:o});c.push("normal"===n?"function __msg__ (ctx) {":"(ctx) => {"),c.indent(o),s.length>0&&(c.push(`const { ${N(s.map((e=>`${e}: _${e}`)),", ")} } = ctx`),c.newline()),c.push("return "),Q(c,e),c.deindent(o),c.push("}"),delete e.helpers;const{code:u,map:i}=c.context();return{ast:e,code:u,map:i?i.toJSON():void 0}};function Z(e,t={}){const n=i({},t),r=!!n.jit,a=!!n.minify,l=null==n.optimize||n.optimize,o=X(n).parse(e);return r?(l&&function(e){const t=e.body;2===t.type?z(t):t.cases.forEach((e=>z(e)))}(o),a&&J(o),{ast:o,code:""}):(K(o,n),q(o,n))}const ee=[];ee[0]={w:[0],i:[3,0],"[":[4],o:[7]},ee[1]={w:[1],".":[2],"[":[4],o:[7]},ee[2]={w:[2],i:[3,0],0:[3,0]},ee[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]},ee[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]},ee[5]={"'":[4,0],o:8,l:[5,0]},ee[6]={'"':[4,0],o:8,l:[6,0]};const te=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function ne(e){if(null==e)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function re(e){const t=e.trim();return("0"!==e.charAt(0)||!isNaN(parseInt(e)))&&(n=t,te.test(n)?function(e){const t=e.charCodeAt(0);return t!==e.charCodeAt(e.length-1)||34!==t&&39!==t?e:e.slice(1,-1)}(t):"*"+t);var n}const ae=new Map;function le(e,t){return b(e)?e[t]:null}const oe=e=>e,se=e=>"",ce="text",ue=e=>0===e.length?"":N(e),ie=e=>null==e?"":p(e)||L(e)&&e.toString===k?JSON.stringify(e,null,2):String(e);function fe(e,t){return e=Math.abs(e),2===t?e?e>1?1:0:1:e?Math.min(e,2):0}function me(e={}){const t=e.locale,n=function(e){const t=o(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(o(e.named.count)||o(e.named.n))?o(e.named.count)?e.named.count:o(e.named.n)?e.named.n:t:t}(e),r=b(e.pluralRules)&&g(t)&&d(e.pluralRules[t])?e.pluralRules[t]:fe,a=b(e.pluralRules)&&g(t)&&d(e.pluralRules[t])?fe:void 0,l=e.list||[],s=e.named||{};o(e.pluralIndex)&&function(e,t){t.count||(t.count=e),t.n||(t.n=e)}(n,s);function c(t){const n=d(e.messages)?e.messages(t):!!b(e.messages)&&e.messages[t];return n||(e.parent?e.parent.message(t):se)}const u=L(e.processor)&&d(e.processor.normalize)?e.processor.normalize:ue,f=L(e.processor)&&d(e.processor.interpolate)?e.processor.interpolate:ie,m={list:e=>l[e],named:e=>s[e],plural:e=>e[r(n,e.length,a)],linked:(t,...n)=>{const[r,a]=n;let l="text",o="";1===n.length?b(r)?(o=r.modifier||o,l=r.type||l):g(r)&&(o=r||o):2===n.length&&(g(r)&&(o=r||o),g(a)&&(l=a||l));const s=c(t)(m),u="vnode"===l&&p(s)&&o?s[0]:s;return o?(i=o,e.modifiers?e.modifiers[i]:oe)(u,l):u;var i},message:c,type:L(e.processor)&&g(e.processor.type)?e.processor.type:ce,interpolate:f,normalize:u,values:i({},l,s)};return m}const _e=P.__EXTEND_POINT__,pe=T(_e),de={INVALID_ARGUMENT:_e,INVALID_DATE_ARGUMENT:pe(),INVALID_ISO_DATE_ARGUMENT:pe(),NOT_SUPPORT_NON_STRING_MESSAGE:pe(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:pe(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:pe(),NOT_SUPPORT_LOCALE_TYPE:pe(),__EXTEND_POINT__:pe()};function ge(e,t){return null!=t.locale?be(t.locale):be(e.locale)}let Ee;function be(e){if(g(e))return e;if(d(e)){if(e.resolvedOnce&&null!=Ee)return Ee;if("Function"===e.constructor.name){const t=e();if(v(t))throw Error(de.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return Ee=t}throw Error(de.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}throw Error(de.NOT_SUPPORT_LOCALE_TYPE)}function ve(e,t,n){return[...new Set([n,...p(t)?t:b(t)?Object.keys(t):g(t)?[t]:[n]])]}function ke(e,t,n){const r=g(n)?n:Ie,a=e;a.__localeChainCache||(a.__localeChainCache=new Map);let l=a.__localeChainCache.get(r);if(!l){l=[];let e=[n];for(;p(e);)e=he(l,e,t);const o=p(t)||!L(t)?t:t.default?t.default:null;e=g(o)?[o]:o,p(e)&&he(l,e,!1),a.__localeChainCache.set(r,l)}return l}function he(e,t,n){let r=!0;for(let a=0;a`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;let Pe,Ae,Re;let Fe=null;const Se=e=>{Fe=e},De=()=>Fe;let Me=0;function we(e={}){const t=d(e.onWarn)?e.onWarn:y,n=g(e.version)?e.version:Te,r=g(e.locale)||d(e.locale)?e.locale:Ie,a=d(r)?Ie:r,l=p(e.fallbackLocale)||L(e.fallbackLocale)||g(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:a,o=L(e.messages)?e.messages:{[a]:{}},s=L(e.datetimeFormats)?e.datetimeFormats:{[a]:{}},u=L(e.numberFormats)?e.numberFormats:{[a]:{}},f=i({},e.modifiers||{},{upper:(e,t)=>"text"===t&&g(e)?e.toUpperCase():"vnode"===t&&b(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>"text"===t&&g(e)?e.toLowerCase():"vnode"===t&&b(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>"text"===t&&g(e)?Oe(e):"vnode"===t&&b(e)&&"__v_isVNode"in e?Oe(e.children):e}),m=e.pluralRules||{},_=d(e.missing)?e.missing:null,v=!E(e.missingWarn)&&!c(e.missingWarn)||e.missingWarn,k=!E(e.fallbackWarn)&&!c(e.fallbackWarn)||e.fallbackWarn,h=!!e.fallbackFormat,N=!!e.unresolving,T=d(e.postTranslation)?e.postTranslation:null,I=L(e.processor)?e.processor:null,C=!E(e.warnHtmlMessage)||e.warnHtmlMessage,O=!!e.escapeParameter,P=d(e.messageCompiler)?e.messageCompiler:Pe,A=d(e.messageResolver)?e.messageResolver:Ae||le,R=d(e.localeFallbacker)?e.localeFallbacker:Re||ve,F=b(e.fallbackContext)?e.fallbackContext:void 0,S=e,D=b(S.__datetimeFormatters)?S.__datetimeFormatters:new Map,M=b(S.__numberFormatters)?S.__numberFormatters:new Map,w=b(S.__meta)?S.__meta:{};Me++;const x={version:n,cid:Me,locale:r,fallbackLocale:l,messages:o,modifiers:f,pluralRules:m,missing:_,missingWarn:v,fallbackWarn:k,fallbackFormat:h,unresolving:N,postTranslation:T,processor:I,warnHtmlMessage:C,escapeParameter:O,messageCompiler:P,messageResolver:A,localeFallbacker:R,fallbackContext:F,onWarn:t,__meta:w};return x.datetimeFormats=s,x.numberFormats=u,x.__datetimeFormatters=D,x.__numberFormatters=M,x}function xe(e,t,n,r,a){const{missing:l,onWarn:o}=e;if(null!==l){const r=l(e,n,t,a);return g(r)?r:t}return t}function We(e,t,n){e.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function Ue(e){return t=>function(e,t){const n=t.b||t.body;if(1===(n.t||n.type)){const t=n,r=t.c||t.cases;return e.plural(r.reduce(((t,n)=>[...t,$e(e,n)]),[]))}return $e(e,n)}(t,e)}function $e(e,t){const n=t.s||t.static;if(n)return"text"===e.type?n:e.normalize([n]);{const n=(t.i||t.items).reduce(((t,n)=>[...t,He(e,n)]),[]);return e.normalize(n)}}function He(e,t){const n=t.t||t.type;switch(n){case 3:{const e=t;return e.v||e.value}case 9:{const e=t;return e.v||e.value}case 4:{const n=t;return e.interpolate(e.named(n.k||n.key))}case 5:{const n=t;return e.interpolate(e.list(null!=n.i?n.i:n.index))}case 6:{const n=t,r=n.m||n.modifier;return e.linked(He(e,n.k||n.key),r?He(e,r):void 0,e.type)}case 7:{const e=t;return e.v||e.value}case 8:{const e=t;return e.v||e.value}default:throw new Error(`unhandled node type on format message part: ${n}`)}}const Ve=e=>e;let je=Object.create(null);const Xe=e=>b(e)&&(0===e.t||0===e.type)&&("b"in e||"body"in e);const Ge=()=>"",Ye=e=>d(e);function Be(e,...t){const{fallbackFormat:n,postTranslation:r,unresolving:a,messageCompiler:l,fallbackLocale:s,messages:c}=e,[u,i]=Je(...t),m=E(i.missingWarn)?i.missingWarn:e.missingWarn,_=E(i.fallbackWarn)?i.fallbackWarn:e.fallbackWarn,d=E(i.escapeParameter)?i.escapeParameter:e.escapeParameter,v=!!i.resolvedMessage,k=g(i.default)||E(i.default)?E(i.default)?l?u:()=>u:i.default:n?l?u:()=>u:"",h=n||""!==k,L=ge(e,i);d&&function(e){p(e.list)?e.list=e.list.map((e=>g(e)?f(e):e)):b(e.named)&&Object.keys(e.named).forEach((t=>{g(e.named[t])&&(e.named[t]=f(e.named[t]))}))}(i);let[N,T,y]=v?[u,L,c[L]||{}]:Ke(e,u,L,s,_,m),I=N,C=u;if(v||g(I)||Xe(I)||Ye(I)||h&&(I=k,C=I),!(v||(g(I)||Xe(I)||Ye(I))&&g(T)))return a?ye:u;let O=!1;const P=Ye(I)?I:ze(e,u,T,I,C,(()=>{O=!0}));if(O)return I;const A=function(e,t,n,r){const{modifiers:a,pluralRules:l,messageResolver:s,fallbackLocale:c,fallbackWarn:u,missingWarn:i,fallbackContext:f}=e,m=r=>{let a=s(n,r);if(null==a&&f){const[,,e]=Ke(f,r,t,c,u,i);a=s(e,r)}if(g(a)||Xe(a)){let n=!1;const l=ze(e,r,t,a,r,(()=>{n=!0}));return n?Ge:l}return Ye(a)?a:Ge},_={locale:t,modifiers:a,pluralRules:l,messages:m};e.processor&&(_.processor=e.processor);r.list&&(_.list=r.list);r.named&&(_.named=r.named);o(r.plural)&&(_.pluralIndex=r.plural);return _}(e,T,y,i),R=function(e,t,n){const r=t(n);return r}(0,P,me(A));return r?r(R,u):R}function Ke(e,t,n,r,a,l){const{messages:o,onWarn:s,messageResolver:c,localeFallbacker:u}=e,i=u(e,r,n);let f,m={},_=null;for(let p=0;pr;return e.locale=n,e.key=t,e}const u=s(r,function(e,t,n,r,l,o){return{locale:t,key:n,warnHtmlMessage:l,onError:e=>{throw o&&o(e),e},onCacheKey:e=>a(t,n,e)}}(0,n,l,0,c,o));return u.locale=n,u.key=t,u.source=r,u}function Je(...e){const[t,n,r]=e,a={};if(!(g(t)||o(t)||Ye(t)||Xe(t)))throw Error(de.INVALID_ARGUMENT);const l=o(t)?String(t):(Ye(t),t);return o(n)?a.plural=n:g(n)?a.default=n:L(n)&&!u(n)?a.named=n:p(n)&&(a.list=n),o(r)?a.plural=r:g(r)?a.default=r:L(r)&&i(a,r),[l,a]}function Qe(e,...t){const{datetimeFormats:n,unresolving:r,fallbackLocale:a,onWarn:l,localeFallbacker:o}=e,{__datetimeFormatters:s}=e,[c,f,m,_]=Ze(...t);E(m.missingWarn)?m.missingWarn:e.missingWarn;E(m.fallbackWarn)?m.fallbackWarn:e.fallbackWarn;const p=!!m.part,d=ge(e,m),b=o(e,a,d);if(!g(c)||""===c)return new Intl.DateTimeFormat(d,_).format(f);let v,k={},h=null;for(let u=0;u{qe.includes(e)?u[e]=n[e]:l[e]=n[e]})),g(r)?l.locale=r:L(r)&&(u=r),L(a)&&(u=a),[l.key||"",c,l,u]}function et(e,t,n){const r=e;for(const a in n){const e=`${t}__${a}`;r.__datetimeFormatters.has(e)&&r.__datetimeFormatters.delete(e)}}function tt(e,...t){const{numberFormats:n,unresolving:r,fallbackLocale:a,onWarn:l,localeFallbacker:o}=e,{__numberFormatters:s}=e,[c,f,m,_]=rt(...t);E(m.missingWarn)?m.missingWarn:e.missingWarn;E(m.fallbackWarn)?m.fallbackWarn:e.fallbackWarn;const p=!!m.part,d=ge(e,m),b=o(e,a,d);if(!g(c)||""===c)return new Intl.NumberFormat(d,_).format(f);let v,k={},h=null;for(let u=0;u{nt.includes(e)?s[e]=n[e]:l[e]=n[e]})),g(r)?l.locale=r:L(r)&&(s=r),L(a)&&(s=a),[l.key||"",c,l,s]}function at(e,t,n){const r=e;for(const a in n){const e=`${t}__${a}`;r.__numberFormatters.has(e)&&r.__numberFormatters.delete(e)}}const lt="9.11.0",ot=de.__EXTEND_POINT__,st=T(ot),ct={UNEXPECTED_RETURN_TYPE:ot,INVALID_ARGUMENT:st(),MUST_BE_CALL_SETUP_TOP:st(),NOT_INSTALLED:st(),NOT_AVAILABLE_IN_LEGACY_MODE:st(),REQUIRED_VALUE:st(),INVALID_VALUE:st(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:st(),NOT_INSTALLED_WITH_PROVIDE:st(),UNEXPECTED_ERROR:st(),NOT_COMPATIBLE_LEGACY_VUE_I18N:st(),BRIDGE_SUPPORT_VUE_2_ONLY:st(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:st(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:st(),__EXTEND_POINT__:st()};const ut=r("__translateVNode"),it=r("__datetimeParts"),ft=r("__numberParts"),mt=r("__setPluralRules"),_t=r("__injectWithOption"),pt=r("__dispose");function dt(e){if(!b(e))return e;for(const t in e)if(_(e,t))if(t.includes(".")){const n=t.split("."),r=n.length-1;let a=e,l=!1;for(let e=0;e{if("locale"in e&&"resource"in e){const{locale:t,resource:n}=e;t?(o[t]=o[t]||{},C(n,o[t])):C(n,o)}else g(e)&&C(JSON.parse(e),o)})),null==a&&l)for(const s in o)_(o,s)&&dt(o[s]);return o}function Et(e){return e.type}function bt(e,t,n){let r=b(t.messages)?t.messages:{};"__i18nGlobal"in n&&(r=gt(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));const a=Object.keys(r);if(a.length&&a.forEach((t=>{e.mergeLocaleMessage(t,r[t])})),b(t.datetimeFormats)){const n=Object.keys(t.datetimeFormats);n.length&&n.forEach((n=>{e.mergeDateTimeFormat(n,t.datetimeFormats[n])}))}if(b(t.numberFormats)){const n=Object.keys(t.numberFormats);n.length&&n.forEach((n=>{e.mergeNumberFormat(n,t.numberFormats[n])}))}}function vt(e){return t.createVNode(t.Text,null,e,0)}const kt=()=>[],ht=()=>!1;let Lt=0;function Nt(e){return(n,r,a,l)=>e(r,a,t.getCurrentInstance()||void 0,l)}function Tt(e={},r){const{__root:a,__injectWithOption:l}=e,s=void 0===a,u=e.flatJson,f=n?t.ref:t.shallowRef,m=!!e.translateExistCompatible;let v=!E(e.inheritLocale)||e.inheritLocale;const k=f(a&&v?a.locale.value:g(e.locale)?e.locale:Ie),h=f(a&&v?a.fallbackLocale.value:g(e.fallbackLocale)||p(e.fallbackLocale)||L(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:k.value),N=f(gt(k.value,e)),T=f(L(e.datetimeFormats)?e.datetimeFormats:{[k.value]:{}}),y=f(L(e.numberFormats)?e.numberFormats:{[k.value]:{}});let I=a?a.missingWarn:!E(e.missingWarn)&&!c(e.missingWarn)||e.missingWarn,O=a?a.fallbackWarn:!E(e.fallbackWarn)&&!c(e.fallbackWarn)||e.fallbackWarn,P=a?a.fallbackRoot:!E(e.fallbackRoot)||e.fallbackRoot,A=!!e.fallbackFormat,R=d(e.missing)?e.missing:null,F=d(e.missing)?Nt(e.missing):null,S=d(e.postTranslation)?e.postTranslation:null,D=a?a.warnHtmlMessage:!E(e.warnHtmlMessage)||e.warnHtmlMessage,M=!!e.escapeParameter;const w=a?a.modifiers:L(e.modifiers)?e.modifiers:{};let x,W=e.pluralRules||a&&a.pluralRules;x=(()=>{s&&Se(null);const t={version:lt,locale:k.value,fallbackLocale:h.value,messages:N.value,modifiers:w,pluralRules:W,missing:null===F?void 0:F,missingWarn:I,fallbackWarn:O,fallbackFormat:A,unresolving:!0,postTranslation:null===S?void 0:S,warnHtmlMessage:D,escapeParameter:M,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};t.datetimeFormats=T.value,t.numberFormats=y.value,t.__datetimeFormatters=L(x)?x.__datetimeFormatters:void 0,t.__numberFormatters=L(x)?x.__numberFormatters:void 0;const n=we(t);return s&&Se(n),n})(),We(x,k.value,h.value);const U=t.computed({get:()=>k.value,set:e=>{k.value=e,x.locale=k.value}}),$=t.computed({get:()=>h.value,set:e=>{h.value=e,x.fallbackLocale=h.value,We(x,k.value,e)}}),H=t.computed((()=>N.value)),V=t.computed((()=>T.value)),j=t.computed((()=>y.value));const X=(e,t,n,r,l,c)=>{let u;k.value,h.value,N.value,T.value,y.value;try{0,s||(x.fallbackContext=a?De():void 0),u=e(x)}finally{s||(x.fallbackContext=void 0)}if("translate exists"!==n&&o(u)&&u===ye||"translate exists"===n&&!u){const[e,n]=t();return a&&P?r(a):l(e)}if(c(u))return u;throw Error(ct.UNEXPECTED_RETURN_TYPE)};function G(...e){return X((t=>Reflect.apply(Be,null,[t,...e])),(()=>Je(...e)),"translate",(t=>Reflect.apply(t.t,t,[...e])),(e=>e),(e=>g(e)))}const Y={normalize:function(e){return e.map((e=>g(e)||o(e)||E(e)?vt(String(e)):e))},interpolate:e=>e,type:"vnode"};function B(e){return N.value[e]||{}}Lt++,a&&n&&(t.watch(a.locale,(e=>{v&&(k.value=e,x.locale=e,We(x,k.value,h.value))})),t.watch(a.fallbackLocale,(e=>{v&&(h.value=e,x.fallbackLocale=e,We(x,k.value,h.value))})));const K={id:Lt,locale:U,fallbackLocale:$,get inheritLocale(){return v},set inheritLocale(e){v=e,e&&a&&(k.value=a.locale.value,h.value=a.fallbackLocale.value,We(x,k.value,h.value))},get availableLocales(){return Object.keys(N.value).sort()},messages:H,get modifiers(){return w},get pluralRules(){return W||{}},get isGlobal(){return s},get missingWarn(){return I},set missingWarn(e){I=e,x.missingWarn=I},get fallbackWarn(){return O},set fallbackWarn(e){O=e,x.fallbackWarn=O},get fallbackRoot(){return P},set fallbackRoot(e){P=e},get fallbackFormat(){return A},set fallbackFormat(e){A=e,x.fallbackFormat=A},get warnHtmlMessage(){return D},set warnHtmlMessage(e){D=e,x.warnHtmlMessage=e},get escapeParameter(){return M},set escapeParameter(e){M=e,x.escapeParameter=e},t:G,getLocaleMessage:B,setLocaleMessage:function(e,t){if(u){const n={[e]:t};for(const e in n)_(n,e)&&dt(n[e]);t=n[e]}N.value[e]=t,x.messages=N.value},mergeLocaleMessage:function(e,t){N.value[e]=N.value[e]||{};const n={[e]:t};if(u)for(const r in n)_(n,r)&&dt(n[r]);C(t=n[e],N.value[e]),x.messages=N.value},getPostTranslationHandler:function(){return d(S)?S:null},setPostTranslationHandler:function(e){S=e,x.postTranslation=e},getMissingHandler:function(){return R},setMissingHandler:function(e){null!==e&&(F=Nt(e)),R=e,x.missing=F},[mt]:function(e){W=e,x.pluralRules=W}};return K.datetimeFormats=V,K.numberFormats=j,K.rt=function(...e){const[t,n,r]=e;if(r&&!b(r))throw Error(ct.INVALID_ARGUMENT);return G(t,n,i({resolvedMessage:!0},r||{}))},K.te=function(e,t){return X((()=>{if(!e)return!1;const n=B(g(t)?t:k.value),r=x.messageResolver(n,e);return m?null!=r:Xe(r)||Ye(r)||g(r)}),(()=>[e]),"translate exists",(n=>Reflect.apply(n.te,n,[e,t])),ht,(e=>E(e)))},K.tm=function(e){const t=function(e){let t=null;const n=ke(x,h.value,k.value);for(let r=0;rReflect.apply(Qe,null,[t,...e])),(()=>Ze(...e)),"datetime format",(t=>Reflect.apply(t.d,t,[...e])),(()=>Ce),(e=>g(e)))},K.n=function(...e){return X((t=>Reflect.apply(tt,null,[t,...e])),(()=>rt(...e)),"number format",(t=>Reflect.apply(t.n,t,[...e])),(()=>Ce),(e=>g(e)))},K.getDateTimeFormat=function(e){return T.value[e]||{}},K.setDateTimeFormat=function(e,t){T.value[e]=t,x.datetimeFormats=T.value,et(x,e,t)},K.mergeDateTimeFormat=function(e,t){T.value[e]=i(T.value[e]||{},t),x.datetimeFormats=T.value,et(x,e,t)},K.getNumberFormat=function(e){return y.value[e]||{}},K.setNumberFormat=function(e,t){y.value[e]=t,x.numberFormats=y.value,at(x,e,t)},K.mergeNumberFormat=function(e,t){y.value[e]=i(y.value[e]||{},t),x.numberFormats=y.value,at(x,e,t)},K[_t]=l,K[ut]=function(...e){return X((t=>{let n;const r=t;try{r.processor=Y,n=Reflect.apply(Be,null,[r,...e])}finally{r.processor=null}return n}),(()=>Je(...e)),"translate",(t=>t[ut](...e)),(e=>[vt(e)]),(e=>p(e)))},K[it]=function(...e){return X((t=>Reflect.apply(Qe,null,[t,...e])),(()=>Ze(...e)),"datetime format",(t=>t[it](...e)),kt,(e=>g(e)||p(e)))},K[ft]=function(...e){return X((t=>Reflect.apply(tt,null,[t,...e])),(()=>rt(...e)),"number format",(t=>t[ft](...e)),kt,(e=>g(e)||p(e)))},K}function yt(e={},t){{const t=Tt(function(e){const t=g(e.locale)?e.locale:Ie,n=g(e.fallbackLocale)||p(e.fallbackLocale)||L(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:t,r=d(e.missing)?e.missing:void 0,a=!E(e.silentTranslationWarn)&&!c(e.silentTranslationWarn)||!e.silentTranslationWarn,l=!E(e.silentFallbackWarn)&&!c(e.silentFallbackWarn)||!e.silentFallbackWarn,o=!E(e.fallbackRoot)||e.fallbackRoot,s=!!e.formatFallbackMessages,u=L(e.modifiers)?e.modifiers:{},f=e.pluralizationRules,m=d(e.postTranslation)?e.postTranslation:void 0,_=!g(e.warnHtmlInMessage)||"off"!==e.warnHtmlInMessage,b=!!e.escapeParameterHtml,v=!E(e.sync)||e.sync;let k=e.messages;if(L(e.sharedMessages)){const t=e.sharedMessages;k=Object.keys(t).reduce(((e,n)=>{const r=e[n]||(e[n]={});return i(r,t[n]),e}),k||{})}const{__i18n:h,__root:N,__injectWithOption:T}=e,y=e.datetimeFormats,I=e.numberFormats,C=e.flatJson,O=e.translateExistCompatible;return{locale:t,fallbackLocale:n,messages:k,flatJson:C,datetimeFormats:y,numberFormats:I,missing:r,missingWarn:a,fallbackWarn:l,fallbackRoot:o,fallbackFormat:s,modifiers:u,pluralRules:f,postTranslation:m,warnHtmlMessage:_,escapeParameter:b,messageResolver:e.messageResolver,inheritLocale:v,translateExistCompatible:O,__i18n:h,__root:N,__injectWithOption:T}}(e)),{__extender:n}=e,r={id:t.id,get locale(){return t.locale.value},set locale(e){t.locale.value=e},get fallbackLocale(){return t.fallbackLocale.value},set fallbackLocale(e){t.fallbackLocale.value=e},get messages(){return t.messages.value},get datetimeFormats(){return t.datetimeFormats.value},get numberFormats(){return t.numberFormats.value},get availableLocales(){return t.availableLocales},get formatter(){return{interpolate:()=>[]}},set formatter(e){},get missing(){return t.getMissingHandler()},set missing(e){t.setMissingHandler(e)},get silentTranslationWarn(){return E(t.missingWarn)?!t.missingWarn:t.missingWarn},set silentTranslationWarn(e){t.missingWarn=E(e)?!e:e},get silentFallbackWarn(){return E(t.fallbackWarn)?!t.fallbackWarn:t.fallbackWarn},set silentFallbackWarn(e){t.fallbackWarn=E(e)?!e:e},get modifiers(){return t.modifiers},get formatFallbackMessages(){return t.fallbackFormat},set formatFallbackMessages(e){t.fallbackFormat=e},get postTranslation(){return t.getPostTranslationHandler()},set postTranslation(e){t.setPostTranslationHandler(e)},get sync(){return t.inheritLocale},set sync(e){t.inheritLocale=e},get warnHtmlInMessage(){return t.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(e){t.warnHtmlMessage="off"!==e},get escapeParameterHtml(){return t.escapeParameter},set escapeParameterHtml(e){t.escapeParameter=e},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(e){},get pluralizationRules(){return t.pluralRules||{}},__composer:t,t(...e){const[n,r,a]=e,l={};let o=null,s=null;if(!g(n))throw Error(ct.INVALID_ARGUMENT);const c=n;return g(r)?l.locale=r:p(r)?o=r:L(r)&&(s=r),p(a)?o=a:L(a)&&(s=a),Reflect.apply(t.t,t,[c,o||s||{},l])},rt:(...e)=>Reflect.apply(t.rt,t,[...e]),tc(...e){const[n,r,a]=e,l={plural:1};let s=null,c=null;if(!g(n))throw Error(ct.INVALID_ARGUMENT);const u=n;return g(r)?l.locale=r:o(r)?l.plural=r:p(r)?s=r:L(r)&&(c=r),g(a)?l.locale=a:p(a)?s=a:L(a)&&(c=a),Reflect.apply(t.t,t,[u,s||c||{},l])},te:(e,n)=>t.te(e,n),tm:e=>t.tm(e),getLocaleMessage:e=>t.getLocaleMessage(e),setLocaleMessage(e,n){t.setLocaleMessage(e,n)},mergeLocaleMessage(e,n){t.mergeLocaleMessage(e,n)},d:(...e)=>Reflect.apply(t.d,t,[...e]),getDateTimeFormat:e=>t.getDateTimeFormat(e),setDateTimeFormat(e,n){t.setDateTimeFormat(e,n)},mergeDateTimeFormat(e,n){t.mergeDateTimeFormat(e,n)},n:(...e)=>Reflect.apply(t.n,t,[...e]),getNumberFormat:e=>t.getNumberFormat(e),setNumberFormat(e,n){t.setNumberFormat(e,n)},mergeNumberFormat(e,n){t.mergeNumberFormat(e,n)},getChoiceIndex:(e,t)=>-1};return r.__extender=n,r}}const It={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>"parent"===e||"global"===e,default:"parent"},i18n:{type:Object}};function Ct(e){return t.Fragment}const Ot=t.defineComponent({name:"i18n-t",props:i({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>o(e)||!isNaN(e)}},It),setup(e,n){const{slots:r,attrs:a}=n,l=e.i18n||$t({useScope:e.scope,__useComponent:!0});return()=>{const o=Object.keys(r).filter((e=>"_"!==e)),s={};e.locale&&(s.locale=e.locale),void 0!==e.plural&&(s.plural=g(e.plural)?+e.plural:e.plural);const c=function({slots:e},n){if(1===n.length&&"default"===n[0])return(e.default?e.default():[]).reduce(((e,n)=>[...e,...n.type===t.Fragment?n.children:[n]]),[]);return n.reduce(((t,n)=>{const r=e[n];return r&&(t[n]=r()),t}),{})}(n,o),u=l[ut](e.keypath,c,s),f=i({},a),m=g(e.tag)||b(e.tag)?e.tag:Ct();return t.h(m,f,u)}}}),Pt=Ot;function At(e,n,r,a){const{slots:l,attrs:o}=n;return()=>{const n={part:!0};let s={};e.locale&&(n.locale=e.locale),g(e.format)?n.key=e.format:b(e.format)&&(g(e.format.key)&&(n.key=e.format.key),s=Object.keys(e.format).reduce(((t,n)=>r.includes(n)?i({},t,{[n]:e.format[n]}):t),{}));const c=a(e.value,n,s);let u=[n.key];p(c)?u=c.map(((e,t)=>{const n=l[e.type],r=n?n({[e.type]:e.value,index:t,parts:c}):[e.value];var a;return p(a=r)&&!g(a[0])&&(r[0].key=`${e.type}-${t}`),r})):g(c)&&(u=[c]);const f=i({},o),m=g(e.tag)||b(e.tag)?e.tag:Ct();return t.h(m,f,u)}}const Rt=t.defineComponent({name:"i18n-n",props:i({value:{type:Number,required:!0},format:{type:[String,Object]}},It),setup(e,t){const n=e.i18n||$t({useScope:e.scope,__useComponent:!0});return At(e,t,nt,((...e)=>n[ft](...e)))}}),Ft=Rt,St=t.defineComponent({name:"i18n-d",props:i({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},It),setup(e,t){const n=e.i18n||$t({useScope:e.scope,__useComponent:!0});return At(e,t,qe,((...e)=>n[it](...e)))}}),Dt=St;function Mt(e){const r=t=>{const{instance:n,modifiers:r,value:a}=t;if(!n||!n.$)throw Error(ct.UNEXPECTED_ERROR);const l=function(e,t){const n=e;if("composition"===e.mode)return n.__getInstance(t)||e.global;{const r=n.__getInstance(t);return null!=r?r.__composer:e.global.__composer}}(e,n.$),o=wt(a);return[Reflect.apply(l.t,l,[...xt(o)]),l]};return{created:(a,l)=>{const[o,s]=r(l);n&&e.global===s&&(a.__i18nWatcher=t.watch(s.locale,(()=>{l.instance&&l.instance.$forceUpdate()}))),a.__composer=s,a.textContent=o},unmounted:e=>{n&&e.__i18nWatcher&&(e.__i18nWatcher(),e.__i18nWatcher=void 0,delete e.__i18nWatcher),e.__composer&&(e.__composer=void 0,delete e.__composer)},beforeUpdate:(e,{value:t})=>{if(e.__composer){const n=e.__composer,r=wt(t);e.textContent=Reflect.apply(n.t,n,[...xt(r)])}},getSSRProps:e=>{const[t]=r(e);return{textContent:t}}}}function wt(e){if(g(e))return{path:e};if(L(e)){if(!("path"in e))throw Error(ct.REQUIRED_VALUE,"path");return e}throw Error(ct.INVALID_VALUE)}function xt(e){const{path:t,locale:n,args:r,choice:a,plural:l}=e,s={},c=r||{};return g(n)&&(s.locale=n),o(a)&&(s.plural=a),o(l)&&(s.plural=l),[t,c,s]}function Wt(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[mt](t.pluralizationRules||e.pluralizationRules);const n=gt(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach((t=>e.mergeLocaleMessage(t,n[t]))),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach((n=>e.mergeDateTimeFormat(n,t.datetimeFormats[n]))),t.numberFormats&&Object.keys(t.numberFormats).forEach((n=>e.mergeNumberFormat(n,t.numberFormats[n]))),e}const Ut=r("global-vue-i18n");function $t(e={}){const n=t.getCurrentInstance();if(null==n)throw Error(ct.MUST_BE_CALL_SETUP_TOP);if(!n.isCE&&null!=n.appContext.app&&!n.appContext.app.__VUE_I18N_SYMBOL__)throw Error(ct.NOT_INSTALLED);const r=function(e){{const n=t.inject(e.isCE?Ut:e.appContext.app.__VUE_I18N_SYMBOL__);if(!n)throw function(e,...t){return A(e,null,void 0)}(e.isCE?ct.NOT_INSTALLED_WITH_PROVIDE:ct.UNEXPECTED_ERROR);return n}}(n),a=function(e){return"composition"===e.mode?e.global:e.global.__composer}(r),l=Et(n),o=function(e,t){return u(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}(e,l);if("legacy"===r.mode&&!e.__useComponent){if(!r.allowComposition)throw Error(ct.NOT_AVAILABLE_IN_LEGACY_MODE);return function(e,n,r,a={}){const l="local"===n,o=t.shallowRef(null);if(l&&e.proxy&&!e.proxy.$options.i18n&&!e.proxy.$options.__i18n)throw Error(ct.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const s=E(a.inheritLocale)?a.inheritLocale:!g(a.locale),u=t.ref(!l||s?r.locale.value:g(a.locale)?a.locale:Ie),i=t.ref(!l||s?r.fallbackLocale.value:g(a.fallbackLocale)||p(a.fallbackLocale)||L(a.fallbackLocale)||!1===a.fallbackLocale?a.fallbackLocale:u.value),f=t.ref(gt(u.value,a)),m=t.ref(L(a.datetimeFormats)?a.datetimeFormats:{[u.value]:{}}),_=t.ref(L(a.numberFormats)?a.numberFormats:{[u.value]:{}}),b=l?r.missingWarn:!E(a.missingWarn)&&!c(a.missingWarn)||a.missingWarn,v=l?r.fallbackWarn:!E(a.fallbackWarn)&&!c(a.fallbackWarn)||a.fallbackWarn,k=l?r.fallbackRoot:!E(a.fallbackRoot)||a.fallbackRoot,h=!!a.fallbackFormat,N=d(a.missing)?a.missing:null,T=d(a.postTranslation)?a.postTranslation:null,y=l?r.warnHtmlMessage:!E(a.warnHtmlMessage)||a.warnHtmlMessage,I=!!a.escapeParameter,C=l?r.modifiers:L(a.modifiers)?a.modifiers:{},O=a.pluralRules||l&&r.pluralRules;function P(){return[u.value,i.value,f.value,m.value,_.value]}const A=t.computed({get:()=>o.value?o.value.locale.value:u.value,set:e=>{o.value&&(o.value.locale.value=e),u.value=e}}),R=t.computed({get:()=>o.value?o.value.fallbackLocale.value:i.value,set:e=>{o.value&&(o.value.fallbackLocale.value=e),i.value=e}}),F=t.computed((()=>o.value?o.value.messages.value:f.value)),S=t.computed((()=>m.value)),D=t.computed((()=>_.value));function M(){return o.value?o.value.getPostTranslationHandler():T}function w(e){o.value&&o.value.setPostTranslationHandler(e)}function x(){return o.value?o.value.getMissingHandler():N}function W(e){o.value&&o.value.setMissingHandler(e)}function U(e){return P(),e()}function $(...e){return o.value?U((()=>Reflect.apply(o.value.t,null,[...e]))):U((()=>""))}function H(...e){return o.value?Reflect.apply(o.value.rt,null,[...e]):""}function V(...e){return o.value?U((()=>Reflect.apply(o.value.d,null,[...e]))):U((()=>""))}function j(...e){return o.value?U((()=>Reflect.apply(o.value.n,null,[...e]))):U((()=>""))}function X(e){return o.value?o.value.tm(e):{}}function G(e,t){return!!o.value&&o.value.te(e,t)}function Y(e){return o.value?o.value.getLocaleMessage(e):{}}function B(e,t){o.value&&(o.value.setLocaleMessage(e,t),f.value[e]=t)}function K(e,t){o.value&&o.value.mergeLocaleMessage(e,t)}function z(e){return o.value?o.value.getDateTimeFormat(e):{}}function J(e,t){o.value&&(o.value.setDateTimeFormat(e,t),m.value[e]=t)}function Q(e,t){o.value&&o.value.mergeDateTimeFormat(e,t)}function q(e){return o.value?o.value.getNumberFormat(e):{}}function Z(e,t){o.value&&(o.value.setNumberFormat(e,t),_.value[e]=t)}function ee(e,t){o.value&&o.value.mergeNumberFormat(e,t)}const te={get id(){return o.value?o.value.id:-1},locale:A,fallbackLocale:R,messages:F,datetimeFormats:S,numberFormats:D,get inheritLocale(){return o.value?o.value.inheritLocale:s},set inheritLocale(e){o.value&&(o.value.inheritLocale=e)},get availableLocales(){return o.value?o.value.availableLocales:Object.keys(f.value)},get modifiers(){return o.value?o.value.modifiers:C},get pluralRules(){return o.value?o.value.pluralRules:O},get isGlobal(){return!!o.value&&o.value.isGlobal},get missingWarn(){return o.value?o.value.missingWarn:b},set missingWarn(e){o.value&&(o.value.missingWarn=e)},get fallbackWarn(){return o.value?o.value.fallbackWarn:v},set fallbackWarn(e){o.value&&(o.value.missingWarn=e)},get fallbackRoot(){return o.value?o.value.fallbackRoot:k},set fallbackRoot(e){o.value&&(o.value.fallbackRoot=e)},get fallbackFormat(){return o.value?o.value.fallbackFormat:h},set fallbackFormat(e){o.value&&(o.value.fallbackFormat=e)},get warnHtmlMessage(){return o.value?o.value.warnHtmlMessage:y},set warnHtmlMessage(e){o.value&&(o.value.warnHtmlMessage=e)},get escapeParameter(){return o.value?o.value.escapeParameter:I},set escapeParameter(e){o.value&&(o.value.escapeParameter=e)},t:$,getPostTranslationHandler:M,setPostTranslationHandler:w,getMissingHandler:x,setMissingHandler:W,rt:H,d:V,n:j,tm:X,te:G,getLocaleMessage:Y,setLocaleMessage:B,mergeLocaleMessage:K,getDateTimeFormat:z,setDateTimeFormat:J,mergeDateTimeFormat:Q,getNumberFormat:q,setNumberFormat:Z,mergeNumberFormat:ee};function ne(e){e.locale.value=u.value,e.fallbackLocale.value=i.value,Object.keys(f.value).forEach((t=>{e.mergeLocaleMessage(t,f.value[t])})),Object.keys(m.value).forEach((t=>{e.mergeDateTimeFormat(t,m.value[t])})),Object.keys(_.value).forEach((t=>{e.mergeNumberFormat(t,_.value[t])})),e.escapeParameter=I,e.fallbackFormat=h,e.fallbackRoot=k,e.fallbackWarn=v,e.missingWarn=b,e.warnHtmlMessage=y}return t.onBeforeMount((()=>{if(null==e.proxy||null==e.proxy.$i18n)throw Error(ct.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const t=o.value=e.proxy.$i18n.__composer;"global"===n?(u.value=t.locale.value,i.value=t.fallbackLocale.value,f.value=t.messages.value,m.value=t.datetimeFormats.value,_.value=t.numberFormats.value):l&&ne(t)})),te}(n,o,a,e)}if("global"===o)return bt(a,e,l),a;if("parent"===o){let t=function(e,t,n=!1){let r=null;const a=t.root;let l=function(e,t=!1){if(null==e)return null;return t&&e.vnode.ctx||e.parent}(t,n);for(;null!=l;){const t=e;if("composition"===e.mode)r=t.__getInstance(l);else{const e=t.__getInstance(l);null!=e&&(r=e.__composer,n&&r&&!r[_t]&&(r=null))}if(null!=r)break;if(a===l)break;l=l.parent}return r}(r,n,e.__useComponent);return null==t&&(t=a),t}const s=r;let f=s.__getInstance(n);if(null==f){const r=i({},e);"__i18n"in l&&(r.__i18n=l.__i18n),a&&(r.__root=a),f=Tt(r),s.__composerExtend&&(f[pt]=s.__composerExtend(f)),function(e,n,r){t.onMounted((()=>{}),n),t.onUnmounted((()=>{const t=r;e.__deleteInstance(n);const a=t[pt];a&&(a(),delete t[pt])}),n)}(s,n,f),s.__setInstance(n,f)}return f}const Ht=["locale","fallbackLocale","availableLocales"],Vt=["t","rt","d","n","tm","te"];return Pe=function(e,t){if(g(e)){!E(t.warnHtmlMessage)||t.warnHtmlMessage;const n=(t.onCacheKey||Ve)(e),r=je[n];if(r)return r;const{ast:a,detectError:l}=function(e,t={}){let n=!1;const r=t.onError||R;return t.onError=e=>{n=!0,r(e)},{...Z(e,t),detectError:n}}(e,{...t,location:!1,jit:!0}),o=Ue(a);return l?o:je[n]=o}{const t=e.cacheKey;return t?je[t]||(je[t]=Ue(e)):Ue(e)}},Ae=function(e,t){if(!b(e))return null;let n=ae.get(t);if(n||(n=function(e){const t=[];let n,r,a,l,o,s,c,u=-1,i=0,f=0;const m=[];function _(){const t=e[u+1];if(5===i&&"'"===t||6===i&&'"'===t)return u++,a="\\"+t,m[0](),!0}for(m[0]=()=>{void 0===r?r=a:r+=a},m[1]=()=>{void 0!==r&&(t.push(r),r=void 0)},m[2]=()=>{m[0](),f++},m[3]=()=>{if(f>0)f--,i=4,m[0]();else{if(f=0,void 0===r)return!1;if(r=re(r),!1===r)return!1;m[1]()}};null!==i;)if(u++,n=e[u],"\\"!==n||!_()){if(l=ne(n),c=ee[i],o=c[l]||c.l||8,8===o)return;if(i=o[0],void 0!==o[1]&&(s=m[o[1]],s&&(a=n,!1===s())))return;if(7===i)return t}}(t),n&&ae.set(t,n)),!n)return null;const r=n.length;let a=e,l=0;for(;l{if(!("__VUE_I18N_BRIDGE__"in e))throw Error(ct.NOT_COMPATIBLE_LEGACY_VUE_I18N);return e},e.createI18n=function(e={},n){const a=!E(e.legacy)||e.legacy,l=!E(e.globalInjection)||e.globalInjection,o=!a||!!e.allowComposition,s=new Map,[c,u]=function(e,n,r){const a=t.effectScope();{const t=n?a.run((()=>yt(e))):a.run((()=>Tt(e)));if(null==t)throw Error(ct.UNEXPECTED_ERROR);return[a,t]}}(e,a),i=r("");{const e={get mode(){return a?"legacy":"composition"},get allowComposition(){return o},async install(n,...r){if(n.__VUE_I18N_SYMBOL__=i,n.provide(n.__VUE_I18N_SYMBOL__,e),L(r[0])){const t=r[0];e.__composerExtend=t.__composerExtend,e.__vueI18nExtend=t.__vueI18nExtend}let o=null;!a&&l&&(o=function(e,n){const r=Object.create(null);Ht.forEach((e=>{const a=Object.getOwnPropertyDescriptor(n,e);if(!a)throw Error(ct.UNEXPECTED_ERROR);const l=t.isRef(a.value)?{get:()=>a.value.value,set(e){a.value.value=e}}:{get:()=>a.get&&a.get()};Object.defineProperty(r,e,l)})),e.config.globalProperties.$i18n=r,Vt.forEach((t=>{const r=Object.getOwnPropertyDescriptor(n,t);if(!r||!r.value)throw Error(ct.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${t}`,r)}));const a=()=>{delete e.config.globalProperties.$i18n,Vt.forEach((t=>{delete e.config.globalProperties[`$${t}`]}))};return a}(n,e.global)),function(e,t,...n){const r=L(n[0])?n[0]:{},a=!!r.useI18nComponentName;(!E(r.globalInstall)||r.globalInstall)&&([a?"i18n":Ot.name,"I18nT"].forEach((t=>e.component(t,Ot))),[Rt.name,"I18nN"].forEach((t=>e.component(t,Rt))),[St.name,"I18nD"].forEach((t=>e.component(t,St)))),e.directive("t",Mt(t))}(n,e,...r),a&&n.mixin(function(e,n,r){return{beforeCreate(){const a=t.getCurrentInstance();if(!a)throw Error(ct.UNEXPECTED_ERROR);const l=this.$options;if(l.i18n){const t=l.i18n;if(l.__i18n&&(t.__i18n=l.__i18n),t.__root=n,this===this.$root)this.$i18n=Wt(e,t);else{t.__injectWithOption=!0,t.__extender=r.__vueI18nExtend,this.$i18n=yt(t);const e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}}else if(l.__i18n)if(this===this.$root)this.$i18n=Wt(e,l);else{this.$i18n=yt({__i18n:l.__i18n,__injectWithOption:!0,__extender:r.__vueI18nExtend,__root:n});const e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}else this.$i18n=e;l.__i18nGlobal&&bt(n,l,l),this.$t=(...e)=>this.$i18n.t(...e),this.$rt=(...e)=>this.$i18n.rt(...e),this.$tc=(...e)=>this.$i18n.tc(...e),this.$te=(e,t)=>this.$i18n.te(e,t),this.$d=(...e)=>this.$i18n.d(...e),this.$n=(...e)=>this.$i18n.n(...e),this.$tm=e=>this.$i18n.tm(e),r.__setInstance(a,this.$i18n)},mounted(){},unmounted(){const e=t.getCurrentInstance();if(!e)throw Error(ct.UNEXPECTED_ERROR);const n=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,n.__disposer&&(n.__disposer(),delete n.__disposer,delete n.__extender),r.__deleteInstance(e),delete this.$i18n}}}(u,u.__composer,e));const s=n.unmount;n.unmount=()=>{o&&o(),e.dispose(),s()}},get global(){return u},dispose(){c.stop()},__instances:s,__getInstance:function(e){return s.get(e)||null},__setInstance:function(e,t){s.set(e,t)},__deleteInstance:function(e){s.delete(e)}};return e}},e.useI18n=$t,e.vTDirective=Mt,e}({},Vue); diff --git a/simulator.html b/simulator.html index fc91a1c9..5dfccc02 100644 --- a/simulator.html +++ b/simulator.html @@ -18,7 +18,7 @@ - + @@ -32,25 +32,26 @@

KanColle Sortie Simulator

-   -   +   +  
+

{{$t('fleets')}}

- +
- - + +
- - + +
-
Land Base Aerial Support
+
{{$t('land_base_aerial_support')}}
[+] [−] @@ -68,113 +69,125 @@

KanColle Sortie Simulator

- - + +

+

{{$t('battles')}}

- +
- +

-

Settings

+

{{$t('settings')}}

-
-
Retreat on even if ship has if on Node or before
-
-
+
+
+ + + +
+
+
-
Historical Bonus:
+
{{$t('historical_bonus')}}
- +  {{autoBonusStatus}} ({{autoBonusName}}, Nodes: {{autoBonusNodes}})
- +
- Mechanics: + {{$t('mechanics')}}
- +
- - - - - - + + + + + +
- +
-
: Count use if HP ≤ % OR repair time > hours
-
Do not count if repair time < hours (regardless of above)
-
-
+
: + + +
+
+ +
+
+
-
+
- Vanguard Evasion Bonus: + {{$t('vanguard_evasion_bonus')}}
- + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
ShellingTorpedo
DD 1:
DD 2:
DD 3:
DD 4:
DD 5:
DD 6:
DD 7:
Other 1:
Other 2:
Other 3:
Other 4:
Other 5:
Other 6:
Other 7:
{{$t('shelling')}}{{$t('torpedo')}}
{{$t('DD_n',['1'])}}
{{$t('DD_n',['2'])}}
{{$t('DD_n',['3'])}}
{{$t('DD_n',['4'])}}
{{$t('DD_n',['5'])}}
{{$t('DD_n',['6'])}}
{{$t('DD_n',['7'])}}
{{$t('other_n',['1'])}}
{{$t('other_n',['2'])}}
{{$t('other_n',['3'])}}
{{$t('other_n',['4'])}}
{{$t('other_n',['5'])}}
{{$t('other_n',['6'])}}
{{$t('other_n',['7'])}}
- + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
ShellingTorpedo
DD 1:
DD 2:
DD 3:
DD 4:
DD 5:
DD 6:
DD 7:
Other 1:
Other 2:
Other 3:
Other 4:
Other 5:
Other 6:
Other 7:
{{$t('shelling')}}{{$t('torpedo')}}
{{$t('DD_n',['1'])}}
{{$t('DD_n',['2'])}}
{{$t('DD_n',['3'])}}
{{$t('DD_n',['4'])}}
{{$t('DD_n',['5'])}}
{{$t('DD_n',['6'])}}
{{$t('DD_n',['7'])}}
{{$t('other_n',['1'])}}
{{$t('other_n',['2'])}}
{{$t('other_n',['3'])}}
{{$t('other_n',['4'])}}
{{$t('other_n',['5'])}}
{{$t('other_n',['6'])}}
{{$t('other_n',['7'])}}
- +
@@ -182,42 +195,42 @@

Settings

- Special Attack Activation Rate: + {{$t('special_attack_activation_rate')}} - - - - - - - - + + + + + + + +
Nelson Touch:%
Nagato Special:%
Mutsu Special:%
Colorado Special:%
Kongou Special:%
Yamato Special (3-ship):%
Yamato Special (2-ship):%
Submarine Special Attack:%
{{$t('nelson_touch')}}%
{{$t('nagato_special')}}%
{{$t('mutsu_special')}}%
{{$t('colorado_special')}}%
{{$t('kongou_special')}}%
{{$t('yamato_special_3')}}%
{{$t('yamato_special_2')}}%
{{$t('submarine_special')}}%
- +
- Combined Fleet Airstrike Base Mods: + {{$t('cf_airstrike_base_mods')}} - - + + - + - + - + @@ -226,74 +239,76 @@

Settings

Damage (Base 25): Accuracy (Base 95):
MainEscort MainEscort
{{$t('damage_base',['25'])}} {{$t('accuracy_base',['95'])}}
{{$t('main')}}{{$t('escort')}} {{$t('main')}}{{$t('escort')}}
Player Target (Battle){{$t('player_target_battle')}}
Player Target (Raid){{$t('player_target_raid')}}
Enemy Target{{$t('enemy_target')}}
- Arctic Camo Bonuses: + {{$t('arctic_camo_bonuses')}} - - + +
Armour:
Evasion (Shelling):
{{$t('armour')}}
{{$t('evasion_shelling')}}
- Smokescreen Mods: + {{$t('smokescreen_mods')}}
- - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
Smoke Level:123
Activation Rate:%
activation rate formula
{{$t('smoke_level')}}123
{{$t('activation_rate')}}%
Shelling Accuracy Multiplier:
Player (No Radar)
Player (Radar)
Enemy (No Radar)
Enemy (Radar)
ASW Accuracy Multiplier:
Player
Enemy
Torpedo Accuracy Multiplier:
Player
Enemy
Airstrike Accuracy Multiplier:
Player
Enemy
{{$t('shelling_accuracy_multiplier')}}
{{$t('player_no_radar')}}
{{$t('player_radar')}}
{{$t('enemy_no_radar')}}
{{$t('enemy_radar')}}
{{$t('asw_accuracy_multiplier')}}
{{$t('player')}}
{{$t('enemy')}}
{{$t('torpedo_accuracy_multiplier')}}
{{$t('player')}}
{{$t('enemy')}}
{{$t('airstrike_accuracy_multiplier')}}
{{$t('player')}}
{{$t('enemy')}}
-
(Airstrike may be inaccurate)
- - +
{{$t('airstrike_may_be_inaccurate')}}
+ +
-
Shelling Range Tie Randomness Weights:
-
-
Warning: This setting is experimental and subject to change.
-
This setting's weights are based on sampling the number of occurrences of each ordering in DB data: this is only an estimate, the actual formula is unknown. Note this also means that some orderings may be incorrectly impossible to roll in simulator with this setting, if they are extremely rare in the actual game and were never recorded in DB.
Only range combinations with sufficient data are included, other combinations default to "uniform weights" (same as without this setting).
+
{{$t('shelling_range_tie_randomness_weights')}}
+
+
{{$t('warning_experimental_subject_to_change')}}
+
- Explanation:  + {{$t('explanation')}}  [1]  [2] 
-
Override Support Fleet Chance:
+
{{$t('override_support_chance')}}
- - - + + +
Normal (Day):%
Normal (Night):%
Boss:%
{{$t('normal_day')}}%
{{$t('normal_night')}}%
{{$t('boss')}}%
- +

+ +

{{$t('simulation')}}

- (Opens in Replayer) + {{$t('opens_in_replayer')}}
-
Simulate times and show statistics:
+
- - - + + +
@@ -306,14 +321,14 @@

Settings

-

Statistics

-
Accuracy of calculations is a work in progress and will be improved as new information is discovered. Please note that values are rough and may not exactly reflect real in-game rates.
-
Warning: Combined fleet and vanguard calculations are extremely tentative, so these results are especially rough. See Show Advanced for settings.
-
Number of runs: {{results.totalNum}}
+

{{$t('statistics')}}

+
{{$t('note_calc_wip')}}
+
{{$t('warn_combined_fleet')}}
+
{{$t('number_of_runs')}} {{results.totalNum}}
-
Final Rank Rate:
+
{{$t('final_rank_rate')}}
@@ -321,20 +336,20 @@

Statistics

- +
S{{results.rankS}}
A{{results.rankA}}
C{{results.rankC}}
D{{results.rankD}}
E{{results.rankE}}
Retreat{{results.retreat}}
{{results.retreat}}
-
Enemy Flagship Sunk Rate:
+
{{$t('enemy_flagship_sunk_rate')}}
- +
Flagship Sunk{{results.flagSunk}}
{{results.flagSunk}}
-
Avg -{{results.flagSunkHP}} HP per run
-
Avg -{{results.flagSunkHPBoss}} HP per boss
-
Avg {{results.transport}} TP per run
+
+
+
-
Rank Per Battle:
+
{{$t('rank_per_battle')}}
@@ -343,95 +358,101 @@

Statistics

- +
 {{n}}
S{{stat}}
C{{stat}}
D{{stat}}
E{{stat}}
Flagship Sunk{{stat}}
{{stat}}
-
MVP Rate Per Battle:
+
- + - +
 {{n}}
{{stat}}
{{stat}}
{{stat}}
{{stat}}
-
Air State Rate Per Battle:
+
{{$t('air_state_rate_per_battle')}}
- - - - - + + + + +
 {{n}}
AS+{{stat}}
AS{{stat}}
AP{{stat}}
AD{{stat}}
AI{{stat}}
{{$t('air_state_ASP')}}{{stat}}
{{$t('air_state_AS')}}{{stat}}
{{$t('air_state_AP')}}{{stat}}
{{$t('air_state_AD')}}{{stat}}
{{$t('air_state_AI')}}{{stat}}
-
Heavy Damage Rate Per Battle:
+
- + - + - +
 {{n}}
Any{{stat}}
{{$t('any')}}{{stat}}
{{stat}}
{{stat}}
{{stat}}
{{stat}}
-
No Moderate Damage After Battle:
+
- +
 {{n}}
All{{stat}}
{{$t('all')}}{{stat}}
-
Avg Resupply:
+
{{$t('avg_resupply')}}
- - - + + +
Fuel{{results.fuelSupply}}
Ammo{{results.ammoSupply}}
Bauxite{{results.bauxSupply}}
{{results.fuelSupply}}
{{results.ammoSupply}}
{{results.bauxSupply}}
-
Avg Repair:
+
{{$t('avg_repair')}}
- - - - + + + +
Fuel{{results.fuelRepair}}
Steel{{results.steelRepair}}
Bucket{{results.bucket}}
Repair Team{{results.damecon}}
{{results.fuelRepair}}
{{results.steelRepair}}
{{results.bucket}}
{{results.damecon}}
-
Avg Resource Per S:
+
+ + +
- - - - - - + + + + + +
Fuel{{results.fuelS}}
Ammo{{results.ammoS}}
Steel{{results.steelS}}
Bauxite{{results.bauxS}}
Bucket{{results.bucketS}}
Repair Team{{results.dameconS}}
{{results.fuelS}}
{{results.ammoS}}
{{results.steelS}}
{{results.bauxS}}
{{results.bucketS}}
{{results.dameconS}}
-
Avg Resource Per Flagship Sunk:
+
+ + +
- - - - - - + + + + + +
Fuel{{results.fuelSunk}}
Ammo{{results.ammoSunk}}
Steel{{results.steelSunk}}
Bauxite{{results.bauxSunk}}
Bucket{{results.bucketSunk}}
Repair Team{{results.dameconSunk}}
{{results.fuelSunk}}
{{results.ammoSunk}}
{{results.steelSunk}}
{{results.bauxSunk}}
{{results.bucketSunk}}
{{results.dameconSunk}}
-
Avg Emptied Plane Slot: {{results.emptiedPlane}}
-
Avg Emptied LBAS Slot: {{results.emptiedLBAS}}
+
{{$t('avg_emptied_plane_slot')}} {{results.emptiedPlane}}
+
{{$t('avg_emptied_lbas_slot')}} {{results.emptiedLBAS}}
@@ -493,34 +514,34 @@

Statistics