Files
claude-bot 5c13648f63 rp-pack: fail-fast on base track/painting collision (was: silent skip)
Reviewer correctly flagged that the previous skip-on-collision
behavior silently drops new quiz tracks when the base resourcepack
already has the same track_NN key. That makes the install LOOK
successful but breaks the quiz at runtime (datapack references the
missing track).

The new behavior throws a clear error explaining which key collided
and what the user must do (remove the conflicting base entry, or
use a different base). The base assets are still preserved (we
never overwrite); we just refuse to build a broken pack.

Removed the now-unused skip-summary log keys.
2026-05-23 17:26:41 +09:00

149 lines
7.9 KiB
JSON

{
"app": {
"title": "마인크래프트 음악퀴즈 리소스팩 간편설치기"
},
"stepIndicator": {
"step1": "1. 음악퀴즈",
"step2": "2. 설치",
"step3": "3. 완료"
},
"logViewer": {
"heading": "설치 로그",
"collapse": "접기",
"expand": "펼치기"
},
"common": {
"next": "다음",
"back": "이전",
"cancel": "취소",
"confirm": "확인",
"openFolder": "리소스팩 폴더 열기",
"loading": "목록을 불러오는 중...",
"selectFailed": "선택 실패",
"listLoadFailed": "목록 로드 실패: {{message}}",
"installFailed": "설치 실패: {{message}}",
"noPacks": "등록된 음악퀴즈가 없습니다.",
"mcVersionLabel": "마인크래프트 {{version}} · ",
"trackImageCount": "음악 {{music}}곡 · 사진 {{image}}장",
"requestTimeout": "요청 시간 초과",
"tooManyRedirects": "너무 많은 요청."
},
"step1": {
"heading": "음악퀴즈 선택"
},
"agreement": {
"heading": "약관 동의",
"intro": "리소스팩을 설치하기 전에 아래 약관을 모두 확인하고 동의해 주세요.",
"tabResourcepack": "리소스팩 약관",
"tabInstaller": "리소스팩 설치기 약관",
"loading": "약관을 불러오는 중...",
"loadFailed": "약관 로드 실패: {{message}}",
"listLoadFailed": "약관 표시에 실패하여 설치를 진행할 수 없습니다.\n사유: {{message}}\n네트워크 상태를 확인하고 다시 시도하거나, 처음 단계로 돌아가 주세요.",
"retry": "다시 시도",
"agreeAll": "위 모든 약관에 동의합니다.",
"agreeRequired": "약관에 동의해야 다음 단계로 진행할 수 있습니다.",
"cancelling": "취소 중…"
},
"step2": {
"heading": "리소스팩 설치",
"description": "음악·사진을 받아 리소스팩을 만들고 <code>%appdata%/.mc_custom/resourcepacks/</code> 에 자동 설치합니다.",
"chipYtdlp": "yt-dlp 준비",
"chipFfmpeg": "ffmpeg 준비",
"musicHeading": "음악 다운로드",
"musicSub": "{{count}}곡",
"imageHeading": "사진 다운로드",
"imageSub": "{{count}}장",
"packageHeading": "리소스팩 빌드",
"packageWaiting": "대기 중…",
"packageBuilding": "빌드 중…",
"packageDone": "설치 완료",
"cardWaiting": "대기",
"cardDone": "완료",
"cardError": "실패"
},
"step3": {
"heading": "완료",
"message": "리소스팩 설치를 완료했습니다."
},
"log": {
"manifestDownload": "manifest 다운로드: {{url}}",
"packDefFailed": "팩 정의 로드 실패 ({{file}}): {{message}} — mcVersion 폴백",
"listLoadFailed": "목록 로드 실패 ({{file}}): {{message}}",
"packsLoaded": "로드된 음악퀴즈: {{count}}개",
"packEntry": " - {{key}}: mc={{mc}} 베이스={{base}}",
"packEntryUnknownVersion": "?",
"packEntryNoBase": "(없음)",
"selectedPack": "선택: {{key}}",
"ytdlpPreparing": "yt-dlp 준비 중…",
"ytdlpPath": "yt-dlp 경로: {{path}}",
"ffmpegPreparing": "ffmpeg 준비 중…",
"ffmpegPath": "ffmpeg 경로: {{path}}",
"cpuDetected": "CPU 코어 {{cores}}개 감지 → 동시 다운로드 {{concurrency}}개",
"musicStart": "음악 다운로드 시작 ({{total}}곡, 동시 {{concurrency}}개, 시차 {{stagger}}ms)",
"musicTrackStart": "{{idx}}번 노래 다운로드 시작",
"musicTrackDone": "{{idx}}번 노래 완료: {{name}}",
"imageStart": "사진 다운로드 시작 ({{total}}장)",
"imageDownloading": "{{idx}}번 사진 다운로드 중…",
"imageDone": "{{idx}}번 사진 완료: {{name}}",
"baseDownload": "베이스 리소스팩 다운로드: {{path}}",
"baseUrl": " URL: {{url}}",
"baseReceived": "베이스 리소스팩 받음 ({{kb}} KB)",
"baseAbsent": "베이스 리소스팩 없음(resourcepackPath 빈 값) — 새 리소스팩으로 생성",
"baseRemoved": "베이스 리소스팩 삭제: {{path}}",
"buildingZip": "리소스팩 zip 빌드 중… ({{name}})",
"installComplete": "설치 완료: {{path}}",
"cancelRequested": "취소 요청됨. 실행 중 프로세스 {{count}}개 중단…",
"ytdlpExists": "yt-dlp.exe 이미 있음: {{path}}",
"ytdlpDownloading": "yt-dlp.exe 다운로드 중: {{url}}",
"ytdlpReady": "yt-dlp.exe 준비 완료: {{path}}",
"ffmpegExists": "ffmpeg.exe 이미 있음: {{path}}",
"ffmpegDownloading": "ffmpeg.exe 다운로드 중: {{url}}",
"ffmpegExtracting": "ffmpeg zip 압축 해제 중…",
"ffmpegReady": "ffmpeg.exe 준비 완료: {{path}}",
"baseExtract": "베이스 리소스팩 압축 해제: {{name}}",
"baseShaderOverrideStripped": "베이스 리소스팩의 vanilla 셰이더 오버라이드 제거: assets/minecraft/shaders/{{path}} — mcVersion {{mc}} (pack_format {{format}}) 의 새 GLSL API 와 호환되지 않아 결과 zip 에서 제외했습니다.",
"packFormatMatched": "pack_format = {{format}} (mcVersion {{matched}})",
"packFormatFallback": "pack_format = {{format}} (mcVersion \"{{version}}\" 매칭 실패, 최신 폴백)",
"packFormatRange": "호환 범위 선언: pack_format {{min}} ~ {{max}} (supported_formats / min_format / max_format 모두 기록)",
"soundsMerged": "기존 sounds.json 병합 ({{count}}개 항목)",
"tracksAdded": "음악 트랙 추가됨: {{count}}곡",
"paintingsAdded": "사진 텍스처 추가됨: {{count}}장",
"ytdlpLine": "yt-dlp> {{line}}"
},
"progress": {
"ytdlpPreparing": "yt-dlp 준비 중",
"ffmpegPreparing": "ffmpeg 준비 중",
"ready": "준비 완료",
"cancelled": "취소됨",
"baseDownloading": "베이스 리소스팩 다운로드 중",
"buildingWithBase": "베이스에 음악·사진 추가 중",
"buildingZip": "zip 빌드 중",
"installComplete": "설치 완료"
},
"pack": {
"description": "음악퀴즈 리소스팩 - {{name}}"
},
"errors": {
"selectedPackNotFound": "선택한 음악퀴즈를 찾을 수 없습니다.",
"selectPackFirst": "음악퀴즈를 먼저 선택해주세요.",
"currentPackNotFound": "선택된 음악퀴즈를 찾을 수 없습니다.",
"cancelledByUser": "사용자가 설치를 취소했습니다.",
"musicDownloadFailed": "{{idx}}번 노래 다운로드 실패: {{message}}",
"imageDownloadFailed": "{{idx}}번 사진 다운로드 실패: {{message}}",
"imageNormalizeFailed": "{{idx}}번 사진 정규화 실패: {{message}}",
"baseDownloadFailed": "베이스 리소스팩 다운로드 실패: {{message}}",
"ytdlpSignal": "yt-dlp 가 신호 {{signal}} 로 종료됨",
"ytdlpExit": "yt-dlp 종료 코드 {{code}}: {{stderr}}",
"ytdlpNoStderr": "(stderr 없음)",
"ytdlpMissingOutput": "예상 출력파일이 없음: {{path}}",
"imageMetaUnknown": "이미지 크기를 읽지 못함",
"ytdlpVerifyFailed": "yt-dlp.exe 다운로드는 됐지만 실행 검증에 실패했습니다.",
"ytdlpInstallFailed": "yt-dlp.exe 자동 설치 실패: {{message}}",
"ffmpegNotInZip": "zip 내부에서 ffmpeg.exe 를 찾을 수 없습니다.",
"ffmpegVerifyFailed": "ffmpeg.exe 다운로드는 됐지만 실행 검증에 실패했습니다.",
"ffmpegInstallFailed": "ffmpeg.exe 자동 설치 실패: {{message}}",
"baseTrackCollision": "베이스 리소스팩에 같은 트랙 ID 가 이미 있어 설치를 중단합니다: {{trackId}}\n베이스 자산을 보존하면서 새 트랙을 같은 ID 로 추가할 수 없습니다. 베이스의 sounds.json 엔트리/sounds 폴더에서 충돌하는 항목을 제거하거나 다른 베이스를 사용하세요.",
"basePaintingCollision": "베이스 리소스팩에 같은 사진 파일이 이미 있어 설치를 중단합니다: {{name}}\n베이스의 painting 텍스처를 보존하면서 같은 파일명을 추가할 수 없습니다. 베이스에서 충돌하는 파일을 제거하거나 다른 베이스를 사용하세요."
}
}