{ "manifest": { "app": { "name": "Spine 썸네일" } }, "thumb": { "title": "Spine 썸네일", "noticeIntro": "Spine 에셋(.skel / .json + .atlas + 텍스처)을 가져온 뒤 사용자 지정 썸네일이 없는 항목에 스켈레톤 미리보기를 생성합니다.", "noticeSafety": "이번에 새로 가져온 항목만 처리합니다. 기존 항목을 검색하거나 수정하지 않으며 사용자 지정 썸네일을 덮어쓰지 않습니다.", "noticeCompound": "복합 확장자 항목은 현재 값과 새 값을 확인한 경우에만 Eagle 이름/유형 필드를 변경합니다. 원래 값은 저장되며 복원할 수 있습니다.", "noticeModes": "애니메이션은 첫 번째 애니메이션을 WebP로 만듭니다. 정지 이미지는 항상 setup pose를 사용합니다.", "noticeDefault": "자동 생성은 기본적으로 꺼져 있습니다. 필요할 때 아래에서 켜세요.", "autoToggle": "가져올 때 썸네일 자동 생성", "clear": "로그 지우기", "restoreNames": "이름/유형 복원", "compoundConfirmTitle": "복합 확장자 변경 확인", "compoundConfirmIntro": "복합 확장자 파일의 특성상 생성된 썸네일을 표시하려면 Eagle에서 이 항목들의 이름과 유형 필드를 조정해야 합니다. 원래 값은 저장되며 이 플러그인에서 복원할 수 있습니다.", "compoundOldValue": "현재 값", "compoundNewValue": "새 값", "compoundSkip": "건너뛰고 계속", "compoundConfirm": "변경 적용", "compoundConfirmSelected": "선택 항목 적용({count})", "compoundSkipped": "{label} 건너뜀: 복합 확장자 변경이 승인되지 않았습니다", "compoundSourceMismatch": "{label} 건너뜀: Eagle 이름 {current}이(가) 실제 원본 파일 {source}과(와) 일치하지 않습니다", "compoundCheckFailed": "{label}의 복합 확장자를 확인할 수 없습니다: {error}", "compoundNeedsConfirmation": "{label} 건너뜀: 확인 후 필드가 변경되었습니다. 다음에 다시 확인하세요", "compoundBackupUnavailable": "원래 값을 저장할 수 없어 복합 확장자를 변경할 수 없습니다", "compoundRolledBack": "썸네일 생성에 실패하여 {label}의 이름과 유형을 복원했습니다", "compoundRollbackFailed": "썸네일 생성에 실패했고 {label}을(를) 자동 복원할 수 없습니다: {error}", "restoreEmpty": "복원할 이름/유형 변경이 없습니다", "restoreTitle": "복원할 항목 선택", "restoreIntro": "원래 값이 저장된 항목입니다. 복원 가능한 항목은 기본적으로 모두 선택됩니다. 이후 사용자가 변경했거나 읽을 수 없는 항목은 선택할 수 없습니다.", "restoreCurrent": "현재", "restoreTarget": "복원 값", "restoreStatusReady": "항목이 {fields} 값으로 변경되었습니다", "restoreStatusAlreadyOriginal": "이미 원래 값입니다. 확인하면 백업만 정리합니다", "restoreStatusChanged": "현재 필드가 사용자에 의해 변경되어 건너뜁니다", "restoreStatusMissing": "항목을 찾을 수 없어 복원할 수 없습니다", "restoreStatusError": "현재 값을 읽을 수 없어 복원할 수 없습니다", "restoreCancel": "취소", "restoreSelected": "선택 항목 복원({count})", "restoreComplete": "복원 완료: 성공 {success}, 건너뜀 {skipped}, 실패 {failed}.", "restoreFailed": "이름/유형 복원 실패: {error}", "modeLabel": "생성 방식", "modeAnimated": "애니메이션(첫 번째 애니메이션)", "modeStatic": "정지 이미지(setup pose)", "strategyLabel": "생성 전략", "strategySize": "최소 파일(느림)", "strategySpeed": "최고 속도(빠름)", "statusLabel": "상태", "statusStarting": "시작 중…", "libraryLabel": "라이브러리", "statsLabel": "통계", "filterAll": "전체", "filterOk": "성공", "filterFail": "실패", "filterWarn": "경고", "filterError": "오류", "unknownError": "알 수 없는 오류", "scriptError": "스크립트 오류: {error}", "promiseError": "처리되지 않은 Promise 오류: {error}", "uncategorized": "미분류", "reasonQuiet": "정적 감지", "reasonFallback": "대체 검색", "none": "없음", "complete": "완전", "incomplete": "불완전", "statusLoaded": "스크립트 {version}을(를) 불러왔습니다. Eagle 이벤트를 기다리는 중…", "statusEagleMissing": "Eagle API를 사용할 수 없음", "statusListening": "감시 중", "statusListenFailed": "감시 실패", "statusAutoOff": "감시 중(자동 생성 꺼짐)", "statusNoLibrary": "라이브러리 경로를 가져올 수 없음", "statusPairing": "새 에셋 연결 중…", "statusPairingProgress": "연결 중 {current}/{total}", "statusRendering": "프레임 렌더링 중 {current}/{total}(대기 {queued})", "statusGenerating": "썸네일 생성 중… 남은 항목 {queued}", "statusPaused": "일시 정지됨(진행 창에서 계속하거나 취소하세요)", "statusAutoSkipped": "자동 생성이 꺼져 있어 이번 묶음을 건너뛰었습니다", "statusStartFailed": "시작 실패: {error}", "stats": "묶음 {batches} · 추가 {added} · Spine {spine} · 완전 {complete} · 생성 {generated} · 건너뜀 {skipped} · 실패 {failed}", "modulesMissing": "로컬 모듈이 로드되지 않음: {modules}", "moduleLoadError": "로컬 모듈이 로드되지 않았습니다. index.html의 script 순서를 확인하세요: {modules}", "version": "플러그인 코드 버전 {version}", "pluginCreated": "플러그인 생성됨: {name}", "settingsReadFailed": "설정을 읽지 못해 기본값을 사용합니다(자동 생성 꺼짐): {error}", "settingsSaveFailed": "설정 저장 실패: {error}", "autoEnabled": "자동 생성을 켰습니다. 새로 가져오는 Spine 에셋에 썸네일을 생성합니다.", "autoDisabled": "자동 생성을 껐으며 대기 큐를 비웠습니다.", "modeStaticLog": "생성 방식: 정지 이미지(항상 setup pose, PNG)", "modeAnimatedLog": "생성 방식: 애니메이션(첫 애니메이션을 WebP로 만들고 없으면 setup pose 사용)", "strategySpeedLog": "생성 전략: 최고 속도(대략 선택 후 가장 작은 1~2개 프로필만 생성)", "strategySizeLog": "생성 전략: 최소 파일(10개 프로필을 모두 생성하고 가장 작은 결과 선택)", "missingItem": "{label} 건너뜀: Eagle에서 항목을 찾을 수 없음", "suffixFixed": "{label}의 복합 확장자 수정 → {name}", "suffixFailed": "{label}의 복합 확장자 수정 실패: {error}", "existingThumbnail": "{label} 건너뜀: 사용자 지정 썸네일이 이미 있음", "thumbnailRejected": "Eagle이 이 썸네일을 거부했습니다", "generated": "{label} 생성됨 | {details} | Spine {version}", "generateFailed": "{label} 생성 실패: {error}", "cancelled": "생성 취소: 남은 {dropped}개를 버렸습니다. 완료 {done}개(성공 {generated}, 실패 {failed}, 건너뜀 {skipped})", "batchFailed": "가져오기 묶음 처리 실패: {error}", "batchFinished": "묶음 완료: {added}개 추가, 라이브러리 전체 {total}개({reason})", "recheck": "이전 불완전 에셋 {count}개 다시 확인", "noSpine": "이번 묶음에 Spine 에셋이 없습니다", "incompletePending": "불완전한 에셋 {count}개를 이후 가져오기 후 다시 확인합니다", "incompleteIgnored": "불완전한 에셋 {count}개가 있으며 이번 묶음에서는 처리하지 않습니다", "itemSummary": " {name} | {path} | {state} | 스켈레톤 {skeleton} | atlas {atlas} | 페이지 {pages}(누락 {missing})", "autoSkipped": "자동 생성이 꺼져 있어 이번 묶음의 에셋 {count}개를 건너뛰었습니다", "queued": "{added}개를 큐에 추가했습니다. 현재 대기 {queued}개{state}", "queuedRunning": "(처리 중)", "libraryInfoNoPath": "library.info()가 경로를 반환하지 않음: {info}", "libraryInfoFailed": "library.info() 호출 실패: {error}", "switchingLibrary": "라이브러리 전환: {path}", "noCreateEvent": "생성 이벤트를 받지 못해 직접 시작합니다", "watching": "{path} 감시 중(기존 항목 {count}개는 기록으로 간주하여 처리하지 않음)", "watchReadFailed": "에셋 디렉터리를 읽지 못함: {error}", "watchMissingDir": "에셋 디렉터리가 없음: {path}", "watchFailed": "감시 시작 실패: {error}", "fixSuffixAction": "{label}의 복합 확장자 수정", "renderAction": "{label} 렌더링", "setThumbnailAction": "{label} 썸네일 설정", "thumbnailDetailsAnimated": "애니메이션 {size}@{fps}fps/q{quality}/{kb}KB(목표 {target}KB)/ {frames}프레임 / 애니메이션 {animation}/{strategy}{limit}", "thumbnailDetailsStatic": "정지 이미지 {width}×{height}/{kb}KB{fallback}", "bestSpeed": "최고 속도", "bestSize": "최소 파일", "fallbackNote": "({text})", "fallbackNoAnimation": "스켈레톤에 애니메이션이 없습니다", "fallbackAnimatedFailed": "애니메이션 생성 실패: {error}", "limitNote": "(가장 작은 프로필도 목표 크기를 초과합니다. 썸네일 크기를 늘리세요)", "runSummary": "성공 {generated}, 실패 {failed}, 건너뜀 {skipped}, {seconds}초 소요." }, "progress": { "title": "Spine 썸네일", "generating": "애니메이션 썸네일 생성 중……", "waiting": "시작 대기 중…", "confirmPrompt": "이번 작업을 취소할까요?", "resume": "계속", "cancel": "취소 확인", "stop": "중지", "confirm": "확인", "generatedConfirm": "썸네일 {done}개를 생성했습니다. 취소할까요?", "complete": "완료", "completed": "완료 {done} / {total}({percent}%)" } }