{ "common": { "back": "이전", "next": "다음", "ok": "확인", "cancel": "취소", "close": "닫기", "agree": "동의", "reject": "비동의", "apply": "적용", "save": "저장", "load": "불러오기", "expand": "펼치기", "collapse": "접기", "saved": "저장 완료", "saveFailed": "저장 실패", "unknownError": "알 수 없는 오류" }, "app": { "browserTitle": "마인크래프트 음악퀴즈 간편설치기", "headerTitle": "마인크래프트 음악퀴즈 간편설치기" }, "stepIndicator": { "step1": "1. 음악퀴즈", "step2": "2. 모드", "step3": "3. 서버", "step4": "4. 클라이언트", "step5": "5. 완료" }, "logViewer": { "title": "설치 로그" }, "step1": { "heading": "설치할 음악퀴즈 선택", "loading": "목록을 불러오는 중...", "empty": "등록된 음악퀴즈가 없습니다.", "fetchFailed": "목록을 가져오지 못했습니다: {{message}}", "subtitle": "마인크래프트 {{mc}} / {{platform}}" }, "step2": { "heading": "싱글 / 멀티 선택", "singleTitle": "싱글", "singleHint": "싱글 맵으로 혼자 플레이할때", "multiTitle": "멀티", "multiHint": "버킷 서버로 친구들과 같이 플레이할때", "roleHeading": "호스트 / 참가자", "hostTitle": "호스트", "hostHint": "내가 서버를 직접 열고 친구들을 초대할 때", "participantTitle": "참가자", "participantHint": "친구가 연 서버에 접속만 할 때 (맵은 받지 않음)" }, "step3": { "heading": "서버 관련 설정", "sub31": { "heading": "서버 설치 경로", "description": "서버를 생성할 폴더를 선택하세요.", "pickFolder": "폴더 선택", "invalidPath": "경로가 유효하지 않습니다.", "confirmed": "경로 확정: {{message}}" }, "sub32": { "heading": "JDK 확인", "description": "JDK 자동탐색 or 설치", "pickFolder": "폴더 선택", "auto": "자동 탐색", "install": "자동 설치", "installCancel": "설치 취소", "found": "JDK 발견: {{path}}", "autoDetected": "JDK 자동 탐색됨: {{path}}", "notFound": "JDK를 자동으로 찾지 못했습니다. \"자동 설치\" 를 눌러 JDK를 설치하거나 직접 선택해 주세요.", "notFoundHint": "JDK를 자동으로 찾지 못했습니다. \"자동 설치\" 를 누르면 JDK를 받아 설치합니다.", "cancelRequested": "JDK 설치 취소 요청 중...", "downloading": "JDK 다운로드 중...", "installComplete": "JDK 자동 설치 완료: {{path}}", "installCanceled": "JDK 설치 취소됨", "installFailed": "JDK 설치 실패: {{message}}", "installError": "JDK 설치 오류: {{message}}", "pathRequired": "JDK 경로를 입력해 주세요." }, "sub33": { "heading": "서버 다운로드 및 설치", "description": "서버 파일 다운로드", "waiting": "대기 중", "downloading": "다운로드 중...", "ramHeading": "램 검사", "ramChecking": "검사 중...", "eulaPrompt": "EULA 동의가 필요합니다. 팝업을 확인해 주세요.", "eulaRejected": "EULA 동의 실패. 다운로드를 취소했습니다.", "eulaSaveFailed": "EULA 저장 실패: {{message}}", "doneSummary": "다운로드 및 EULA 동의 완료.", "downloadFailed": "다운로드 실패: {{message}}", "ramTooLow": "시스템 램({{system}}MB)이 음악퀴즈 최소 요구치({{min}}MB)에 미치지 못합니다. 설치를 중단합니다.", "ramMinOk": "시스템 램({{system}}MB)이 권장치보다 부족합니다. 최소치({{applied}}MB)로 진행합니다.", "ramMaxOk": "시스템 램({{system}}MB) 확인. {{applied}}MB로 설정." }, "eulaModal": { "title": "Minecraft EULA 동의", "fromMojang": "마인크래프트 서버를 실행하려면 아래 EULA에 동의해야 합니다 ({{url}}).", "loadFailed": "EULA 페이지를 불러올 수 없습니다. 직접 확인해 주세요: https://www.minecraft.net/en-us/eula" }, "sub34": { "heading": "서버 설정 편집", "description": "로컬 웹서버를 띄워 server.properties / bukkit.yml 등을 GUI로 편집합니다.", "open": "편집기 열기", "openedAt": "편집기 주소: {{url}}", "openFailed": "편집기 실행 실패: {{message}}" }, "sub35": { "heading": "포트포워딩", "description": "UPNP를 개방해 외부 접속을 허용합니다.", "portLabel": "포트", "recheck": "재점검", "checking": "확인 중...", "preForwarded": "포트포워딩 성공! 친구는 {{address}} 주소로 서버에 접속할 수 있습니다. (이미 외부 개방되어 있음)", "upnpOk": "포트포워딩 성공! 친구는 {{address}} 주소로 서버에 접속할 수 있습니다. (UPnP로 자동 개방 완료)", "manualHint": "직접 포트포워딩을 해주세요.", "manualDetail": "
외부 주소: {{address}}", "checkFailed": "점검 실패: {{message}}", "ipUnknown": "확인 불가" } }, "step4": { "heading": "클라이언트 설정", "sub42": { "heading": "다운로드 및 적용", "description": "클라이언트 설정", "installing": "설치 중...", "done": "클라이언트 설치 완료.", "failed": "설치 실패: {{message}}" } }, "step5": { "heading": "설치 완료", "summary": "", "serverHeading": "서버", "openServerFolder": "서버 폴더 열기", "shortcut": "바탕화면에 서버 실행 바로가기 만들기", "startServer": "서버 바로 실행", "launcherHeading": "마인크래프트 런처", "startLauncher": "마인크래프트 런처 실행", "finish": "완료", "finishing": "마무리 중…", "finished": "완료됨" }, "configEditor": { "pageTitle": "서버 설정 편집기", "heading": "서버 설정 편집기", "intro": "아래 파일을 직접 편집한 후 \"적용\" 버튼으로 저장합니다. 설치기 화면에서 다음 단계로 진행하기 전 마음껏 편집할 수 있습니다.", "targetLabel": "대상 파일", "applyButton": "적용", "saved": "저장 완료", "saveFailed": "저장 실패", "unknownFile": "알 수 없는 파일", "serverError": "서버 오류: {{message}}" }, "errors": { "requestTimeout": "요청 시간 초과", "requestTimeout15s": "요청 시간 초과(15s)", "canceled": "취소되었습니다.", "canceledShort": "취소됨", "packNotFound": "선택한 음악퀴즈를 찾을 수 없습니다.", "packNotFound2": "음악퀴즈를 찾을 수 없습니다.", "installPathRequired": "서버 설치 경로를 입력해 주세요.", "installPathHangul": "경로에 한글이 포함되면 마인크래프트 서버가 정상 동작하지 않습니다.", "installPathHangulShort": "경로에 한글이 포함되면 안 됩니다.", "jdkBusy": "이미 JDK 설치가 진행 중입니다.", "javaExeMissing": "설치 후 java 실행 파일을 찾지 못했습니다: {{path}}", "javaSpawnFailed": "Java 실행 실패: {{message}}", "fabricInstallerExit": "fabric-installer 종료 코드 {{code}}{{detail}}", "fabricLoaderRequired": "Fabric 로더 버전이 음악퀴즈에 지정되지 않았습니다. 관리 사이트에서 platform.loaderVersion 을 설정해 주세요.", "fabricInstallerListEmpty": "Fabric installer 목록을 받지 못했습니다.", "portAllocFail": "포트를 할당할 수 없습니다.", "upnpTimeout": "UPnP 응답 없음(타임아웃 15s). 라우터의 UPnP가 꺼져 있거나 SSDP 패킷이 차단됐을 수 있습니다.", "parseResponseFailed": "응답 파싱 실패: {{snippet}}" }, "log": { "manifestDownload": "manifest 다운로드: {{url}}", "packLoadFail": "pack 로드 실패 ({{file}}): {{message}}", "packsLoaded": "로드된 음악퀴즈: {{count}}개", "selectedPack": "선택: {{key}}", "jdkInstallStart": "JDK(Temurin 21) 자동 설치 시작 — 다운로드 중...", "jdkDownloadProgress": "JDK 다운로드: {{percent}}% ({{loaded}}MB / {{total}}MB)", "jdkExtracting": "JDK 압축 해제 중...", "jdkDoneRoot": "JDK 자동 설치 완료: {{path}}", "jdkCanceled": "JDK 설치가 취소되었습니다.", "jdkInstallFailedLog": "JDK 설치 실패: {{message}}", "jdkCancelRequested": "JDK 설치 취소 요청을 보냈습니다.", "labelDownload": "{{label}} 다운로드: {{url}}", "labelExtract": "{{label}} 압축 해제: {{dir}}", "labelServerFile": "서버 파일", "labelMap": "맵", "skipServerZip": "서버 파일(serverPath)이 비어 있어 서버 zip 다운로드를 건너뜁니다.", "skipMapZip": "맵 다운로드를 건너뜁니다 (mapPath 비어 있음 또는 참가자 모드).", "skipModsFolder": "modsFolder가 비어 있어 모드 다운로드를 건너뜁니다.", "modsIndexFetch": "모드 목록 조회: {{url}}", "modsFolderEmpty": "/file/mods/{{folder}}/ 안에 .jar 파일이 없습니다.", "modDownload": "모드 다운로드: {{file}}", "skipResourcepack": "resourcepackPath가 비어 있어 리소스팩 다운로드를 건너뜁니다.", "resourcepackDownload": "리소스팩 다운로드: {{url}}", "serverInstallPath": "서버 설치 경로: {{path}}", "runBatMissing": "run.bat 이 없어 UPnP 자동 등록 스크립트 주입을 건너뜁니다.", "runBatAlreadyInjected": "run.bat 에 이미 UPnP 자동 등록 스크립트가 들어 있어 건너뜁니다.", "runBatNoJava": "run.bat 에서 java 호출 라인을 찾지 못해 UPnP 자동 등록 주입을 건너뜁니다.", "runBatInjected": "run.bat 에 서버 기동/종료 시 UPnP 자동 등록·해제 스크립트를 추가했습니다.", "mojangEulaFetchFail": "Minecraft EULA 페이지 조회 실패: {{message}}", "eulaAccepted": "EULA 동의 저장 완료.", "configEditorOpen": "서버 설정 편집기 실행: {{url}}", "portCheckStart": "포트포워딩 점검 시작: 포트 {{port}}", "upnpCleanup": "이전 실행의 UPnP 매핑이 남아 있으면 제거합니다(중복 방지)...", "externalIpHttp": "외부 IP 확인(HTTP): {{ip}}", "externalIpHttpFail": "외부 IP 확인 실패(HTTP). UPnP 게이트웨이를 통한 조회 시도...", "externalIpUpnp": "외부 IP 확인(UPnP): {{ip}}", "externalIpUpnpFail": "UPnP 게이트웨이에서도 외부 IP를 얻지 못했습니다.", "probeStart": "외부 포트체크 서비스(ifconfig.co)로 1차 점검합니다...", "probeResult": "1차 점검 결과: {{verdict}} ({{detail}})", "probeVerdictSuccess": "성공", "probeVerdictFail": "실패", "probeVerdictUnknown": "확인 불가", "probePreForwarded": "외부에서 {{addr}}:{{port}} 접근 확인됨. 사용자 규칙으로 포워딩 됨.", "ipUnknown": "(IP 미상)", "upnpTryOpen": "UPnP로 포트 {{port}} 자동 개방 시도(TCP)...", "upnpReqOk": "UPnP portMapping 요청 성공. 외부 접근을 재확인합니다.", "upnpTryFail": "UPnP 시도 실패: {{message}}", "upnpFailDetail": "UPnP 실패: {{message}}. 라우터에서 UPnP가 꺼져 있을 수 있습니다. 직접 포트포워딩을 해주세요.", "upnpRecheck": "UPnP 적용 후 재점검 {{attempt}}/3...", "upnpDone": "UPnP로 포트 {{port}} 자동 개방 완료. 테스트 매핑을 제거합니다(실제 개방은 run.bat 이 서버 기동 시 자동으로 처리).", "upnpCleanupTest": "테스트용 UPnP 매핑을 정리합니다.", "upnpFailReason1": "UPnP 매핑은 등록됐지만 외부 포트체크 서비스에서 연결이 닿지 않았습니다. ISP 차단, 이중 NAT, 또는 방화벽 설정을 확인하세요.", "upnpFailReason2": "외부 포트체크 결과를 받지 못했습니다({{detail}}). UPnP 매핑은 등록됐을 수 있습니다.", "upnpClientFail": "UPnP 클라이언트 생성 실패: {{message}}", "upnpExternalTimeout": "UPnP externalIp 조회 타임아웃(8s).", "upnpExternalErr": "UPnP externalIp 오류: {{message}}", "portInUse": "포트 {{port}}이(가) 이미 사용 중. 임시 리스너 없이 외부 서비스 응답만으로 판정합니다.", "listenerBindFail": "임시 리스너 바인딩 실패: {{message}}", "detailListenerHit": "임시 리스너 도달={{value}}", "detailListenerSkip": "임시 리스너=skip(포트 사용중)", "detailIfconfig": "ifconfig.co reachable={{reachable}} ip={{ip}}", "detailIfconfigFail": "ifconfig.co 실패={{error}}", "detailNone": "결과 없음", "upnpClientFailRemove": "UPnP 클라이언트 생성 실패(매핑 제거 단계): {{message}}", "upnpRemoveTimeout": "UPnP 매핑 제거 응답 없음(타임아웃 8s). 라우터에 우리가 만든 규칙이 없을 수 있습니다.", "upnpRemoveAttempt": "UPnP 매핑 제거 시도 결과: {{message}} (없으면 정상)", "upnpRemoveDone": "UPnP 매핑 제거 완료(포트 {{port}}).", "platformDownload": "플랫폼({{type}}) 다운로드: {{url}}", "platformSaved": "플랫폼 설치파일 저장: {{path}} (사용자가 직접 실행하거나 마인크래프트 런처에서 인식할 수 있습니다.)", "platformSkipped": "플랫폼 설치 건너뜀. 바닐라로 진행합니다.", "fabricFetchInstallerList": "Fabric installer 최신 버전 조회 중...", "fabricInstallerDownload": "Fabric installer {{version}} 다운로드: {{url}}", "javaUsed": "Java 사용: {{path}}", "fabricInstallStart": "Fabric 자동 설치 시작: {{mc}} / loader {{loader}} → {{dir}}", "fabricInstallDone": "Fabric 자동 설치 완료.", "fabricAlreadyInstalled": "Fabric 이미 설치돼 있어 건너뜁니다: {{id}} ({{dir}})", "launcherProfilesMissing": "launcher_profiles.json을 찾을 수 없습니다: {{path}}", "javaArgsUpdated": "JVM 인수 갱신(메모리 + G1 GC 튜닝 추가): \"{{before}}\" → \"{{after}}\"", "lastVersionId": "launcher_profiles 의 lastVersionId = {{id}}", "versionMissingWarn": "경고: .minecraft/versions/{{id}} 가 없습니다. 마인크래프트 런처에서 해당 버전을 한 번 받아주거나, 플랫폼 설치를 먼저 마쳐주세요.", "launcherProfilesUpdated": "launcher_profiles.json 갱신: 프로필 \"{{profile}}\", gameDir={{dir}}", "minecraftRootMissing": ".minecraft 폴더가 없어 기존 설정 복사를 건너뜁니다.", "settingCopyFail": "설정 복사 실패 ({{name}}): {{message}}", "settingCopySummary": "기존 마인크래프트 설정 복사: 새로 복사 {{copied}}개 / 동기화(options 류 덮어쓰기) {{synced}}개 / 보존(이미 존재) {{skipped}}개.", "settingCopyError": "기존 설정 복사 중 오류: {{message}}", "runtimeDirMissing": ".minecraft/{{dir}} 가 없습니다. 마인크래프트 런처를 한 번 실행한 뒤 다시 시도해주세요.", "runtimeDirExists": ".mc_custom/{{dir}} 가 실제 폴더로 이미 존재 — 건너뜀.", "runtimeLinkCreated": "링크 생성: .mc_custom/{{dir}} → .minecraft/{{dir}}", "runtimeLinkFail": "링크 생성 실패 ({{dir}}): {{message}}", "shortcutCreated": "바로가기 생성: {{path}}", "shortcutFailed": "바로가기 생성 실패", "shortcutDescription": "음악퀴즈 서버 실행", "runBatMissingPath": "run.bat을 찾을 수 없습니다: {{path}}", "serverStartRequested": "서버 실행 요청 완료.", "launcherUrlSchemeNonWin": "마인크래프트 런처 실행 요청 완료(URL 스킴, 비-Windows).", "launcherFail": "런처 실행 실패: {{message}}", "launcherExecShell": "마인크래프트 런처 실행({{label}}, 셸 경유): {{path}}", "launcherExec": "마인크래프트 런처 실행({{label}}): {{path}}", "launcherCandFail": "{{path}} 실행 실패: {{message}}", "launcherAppsFolderTry": "AppsFolder 로 MS Store 런처 실행 시도: {{aumid}}", "launcherAppsFolderFail": "AppsFolder 실행 실패: {{message}}", "launcherUrlSchemeFallback": "마지막 시도: minecraft:// URL 스킴 (런처가 없으면 MS Store 가 열릴 수 있음).", "launcherUrlSchemeFail": "URL 스킴 실행 실패: {{message}}.", "launcherAllFail": "Minecraft Launcher 실행 시도가 모두 실패했습니다. minecraft.net 또는 Microsoft Store 에서 \"Minecraft Launcher\" 를 설치한 뒤 다시 시도해 주세요." }, "candidates": { "winProgramFiles86": "Win32 설치(Program Files (x86))", "winProgramFiles": "Win32 설치(Program Files)", "winLegacy86": "Win32 설치(legacy Minecraft 폴더)", "winLegacy": "Win32 설치(legacy Minecraft 폴더)", "xboxGamePass": "Xbox / Game Pass", "npmPortable": "npm/portable", "appAliasMinecraft": "App Execution Alias(Minecraft.exe)", "appAliasLauncher": "App Execution Alias(MinecraftLauncher.exe)" } }