From 45d345d7cb3b942f135702c04330cc4d84330a0b Mon Sep 17 00:00:00 2001 From: AzenKain Date: Fri, 3 Apr 2026 18:37:01 +0700 Subject: [PATCH] UPDATE: Add muti language --- frontend/package-lock.json | 162 ++++++++- frontend/package.json | 4 + frontend/public/locales/en.json | 337 ++++++++++++++++++ frontend/public/locales/ja.json | 337 ++++++++++++++++++ frontend/public/locales/ko.json | 337 ++++++++++++++++++ frontend/public/locales/vi.json | 337 ++++++++++++++++++ frontend/public/locales/zh.json | 337 ++++++++++++++++++ .../src/components/backgroudModal/index.tsx | 45 ++- frontend/src/components/closeModal/index.tsx | 120 ++++--- frontend/src/components/header/index.tsx | 81 +++-- .../src/components/languageSwitcher/index.tsx | 110 ++++++ .../src/components/settingModal/index.tsx | 45 ++- frontend/src/components/updateModal/index.tsx | 4 +- frontend/src/i18n.ts | 18 + frontend/src/main.tsx | 1 + frontend/src/pages/about/index.tsx | 18 +- frontend/src/pages/analysis/index.tsx | 85 +++-- frontend/src/pages/diff/index.tsx | 120 ++++--- frontend/src/pages/fireflytools/index.tsx | 56 +-- frontend/src/pages/howto/index.tsx | 144 ++++---- frontend/src/pages/language/index.tsx | 58 +-- frontend/src/pages/launcher/index.tsx | 122 ++++--- frontend/src/utils/cropImage.ts | 1 + pkg/constant/constant.go | 2 +- 24 files changed, 2451 insertions(+), 430 deletions(-) create mode 100644 frontend/public/locales/en.json create mode 100644 frontend/public/locales/ja.json create mode 100644 frontend/public/locales/ko.json create mode 100644 frontend/public/locales/vi.json create mode 100644 frontend/public/locales/zh.json create mode 100644 frontend/src/components/languageSwitcher/index.tsx create mode 100644 frontend/src/i18n.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e74a9cb..61b9703 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,12 +11,16 @@ "@tailwindcss/vite": "^4.2.2", "@tanstack/react-router": "^1.168.10", "@tanstack/react-router-devtools": "^1.166.11", + "i18next": "^26.0.3", + "i18next-browser-languagedetector": "^8.2.1", + "i18next-http-backend": "^3.0.4", "lucide-react": "^1.7.0", "motion": "^12.38.0", "path-browserify": "^1.0.1", "react": "^19.2.4", "react-dom": "^19.2.4", "react-easy-crop": "^5.5.7", + "react-i18next": "^17.0.2", "react-toastify": "^11.0.5", "tailwindcss": "^4.2.2", "zustand": "^5.0.12" @@ -274,6 +278,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -2518,6 +2531,15 @@ "integrity": "sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==", "license": "MIT" }, + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -3175,6 +3197,65 @@ "hermes-estree": "0.25.1" } }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "license": "MIT", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/i18next": { + "version": "26.0.3", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.0.3.tgz", + "integrity": "sha512-1571kXINxHKY7LksWp8wP+zP0YqHSSpl/OW0Y0owFEf2H3s8gCAffWaZivcz14rMkOvn3R/psiQxVsR9t2Nafg==", + "funding": [ + { + "type": "individual", + "url": "https://www.locize.com/i18next" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://www.locize.com" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.29.2" + }, + "peerDependencies": { + "typescript": "^5 || ^6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/i18next-browser-languagedetector": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.1.tgz", + "integrity": "sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-http-backend": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-3.0.4.tgz", + "integrity": "sha512-udwrBIE6cNpqn1gRAqRULq3+7MzIIuaiKRWrz++dVz5SqWW2VwXmPJtAgkI0JtMLFaADC9qNmnZAxWAhsxXx2g==", + "license": "MIT", + "dependencies": { + "cross-fetch": "4.1.0" + } + }, "node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", @@ -3763,6 +3844,26 @@ "dev": true, "license": "MIT" }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-releases": { "version": "2.0.37", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", @@ -4002,6 +4103,33 @@ "react-dom": ">=16.4.0" } }, + "node_modules/react-i18next": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-17.0.2.tgz", + "integrity": "sha512-shBftH2vaTWK2Bsp7FiL+cevx3xFJlvFxmsDFQSrJc+6twHkP0tv/bGa01VVWzpreUVVwU+3Hev5iFqRg65RwA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "html-parse-stringify": "^3.0.1", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "i18next": ">= 26.0.1", + "react": ">= 16.8.0", + "typescript": "^5 || ^6" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/react-toastify": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-11.0.5.tgz", @@ -4305,6 +4433,12 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/ts-api-utils": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", @@ -4361,7 +4495,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "peer": true, "bin": { @@ -4454,7 +4588,6 @@ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", - "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -4549,6 +4682,21 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", @@ -4556,6 +4704,16 @@ "dev": true, "license": "MIT" }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index c8fab32..cb0c0f8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,12 +14,16 @@ "@tailwindcss/vite": "^4.2.2", "@tanstack/react-router": "^1.168.10", "@tanstack/react-router-devtools": "^1.166.11", + "i18next": "^26.0.3", + "i18next-browser-languagedetector": "^8.2.1", + "i18next-http-backend": "^3.0.4", "lucide-react": "^1.7.0", "motion": "^12.38.0", "path-browserify": "^1.0.1", "react": "^19.2.4", "react-dom": "^19.2.4", "react-easy-crop": "^5.5.7", + "react-i18next": "^17.0.2", "react-toastify": "^11.0.5", "tailwindcss": "^4.2.2", "zustand": "^5.0.12" diff --git a/frontend/public/locales/en.json b/frontend/public/locales/en.json new file mode 100644 index 0000000..c1f30cb --- /dev/null +++ b/frontend/public/locales/en.json @@ -0,0 +1,337 @@ +{ + "header": { + "home": "Home", + "tools": "Tools", + "language": "Language", + "diff": "Diff", + "client_update": "Client Update", + "plugins": "Plugins", + "analysis": "Analysis (Veritas)", + "firefly_tools": "Firefly Tools", + "how_to": "How to?", + "about": "About", + "settings": "Settings", + "minimize": "Minimize", + "close": "Close", + "by": "Firefly Shelter" + }, + "background": { + "select_bg": "Select Background", + "choose_bg": "Choose Background", + "paste_url": "Paste image URL (https://...)", + "add": "Add", + "upload": "Upload", + "upload_from_computer": "Upload from computer", + "done": "Done", + "remove": "Remove", + "invalid_url": "Invalid url" + }, + "close": { + "title": "Confirm Action", + "description": "Do you want to minimize the application to the system tray or close the application?", + "dont_ask": "Do not ask me again", + "minimize": "Minimize", + "close": "Close" + }, + "setting": { + "title": "Settings", + "launcher_update_title": "Launcher Update", + "launcher_update_desc": "Check if your launcher is up to date.", + "launcher_update_btn": "Check for Launcher Updates", + "launcher_update_success": "Launcher is already up to date", + "closing_options_title": "Closing Options", + "set_dont_ask_again": "Set do not ask again", + "closing_auto_desc": "Next time you close the app, it will automatically {{action}} without asking.", + "action_minimize": "minimize to system tray", + "action_quit": "quit the app", + "version_label": "Version", + "server_label": "Server", + "proxy_label": "Proxy", + "launcher_label": "Launcher" + }, + "home": { + "header_title": "Firefly GO", + "tooltip_how_to": "How to use all tools & commands", + "btn_select_game": "Select Game file", + "btn_selecting": "Selecting...", + "btn_start_game": "Start Game", + "btn_game_running": "Game is running", + "menu_change_path": "Change Game Path", + "menu_check_update": "Check for Updates Server & Proxy", + "menu_open_server": "Open server folder", + "menu_open_proxy": "Open proxy folder", + "menu_open_voice": "Open voice folder", + "status_updating_launcher": "Updating launcher", + "status_update_success": "Launcher updated successfully, auto closing after 5s", + "status_update_failed": "Launcher update failed, auto closing after 5s", + "status_wait": "Please wait...", + "status_complete": "Complete!", + "modal_update_title": "Update Data", + "modal_update_msg": "Do you want to update data server and proxy?", + "modal_download_title": "Download Data", + "modal_download_msg": "Data server and proxy download required", + "modal_self_update_title": "Update Launcher", + "modal_self_update_msg": "Do you want to update launcher?", + "btn_yes": "Yes", + "btn_no": "No", + "btn_download": "Download", + "error_game_dir": "Invalid game directory", + "error_file_type": "Incorrect file type", + "game_path_success": "Game path set successfully", + "no_updates": "No updates available", + "toast_pick_folder_error": "Pick folder error: ", + "toast_start_proxy_failed": "Failed to start proxy: ", + "toast_start_server_failed": "Failed to start server: ", + "toast_start_game_failed": "Failed to start game: ", + "toast_start_game_error": "Start game error: " + }, + "diff": { + "header_title": "๐ŸŽฎ Game Update by Diff Tool", + "header_desc": "Help you update game with Diff Tool", + "game_dir_title": "Game Directory", + "btn_selecting": "Selecting...", + "btn_select_game": "Select Game Folder", + "game_dir_valid": "Valid game directory found!", + "game_dir_invalid": "Game directory not found. Please select the correct folder.", + "diff_file_title": "Diff file Directory", + "btn_select_diff": "Select Diff file Folder", + "diff_file_valid": "Valid diff file found!", + "diff_file_invalid": "Diff file not found. Please select the correct file.", + "btn_updating": "Updating...", + "btn_update_game": "Update Game", + "modal_update_title": "Update Game", + "status_wait": "Please wait...", + "inst_title": "๐Ÿ“‹ Instructions:", + "inst_step_1": "1. Click \"Select Game Folder\" and choose your game's root directory", + "inst_step_2": "2. Wait for the system to validate the game directory", + "inst_step_3": "3. Click \"Select Diff file Folder\" and choose your diff file's root directory", + "inst_step_4": "4. Wait for the system to validate the diff file directory", + "inst_step_5": "5. Click \"Update Game\" to save your changes", + "toast_game_dir_not_found": "Game directory not found. Please select the correct folder.", + "toast_no_folder_selected": "No folder path selected", + "toast_pick_folder_error": "Pick folder error: ", + "toast_invalid_file_type": "Not valid file type", + "toast_no_file_selected": "No file path selected", + "toast_pick_file_error": "Pick file error: ", + "toast_select_both": "Please select game directory and diff file", + "toast_update_completed": "Update game completed", + "stage_check_type": "Check Type Diff Tool", + "stage_version_validate": "Version Validate", + "stage_data_extract": "Data Extract", + "stage_cut_data": "Cut Data", + "stage_patch_data": "Patch Data", + "stage_delete_old_files": "Delete old files" + }, + "language": { + "header_title": "๐ŸŽฎ Game Language Manager", + "header_desc": "Manage text and voice language settings for your game", + "game_dir_title": "Game Directory", + "btn_select_game": "Select Game Folder", + "btn_selecting": "Selecting...", + "game_dir_valid": "Valid game directory found!", + "game_dir_invalid": "Game directory not found. Please select the correct folder.", + "current_languages_title": "Current Languages", + "text_language": "Text Language", + "voice_language": "Voice Language", + "language_settings_title": "Language Settings", + "select_text_placeholder": "Select text language...", + "select_voice_placeholder": "Select voice language...", + "btn_apply": "Apply Language Settings", + "btn_applying": "Applying...", + "inst_title": "๐Ÿ“‹ Instructions:", + "inst_step_1": "1. Click \"Select Game Folder\" and choose your game's root directory", + "inst_step_2": "2. Wait for the system to validate the game directory", + "inst_step_3": "3. Select your preferred text and voice languages", + "inst_step_4": "4. Click \"Apply Language Settings\" to save your changes", + "toast_no_folder_selected": "No folder path selected", + "toast_pick_folder_error": "Pick Folder error: ", + "toast_set_language_success": "Language set successfully", + "toast_set_language_error": "Set language error: " + }, + "howto": { + "title": "How to Use", + "sect1_title": "Using the Launcher Features", + "sect1_auto_update_pre": "Automatically update", + "sect1_auto_update_post": "and proxy tools when launching.", + "sect1_launch_game": "Launch the game directly through the launcher with correct parameters and runtime environment.", + "sect1_lang_pre": "Support switching in-game language (e.g., EN, JP, ZH, KR) via", + "sect1_lang_link": "Language Tools", + "sect1_patch_title": "Patch & Update Game Files", + "sect1_patch_desc_1_pre": "Use the", + "sect1_patch_desc_1_link": "Diff Tool", + "sect1_patch_desc_1_post": "(DiffPatch) for fast & lightweight incremental updates.", + "sect1_patch_desc_2_pre": "Supports", + "sect1_patch_desc_2_post": ", and custom diff formats.", + "sect2_title": "FireflyGo Chat Commands", + "sect2_desc_pre": "Below are in-game chat commands you can use. Some commands require you to enable", + "sect2_desc_bold": "Theorycraft Mode", + "sect2_desc_post": ".", + "sect2_tc_req_title": "Theorycraft Mode Required", + "sect2_tc_req_desc_pre": "The following commands are only available when", + "sect2_tc_req_desc_bold": "Theorycraft Mode", + "sect2_tc_req_desc_post": "is enabled:", + "sect2_extra_title": "Extra Settings", + "sect2_hidden_ui_title": "Hidden UI", + "sect2_hidden_ui_desc": "Instantly hides the entire game UI โ€” often used in DIM showcase videos.", + "sect2_censor_title": "Disable Censorship", + "sect2_censor_desc": "Remove the Lens Flare censor effect ๐Ÿ’€ for a cleaner experience.", + "sect2_tc_title": "Theorycraft Mode", + "sect2_tc_desc": "No need to type chat commands anymore โ€” configure everything through the web: adjust monster HP, set cycles, view logs, and more.", + "sect2_cmd_title": "Available Commands:", + "sect2_cmd_tc": "Theorycraft Mode", + "sect2_cmd_tc_enable": "โ€” Enable Theorycraft Mode", + "sect2_cmd_tc_disable": "โ€” Disable Theorycraft Mode", + "sect2_cmd_cycle": "Cycle Control", + "sect2_cmd_tc_only": "(Theorycraft only)", + "sect2_cmd_cycle_desc": "โ€” Set cycle count in battle", + "sect2_cmd_cycle_ex1_pre": "Example:", + "sect2_cmd_cycle_ex1_post": "sets battle to 30 cycles", + "sect2_cmd_cycle_ex2_post": "disables custom cycle", + "sect2_cmd_hp": "HP Override", + "sect2_cmd_hp_desc1": "โ€” Set monster HP (only available in Theorycraft mode)", + "sect2_cmd_hp_desc2": "โ€” Disable the set HP feature", + "sect2_cmd_hp_desc3": "โ€” Set HP for each monster in a specific wave", + "sect2_cmd_hp_ex_pre": "Example:", + "sect2_cmd_hp_ex_post": "sets wave 1 monster1 HP=2,000,000 and monster2 HP=3,000,000", + "sect2_cmd_log": "Battle Log", + "sect2_cmd_log_desc1": "โ€” Enable battle log output", + "sect2_cmd_log_desc2": "โ€” Disable battle log", + "sect2_cmd_log_out_pre": "Output will be written as", + "sect2_cmd_skip": "Skip Nodes", + "sect2_cmd_skip_desc": "โ€” Skip nodes in MOC / AS / Pure Fiction", + "sect2_cmd_skip_ex1_pre": "Example:", + "sect2_cmd_skip_ex1_post": "skips node 2", + "sect2_cmd_skip_ex2_post": "disables skipping", + "sect2_cmd_id": "Character Path Switch", + "sect2_cmd_id_desc": "โ€” Switch path for multi-form characters", + "sect2_cmd_id_ex1_pre": "Example:", + "sect2_cmd_id_ex1_post": "to change MC (Trailblazer) form", + "sect2_cmd_id_ex2_pre": "Works with IDs like", + "sect2_cmd_update": "Refresh Data", + "sect2_cmd_update_desc_pre": "โ€” Refresh server data from current", + "sect3_title": "Other Notes", + "sect3_admin_title": "Administrator Rights", + "sect3_admin_desc": "Always run the launcher as Administrator for file permission access.", + "sect3_backup_title": "Backup Data", + "sect3_backup_desc_pre": "Backup your", + "sect3_backup_desc_mid": "and", + "sect3_backup_desc_post": "regularly.", + "sect3_voice_title": "Enable Voice Packs in Beta Client", + "sect3_voice_step1_pre": "Copy the desired voice folder (e.g.,", + "sect3_voice_step1_mid": ") from:", + "sect3_voice_step1_post_pre": "to the beta folder by clicking", + "sect3_voice_step1_post_bold": "\"Open Voice Folder\"", + "sect3_voice_step1_post_post": "on the Home tab.", + "sect3_voice_step2": "When launching the game for the first time, it may delete the voice folder. If so, repeat step 1 to restore it.", + "btn_back": "Back to Home" + }, + "about": { + "title": "About", + "p1_pre": "Hello! We are ", + "p1_post": ", a developer team passionate about building useful tools and improving user experiences.", + "p2_pre": "I created a lightweight and modern ", + "p2_highlight": "Game Launcher", + "p2_post": " to help users easily launch and manage their games with better performance and simplicity.", + "p3_pre": "The launcher is built using ", + "p3_mid": ", with a clean and responsive interface styled with ", + "p3_and": " and ", + "p3_post": ".", + "p4": "My goal is to make tools that are fast, efficient, and enjoyable to use โ€” and this launcher is just the beginning.", + "btn_back": "Back to Home" + }, + "fireflytools": { + "title": "Firefly Tools", + "sect1_title": "About Firefly Tools", + "sect1_p1_pre": "This site is another version of ", + "sect1_p1_tool": "Firefly Tools ", + "sect1_p1_mid": "developed by ", + "sect1_p1_author": "Firefly Shelter", + "sect1_master_site": "Master Website", + "sect1_p2_pre": "The original tool was created by a third-party developer named ", + "sect1_p2_author": "Amazing", + "sect1_p2_post": ". This version is directly based on that work, without modification to core logic.", + "sect1_p3_pre": "There is also a more modern version by the same author available at ", + "sect2_title": "Main Features", + "sect2_feat1": "Configure characters, light cones, relics, traces, and eidolons easily in your browser.", + "sect2_feat2_pre": "Instantly apply setups to ", + "sect2_feat2_server": "Firefly GO Server", + "sect2_feat2_mid": " using ", + "sect2_feat2_conn": "Connect PS", + "sect2_feat2_post": " โ€” no manual file uploads required.", + "sect2_feat3_title": "Extra Settings", + "sect2_feat3_desc_pre": "Enhance your ", + "sect2_feat3_desc_server": "Firefly GO Server", + "sect2_feat3_desc_post": " experience with extra features:", + "sect2_feat3_ui": "Hidden Game UI", + "sect2_feat3_ui_desc": "โ€” remove the entire game interface.", + "sect2_feat3_censor": "Disable Censorship", + "sect2_feat3_censor_desc": "โ€” get rid of Lens Flare censor ๐Ÿ’€.", + "sect2_feat3_tc": "Theorycraft Mode", + "sect2_feat3_tc_desc": "โ€” configure HP, cycles, and more via the web.", + "sect2_feat4_pre": "Export and import full builds using ", + "sect2_feat4_post": ".", + "sect2_feat5": "Fast testing workflow โ€” no sync cooldowns, instant in-game updates.", + "sect3_title": "Getting Started", + "sect3_step1": "Access the tool through your browser at the self-hosted instance.", + "sect3_step2": "Configure your character builds with the intuitive web interface.", + "sect3_step3_pre": "Use ", + "sect3_step3_bold": "Connect PS", + "sect3_step3_post": " feature to instantly sync with your private server.", + "sect3_step4": "Test your builds in-game with real-time updates and modifications.", + "btn_back": "Back to Home" + }, + "analysis": { + "title": "Firefly Analysis & Veritas Plugin", + "sect1_title": "About Veritas", + "sect1_p1_pre": "Veritas", + "sect1_p1_mid": " is a powerful ", + "sect1_p1_highlight": "Damage Logger", + "sect1_p1_post": " designed for analyzing damage in real-time during gameplay.", + "sect1_p2": "It's lightweight, fast, and easy to use for comprehensive damage analysis.", + "sect1_github": "GitHub Repository", + "sect2_title": "Web Analysis Tools", + "sect2_desc": "Use these web applications for real-time damage analysis with Veritas:", + "sect2_master": "Master Website", + "sect2_backup": "Backup Website", + "sect2_tip_pre": "Tip:", + "sect2_tip_post": " If your country has issues loading from the master site, please use the backup site instead.", + "sect3_title": "Installation Instructions", + "sect3_subtitle": "Important Setup Step", + "sect3_desc": "After downloading Veritas, you must rename the file for it to work properly:", + "sect3_rename": "Rename: ", + "sect3_place": "Then place ", + "sect3_place_post": " into your game directory.", + "sect4_title": "How to Use Web App", + "sect4_sub1": "For Firefly GO Local", + "sect4_sub1_step1_pre": "Launch the ", + "sect4_sub1_step1_game": "game", + "sect4_sub1_step1_mid": " and your ", + "sect4_sub1_step1_server": "Firefly GO Server (PS)", + "sect4_sub1_step1_post": ".", + "sect4_sub1_step2": "Open one of the web analysis tools.", + "sect4_sub1_step3_pre": "Go to ", + "sect4_sub1_step3_conn": "Connection Settings", + "sect4_sub1_step3_mid1": " โ†’ select ", + "sect4_sub1_step3_type": "Connection Type: PS", + "sect4_sub1_step3_mid2": " โ†’ click ", + "sect4_sub1_step3_btn": "Connect", + "sect4_sub1_step3_post": ".", + "sect4_sub1_step4": "Once connected, play the game. The tool will automatically analyze in the background.", + "sect4_sub2": "For Other Private Servers", + "sect4_sub2_step1_pre": "Launch the ", + "sect4_sub2_step1_game": "game", + "sect4_sub2_step1_mid": " and your ", + "sect4_sub2_step1_server": "Private Server", + "sect4_sub2_step1_post": ".", + "sect4_sub2_step2": "Open one of the web analysis tools.", + "sect4_sub2_step3_pre": "Go to ", + "sect4_sub2_step3_conn": "Connection Settings", + "sect4_sub2_step3_mid1": " โ†’ select ", + "sect4_sub2_step3_type": "Connection Type: Native", + "sect4_sub2_step3_mid2": " โ†’ click ", + "sect4_sub2_step3_btn": "Connect", + "sect4_sub2_step3_post": ".", + "sect4_sub2_step4": "Once connected, play the game normally.", + "btn_back": "Back to Home" + } +} \ No newline at end of file diff --git a/frontend/public/locales/ja.json b/frontend/public/locales/ja.json new file mode 100644 index 0000000..fcf4068 --- /dev/null +++ b/frontend/public/locales/ja.json @@ -0,0 +1,337 @@ +{ + "header": { + "home": "ใƒ›ใƒผใƒ ", + "tools": "ใƒ„ใƒผใƒซ", + "language": "่จ€่ชž", + "diff": "ๅทฎๅˆ†", + "client_update": "ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆๆ›ดๆ–ฐ", + "plugins": "ใƒ—ใƒฉใ‚ฐใ‚คใƒณ", + "analysis": "ๅˆ†ๆž๏ผˆVeritas๏ผ‰", + "firefly_tools": "Fireflyใƒ„ใƒผใƒซ", + "how_to": "ไฝฟใ„ๆ–น", + "about": "ๆฆ‚่ฆ", + "settings": "่จญๅฎš", + "minimize": "ๆœ€ๅฐๅŒ–", + "close": "้–‰ใ˜ใ‚‹", + "by": "Firefly Shelter" + }, + "background": { + "select_bg": "่ƒŒๆ™ฏใ‚’้ธๆŠž", + "choose_bg": "่ƒŒๆ™ฏใ‚’้ธๆŠž", + "paste_url": "็”ปๅƒURLใ‚’่ฒผใ‚Šไป˜ใ‘ (https://...)", + "add": "่ฟฝๅŠ ", + "upload": "ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "upload_from_computer": "ใƒ‘ใ‚ฝใ‚ณใƒณใ‹ใ‚‰ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "done": "ๅฎŒไบ†", + "remove": "ๅ‰Š้™ค", + "invalid_url": "็„กๅŠนใชURLใงใ™" + }, + "close": { + "title": "ๅฎŸ่กŒใฎ็ขบ่ช", + "description": "ๆœ€ๅฐๅŒ–ใ—ใฆใ‚ทใ‚นใƒ†ใƒ ใƒˆใƒฌใ‚คใซๆ ผ็ดใ—ใพใ™ใ‹๏ผŸใใ‚Œใจใ‚‚็ต‚ไบ†ใ—ใพใ™ใ‹๏ผŸ", + "dont_ask": "ๆฌกๅ›žใ‹ใ‚‰่กจ็คบใ—ใชใ„", + "minimize": "ๆœ€ๅฐๅŒ–", + "close": "็ต‚ไบ†" + }, + "setting": { + "title": "่จญๅฎš", + "launcher_update_title": "ใƒฉใƒณใƒใƒฃใƒผใฎๆ›ดๆ–ฐ", + "launcher_update_desc": "ๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใ‹ใฉใ†ใ‹ใ‚’็ขบ่ชใ—ใพใ™ใ€‚", + "launcher_update_btn": "ๆ›ดๆ–ฐใ‚’็ขบ่ช", + "launcher_update_success": "ใƒฉใƒณใƒใƒฃใƒผใฏๆœ€ๆ–ฐใฎ็Šถๆ…‹ใงใ™", + "closing_options_title": "็ต‚ไบ†ใ‚ชใƒ—ใ‚ทใƒงใƒณ", + "set_dont_ask_again": "ๆฌกๅ›žใ‹ใ‚‰่กจ็คบใ—ใชใ„", + "closing_auto_desc": "ๆฌกๅ›ž็ต‚ไบ†ๆ™‚ใ€็ขบ่ชใชใ—ใง่‡ชๅ‹•็š„ใซ{{action}}ใ—ใพใ™ใ€‚", + "action_minimize": "ใ‚ทใ‚นใƒ†ใƒ ใƒˆใƒฌใ‚คใซๆœ€ๅฐๅŒ–", + "action_quit": "ใ‚ขใƒ—ใƒชใ‚’็ต‚ไบ†", + "version_label": "ใƒใƒผใ‚ธใƒงใƒณ", + "server_label": "Server", + "proxy_label": "Proxy", + "launcher_label": "Launcher" + }, + "home": { +"header_title": "Firefly GO", + "tooltip_how_to": "ใƒ„ใƒผใƒซใจใ‚ณใƒžใƒณใƒ‰ใฎไฝฟใ„ๆ–น", + "btn_select_game": "ใ‚ฒใƒผใƒ ใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠž", + "btn_selecting": "้ธๆŠžไธญ...", + "btn_start_game": "ใ‚ฒใƒผใƒ ้–‹ๅง‹", + "btn_game_running": "ๅฎŸ่กŒไธญ", + "menu_change_path": "ใ‚ฒใƒผใƒ ใƒ‘ใ‚นใ‚’ๅค‰ๆ›ด", + "menu_check_update": "ใ‚ตใƒผใƒใƒผใจใƒ—ใƒญใ‚ญใ‚ทใฎๆ›ดๆ–ฐใ‚’็ขบ่ช", + "menu_open_server": "ใ‚ตใƒผใƒใƒผใƒ•ใ‚ฉใƒซใƒ€ใ‚’้–‹ใ", + "menu_open_proxy": "ใƒ—ใƒญใ‚ญใ‚ทใƒ•ใ‚ฉใƒซใƒ€ใ‚’้–‹ใ", + "menu_open_voice": "ใƒœใ‚คใ‚นใƒ•ใ‚ฉใƒซใƒ€ใ‚’้–‹ใ", + "status_updating_launcher": "ใƒฉใƒณใƒใƒฃใƒผใ‚’ๆ›ดๆ–ฐไธญ", + "status_update_success": "ๆ›ดๆ–ฐๅฎŒไบ†ใ€‚5็ง’ๅพŒใซ้–‰ใ˜ใพใ™", + "status_update_failed": "ๆ›ดๆ–ฐๅคฑๆ•—ใ€‚5็ง’ๅพŒใซ้–‰ใ˜ใพใ™", + "status_wait": "ใŠๅพ…ใกใใ ใ•ใ„...", + "status_complete": "ๅฎŒไบ†๏ผ", + "modal_update_title": "ใƒ‡ใƒผใ‚ฟๆ›ดๆ–ฐ", + "modal_update_msg": "ใ‚ตใƒผใƒใƒผใจใƒ—ใƒญใ‚ญใ‚ทใ‚’ๆ›ดๆ–ฐใ—ใพใ™ใ‹๏ผŸ", + "modal_download_title": "ใƒ‡ใƒผใ‚ฟใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", + "modal_download_msg": "ใ‚ตใƒผใƒใƒผใจใƒ—ใƒญใ‚ญใ‚ทใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใŒๅฟ…่ฆใงใ™", + "modal_self_update_title": "ใƒฉใƒณใƒใƒฃใƒผๆ›ดๆ–ฐ", + "modal_self_update_msg": "ใƒฉใƒณใƒใƒฃใƒผใ‚’ๆ›ดๆ–ฐใ—ใพใ™ใ‹๏ผŸ", + "btn_yes": "ใฏใ„", + "btn_no": "ใ„ใ„ใˆ", + "btn_download": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", + "error_game_dir": "็„กๅŠนใชใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช", + "error_file_type": "ใƒ•ใ‚กใ‚คใƒซๅฝขๅผใŒๆญฃใ—ใใ‚ใ‚Šใพใ›ใ‚“", + "game_path_success": "ใ‚ฒใƒผใƒ ใƒ‘ใ‚นใŒ่จญๅฎšใ•ใ‚Œใพใ—ใŸ", + "no_updates": "ๅˆฉ็”จๅฏ่ƒฝใชใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใฏใ‚ใ‚Šใพใ›ใ‚“", + "toast_pick_folder_error": "ใƒ•ใ‚ฉใƒซใƒ€้ธๆŠžใ‚จใƒฉใƒผ: ", + "toast_start_proxy_failed": "ใƒ—ใƒญใ‚ญใ‚ทใฎ่ตทๅ‹•ใซๅคฑๆ•—ใ—ใพใ—ใŸ: ", + "toast_start_server_failed": "ใ‚ตใƒผใƒใƒผใฎ่ตทๅ‹•ใซๅคฑๆ•—ใ—ใพใ—ใŸ: ", + "toast_start_game_failed": "ใ‚ฒใƒผใƒ ใฎ่ตทๅ‹•ใซๅคฑๆ•—ใ—ใพใ—ใŸ: ", + "toast_start_game_error": "ใ‚ฒใƒผใƒ ่ตทๅ‹•ใ‚จใƒฉใƒผ: " + }, + "diff": { + "header_title": "๐ŸŽฎ Diff Toolใซใ‚ˆใ‚‹ใ‚ฒใƒผใƒ ๆ›ดๆ–ฐ", + "header_desc": "Diff Toolใ‚’ไฝฟ็”จใ—ใŸใ‚ฒใƒผใƒ ใฎๆ›ดๆ–ฐใ‚’ใ‚ตใƒใƒผใƒˆใ—ใพใ™", + "game_dir_title": "ใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช", + "btn_selecting": "้ธๆŠžไธญ...", + "btn_select_game": "ใ‚ฒใƒผใƒ ใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠž", + "game_dir_valid": "ๆœ‰ๅŠนใชใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใŒ่ฆ‹ใคใ‹ใ‚Šใพใ—ใŸ๏ผ", + "game_dir_invalid": "ใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ๆญฃใ—ใ„ใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", + "diff_file_title": "Diffใƒ•ใ‚กใ‚คใƒซใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช", + "btn_select_diff": "Diffใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠž", + "diff_file_valid": "ๆœ‰ๅŠนใชDiffใƒ•ใ‚กใ‚คใƒซใŒ่ฆ‹ใคใ‹ใ‚Šใพใ—ใŸ๏ผ", + "diff_file_invalid": "Diffใƒ•ใ‚กใ‚คใƒซใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ๆญฃใ—ใ„ใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", + "btn_updating": "ๆ›ดๆ–ฐไธญ...", + "btn_update_game": "ใ‚ฒใƒผใƒ ใ‚’ๆ›ดๆ–ฐ", + "modal_update_title": "ใ‚ฒใƒผใƒ ใ‚’ๆ›ดๆ–ฐ", + "status_wait": "ใŠๅพ…ใกใใ ใ•ใ„...", + "inst_title": "๐Ÿ“‹ ๆ‰‹้ †:", + "inst_step_1": "1. ใ€Œใ‚ฒใƒผใƒ ใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใ€ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใ€ใ‚ฒใƒผใƒ ใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’้ธๆŠžใ—ใพใ™", + "inst_step_2": "2. ใ‚ทใ‚นใƒ†ใƒ ใŒใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ๆคœ่จผใ™ใ‚‹ใฎใ‚’ๅพ…ใกใพใ™", + "inst_step_3": "3. ใ€ŒDiffใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠžใ€ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใ€Diffใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠžใ—ใพใ™", + "inst_step_4": "4. ใ‚ทใ‚นใƒ†ใƒ ใŒDiffใƒ•ใ‚กใ‚คใƒซใ‚’ๆคœ่จผใ™ใ‚‹ใฎใ‚’ๅพ…ใกใพใ™", + "inst_step_5": "5. ใ€Œใ‚ฒใƒผใƒ ใ‚’ๆ›ดๆ–ฐใ€ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆๅค‰ๆ›ดใ‚’ไฟๅญ˜ใ—ใพใ™", + "toast_game_dir_not_found": "ใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ๆญฃใ—ใ„ใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", + "toast_no_folder_selected": "ใƒ•ใ‚ฉใƒซใƒ€ใƒ‘ใ‚นใŒ้ธๆŠžใ•ใ‚Œใฆใ„ใพใ›ใ‚“", + "toast_pick_folder_error": "ใƒ•ใ‚ฉใƒซใƒ€้ธๆŠžใ‚จใƒฉใƒผ: ", + "toast_invalid_file_type": "็„กๅŠนใชใƒ•ใ‚กใ‚คใƒซๅฝขๅผใงใ™", + "toast_no_file_selected": "ใƒ•ใ‚กใ‚คใƒซใƒ‘ใ‚นใŒ้ธๆŠžใ•ใ‚Œใฆใ„ใพใ›ใ‚“", + "toast_pick_file_error": "ใƒ•ใ‚กใ‚คใƒซ้ธๆŠžใ‚จใƒฉใƒผ: ", + "toast_select_both": "ใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใจDiffใƒ•ใ‚กใ‚คใƒซใฎไธกๆ–นใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„", + "toast_update_completed": "ใ‚ฒใƒผใƒ ใฎๆ›ดๆ–ฐใŒๅฎŒไบ†ใ—ใพใ—ใŸ", + "stage_check_type": "Diff Toolใ‚ฟใ‚คใƒ—ใฎ็ขบ่ช", + "stage_version_validate": "ใƒใƒผใ‚ธใƒงใƒณใฎๆคœ่จผ", + "stage_data_extract": "ใƒ‡ใƒผใ‚ฟใฎๆŠฝๅ‡บ", + "stage_cut_data": "ใƒ‡ใƒผใ‚ฟใฎๅˆ‡ใ‚Šๅ–ใ‚Š", + "stage_patch_data": "ใƒ‡ใƒผใ‚ฟใฎใƒ‘ใƒƒใƒ้ฉ็”จ", + "stage_delete_old_files": "ๅคใ„ใƒ•ใ‚กใ‚คใƒซใฎๅ‰Š้™ค" + }, + "language": { + "header_title": "๐ŸŽฎ ใ‚ฒใƒผใƒ ่จ€่ชžใƒžใƒใƒผใ‚ธใƒฃใƒผ", + "header_desc": "ใ‚ฒใƒผใƒ ใฎใƒ†ใ‚ญใ‚นใƒˆใจ้Ÿณๅฃฐ่จ€่ชžใฎ่จญๅฎšใ‚’็ฎก็†ใ—ใพใ™", + "game_dir_title": "ใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช", + "btn_select_game": "ใ‚ฒใƒผใƒ ใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠž", + "btn_selecting": "้ธๆŠžไธญ...", + "game_dir_valid": "ๆœ‰ๅŠนใชใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใŒ่ฆ‹ใคใ‹ใ‚Šใพใ—ใŸ๏ผ", + "game_dir_invalid": "ใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ๆญฃใ—ใ„ใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„ใ€‚", + "current_languages_title": "็พๅœจใฎ่จ€่ชž", + "text_language": "ใƒ†ใ‚ญใ‚นใƒˆ่จ€่ชž", + "voice_language": "้Ÿณๅฃฐ่จ€่ชž", + "language_settings_title": "่จ€่ชž่จญๅฎš", + "select_text_placeholder": "ใƒ†ใ‚ญใ‚นใƒˆ่จ€่ชžใ‚’้ธๆŠž...", + "select_voice_placeholder": "้Ÿณๅฃฐ่จ€่ชžใ‚’้ธๆŠž...", + "btn_apply": "่จ€่ชž่จญๅฎšใ‚’้ฉ็”จ", + "btn_applying": "้ฉ็”จไธญ...", + "inst_title": "๐Ÿ“‹ ๆ‰‹้ †:", + "inst_step_1": "1. ใ€Œใ‚ฒใƒผใƒ ใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใ€ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใ€ใ‚ฒใƒผใƒ ใฎใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’้ธๆŠžใ—ใพใ™", + "inst_step_2": "2. ใ‚ทใ‚นใƒ†ใƒ ใŒใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ๆคœ่จผใ™ใ‚‹ใฎใ‚’ๅพ…ใกใพใ™", + "inst_step_3": "3. ๅธŒๆœ›ใ™ใ‚‹ใƒ†ใ‚ญใ‚นใƒˆ่จ€่ชžใจ้Ÿณๅฃฐ่จ€่ชžใ‚’้ธๆŠžใ—ใพใ™", + "inst_step_4": "4. ใ€Œ่จ€่ชž่จญๅฎšใ‚’้ฉ็”จใ€ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆๅค‰ๆ›ดใ‚’ไฟๅญ˜ใ—ใพใ™", + "toast_no_folder_selected": "ใƒ•ใ‚ฉใƒซใƒ€ใƒ‘ใ‚นใŒ้ธๆŠžใ•ใ‚Œใฆใ„ใพใ›ใ‚“", + "toast_pick_folder_error": "ใƒ•ใ‚ฉใƒซใƒ€้ธๆŠžใ‚จใƒฉใƒผ: ", + "toast_set_language_success": "่จ€่ชžใŒๆญฃๅธธใซ่จญๅฎšใ•ใ‚Œใพใ—ใŸ", + "toast_set_language_error": "่จ€่ชž่จญๅฎšใ‚จใƒฉใƒผ: " + }, + "howto": { + "title": "ไฝฟใ„ๆ–น", + "sect1_title": "ใƒฉใƒณใƒใƒฃใƒผๆฉŸ่ƒฝใฎไฝฟ็”จ", + "sect1_auto_update_pre": "่ตทๅ‹•ๆ™‚ใซ", + "sect1_auto_update_post": "ใŠใ‚ˆใณใƒ—ใƒญใ‚ญใ‚ทใƒ„ใƒผใƒซใ‚’่‡ชๅ‹•็š„ใซๆ›ดๆ–ฐใ—ใพใ™ใ€‚", + "sect1_launch_game": "ๆญฃใ—ใ„ใƒ‘ใƒฉใƒกใƒผใ‚ฟใจๅฎŸ่กŒ็’ฐๅขƒใงใ€ใƒฉใƒณใƒใƒฃใƒผใ‹ใ‚‰็›ดๆŽฅใ‚ฒใƒผใƒ ใ‚’่ตทๅ‹•ใ—ใพใ™ใ€‚", + "sect1_lang_pre": "ใ‚ฒใƒผใƒ ๅ†…่จ€่ชž๏ผˆไพ‹: EN, JP, ZH, KR๏ผ‰ใฎๅˆ‡ใ‚Šๆ›ฟใˆใ‚’ใ‚ตใƒใƒผใƒˆใ—ใพใ™๏ผš", + "sect1_lang_link": "่จ€่ชžใƒ„ใƒผใƒซ", + "sect1_patch_title": "ใ‚ฒใƒผใƒ ใƒ•ใ‚กใ‚คใƒซใฎใƒ‘ใƒƒใƒใจๆ›ดๆ–ฐ", + "sect1_patch_desc_1_pre": "้ซ˜้€Ÿใง่ปฝ้‡ใชๅทฎๅˆ†ๆ›ดๆ–ฐใซใฏ", + "sect1_patch_desc_1_link": "Diff Tool", + "sect1_patch_desc_1_post": "๏ผˆDiffPatch๏ผ‰ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚", + "sect1_patch_desc_2_pre": "ใ‚ตใƒใƒผใƒˆๅฝขๅผ๏ผš", + "sect1_patch_desc_2_post": "ใ€ใŠใ‚ˆใณใ‚ซใ‚นใ‚ฟใƒ diffใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใ€‚", + "sect2_title": "FireflyGo ใƒใƒฃใƒƒใƒˆใ‚ณใƒžใƒณใƒ‰", + "sect2_desc_pre": "ใ‚ฒใƒผใƒ ๅ†…ใงไฝฟ็”จใงใใ‚‹ใƒใƒฃใƒƒใƒˆใ‚ณใƒžใƒณใƒ‰ใฏไปฅไธ‹ใฎ้€šใ‚Šใงใ™ใ€‚ไธ€้ƒจใฎใ‚ณใƒžใƒณใƒ‰ใฏ", + "sect2_desc_bold": "Theorycraftใƒขใƒผใƒ‰", + "sect2_desc_post": "ใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", + "sect2_tc_req_title": "Theorycraftใƒขใƒผใƒ‰ใŒๅฟ…่ฆ", + "sect2_tc_req_desc_pre": "ไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใฏ", + "sect2_tc_req_desc_bold": "Theorycraftใƒขใƒผใƒ‰", + "sect2_tc_req_desc_post": "ใŒๆœ‰ๅŠนใชๅ ดๅˆใฎใฟไฝฟ็”จใงใใพใ™:", + "sect2_extra_title": "่ฟฝๅŠ ่จญๅฎš", + "sect2_hidden_ui_title": "UIใ‚’้š ใ™", + "sect2_hidden_ui_desc": "ใ‚ฒใƒผใƒ UIๅ…จไฝ“ใ‚’ๅณๅบงใซ้ž่กจ็คบใซใ—ใพใ™ โ€” DIMใ‚ทใƒงใƒผใ‚ฑใƒผใ‚นใƒ“ใƒ‡ใ‚ชใงใ‚ˆใไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚", + "sect2_censor_title": "ๆคœ้–ฒใฎ็„กๅŠนๅŒ–", + "sect2_censor_desc": "ใ‚ˆใ‚Šใ‚ฏใƒชใƒผใƒณใชไฝ“้จ“ใฎใŸใ‚ใซใƒฌใƒณใ‚บใƒ•ใƒฌใ‚ขๆคœ้–ฒๅŠนๆžœ ๐Ÿ’€ ใ‚’ๅ‰Š้™คใ—ใพใ™ใ€‚", + "sect2_tc_title": "Theorycraftใƒขใƒผใƒ‰", + "sect2_tc_desc": "ใƒใƒฃใƒƒใƒˆใ‚ณใƒžใƒณใƒ‰ใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ๅฟ…่ฆใฏใ‚‚ใ†ใ‚ใ‚Šใพใ›ใ‚“ โ€” ใ‚ฆใ‚งใƒ–ใ‹ใ‚‰ใ™ในใฆใ‚’่จญๅฎšใงใใพใ™๏ผšใƒขใƒณใ‚นใ‚ฟใƒผใฎHP่ชฟๆ•ดใ€ใ‚ตใ‚คใ‚ฏใƒซใฎ่จญๅฎšใ€ใƒญใ‚ฐใฎ่กจ็คบใชใฉใ€‚", + "sect2_cmd_title": "ๅˆฉ็”จๅฏ่ƒฝใชใ‚ณใƒžใƒณใƒ‰:", + "sect2_cmd_tc": "Theorycraftใƒขใƒผใƒ‰", + "sect2_cmd_tc_enable": "โ€” Theorycraftใƒขใƒผใƒ‰ใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹", + "sect2_cmd_tc_disable": "โ€” Theorycraftใƒขใƒผใƒ‰ใ‚’็„กๅŠนใซใ™ใ‚‹", + "sect2_cmd_cycle": "ใ‚ตใ‚คใ‚ฏใƒซๅˆถๅพก", + "sect2_cmd_tc_only": "(Theorycraftใฎใฟ)", + "sect2_cmd_cycle_desc": "โ€” ๆˆฆ้—˜ใงใฎใ‚ตใ‚คใ‚ฏใƒซๆ•ฐใ‚’่จญๅฎšใ™ใ‚‹", + "sect2_cmd_cycle_ex1_pre": "ไพ‹:", + "sect2_cmd_cycle_ex1_post": "ใฏๆˆฆ้—˜ใ‚’30ใ‚ตใ‚คใ‚ฏใƒซใซ่จญๅฎšใ—ใพใ™", + "sect2_cmd_cycle_ex2_post": "ใฏใ‚ซใ‚นใ‚ฟใƒ ใ‚ตใ‚คใ‚ฏใƒซใ‚’็„กๅŠนใซใ—ใพใ™", + "sect2_cmd_hp": "HPใฎไธŠๆ›ธใ", + "sect2_cmd_hp_desc1": "โ€” ใƒขใƒณใ‚นใ‚ฟใƒผใฎHPใ‚’่จญๅฎšใ™ใ‚‹ (Theorycraftใƒขใƒผใƒ‰ใงใฎใฟๅˆฉ็”จๅฏ่ƒฝ)", + "sect2_cmd_hp_desc2": "โ€” HP่จญๅฎšๆฉŸ่ƒฝใ‚’็„กๅŠนใซใ™ใ‚‹", + "sect2_cmd_hp_desc3": "โ€” ็‰นๅฎšใฎใ‚ฆใ‚งใƒผใƒ–ใฎๅ„ใƒขใƒณใ‚นใ‚ฟใƒผใซHPใ‚’่จญๅฎšใ™ใ‚‹", + "sect2_cmd_hp_ex_pre": "ไพ‹:", + "sect2_cmd_hp_ex_post": "ใฏใ‚ฆใ‚งใƒผใƒ–1ใฎใƒขใƒณใ‚นใ‚ฟใƒผ1ใฎHPใ‚’2,000,000ใซใ€ใƒขใƒณใ‚นใ‚ฟใƒผ2ใฎHPใ‚’3,000,000ใซ่จญๅฎšใ—ใพใ™", + "sect2_cmd_log": "ใƒใƒˆใƒซใƒญใ‚ฐ", + "sect2_cmd_log_desc1": "โ€” ใƒใƒˆใƒซใƒญใ‚ฐๅ‡บๅŠ›ใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹", + "sect2_cmd_log_desc2": "โ€” ใƒใƒˆใƒซใƒญใ‚ฐใ‚’็„กๅŠนใซใ™ใ‚‹", + "sect2_cmd_log_out_pre": "ๅ‡บๅŠ›ใฏไปฅไธ‹ใฎๅฝขๅผใงๆ›ธใ่พผใพใ‚Œใพใ™:", + "sect2_cmd_skip": "ใƒŽใƒผใƒ‰ใฎใ‚นใ‚ญใƒƒใƒ—", + "sect2_cmd_skip_desc": "โ€” MOC / AS / ่™šๆง‹ๅ™ไบ‹ใงใƒŽใƒผใƒ‰ใ‚’ใ‚นใ‚ญใƒƒใƒ—ใ™ใ‚‹", + "sect2_cmd_skip_ex1_pre": "ไพ‹:", + "sect2_cmd_skip_ex1_post": "ใฏใƒŽใƒผใƒ‰2ใ‚’ใ‚นใ‚ญใƒƒใƒ—ใ—ใพใ™", + "sect2_cmd_skip_ex2_post": "ใฏใ‚นใ‚ญใƒƒใƒ—ใ‚’็„กๅŠนใซใ—ใพใ™", + "sect2_cmd_id": "ใ‚ญใƒฃใƒฉใ‚ฏใ‚ฟใƒผ้‹ๅ‘ฝใฎๅˆ‡ใ‚Šๆ›ฟใˆ", + "sect2_cmd_id_desc": "โ€” ่ค‡ๆ•ฐๅฝขๆ…‹ใ‚’ๆŒใคใ‚ญใƒฃใƒฉใ‚ฏใ‚ฟใƒผใฎ้‹ๅ‘ฝใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹", + "sect2_cmd_id_ex1_pre": "ไพ‹:", + "sect2_cmd_id_ex1_post": "ใฏไธปไบบๅ…ฌ(้–‹ๆ‹“่€…)ใฎๅฝขๆ…‹ใ‚’ๅค‰ๆ›ดใ—ใพใ™", + "sect2_cmd_id_ex2_pre": "ๅฏพๅฟœIDไพ‹:", + "sect2_cmd_update": "ใƒ‡ใƒผใ‚ฟใฎใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅ", + "sect2_cmd_update_desc_pre": "โ€” ็พๅœจใฎใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰ใ‚ตใƒผใƒใƒผใƒ‡ใƒผใ‚ฟใ‚’ๆ›ดๆ–ฐใ—ใพใ™:", + "sect3_title": "ใใฎไป–ใฎๆณจๆ„ไบ‹้ …", + "sect3_admin_title": "็ฎก็†่€…ๆจฉ้™", + "sect3_admin_desc": "ใƒ•ใ‚กใ‚คใƒซๆจฉ้™ใซใ‚ขใ‚ฏใ‚ปใ‚นใ™ใ‚‹ใŸใ‚ใ€ๅธธใซใƒฉใƒณใƒใƒฃใƒผใ‚’็ฎก็†่€…ใจใ—ใฆๅฎŸ่กŒใ—ใฆใใ ใ•ใ„ใ€‚", + "sect3_backup_title": "ใƒ‡ใƒผใ‚ฟใฎใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—", + "sect3_backup_desc_pre": "ๅฎšๆœŸ็š„ใซ", + "sect3_backup_desc_mid": "ใจ", + "sect3_backup_desc_post": "ใ‚’ใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—ใ—ใฆใใ ใ•ใ„ใ€‚", + "sect3_voice_title": "ใƒ™ใƒผใ‚ฟใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆใงใƒœใ‚คใ‚นใƒ‘ใƒƒใ‚ฏใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹", + "sect3_voice_step1_pre": "ๅธŒๆœ›ใ™ใ‚‹ใƒœใ‚คใ‚นใƒ•ใ‚ฉใƒซใƒ€ (ไพ‹:", + "sect3_voice_step1_mid": ") ใ‚’ไปฅไธ‹ใ‹ใ‚‰ใ‚ณใƒ”ใƒผใ—:", + "sect3_voice_step1_post_pre": "ใƒ›ใƒผใƒ ใ‚ฟใƒ–ใฎ", + "sect3_voice_step1_post_bold": "ใ€Œใƒœใ‚คใ‚นใƒ•ใ‚ฉใƒซใƒ€ใ‚’้–‹ใใ€", + "sect3_voice_step1_post_post": "ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใƒ™ใƒผใ‚ฟใƒ•ใ‚ฉใƒซใƒ€ใซ้…็ฝฎใ—ใพใ™ใ€‚", + "sect3_voice_step2": "ใ‚ฒใƒผใƒ ใ‚’ๅˆใ‚ใฆ่ตทๅ‹•ใ—ใŸ้š›ใ€ใƒœใ‚คใ‚นใƒ•ใ‚ฉใƒซใƒ€ใŒๅ‰Š้™คใ•ใ‚Œใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚ใใฎๅ ดๅˆใฏใ€ๆ‰‹้ †1ใ‚’็นฐใ‚Š่ฟ”ใ—ใฆๅพฉๅ…ƒใ—ใฆใใ ใ•ใ„ใ€‚", + "btn_back": "ใƒ›ใƒผใƒ ใซๆˆปใ‚‹" + }, + "about": { + "title": "ๆฆ‚่ฆ", + "p1_pre": "ใ“ใ‚“ใซใกใฏ๏ผ็งใŸใกใฏ ", + "p1_post": " ใงใ™ใ€‚ไพฟๅˆฉใชใƒ„ใƒผใƒซใฎๆง‹็ฏ‰ใจใƒฆใƒผใ‚ถใƒผไฝ“้จ“ใฎๅ‘ไธŠใซๆƒ…็†ฑใ‚’ๆณจใ้–‹็™บใƒใƒผใƒ ใงใ™ใ€‚", + "p2_pre": "ใƒฆใƒผใ‚ถใƒผใŒใ‚ˆใ‚Š่‰ฏใ„ใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใจใ‚ทใƒณใƒ—ใƒซใ•ใง็ฐกๅ˜ใซใ‚ฒใƒผใƒ ใ‚’่ตทๅ‹•ใƒป็ฎก็†ใงใใ‚‹ใ‚ˆใ†ใซใ€่ปฝ้‡ใงใƒขใƒ€ใƒณใช ", + "p2_highlight": "Game Launcher", + "p2_post": " ใ‚’ไฝœๆˆใ—ใพใ—ใŸใ€‚", + "p3_pre": "ใƒฉใƒณใƒใƒฃใƒผใฏ ", + "p3_mid": " ใ‚’ไฝฟ็”จใ—ใฆๆง‹็ฏ‰ใ•ใ‚ŒใฆใŠใ‚Šใ€", + "p3_and": " ใจ ", + "p3_post": " ใงใƒ‡ใ‚ถใ‚คใƒณใ•ใ‚ŒใŸใ‚ฏใƒชใƒผใƒณใงใƒฌใ‚นใƒใƒณใ‚ทใƒ–ใชใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใƒผใ‚นใ‚’ๅ‚™ใˆใฆใ„ใพใ™ใ€‚", + "p4": "็งใฎ็›ฎๆจ™ใฏใ€้ซ˜้€ŸใงๅŠน็އ็š„ใ€ใใ—ใฆไฝฟใฃใฆๆฅฝใ—ใ„ใƒ„ใƒผใƒซใ‚’ไฝœใ‚‹ใ“ใจใงใ™ใ€‚ใ“ใฎใƒฉใƒณใƒใƒฃใƒผใฏใใฎๅง‹ใพใ‚Šใซ้ŽใŽใพใ›ใ‚“ใ€‚", + "btn_back": "ใƒ›ใƒผใƒ ใซๆˆปใ‚‹" + }, + "fireflytools": { + "title": "Firefly ใƒ„ใƒผใƒซ", + "sect1_title": "Firefly ใƒ„ใƒผใƒซใซใคใ„ใฆ", + "sect1_p1_pre": "ใ“ใฎใ‚ตใ‚คใƒˆใฏ ", + "sect1_p1_tool": "Firefly Tools ", + "sect1_p1_mid": "ใฎๅˆฅใƒใƒผใ‚ธใƒงใƒณใงใ‚ใ‚Šใ€้–‹็™บๅ…ƒใฏ ", + "sect1_p1_author": "Firefly Shelter", + "sect1_master_site": "ใƒžใ‚นใ‚ฟใƒผใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ", + "sect1_p2_pre": "ใ‚ชใƒชใ‚ธใƒŠใƒซใฎใƒ„ใƒผใƒซใฏใ€", + "sect1_p2_author": "Amazing", + "sect1_p2_post": " ใจใ„ใ†ใ‚ตใƒผใƒ‰ใƒ‘ใƒผใƒ†ใ‚ฃใฎ้–‹็™บ่€…ใซใ‚ˆใฃใฆไฝœๆˆใ•ใ‚Œใพใ—ใŸใ€‚ใ“ใฎใƒใƒผใ‚ธใƒงใƒณใฏใ€ใ‚ณใ‚ขใƒญใ‚ธใƒƒใ‚ฏใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ“ใจใชใใ€ใใฎไฝœๆฅญใซ็›ดๆŽฅๅŸบใฅใ„ใฆใ„ใพใ™ใ€‚", + "sect1_p3_pre": "ๅŒใ˜ไฝœ่€…ใซใ‚ˆใ‚‹ใ‚ˆใ‚Šใƒขใƒ€ใƒณใชใƒใƒผใ‚ธใƒงใƒณใ‚‚ไปฅไธ‹ใงๅˆฉ็”จๅฏ่ƒฝใงใ™๏ผš", + "sect2_title": "ไธปใชๆฉŸ่ƒฝ", + "sect2_feat1": "ใƒ–ใƒฉใ‚ฆใ‚ถใงใ‚ญใƒฃใƒฉใ‚ฏใ‚ฟใƒผใ€ๅ…‰ๅ††้Œใ€้บ็‰ฉใ€่ปŒ่ทกใ€ๆ˜Ÿ้ญ‚ใ‚’็ฐกๅ˜ใซ่จญๅฎšใงใใพใ™ใ€‚", + "sect2_feat2_pre": "", + "sect2_feat2_server": "Firefly GO Server", + "sect2_feat2_mid": " ใซ ", + "sect2_feat2_conn": "Connect PS", + "sect2_feat2_post": " ใ‚’ไฝฟ็”จใ—ใฆ่จญๅฎšใ‚’ๅณๅบงใซ้ฉ็”จใ—ใพใ™ โ€” ๆ‰‹ๅ‹•ใงใฎใƒ•ใ‚กใ‚คใƒซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใฏไธ่ฆใงใ™ใ€‚", + "sect2_feat3_title": "่ฟฝๅŠ ่จญๅฎš", + "sect2_feat3_desc_pre": "่ฟฝๅŠ ๆฉŸ่ƒฝใง ", + "sect2_feat3_desc_server": "Firefly GO Server", + "sect2_feat3_desc_post": " ใฎไฝ“้จ“ใ‚’ๅ‘ไธŠใ•ใ›ใพใ™:", + "sect2_feat3_ui": "UIใ‚’้š ใ™", + "sect2_feat3_ui_desc": "โ€” ใ‚ฒใƒผใƒ ใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใƒผใ‚นๅ…จไฝ“ใ‚’ๅ‰Š้™คใ—ใพใ™ใ€‚", + "sect2_feat3_censor": "ๆคœ้–ฒใฎ็„กๅŠนๅŒ–", + "sect2_feat3_censor_desc": "โ€” ใƒฌใƒณใ‚บใƒ•ใƒฌใ‚ขๆคœ้–ฒ ๐Ÿ’€ ใ‚’ๅ–ใ‚Š้™คใใพใ™ใ€‚", + "sect2_feat3_tc": "Theorycraft ใƒขใƒผใƒ‰", + "sect2_feat3_tc_desc": "โ€” ใ‚ฆใ‚งใƒ–็ตŒ็”ฑใงHPใ€ใ‚ตใ‚คใ‚ฏใƒซใชใฉใ‚’่จญๅฎšใ—ใพใ™ใ€‚", + "sect2_feat4_pre": "ใ‚’ไฝฟ็”จใ—ใฆๅฎŒๅ…จใชใƒ“ใƒซใƒ‰ใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใŠใ‚ˆใณใ‚คใƒณใƒใƒผใƒˆใ—ใพใ™๏ผš", + "sect2_feat4_post": "ใ€‚", + "sect2_feat5": "้ซ˜้€Ÿใชใƒ†ใ‚นใƒˆใƒฏใƒผใ‚ฏใƒ•ใƒญใƒผ โ€” ๅŒๆœŸใฎใ‚ฏใƒผใƒซใƒ€ใ‚ฆใƒณใชใ—ใ€ใ‚ฒใƒผใƒ ๅ†…ใฎๅณๆ™‚ๆ›ดๆ–ฐใ€‚", + "sect3_title": "ใฏใ˜ใ‚ใซ", + "sect3_step1": "ใ‚ปใƒซใƒ•ใƒ›ใ‚นใƒˆใ•ใ‚ŒใŸใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎใƒ–ใƒฉใ‚ฆใ‚ถใ‹ใ‚‰ใƒ„ใƒผใƒซใซใ‚ขใ‚ฏใ‚ปใ‚นใ—ใพใ™ใ€‚", + "sect3_step2": "็›ดๆ„Ÿ็š„ใชใ‚ฆใ‚งใƒ–ใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใƒผใ‚นใงใ‚ญใƒฃใƒฉใ‚ฏใ‚ฟใƒผใƒ“ใƒซใƒ‰ใ‚’่จญๅฎšใ—ใพใ™ใ€‚", + "sect3_step3_pre": "", + "sect3_step3_bold": "Connect PS", + "sect3_step3_post": " ๆฉŸ่ƒฝใ‚’ไฝฟ็”จใ—ใฆใ€ใƒ—ใƒฉใ‚คใƒ™ใƒผใƒˆใ‚ตใƒผใƒใƒผใจๅณๅบงใซๅŒๆœŸใ—ใพใ™ใ€‚", + "sect3_step4": "ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ใฎๆ›ดๆ–ฐใจๅค‰ๆ›ดใ‚’ไฝฟ็”จใ—ใฆใ€ใ‚ฒใƒผใƒ ๅ†…ใงใƒ“ใƒซใƒ‰ใ‚’ใƒ†ใ‚นใƒˆใ—ใพใ™ใ€‚", + "btn_back": "ใƒ›ใƒผใƒ ใซๆˆปใ‚‹" + }, + "analysis": { + "title": "Firefly ๅˆ†ๆž & Veritas ใƒ—ใƒฉใ‚ฐใ‚คใƒณ", + "sect1_title": "Veritas ใซใคใ„ใฆ", + "sect1_p1_pre": "Veritas", + "sect1_p1_mid": " ใฏใ€ใ‚ฒใƒผใƒ ใƒ—ใƒฌใ‚คไธญใฎใƒ€ใƒกใƒผใ‚ธใ‚’ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ใงๅˆ†ๆžใ™ใ‚‹ใŸใ‚ใซ่จญ่จˆใ•ใ‚ŒใŸๅผทๅŠ›ใช ", + "sect1_p1_highlight": "ใƒ€ใƒกใƒผใ‚ธใƒญใ‚ฌใƒผ", + "sect1_p1_post": " ใงใ™ใ€‚", + "sect1_p2": "่ปฝ้‡ใง้ซ˜้€Ÿใ€ๅŒ…ๆ‹ฌ็š„ใชใƒ€ใƒกใƒผใ‚ธๅˆ†ๆžใซไฝฟใ„ใ‚„ใ™ใ„ใƒ„ใƒผใƒซใงใ™ใ€‚", + "sect1_github": "GitHub ใƒชใƒใ‚ธใƒˆใƒช", + "sect2_title": "Web ๅˆ†ๆžใƒ„ใƒผใƒซ", + "sect2_desc": "Veritas ใ‚’ไฝฟ็”จใ—ใŸใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ใƒ€ใƒกใƒผใ‚ธๅˆ†ๆžใซใฏใ€ไปฅไธ‹ใฎ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ไฝฟ็”จใ—ใฆใใ ใ•ใ„๏ผš", + "sect2_master": "ใƒžใ‚นใ‚ฟใƒผใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ", + "sect2_backup": "ใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ", + "sect2_tip_pre": "ใƒ’ใƒณใƒˆ๏ผš", + "sect2_tip_post": " ใƒžใ‚นใ‚ฟใƒผใ‚ตใ‚คใƒˆใฎ่ชญใฟ่พผใฟใซๅ•้กŒใŒใ‚ใ‚‹ๅ ดๅˆใฏใ€ใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—ใ‚ตใ‚คใƒˆใ‚’ใ”ๅˆฉ็”จใใ ใ•ใ„ใ€‚", + "sect3_title": "ใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ‰‹้ †", + "sect3_subtitle": "้‡่ฆใชใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ๆ‰‹้ †", + "sect3_desc": "Veritas ใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใŸๅพŒใ€ๆญฃๅธธใซๅ‹•ไฝœใ•ใ›ใ‚‹ใซใฏใƒ•ใ‚กใ‚คใƒซๅใ‚’ๅค‰ๆ›ดใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™๏ผš", + "sect3_rename": "ๅๅ‰ใฎๅค‰ๆ›ด: ", + "sect3_place": "ใใฎๅพŒใ€", + "sect3_place_post": " ใ‚’ใ‚ฒใƒผใƒ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซ้…็ฝฎใ—ใพใ™ใ€‚", + "sect4_title": "Web ใ‚ขใƒ—ใƒชใฎไฝฟใ„ๆ–น", + "sect4_sub1": "Firefly GO ใƒญใƒผใ‚ซใƒซ็”จ", + "sect4_sub1_step1_pre": "", + "sect4_sub1_step1_game": "ใ‚ฒใƒผใƒ ", + "sect4_sub1_step1_mid": " ใจ ", + "sect4_sub1_step1_server": "Firefly GO ใ‚ตใƒผใƒใƒผ (PS)", + "sect4_sub1_step1_post": " ใ‚’่ตทๅ‹•ใ—ใพใ™ใ€‚", + "sect4_sub1_step2": "ใ„ใšใ‚Œใ‹ใฎ Web ๅˆ†ๆžใƒ„ใƒผใƒซใ‚’้–‹ใใพใ™ใ€‚", + "sect4_sub1_step3_pre": "", + "sect4_sub1_step3_conn": "Connection Settings", + "sect4_sub1_step3_mid1": " ใซ็งปๅ‹•ใ—ใ€", + "sect4_sub1_step3_type": "Connection Type: PS", + "sect4_sub1_step3_mid2": " ใ‚’้ธๆŠžใ—ใฆใ€", + "sect4_sub1_step3_btn": "Connect", + "sect4_sub1_step3_post": " ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใพใ™ใ€‚", + "sect4_sub1_step4": "ๆŽฅ็ถšๅพŒใ€ใ‚ฒใƒผใƒ ใ‚’ใƒ—ใƒฌใ‚คใ—ใฆใใ ใ•ใ„ใ€‚ใƒ„ใƒผใƒซใŒใƒใƒƒใ‚ฏใ‚ฐใƒฉใ‚ฆใƒณใƒ‰ใง่‡ชๅ‹•็š„ใซๅˆ†ๆžใ‚’่กŒใ„ใพใ™ใ€‚", + "sect4_sub2": "ใใฎไป–ใฎใƒ—ใƒฉใ‚คใƒ™ใƒผใƒˆใ‚ตใƒผใƒใƒผ็”จ", + "sect4_sub2_step1_pre": "", + "sect4_sub2_step1_game": "ใ‚ฒใƒผใƒ ", + "sect4_sub2_step1_mid": " ใจ ", + "sect4_sub2_step1_server": "ใƒ—ใƒฉใ‚คใƒ™ใƒผใƒˆใ‚ตใƒผใƒใƒผ", + "sect4_sub2_step1_post": " ใ‚’่ตทๅ‹•ใ—ใพใ™ใ€‚", + "sect4_sub2_step2": "ใ„ใšใ‚Œใ‹ใฎ Web ๅˆ†ๆžใƒ„ใƒผใƒซใ‚’้–‹ใใพใ™ใ€‚", + "sect4_sub2_step3_pre": "", + "sect4_sub2_step3_conn": "Connection Settings", + "sect4_sub2_step3_mid1": " ใซ็งปๅ‹•ใ—ใ€", + "sect4_sub2_step3_type": "Connection Type: Native", + "sect4_sub2_step3_mid2": " ใ‚’้ธๆŠžใ—ใฆใ€", + "sect4_sub2_step3_btn": "Connect", + "sect4_sub2_step3_post": " ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใพใ™ใ€‚", + "sect4_sub2_step4": "ๆŽฅ็ถšๅพŒใ€้€šๅธธ้€šใ‚Šใ‚ฒใƒผใƒ ใ‚’ใƒ—ใƒฌใ‚คใ—ใฆใใ ใ•ใ„ใ€‚", + "btn_back": "ใƒ›ใƒผใƒ ใซๆˆปใ‚‹" + } +} \ No newline at end of file diff --git a/frontend/public/locales/ko.json b/frontend/public/locales/ko.json new file mode 100644 index 0000000..f4b8792 --- /dev/null +++ b/frontend/public/locales/ko.json @@ -0,0 +1,337 @@ +{ + "header": { + "home": "ํ™ˆ", + "tools": "๋„๊ตฌ", + "language": "์–ธ์–ด", + "diff": "๋น„๊ต", + "client_update": "ํด๋ผ์ด์–ธํŠธ ์—…๋ฐ์ดํŠธ", + "plugins": "ํ”Œ๋Ÿฌ๊ทธ์ธ", + "analysis": "๋ถ„์„ (Veritas)", + "firefly_tools": "Firefly ๋„๊ตฌ", + "how_to": "์‚ฌ์šฉ ๋ฐฉ๋ฒ•", + "about": "์ •๋ณด", + "settings": "์„ค์ •", + "minimize": "์ตœ์†Œํ™”", + "close": "๋‹ซ๊ธฐ", + "by": "Firefly Shelter" + }, + "background": { + "select_bg": "๋ฐฐ๊ฒฝ ์„ ํƒ", + "choose_bg": "๋ฐฐ๊ฒฝ ์„ ํƒ", + "paste_url": "์ด๋ฏธ์ง€ URL ๋ถ™์—ฌ๋„ฃ๊ธฐ (https://...)", + "add": "์ถ”๊ฐ€", + "upload": "์—…๋กœ๋“œ", + "upload_from_computer": "์ปดํ“จํ„ฐ์—์„œ ์—…๋กœ๋“œ", + "done": "์™„๋ฃŒ", + "remove": "์‚ญ์ œ", + "invalid_url": "์ž˜๋ชป๋œ URL์ž…๋‹ˆ๋‹ค" + }, + "close": { + "title": "์ž‘์—… ํ™•์ธ", + "description": "์•ฑ์„ ํŠธ๋ ˆ์ด๋กœ ์ตœ์†Œํ™”ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ข…๋ฃŒํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "dont_ask": "๋‹ค์‹œ ๋ฌป์ง€ ์•Š์Œ", + "minimize": "์ตœ์†Œํ™”", + "close": "์ข…๋ฃŒ" + }, + "setting": { + "title": "์„ค์ •", + "launcher_update_title": "๋Ÿฐ์ฒ˜ ์—…๋ฐ์ดํŠธ", + "launcher_update_desc": "๋Ÿฐ์ฒ˜๊ฐ€ ์ตœ์‹  ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + "launcher_update_btn": "์—…๋ฐ์ดํŠธ ํ™•์ธ", + "launcher_update_success": "๋Ÿฐ์ฒ˜๊ฐ€ ์ด๋ฏธ ์ตœ์‹  ๋ฒ„์ „์ž…๋‹ˆ๋‹ค", + "closing_options_title": "์ข…๋ฃŒ ์˜ต์…˜", + "set_dont_ask_again": "๋‹ค์‹œ ๋ฌป์ง€ ์•Š์Œ ์„ค์ •", + "closing_auto_desc": "๋‹ค์Œ ์ข…๋ฃŒ ์‹œ ๋ฌป์ง€ ์•Š๊ณ  ์ž๋™์œผ๋กœ {{action}}ํ•ฉ๋‹ˆ๋‹ค.", + "action_minimize": "ํŠธ๋ ˆ์ด๋กœ ์ตœ์†Œํ™”", + "action_quit": "์•ฑ ์ข…๋ฃŒ", + "version_label": "๋ฒ„์ „", + "server_label": "Server", + "proxy_label": "Proxy", + "launcher_label": "Launcher" + }, + "home": { +"header_title": "Firefly GO", + "tooltip_how_to": "๋„๊ตฌ ๋ฐ ๋ช…๋ น ์‚ฌ์šฉ๋ฒ•", + "btn_select_game": "๊ฒŒ์ž„ ํŒŒ์ผ ์„ ํƒ", + "btn_selecting": "์„ ํƒ ์ค‘...", + "btn_start_game": "๊ฒŒ์ž„ ์‹œ์ž‘", + "btn_game_running": "๊ฒŒ์ž„ ์‹คํ–‰ ์ค‘", + "menu_change_path": "๊ฒŒ์ž„ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ", + "menu_check_update": "์„œ๋ฒ„ ๋ฐ ํ”„๋ก์‹œ ์—…๋ฐ์ดํŠธ ํ™•์ธ", + "menu_open_server": "์„œ๋ฒ„ ํด๋” ์—ด๊ธฐ", + "menu_open_proxy": "ํ”„๋ก์‹œ ํด๋” ์—ด๊ธฐ", + "menu_open_voice": "์Œ์„ฑ ํด๋” ์—ด๊ธฐ", + "status_updating_launcher": "๋Ÿฐ์ฒ˜ ์—…๋ฐ์ดํŠธ ์ค‘", + "status_update_success": "์—…๋ฐ์ดํŠธ ์™„๋ฃŒ, 5์ดˆ ํ›„ ์ข…๋ฃŒ", + "status_update_failed": "์—…๋ฐ์ดํŠธ ์‹คํŒจ, 5์ดˆ ํ›„ ์ข…๋ฃŒ", + "status_wait": "์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค ์ฃผ์„ธ์š”...", + "status_complete": "์™„๋ฃŒ!", + "modal_update_title": "๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ", + "modal_update_msg": "์„œ๋ฒ„ ๋ฐ ํ”„๋ก์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "modal_download_title": "๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ", + "modal_download_msg": "์„œ๋ฒ„ ๋ฐ ํ”„๋ก์‹œ ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค", + "modal_self_update_title": "๋Ÿฐ์ฒ˜ ์—…๋ฐ์ดํŠธ", + "modal_self_update_msg": "๋Ÿฐ์ฒ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "btn_yes": "์˜ˆ", + "btn_no": "์•„๋‹ˆ์š”", + "btn_download": "๋‹ค์šด๋กœ๋“œ", + "error_game_dir": "์ž˜๋ชป๋œ ๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ", + "error_file_type": "์ž˜๋ชป๋œ ํŒŒ์ผ ํ˜•์‹", + "game_path_success": "๊ฒŒ์ž„ ๊ฒฝ๋กœ ์„ค์ • ์™„๋ฃŒ", + "no_updates": "์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค", + "toast_pick_folder_error": "ํด๋” ์„ ํƒ ์˜ค๋ฅ˜: ", + "toast_start_proxy_failed": "ํ”„๋ก์‹œ ์‹œ์ž‘ ์‹คํŒจ: ", + "toast_start_server_failed": "์„œ๋ฒ„ ์‹œ์ž‘ ์‹คํŒจ: ", + "toast_start_game_failed": "๊ฒŒ์ž„ ์‹œ์ž‘ ์‹คํŒจ: ", + "toast_start_game_error": "๊ฒŒ์ž„ ์‹œ์ž‘ ์˜ค๋ฅ˜: " + }, + "diff": { + "header_title": "๐ŸŽฎ Diff Tool๋กœ ๊ฒŒ์ž„ ์—…๋ฐ์ดํŠธ", + "header_desc": "Diff Tool์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์ž„์„ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค", + "game_dir_title": "๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ", + "btn_selecting": "์„ ํƒ ์ค‘...", + "btn_select_game": "๊ฒŒ์ž„ ํด๋” ์„ ํƒ", + "game_dir_valid": "์œ ํšจํ•œ ๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค!", + "game_dir_invalid": "๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํด๋”๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", + "diff_file_title": "Diff ํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ", + "btn_select_diff": "Diff ํŒŒ์ผ ์„ ํƒ", + "diff_file_valid": "์œ ํšจํ•œ Diff ํŒŒ์ผ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค!", + "diff_file_invalid": "Diff ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํŒŒ์ผ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", + "btn_updating": "์—…๋ฐ์ดํŠธ ์ค‘...", + "btn_update_game": "๊ฒŒ์ž„ ์—…๋ฐ์ดํŠธ", + "modal_update_title": "๊ฒŒ์ž„ ์—…๋ฐ์ดํŠธ", + "status_wait": "์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค ์ฃผ์„ธ์š”...", + "inst_title": "๐Ÿ“‹ ์ง€์นจ:", + "inst_step_1": "1. \"๊ฒŒ์ž„ ํด๋” ์„ ํƒ\"์„ ํด๋ฆญํ•˜๊ณ  ๊ฒŒ์ž„์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค", + "inst_step_2": "2. ์‹œ์Šคํ…œ์ด ๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒ€์ฆํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค", + "inst_step_3": "3. \"Diff ํŒŒ์ผ ์„ ํƒ\"์„ ํด๋ฆญํ•˜๊ณ  Diff ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค", + "inst_step_4": "4. ์‹œ์Šคํ…œ์ด Diff ํŒŒ์ผ์„ ๊ฒ€์ฆํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค", + "inst_step_5": "5. \"๊ฒŒ์ž„ ์—…๋ฐ์ดํŠธ\"๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค", + "toast_game_dir_not_found": "๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํด๋”๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", + "toast_no_folder_selected": "ํด๋” ๊ฒฝ๋กœ๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", + "toast_pick_folder_error": "ํด๋” ์„ ํƒ ์˜ค๋ฅ˜: ", + "toast_invalid_file_type": "์œ ํšจํ•˜์ง€ ์•Š์€ ํŒŒ์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค", + "toast_no_file_selected": "ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", + "toast_pick_file_error": "ํŒŒ์ผ ์„ ํƒ ์˜ค๋ฅ˜: ", + "toast_select_both": "๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ์™€ Diff ํŒŒ์ผ์„ ๋ชจ๋‘ ์„ ํƒํ•ด์ฃผ์„ธ์š”", + "toast_update_completed": "๊ฒŒ์ž„ ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "stage_check_type": "Diff Tool ์œ ํ˜• ํ™•์ธ", + "stage_version_validate": "๋ฒ„์ „ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ", + "stage_data_extract": "๋ฐ์ดํ„ฐ ์ถ”์ถœ", + "stage_cut_data": "๋ฐ์ดํ„ฐ ์ž๋ฅด๊ธฐ", + "stage_patch_data": "๋ฐ์ดํ„ฐ ํŒจ์น˜", + "stage_delete_old_files": "์˜ค๋ž˜๋œ ํŒŒ์ผ ์‚ญ์ œ" + }, + "language": { + "header_title": "๐ŸŽฎ ๊ฒŒ์ž„ ์–ธ์–ด ๊ด€๋ฆฌ์ž", + "header_desc": "๊ฒŒ์ž„์˜ ํ…์ŠคํŠธ ๋ฐ ์Œ์„ฑ ์–ธ์–ด ์„ค์ •์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค", + "game_dir_title": "๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ", + "btn_select_game": "๊ฒŒ์ž„ ํด๋” ์„ ํƒ", + "btn_selecting": "์„ ํƒ ์ค‘...", + "game_dir_valid": "์œ ํšจํ•œ ๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค!", + "game_dir_invalid": "๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํด๋”๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.", + "current_languages_title": "ํ˜„์žฌ ์–ธ์–ด", + "text_language": "ํ…์ŠคํŠธ ์–ธ์–ด", + "voice_language": "์Œ์„ฑ ์–ธ์–ด", + "language_settings_title": "์–ธ์–ด ์„ค์ •", + "select_text_placeholder": "ํ…์ŠคํŠธ ์–ธ์–ด ์„ ํƒ...", + "select_voice_placeholder": "์Œ์„ฑ ์–ธ์–ด ์„ ํƒ...", + "btn_apply": "์–ธ์–ด ์„ค์ • ์ ์šฉ", + "btn_applying": "์ ์šฉ ์ค‘...", + "inst_title": "๐Ÿ“‹ ์ง€์นจ:", + "inst_step_1": "1. \"๊ฒŒ์ž„ ํด๋” ์„ ํƒ\"์„ ํด๋ฆญํ•˜๊ณ  ๊ฒŒ์ž„์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค", + "inst_step_2": "2. ์‹œ์Šคํ…œ์ด ๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒ€์ฆํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค", + "inst_step_3": "3. ์„ ํ˜ธํ•˜๋Š” ํ…์ŠคํŠธ ๋ฐ ์Œ์„ฑ ์–ธ์–ด๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค", + "inst_step_4": "4. \"์–ธ์–ด ์„ค์ • ์ ์šฉ\"์„ ํด๋ฆญํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค", + "toast_no_folder_selected": "ํด๋” ๊ฒฝ๋กœ๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", + "toast_pick_folder_error": "ํด๋” ์„ ํƒ ์˜ค๋ฅ˜: ", + "toast_set_language_success": "์–ธ์–ด ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "toast_set_language_error": "์–ธ์–ด ์„ค์ • ์˜ค๋ฅ˜: " + }, + "howto": { + "title": "์‚ฌ์šฉ ๋ฐฉ๋ฒ•", + "sect1_title": "๋Ÿฐ์ฒ˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ", + "sect1_auto_update_pre": "์‹คํ–‰ ์‹œ", + "sect1_auto_update_post": "๋ฐ ํ”„๋ก์‹œ ๋„๊ตฌ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.", + "sect1_launch_game": "์˜ฌ๋ฐ”๋ฅธ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ™˜๊ฒฝ์œผ๋กœ ๋Ÿฐ์ฒ˜๋ฅผ ํ†ตํ•ด ๊ฒŒ์ž„์„ ์ง์ ‘ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "sect1_lang_pre": "๊ฒŒ์ž„ ๋‚ด ์–ธ์–ด(์˜ˆ: EN, JP, ZH, KR) ์ „ํ™˜ ์ง€์›:", + "sect1_lang_link": "์–ธ์–ด ๋„๊ตฌ", + "sect1_patch_title": "๊ฒŒ์ž„ ํŒŒ์ผ ํŒจ์น˜ ๋ฐ ์—…๋ฐ์ดํŠธ", + "sect1_patch_desc_1_pre": "๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ์ฆ๋ถ„ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด", + "sect1_patch_desc_1_link": "Diff Tool", + "sect1_patch_desc_1_post": "(DiffPatch)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.", + "sect1_patch_desc_2_pre": "์ง€์› ํ˜•์‹:", + "sect1_patch_desc_2_post": "๋ฐ ์‚ฌ์šฉ์ž ์ •์˜ diff ํ˜•์‹.", + "sect2_title": "FireflyGo ์ฑ„ํŒ… ๋ช…๋ น", + "sect2_desc_pre": "๊ฒŒ์ž„ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฑ„ํŒ… ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ช…๋ น์€", + "sect2_desc_bold": "Theorycraft ๋ชจ๋“œ", + "sect2_desc_post": "๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "sect2_tc_req_title": "Theorycraft ๋ชจ๋“œ ํ•„์š”", + "sect2_tc_req_desc_pre": "๋‹ค์Œ ๋ช…๋ น์€", + "sect2_tc_req_desc_bold": "Theorycraft ๋ชจ๋“œ", + "sect2_tc_req_desc_post": "๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:", + "sect2_extra_title": "์ถ”๊ฐ€ ์„ค์ •", + "sect2_hidden_ui_title": "UI ์ˆจ๊ธฐ๊ธฐ", + "sect2_hidden_ui_desc": "DIM ์‡ผ์ผ€์ด์Šค ๋น„๋””์˜ค์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒŒ์ž„ UI ์ „์ฒด๋ฅผ ์ฆ‰์‹œ ์ˆจ๊น๋‹ˆ๋‹ค.", + "sect2_censor_title": "๊ฒ€์—ด ๋น„ํ™œ์„ฑํ™”", + "sect2_censor_desc": "๋” ๊น”๋”ํ•œ ๊ฒฝํ—˜์„ ์œ„ํ•ด ๋ Œ์ฆˆ ํ”Œ๋ ˆ์–ด ๊ฒ€์—ด ํšจ๊ณผ ๐Ÿ’€๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.", + "sect2_tc_title": "Theorycraft ๋ชจ๋“œ", + "sect2_tc_desc": "๋” ์ด์ƒ ์ฑ„ํŒ… ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค โ€” ๋ชฌ์Šคํ„ฐ HP ์กฐ์ •, ์ฃผ๊ธฐ ์„ค์ •, ๋กœ๊ทธ ๋ณด๊ธฐ ๋“ฑ ๋ชจ๋“  ๊ฒƒ์„ ์›น์„ ํ†ตํ•ด ๊ตฌ์„ฑํ•˜์„ธ์š”.", + "sect2_cmd_title": "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น:", + "sect2_cmd_tc": "Theorycraft ๋ชจ๋“œ", + "sect2_cmd_tc_enable": "โ€” Theorycraft ๋ชจ๋“œ ํ™œ์„ฑํ™”", + "sect2_cmd_tc_disable": "โ€” Theorycraft ๋ชจ๋“œ ๋น„ํ™œ์„ฑํ™”", + "sect2_cmd_cycle": "์ฃผ๊ธฐ ์ œ์–ด", + "sect2_cmd_tc_only": "(Theorycraft ์ „์šฉ)", + "sect2_cmd_cycle_desc": "โ€” ์ „ํˆฌ์—์„œ ์ฃผ๊ธฐ ์ˆ˜ ์„ค์ •", + "sect2_cmd_cycle_ex1_pre": "์˜ˆ:", + "sect2_cmd_cycle_ex1_post": "๋Š” ์ „ํˆฌ๋ฅผ 30์ฃผ๊ธฐ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค", + "sect2_cmd_cycle_ex2_post": "๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ฃผ๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค", + "sect2_cmd_hp": "HP ๋ฎ์–ด์“ฐ๊ธฐ", + "sect2_cmd_hp_desc1": "โ€” ๋ชฌ์Šคํ„ฐ HP ์„ค์ • (Theorycraft ๋ชจ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)", + "sect2_cmd_hp_desc2": "โ€” HP ์„ค์ • ๊ธฐ๋Šฅ ๋น„ํ™œ์„ฑํ™”", + "sect2_cmd_hp_desc3": "โ€” ํŠน์ • ์›จ์ด๋ธŒ์˜ ๊ฐ ๋ชฌ์Šคํ„ฐ์— HP ์„ค์ •", + "sect2_cmd_hp_ex_pre": "์˜ˆ:", + "sect2_cmd_hp_ex_post": "๋Š” ์›จ์ด๋ธŒ 1 ๋ชฌ์Šคํ„ฐ1 HP๋ฅผ 2,000,000์œผ๋กœ, ๋ชฌ์Šคํ„ฐ2 HP๋ฅผ 3,000,000์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค", + "sect2_cmd_log": "์ „ํˆฌ ๋กœ๊ทธ", + "sect2_cmd_log_desc1": "โ€” ์ „ํˆฌ ๋กœ๊ทธ ์ถœ๋ ฅ ํ™œ์„ฑํ™”", + "sect2_cmd_log_desc2": "โ€” ์ „ํˆฌ ๋กœ๊ทธ ๋น„ํ™œ์„ฑํ™”", + "sect2_cmd_log_out_pre": "์ถœ๋ ฅ์€ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค:", + "sect2_cmd_skip": "๋…ธ๋“œ ๊ฑด๋„ˆ๋›ฐ๊ธฐ", + "sect2_cmd_skip_desc": "โ€” ํ˜ผ๋ˆ์˜ ๊ธฐ์–ต / ํ—ˆ๊ตฌ ์ด์•ผ๊ธฐ์—์„œ ๋…ธ๋“œ ๊ฑด๋„ˆ๋›ฐ๊ธฐ", + "sect2_cmd_skip_ex1_pre": "์˜ˆ:", + "sect2_cmd_skip_ex1_post": "๋Š” ๋…ธ๋“œ 2๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค", + "sect2_cmd_skip_ex2_post": "๋Š” ๊ฑด๋„ˆ๋›ฐ๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค", + "sect2_cmd_id": "์บ๋ฆญํ„ฐ ์šด๋ช…์˜ ๊ธธ ์ „ํ™˜", + "sect2_cmd_id_desc": "โ€” ๋‹ค์ค‘ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„ ์บ๋ฆญํ„ฐ์˜ ์šด๋ช…์˜ ๊ธธ ์ „ํ™˜", + "sect2_cmd_id_ex1_pre": "์˜ˆ:", + "sect2_cmd_id_ex1_post": "๋Š” ๊ฐœ์ฒ™์ž ํ˜•ํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค", + "sect2_cmd_id_ex2_pre": "์ง€์›๋˜๋Š” ID ์˜ˆ:", + "sect2_cmd_update": "๋ฐ์ดํ„ฐ ์ƒˆ๋กœ๊ณ ์นจ", + "sect2_cmd_update_desc_pre": "โ€” ๋‹ค์Œ ํŒŒ์ผ์—์„œ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ฉ๋‹ˆ๋‹ค:", + "sect3_title": "๊ธฐํƒ€ ์ฐธ๊ณ  ์‚ฌํ•ญ", + "sect3_admin_title": "๊ด€๋ฆฌ์ž ๊ถŒํ•œ", + "sect3_admin_desc": "ํŒŒ์ผ ๊ถŒํ•œ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ํ•ญ์ƒ ๋Ÿฐ์ฒ˜๋ฅผ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”.", + "sect3_backup_title": "๋ฐ์ดํ„ฐ ๋ฐฑ์—…", + "sect3_backup_desc_pre": "์ •๊ธฐ์ ์œผ๋กœ", + "sect3_backup_desc_mid": "๋ฐ", + "sect3_backup_desc_post": "๋ฅผ ๋ฐฑ์—…ํ•˜์„ธ์š”.", + "sect3_voice_title": "๋ฒ ํƒ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์Œ์„ฑ ํŒฉ ํ™œ์„ฑํ™”", + "sect3_voice_step1_pre": "์›ํ•˜๋Š” ์Œ์„ฑ ํด๋”(์˜ˆ:", + "sect3_voice_step1_mid": ")๋ฅผ ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ๋ณต์‚ฌํ•˜์—ฌ:", + "sect3_voice_step1_post_pre": "ํ™ˆ ํƒญ์—์„œ", + "sect3_voice_step1_post_bold": "\"์Œ์„ฑ ํด๋” ์—ด๊ธฐ\"", + "sect3_voice_step1_post_post": "๋ฅผ ํด๋ฆญํ•ด ๋ฒ ํƒ€ ํด๋”์— ๋„ฃ์Šต๋‹ˆ๋‹ค.", + "sect3_voice_step2": "๊ฒŒ์ž„์„ ์ฒ˜์Œ ์‹คํ–‰ํ•  ๋•Œ ์Œ์„ฑ ํด๋”๊ฐ€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ 1๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ณต๊ตฌํ•˜์„ธ์š”.", + "btn_back": "ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ" + }, + "about": { + "title": "์†Œ๊ฐœ", + "p1_pre": "์•ˆ๋…•ํ•˜์„ธ์š”! ์ €ํฌ๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์—ด์ •์„ ์Ÿ๋Š” ๊ฐœ๋ฐœํŒ€ ", + "p1_post": " ์ž…๋‹ˆ๋‹ค.", + "p2_pre": "์‚ฌ์šฉ์ž๊ฐ€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ๋‹จ์ˆœํ•จ์œผ๋กœ ๊ฒŒ์ž„์„ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€๋ณ๊ณ  ํ˜„๋Œ€์ ์ธ ", + "p2_highlight": "Game Launcher", + "p2_post": " ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.", + "p3_pre": "๋Ÿฐ์ฒ˜๋Š” ", + "p3_mid": " ์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, ", + "p3_and": " ๋ฐ ", + "p3_post": " (์œผ)๋กœ ๋””์ž์ธ๋œ ๊น”๋”ํ•˜๊ณ  ๋ฐ˜์‘ํ˜•์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํŠน์ง•์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.", + "p4": "์ œ ๋ชฉํ‘œ๋Š” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋ฉฐ ์‚ฌ์šฉํ•˜๊ธฐ ์ฆ๊ฑฐ์šด ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€” ์ด ๋Ÿฐ์ฒ˜๋Š” ๋‹จ์ง€ ์‹œ์ž‘์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.", + "btn_back": "ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ" + }, + "fireflytools": { + "title": "Firefly ๋„๊ตฌ", + "sect1_title": "Firefly ๋„๊ตฌ ์†Œ๊ฐœ", + "sect1_p1_pre": "์ด ์‚ฌ์ดํŠธ๋Š” ", + "sect1_p1_tool": "Firefly Shelter", + "sect1_p1_mid": "์—์„œ ๊ฐœ๋ฐœํ•œ ", + "sect1_p1_author": "Firefly Tools", + "sect1_master_site": "๋งˆ์Šคํ„ฐ ์›น์‚ฌ์ดํŠธ", + "sect1_p2_pre": "์›๋ณธ ๋„๊ตฌ๋Š” ", + "sect1_p2_author": "Amazing", + "sect1_p2_post": " ์ด๋ผ๋Š” ํƒ€์‚ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์€ ํ•ต์‹ฌ ๋…ผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ์ž‘์—…์„ ์ง์ ‘ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.", + "sect1_p3_pre": "๋™์ผํ•œ ์ž‘์„ฑ์ž์˜ ๋” ํ˜„๋Œ€์ ์ธ ๋ฒ„์ „๋„ ๋‹ค์Œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ", + "sect2_title": "์ฃผ์š” ๊ธฐ๋Šฅ", + "sect2_feat1": "๋ธŒ๋ผ์šฐ์ €์—์„œ ์บ๋ฆญํ„ฐ, ๊ด‘์ถ”, ์œ ๋ฌผ, ํ–‰์  ๋ฐ ์„ฑํ˜ผ์„ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜์„ธ์š”.", + "sect2_feat2_pre": "", + "sect2_feat2_server": "Firefly GO Server", + "sect2_feat2_mid": "์— ", + "sect2_feat2_conn": "Connect PS", + "sect2_feat2_post": "๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •์„ ์ฆ‰์‹œ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค โ€” ์ˆ˜๋™ ํŒŒ์ผ ์—…๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "sect2_feat3_title": "์ถ”๊ฐ€ ์„ค์ •", + "sect2_feat3_desc_pre": "์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ", + "sect2_feat3_desc_server": "Firefly GO Server", + "sect2_feat3_desc_post": " ํ™˜๊ฒฝ์„ ํ–ฅ์ƒ์‹œํ‚ค์„ธ์š”:", + "sect2_feat3_ui": "๊ฒŒ์ž„ UI ์ˆจ๊ธฐ๊ธฐ", + "sect2_feat3_ui_desc": "โ€” ์ „์ฒด ๊ฒŒ์ž„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.", + "sect2_feat3_censor": "๊ฒ€์—ด ๋น„ํ™œ์„ฑํ™”", + "sect2_feat3_censor_desc": "โ€” ๋ Œ์ฆˆ ํ”Œ๋ ˆ์–ด ๊ฒ€์—ด ๐Ÿ’€์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.", + "sect2_feat3_tc": "Theorycraft ๋ชจ๋“œ", + "sect2_feat3_tc_desc": "โ€” ์›น์„ ํ†ตํ•ด HP, ์ฃผ๊ธฐ ๋“ฑ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "sect2_feat4_pre": "๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๋นŒ๋“œ๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค: ", + "sect2_feat4_post": ".", + "sect2_feat5": "๋น ๋ฅธ ํ…Œ์ŠคํŠธ ์›Œํฌํ”Œ๋กœ โ€” ๋™๊ธฐํ™” ์žฌ์‚ฌ์šฉ ๋Œ€๊ธฐ์‹œ๊ฐ„ ์—†์Œ, ์ฆ‰๊ฐ์ ์ธ ๊ฒŒ์ž„ ๋‚ด ์—…๋ฐ์ดํŠธ.", + "sect3_title": "์‹œ์ž‘ํ•˜๊ธฐ", + "sect3_step1": "์ž์ฒด ํ˜ธ์ŠคํŒ… ์ธ์Šคํ„ด์Šค์—์„œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ๋„๊ตฌ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.", + "sect3_step2": "์ง๊ด€์ ์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์บ๋ฆญํ„ฐ ๋นŒ๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "sect3_step3_pre": "", + "sect3_step3_bold": "Connect PS", + "sect3_step3_post": " ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์„ค ์„œ๋ฒ„์™€ ์ฆ‰์‹œ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "sect3_step4": "์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ๋ฐ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ด ๊ฒŒ์ž„ ๋‚ด์—์„œ ๋นŒ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.", + "btn_back": "ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ" + }, + "analysis": { + "title": "Firefly ๋ถ„์„ & Veritas ํ”Œ๋Ÿฌ๊ทธ์ธ", + "sect1_title": "Veritas ์†Œ๊ฐœ", + "sect1_p1_pre": "Veritas", + "sect1_p1_mid": "๋Š” ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ์ค‘ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ”ผํ•ด๋Ÿ‰์„ ๋ถ„์„ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ฐ•๋ ฅํ•œ ", + "sect1_p1_highlight": "๋ฐ๋ฏธ์ง€ ๋กœ๊ฑฐ", + "sect1_p1_post": "์ž…๋‹ˆ๋‹ค.", + "sect1_p2": "ํฌ๊ด„์ ์ธ ํ”ผํ•ด ๋ถ„์„์„ ์œ„ํ•ด ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.", + "sect1_github": "GitHub ์ €์žฅ์†Œ", + "sect2_title": "์›น ๋ถ„์„ ๋„๊ตฌ", + "sect2_desc": "Veritas๋ฅผ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ํ”ผํ•ด ๋ถ„์„์„ ์œ„ํ•ด ๋‹ค์Œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”:", + "sect2_master": "๋งˆ์Šคํ„ฐ ์›น์‚ฌ์ดํŠธ", + "sect2_backup": "๋ฐฑ์—… ์›น์‚ฌ์ดํŠธ", + "sect2_tip_pre": "ํŒ:", + "sect2_tip_post": " ํ•ด๋‹น ๊ตญ๊ฐ€์—์„œ ๋งˆ์Šคํ„ฐ ์‚ฌ์ดํŠธ ๋กœ๋”ฉ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐฑ์—… ์‚ฌ์ดํŠธ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์„ธ์š”.", + "sect3_title": "์„ค์น˜ ์ง€์นจ", + "sect3_subtitle": "์ค‘์š” ์„ค์ • ๋‹จ๊ณ„", + "sect3_desc": "Veritas๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ํŒŒ์ผ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:", + "sect3_rename": "์ด๋ฆ„ ๋ณ€๊ฒฝ: ", + "sect3_place": "๊ทธ๋Ÿฐ ๋‹ค์Œ ", + "sect3_place_post": "๋ฅผ ๊ฒŒ์ž„ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.", + "sect4_title": "์›น ์•ฑ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•", + "sect4_sub1": "Firefly GO ๋กœ์ปฌ์šฉ", + "sect4_sub1_step1_pre": "", + "sect4_sub1_step1_game": "๊ฒŒ์ž„", + "sect4_sub1_step1_mid": "๊ณผ ", + "sect4_sub1_step1_server": "Firefly GO ์„œ๋ฒ„(PS)", + "sect4_sub1_step1_post": "๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "sect4_sub1_step2": "์›น ๋ถ„์„ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ์—ฝ๋‹ˆ๋‹ค.", + "sect4_sub1_step3_pre": "", + "sect4_sub1_step3_conn": "Connection Settings", + "sect4_sub1_step3_mid1": "๋กœ ์ด๋™ โ†’ ", + "sect4_sub1_step3_type": "Connection Type: PS", + "sect4_sub1_step3_mid2": " ์„ ํƒ โ†’ ", + "sect4_sub1_step3_btn": "Connect", + "sect4_sub1_step3_post": "๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.", + "sect4_sub1_step4": "์—ฐ๊ฒฐ๋˜๋ฉด ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ดํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž๋™์œผ๋กœ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.", + "sect4_sub2": "๊ธฐํƒ€ ์‚ฌ์„ค ์„œ๋ฒ„์šฉ", + "sect4_sub2_step1_pre": "", + "sect4_sub2_step1_game": "๊ฒŒ์ž„", + "sect4_sub2_step1_mid": "๊ณผ ", + "sect4_sub2_step1_server": "์‚ฌ์„ค ์„œ๋ฒ„", + "sect4_sub2_step1_post": "๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "sect4_sub2_step2": "์›น ๋ถ„์„ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ์—ฝ๋‹ˆ๋‹ค.", + "sect4_sub2_step3_pre": "", + "sect4_sub2_step3_conn": "Connection Settings", + "sect4_sub2_step3_mid1": "๋กœ ์ด๋™ โ†’ ", + "sect4_sub2_step3_type": "Connection Type: Native", + "sect4_sub2_step3_mid2": " ์„ ํƒ โ†’ ", + "sect4_sub2_step3_btn": "Connect", + "sect4_sub2_step3_post": "๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.", + "sect4_sub2_step4": "์—ฐ๊ฒฐ๋˜๋ฉด ํ‰์†Œ์ฒ˜๋Ÿผ ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ดํ•ฉ๋‹ˆ๋‹ค.", + "btn_back": "ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ" + } +} \ No newline at end of file diff --git a/frontend/public/locales/vi.json b/frontend/public/locales/vi.json new file mode 100644 index 0000000..cc050da --- /dev/null +++ b/frontend/public/locales/vi.json @@ -0,0 +1,337 @@ +{ + "header": { + "home": "Trang chแปง", + "tools": "Cรดng cแปฅ", + "language": "Ngรดn ngแปฏ", + "diff": "So sรกnh", + "client_update": "Cแบญp nhแบญt client", + "plugins": "Plugin", + "analysis": "Phรขn tรญch (Veritas)", + "firefly_tools": "Firefly Tools", + "how_to": "Hฦฐแป›ng dแบซn", + "about": "Giแป›i thiแป‡u", + "settings": "Cร i ฤ‘แบทt", + "minimize": "Thu nhแป", + "close": "ฤรณng", + "by": "Firefly Shelter" + }, + "background": { + "select_bg": "Chแปn nแปn", + "choose_bg": "Chแปn แบฃnh nแปn", + "paste_url": "Dรกn URL แบฃnh (https://...)", + "add": "Thรชm", + "upload": "Tแบฃi lรชn", + "upload_from_computer": "Tแบฃi tแปซ mรกy tรญnh", + "done": "Xong", + "remove": "Xรณa", + "invalid_url": "URL khรดng hแปฃp lแป‡" + }, + "close": { + "title": "Xรกc nhแบญn hร nh ฤ‘แป™ng", + "description": "Bแบกn muแป‘n thu nhแป แปฉng dแปฅng xuแป‘ng khay hแป‡ thแป‘ng hay ฤ‘รณng แปฉng dแปฅng?", + "dont_ask": "Khรดng hแปi lแบกi tรดi", + "minimize": "Thu nhแป", + "close": "ฤรณng" + }, + "setting": { + "title": "Cร i ฤ‘แบทt", + "launcher_update_title": "Cแบญp nhแบญt Launcher", + "launcher_update_desc": "Kiแปƒm tra xem launcher cแปงa bแบกn ฤ‘รฃ lร  phiรชn bแบฃn mแป›i nhแบฅt chฦฐa.", + "launcher_update_btn": "Kiแปƒm tra cแบญp nhแบญt", + "launcher_update_success": "Launcher ฤ‘รฃ lร  phiรชn bแบฃn mแป›i nhแบฅt", + "closing_options_title": "Tรนy chแปn ฤ‘รณng", + "set_dont_ask_again": "Khรดng hแปi lแบกi lแบงn sau", + "closing_auto_desc": "Lแบงn tแป›i khi bแบกn ฤ‘รณng, แปฉng dแปฅng sแบฝ tแปฑ ฤ‘แป™ng {{action}} mร  khรดng cแบงn hแปi.", + "action_minimize": "thu nhแป xuแป‘ng khay hแป‡ thแป‘ng", + "action_quit": "thoรกt แปฉng dแปฅng", + "version_label": "Phiรชn bแบฃn", + "server_label": "Server", + "proxy_label": "Proxy", + "launcher_label": "Launcher" + }, + "home": { + "header_title": "Firefly GO", + "tooltip_how_to": "Cรกch sแปญ dแปฅng cรดng cแปฅ & lแป‡nh", + "btn_select_game": "Chแปn tแป‡p Game", + "btn_selecting": "ฤang chแปn...", + "btn_start_game": "Bแบฏt ฤ‘แบงu Game", + "btn_game_running": "Game ฤ‘ang chแบกy", + "menu_change_path": "Thay ฤ‘แป•i ฤ‘ฦฐแปng dแบซn Game", + "menu_check_update": "Kiแปƒm tra cแบญp nhแบญt Server & Proxy", + "menu_open_server": "MแปŸ thฦฐ mแปฅc Server", + "menu_open_proxy": "MแปŸ thฦฐ mแปฅc Proxy", + "menu_open_voice": "MแปŸ thฦฐ mแปฅc Voice", + "status_updating_launcher": "ฤang cแบญp nhแบญt Launcher", + "status_update_success": "Cแบญp nhแบญt thร nh cรดng, tแปฑ ฤ‘แป™ng ฤ‘รณng sau 5s", + "status_update_failed": "Cแบญp nhแบญt thแบฅt bแบกi, tแปฑ ฤ‘แป™ng ฤ‘รณng sau 5s", + "status_wait": "Vui lรฒng ฤ‘แปฃi...", + "status_complete": "Hoร n tแบฅt!", + "modal_update_title": "Cแบญp nhแบญt dแปฏ liแป‡u", + "modal_update_msg": "Bแบกn cรณ muแป‘n cแบญp nhแบญt Server vร  Proxy khรดng?", + "modal_download_title": "Tแบฃi dแปฏ liแป‡u", + "modal_download_msg": "Yรชu cแบงu tแบฃi xuแป‘ng dแปฏ liแป‡u Server vร  Proxy", + "modal_self_update_title": "Cแบญp nhแบญt Launcher", + "modal_self_update_msg": "Bแบกn cรณ muแป‘n cแบญp nhแบญt Launcher khรดng?", + "btn_yes": "Cรณ", + "btn_no": "Khรดng", + "btn_download": "Tแบฃi xuแป‘ng", + "error_game_dir": "Thฦฐ mแปฅc Game khรดng hแปฃp lแป‡", + "error_file_type": "ฤแป‹nh dแบกng tแป‡p khรดng ฤ‘รบng", + "game_path_success": "ฤรฃ lฦฐu ฤ‘ฦฐแปng dแบซn Game thร nh cรดng", + "no_updates": "Khรดng cรณ bแบฃn cแบญp nhแบญt nร o", + "toast_pick_folder_error": "Lแป—i chแปn thฦฐ mแปฅc: ", + "toast_start_proxy_failed": "KhแปŸi ฤ‘แป™ng proxy thแบฅt bแบกi: ", + "toast_start_server_failed": "KhแปŸi ฤ‘แป™ng server thแบฅt bแบกi: ", + "toast_start_game_failed": "KhแปŸi ฤ‘แป™ng game thแบฅt bแบกi: ", + "toast_start_game_error": "Lแป—i khแปŸi ฤ‘แป™ng game: " + }, + "diff": { + "header_title": "๐ŸŽฎ Cแบญp nhแบญt Game bแบฑng Diff Tool", + "header_desc": "Hแป— trแปฃ bแบกn cแบญp nhแบญt game bแบฑng Diff Tool", + "game_dir_title": "Thฦฐ mแปฅc Game", + "btn_selecting": "ฤang chแปn...", + "btn_select_game": "Chแปn Thฦฐ mแปฅc Game", + "game_dir_valid": "ฤรฃ tรฌm thแบฅy thฦฐ mแปฅc game hแปฃp lแป‡!", + "game_dir_invalid": "Khรดng tรฌm thแบฅy thฦฐ mแปฅc game. Vui lรฒng chแปn ฤ‘รบng thฦฐ mแปฅc.", + "diff_file_title": "Tแป‡p Diff", + "btn_select_diff": "Chแปn Tแป‡p Diff", + "diff_file_valid": "ฤรฃ tรฌm thแบฅy tแป‡p diff hแปฃp lแป‡!", + "diff_file_invalid": "Khรดng tรฌm thแบฅy tแป‡p diff. Vui lรฒng chแปn ฤ‘รบng tแป‡p.", + "btn_updating": "ฤang cแบญp nhแบญt...", + "btn_update_game": "Cแบญp nhแบญt Game", + "modal_update_title": "Cแบญp nhแบญt Game", + "status_wait": "Vui lรฒng ฤ‘แปฃi...", + "inst_title": "๐Ÿ“‹ Hฦฐแป›ng dแบซn:", + "inst_step_1": "1. Nhแบฅn \"Chแปn Thฦฐ mแปฅc Game\" vร  chแปn thฦฐ mแปฅc gแป‘c cแปงa game", + "inst_step_2": "2. ฤแปฃi hแป‡ thแป‘ng xรกc thแปฑc thฦฐ mแปฅc game", + "inst_step_3": "3. Nhแบฅn \"Chแปn Tแป‡p Diff\" vร  chแปn tแป‡p diff cแปงa bแบกn", + "inst_step_4": "4. ฤแปฃi hแป‡ thแป‘ng xรกc thแปฑc tแป‡p diff", + "inst_step_5": "5. Nhแบฅn \"Cแบญp nhแบญt Game\" ฤ‘แปƒ bแบฏt ฤ‘แบงu quรก trรฌnh", + "toast_game_dir_not_found": "Khรดng tรฌm thแบฅy thฦฐ mแปฅc game. Vui lรฒng chแปn ฤ‘รบng thฦฐ mแปฅc.", + "toast_no_folder_selected": "Chฦฐa chแปn ฤ‘ฦฐแปng dแบซn thฦฐ mแปฅc", + "toast_pick_folder_error": "Lแป—i chแปn thฦฐ mแปฅc: ", + "toast_invalid_file_type": "ฤแป‹nh dแบกng tแป‡p khรดng hแปฃp lแป‡", + "toast_no_file_selected": "Chฦฐa chแปn ฤ‘ฦฐแปng dแบซn tแป‡p", + "toast_pick_file_error": "Lแป—i chแปn tแป‡p: ", + "toast_select_both": "Vui lรฒng chแปn cแบฃ thฦฐ mแปฅc game vร  tแป‡p diff", + "toast_update_completed": "Cแบญp nhแบญt game hoร n tแบฅt", + "stage_check_type": "Kiแปƒm tra loแบกi Diff Tool", + "stage_version_validate": "Xรกc thแปฑc phiรชn bแบฃn", + "stage_data_extract": "Trรญch xuแบฅt dแปฏ liแป‡u", + "stage_cut_data": "Cแบฏt dแปฏ liแป‡u", + "stage_patch_data": "Vรก dแปฏ liแป‡u", + "stage_delete_old_files": "Xรณa tแป‡p cลฉ" + }, + "language": { + "header_title": "๐ŸŽฎ Quแบฃn lรฝ ngรดn ngแปฏ Game", + "header_desc": "Quแบฃn lรฝ cร i ฤ‘แบทt ngรดn ngแปฏ vฤƒn bแบฃn vร  giแปng nรณi cho game cแปงa bแบกn", + "game_dir_title": "Thฦฐ mแปฅc Game", + "btn_select_game": "Chแปn Thฦฐ mแปฅc Game", + "btn_selecting": "ฤang chแปn...", + "game_dir_valid": "ฤรฃ tรฌm thแบฅy thฦฐ mแปฅc game hแปฃp lแป‡!", + "game_dir_invalid": "Khรดng tรฌm thแบฅy thฦฐ mแปฅc game. Vui lรฒng chแปn ฤ‘รบng thฦฐ mแปฅc.", + "current_languages_title": "Ngรดn ngแปฏ hiแป‡n tแบกi", + "text_language": "Ngรดn ngแปฏ vฤƒn bแบฃn", + "voice_language": "Ngรดn ngแปฏ giแปng nรณi", + "language_settings_title": "Cร i ฤ‘แบทt ngรดn ngแปฏ", + "select_text_placeholder": "Chแปn ngรดn ngแปฏ vฤƒn bแบฃn...", + "select_voice_placeholder": "Chแปn ngรดn ngแปฏ giแปng nรณi...", + "btn_apply": "รp dแปฅng Cร i ฤ‘แบทt Ngรดn ngแปฏ", + "btn_applying": "ฤang รกp dแปฅng...", + "inst_title": "๐Ÿ“‹ Hฦฐแป›ng dแบซn:", + "inst_step_1": "1. Nhแบฅn \"Chแปn Thฦฐ mแปฅc Game\" vร  chแปn thฦฐ mแปฅc gแป‘c cแปงa game", + "inst_step_2": "2. ฤแปฃi hแป‡ thแป‘ng xรกc thแปฑc thฦฐ mแปฅc game", + "inst_step_3": "3. Chแปn ngรดn ngแปฏ vฤƒn bแบฃn vร  giแปng nรณi bแบกn muแป‘n", + "inst_step_4": "4. Nhแบฅn \"รp dแปฅng Cร i ฤ‘แบทt Ngรดn ngแปฏ\" ฤ‘แปƒ lฦฐu thay ฤ‘แป•i", + "toast_no_folder_selected": "Chฦฐa chแปn ฤ‘ฦฐแปng dแบซn thฦฐ mแปฅc", + "toast_pick_folder_error": "Lแป—i chแปn thฦฐ mแปฅc: ", + "toast_set_language_success": "Cร i ฤ‘แบทt ngรดn ngแปฏ thร nh cรดng", + "toast_set_language_error": "Lแป—i cร i ฤ‘แบทt ngรดn ngแปฏ: " + }, + "howto": { + "title": "Hฦฐแป›ng dแบซn sแปญ dแปฅng", + "sect1_title": "Sแปญ dแปฅng cรกc tรญnh nฤƒng cแปงa Launcher", + "sect1_auto_update_pre": "Tแปฑ ฤ‘แป™ng cแบญp nhแบญt", + "sect1_auto_update_post": "vร  cรกc cรดng cแปฅ proxy khi khแปŸi chแบกy.", + "sect1_launch_game": "KhแปŸi chแบกy game trแปฑc tiแบฟp thรดng qua launcher vแป›i cรกc thรดng sแป‘ vร  mรดi trฦฐแปng chแบกy chรญnh xรกc.", + "sect1_lang_pre": "Hแป— trแปฃ chuyแปƒn ฤ‘แป•i ngรดn ngแปฏ trong game (vรญ dแปฅ: EN, JP, ZH, KR) qua", + "sect1_lang_link": "Cรดng cแปฅ Ngรดn ngแปฏ", + "sect1_patch_title": "Vรก & Cแบญp nhแบญt Tแป‡p Game", + "sect1_patch_desc_1_pre": "Sแปญ dแปฅng", + "sect1_patch_desc_1_link": "Cรดng cแปฅ Diff", + "sect1_patch_desc_1_post": "(DiffPatch) ฤ‘แปƒ cแบญp nhแบญt gia tฤƒng nhanh chรณng & nhแบน nhร ng.", + "sect1_patch_desc_2_pre": "Hแป— trแปฃ", + "sect1_patch_desc_2_post": "vร  cรกc ฤ‘แป‹nh dแบกng diff tรนy chแป‰nh.", + "sect2_title": "Lแป‡nh Chat FireflyGo", + "sect2_desc_pre": "Dฦฐแป›i ฤ‘รขy lร  cรกc lแป‡nh chat trong game bแบกn cรณ thแปƒ sแปญ dแปฅng. Mแป™t sแป‘ lแป‡nh yรชu cแบงu bแบกn phแบฃi bแบญt", + "sect2_desc_bold": "Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_desc_post": ".", + "sect2_tc_req_title": "Yรชu cแบงu Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_tc_req_desc_pre": "Cรกc lแป‡nh sau chแป‰ khแบฃ dแปฅng khi", + "sect2_tc_req_desc_bold": "Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_tc_req_desc_post": "ฤ‘ฦฐแปฃc bแบญt:", + "sect2_extra_title": "Cร i ฤ‘แบทt Bแป• sung", + "sect2_hidden_ui_title": "แบจn UI", + "sect2_hidden_ui_desc": "แบจn ngay lแบญp tแปฉc toร n bแป™ giao diแป‡n game โ€” thฦฐแปng ฤ‘ฦฐแปฃc dรนng trong cรกc video showcase DIM.", + "sect2_censor_title": "Tแบฏt Kiแปƒm duyแป‡t", + "sect2_censor_desc": "Loแบกi bแป hiแป‡u แปฉng kiแปƒm duyแป‡t Lens Flare ๐Ÿ’€ ฤ‘แปƒ cรณ trแบฃi nghiแป‡m rรต rร ng hฦกn.", + "sect2_tc_title": "Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_tc_desc": "Khรดng cแบงn gรต lแป‡nh chat nแปฏa โ€” cแบฅu hรฌnh mแปi thแปฉ qua web: ฤ‘iแปu chแป‰nh HP quรกi, ฤ‘แบทt chu kแปณ, xem log, vร  hฦกn thแบฟ nแปฏa.", + "sect2_cmd_title": "Cรกc lแป‡nh khแบฃ dแปฅng:", + "sect2_cmd_tc": "Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_cmd_tc_enable": "โ€” Bแบญt Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_cmd_tc_disable": "โ€” Tแบฏt Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_cmd_cycle": "ฤiแปu khiแปƒn Chu kแปณ", + "sect2_cmd_tc_only": "(Chแป‰ Theorycraft)", + "sect2_cmd_cycle_desc": "โ€” ฤแบทt sแป‘ chu kแปณ trong trแบญn ฤ‘แบฅu", + "sect2_cmd_cycle_ex1_pre": "Vรญ dแปฅ:", + "sect2_cmd_cycle_ex1_post": "ฤ‘แบทt trแบญn ฤ‘แบฅu thร nh 30 chu kแปณ", + "sect2_cmd_cycle_ex2_post": "tแบฏt chu kแปณ tรนy chแป‰nh", + "sect2_cmd_hp": "Ghi ฤ‘รจ HP", + "sect2_cmd_hp_desc1": "โ€” ฤแบทt HP quรกi vแบญt (chแป‰ khแบฃ dแปฅng trong chแบฟ ฤ‘แป™ Theorycraft)", + "sect2_cmd_hp_desc2": "โ€” Tแบฏt tรญnh nฤƒng ฤ‘แบทt HP", + "sect2_cmd_hp_desc3": "โ€” ฤแบทt HP cho tแปซng quรกi vแบญt trong mแป™t ฤ‘แปฃt (wave) cแปฅ thแปƒ", + "sect2_cmd_hp_ex_pre": "Vรญ dแปฅ:", + "sect2_cmd_hp_ex_post": "ฤ‘แบทt ฤ‘แปฃt 1 quรกi 1 HP=2,000,000 vร  quรกi 2 HP=3,000,000", + "sect2_cmd_log": "Nhแบญt kรฝ Trแบญn ฤ‘แบฅu (Log)", + "sect2_cmd_log_desc1": "โ€” Bแบญt xuแบฅt nhแบญt kรฝ trแบญn ฤ‘แบฅu", + "sect2_cmd_log_desc2": "โ€” Tแบฏt nhแบญt kรฝ trแบญn ฤ‘แบฅu", + "sect2_cmd_log_out_pre": "ฤแบงu ra sแบฝ ฤ‘ฦฐแปฃc ghi dฦฐแป›i dแบกng", + "sect2_cmd_skip": "Bแป qua Node", + "sect2_cmd_skip_desc": "โ€” Bแป qua cรกc node trong MOC / AS / Pure Fiction", + "sect2_cmd_skip_ex1_pre": "Vรญ dแปฅ:", + "sect2_cmd_skip_ex1_post": "bแป qua node 2", + "sect2_cmd_skip_ex2_post": "tแบฏt tรญnh nฤƒng bแป qua", + "sect2_cmd_id": "Chuyแปƒn ฤ‘แป•i Vแบญn mแป‡nh Nhรขn vแบญt", + "sect2_cmd_id_desc": "โ€” Chuyแปƒn vแบญn mแป‡nh cho cรกc nhรขn vแบญt cรณ nhiแปu form", + "sect2_cmd_id_ex1_pre": "Vรญ dแปฅ:", + "sect2_cmd_id_ex1_post": "ฤ‘แปƒ ฤ‘แป•i form MC (Nhร  Khai Phรก)", + "sect2_cmd_id_ex2_pre": "Hoแบกt ฤ‘แป™ng vแป›i cรกc ID nhฦฐ", + "sect2_cmd_update": "Lร m mแป›i Dแปฏ liแป‡u", + "sect2_cmd_update_desc_pre": "โ€” Lร m mแป›i dแปฏ liแป‡u mรกy chแปง tแปซ tแป‡p", + "sect3_title": "Cรกc Lฦฐu รฝ Khรกc", + "sect3_admin_title": "Quyแปn Quแบฃn trแป‹ viรชn (Administrator)", + "sect3_admin_desc": "Luรดn chแบกy launcher dฦฐแป›i quyแปn Administrator ฤ‘แปƒ cรณ quyแปn truy cแบญp tแป‡p.", + "sect3_backup_title": "Sao lฦฐu Dแปฏ liแป‡u", + "sect3_backup_desc_pre": "Sao lฦฐu tแป‡p", + "sect3_backup_desc_mid": "vร ", + "sect3_backup_desc_post": "cแปงa bแบกn thฦฐแปng xuyรชn.", + "sect3_voice_title": "Bแบญt Gรณi Giแปng nรณi (Voice Packs) trong Client Beta", + "sect3_voice_step1_pre": "Sao chรฉp thฦฐ mแปฅc giแปng nรณi bแบกn muแป‘n (vรญ dแปฅ:", + "sect3_voice_step1_mid": "tแปซ:", + "sect3_voice_step1_post_pre": "vร o thฦฐ mแปฅc beta bแบฑng cรกch nhแบฅn", + "sect3_voice_step1_post_bold": "\"MแปŸ thฦฐ mแปฅc Voice\"", + "sect3_voice_step1_post_post": "trรชn tab Trang chแปง.", + "sect3_voice_step2": "Khi khแปŸi chแบกy game lแบงn ฤ‘แบงu, thฦฐ mแปฅc giแปng nรณi cรณ thแปƒ bแป‹ xรณa. Nแบฟu vแบญy, hรฃy lแบทp lแบกi bฦฐแป›c 1 ฤ‘แปƒ khรดi phแปฅc.", + "btn_back": "TrแปŸ vแป Trang chแปง" + }, + "about": { + "title": "Giแป›i thiแป‡u", + "p1_pre": "Xin chร o! Chรบng tรดi lร  ", + "p1_post": ", mแป™t nhรณm phรกt triแปƒn ฤ‘am mรช xรขy dแปฑng cรกc cรดng cแปฅ hแปฏu รญch vร  cแบฃi thiแป‡n trแบฃi nghiแป‡m ngฦฐแปi dรนng.", + "p2_pre": "Tรดi ฤ‘รฃ tแบกo ra mแป™t ", + "p2_highlight": "Game Launcher", + "p2_post": " hiแป‡n ฤ‘แบกi vร  gแปn nhแบน ฤ‘แปƒ giรบp ngฦฐแปi dรนng dแป… dร ng khแปŸi chแบกy vร  quแบฃn lรฝ game vแป›i hiแป‡u suแบฅt tแป‘t hฦกn vร  ฤ‘ฦกn giแบฃn hฦกn.", + "p3_pre": "Launcher ฤ‘ฦฐแปฃc xรขy dแปฑng bแบฑng ", + "p3_mid": ", vแป›i giao diแป‡n gแปn gร ng vร  tแป‘c ฤ‘แป™ phแบฃn hแป“i nhanh ฤ‘ฦฐแปฃc thiแบฟt kแบฟ bแบฑng ", + "p3_and": " vร  ", + "p3_post": ".", + "p4": "Mแปฅc tiรชu cแปงa tรดi lร  tแบกo ra cรกc cรดng cแปฅ nhanh, hiแป‡u quแบฃ vร  mang lแบกi trแบฃi nghiแป‡m sแปญ dแปฅng thรบ vแป‹ โ€” vร  launcher nร y chแป‰ lร  sแปฑ khแปŸi ฤ‘แบงu.", + "btn_back": "TrแปŸ vแป Trang chแปง" + }, + "fireflytools": { + "title": "Cรดng cแปฅ Firefly", + "sect1_title": "Vแป Cรดng cแปฅ Firefly", + "sect1_p1_pre": "Trang web nร y lร  mแป™t phiรชn bแบฃn khรกc cแปงa ", + "sect1_p1_tool": "Firefly Tools ", + "sect1_p1_mid": "ฤ‘ฦฐแปฃc phรกt triแปƒn bแปŸi ", + "sect1_p1_author": "Firefly Shelter", + "sect1_master_site": "Trang web Gแป‘c", + "sect1_p2_pre": "Cรดng cแปฅ ban ฤ‘แบงu ฤ‘ฦฐแปฃc tแบกo ra bแปŸi mแป™t nhร  phรกt triแปƒn bรชn thแปฉ ba tรชn lร  ", + "sect1_p2_author": "Amazing", + "sect1_p2_post": ". Phiรชn bแบฃn nร y dแปฑa trแปฑc tiแบฟp trรชn cรดng viแป‡c ฤ‘รณ, khรดng sแปญa ฤ‘แป•i logic cแป‘t lรตi.", + "sect1_p3_pre": "Ngoร i ra cรฒn cรณ mแป™t phiรชn bแบฃn hiแป‡n ฤ‘แบกi hฦกn cแปงa cรนng tรกc giแบฃ tแบกi ", + "sect2_title": "Tรญnh nฤƒng Chรญnh", + "sect2_feat1": "Cแบฅu hรฌnh nhรขn vแบญt, nรณn รกnh sรกng, di vแบญt, vแบฟt tรญch vร  tinh hแป“n dแป… dร ng trรชn trรฌnh duyแป‡t cแปงa bแบกn.", + "sect2_feat2_pre": "รp dแปฅng ngay cรกc thiแบฟt lแบญp vร o ", + "sect2_feat2_server": "Mรกy chแปง Firefly GO", + "sect2_feat2_mid": " bแบฑng cรกch sแปญ dแปฅng ", + "sect2_feat2_conn": "Connect PS", + "sect2_feat2_post": " โ€” khรดng cแบงn tแบฃi tแป‡p lรชn thแปง cรดng.", + "sect2_feat3_title": "Cร i ฤ‘แบทt Bแป• sung", + "sect2_feat3_desc_pre": "Nรขng cao trแบฃi nghiแป‡m ", + "sect2_feat3_desc_server": "Mรกy chแปง Firefly GO", + "sect2_feat3_desc_post": " cแปงa bแบกn vแป›i cรกc tรญnh nฤƒng bแป• sung:", + "sect2_feat3_ui": "แบจn UI Game", + "sect2_feat3_ui_desc": "โ€” xรณa toร n bแป™ giao diแป‡n trรฒ chฦกi.", + "sect2_feat3_censor": "Tแบฏt Kiแปƒm duyแป‡t", + "sect2_feat3_censor_desc": "โ€” loแบกi bแป hiแป‡u แปฉng kiแปƒm duyแป‡t Lens Flare ๐Ÿ’€.", + "sect2_feat3_tc": "Chแบฟ ฤ‘แป™ Theorycraft", + "sect2_feat3_tc_desc": "โ€” cแบฅu hรฌnh HP, chu kแปณ vร  nhiแปu tรญnh nฤƒng khรกc qua web.", + "sect2_feat4_pre": "Xuแบฅt vร  nhแบญp toร n bแป™ bแบฃn build bแบฑng ", + "sect2_feat4_post": ".", + "sect2_feat5": "Quy trรฌnh thแปญ nghiแป‡m nhanh chรณng โ€” khรดng cรณ thแปi gian chแป ฤ‘แป“ng bแป™, cแบญp nhแบญt ngay lแบญp tแปฉc trong game.", + "sect3_title": "Bแบฏt ฤ‘แบงu Sแปญ dแปฅng", + "sect3_step1": "Truy cแบญp cรดng cแปฅ thรดng qua trรฌnh duyแป‡t cแปงa bแบกn tแบกi phiรชn bแบฃn tแปฑ lฦฐu trแปฏ (self-hosted).", + "sect3_step2": "Cแบฅu hรฌnh bแบฃn build nhรขn vแบญt cแปงa bแบกn vแป›i giao diแป‡n web trแปฑc quan.", + "sect3_step3_pre": "Sแปญ dแปฅng tรญnh nฤƒng ", + "sect3_step3_bold": "Connect PS", + "sect3_step3_post": " ฤ‘แปƒ ฤ‘แป“ng bแป™ tแปฉc thรฌ vแป›i mรกy chแปง riรชng cแปงa bแบกn.", + "sect3_step4": "Thแปญ nghiแป‡m bแบฃn build trong game vแป›i cรกc bแบฃn cแบญp nhแบญt vร  sแปญa ฤ‘แป•i theo thแปi gian thแปฑc.", + "btn_back": "TrแปŸ vแป Trang chแปง" + }, + "analysis": { + "title": "Phรขn tรญch Firefly & Plugin Veritas", + "sect1_title": "Vแป Veritas", + "sect1_p1_pre": "", + "sect1_p1_mid": " lร  mแป™t ", + "sect1_p1_highlight": "Damage Logger", + "sect1_p1_post": " mแบกnh mแบฝ ฤ‘ฦฐแปฃc thiแบฟt kแบฟ ฤ‘แปƒ phรขn tรญch sรกt thฦฐฦกng theo thแปi gian thแปฑc trong quรก trรฌnh chฦกi game.", + "sect1_p2": "Nรณ gแปn nhแบน, nhanh chรณng vร  dแป… sแปญ dแปฅng ฤ‘แปƒ phรขn tรญch sรกt thฦฐฦกng toร n diแป‡n.", + "sect1_github": "Kho lฦฐu trแปฏ GitHub", + "sect2_title": "Cรดng cแปฅ Phรขn tรญch Web", + "sect2_desc": "Sแปญ dแปฅng cรกc แปฉng dแปฅng web nร y ฤ‘แปƒ phรขn tรญch sรกt thฦฐฦกng thแปi gian thแปฑc vแป›i Veritas:", + "sect2_master": "Trang web Gแป‘c", + "sect2_backup": "Trang web Dแปฑ phรฒng", + "sect2_tip_pre": "Mแบนo:", + "sect2_tip_post": " Nแบฟu quแป‘c gia cแปงa bแบกn gแบทp sแปฑ cแป‘ khi tแบฃi trang web gแป‘c, vui lรฒng sแปญ dแปฅng trang web dแปฑ phรฒng.", + "sect3_title": "Hฦฐแป›ng dแบซn Cร i ฤ‘แบทt", + "sect3_subtitle": "Bฦฐแป›c Thiแบฟt lแบญp Quan trแปng", + "sect3_desc": "Sau khi tแบฃi xuแป‘ng Veritas, bแบกn phแบฃi ฤ‘แป•i tรชn tแป‡p ฤ‘แปƒ nรณ hoแบกt ฤ‘แป™ng bรฌnh thฦฐแปng:", + "sect3_rename": "ฤแป•i tรชn: ", + "sect3_place": "Sau ฤ‘รณ ฤ‘แบทt ", + "sect3_place_post": " vร o thฦฐ mแปฅc game cแปงa bแบกn.", + "sect4_title": "Cรกch sแปญ dแปฅng Web App", + "sect4_sub1": "Dร nh cho Firefly GO Local", + "sect4_sub1_step1_pre": "KhแปŸi chแบกy ", + "sect4_sub1_step1_game": "game", + "sect4_sub1_step1_mid": " vร  ", + "sect4_sub1_step1_server": "Mรกy chแปง Firefly GO (PS)", + "sect4_sub1_step1_post": " cแปงa bแบกn.", + "sect4_sub1_step2": "MแปŸ mแป™t trong cรกc cรดng cแปฅ phรขn tรญch web.", + "sect4_sub1_step3_pre": "ฤi tแป›i ", + "sect4_sub1_step3_conn": "Cร i ฤ‘แบทt Kแบฟt nแป‘i", + "sect4_sub1_step3_mid1": " โ†’ chแปn ", + "sect4_sub1_step3_type": "Loแบกi Kแบฟt nแป‘i: PS", + "sect4_sub1_step3_mid2": " โ†’ nhแบฅn ", + "sect4_sub1_step3_btn": "Kแบฟt nแป‘i", + "sect4_sub1_step3_post": ".", + "sect4_sub1_step4": "Sau khi kแบฟt nแป‘i, hรฃy chฦกi game. Cรดng cแปฅ sแบฝ tแปฑ ฤ‘แป™ng phรขn tรญch แปŸ chแบฟ ฤ‘แป™ nแปn.", + "sect4_sub2": "Dร nh cho cรกc Mรกy chแปง riรชng Khรกc", + "sect4_sub2_step1_pre": "KhแปŸi chแบกy ", + "sect4_sub2_step1_game": "game", + "sect4_sub2_step1_mid": " vร  ", + "sect4_sub2_step1_server": "Mรกy chแปง riรชng", + "sect4_sub2_step1_post": " cแปงa bแบกn.", + "sect4_sub2_step2": "MแปŸ mแป™t trong cรกc cรดng cแปฅ phรขn tรญch web.", + "sect4_sub2_step3_pre": "ฤi tแป›i ", + "sect4_sub2_step3_conn": "Cร i ฤ‘แบทt Kแบฟt nแป‘i", + "sect4_sub2_step3_mid1": " โ†’ chแปn ", + "sect4_sub2_step3_type": "Loแบกi Kแบฟt nแป‘i: Native", + "sect4_sub2_step3_mid2": " โ†’ nhแบฅn ", + "sect4_sub2_step3_btn": "Kแบฟt nแป‘i", + "sect4_sub2_step3_post": ".", + "sect4_sub2_step4": "Sau khi kแบฟt nแป‘i, hรฃy chฦกi game bรฌnh thฦฐแปng.", + "btn_back": "TrแปŸ vแป Trang chแปง" + } +} \ No newline at end of file diff --git a/frontend/public/locales/zh.json b/frontend/public/locales/zh.json new file mode 100644 index 0000000..2ae7ca3 --- /dev/null +++ b/frontend/public/locales/zh.json @@ -0,0 +1,337 @@ +{ + "header": { + "home": "้ฆ–้กต", + "tools": "ๅทฅๅ…ท", + "language": "่ฏญ่จ€", + "diff": "ๅทฎๅผ‚", + "client_update": "ๅฎขๆˆท็ซฏๆ›ดๆ–ฐ", + "plugins": "ๆ’ไปถ", + "analysis": "ๅˆ†ๆž๏ผˆVeritas๏ผ‰", + "firefly_tools": "Fireflyๅทฅๅ…ท", + "how_to": "ไฝฟ็”จๆ–นๆณ•", + "about": "ๅ…ณไบŽ", + "settings": "่ฎพ็ฝฎ", + "minimize": "ๆœ€ๅฐๅŒ–", + "close": "ๅ…ณ้—ญ", + "by": "Firefly Shelter" + }, + "background": { + "select_bg": "้€‰ๆ‹ฉ่ƒŒๆ™ฏ", + "choose_bg": "้€‰ๆ‹ฉ่ƒŒๆ™ฏ", + "paste_url": "็ฒ˜่ดดๅ›พ็‰‡้“พๆŽฅ (https://...)", + "add": "ๆทปๅŠ ", + "upload": "ไธŠไผ ", + "upload_from_computer": "ไปŽ็”ต่„‘ไธŠไผ ", + "done": "ๅฎŒๆˆ", + "remove": "ๅˆ ้™ค", + "invalid_url": "ๆ— ๆ•ˆ็š„URL" + }, + "close": { + "title": "็กฎ่ฎคๆ“ไฝœ", + "description": "ๆ‚จๆ˜ฏ่ฆๆœ€ๅฐๅŒ–ๅˆฐ็ณป็ปŸๆ‰˜็›˜่ฟ˜ๆ˜ฏๅ…ณ้—ญๅบ”็”จ็จ‹ๅบ๏ผŸ", + "dont_ask": "ไธๅ†ๆ็คบ", + "minimize": "ๆœ€ๅฐๅŒ–", + "close": "ๅ…ณ้—ญ" + }, + "setting": { + "title": "่ฎพ็ฝฎ", + "launcher_update_title": "ๅฏๅŠจๅ™จๆ›ดๆ–ฐ", + "launcher_update_desc": "ๆฃ€ๆŸฅๆ‚จ็š„ๅฏๅŠจๅ™จๆ˜ฏๅฆไธบๆœ€ๆ–ฐ็‰ˆๆœฌใ€‚", + "launcher_update_btn": "ๆฃ€ๆŸฅๆ›ดๆ–ฐ", + "launcher_update_success": "ๅฏๅŠจๅ™จๅทฒๆ˜ฏๆœ€ๆ–ฐ็‰ˆๆœฌ", + "closing_options_title": "ๅ…ณ้—ญ้€‰้กน", + "set_dont_ask_again": "ไธๅ†ๆ็คบ", + "closing_auto_desc": "ไธ‹ๆฌกๅ…ณ้—ญๆ—ถ๏ผŒๅฐ†่‡ชๅŠจ{{action}}่€Œไธ่ฟ›่กŒ่ฏข้—ฎใ€‚", + "action_minimize": "ๆœ€ๅฐๅŒ–ๅˆฐ็ณป็ปŸๆ‰˜็›˜", + "action_quit": "้€€ๅ‡บๅบ”็”จ็จ‹ๅบ", + "version_label": "็‰ˆๆœฌ", + "server_label": "Server", + "proxy_label": "Proxy", + "launcher_label": "Launcher" + }, + "home": { + "header_title": "Firefly GO", + "tooltip_how_to": "ๅฆ‚ไฝ•ไฝฟ็”จๅทฅๅ…ทไธŽๅ‘ฝไปค", + "btn_select_game": "้€‰ๆ‹ฉๆธธๆˆๆ–‡ไปถ", + "btn_selecting": "ๆญฃๅœจ้€‰ๆ‹ฉ...", + "btn_start_game": "ๅผ€ๅง‹ๆธธๆˆ", + "btn_game_running": "ๆธธๆˆๆญฃๅœจ่ฟ่กŒ", + "menu_change_path": "ๆ›ดๆ”นๆธธๆˆ่ทฏๅพ„", + "menu_check_update": "ๆฃ€ๆŸฅๆœๅŠกๅ™จไธŽไปฃ็†ๆ›ดๆ–ฐ", + "menu_open_server": "ๆ‰“ๅผ€ๆœๅŠกๅ™จๆ–‡ไปถๅคน", + "menu_open_proxy": "ๆ‰“ๅผ€ไปฃ็†ๆ–‡ไปถๅคน", + "menu_open_voice": "ๆ‰“ๅผ€่ฏญ้Ÿณๆ–‡ไปถๅคน", + "status_updating_launcher": "ๆญฃๅœจๆ›ดๆ–ฐๅฏๅŠจๅ™จ", + "status_update_success": "ๆ›ดๆ–ฐๆˆๅŠŸ๏ผŒ5็ง’ๅŽ่‡ชๅŠจๅ…ณ้—ญ", + "status_update_failed": "ๆ›ดๆ–ฐๅคฑ่ดฅ๏ผŒ5็ง’ๅŽ่‡ชๅŠจๅ…ณ้—ญ", + "status_wait": "่ฏท็จๅ€™...", + "status_complete": "ๅฎŒๆˆ๏ผ", + "modal_update_title": "ๆ›ดๆ–ฐๆ•ฐๆฎ", + "modal_update_msg": "ๆ˜ฏๅฆ่ฆๆ›ดๆ–ฐๆœๅŠกๅ™จๅ’Œไปฃ็†ๆ•ฐๆฎ๏ผŸ", + "modal_download_title": "ไธ‹่ฝฝๆ•ฐๆฎ", + "modal_download_msg": "้œ€่ฆไธ‹่ฝฝๆœๅŠกๅ™จๅ’Œไปฃ็†ๆ•ฐๆฎ", + "modal_self_update_title": "ๆ›ดๆ–ฐๅฏๅŠจๅ™จ", + "modal_self_update_msg": "ๆ˜ฏๅฆ่ฆๆ›ดๆ–ฐๅฏๅŠจๅ™จ๏ผŸ", + "btn_yes": "ๆ˜ฏ", + "btn_no": "ๅฆ", + "btn_download": "ไธ‹่ฝฝ", + "error_game_dir": "ๆ— ๆ•ˆ็š„ๆธธๆˆ็›ฎๅฝ•", + "error_file_type": "ๆ–‡ไปถ็ฑปๅž‹้”™่ฏฏ", + "game_path_success": "ๆธธๆˆ่ทฏๅพ„่ฎพ็ฝฎๆˆๅŠŸ", + "no_updates": "ๆš‚ๆ— ๆ›ดๆ–ฐ", + "toast_pick_folder_error": "้€‰ๆ‹ฉๆ–‡ไปถๅคน้”™่ฏฏ: ", + "toast_start_proxy_failed": "ๅฏๅŠจไปฃ็†ๅคฑ่ดฅ: ", + "toast_start_server_failed": "ๅฏๅŠจๆœๅŠกๅ™จๅคฑ่ดฅ: ", + "toast_start_game_failed": "ๅฏๅŠจๆธธๆˆๅคฑ่ดฅ: ", + "toast_start_game_error": "ๅฏๅŠจๆธธๆˆ้”™่ฏฏ: " + }, + "diff": { + "header_title": "๐ŸŽฎ ไฝฟ็”จ Diff Tool ๆ›ดๆ–ฐๆธธๆˆ", + "header_desc": "ๅธฎๅŠฉๆ‚จไฝฟ็”จ Diff Tool ่ฝปๆพๆ›ดๆ–ฐๆธธๆˆ", + "game_dir_title": "ๆธธๆˆ็›ฎๅฝ•", + "btn_selecting": "ๆญฃๅœจ้€‰ๆ‹ฉ...", + "btn_select_game": "้€‰ๆ‹ฉๆธธๆˆๆ–‡ไปถๅคน", + "game_dir_valid": "ๆ‰พๅˆฐๆœ‰ๆ•ˆ็š„ๆธธๆˆ็›ฎๅฝ•๏ผ", + "game_dir_invalid": "ๆœชๆ‰พๅˆฐๆธธๆˆ็›ฎๅฝ•๏ผŒ่ฏท้€‰ๆ‹ฉๆญฃ็กฎ็š„ๆ–‡ไปถๅคนใ€‚", + "diff_file_title": "Diff ๆ–‡ไปถ็›ฎๅฝ•", + "btn_select_diff": "้€‰ๆ‹ฉ Diff ๆ–‡ไปถ", + "diff_file_valid": "ๆ‰พๅˆฐๆœ‰ๆ•ˆ็š„ Diff ๆ–‡ไปถ๏ผ", + "diff_file_invalid": "ๆœชๆ‰พๅˆฐ Diff ๆ–‡ไปถ๏ผŒ่ฏท้€‰ๆ‹ฉๆญฃ็กฎ็š„ๆ–‡ไปถใ€‚", + "btn_updating": "ๆญฃๅœจๆ›ดๆ–ฐ...", + "btn_update_game": "ๆ›ดๆ–ฐๆธธๆˆ", + "modal_update_title": "ๆ›ดๆ–ฐๆธธๆˆ", + "status_wait": "่ฏท็จๅ€™...", + "inst_title": "๐Ÿ“‹ ไฝฟ็”จ่ฏดๆ˜Ž๏ผš", + "inst_step_1": "1. ็‚นๅ‡ปโ€œ้€‰ๆ‹ฉๆธธๆˆๆ–‡ไปถๅคนโ€ๅนถ้€‰ๆ‹ฉๆ‚จ็š„ๆธธๆˆๆ น็›ฎๅฝ•", + "inst_step_2": "2. ็ญ‰ๅพ…็ณป็ปŸ้ชŒ่ฏๆธธๆˆ็›ฎๅฝ•", + "inst_step_3": "3. ็‚นๅ‡ปโ€œ้€‰ๆ‹ฉ Diff ๆ–‡ไปถโ€ๅนถ้€‰ๆ‹ฉๆ‚จ็š„ๅทฎๅผ‚ๆ–‡ไปถ", + "inst_step_4": "4. ็ญ‰ๅพ…็ณป็ปŸ้ชŒ่ฏ Diff ๆ–‡ไปถ", + "inst_step_5": "5. ็‚นๅ‡ปโ€œๆ›ดๆ–ฐๆธธๆˆโ€ไปฅไฟๅญ˜ๆ›ดๆ”น", + "toast_game_dir_not_found": "ๆœชๆ‰พๅˆฐๆธธๆˆ็›ฎๅฝ•๏ผŒ่ฏท้€‰ๆ‹ฉๆญฃ็กฎ็š„ๆ–‡ไปถๅคนใ€‚", + "toast_no_folder_selected": "ๆœช้€‰ๆ‹ฉๆ–‡ไปถๅคน่ทฏๅพ„", + "toast_pick_folder_error": "้€‰ๆ‹ฉๆ–‡ไปถๅคน้”™่ฏฏ๏ผš", + "toast_invalid_file_type": "ๆ— ๆ•ˆ็š„ๆ–‡ไปถ็ฑปๅž‹", + "toast_no_file_selected": "ๆœช้€‰ๆ‹ฉๆ–‡ไปถ่ทฏๅพ„", + "toast_pick_file_error": "้€‰ๆ‹ฉๆ–‡ไปถ้”™่ฏฏ๏ผš", + "toast_select_both": "่ฏทๅŒๆ—ถ้€‰ๆ‹ฉๆธธๆˆ็›ฎๅฝ•ๅ’Œ Diff ๆ–‡ไปถ", + "toast_update_completed": "ๆธธๆˆๆ›ดๆ–ฐๅฎŒๆˆ", + "stage_check_type": "ๆฃ€ๆŸฅ Diff Tool ็ฑปๅž‹", + "stage_version_validate": "้ชŒ่ฏ็‰ˆๆœฌ", + "stage_data_extract": "ๆๅ–ๆ•ฐๆฎ", + "stage_cut_data": "่ฃๅ‰ชๆ•ฐๆฎ", + "stage_patch_data": "ไฟฎ่กฅๆ•ฐๆฎ", + "stage_delete_old_files": "ๅˆ ้™คๆ—งๆ–‡ไปถ" + }, + "language": { + "header_title": "๐ŸŽฎ ๆธธๆˆ่ฏญ่จ€็ฎก็†ๅ™จ", + "header_desc": "็ฎก็†ๆธธๆˆ็š„ๆ–‡ๆœฌๅ’Œ่ฏญ้Ÿณ่ฏญ่จ€่ฎพ็ฝฎ", + "game_dir_title": "ๆธธๆˆ็›ฎๅฝ•", + "btn_select_game": "้€‰ๆ‹ฉๆธธๆˆๆ–‡ไปถๅคน", + "btn_selecting": "ๆญฃๅœจ้€‰ๆ‹ฉ...", + "game_dir_valid": "ๆ‰พๅˆฐๆœ‰ๆ•ˆ็š„ๆธธๆˆ็›ฎๅฝ•๏ผ", + "game_dir_invalid": "ๆœชๆ‰พๅˆฐๆธธๆˆ็›ฎๅฝ•๏ผŒ่ฏท้€‰ๆ‹ฉๆญฃ็กฎ็š„ๆ–‡ไปถๅคนใ€‚", + "current_languages_title": "ๅฝ“ๅ‰่ฏญ่จ€", + "text_language": "ๆ–‡ๆœฌ่ฏญ่จ€", + "voice_language": "่ฏญ้Ÿณ่ฏญ่จ€", + "language_settings_title": "่ฏญ่จ€่ฎพ็ฝฎ", + "select_text_placeholder": "้€‰ๆ‹ฉๆ–‡ๆœฌ่ฏญ่จ€...", + "select_voice_placeholder": "้€‰ๆ‹ฉ่ฏญ้Ÿณ่ฏญ่จ€...", + "btn_apply": "ๅบ”็”จ่ฏญ่จ€่ฎพ็ฝฎ", + "btn_applying": "ๆญฃๅœจๅบ”็”จ...", + "inst_title": "๐Ÿ“‹ ไฝฟ็”จ่ฏดๆ˜Ž๏ผš", + "inst_step_1": "1. ็‚นๅ‡ปโ€œ้€‰ๆ‹ฉๆธธๆˆๆ–‡ไปถๅคนโ€ๅนถ้€‰ๆ‹ฉๆ‚จ็š„ๆธธๆˆๆ น็›ฎๅฝ•", + "inst_step_2": "2. ็ญ‰ๅพ…็ณป็ปŸ้ชŒ่ฏๆธธๆˆ็›ฎๅฝ•", + "inst_step_3": "3. ้€‰ๆ‹ฉๆ‚จๅๅฅฝ็š„ๆ–‡ๆœฌๅ’Œ่ฏญ้Ÿณ่ฏญ่จ€", + "inst_step_4": "4. ็‚นๅ‡ปโ€œๅบ”็”จ่ฏญ่จ€่ฎพ็ฝฎโ€ไปฅไฟๅญ˜ๆ›ดๆ”น", + "toast_no_folder_selected": "ๆœช้€‰ๆ‹ฉๆ–‡ไปถๅคน่ทฏๅพ„", + "toast_pick_folder_error": "้€‰ๆ‹ฉๆ–‡ไปถๅคน้”™่ฏฏ๏ผš", + "toast_set_language_success": "่ฏญ่จ€่ฎพ็ฝฎๆˆๅŠŸ", + "toast_set_language_error": "่ฎพ็ฝฎ่ฏญ่จ€้”™่ฏฏ๏ผš" + }, + "howto": { + "title": "ไฝฟ็”จ่ฏดๆ˜Ž", + "sect1_title": "ไฝฟ็”จๅฏๅŠจๅ™จๅŠŸ่ƒฝ", + "sect1_auto_update_pre": "ๅฏๅŠจๆ—ถ่‡ชๅŠจๆ›ดๆ–ฐ", + "sect1_auto_update_post": "ๅŠไปฃ็†ๅทฅๅ…ทใ€‚", + "sect1_launch_game": "ไฝฟ็”จๆญฃ็กฎ็š„ๅ‚ๆ•ฐๅ’Œ่ฟ่กŒ็Žฏๅขƒ๏ผŒ็›ดๆŽฅ้€š่ฟ‡ๅฏๅŠจๅ™จๅฏๅŠจๆธธๆˆใ€‚", + "sect1_lang_pre": "ๆ”ฏๆŒๅˆ‡ๆขๆธธๆˆๅ†…่ฏญ่จ€๏ผˆไพ‹ๅฆ‚๏ผšEN, JP, ZH, KR๏ผ‰๏ผŒ้€š่ฟ‡", + "sect1_lang_link": "่ฏญ่จ€ๅทฅๅ…ท", + "sect1_patch_title": "ไฟฎ่กฅไธŽๆ›ดๆ–ฐๆธธๆˆๆ–‡ไปถ", + "sect1_patch_desc_1_pre": "ไฝฟ็”จ", + "sect1_patch_desc_1_link": "Diff Tool", + "sect1_patch_desc_1_post": "๏ผˆDiffPatch๏ผ‰่ฟ›่กŒๅฟซ้€Ÿ่ฝป้‡็š„ๅขž้‡ๆ›ดๆ–ฐใ€‚", + "sect1_patch_desc_2_pre": "ๆ”ฏๆŒ", + "sect1_patch_desc_2_post": "ไปฅๅŠ่‡ชๅฎšไน‰ diff ๆ ผๅผใ€‚", + "sect2_title": "FireflyGo ่ŠๅคฉๆŒ‡ไปค", + "sect2_desc_pre": "ไปฅไธ‹ๆ˜ฏๆ‚จๅฏไปฅๅœจๆธธๆˆไธญไฝฟ็”จ็š„่ŠๅคฉๆŒ‡ไปคใ€‚้ƒจๅˆ†ๆŒ‡ไปค้œ€่ฆๆ‚จๅผ€ๅฏ", + "sect2_desc_bold": "Theorycraft ๆจกๅผ", + "sect2_desc_post": "ใ€‚", + "sect2_tc_req_title": "้œ€่ฆๅผ€ๅฏ Theorycraft ๆจกๅผ", + "sect2_tc_req_desc_pre": "ไปฅไธ‹ๆŒ‡ไปคไป…ๅœจ", + "sect2_tc_req_desc_bold": "Theorycraft ๆจกๅผ", + "sect2_tc_req_desc_post": "ๅผ€ๅฏๆ—ถๅฏ็”จ๏ผš", + "sect2_extra_title": "้ขๅค–่ฎพ็ฝฎ", + "sect2_hidden_ui_title": "้š่— UI", + "sect2_hidden_ui_desc": "็ซ‹ๅณ้š่—ๆ•ดไธชๆธธๆˆUI โ€” ๅธธ็”จไบŽ DIM ๆผ”็คบ่ง†้ข‘ไธญใ€‚", + "sect2_censor_title": "็ฆ็”จๅ’Œ่ฐ", + "sect2_censor_desc": "็งป้™ค้•œๅคดๅ…‰ๆ™•ๅ’Œ่ฐๆ•ˆๆžœ ๐Ÿ’€๏ผŒ่Žทๅพ—ๆ›ด็บฏๅ‡€็š„ไฝ“้ชŒใ€‚", + "sect2_tc_title": "Theorycraft ๆจกๅผ", + "sect2_tc_desc": "ๅ†ไนŸไธ้œ€่ฆ่พ“ๅ…ฅ่ŠๅคฉๆŒ‡ไปคไบ† โ€” ้€š่ฟ‡็ฝ‘้กต้…็ฝฎไธ€ๅˆ‡๏ผš่ฐƒๆ•ดๆ€ช็‰ฉHPใ€่ฎพ็ฝฎ่ฝฎๆ•ฐใ€ๆŸฅ็œ‹ๆ—ฅๅฟ—็ญ‰ใ€‚", + "sect2_cmd_title": "ๅฏ็”จๆŒ‡ไปค๏ผš", + "sect2_cmd_tc": "Theorycraft ๆจกๅผ", + "sect2_cmd_tc_enable": "โ€” ๅฏ็”จ Theorycraft ๆจกๅผ", + "sect2_cmd_tc_disable": "โ€” ็ฆ็”จ Theorycraft ๆจกๅผ", + "sect2_cmd_cycle": "่ฝฎๆ•ฐๆŽงๅˆถ", + "sect2_cmd_tc_only": "๏ผˆไป… Theorycraft ๆจกๅผ๏ผ‰", + "sect2_cmd_cycle_desc": "โ€” ่ฎพ็ฝฎๆˆ˜ๆ–—ไธญ็š„่ฝฎๆ•ฐ", + "sect2_cmd_cycle_ex1_pre": "็คบไพ‹๏ผš", + "sect2_cmd_cycle_ex1_post": "ๅฐ†ๆˆ˜ๆ–—่ฎพ็ฝฎไธบ30่ฝฎ", + "sect2_cmd_cycle_ex2_post": "็ฆ็”จ่‡ชๅฎšไน‰่ฝฎๆ•ฐ", + "sect2_cmd_hp": "HP ่ฆ†ๅ†™", + "sect2_cmd_hp_desc1": "โ€” ่ฎพ็ฝฎๆ€ช็‰ฉ HP๏ผˆไป…ๅœจ Theorycraft ๆจกๅผไธ‹ๅฏ็”จ๏ผ‰", + "sect2_cmd_hp_desc2": "โ€” ็ฆ็”จ HP ่ฎพ็ฝฎๅŠŸ่ƒฝ", + "sect2_cmd_hp_desc3": "โ€” ไธบ็‰นๅฎšๆณขๆฌกไธญ็š„ๆฏไธชๆ€ช็‰ฉ่ฎพ็ฝฎ HP", + "sect2_cmd_hp_ex_pre": "็คบไพ‹๏ผš", + "sect2_cmd_hp_ex_post": "่ฎพ็ฝฎ็ฌฌ 1 ๆณขๆฌกๆ€ช็‰ฉ 1 ็š„ HP=2,000,000๏ผŒๆ€ช็‰ฉ 2 ็š„ HP=3,000,000", + "sect2_cmd_log": "ๆˆ˜ๆ–—ๆ—ฅๅฟ—", + "sect2_cmd_log_desc1": "โ€” ๅฏ็”จๆˆ˜ๆ–—ๆ—ฅๅฟ—่พ“ๅ‡บ", + "sect2_cmd_log_desc2": "โ€” ็ฆ็”จๆˆ˜ๆ–—ๆ—ฅๅฟ—", + "sect2_cmd_log_out_pre": "่พ“ๅ‡บๅฐ†่ขซๅ†™ๅ…ฅไธบ", + "sect2_cmd_skip": "่ทณ่ฟ‡่Š‚็‚น", + "sect2_cmd_skip_desc": "โ€” ่ทณ่ฟ‡ ๆททๆฒŒๅ›žๅฟ† / ่™šๆž„ๅ™ไบ‹ ไธญ็š„่Š‚็‚น", + "sect2_cmd_skip_ex1_pre": "็คบไพ‹๏ผš", + "sect2_cmd_skip_ex1_post": "่ทณ่ฟ‡่Š‚็‚น 2", + "sect2_cmd_skip_ex2_post": "็ฆ็”จ่ทณ่ฟ‡", + "sect2_cmd_id": "่ง’่‰ฒๅ‘ฝ้€”ๅˆ‡ๆข", + "sect2_cmd_id_desc": "โ€” ไธบๅคšๅฝขๆ€่ง’่‰ฒๅˆ‡ๆขๅ‘ฝ้€”", + "sect2_cmd_id_ex1_pre": "็คบไพ‹๏ผš", + "sect2_cmd_id_ex1_post": "ๆ›ดๆ”นๅผ€ๆ‹“่€…็š„ๅฝขๆ€", + "sect2_cmd_id_ex2_pre": "ๆ”ฏๆŒ็š„ ID ๅฆ‚", + "sect2_cmd_update": "ๅˆทๆ–ฐๆ•ฐๆฎ", + "sect2_cmd_update_desc_pre": "โ€” ไปŽๅฝ“ๅ‰ๆ–‡ไปถๅˆทๆ–ฐๆœๅŠกๅ™จๆ•ฐๆฎ๏ผš", + "sect3_title": "ๅ…ถไป–ๆณจๆ„ไบ‹้กน", + "sect3_admin_title": "็ฎก็†ๅ‘˜ๆƒ้™", + "sect3_admin_desc": "่ฏทๅง‹็ปˆไปฅ็ฎก็†ๅ‘˜่บซไปฝ่ฟ่กŒๅฏๅŠจๅ™จ๏ผŒไปฅ่Žทๅ–ๆ–‡ไปถๆƒ้™ใ€‚", + "sect3_backup_title": "ๅค‡ไปฝๆ•ฐๆฎ", + "sect3_backup_desc_pre": "่ฏทๅฎšๆœŸๅค‡ไปฝๆ‚จ็š„", + "sect3_backup_desc_mid": "ๅ’Œ", + "sect3_backup_desc_post": "ใ€‚", + "sect3_voice_title": "ๅœจ Beta ๅฎขๆˆท็ซฏไธญๅฏ็”จ่ฏญ้ŸณๅŒ…", + "sect3_voice_step1_pre": "ๅฐ†ๆ‰€้œ€็š„่ฏญ้Ÿณๆ–‡ไปถๅคน๏ผˆไพ‹ๅฆ‚๏ผš", + "sect3_voice_step1_mid": "๏ผ‰ไปŽ๏ผš", + "sect3_voice_step1_post_pre": "ๅคๅˆถๅˆฐ beta ๆ–‡ไปถๅคนไธญ๏ผŒๅœจ้ฆ–้กต็‚นๅ‡ป", + "sect3_voice_step1_post_bold": "โ€œๆ‰“ๅผ€่ฏญ้Ÿณๆ–‡ไปถๅคนโ€", + "sect3_voice_step1_post_post": "ๅณๅฏใ€‚", + "sect3_voice_step2": "้ฆ–ๆฌกๅฏๅŠจๆธธๆˆๆ—ถๅฏ่ƒฝไผšๅˆ ้™ค่ฏญ้Ÿณๆ–‡ไปถๅคนใ€‚ๅฆ‚ๆžœๅ‘็”Ÿ่ฟ™็งๆƒ…ๅ†ต๏ผŒ่ฏท้‡ๅคๆญฅ้ชค 1 ่ฟ›่กŒๆขๅคใ€‚", + "btn_back": "่ฟ”ๅ›žไธป้กต" + }, + "about": { + "title": "ๅ…ณไบŽ", + "p1_pre": "ไฝ ๅฅฝ๏ผๆˆ‘ไปฌๆ˜ฏ ", + "p1_post": "๏ผŒไธ€ไธช่‡ดๅŠ›ไบŽๆž„ๅปบๅฎž็”จๅทฅๅ…ทๅนถๆ”นๅ–„็”จๆˆทไฝ“้ชŒ็š„ๅผ€ๅ‘่€…ๅ›ข้˜Ÿใ€‚", + "p2_pre": "ๆˆ‘ๅˆ›ๅปบไบ†ไธ€ไธช่ฝป้‡ไธ”็Žฐไปฃ็š„ ", + "p2_highlight": "ๆธธๆˆๅฏๅŠจๅ™จ", + "p2_post": "๏ผŒๆ—จๅœจๅธฎๅŠฉ็”จๆˆทไปฅๆ›ดๅฅฝ็š„ๆ€ง่ƒฝๅ’Œๆž็ฎ€็š„ๆ“ไฝœ่ฝปๆพๅฏๅŠจไธŽ็ฎก็†ไป–ไปฌ็š„ๆธธๆˆใ€‚", + "p3_pre": "ๅฏๅŠจๅ™จไฝฟ็”จ ", + "p3_mid": " ๆž„ๅปบ๏ผŒๅนถ้‡‡็”จ ", + "p3_and": " ๅ’Œ ", + "p3_post": " ่ฎพ่ฎกไบ†็ฎ€ๆดๅ“ๅบ”ๅผ็š„็•Œ้ขใ€‚", + "p4": "ๆˆ‘็š„็›ฎๆ ‡ๆ˜ฏๅˆถไฝœๅฟซ้€Ÿใ€้ซ˜ๆ•ˆไธ”ไฝฟ็”จ่ตทๆฅไปคไบบๆ„‰ๆ‚ฆ็š„ๅทฅๅ…ท โ€”โ€” ่€Œ่ฟ™ไธชๅฏๅŠจๅ™จไป…ไป…ๆ˜ฏไธชๅผ€ๅง‹ใ€‚", + "btn_back": "่ฟ”ๅ›žไธป้กต" + }, + "fireflytools": { + "title": "Firefly ๅทฅๅ…ท", + "sect1_title": "ๅ…ณไบŽ Firefly ๅทฅๅ…ท", + "sect1_p1_pre": "ๆœฌ็ฝ‘็ซ™ๆ˜ฏ ", + "sect1_p1_tool": "Firefly Tools ", + "sect1_p1_mid": "็š„ๅฆไธ€ไธช็‰ˆๆœฌ๏ผŒ็”ฑ ", + "sect1_p1_author": "Firefly Shelter", + "sect1_master_site": "ไธป็ซ™", + "sect1_p2_pre": "ๅŽŸๅง‹ๅทฅๅ…ท็”ฑๅไธบ ", + "sect1_p2_author": "Amazing", + "sect1_p2_post": " ็š„็ฌฌไธ‰ๆ–นๅผ€ๅ‘่€…ๅˆ›ๅปบใ€‚ๆญค็‰ˆๆœฌ็›ดๆŽฅๅŸบไบŽ่ฏฅไฝœๅ“๏ผŒๆœชไฟฎๆ”นๆ ธๅฟƒ้€ป่พ‘ใ€‚", + "sect1_p3_pre": "ๅŽŸไฝœ่€…่ฟ˜ๆœ‰ไธ€ไธชๆ›ด็Žฐไปฃ็š„็‰ˆๆœฌ๏ผŒ่ฏท่ฎฟ้—ฎ๏ผš", + "sect2_title": "ไธป่ฆๅŠŸ่ƒฝ", + "sect2_feat1": "ๅœจๆต่งˆๅ™จไธญ่ฝปๆพ้…็ฝฎ่ง’่‰ฒใ€ๅ…‰้”ฅใ€้—ๅ™จใ€่กŒ่ฟนๅ’Œๆ˜Ÿ้ญ‚ใ€‚", + "sect2_feat2_pre": "ไฝฟ็”จ ", + "sect2_feat2_server": "Connect PS", + "sect2_feat2_mid": " ็ซ‹ๅณๅฐ†่ฎพ็ฝฎๅบ”็”จๅˆฐ ", + "sect2_feat2_conn": "Firefly GO Server", + "sect2_feat2_post": " โ€”โ€” ๆ— ้œ€ๆ‰‹ๅŠจไธŠไผ ๆ–‡ไปถใ€‚", + "sect2_feat3_title": "้ขๅค–่ฎพ็ฝฎ", + "sect2_feat3_desc_pre": "ไฝฟ็”จ้ขๅค–ๅŠŸ่ƒฝๅขžๅผบๆ‚จ็š„ ", + "sect2_feat3_desc_server": "Firefly GO Server", + "sect2_feat3_desc_post": " ไฝ“้ชŒ๏ผš", + "sect2_feat3_ui": "้š่—ๆธธๆˆ UI", + "sect2_feat3_ui_desc": "โ€”โ€” ็งป้™คๆ•ดไธชๆธธๆˆ็•Œ้ขใ€‚", + "sect2_feat3_censor": "็ฆ็”จๅ’Œ่ฐ", + "sect2_feat3_censor_desc": "โ€”โ€” ็งป้™ค้•œๅคดๅ…‰ๆ™•ๅ’Œ่ฐ ๐Ÿ’€ใ€‚", + "sect2_feat3_tc": "Theorycraft ๆจกๅผ", + "sect2_feat3_tc_desc": "โ€”โ€” ้€š่ฟ‡็ฝ‘้กต้…็ฝฎ HPใ€่ฝฎๆ•ฐ็ญ‰ใ€‚", + "sect2_feat4_pre": "ไฝฟ็”จ ", + "sect2_feat4_post": " ๅฏผๅ…ฅๅ’Œๅฏผๅ‡บๅฎŒๆ•ด้…็ฝฎใ€‚", + "sect2_feat5": "ๅฟซ้€Ÿๆต‹่ฏ•ๅทฅไฝœๆต โ€”โ€” ๆ— ๅŒๆญฅๅ†ทๅด๏ผŒๆธธๆˆๅ†…ๅณๆ—ถๆ›ดๆ–ฐใ€‚", + "sect3_title": "ๅฟซ้€Ÿๅผ€ๅง‹", + "sect3_step1": "้€š่ฟ‡ๆต่งˆๅ™จ่ฎฟ้—ฎ่‡ชๆ‰˜็ฎกๅฎžไพ‹ไธญ็š„ๅทฅๅ…ทใ€‚", + "sect3_step2": "ไฝฟ็”จ็›ด่ง‚็š„ Web ็•Œ้ข้…็ฝฎๆ‚จ็š„่ง’่‰ฒๆญ้…ใ€‚", + "sect3_step3_pre": "ไฝฟ็”จ ", + "sect3_step3_bold": "Connect PS", + "sect3_step3_post": " ๅŠŸ่ƒฝ็ซ‹ๅณไธŽๆ‚จ็š„็งๆœๅŒๆญฅใ€‚", + "sect3_step4": "้€š่ฟ‡ๅฎžๆ—ถๆ›ดๆ–ฐๅ’Œไฟฎๆ”นๅœจๆธธๆˆไธญๆต‹่ฏ•ๆ‚จ็š„ๆญ้…ใ€‚", + "btn_back": "่ฟ”ๅ›žไธป้กต" + }, + "analysis": { + "title": "Firefly ๅˆ†ๆž & Veritas ๆ’ไปถ", + "sect1_title": "ๅ…ณไบŽ Veritas", + "sect1_p1_pre": "Veritas", + "sect1_p1_mid": " ๆ˜ฏไธ€ๆฌพๅผบๅคง็š„", + "sect1_p1_highlight": "ไผคๅฎณ่ฎฐๅฝ•ๅ™จ", + "sect1_p1_post": "๏ผŒไธ“ไธบๅœจๆธธๆˆ่ฟ‡็จ‹ไธญๅฎžๆ—ถๅˆ†ๆžไผคๅฎณ่€Œ่ฎพ่ฎกใ€‚", + "sect1_p2": "ๅฎƒ่ฝป้‡ใ€ๅฟซ้€Ÿไธ”ๆ˜“ไบŽไฝฟ็”จ๏ผŒ้€‚ๅˆๅ…จ้ข็š„ไผคๅฎณๅˆ†ๆžใ€‚", + "sect1_github": "GitHub ไป“ๅบ“", + "sect2_title": "Web ๅˆ†ๆžๅทฅๅ…ท", + "sect2_desc": "ไฝฟ็”จ่ฟ™ไบ› Web ๅบ”็”จ็จ‹ๅบไธŽ Veritas ่ฟ›่กŒๅฎžๆ—ถไผคๅฎณๅˆ†ๆž๏ผš", + "sect2_master": "ไธป็ซ™", + "sect2_backup": "ๅค‡็”จ็ฝ‘็ซ™", + "sect2_tip_pre": "ๆ็คบ๏ผš", + "sect2_tip_post": " ๅฆ‚ๆžœๆ‚จ็š„ๅ›ฝๅฎถๅŠ ่ฝฝไธป็ซ™ๆœ‰ๅ›ฐ้šพ๏ผŒ่ฏทๆ”น็”จๅค‡็”จ็ฝ‘็ซ™ใ€‚", + "sect3_title": "ๅฎ‰่ฃ…่ฏดๆ˜Ž", + "sect3_subtitle": "้‡่ฆ่ฎพ็ฝฎๆญฅ้ชค", + "sect3_desc": "ไธ‹่ฝฝ Veritas ๅŽ๏ผŒๆ‚จๅฟ…้กป้‡ๅ‘ฝๅ่ฏฅๆ–‡ไปถๆ‰่ƒฝๆญฃๅธธๅทฅไฝœ๏ผš", + "sect3_rename": "้‡ๅ‘ฝๅ๏ผš", + "sect3_place": "็„ถๅŽๅฐ† ", + "sect3_place_post": " ๆ”พๅ…ฅๆ‚จ็š„ๆธธๆˆ็›ฎๅฝ•ใ€‚", + "sect4_title": "ๅฆ‚ไฝ•ไฝฟ็”จ Web ๅบ”็”จ", + "sect4_sub1": "้€‚็”จไบŽ Firefly GO ๆœฌๅœฐ็ซฏ", + "sect4_sub1_step1_pre": "ๅฏๅŠจ ", + "sect4_sub1_step1_game": "ๆธธๆˆ", + "sect4_sub1_step1_mid": " ๅ’Œๆ‚จ็š„ ", + "sect4_sub1_step1_server": "Firefly GO ๆœๅŠกๅ™จ (PS)", + "sect4_sub1_step1_post": "ใ€‚", + "sect4_sub1_step2": "ๆ‰“ๅผ€ๅ…ถไธญไธ€ไธช Web ๅˆ†ๆžๅทฅๅ…ทใ€‚", + "sect4_sub1_step3_pre": "่ฝฌๅˆฐ ", + "sect4_sub1_step3_conn": "Connection Settings", + "sect4_sub1_step3_mid1": " โ†’ ้€‰ๆ‹ฉ ", + "sect4_sub1_step3_type": "Connection Type: PS", + "sect4_sub1_step3_mid2": " โ†’ ็‚นๅ‡ป ", + "sect4_sub1_step3_btn": "Connect", + "sect4_sub1_step3_post": "ใ€‚", + "sect4_sub1_step4": "่ฟžๆŽฅๅŽ๏ผŒๆธธ็Žฉๆธธๆˆใ€‚ๅทฅๅ…ทๅฐ†ๅœจๅŽๅฐ่‡ชๅŠจ่ฟ›่กŒๅˆ†ๆžใ€‚", + "sect4_sub2": "้€‚็”จไบŽๅ…ถไป–็งๆœ", + "sect4_sub2_step1_pre": "ๅฏๅŠจ ", + "sect4_sub2_step1_game": "ๆธธๆˆ", + "sect4_sub2_step1_mid": " ๅ’Œๆ‚จ็š„ ", + "sect4_sub2_step1_server": "็งๆœ", + "sect4_sub2_step1_post": "ใ€‚", + "sect4_sub2_step2": "ๆ‰“ๅผ€ๅ…ถไธญไธ€ไธช Web ๅˆ†ๆžๅทฅๅ…ทใ€‚", + "sect4_sub2_step3_pre": "่ฝฌๅˆฐ ", + "sect4_sub2_step3_conn": "Connection Settings", + "sect4_sub2_step3_mid1": " โ†’ ้€‰ๆ‹ฉ ", + "sect4_sub2_step3_type": "Connection Type: Native", + "sect4_sub2_step3_mid2": " โ†’ ็‚นๅ‡ป ", + "sect4_sub2_step3_btn": "Connect", + "sect4_sub2_step3_post": "ใ€‚", + "sect4_sub2_step4": "่ฟžๆŽฅๅŽ๏ผŒๆญฃๅธธๆธธ็Žฉๆธธๆˆๅณๅฏใ€‚", + "btn_back": "่ฟ”ๅ›žไธป้กต" + } +} \ No newline at end of file diff --git a/frontend/src/components/backgroudModal/index.tsx b/frontend/src/components/backgroudModal/index.tsx index 4b79c5d..e191b68 100644 --- a/frontend/src/components/backgroudModal/index.tsx +++ b/frontend/src/components/backgroudModal/index.tsx @@ -4,7 +4,9 @@ import { useState, useRef } from 'react' import { X, Image as ImageIcon, Plus, Upload, Check } from 'lucide-react' import useSettingStore from '@/stores/settingStore' import Cropper from 'react-easy-crop' -import getCroppedImg from '@/utils/cropImage' +import getCroppedImg from '@/utils/cropImage' +import { useTranslation } from 'react-i18next' +import { toast } from "react-toastify" const initialImages = { "bg-1": "bg-1.jpeg", @@ -30,14 +32,26 @@ export const BackgroundSelector = () => { const [croppedAreaPixels, setCroppedAreaPixels] = useState(null) const { background, setBackground, extraBackgrounds, setExtraBackgrounds } = useSettingStore() const fileInputRef = useRef(null) - + const { t } = useTranslation() const handleSelect = (img: string) => { setIsOpen(false) setBackground(img) } - + const isImageUrl = (url: string) => { + return /^https?:\/\/.+\.(jpg|jpeg|png|webp|gif)(\?.*)?$/i.test(url) + } const handleAddUrl = () => { - if (!newUrl.trim()) return setCroppingImage(newUrl) + const url = newUrl.trim() + if (!url) { + return + } + + if (!isImageUrl(url)) { + toast.error(t("background.invalid_url")) + return + } + + setCroppingImage(url) setNewUrl('') } @@ -61,8 +75,8 @@ export const BackgroundSelector = () => { const allBackgrounds = [...extraBackgrounds, ...Object.values(initialImages)] return ( -
-
+
+
-

Choose Background

+

{t("background.choose_bg")}

{/* Add via URL */}
setNewUrl(e.target.value)} />
@@ -100,7 +114,7 @@ export const BackgroundSelector = () => { className="btn btn-warning flex items-center gap-1" onClick={() => fileInputRef.current?.click()} > - Upload from computer + {t("background.upload_from_computer")} {
{/* Crop Modal */} - {croppingImage && ( + {(croppingImage != null && croppingImage != "") && (
-
+
{ className="absolute bottom-4 left-1/2 -translate-x-1/2 btn btn-success" onClick={handleCropComplete} > - Done + {t("background.done")} - +
+

+ {t("close.description")} +

+ +
+ setClosingOption({ isMinimize: closingOption.isMinimize, isAsk: !e.target.checked })} + /> + +
+ +
+ + +
-
) } \ No newline at end of file diff --git a/frontend/src/components/header/index.tsx b/frontend/src/components/header/index.tsx index 45c12da..1018fd6 100644 --- a/frontend/src/components/header/index.tsx +++ b/frontend/src/components/header/index.tsx @@ -2,26 +2,42 @@ import { Link } from "@tanstack/react-router"; import useModalStore from "@/stores/modalStore"; import { Blend, BookOpen, Diff, Home, Info, Languages, Minus, Puzzle, Settings, TrendingUpDown, Wrench, X } from "lucide-react"; import { AppService } from "@bindings/firefly-launcher/internal/app-service"; +import LanguageSwitcher from "../languageSwitcher"; +import { useTranslation } from "react-i18next"; +import useSettingStore from "@/stores/settingStore"; export default function Header() { - const { setIsOpenSettingModal } = useModalStore() + const { setIsOpenSettingModal, setIsOpenCloseModal } = useModalStore() + const { closingOption } = useSettingStore() + const { t } = useTranslation() const controlButtons = [ { icon: , action: () => setIsOpenSettingModal(true), - tip: "Settings", + tip: t("header.settings"), }, { icon: , action: () => AppService.MinimizeApp(), - tip: "Minimize", + tip: t("header.minimize"), }, { icon: , - action: () => AppService.CloseApp(), - tip: "Close", + action: () => { + if (closingOption.isAsk) { + setIsOpenCloseModal(true) + return + } + if (closingOption.isMinimize) { + AppService.HideApp() + return + } + AppService.CloseApp() + }, + tip: t("header.close"), }, + ] return ( @@ -42,26 +58,26 @@ export default function Header() { tabIndex={0} className="menu menu-sm dropdown-content bg-black/50 backdrop-blur-md rounded-box z-1 mt-3 w-52 p-2 shadow" > -
  • Home
  • +
  • {t("header.home")}
  • - Tools + {t("header.tools")}
      -
    • Language
    • -
    • Diff
    • +
    • {t("header.language")}
    • +
    • {t("header.client_update")}
  • - Plugins + {t("header.plugins")}
      -
    • Analysis (Veritas)
    • -
    • SrTools
    • +
    • {t("header.analysis")}
    • +
    • {t("header.firefly_tools")}
  • -
  • How to?
  • -
  • About
  • +
  • {t("header.how_to")}
  • +
  • {t("header.about")}
  • @@ -71,11 +87,11 @@ export default function Header() {

    Firefly - + Launcher

    -

    By Firefly Shelter

    +

    {t("header.by")}

    @@ -89,24 +105,24 @@ export default function Header() {