{
"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)"
}
}