i18n: 리소스팩 설치기 UI 문구를 locales/installer-rp/ko-kr.json 으로 분리

- main/preload/ytdlp/ffmpeg/music/images/pack/renderer 전반에서 로그·에러·진행
  메시지 문자열을 locales/installer-rp/ko-kr.json 사전 키로 교체
- preload 에 loadLocale 추가, main 에 rp:i18n:dict IPC 핸들러 추가
- 패키징된 .exe 에서도 한국어 사전이 적용되도록 electron-builder.yml 의
  extraResources 에 locales/ 폴더 추가

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-13 04:00:31 +09:00
parent 135bc98840
commit 6cd402121b
10 changed files with 314 additions and 101 deletions

View File

@@ -0,0 +1,127 @@
{
"app": {
"title": "마인크래프트 음악퀴즈 리소스팩 간편설치기"
},
"stepIndicator": {
"step1": "1. 음악퀴즈",
"step2": "2. 설치",
"step3": "3. 완료"
},
"logViewer": {
"heading": "설치 로그",
"collapse": "접기",
"expand": "펼치기"
},
"common": {
"next": "다음",
"cancel": "취소",
"confirm": "확인",
"openFolder": "리소스팩 폴더 열기",
"loading": "목록을 불러오는 중...",
"selectFailed": "선택 실패",
"listLoadFailed": "목록 로드 실패: {{message}}",
"installFailed": "설치 실패: {{message}}",
"noPacks": "등록된 음악퀴즈가 없습니다.",
"mcVersionLabel": "마인크래프트 {{version}} · ",
"trackImageCount": "음악 {{music}}곡 · 사진 {{image}}장",
"requestTimeout": "요청 시간 초과",
"tooManyRedirects": "redirect 가 너무 많습니다."
},
"step1": {
"heading": "1단계. 음악퀴즈 선택"
},
"step2": {
"heading": "2단계. 리소스팩 설치",
"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": "3단계. 완료",
"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 빈 값) — 새 리소스팩으로 생성",
"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}}",
"packFormatMatched": "pack_format = {{format}} (mcVersion {{matched}})",
"packFormatFallback": "pack_format = {{format}} (mcVersion \"{{version}}\" 매칭 실패, 최신 폴백)",
"soundsMerged": "기존 sounds.json 병합 ({{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}}"
}
}