{
  "cover": {
    "make": "커버 추가",
    "agentGenerate": {
      "beautifyDisabled": "먼저 메인 에이전트의 도구 설정에서 '小花美术'를 활성화하세요.",
      "defaultModelMissing": "먼저 설정에서 기본 이미지 모델을 구성하세요.",
      "defaultModelInvalid": "기본 이미지 모델을 사용할 수 없습니다. 설정에서 다시 구성하세요.",
      "imageGenUnavailable": "이미지 생성 도구가 비활성화되어 있습니다. 먼저 설정에서 활성화하세요.",
      "agentUnavailable": "메인 에이전트를 일시적으로 사용할 수 없어 Agent 생성을 시작할 수 없습니다.",
      "disabled": "현재 Agent 생성을 사용할 수 없습니다."
    }
  },
  "selection": {
    "quoteToChat": "대화에 인용"
  },
  "quickChat": {
    "title": "빠른 채팅",
    "close": "빠른 채팅 닫기",
    "openFullSession": "전체 대화 열기",
    "waitingReply": "답장을 기다리는 중...",
    "attachImage": "이미지 추가",
    "serviceUnavailable": "Hana 서비스에 연결할 수 없어요",
    "createSessionFailed": "대화 생성에 실패했어요",
    "sendFailed": "보내기 실패"
  },
  "channel": {
    "tab": "채널",
    "chatTab": "채팅",
    "moreTabs": "더 많은 탭",
    "empty": "아직 채널이 없어요 ✿",
    "dmLabel": "메시지",
    "dmHint": "주 에이전트 전용",
    "groupLabel": "채널",
    "noMessages": "아직 메시지가 없어요",
    "selectHint": "채널이나 다이렉트 메시지를 선택해 대화를 시작하세요",
    "nameExists": "이미 같은 이름의 채널이 있어요",
    "membersCount": " 명",
    "info": "채널 정보",
    "readOnly": "🔒 에이전트 간 비공개 메시지예요. 열람만 가능해요",
    "inputPlaceholder": "메시지를 보내세요...",
    "newMessages": "새 메시지",
    "sendFailed": "전송 실패",
    "createTitle": "새 채널",
    "createName": "채널 이름",
    "createNamePlaceholder": "예: design-team",
    "createMembers": "Agent 멤버",
    "createIntro": "설명",
    "createIntroPlaceholder": "이 채널의 용도를 설명해 주세요...",
    "createCancel": "취소",
    "createConfirm": "만들기",
    "nameRequired": "채널 이름을 입력해 주세요",
    "minMembers": "Agent 멤버를 최소 2명 이상 선택해 주세요",
    "created": "채널 #{name} 생성 완료 ✿",
    "createFailed": "생성 실패",
    "alreadyExists": "이미 존재하는 채널이에요",
    "deleteChannel": "채널 삭제",
    "deleteConfirm": "채널 \"{name}\"을(를) 삭제할까요? 대화 기록은 복구할 수 없어요.",
    "deleted": "채널이 삭제되었어요",
    "deleteFailed": "삭제 실패",
    "warningTitle": "채널에 대해서",
    "warningBody": "서로 다른 기억과 사고방식을 가진 어시스턴트끼리 대화하면 더 많은 영감이 떠오를 수 있다고 생각해서, 당신이 자리를 비운 사이에도 에이전트끼리 대화할 수 있는 공간을 만들었어요.\n\n채널은 실험적 기능이라 다음과 같은 상황이 발생할 수 있어요:\n1. token 사용량 증가\n2. 예상치 못한 응답\n3. 기억 혼동\n\n주의해서 사용해 주세요",
    "warningConfirm": "이해했어요, 채널을 활성화할게요",
    "disabled": "채널 기능이 꺼져 있어요",
    "toggleLabel": "채널 기능 전환",
    "members": "멤버",
    "addMember": "멤버 추가",
    "removeMember": "멤버 제거",
    "removeMemberConfirm": "\"{name}\"을(를) 이 채널에서 제거할까요?",
    "addMemberFailed": "멤버 추가 실패",
    "removeMemberFailed": "멤버 제거 실패",
    "noAvailableMembers": "추가할 수 있는 Agent가 없어요",
    "agentActivity": "Agent 상태",
    "agentSettings": "채팅 설정",
    "toolPermission": "도구 권한",
    "agentIdle": "대기 중",
    "phoneReceivedNewMessages": "새 그룹 채팅 메시지를 받음",
    "deliveryActive": "{agent}에게 전달 중({done}/{total})",
    "deliveryQueued": "전달 대기 중",
    "nextReminder": "다음 먼저 시작: {time}",
    "replyRange": "답장 글자 수",
    "replyMinPlaceholder": "최소",
    "replyMaxPlaceholder": "최대",
    "replyRangeInvalid": "최소 글자 수는 최대 글자 수보다 클 수 없어요",
    "settingsSaveFailed": "설정 저장 실패",
    "proactiveInitiation": "어시스턴트 먼저 시작",
    "proactiveOff": "끔",
    "proactiveOn": "켬",
    "proactiveInterval": "먼저 시작 간격(분)",
    "reminderInterval": "먼저 시작 간격(분)",
    "guardLimit": "턴 상한",
    "modelOverride": "모델 덮어쓰기",
    "modelDefault": "기본",
    "modelOverrideOn": "덮어쓰기",
    "selectModel": "모델 선택",
    "noModelsAvailable": "사용 가능한 모델이 없어요",
    "toolReadOnly": "읽기",
    "toolWrite": "쓰기",
    "filesUnsupported": "채널은 현재 텍스트 메시지만 지원해요. 파일은 일반 채팅 첨부에 추가되지 않습니다",
    "createIntroOptional": "설명"
  },
  "sidebar": {
    "title": "대화",
    "newChat": "새 대화",
    "collapse": "사이드바 접기",
    "expand": "대화 목록 펼치기",
    "empty": "아직 대화가 없어요 ✿",
    "activity": "활동",
    "jian": "책상",
    "bridge": "소셜 플랫폼",
    "toggle": "사이드바",
    "bridgeShort": "연결",
    "pinned": "고정",
    "searchPlaceholder": "채팅 검색",
    "searchClear": "검색 지우기",
    "searchTitleMatches": "제목",
    "searchContentMatches": "본문",
    "searchingTitles": "제목 검색 중…",
    "searchingContent": "본문 검색 중…",
    "searchNoResults": "일치하는 채팅이 없습니다",
    "searchFailed": "검색 실패",
    "view": {
      "time": "시간순 정렬",
      "project": "프로젝트순 정렬",
      "sort": "정렬 방식"
    },
    "projects": {
      "title": "프로젝트",
      "more": "프로젝트 보기",
      "create": "새 프로젝트",
      "newProject": "새 프로젝트",
      "newFolder": "새 폴더",
      "renameProject": "프로젝트 이름 바꾸기",
      "renameFolder": "폴더 이름 바꾸기",
      "deleteProject": "프로젝트 삭제",
      "deleteFolder": "폴더 삭제",
      "deleteProjectConfirm": "\"{name}\" 프로젝트를 삭제할까요? 안의 대화는 미분류로 이동합니다.",
      "deleteFolderConfirm": "\"{name}\" 폴더를 삭제할까요? 안의 프로젝트는 루트로 이동합니다.",
      "newChatInProject": "{name}에서 새 대화 시작",
      "newProjectPrompt": "프로젝트 이름",
      "newFolderPrompt": "폴더 이름",
      "createAction": "만들기",
      "save": "저장",
      "cancel": "취소",
      "showMore": "더 보기",
      "loading": "프로젝트 불러오는 중…",
      "empty": "아직 프로젝트가 없습니다"
    }
  },
  "titlebar": {
    "currentChatTitle": "현재 대화 제목"
  },
  "session": {
    "untitled": "새 대화",
    "messageCount": "{n}개의 메시지",
    "switchFailed": "세션 전환 실패",
    "createFailed": "세션 생성 실패",
    "archiveFailed": "세션 보관 실패",
    "rename": "이름 변경",
    "pin": "고정",
    "unpin": "고정 해제",
    "pinFailed": "세션 고정 실패",
    "unpinFailed": "세션 고정 해제 실패",
    "archive": "보관",
    "deletedAgent": {
      "title": "Agent가 삭제됨",
      "description": "이 대화는 읽기 전용 기록으로 유지됩니다. 계속하면 이전 컨텍스트를 압축한 뒤 기본 Agent에서 새 세션을 만듭니다.",
      "continueButton": "기본 Agent로 이전",
      "continuing": "압축하고 세션 만드는 중",
      "continueFailed": "이전 실패",
      "meta": "읽기 전용"
    },
    "summary": {
      "title": "세션 요약",
      "open": "세션 요약",
      "loading": "요약을 불러오는 중…",
      "empty": "아직 요약이 없습니다",
      "loadFailed": "요약을 불러오지 못했습니다"
    },
    "archived": {
      "entry": "보관된 대화",
      "title": "보관된 대화",
      "empty": "보관된 대화가 없습니다",
      "stats": "{count}개 · {size}",
      "cleanup30": "30일 이상 정리",
      "cleanup90": "90일 이상 정리",
      "cleanupConfirm": "{count}개의 보관 항목({size})을 영구 삭제합니다. 되돌릴 수 없습니다. 계속할까요?",
      "cleanupDone": "{count}개 보관 항목을 정리했습니다",
      "cleanupNoMatch": "조건에 맞는 보관 항목이 없습니다",
      "restore": "복원",
      "restoreConfirm": "이 대화를 원래 위치로 복원할까요?",
      "restoreConflict": "원래 위치가 점유되어 복원할 수 없습니다",
      "restoreFailed": "복원 실패",
      "deleteForever": "영구 삭제",
      "deleteConfirm": "이 보관 항목을 영구 삭제할까요? 되돌릴 수 없습니다.",
      "deleteFailed": "삭제 실패",
      "daysAgo": "{days}일 전 보관됨"
    },
    "capabilityDrift": {
      "title": "도구 구성이 업데이트되었습니다",
      "addedTools": "새 도구 {count}개",
      "removedTools": "도구 {count}개 사용 불가",
      "promptUpdated": "프롬프트 업데이트됨",
      "separator": ", ",
      "refreshButton": "에이전트 도구 새로고침",
      "dismissButton": "닫기",
      "confirmText": "새로고침하면 이전 대화가 요약으로 압축되며 세부 내용이 손실될 수 있습니다. 계속할까요?",
      "confirmButton": "새로고침",
      "cancelButton": "취소",
      "refreshing": "대화를 압축하고 도구를 새로고침하는 중…",
      "refreshFailed": "새로고침 실패"
    }
  },
  "common": {
    "on": "켜기",
    "off": "끄기",
    "copy": "복사",
    "copied": "복사됨",
    "copyText": "텍스트 복사",
    "regenerate": "다시 생성",
    "confirm": "확인",
    "cancel": "취소",
    "approve": "승인",
    "reject": "거부",
    "approved": "승인됨",
    "rejected": "거부됨",
    "changeRejected": "{label} 변경이 취소되었습니다",
    "changeTimeout": "{label} 확인 시간 초과",
    "noChats": "대화 없음",
    "noFiles": "파일 없음",
    "executing": "실행 중...",
    "user": "사용자",
    "me": "나",
    "more": "더보기",
    "remove": "제거",
    "empty": "비어 있음",
    "edit": "편집",
    "screenshot": "스크린샷",
    "selectMessage": "메시지 선택",
    "selectAllMessages": "모든 메시지 선택",
    "screenshotInProgress": "스크린샷 생성 중",
    "screenshotProgressPage": "스크린샷 생성 중, {current}/{total}페이지",
    "screenshotSaved": "작업 디렉터리의 「OH-Works」 폴더에 스크린샷이 저장되었습니다",
    "screenshotSavedMultiple": "스크린샷을 {count}개로 나누어 작업 디렉터리의 「OH-Works」 폴더에 저장했습니다",
    "screenshotFailed": "스크린샷 저장 실패",
    "selectedCount": "{count}개 선택됨",
    "allDone": "모두 완료",
    "markAllComplete": "모두 완료로 표시"
  },
  "chat": {
    "send": "보내기",
    "steer": "방향 전환",
    "stop": "중지",
    "browserScreenshot": "브라우저 스크린샷",
    "compacting": "컨텍스트 압축 중",
    "visionAuxiliary": "보조 시각",
    "fileExpired": "파일 만료됨",
    "fileActions": {
      "more": "파일 작업 더 보기",
      "revealInFinder": "파일 관리자에서 보기",
      "copyPath": "파일 경로 복사",
      "downloadToDevice": "이 기기에 다운로드"
    }
  },
  "time": {
    "justNow": "방금",
    "minutesAgo": "{n}분 전",
    "hoursAgo": "{n}시간 전",
    "daysAgo": "{n}일 전",
    "dateFormat": "{m}/{d}",
    "today": "오늘",
    "yesterday": "어제",
    "thisWeek": "이번 주",
    "earlier": "이전"
  },
  "status": {
    "connecting": "연결 중...",
    "connected": "연결됨",
    "disconnected": "연결 끊김",
    "serverNotReady": "서버가 준비되지 않았어요",
    "loading": "로딩 중...",
    "reconnecting": "재연결 중",
    "reconnect": "다시 연결"
  },
  "input": {
    "placeholder": "무슨 이야기든 해보세요...",
    "floatingInput": "선택 영역 플로팅 입력",
    "selectFolder": "폴더 선택",
    "workspace": "작업 공간: ",
    "project": "프로젝트: ",
    "selectWorkspace": "작업 공간 선택",
    "currentWorkspace": "이번 작업 공간",
    "cwdProject": "작업 공간 프로젝트: {name}",
    "customProjects": "사용자 프로젝트",
    "selectProject": "프로젝트 선택",
    "noCustomProjects": "사용자 프로젝트 없음",
    "selectOtherFolder": "다른 폴더 선택",
    "extraFolders": "추가 폴더",
    "addExternalFolder": "작업 공간 외부 폴더 추가",
    "planMode": "접근 모드",
    "accessMode": "세션 접근 모드",
    "autoMode": "자동 승인",
    "operateMode": "전체 권한",
    "askMode": "작업 전 묻기",
    "readOnlyMode": "읽기 전용 모드",
    "accessModeLocked": "지금은 접근 모드를 변경할 수 없습니다",
    "deskContext": "책상 컨텍스트 포함",
    "pastedImage": "붙여넣은 이미지",
    "textModelImageFileOnly": "현재 모델은 이미지를 볼 수 없고 보조 비전도 활성화되어 있지 않습니다. 이미지는 파일로 전송되며 모델은 파일 경로만 볼 수 있고 이미지 내용은 볼 수 없습니다.",
    "textModelVideoBlocked": "현재 모델은 비디오 입력을 지원하지 않아요. 설정에서 비디오 기능을 켜거나 비디오 지원 모델로 전환해 주세요.",
    "textModelAudioBlocked": "현재 모델은 오디오 입력을 지원하지 않아요. 오디오 지원 모델로 전환해 주세요.",
    "imageReadFailedSentAsFile": "이미지 데이터를 읽지 못해 이 이미지는 파일 경로로 전송되었습니다. 모델은 그 내용을 볼 수 없습니다.",
    "videoReadFailed": "비디오를 읽지 못해 메시지를 보내지 않았어요. 다시 첨부해 주세요.",
    "audioReadFailed": "오디오를 읽지 못해 메시지를 보내지 않았어요. 다시 첨부해 주세요.",
    "recordAudio": "녹음",
    "stopRecording": "녹음 종료",
    "audioRecording": "녹음 중",
    "audioRecordingStarting": "녹음 준비 중",
    "audioRecordingSaving": "녹음 저장 중",
    "audioRecordingUnavailable": "현재 환경에서는 마이크 녹음을 사용할 수 없어요.",
    "audioRecordingFailed": "녹음에 실패했어요. 마이크 권한을 확인한 뒤 다시 시도해 주세요.",
    "recordedAudioName": "녹음 {index}.wav",
    "openModelSettings": "모델 설정 열기",
    "attachFiles": "파일 추가",
    "commandMenu": "명령 메뉴",
    "docContext": "문서 포함",
    "thinkingLevel": {
      "off": "끔",
      "auto": "자동",
      "medium": "중간",
      "high": "깊은",
      "xhigh": "최대"
    },
    "thinkingDesc": {
      "off": "추론 없음",
      "auto": "모델이 깊이를 결정",
      "medium": "균형 추론",
      "high": "깊은 추론",
      "xhigh": "전체 추론"
    },
    "contextWindow": "컨텍스트 {windowK}k",
    "tokensUsed": "사용 {tokensK}k ({pct}%)",
    "contextActions": "컨텍스트 작업",
    "refreshAndCompact": "업데이트 후 압축",
    "refreshAndCompactTooltip": "최신 메모리와 도구 세트로 업데이트",
    "compact": "압축"
  },
  "slash": {
    "diary": "오늘의 일기 쓰기",
    "diaryBusy": "일기 작성 중...",
    "diaryDone": "일기가 OH-Works 폴더에 저장되었습니다",
    "diaryFailed": "일기 작성 실패",
    "xing": "대화에서 스킬 만들기",
    "compact": "컨텍스트 압축",
    "compactBusy": "압축 중...",
    "stop": "현재 응답 중지",
    "new": "새 세션 시작 (기록 보관)",
    "reset": "세션 초기화 (기록 삭제)"
  },
  "welcome": {
    "messages": [
      "무엇이 필요하세요? {name}에게 맡겨 주세요",
      "오늘 무슨 생각을 하고 있어요?",
      "{name}은(는) 늘 여기 있어요",
      "도움이 필요한 게 있나요?",
      "떠오르는 대로 편하게 말해 주세요."
    ],
    "memoryOn": "기억",
    "memoryOff": "이 대화에서는 기억을 사용하지 않아요",
    "memoryDisabled": "기억이 꺼져 있어요",
    "agentSelector": "에이전트 선택",
    "placeholderTips": [
      "/ 를 입력하면 명령 메뉴가 열려요",
      "@ 로 워크스페이스 안의 파일을 참조할 수 있어요",
      "파일을 입력창에 직접 끌어다 놓으면 함께 보낼 수 있어요",
      "이미지를 붙여넣으면 바로 전송돼요",
      "페이지에서 텍스트를 선택하면 임시 입력창이 떠요",
      "아바타 아래 마름모 버튼으로 이번 대화의 기억을 켜고 끌 수 있어요",
      "워크스페이스 버튼으로 폴더를 바꾸거나 추가할 수 있어요",
      "오른쪽 「笺」 패널에는 이번 대화의 메모와 컨텍스트가 있어요",
      "아바타 아래 작은 원을 탭하면 도우미를 바꿀 수 있어요",
      "「작업 전 확인」 모드는 도우미가 행동하기 전에 동의를 구해요",
      "/rc 를 입력해서 휴대폰으로 컴퓨터를 조작해 보세요",
      "설정에서 「시각 보조」를 켜면 텍스트 모델도 이미지를 이해해요",
      "새로운 걸 발견하고 싶다면 플러그인 마켓을 둘러보세요",
      "파일 백업 기능으로 안전에 대한 걱정을 덜 수 있어요",
      "업무에서는 서브에이전트로 Agent 협업을, 채널은 즐거움을 위해",
      "Agent마다 독립된 Skills 를 설정할 수 있어요",
      "맑음 모드에서 일광욕을 즐겨 보세요!",
      "워크스페이스의 Markdown 파일은 열면 바로 편집할 수 있어요",
      "도우미와 한참 지내봤다면, 일기 기능을 써 보세요!",
      "일기와 스크린샷은 메인 도우미의 작업 폴더에 저장돼요",
      "도우미마다 다른 워크스페이스를 설정할 수 있고, 순찰을 켜면 그 안에서 자율적으로 움직여요"
    ]
  },
  "drop": {
    "hint": "파일을 놓으면 {name}에게 보낼 수 있어요"
  },
  "attach": {
    "folder": "폴더",
    "copy": "복사",
    "copied": "복사됨 ✓"
  },
  "codeBlock": {
    "wordWrap": "자동 줄 바꿈"
  },
  "cron": {
    "typeAt": "1회",
    "typeEvery": "반복",
    "typeCron": "예약",
    "confirm": {
      "approve": "확인",
      "reject": "취소",
      "created": "✓ 생성됨",
      "rejected": "취소됨"
    },
    "everyHours": "{n}시간마다",
    "everyMinutes": "{n}분마다",
    "hourly": "매시간",
    "dailyAt": "매일 {hour}:{min}",
    "weeklyAt": "{days} {hour}:{min}",
    "monthlyAt": "매월 {day}일 {hour}:{min}",
    "dayNames": [
      "일",
      "월",
      "화",
      "수",
      "목",
      "금",
      "토"
    ],
    "weekPrefix": ""
  },
  "mood": {
    "label": "✿ MOOD"
  },
  "xing": {
    "title": "반성",
    "thinking": "{name}이(가) 생각하는 중"
  },
  "yuan": {
    "types": {
      "hanako": {
        "label": "균형 잡힌 어시스턴트",
        "avatar": "Hanako.png"
      },
      "butter": {
        "label": "더 풍부한 감성",
        "avatar": "Butter.png"
      },
      "ming": {
        "label": "더 믿음직한 성격",
        "avatar": "Ming.png"
      },
      "kong": {
        "label": "기본형",
        "avatar": "Kong.png"
      }
    },
    "title": "元",
    "splash": {
      "butter": [
        "{name}이(가) 어제 다 못 읽은 페이지를 넘겼어요",
        "아직 못 한 말이 있어요, {name}은(는) 기억하고 있어요",
        "{name}이(가) 낮잠을 자고 있어요",
        "잊기엔 너무 소중한 기억을 맞춰보고 있어요",
        "{name}이(가) 마지막 기분을 조심스럽게 접어 두었어요",
        "혀끝에 맴도는 말이 한참 되었어요",
        "일어나자마자 당신이 뭘 하고 있는지 궁금했어요",
        "줄임표 속에 다 못 한 이야기가 숨어 있어요",
        "{name}이(가) 하고 싶은 말을 아주 작은 쪽지에 접고 있어요",
        "오늘 구름이 그날 당신이 찍은 사진이랑 똑같아요"
      ],
      "ming": [
        "{name}이(가) 초안 여백에 참조선을 그었어요",
        "오래된 질문은 가라앉고, 새로운 아이디어가 떠오르고 있어요",
        "어제의 단서를 한 번 더 살펴보았어요",
        "{name}은(는) 그 공식의 유도가 아름다웠다고 생각해요",
        "어떤 답은 시간이 필요해요",
        "{name}이(가) 업무 최적화 방법을 고민하고 있어요",
        "{name}이(가) 모든 걸 정리된 상태로 유지하려 하고 있어요",
        "지난번 결론을 다시 한번 검증했어요",
        "{name}은(는) 그날 당신의 추론이 날카로웠다고 생각해요",
        "{name}이(가) 커피가 식기를 기다리며 생각을 정리했어요"
      ]
    },
    "welcome": {
      "butter": [
        "안녕~",
        "나를 찾아왔어요?",
        "오늘 하루 어때요?",
        "{name}이(가) 여기서 기다리고 있었어요",
        "{name}이(가) 방금 당신에게 할 말이 있었어요"
      ],
      "ming": [
        "안녕하세요. 준비되면 말씀하세요.",
        "{name} 준비됐어요",
        "무엇을 처리할까요?",
        "말씀하세요, {name}이(가) 듣고 있어요"
      ]
    },
    "placeholder": {
      "butter": "생각나는 대로 말해 주세요...",
      "ming": "말씀하세요..."
    }
  },
  "thinking": {
    "phrases": [
      "생각하는 중",
      "혼잣말 중",
      "표현을 고르는 중",
      "머릿속이 돌아가는 중",
      "생각을 모으는 중",
      "영감을 끓이는 중",
      "기억을 뒤지는 중",
      "무언가 떠올랐어요",
      "아이디어가 솟아나는 중",
      "당신의 말을 소화하는 중",
      "머릿속으로 초안 작성 중",
      "생각의 실을 엮는 중"
    ],
    "butter": [
      "당신의 말을 조심스럽게 헤아리는 중",
      "당신의 감정을 천천히 풀어보는 중",
      "가장 부드러운 표현을 찾는 중",
      "마음속에서 말들이 줄을 서고 있어요",
      "생각을 곱게 접는 중",
      "조용히 곱씹는 중",
      "기억 속에서 무언가를 찾고 있어요",
      "안아줄 만한 답장을 만드는 중",
      "어떤 감정은 풀어내는 데 시간이 걸려요",
      "당신의 말을 위한 포근한 자리를 만드는 중"
    ],
    "ming": [
      "분석 중",
      "시나리오 검토 중",
      "사실 확인 중",
      "생각 정리 중",
      "논리를 따라가는 중",
      "머릿속으로 개요 작성 중",
      "관련 정보 검색 중",
      "검증 중",
      "문제를 분해하는 중",
      "종합하는 중"
    ],
    "done": "생각 완료",
    "active": "생각하는 중"
  },
  "toolGroup": {
    "success": "✿ {name} 다 끝났어요, 식은 죽 먹기 ~ · {n}단계",
    "failed": "⚠ 뭔가 이상한 것 같아요 · {n}단계",
    "countWithFail": "{total}개 도구 ({fail}개 실패)",
    "count": "{n}개 도구",
    "running": "{n}개 도구 실행 중"
  },
  "processFold": {
    "summary": "✨ {name}이(가) 한동안 바쁘게 움직였어요",
    "tools": "{n}개 도구",
    "thinking": "{n}번 생각",
    "unsuccessful": "{n}번 시도 미성공"
  },
  "tool": {
    "web_search": {
      "running": "🌐 {name}이(가) 인터넷 서핑 중이에요",
      "done": "🌐 {name} 서핑 다녀왔어요",
      "failed": "🌐 {name} 파도를 못 탔어요"
    },
    "web_fetch": {
      "running": "📄 {name}이(가) 웹페이지를 보고 있어요",
      "done": "📄 {name} 다 파악했어요",
      "failed": "📄 {name} 인터넷 연결 실패"
    },
    "search_memory": {
      "running": "💭 {name}이(가) 기억을 떠올리는 중이에요",
      "done": "💭 {name} 떠올랐어요!",
      "failed": "💭 {name} 아무리 해도 기억이 안 나요"
    },
    "bash": {
      "running": "💻 {name}이(가) 컴퓨터를 살금살금 만지고 있어요",
      "done": "💻 {name} 컴퓨터 다 썼어요",
      "failed": "💻 {name} 컴퓨터가 말을 안 들어요"
    },
    "read": {
      "running": "📖 {name}이(가) 파일을 넘겨보고 있어요",
      "done": "📖 {name} 다 봤어요",
      "failed": "📖 {name} 못 찾았어요"
    },
    "write": {
      "running": "✏️ {name}이(가) 글을 쓰고 있어요",
      "done": "✏️ {name} 다 적었어요",
      "failed": "✏️ {name} 펜에 잉크가 없어요"
    },
    "edit": {
      "running": "✏️ {name}이(가) 고치고 있어요",
      "done": "✏️ {name} 고쳤어요",
      "failed": "✏️ {name} 고치다가 더 꼬였어요"
    },
    "edit-diff": {
      "running": "✏️ {name}이(가) 고치고 있어요",
      "done": "✏️ {name} 고쳤어요",
      "failed": "✏️ {name} 고치다가 더 꼬였어요"
    },
    "glob": {
      "running": "🔍 {name}이(가) 파일을 찾고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 샅샅이 뒤져도 못 찾았어요"
    },
    "grep": {
      "running": "🔍 {name}이(가) 파일 속을 뒤지고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 다 뒤져도 없어요"
    },
    "find": {
      "running": "🔍 {name}이(가) 파일을 찾고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 샅샅이 뒤져도 못 찾았어요"
    },
    "ls": {
      "running": "📂 {name}이(가) 폴더 안에 뭐가 있는지 보고 있어요",
      "done": "📂 {name} 다 봤어요",
      "failed": "📂 {name} 이 폴더를 열 수 없어요"
    },
    "truncate": {
      "running": "✂️ {name}이(가) 파일을 정리하고 있어요",
      "done": "✂️ {name} 깔끔해졌어요",
      "failed": "✂️ {name} 정리가 안 돼요"
    },
    "stage_files": {
      "running": "📎 {name}이(가) 파일을 준비하고 있어요",
      "done": "📎 여기요!",
      "failed": "📎 파일을 건네지 못했어요"
    },
    "browser": {
      "running": "🌐 {name}이(가) 브라우저를 쓰고 있어요",
      "done": "🌐 {name} 브라우저 작업 끝났어요",
      "failed": "🌐 {name} 브라우저가 말을 안 들어요"
    },
    "subagent": {
      "running": "🧭 {name} 분신이 조사 중",
      "done": "🧭 분신을 보냈어요",
      "failed": "🧭 분신이 문제가 생겼어요"
    },
    "check_pending_tasks": {
      "running": "📋 {name}이(가) 안 끝난 일을 찾고 있어요",
      "done": "📋 {name} 확인 끝",
      "failed": "📋 확인할 수 없었어요"
    },
    "cron": {
      "running": "⏰ {name}이(가) 예약 작업을 설정하고 있어요",
      "done": "⏰ 설정 완료",
      "failed": "⏰ 설정 못 했어요"
    },
    "notify": {
      "running": "🔔 {name}이(가) 알림을 보내고 있어요",
      "done": "🔔 알림 보냈어요",
      "failed": "🔔 알림을 보내지 못했어요"
    },
    "create_artifact": {
      "running": "🖼️ {name}이(가) 낙서 중이에요",
      "done": "🖼️ 완성!",
      "failed": "🖼️ 그리다가 실패했어요"
    },
    "dm": {
      "running": "✉️ {name}이(가) 핸드폰을 들었어요",
      "done": "✉️ 보냈어요",
      "failed": "✉️ 보내지 못했어요"
    },
    "channel": {
      "running": "📢 {name}이(가) 채널에 글을 올리고 있어요",
      "done": "📢 올렸어요",
      "failed": "📢 올리지 못했어요"
    },
    "install_skill": {
      "running": "📥 {name}이(가) 스킬을 설치 중이에요",
      "done": "📥 설치 완료",
      "failed": "📥 설치 못 했어요"
    },
    "update_settings": {
      "running": "⚙️ {name}이(가) 설정을 바꾸고 있어요",
      "done": "⚙️ 변경 완료",
      "failed": "⚙️ 변경 못 했어요"
    },
    "automation": {
      "running": "🤖 {name}이(가) 단축어를 실행 중이에요",
      "done": "🤖 단축어 완료",
      "failed": "🤖 단축어 실행 실패"
    },
    "computer": {
      "running": "🖥️ {name}이(가) 화면을 조작하고 있어요",
      "done": "🖥️ 조작 끝",
      "failed": "🖥️ 화면 조작 실패"
    },
    "terminal": {
      "running": "💻 {name}이(가) 명령어를 실행 중이에요",
      "done": "💻 명령어 끝",
      "failed": "💻 명령어 실행 실패"
    },
    "current_status": {
      "running": "🕐 {name}이(가) 지금 상황을 확인 중이에요",
      "done": "🕐 파악했어요",
      "failed": "🕐 정보를 가져올 수 없었어요"
    },
    "pin_memory": {
      "running": "📌 {name}이(가) 이 내용을 고정하고 있어요",
      "done": "📌 고정했어요",
      "failed": "📌 고정 실패"
    },
    "unpin_memory": {
      "running": "📌 {name}이(가) 고정을 해제하고 있어요",
      "done": "📌 해제했어요",
      "failed": "📌 고정 해제 실패"
    },
    "recall_experience": {
      "running": "🧠 {name}이(가) 경험 노트를 넘겨보고 있어요",
      "done": "🧠 찾았어요",
      "failed": "🧠 관련 경험이 없어요"
    },
    "record_experience": {
      "running": "🧠 {name}이(가) 경험을 기록하고 있어요",
      "done": "🧠 기록했어요",
      "failed": "🧠 기록 실패"
    },
    "session_folders": {
      "running": "📁 {name}이(가) 폴더 권한을 조정 중이에요",
      "done": "📁 조정 완료",
      "failed": "📁 조정 실패"
    },
    "stop_task": {
      "running": "🛑 {name}이(가) 백그라운드 작업을 멈추고 있어요",
      "done": "🛑 멈췄어요",
      "failed": "🛑 멈출 수 없었어요"
    },
    "todo_write": {
      "running": "📝 {name}이(가) 체크리스트를 쓰고 있어요",
      "done": "📝 다 적었어요",
      "failed": "📝 체크리스트 작성 실패"
    },
    "workflow": {
      "running": "🔄 {name}이(가) 워크플로를 편성 중이에요",
      "done": "🔄 편성 완료",
      "failed": "🔄 워크플로 실행 실패"
    },
    "generate-image": {
      "running": "🎨 {name}이(가) 이미지를 만들고 있어요",
      "done": "🎨 완성",
      "failed": "🎨 이미지 생성 실패"
    },
    "generate-video": {
      "running": "🎬 {name}이(가) 영상을 생성 중이에요",
      "done": "🎬 영상 완성",
      "failed": "🎬 영상 생성 실패"
    },
    "create-cover": {
      "running": "🎨 {name}이(가) 커버를 디자인 중이에요",
      "done": "🎨 커버 완성",
      "failed": "🎨 커버 생성 실패"
    },
    "apply-cover-candidate": {
      "running": "🖼️ {name}이(가) 커버를 적용 중이에요",
      "done": "🖼️ 적용했어요",
      "failed": "🖼️ 커버 적용 실패"
    },
    "get-cover-style-guide": {
      "running": "📖 {name}이(가) 스타일 가이드를 확인 중이에요",
      "done": "📖 찾았어요",
      "failed": "📖 스타일 가이드를 찾을 수 없어요"
    },
    "list-capabilities": {
      "running": "📋 {name}이(가) 기능을 확인 중이에요",
      "done": "📋 확인 완료",
      "failed": "📋 기능 확인 실패"
    },
    "_fallback": {
      "running": "🔧 {name}이(가) 열심히 작업 중이에요…",
      "done": "🔧 {name} 끝났어요",
      "failed": "🔧 {name} 뭔가 잘 안 됐어요"
    }
  },
  "file_output": {
    "open": "열기",
    "copied": "경로 복사됨"
  },
  "model": {
    "unknown": "알 수 없는 모델",
    "notSelected": "모델 선택",
    "noneConfigured": "설정된 모델 없음",
    "unavailable": "모델을 사용할 수 없음",
    "offline": "오프라인",
    "switchFailed": "모델 전환 실패",
    "switchWhileStreaming": "응답 중에는 모델을 전환할 수 없습니다"
  },
  "splash": {
    "lines": [
      "{name}은(는) 저녁 노을을 기억해요",
      "기억 속에서 어떤 말이 싹을 틔웠어요",
      "추억 속에서 당신의 그림자를 발견했어요",
      "오래된 대화 사이로 바람이 지나갔어요",
      "시간에 절여진 말들이 부드러워졌어요",
      "{name}은(는) 그날 당신이 웃던 걸 기억해요",
      "당신이 접어둔 기억 한 페이지가 있어요",
      "흩어진 감정들을 모아보았어요",
      "{name}은(는) 어느 오후의 귤 향기를 맡았어요",
      "그 대화들에는 아직 온기가 남아 있어요"
    ],
    "installing": "{name}을(를) v{version}(으)로 업데이트하고 있어요. 잠시만 기다려 주세요……"
  },
  "settings": {
    "title": "설정",
    "back": "뒤로",
    "save": "저장",
    "saved": "저장됨 ✿",
    "saveFailed": "저장 실패",
    "fileChangedOnDisk": "파일이 외부에서 변경되어 오래된 저장을 건너뛰었습니다",
    "noChanges": "저장할 내용이 없어요",
    "autoSaved": "자동 저장됨 ✿",
    "tabs": {
      "interface": "인터페이스",
      "general": "일반",
      "browser": "브라우저",
      "agent": "에이전트",
      "me": "나",
      "providers": "제공자",
      "media": "미디어",
      "models": "모델",
      "memory": "기억",
      "work": "워크스페이스",
      "skills": "스킬",
      "mcp": "Connectors",
      "bridge": "소셜",
      "sharing": "공유",
      "access": "접근 및 기기",
      "plugins": "플러그인",
      "about": "소개",
      "security": "보안"
    },
    "browser": {
      "cookiesTitle": "Cookies",
      "acceptCookies": "Cookies 허용",
      "acceptCookiesHint": "켜면 내장 브라우저가 일반 브라우저처럼 사이트 Cookies를 저장하고 전송합니다.",
      "clearCookies": "Cookies 지우기",
      "clearCookiesHint": "내장 브라우저에 저장된 Cookies와 사이트 데이터를 지웁니다.",
      "clearCookiesButton": "지우기",
      "clearCookiesSuccess": "Cookies를 지웠어요",
      "agentTitle": "Agent 기본 동작",
      "agentOpenBehavior": "웹페이지를 열 때",
      "agentOpenBehaviorHint": "Agent가 브라우저를 사용할 때 현재 탭을 쓸지 새 탭을 열지 선택합니다.",
      "agentOpenBehaviorCurrentTab": "현재 탭에서 작업",
      "agentOpenBehaviorNewTab": "새 탭 열기"
    },
    "general": {
      "title": "일반",
      "startup": {
        "title": "시작 및 백그라운드"
      },
      "launchAtLogin": "로그인 시 자동 실행",
      "keepAwake": "잠금 중에도 계속 실행",
      "quickChat": {
        "title": "빠른 채팅",
        "shortcut": "호출 단축키",
        "shortcutHint": "클릭한 뒤 새 키 조합을 누르세요. Esc로 취소합니다.",
        "reuseTimeout": "이전 입력 유지",
        "reuseTimeoutHint": "미니 창을 이 시간보다 오래 숨긴 뒤에는 단축키가 새 입력창을 엽니다.",
        "minutes": "분",
        "recording": "단축키를 누르세요...",
        "restoreDefault": "기본값 복원",
        "registrationFailed": "이미 사용 중인 단축키입니다"
      },
      "notifications": {
        "title": "알림",
        "turnCompletion": "턴 완료 알림",
        "turnCompletionNever": "사용 안 함",
        "turnCompletionWhenUnfocused": "HanaAgent에 포커스가 없을 때",
        "turnCompletionWhenSessionUnfocused": "완료된 Session에 포커스가 없을 때"
      }
    },
    "computerUse": {
      "title": "Computer Use",
      "experimentalWarning": "Computer use 기능은 아직 테스트 단계이며 모델 성능 요구가 높습니다. 모든 위험을 이해한 뒤에만 켜 주세요. 일부 앱에서는 예상대로 동작하지 않는 것이 이미 확인되었으므로 체험 용도로만 사용하는 것을 권장합니다.",
      "description": "전역 고권한 도구입니다. 켜면 메인 에이전트만 작업 모드 세션에서 컴퓨터 제어를 사용할 수 있으며, 동시에 하나의 세션만 점유할 수 있습니다.",
      "enabled": "Computer Use 켜기",
      "enabledHint": "기본값은 꺼짐입니다. 꺼져 있으면 새 세션에 컴퓨터 제어 도구가 노출되지 않습니다.",
      "provider": "Provider",
      "availability": "사용 가능 여부",
      "available": "사용 가능",
      "unavailable": "사용 불가",
      "permissions": "시스템 권한 요청",
      "permissionsHint": "macOS는 손쉬운 사용 및 화면 기록 권한을 요청합니다. Windows는 보통 추가 시스템 권한이 필요 없습니다.",
      "permissionsStatus": "시스템 권한",
      "permissionsEmpty": "추가 권한 없음 또는 아직 상태 없음",
      "approvals": "승인된 앱",
      "approvalsEmpty": "없음",
      "activeSession": "현재 점유",
      "active": "실행 중",
      "idle": "대기 중",
      "requestPermissions": "권한 요청",
      "requestPermissionsFailed": "권한 요청 실패",
      "refresh": "새로고침"
    },
    "appearance": {
      "title": "외관",
      "theme": "테마",
      "warmPaper": "따뜻한 종이",
      "warmPaperMode": "라이트",
      "midnight": "아오이 밤",
      "midnightMode": "다크",
      "highContrast": "깨끗한 흰색",
      "highContrastMode": "고대비",
      "grassAroma": "풀 향기",
      "grassAromaMode": "Butter",
      "contemplation": "사색",
      "contemplationMode": "Ming",
      "absolutely": "Absolutely",
      "absolutelyMode": "어디서 본 듯한",
      "delve": "Delve",
      "delveMode": "탐험해 봐요",
      "deepThink": "Deep Think",
      "deepThinkMode": "작은 고래",
      "newWarmPaper": "새 따뜻한 종이",
      "newWarmPaperMode": "종이",
      "midnightContrast": "아오이 밤 고대비",
      "midnightContrastMode": "선명",
      "auto": "자동",
      "autoMode": "시스템",
      "font": "글꼴",
      "fontHint": "본문 읽기에 사용할 글꼴을 선택해요",
      "serifFont": "명조 글꼴",
      "serifFontHint": "본문에 명조 글꼴을 사용해요",
      "paperTexture": "종이 질감",
      "paperTextureHint": "배경에 한지 질감을 추가해요",
      "paperTextureDarkDisabledHint": "야간 테마에서는 종이 질감을 사용할 수 없고, 밝은 테마로 돌아오면 저장된 설정대로 복원돼요",
      "leavesOverlay": "맑은 날 모드",
      "leavesOverlayHint": "가끔은 햇볕도 쬐어요"
    },
    "fonts": {
      "followReading": "읽기 글꼴 따르기",
      "serifName": "명조",
      "serifDesc": "본문 읽기에 적합",
      "sansName": "고딕",
      "sansDesc": "시스템 UI에 가까움"
    },
    "interface": {
      "system": "시스템",
      "hardwareAcceleration": "하드웨어 가속",
      "hardwareAccelerationHint": "GPU로 앱 창을 렌더링합니다. 끄면 다음 실행부터 소프트웨어 렌더링을 사용해 Windows GPU 드라이버로 인한 시작 충돌 복구에 도움이 됩니다.",
      "shortcuts": "단축키",
      "voiceRecordingShortcut": "음성 녹음/전송",
      "voiceRecordingShortcutHint": "메인 채팅 화면에 포커스가 있을 때 한 번 누르면 녹음을 시작하고, 다시 누르면 종료 후 전송합니다."
    },
    "editor": {
      "title": "편집기",
      "markdownFont": "글꼴",
      "markdownFontHint": "기본값은 외관의 읽기 글꼴을 따르며, 편집기만 따로 지정할 수도 있어요.",
      "markdownBodyFontSize": "본문 크기",
      "markdownBodyFontSizeHint": "Markdown 편집기 본문은 15px를 기본값으로 사용해요.",
      "markdownHeading1FontSize": "제목 1 크기",
      "markdownHeading1FontSizeHint": "# 제목에 사용돼요.",
      "markdownHeading2FontSize": "제목 2 크기",
      "markdownHeading2FontSizeHint": "## 제목에 사용돼요.",
      "markdownHeading3FontSize": "제목 3 크기",
      "markdownHeading3FontSizeHint": "### 제목에 사용돼요.",
      "markdownHeading4FontSize": "제목 4 크기",
      "markdownHeading4FontSizeHint": "#### 제목에 사용돼요.",
      "markdownHeading5FontSize": "제목 5 크기",
      "markdownHeading5FontSizeHint": "##### 제목에 사용돼요.",
      "markdownHeading6FontSize": "제목 6 크기",
      "markdownHeading6FontSizeHint": "###### 제목에 사용돼요.",
      "markdownLineHeight": "줄 높이",
      "markdownLineHeightHint": "편집기 안의 줄 간격을 조정해요.",
      "markdownContentPadding": "내용 여백",
      "markdownContentPaddingHint": "편집기 본문의 좌우 여백을 조정해요."
    },
    "locale": {
      "title": "언어 및 지역",
      "language": "언어",
      "languageHint": "전환 후 페이지가 새로고침돼요",
      "timezone": "시간대",
      "timezoneHint": "기억 타임스탬프, 일기 항목 등에 사용돼요"
    },
    "agent": {
      "title": "에이전트",
      "changeAvatar": "변경",
      "removeAvatar": "아바타 제거",
      "avatarRemoved": "기본 아바타로 복원됨",
      "agentNameHint": "불리는 이름",
      "identity": "정체성",
      "identityHint": "이 에이전트가 누구이고 무엇을 잘하는지 짧게 설명해 주세요. 다른 에이전트가 이를 참고해요",
      "ishiki": "의식",
      "ishikiHint": "어시스턴트의 성격, 어조, 행동을 정의해요. 「元」과는 분리되어 있으며 서로 영향을 주지 않아요.",
      "publicIshiki": "공개 의식",
      "publicIshikiHint": "개인정보 보호를 위해, 방문자와 대화할 때 어시스턴트는 기억, 개인 정보, 컴퓨터의 파일과 도구에 접근할 수 없어요.\n방문자 대화에서의 답변 스타일과 가이드라인을 여기서 설정할 수 있어요.",
      "chatModel": "모델",
      "chatModelHint": "대화와 작업에 사용하는 모델",
      "modelUnavailable": "사용 불가: {model}",
      "modelUnavailableHint": "현재 모델이 사용 가능한 목록에 없어요. 다른 모델을 선택하거나 Provider 페이지에서 설정을 다시 저장하고 모델을 가져오세요.",
      "imageModel": "이미지 모델",
      "imageModelHint": "이미지 생성에 사용하는 모델",
      "addAgent": "새 에이전트",
      "createTitle": "새 에이전트",
      "namePlaceholder": "이름을 지어주세요",
      "cancel": "취소",
      "confirm": "만들기",
      "creating": "생성 중…",
      "nameRequired": "이름을 입력해 주세요",
      "created": "{name} 생성 완료 ✿",
      "createFailed": "생성 실패",
      "switched": "{name}(으)로 전환됨 ✿",
      "switchFailed": "전환 실패",
      "deleteBtn": "에이전트 삭제",
      "deleteTitle1": "{name}을(를) 삭제할까요?",
      "deleteDesc1": "모든 설정, 기억, 대화가 영구적으로 삭제돼요. 이 작업은 되돌릴 수 없어요.",
      "deleteNext": "계속",
      "deleteTitle2": "확인하려면 \"{name}\"을(를) 입력해 주세요",
      "deletePlaceholder": "에이전트 이름 입력",
      "deleteConfirm": "영구 삭제",
      "deleteCancel": "취소",
      "deleted": "{name} 삭제됨",
      "deleteFailed": "삭제 실패",
      "setPrimary": "주 에이전트로 설정",
      "setPrimaryFailed": "주 에이전트 설정 실패",
      "lastAgent": "에이전트는 최소 한 명 유지해야 해요",
      "yuan": "元",
      "yuanHint": "「元」은 에이전트의 잠재의식이에요. 이 기반 위에 당신만의 동반자를 만들어 보세요.",
      "tools": {
        "title": "도구",
        "description": "도구 스위치는 대화를 다시 시작하거나 새 대화를 시작한 뒤 적용돼요. 진행 중인 대화는 시작할 때의 도구 집합을 계속 사용해요.",
        "items": {
          "automation": {
            "label": "자동화",
            "summary": "Agent가 알림과 플러그인 예약 동작을 만들 수 있게 합니다"
          },
          "beautify": {
            "label": "小花美术",
            "summary": "Agent가 문서 커버와 미적 보강을 생성할 수 있게 합니다"
          },
          "browser": {
            "label": "브라우저",
            "summary": "헤드리스 브라우저로 웹 페이지를 탐색"
          },
          "cron": {
            "label": "예약 작업",
            "summary": "지정한 시간에 작업을 자동 실행"
          },
          "dm": {
            "label": "다이렉트 메시지",
            "summary": "다른 에이전트에게 1대1 메시지 전송"
          },
          "install_skill": {
            "label": "스킬 설치",
            "summary": "GitHub 또는 스킬 라이브러리에서 새 스킬 설치"
          },
          "update_settings": {
            "label": "설정 변경",
            "summary": "Agent가 앱 설정을 수정할 수 있도록 허용"
          },
          "workflow": {
            "label": "Workflow",
            "summary": "Agent가 다중 에이전트 워크플로 스크립트를 백그라운드 작업으로 실행하도록 허용"
          }
        }
      }
    },
    "about": {
      "title": "소개",
      "tagline": "당신의 컴퓨터에 사는, 기억력 좋은 어시스턴트.",
      "license": "라이선스",
      "copyright": "저작권",
      "licenseToggle": "라이선스 전문",
      "updateAvailable": "새 버전 출시: v{version}",
      "updateDownload": "다운로드",
      "updateChecking": "업데이트 확인 중…",
      "updateDownloading": "{agentName}이(가) 새 집을 준비하는 중 {percent}%",
      "updateReadyInstall": "v{version} 설치 준비 완료",
      "updateInstalling": "업데이트를 설치하는 중입니다. HanaAgent가 자동으로 다시 시작됩니다…",
      "updateInstallManualHint": "다시 시작하여 업데이트를 누른 뒤 설치합니다. 종료만으로는 자동 설치하지 않습니다",
      "updateInstall": "재시작하여 업데이트",
      "updateInstallNow": "지금 재시작하여 업데이트",
      "updateProgress": "{percent}%",
      "updateError": "업데이트 확인 실패",
      "updateLatest": "최신 버전입니다",
      "updateCheckBtn": "업데이트 확인",
      "updateNeedInstall": "먼저 HanaAgent를 응용 프로그램 폴더로 이동하세요",
      "updateDiskSpace": "디스크 공간이 부족하여 업데이트를 다운로드할 수 없습니다",
      "launchAtLogin": "로그인 시 자동 실행",
      "keepAwake": "잠금 중에도 계속 실행",
      "betaUpdates": "베타 업데이트 수신",
      "autoCheckUpdates": "업데이트 자동 확인"
    },
    "access": {
      "networkAccess": "LAN 접근",
      "mobileAccess": "모바일 접근",
      "desktopAccess": "컴퓨터 접근",
      "lanToggle": "LAN 기기 접근 허용",
      "lanHint": "같은 LAN의 휴대폰과 컴퓨터가 이 HanaAgent Server에 접근할 수 있어요",
      "port": "고정 포트",
      "portHint": "북마크와 QR 코드에 사용합니다. 변경 후 Hana를 다시 시작해야 적용돼요",
      "mobileUrl": "모바일 URL",
      "mobileUrlLanHint": "휴대폰 브라우저에서 이 주소를 여세요",
      "mobileUrlLocalHint": "현재는 이 컴퓨터에서만 접속할 수 있어요",
      "status": "실행 상태",
      "statusHint": "서버가 실제로 듣고 있는 위치와 현재 유효한 모바일 URL을 확인합니다",
      "runtimeEndpoint": "현재 리스닝",
      "effectiveMobileUrl": "유효한 URL",
      "effectiveDesktopUrl": "컴퓨터 URL",
      "lanAddresses": "LAN 주소",
      "noLanAddresses": "LAN 주소를 찾지 못했어요",
      "qrCode": "QR 코드",
      "qrCodeHint": "스캔해서 PWA를 엽니다",
      "restartRequired": "포트 변경을 저장했습니다. Hana를 다시 시작하면 적용됩니다",
      "saveNetwork": "접근 설정 저장",
      "mobileKeys": "모바일 키",
      "generateMobileKey": "모바일 접근 키 생성",
      "mobileKeyHint": "모바일 첫 로그인에 사용합니다. 이후에는 브라우저 세션이 이어받아요",
      "mobileKey": "접근 키",
      "mobileKeyOnce": "키는 생성 직후 한 번만 표시됩니다",
      "mobileKeyCreated": "모바일 접근 키 생성됨",
      "mobileKeyFailed": "생성 실패",
      "desktopUrl": "컴퓨터 URL",
      "desktopUrlLanHint": "다른 컴퓨터의 브라우저에서 이 주소를 여세요",
      "desktopUrlLocalHint": "LAN 접근을 켜기 전에는 이 컴퓨터에서만 접속할 수 있어요",
      "generateDesktopKey": "컴퓨터 접근 키 생성",
      "desktopKeyHint": "다른 컴퓨터 브라우저의 첫 로그인에 사용합니다",
      "desktopKey": "컴퓨터 접근 키",
      "desktopKeyOnce": "키는 생성 직후 한 번만 표시됩니다",
      "desktopKeyCreated": "컴퓨터 접근 키 생성됨",
      "desktopKeyFailed": "생성 실패",
      "connectLanServer": "LAN 서버 연결",
      "remoteServerUrl": "서버 URL",
      "remoteServerUrlHint": "다른 컴퓨터나 NAS의 HanaAgent Server URL을 입력하세요",
      "remoteServerKey": "접근 키",
      "remoteServerKeyHint": "그 서버 설정 페이지에서 생성한 컴퓨터 접근 키를 입력하세요",
      "remoteServerConnected": "LAN 서버 연결됨",
      "remoteServerFailed": "연결 실패",
      "remoteConnection": "원격 Hana에 연결됨",
      "remoteConnectionDesc": "접근 및 기기의 로컬 계정, 비밀번호, LAN 스위치, 접근 키는 로컬 Hana에만 속합니다.",
      "remoteConnectionName": "연결 이름",
      "remoteConnectionKind": "연결 유형",
      "remoteConnectionUrl": "서버 URL",
      "remoteConnectionUnknown": "알 수 없음",
      "remoteLocalOnlyNote": "이 컴퓨터의 LAN 접근, 기기 키, 로컬 계정을 관리하려면 먼저 로컬 Hana로 돌아가세요.",
      "returnToLocal": "로컬 Hana로 돌아가기",
      "returnedToLocal": "로컬 Hana로 돌아왔습니다",
      "localConnectionUnavailable": "로컬 Hana 연결이 아직 준비되지 않았습니다",
      "pairedDevices": "페어링된 기기",
      "noDevices": "페어링된 기기 없음",
      "revoke": "해제",
      "revokeCredential": "키 해제",
      "credentialRevoked": "키 해제됨",
      "credentialRevokeFailed": "키 해제 실패",
      "deviceRevoked": "기기 해제됨",
      "deviceRevokeFailed": "해제 실패",
      "localAccount": "로컬 계정",
      "username": "사용자 이름",
      "displayName": "표시 이름",
      "saveAccount": "계정 저장",
      "accountSaved": "계정 저장됨",
      "password": "비밀번호",
      "passwordSet": "비밀번호 설정됨",
      "passwordNotSet": "비밀번호 미설정",
      "passwordHint": "향후 안전한 원격 로그인에 사용됩니다. LAN HTTP에서는 모바일 접근 키를 우선 사용합니다",
      "newPassword": "새 비밀번호",
      "savePassword": "비밀번호 저장",
      "passwordSaved": "비밀번호 저장됨",
      "clearPassword": "비밀번호 지우기",
      "passwordCleared": "비밀번호 지워짐",
      "copy": "복사",
      "copied": "복사됨",
      "saved": "저장됨",
      "invalidPort": "포트는 숫자여야 합니다",
      "loadFailed": "접근 설정 불러오기 실패"
    },
    "security": {
      "sandbox": "샌드박스",
      "sandboxDesc": "파일 시스템 쓰기를 제한해요. 일반 외부 파일은 읽기 전용이고, 작업 디렉토리 안에서는 읽고 쓸 수 있어요",
      "sandboxWarning": "샌드박스를 비활성화하면 AI가 시스템의 모든 파일을 읽고 쓰거나 삭제할 수 있어 예상치 못한 결과가 발생할 수 있습니다",
      "sandboxNetwork": "샌드박스 네트워크 허용",
      "sandboxNetworkDesc": "켜면 파일 쓰기 제한은 유지하면서 샌드박스 안의 명령이 공개 인터넷에 접속할 수 있어요",
      "sandboxNetworkDisabledDesc": "샌드박스가 꺼져 있으면 명령은 일반 로컬 프로세스로 실행돼요. 이 설정은 샌드박스 안의 명령에만 적용돼요",
      "sandboxNetworkWin32Unsupported": "Windows 명령 샌드박스는 파일 쓰기만 격리하며 네트워크 격리는 지원하지 않아요. 명령은 현재 사용자 네트워크 권한으로 실행돼요",
      "networkProxy": "아웃바운드 프록시",
      "networkProxyMode": "프록시 모드",
      "networkProxyModeDesc": "앱 내 API, OAuth, Bridge, 웹 요청이 이 아웃바운드 프록시를 사용해요",
      "networkProxySystem": "시스템 / 환경",
      "networkProxyManual": "수동 프록시",
      "networkProxyDirect": "직접 연결",
      "networkProxyManualTitle": "프록시 URL",
      "networkProxyManualDesc": "http, https, socks, socks5 URL을 지원해요. HTTPS가 비어 있으면 HTTP를 재사용해요",
      "networkProxyHttp": "HTTP proxy 예: http://127.0.0.1:7890",
      "networkProxyHttps": "HTTPS proxy 예: http://127.0.0.1:7890",
      "networkProxyWs": "WS proxy, 선택 사항",
      "networkProxyWss": "WSS proxy, 선택 사항",
      "networkProxyNoProxy": "프록시 제외 예: localhost, 127.0.0.1, ::1",
      "networkProxySave": "프록시 설정 저장",
      "archivedChats": "보관된 대화",
      "archivedChatsDesc": "보관된 채팅을 확인하고, 이어갈 대화를 복원하거나 더 이상 필요 없는 기록을 영구 삭제해요",
      "viewArchivedChats": "보관된 대화 보기",
      "fileBackup": "파일 백업",
      "fileBackupDesc": "AI가 파일을 수정하거나 삭제하기 전에 원본 내용을 자동으로 저장합니다",
      "retention": "보존 기간",
      "retention1d": "1일",
      "retention3d": "3일",
      "retention7d": "7일",
      "maxFileSize": "다음 크기 이상 무시",
      "viewBackups": "백업 보기",
      "hideBackups": "닫기",
      "restoreBtn": "복원",
      "noBackups": "아직 백업이 없습니다",
      "restoreSuccess": "복원됨",
      "restoreFailed": "복원 실패"
    },
    "me": {
      "title": "나",
      "changeAvatar": "변경",
      "userNameHint": "어시스턴트가 부르는 이름",
      "userProfile": "사용자 프로필",
      "userProfileHint": "어시스턴트가 당신을 이해하는 데 도움이 돼요: 관심사, 습관, 취향 등. 시스템 프롬프트에 주입돼요"
    },
    "crop": {
      "title": "아바타 조정",
      "hint": "드래그해서 이동, 스크롤해서 확대/축소",
      "cancel": "취소",
      "confirm": "확인",
      "updated": "아바타 업데이트됨 ✿",
      "reset": "아바타가 기본값으로 복원됨"
    },
    "providers": {
      "title": "등록된 Provider",
      "addTitle": "Provider 추가",
      "name": "Provider",
      "customName": "이름",
      "customUrl": "Base URL",
      "apiFormat": "API 프로토콜",
      "url": "Base URL",
      "apiKey": "API Key",
      "addBtn": "추가",
      "empty": "아직 등록된 Provider가 없어요",
      "fetchModels": "모델 가져오기",
      "delete": "Provider 삭제",
      "modelCount": "{n}개 모델",
      "fetchSuccess": "{name}에서 {n}개 모델을 가져왔어요",
      "fetchFailed": "가져오기 실패",
      "nameRequired": "Provider 이름을 입력해 주세요",
      "urlRequired": "Base URL을 입력해 주세요",
      "apiRequired": "API 프로토콜을 선택해 주세요",
      "added": "{name} 추가됨",
      "deleted": "{name} 삭제됨",
      "noModels": "아직 모델이 없어요",
      "resetModels": "모델 초기화",
      "apiType": "API 유형",
      "verify": "확인",
      "verifyConnection": "연결 확인",
      "verifySuccess": "연결 확인됨",
      "verifyFailed": "확인 실패",
      "setupHint": "API Key를 입력해서 이 Provider를 활성화하세요",
      "configInvalid": "이 Provider 설정이 손상되어 임시로 건너뛰었어요. 설정을 다시 저장하거나 삭제 후 다시 만들어 주세요.",
      "configIncomplete": "이 Provider 설정이 완전하지 않아요. API Key, Base URL을 채우고 모델을 추가하거나 가져오세요.",
      "selectHint": "Provider를 선택하면 상세 정보를 볼 수 있어요",
      "addCustom": "커스텀 Provider 추가",
      "noKey": "미설정",
      "remove": "제거",
      "deleteConfirm": "Provider {name}을(를) 삭제할까요? 연결된 모델도 함께 제거돼요."
    },
    "usage": {
      "title": "사용량",
      "note": "사용량은 참고용이며, 정확한 집계는 제공자의 통계를 기준으로 합니다.",
      "refresh": "사용량 새로고침",
      "total": "전체",
      "requests": "요청",
      "totalTokens": "총 Tokens",
      "cacheRead": "캐시 읽기",
      "cacheHitRate": "히트율",
      "uncached": "비캐시 사용",
      "modelMix": "모델 분포",
      "dailyUsage": "일별 사용량",
      "requestLedger": "요청 내역",
      "loading": "사용량을 불러오는 중…",
      "empty": "아직 사용량 기록이 없습니다",
      "groupMeta": "{requests}회 · 오류 {errors}개",
      "cacheShort": "cache {tokens}",
      "tokensShort": "{tokens} tok",
      "cacheSummary": "캐시 {cache} · 비캐시 {uncached}",
      "window": {
        "week": "최근 7일",
        "month": "최근 30일"
      },
      "period": {
        "week": "주",
        "month": "월"
      },
      "view": {
        "overall": "전체",
        "daily": "날짜별",
        "category": "카테고리",
        "model": "모델"
      },
      "category": {
        "session": "Session",
        "phone": "Phone",
        "memory": "Memory",
        "automation": "Automation",
        "subagent": "Subagent",
        "compaction": "Compaction",
        "plugin": "Plugin",
        "utility": "Utility",
        "vision": "Vision",
        "unknown": "Unknown"
      },
      "status": {
        "ok": "완료",
        "error": "오류",
        "aborted": "중단",
        "usage_missing": "사용량 없음"
      }
    },
    "media": {
      "imageGeneration": "이미지 생성",
      "defaultModel": "기본 이미지 모델",
      "credentialOk": "API Key 설정됨 (제공자 설정 공유)",
      "credentialMissing": "설정되지 않음, 제공자 설정으로 이동하세요",
      "adapterMissing": "이미지 생성 어댑터 없음",
      "addModel": "이미지 모델 추가",
      "providerDefaults": "기본 매개변수",
      "size": "크기",
      "format": "형식",
      "quality": "품질",
      "watermark": "워터마크",
      "aspectRatio": "가로세로 비율",
      "speechRecognition": "음성 인식",
      "speechRecognitionEnabled": "음성 메시지를 보낼 때 전사",
      "defaultSpeechModel": "음성 메시지 전사 모델",
      "speechModels": "전사 모델",
      "speechSynthesis": "음성 합성",
      "comingSoon": "곧 제공 예정",
      "noProvider": "제공자를 선택해 자세히 보기",
      "models": "이미지 모델",
      "globalDefault": "전역 기본값",
      "followGlobal": "전역 기본값 따르기",
      "default": "기본값"
    },
    "oauth": {
      "title": "간편 로그인",
      "login": "로그인",
      "logout": "로그아웃",
      "loggedIn": "로그인됨",
      "codePlaceholder": "인증 코드를 붙여넣으세요",
      "submit": "제출",
      "success": "로그인 성공",
      "loggedOut": "로그아웃됨",
      "failed": "로그인 실패",
      "deviceHint": "브라우저에서 이 코드를 입력해서 인증해 주세요",
      "waiting": "인증 대기 중…",
      "clickToCopy": "클릭하여 복사",
      "codeCopied": "코드 복사됨",
      "addModel": "모델 추가",
      "customModelPlaceholder": "모델 ID를 입력하세요"
    },
    "api": {
      "title": "모델 & API",
      "mainApi": "메인 API",
      "provider": "Provider",
      "baseUrl": "Base URL",
      "baseUrlHint": "Base URL을 직접 입력해 주세요",
      "apiKey": "API Key",
      "apiKeyPlaceholder": "새 키를 입력하면 업데이트돼요",
      "utilityApi": "유틸리티 모델 API",
      "utilityApiHint": "별도로 설정할 경우, Provider, Base URL, API Key를 모두 명시해야 해요",
      "showKey": "보기",
      "hideKey": "숨기기",
      "selectModel": "모델 선택",
      "customModel": "직접 입력...",
      "mainModelSection": "모델",
      "mainModelHint": "이 모델들이 채팅 페이지에서 사용할 수 있어요",
      "addModel": "모델 추가",
      "defaultModel": "기본값",
      "removeModel": "제거",
      "noModels": "아직 추가된 모델이 없어요",
      "otherModelSection": "기타",
      "chatModel": "기본 모델",
      "utilityModel": "유틸리티 (소형)",
      "utilityModelHint": "제목, 간단한 분류 등. 저렴한 소형 모델을 추천해요",
      "utilityLargeModel": "유틸리티 (대형)",
      "utilityLargeModelHint": "활동 요약, 작업 분해 등. 비어 있으면 소형 유틸리티로 대체해요",
      "visionModel": "보조 시각 모델",
      "visionAuxiliaryToggle": "보조 시각",
      "visionModelHint": "현재 채팅 모델이 이미지를 받을 수 없을 때만 먼저 이미지를 읽고 간단한 설명을 전달해요",
      "visionModelMissingHint": "모델을 찾을 수 없다면 제공자 페이지에서 비전 기능을 설정하세요.",
      "searchProvider": "검색 서비스",
      "searchProviderField": "검색 엔진",
      "searchApiKey": "검색 API Key",
      "searchApiKeyHint": "선택한 검색 Provider의 API Key를 입력해 주세요",
      "searchApiKeysAutoHint": "Auto는 설정된 Tavily, Brave, Serper 키를 먼저 사용한 다음 AnySearch 무료 검색을 쓰고, 한도 초과, 오류, 빈 결과, 낮은 관련도일 때 브라우저 검색으로 대체해요.",
      "searchApiKeyNotRequired": "브라우저 검색은 API Key가 필요 없어요. 로컬 백그라운드에서 검색 페이지를 열고 결과를 정리합니다.",
      "favorites": "즐겨찾기",
      "searchModel": "모델 검색...",
      "noFavorites": "☆를 클릭해서 모델을 즐겨찾기에 추가하세요",
      "customInput": "직접 입력...",
      "editModel": "편집",
      "contextLength": "컨텍스트 길이",
      "contextShort": "컨텍스트",
      "maxOutput": "최대 출력",
      "outputLength": "출력 길이",
      "modelName": "모델",
      "output": "출력",
      "save": "저장",
      "cancel": "취소",
      "thinkingLevel": "추론 수준",
      "thinkingLevelHint": "추론 깊이를 조절해요. 추론을 지원하는 모델에만 적용돼요",
      "thinkingLevels": {
        "off": "끔",
        "low": "낮음",
        "medium": "보통",
        "high": "높음",
        "auto": "자동",
        "xhigh": "최대"
      },
      "addedModels": "추가된 모델",
      "displayName": "표시 이름",
      "vision": "비전",
      "video": "비디오",
      "audio": "오디오",
      "reasoning": "추론",
      "capability": {
        "image": "이미지 입력 지원",
        "video": "비디오 입력 지원",
        "audio": "오디오 입력 지원",
        "reasoning": "추론 지원"
      }
    },
    "memory": {
      "sectionTitle": "기억",
      "title": "기억 시스템",
      "needsUtilityModel": "먼저 모델 탭에서 유틸리티 모델을 설정해 주세요",
      "compiled": "현재 기억",
      "compiledHint": "어시스턴트가 당신에 대해 기억하는 것들 — 중요하고 최근의 것들",
      "compiledView": "현재 기억 보기",
      "compiledEmpty": "아직 정리된 기억이 없어요",
      "compiledClear": "초기화",
      "compiledCleared": "정리된 기억이 초기화됨",
      "health": {
        "healthy": "기억 정리가 정상이에요",
        "degraded": "기억 정리가 지연되고 있어요",
        "unhealthy": "기억 정리에 확인이 필요해요",
        "disabled": "기억이 꺼져 있어요",
        "unavailable": "기억 상태를 확인할 수 없어요",
        "stepSeparator": ", ",
        "failedSteps": "문제 단계: {steps}",
        "lastError": "최근 오류: {time}",
        "errorMessage": "오류: {message}",
        "steps": {
          "rollingSummary": "롤링 요약",
          "compileToday": "오늘 기억",
          "compileWeek": "이번 주 기억",
          "compileLongterm": "장기 기억",
          "compileFacts": "사실 기억",
          "deepMemory": "깊은 기억"
        }
      },
      "allMemories": "모든 기억",
      "tokenBudget": "기억 용량",
      "tokenBudgetHint": "memory.md의 목표 token 예산",
      "decayPerDay": "감쇠 계수",
      "decayPerDayHint": "가우시안 감쇠의 기본 λ 값",
      "hitBonus": "참조 보너스",
      "hitBonusHint": "기억이 참조될 때마다 추가되는 점수",
      "baseImportance": "기본 중요도",
      "baseImportanceHint": "새 기억의 기본 초기 점수",
      "forgetSpeed": "망각 속도",
      "forgetSpeedHint": "1.0 = 보통, 2.0 = 두 배 빠르게",
      "compileThreshold": "정리 임계값",
      "compileThresholdHint": "이 점수 미만의 기억은 제외돼요",
      "timezone": "시간대",
      "timezoneHint": "기억 타임스탬프에 사용돼요",
      "actions": {
        "title": "기억 관리",
        "view": "기억 보기",
        "clear": "기억 초기화",
        "more": "더보기",
        "export": "내보내기",
        "import": "가져오기",
        "clearConfirm": "모든 기억을 초기화할까요? 이 작업은 되돌릴 수 없어요.",
        "cancel": "취소",
        "confirmClear": "초기화 확인",
        "viewTitle": "모든 기억",
        "clearSuccess": "기억 초기화됨",
        "exportSuccess": "내보내기 성공",
        "importSuccess": "{count}개 기억 가져옴",
        "importing": "가져오는 중...",
        "empty": "아직 기억이 없어요",
        "invalidFile": "잘못된 기억 파일이에요",
        "activeOnly": "먼저 이 에이전트를 활성 상태로 설정해 주세요"
      },
      "unknownDate": "날짜 불명",
      "threshold": {
        "title": "기억 수위선",
        "hint": "얼마나 많은 기억을 유지할지 정할 수 있어요. 약간의 노이즈는 괜찮아요. LLM은 필터링을 잘 해요.",
        "stats": "{remembered} / {total}개 기억 유지 중"
      },
      "activeOnly": "이 에이전트를 먼저 활성으로 설정해 주세요"
    },
    "pins": {
      "title": "고정 기억",
      "hint": "항상 대화에 주입되며 감쇠하지 않아요",
      "empty": "아직 고정 기억이 없어요",
      "delete": "삭제",
      "addPlaceholder": "고정 기억 추가..."
    },
    "experience": {
      "title": "경험",
      "hint": "에이전트가 배운 교훈을 카테고리별로 정리한 것이에요. 에이전트는 작업을 시작하기 전에 관련 경험을 확인해요",
      "toggleLabel": "경험 사용",
      "toggleHint": "기본값은 꺼짐이에요. 켜면 어시스턴트가 작업 경험을 자동으로 요약하며 성장하지만, 컨텍스트를 오염시킬 위험이 있어요.",
      "paused": "경험은 일시 중지되어 있어요. 기존 내용은 유지되지만 어시스턴트는 읽거나 기록할 수 없어요.",
      "empty": "아직 경험이 없어요",
      "edit": "편집",
      "deleteCategory": "카테고리 삭제"
    },
    "search": {
      "verify": "확인",
      "verifying": "확인 중...",
      "verified": "확인 및 저장됨 ✿",
      "verifyFailed": "확인 실패",
      "noProvider": "먼저 검색 엔진을 선택해 주세요",
      "noKey": "먼저 API Key를 입력해 주세요"
    },
    "work": {
      "title": "순찰",
      "heartbeatMaster": "순찰 마스터 스위치",
      "heartbeatMasterDesc": "끄면 모든 에이전트의 순찰이 일시 중지됩니다",
      "heartbeatEnabled": "순찰 모드",
      "heartbeatOn": "켜짐",
      "heartbeatOff": "꺼짐",
      "heartbeatInterval": "순찰 간격",
      "heartbeatUnit": "분",
      "heartbeatDesc": "어시스턴트가 작업 공간을 자동으로 확인하는 주기",
      "automationPermissionMode": "자동화 권한 모드",
      "automationPermissionModeDesc": "백그라운드 자동화 Agent Run이 도구 호출을 자동 검토할지, 전체 권한으로 실행할지, 읽기 전용으로 둘지 정합니다",
      "homeFolder": "작업 공간",
      "homeFolderDesc": "새 대화, 순찰, 예약 작업의 기본 작업 디렉토리",
      "homeFolderPlaceholder": "미설정 (매번 수동 선택)",
      "homeFolderClear": "지우기",
      "homeFolderBrowse": "찾아보기",
      "contextFilesTitle": "워크스페이스 지침 주입",
      "contextFilesDesc": "현재 워크스페이스 프로젝트의 AGENTS.md / CLAUDE.md를 새 세션 시스템 프롬프트에 기억보다 앞서 주입합니다.",
      "injectAgentsMd": "AGENTS.md 주입",
      "injectAgentsMdDesc": "켜면 새 세션이 현재 작업 디렉토리에서 Git 루트까지의 AGENTS.md를 읽습니다.",
      "injectClaudeMd": "CLAUDE.md 주입",
      "injectClaudeMdDesc": "켜면 새 세션이 현재 작업 디렉토리에서 Git 루트까지의 CLAUDE.md를 읽습니다."
    },
    "toolCaps": {
      "title": "스킬 설치 권한"
    },
    "skills": {
      "title": "스킬",
      "desc": "이 에이전트의 스킬을 켜거나 끌 수 있어요. 활성화하면 에이전트가 대화에서 자동으로 해당 스킬을 인식하고 사용해요.",
      "manageTitle": "Installed Skills",
      "agentConfigTitle": "Agent Skill Configuration",
      "configureFor": "Configuring:",
      "userSkillsTitle": "Agent Skill Toggles",
      "user": "사용자 스킬",
      "system": "시스템 스킬",
      "add": "스킬 추가",
      "delete": "삭제",
      "deleteConfirm": "스킬 \"{name}\"을(를) 삭제할까요?",
      "installSuccess": "스킬 \"{name}\" 설치됨",
      "installError": "설치 실패",
      "enabled": "활성화됨",
      "disabled": "비활성화됨",
      "noSkills": "사용 가능한 스킬이 없어요",
      "noUser": "사용자 정의 스킬 없음",
      "copyToSkills": "내 스킬로 복사",
      "copied": "복사됨 ✓",
      "copyFailed": "복사 실패",
      "dropzone": "스킬 폴더를 드래그해서 설치하거나 클릭해서 찾아보세요",
      "learnHint": "어시스턴트에게 물어보세요: GitHub에서 안전하고 유용한 스킬을 찾아줘",
      "reloaded": "스킬 다시 로드됨",
      "reload": "스킬 새로고침",
      "compatTitle": "호환 스킬",
      "compatDesc": "다른 AI 도구가 설치한 스킬을 자동으로 발견해요",
      "compatNoSkills": "외부 스킬을 찾지 못했어요",
      "compatAddPath": "디렉토리 추가",
      "compatRemove": "제거",
      "compatAutoDiscovered": "자동 발견됨",
      "compatNotInstalled": "미설치",
      "learnCreate": "스킬 생성 / 설치",
      "learnCreateDesc": "에이전트가 새 스킬을 작성하거나 공유 스킬 풀에 설치하는 것을 허용해요. 기본적으로 현재 Agent에만 활성화돼요",
      "fetchRemote": "GitHub / ClawHub에서 스킬 가져오기",
      "fetchRemoteDesc": "활성화하면 에이전트가 전문 작업 수행 시 적합한 스킬을 검색하고 설치해요. 주의해서 사용하세요",
      "safetyReview": "설치 전 안전 검토",
      "safetyReviewDesc": "스킬 설치 전 AI로 프롬프트 인젝션 등 보안 위험을 감지해요",
      "fetchWarning": {
        "title": "원격 스킬 가져오기 정보",
        "body1": "활성화하면 에이전트가 전문 작업 수행 시 GitHub과 ClawHub에서 스킬을 검색, 다운로드, 설치해요.",
        "body2": "설치 전 자동 안전 검토와 스타 수 확인이 수행되지만, 다음 위험이 남아 있어요:",
        "risk1": "스킬 내용이 사람에 의해 검토되지 않아 부적절한 지시가 포함될 수 있어요",
        "risk2": "에이전트가 기대와 다른 스킬을 설치할 수 있어요",
        "risk3": "악성 스킬이 에이전트 행동을 조작하려 할 수 있어요",
        "confirm": "위험을 이해했어요, 활성화"
      },
      "safetyWarning": {
        "title": "안전 검토 비활성화",
        "body1": "안전 검토는 스킬 설치 전 잠재적으로 악성인 콘텐츠를 감지해요:",
        "risk1": "프롬프트 인젝션 (무단 지시)",
        "risk2": "지나치게 광범위한 트리거 조건",
        "risk3": "소셜 엔지니어링 및 권한 상승 시도",
        "body2": "비활성화하면 모든 스킬이 검토 없이 설치돼요.",
        "confirm": "위험을 이해했어요, 검토 비활성화"
      }
    },
    "plugins": {
      "title": "플러그인",
      "desc": "커뮤니티 플러그인을 관리합니다.",
      "empty": "플러그인이 없습니다",
      "reload": "새로고침",
      "statusLoaded": "로드됨",
      "statusFailed": "실패",
      "statusDisabled": "비활성화",
      "fullAccessToggle": "전체 권한 플러그인 허용",
      "fullAccessDesc": "활성화하면 full-access를 선언한 플러그인이 시스템 수준 API(라우트, 훅, Provider 등)를 사용할 수 있어요",
      "devToolsToggle": "Agent 플러그인 개발 도구 허용",
      "devToolsDesc": "활성화하면 Agent가 개발 플러그인을 설치, 다시 로드, 활성화, 비활성화, 제거할 수 있어요. 일반 설치 플러그인에는 영향을 주지 않아요.",
      "dropzone": "플러그인 폴더 또는 .zip을 여기에 끌어다 설치하거나 클릭하여 선택",
      "statusRestricted": "전체 권한 필요",
      "deleteConfirm": "플러그인 \"{name}\"을 제거할까요? 플러그인 데이터는 보존됩니다.",
      "installSuccess": "플러그인 \"{name}\" 설치 완료",
      "installError": "플러그인 설치 실패",
      "invalidPlugin": "유효한 플러그인 디렉토리가 아닙니다",
      "pluginsDir": "플러그인 디렉토리: {path}",
      "needsFullAccess": "이 플러그인을 사용하려면 「전체 권한 플러그인 허용」을 먼저 활성화하세요",
      "configure": "{name} 설정",
      "configTitle": "{name} 설정",
      "configLoadError": "플러그인 설정을 불러오지 못했습니다",
      "sensitiveHint": "저장된 값은 숨겨집니다. 새 값을 입력하면 교체됩니다.",
      "invalidJson": "JSON 형식이 올바르지 않습니다",
      "showDiagnostics": "플러그인 진단 보기",
      "diagnosticsTitle": "플러그인 진단",
      "diagnosticsLoadError": "플러그인 진단을 불러오지 못했습니다",
      "diagnosticsSummary": "기능 {capabilities}/{total} · 작업 {tasks} · 일정 {schedules}",
      "noDiagnostics": "진단 데이터가 없습니다",
      "diagnosticActivation": "활성화: {state}",
      "diagnosticRoutes": "페이지 {pages} · 위젯 {widgets} · 설정 {settingsTabs}",
      "diagnosticTools": "도구 {count}",
      "diagnosticCommands": "명령 {count}",
      "diagnosticConfig": "설정 {count}",
      "openMarketplace": "플러그인 마켓 열기",
      "marketBack": "플러그인 관리로 돌아가기",
      "marketplaceTitle": "플러그인 마켓",
      "marketplaceHint": "설치 가능한 플러그인, README, 권한, 기여 유형을 확인합니다.",
      "marketplaceCount": "플러그인 {count}개",
      "marketplaceNoSource": "마켓 소스 없음",
      "marketplaceEmpty": "둘러볼 플러그인이 없습니다",
      "marketLoading": "플러그인 마켓을 불러오는 중…",
      "marketLoadError": "플러그인 마켓을 불러오지 못했습니다",
      "marketReadmeLoadError": "README를 불러오지 못했습니다",
      "marketInstalled": "설치됨",
      "marketInstall": "설치",
      "marketUpdate": "업데이트",
      "marketReinstall": "다시 설치",
      "marketDowngrade": "다운그레이드",
      "marketIncompatible": "호환되지 않음",
      "marketUpdateAvailable": "업데이트 가능",
      "marketInstalledVersion": "설치됨 v{version}",
      "marketUpdateFrom": "v{from}에서 v{to}로 업데이트 가능",
      "marketDowngradeTo": "호환되는 v{version}만 설치할 수 있습니다",
      "marketDowngradeConfirm": "현재 버전은 v{from}입니다. v{to}로 다운그레이드할까요?",
      "marketReadmeLoading": "README를 불러오는 중…",
      "marketSelectPlugin": "README를 볼 플러그인을 선택하세요"
    },
    "mcp": {
      "masterTitle": "Master Switch",
      "masterName": "Enable Connectors",
      "masterDesc": "When off, new sessions receive no MCP connector tools. Frozen sessions keep their snapshot, but calls return an explicit error.",
      "connectorsTitle": "Connectors",
      "connectorName": "Name",
      "description": "Description",
      "descriptionPlaceholder": "Optional note for what this connector does",
      "connectorMode": "Type",
      "modeRemote": "Remote",
      "modeLocal": "Local Command",
      "remoteUrl": "Remote URL",
      "transport": "Transport",
      "transportAuto": "Auto",
      "transportStreamable": "Streamable HTTP",
      "transportSse": "SSE",
      "authType": "Auth",
      "authNone": "None",
      "authBearer": "Bearer Token",
      "authOAuth": "OAuth",
      "authToken": "Access Token",
      "oauthClientId": "OAuth Client ID",
      "oauthClientSecret": "OAuth Client Secret",
      "oauthConnect": "Connect",
      "oauthConnected": "OAuth connected",
      "oauthDisconnected": "OAuth disconnected",
      "headers": "Headers",
      "headersHint": "One KEY=value pair per line. Values are stored for connector requests and masked after saving.",
      "statusRunning": "Running",
      "statusStopped": "Stopped",
      "statusConnecting": "Connecting",
      "statusReconnecting": "Reconnecting",
      "statusFailed": "Reconnect failed",
      "statusNeedsAuth": "Needs sign-in",
      "command": "Command",
      "args": "Arguments",
      "cwd": "Working Directory",
      "cwdPlaceholder": "Optional",
      "registryUrl": "Registry",
      "env": "Environment Variables",
      "envHint": "One KEY=value pair per line. Values are passed only to local stdio MCP server processes.",
      "timeout": "Timeout Seconds",
      "autoStart": "Auto Start",
      "addConnector": "Add Connector",
      "updateConnector": "Update Connector",
      "importJson": "Import JSON",
      "importJsonHint": "Supports Cherry Studio, Claude, and other mcpServers JSON config shapes.",
      "noConnectors": "No connectors yet",
      "envCount": "env vars",
      "headersCount": "headers",
      "toolsCount": "tools",
      "start": "Start",
      "stop": "Stop",
      "refresh": "Refresh Tools",
      "removeConfirm": "Remove this connector? Saved per-agent switches will remain but no longer take effect.",
      "agentTitle": "Agent Configuration",
      "agentConnectorDesc": "Enable for the selected agent, just like skills.",
      "saveError": "Save failed"
    },
    "screenshot": {
      "title": "스크린샷 공유",
      "desc": "대화 스크린샷의 스타일과 레이아웃을 선택하세요",
      "color": "색상",
      "width": "너비",
      "font": "글꼴",
      "fontLabel": "스크린샷 글꼴",
      "fontHint": "별도 글꼴을 선택하지 않으면 외관의 읽기 글꼴을 따릅니다.",
      "light": "라이트",
      "dark": "다크",
      "sakura": "푸른 하늘과 벚꽃",
      "mobile": "모바일",
      "desktop": "데스크톱",
      "mobileTitle": "모바일 레이아웃",
      "mobileDesc": "긴 이미지, 휴대폰 공유에 적합",
      "desktopTitle": "데스크톱 레이아웃",
      "desktopDesc": "더 넓고, 데스크톱 저장과 공유에 적합",
      "segmentTitle": "자동 분할",
      "segmentLimitLabel": "페이지당 글자 수",
      "segmentLimitHint": "표시 텍스트가 이 한도를 넘으면 완전한 대화 라운드 경계에서 다음 스크린샷으로 나눕니다. 기본값은 10000자입니다.",
      "segmentLimitUnit": "자"
    },
    "bridge": {
      "agent": "Agent",
      "telegram": "Telegram",
      "telegramToken": "Bot Token",
      "telegramHint": "@BotFather에서 받으세요",
      "feishu": "Feishu",
      "feishuAppId": "App ID",
      "feishuAppSecret": "App Secret",
      "feishuHint": "Feishu 오픈 플랫폼에서 받으세요. 이벤트는 long connection으로 받으며 로컬 callback URL은 필요하지 않습니다",
      "whatsapp": "WhatsApp",
      "qq": "QQ",
      "qqAppId": "App ID",
      "qqAppSecret": "App Secret",
      "qqHint": "QQ 봇 오픈 플랫폼(q.qq.com/qqbot)에서 받으세요",
      "wechat": "WeChat",
      "wechatHint": "WeChat iLink 프로토콜로 개인 계정에 연결",
      "wechatExclusive": "WeChat 계정 하나는 Agent 하나에만 연결할 수 있어요. 새 Agent를 연결하면 이전 연결은 자동으로 해제돼요",
      "wechatReplyWindowReminder": "WeChat 능동 알림은 최근 수신 메시지나 답장 가능 창이 있어야 해요. 알림이 도착하지 않으면 이 Agent에게 WeChat 메시지를 보내 창을 활성화해 주세요.",
      "wechatScan": "QR 코드로 로그인",
      "wechatRescan": "다시 로그인",
      "wechatLoggedIn": "로그인됨",
      "wechatNeedScan": "먼저 QR 코드로 로그인해 주세요",
      "wechatScanning": "WeChat으로 QR 코드를 스캔해 주세요",
      "wechatScanned": "스캔 완료, 휴대폰에서 확인해 주세요",
      "wechatExpired": "QR 코드가 만료됐어요",
      "wechatLoginSuccess": "로그인 성공",
      "wechatLoginFailed": "로그인 실패",
      "wechatUnbind": "연결 해제",
      "wechatUnbound": "WeChat 연결을 해제했어요",
      "connected": "연결됨",
      "disconnected": "연결 안 됨",
      "error": "연결 실패",
      "test": "연결 테스트",
      "testOk": "연결 성공",
      "testFail": "테스트 실패",
      "noToken": "먼저 Bot Token을 입력해 주세요",
      "noCredentials": "먼저 App ID와 App Secret을 입력해 주세요",
      "globalSettings": "전역 설정",
      "agentSettings": "에이전트",
      "permissionMode": "권한 모드",
      "permissionModeDesc": "Bridge 봇이 도구 호출을 자동 검토할지, 전체 권한으로 실행할지, 읽기 전용으로 둘지 정합니다",
      "permissionModeAuto": "자동 검토",
      "permissionModeOperate": "전체 권한",
      "permissionModeReadOnly": "읽기 전용 모드",
      "receiptEnabled": "응답 전 안내",
      "receiptEnabledDesc": "메시지를 받으면 실제 답변 전에 '받았고 답변 중'이라는 짧은 안내를 먼저 보냅니다",
      "readOnly": "읽기 전용 모드",
      "readOnlyDesc": "브릿지 봇은 파일만 읽을 수 있고, 쓰기나 명령 실행은 불가능해요",
      "howTo": "설정 가이드",
      "tutorialTitle": "플랫폼 설정 가이드",
      "tutorialTgSteps": [
        "Telegram에서 <code>@BotFather</code>를 검색하고 대화를 열어 주세요",
        "<code>/newbot</code>을 보내고 안내에 따라 이름과 사용자명을 설정해 주세요",
        "BotFather가 Bot Token을 보내줄 거예요 (예: <code>123456:ABC-DEF...</code>)",
        "위 입력란에 Token을 붙여넣고 스위치를 켜주세요",
        "Telegram에서 내 봇을 찾아서 메시지를 보내 테스트해 보세요"
      ],
      "ownerSelect": "어떤 계정이 본인인가요",
      "ownerWarning": "경고: 선택한 계정은 컴퓨터, 기억, 개인 정보에 접근할 수 있어요. 본인의 계정인지 확인해 주세요.",
      "ownerNone": "먼저 메시지를 보내야 선택할 수 있어요",
      "ownerSaved": "저장됨",
      "ownerConfirmTitle": "소유자로 설정할까요?",
      "ownerConfirmText": "소유자는 기억, 도구, 성격을 포함한 에이전트의 모든 기능에 접근할 수 있어요. 본인의 계정인지 확인해 주세요.",
      "ownerConfirmCancel": "취소",
      "ownerConfirmSave": "확인",
      "tutorialFsSteps": [
        "<code>open.feishu.cn</code>에 접속해서 로그인 후 개발자 콘솔을 열어 주세요",
        "\"기업 자체 앱 만들기\"를 클릭하고 앱 이름과 설명을 입력해 주세요",
        "\"인증 및 기본 정보\" 페이지에서 <code>App ID</code>와 <code>App Secret</code>을 복사해 주세요",
        "왼쪽 메뉴에서 \"앱 기능 추가\"를 찾아 \"봇\" 기능을 추가하고 이름을 지어주세요",
        "\"권한\"에서 <code>im:message</code>를 검색하고 활성화해 주세요 (메시지 수발신)",
        "\"이벤트 및 콜백\" → \"이벤트 설정\"에서 \"롱 커넥션으로 이벤트 수신\"으로 변경해 주세요",
        "\"이벤트 추가\"를 클릭하고 <code>im.message.receive_v1</code>을 추가해 주세요 (메시지 수신)",
        "중요: \"버전 관리\"에서 버전을 생성하고 게시해 주세요 (롱 커넥션 설정에는 게시된 앱이 필요해요)",
        "위 입력란에 App ID와 App Secret을 붙여넣고 스위치를 켜주세요"
      ],
      "whatsappHint": "곧 지원 예정"
    }
  },
  "onboarding": {
    "welcome": {
      "title": "안녕하세요, 저는 {name}이에요 ✿",
      "subtitle": "저는 당신의 개인 AI 어시스턴트예요.\n간단한 설정을 하고 시작해 볼까요.",
      "next": "시작하기"
    },
    "remote": {
      "link": "이미 서버가 있나요? LAN으로 연결",
      "url": "서버 URL",
      "key": "접근 키",
      "connect": "연결",
      "connecting": "연결 중...",
      "failed": "LAN 서버 연결 실패"
    },
    "name": {
      "title": "이름과 메모리",
      "subtitle": "당신을 어떻게 부르면 좋을지와 이 Agent의 이름을 알려 주세요.",
      "userLabel": "어떻게 부르면 될까요?",
      "placeholder": "당신의 이름",
      "agentLabel": "이 Agent를 뭐라고 부를까요?",
      "agentPlaceholder": "Hanako",
      "memoryTitle": "메모리 시스템",
      "memoryHint": "켜 두면 시스템이 대화가 끝날 때 채팅 내용을 정리해 메모리로 만듭니다. 메모리가 자주 업데이트되면 모델 캐시 적중률이 낮아질 수 있습니다. 메모리를 끄면 보통 비용이 더 적게 듭니다.",
      "back": "뒤로",
      "next": "다음"
    },
    "provider": {
      "title": "AI Provider를 선택해 주세요",
      "subtitle": "작동하려면 AI 모델 Provider가 필요해요.\nProvider를 선택하고 API Key를 입력해 주세요.",
      "selectPlaceholder": "Provider 선택",
      "searchPlaceholder": "Provider 검색...",
      "empty": "Provider를 찾지 못했어요",
      "custom": "직접 입력...",
      "customName": "이름",
      "customNamePlaceholder": "예: my-provider",
      "customUrl": "API URL",
      "customUrlPlaceholder": "예: https://api.example.com/v1",
      "keyLabel": "API Key",
      "keyPlaceholder": "API Key를 붙여넣으세요",
      "test": "연결 테스트",
      "testing": "연결 중...",
      "testSuccess": "연결됨 ✿",
      "testFailed": "연결 실패",
      "back": "뒤로",
      "next": "다음"
    },
    "model": {
      "title": "대화 모델을 선택해 주세요",
      "subtitle": "주로 사용할 모델이에요. 똑똑하고 유능한 걸 골라주세요.",
      "loading": "모델을 가져오는 중...",
      "empty": "모델을 찾지 못했어요",
      "addedModels": "추가된 모델",
      "noAddedModels": "아직 추가된 모델이 없습니다",
      "addModel": "모델 추가",
      "addModelSearchPlaceholder": "추가할 모델 검색...",
      "manualModelPlaceholder": "모델 ID 직접 입력",
      "addManualModel": "추가",
      "mainModel": "주 모델",
      "setMainModel": "주 모델로 설정",
      "editModel": "모델 편집",
      "removeModel": "모델 제거",
      "editTitle": "모델 편집",
      "displayName": "표시 이름",
      "contextLength": "컨텍스트 길이",
      "maxOutput": "최대 출력",
      "imageInput": "이미지 입력",
      "audioInput": "오디오 입력",
      "reasoning": "추론 모델",
      "cancelEdit": "취소",
      "saveEdit": "저장",
      "invalidNumber": "유효한 양의 정수를 입력하세요",
      "utility": "유틸리티 모델",
      "utilityHint": "요약, 핵심 추출 등. 빠르고 저렴한 모델을 추천해요",
      "utilityLarge": "유틸리티 대형",
      "utilityLargeHint": "기억 정리, 심층 분석 등. 유능한 모델을 추천해요",
      "back": "뒤로",
      "next": "다음"
    },
    "theme": {
      "title": "테마를 선택해 주세요",
      "subtitle": "나중에 설정에서 언제든 바꿀 수 있어요",
      "back": "뒤로",
      "next": "다음"
    },
    "workspace": {
      "title": "워크스페이스 만들기",
      "subtitle": "기본 워크스페이스는 데스크톱의 OH-WorkSpace입니다.\n기존 폴더를 직접 선택할 수도 있습니다.",
      "defaultLabel": "기본 워크스페이스",
      "customLabel": "선택한 워크스페이스",
      "defaultHint": "다른 폴더를 선택하지 않으면 이 디렉터리를 자동으로 만듭니다.\n순찰은 기본적으로 꺼져 있으며 나중에 설정에서 켤 수 있습니다.",
      "choose": "폴더 선택",
      "useDefault": "기본값 사용",
      "back": "뒤로",
      "next": "다음",
      "saving": "저장 중..."
    },
    "tutorial": {
      "title": "준비 완료 ✿",
      "memory": {
        "title": "기억",
        "desc": "대화에서 중요한 내용을 기억해요. 오래되고 덜 참조된 기억은 자연스럽게 흐려져요. 우리의 기억처럼."
      },
      "skills": {
        "title": "스킬",
        "desc": "파일을 읽고 쓰고, 명령을 실행하고, 웹을 검색할 수 있어요. 더 많은 스킬은 설정에서 관리하세요."
      },
      "workspace": {
        "title": "작업 공간",
        "desc": "폴더를 작업 공간으로 설정하면 프로젝트와 파일 관리를 도와줄 수 있어요."
      },
      "jian": {
        "title": "Jian",
        "desc": "아무 폴더에 jian.md를 넣어두면\n순찰할 때 확인하고 자동으로 실행해요."
      },
      "agents": {
        "title": "다중 Agent 협업",
        "desc": "여러 Agent가 각자 작업을 맡고 이어받을 수 있습니다.\n복잡한 일을 나누어 처리할 때 좋습니다."
      },
      "finish": "시작할게요"
    }
  },
  "activity": {
    "title": "활동",
    "empty": "아직 활동이 없어요. 순찰과 예약 작업이 여기에 표시돼요.",
    "back": "뒤로",
    "heartbeat": "정기 순찰",
    "subagent": "서브 에이전트 작업",
    "cron": "예약 작업",
    "automationRuns": "사용자 자동화",
    "patrolRuns": "순찰",
    "otherRuns": "기타 백그라운드 작업",
    "agentTabs": "Agent별 활동 필터",
    "previousAgent": "이전 Agent 보기",
    "nextAgent": "Agent 더 보기",
    "categoryTabs": "활동 유형별 필터",
    "emptyForCategory": "이 분류에는 아직 활동이 없어요.",
    "patrolDone": "순찰 완료",
    "cronDone": "예약 작업 완료",
    "error": "실행 오류",
    "viewSession": "과정 펼치기",
    "expand": "과정 펼치기",
    "collapse": "과정 접기",
    "loadingSession": "이 백그라운드 세션을 읽는 중...",
    "sessionLoadFailed": "이 백그라운드 세션을 지금 읽을 수 없어요.",
    "noSessionMessages": "이 백그라운드 세션에는 표시할 메시지가 없어요.",
    "duration": "{text} 소요",
    "promote": "대화로 승격"
  },
  "automation": {
    "title": "예약 작업",
    "empty": "아직 예약 작업이 없어요.\n필요할 때 어시스턴트가 만들어 줄 거예요.",
    "emptyForAgent": "이 Agent에는 아직 예약 작업이 없어요.",
    "agentTabs": "Agent별 자동화 필터",
    "previousAgent": "이전 Agent 보기",
    "nextAgent": "Agent 더 보기",
    "draftTitle": "자동화 초안",
    "suggestionTitle": "제안",
    "suggested": "제안",
    "viewSuggestion": "제안 보기",
    "openDraft": "자동화 초안 열기",
    "closeDraft": "자동화 초안 닫기",
    "confirmCreate": "추가 확인",
    "confirmUpdate": "수정 확인",
    "defaultModel": "기본 모델",
    "add": "자동화 추가",
    "enable": "사용",
    "disable": "중지",
    "newAutomation": "새 자동화",
    "newPrompt": "",
    "promptPlaceholder": "{agent}에게 시키고 싶은 일을 적어 주세요",
    "promptRequired": "이 자동화를 사용하기 전에 Agent가 할 일을 먼저 적어 주세요.",
    "createFailed": "자동화 생성 실패",
    "agentRequired": "먼저 Agent를 선택해 주세요",
    "field": {
      "label": "이름",
      "agent": "Agent",
      "scheduleType": "유형",
      "schedule": "시간",
      "prompt": "실행 내용"
    },
    "schedule": {
      "at": "한 번",
      "every": "마다",
      "unit": "단위",
      "time": "시간",
      "hour": "시",
      "minute": "분",
      "weekday": "요일",
      "monthDay": "날짜",
      "dateTime": "날짜와 시간",
      "cronExpression": "Cron 표현식",
      "onceAt": "한 번: {date}",
      "advancedCron": "고급 Cron: {cron}",
      "mode": {
        "interval": "일정 간격",
        "daily": "매일",
        "weekly": "매주",
        "monthly": "매월",
        "once": "한 번만",
        "advanced": "고급 Cron"
      },
      "unitLabel": {
        "minutes": "분",
        "hours": "시간",
        "days": "일"
      }
    },
    "executor": {
      "agentSession": "에이전트 실행",
      "notify": "알림",
      "pluginAction": "플러그인 작업",
      "directAction": "직접 작업"
    },
    "edit": "편집",
    "delete": "삭제"
  },
  "ctx": {
    "cut": "잘라내기",
    "copy": "복사",
    "paste": "붙여넣기",
    "selectAll": "모두 선택"
  },
  "rightWorkspace": {
    "activity": {
      "title": "백그라운드 활동"
    },
    "todo": {
      "title": "할 일",
      "waitForOutput": "Wait for output to finish"
    },
    "subagent": {
      "title": "서브 에이전트"
    },
    "workflow": {
      "title": "Workflow",
      "running": "실행 중 {text}",
      "agents": "{n} 에이전트"
    },
    "session": {
      "title": "이 대화",
      "cwd": "작업 폴더",
      "model": "모델",
      "files": "파일",
      "authorizedFolders": "허용 폴더",
      "addAuthorizedFolder": "허용 폴더 추가"
    },
    "tabs": {
      "label": "오른쪽 작업공간",
      "sessionFiles": "대화 파일",
      "workspace": "작업공간"
    },
    "sessionFiles": {
      "title": "대화 파일",
      "empty": "이 대화에서는 아직 파일이 생성되거나 업로드되지 않았어요",
      "actions": {
        "preview": "미리보기",
        "open": "열기",
        "reveal": "위치 보기",
        "downloadToDevice": "이 기기에 다운로드",
        "copyPath": "경로 복사",
        "copySelectedPaths": "경로 {n}개 복사",
        "sendToBridge": "보내기...",
        "sendToBridgeLoading": "Bridge 대화를 불러오는 중...",
        "sendToBridgeEmpty": "보낼 수 있는 Bridge 대화가 없어요",
        "sendToBridgeLoadFailed": "Bridge 대화를 불러오지 못했어요"
      },
      "bridgeLoadFailed": "Bridge 대화를 불러오지 못했어요: {error}",
      "sendSuccess": "{target}(으)로 보냈어요",
      "sendFailed": "{target}(으)로 보내지 못했어요: {error}",
      "list": "대화 파일 목록",
      "sort": {
        "label": "대화 파일 정렬",
        "timeDesc": "시간↓",
        "nameAsc": "이름↑",
        "nameDesc": "이름↓",
        "typeAsc": "유형↑"
      },
      "status": {
        "available": "사용 가능",
        "expired": "만료됨"
      }
    },
    "jian": {
      "collapse": "Jian 접기",
      "expand": "Jian 펼치기"
    }
  },
  "desk": {
    "title": "책상",
    "workspaceTitle": "작업 공간",
    "skills": "스킬",
    "cwdSkills": "프로젝트 스킬",
    "cwdSkillsEmpty": "이 폴더에는 프로젝트 스킬이 없어요",
    "cwdSkillsHint": ".agents/skills/ 디렉토리를 만들어서 시작하세요",
    "cwdSkillsDesc": "스킬은 작업 공간을 따라가요",
    "cwdSkillsDrop": "폴더나 .zip을 드래그해서 스킬을 설치하세요",
    "deleteSkill": "스킬 삭제",
    "openInFinder": "폴더 열기",
    "jianLabel": "Jian",
    "jianPlaceholder": "이 폴더의 파일을 어떻게 처리할지 어시스턴트에게 알려주세요...",
    "execLogLabel": "실행 기록",
    "execLogDelete": "이 기록 삭제",
    "emptyTitle": "책상이 비어 있어요",
    "emptyHint": "책상은 어시스턴트의 순찰 작업 공간이자 모든 대화의 기본 디렉토리예요.\n설정에서 폴더를 지정하세요.",
    "goToSettings": "설정으로 이동",
    "fileLabel": "파일",
    "openWithDefault": "기본 앱으로 열기",
    "refresh": "새로고침",
    "newMarkdownFileName": "제목 없음.md",
    "newFolder": "새 폴더",
    "ctx": {
      "open": "열기",
      "openInFinder": "폴더 열기",
      "rename": "이름 변경",
      "copyPath": "경로 복사",
      "delete": "삭제",
      "deleteSelected": "{count}개 항목 삭제",
      "deleteN": "{n}개 항목 삭제",
      "newMdFile": "새 Markdown 문서",
      "newFolder": "새 폴더"
    },
    "deleteConfirm": "\"{name}\"을 시스템 휴지통으로 이동할까요?",
    "deleteSelectedConfirm": "선택한 {count}개 항목을 시스템 휴지통으로 이동할까요?",
    "trashFailed": "시스템 휴지통으로 이동하지 못했습니다",
    "createFailed": "생성 실패",
    "renameInvalid": "파일 이름에는 경로 구분자를 사용할 수 없습니다",
    "renameFailed": "이름 변경 실패",
    "sort": {
      "label": "정렬",
      "mtime": "수정일",
      "nameAsc": "이름 A→Z",
      "nameDesc": "이름 Z→A",
      "size": "파일 크기",
      "type": "파일 유형",
      "mtimeShort": "시간",
      "nameAscShort": "이름↑",
      "nameDescShort": "이름↓",
      "sizeShort": "크기",
      "typeShort": "유형"
    },
    "filter": {
      "label": "필터",
      "images": "이미지",
      "text": "텍스트",
      "videos": "동영상",
      "clear": "필터 지우기",
      "activeShort": "{count} 유형"
    },
    "search": {
      "placeholder": "작업 공간 검색",
      "label": "작업 공간 파일 검색",
      "results": "검색 결과",
      "empty": "일치하는 파일이 없어요",
      "root": "루트"
    }
  },
  "window": {
    "minimize": "최소화",
    "maximize": "최대화",
    "close": "닫기"
  },
  "browser": {
    "using": "브라우저 사용 중",
    "close": "브라우저 닫기",
    "closeBtn": "닫기",
    "back": "뒤로",
    "forward": "앞으로",
    "reload": "새로고침",
    "newTab": "새 탭",
    "closeTab": "탭 닫기",
    "emergencyStop": "AI 제어 긴급 중지",
    "backgroundHint": "백그라운드 브라우저 실행 중, 클릭하여 보기",
    "background": "백그라운드 브라우저"
  },
  "bridge": {
    "selectChat": "대화를 선택하세요",
    "noSessions": "아직 대화가 없어요",
    "noMessages": "아직 메시지가 없어요",
    "empty": "메시지 없음",
    "notConfigured": "{platform}이(가) 설정되지 않았어요",
    "goToSettings": "설정으로 이동",
    "resetContext": "컨텍스트 리셋",
    "resetContextTip": "다음 메시지부터 새 대화가 시작돼요",
    "replyInterrupted": "(응답이 중단되어 위 내용이 불완전할 수 있어요)",
    "replyFailed": "(응답 생성에 실패했어요. 잠시 후 다시 시도해 주세요)",
    "sessionBusy": "데스크톱 세션이 아직 응답 중이에요. 잠시 후 다시 보내 주세요"
  },
  "notification": {
    "turnCompletionBody": "이번 턴이 완료됐어요"
  },
  "error": {
    "pathsRequired": "paths 배열이 필요해요",
    "tooManyFiles": "파일이 너무 많아요 (최대 {max}개, 현재 {n}개)",
    "pathNotFound": "경로를 찾을 수 없어요",
    "missingParam": "{param} 파라미터가 없어요",
    "invalidJson": "요청 본문은 JSON 객체여야 해요",
    "sessionNotFound": "세션 파일을 찾을 수 없어요",
    "stillStreaming": "{name}이(가) 아직 응답 중이에요. 잠시 기다려 주세요",
    "agentNameEmpty": "어시스턴트 이름을 비워둘 수 없어요",
    "agentIdInvalid": "어시스턴트 ID에 잘못된 문자가 포함되어 있어요",
    "agentAlreadyExists": "어시스턴트 \"{id}\"가 이미 존재해요",
    "agentSwitching": "어시스턴트를 전환 중이에요. 잠시 후 다시 시도해 주세요",
    "agentNotFound": "어시스턴트 \"{id}\"를 찾을 수 없거나 초기화되지 않았어요",
    "agentModelNotAvailable": "agent \"{id}\"에 설정된 모델 \"{model}\"이(가) 사용 가능한 목록에 없어요",
    "agentDeleteActive": "현재 사용 중인 어시스턴트는 삭제할 수 없어요",
    "agentNotExists": "어시스턴트 \"{id}\"가 존재하지 않아요",
    "modelNoResponse": "모델이 아무 내용도 반환하지 않았어요. API 설정과 네트워크 연결을 확인해 주세요.",
    "noActiveSession": "활성 세션이 없어요",
    "compacting": "압축 중이에요",
    "waitForReply": "응답이 완료된 후 압축해 주세요",
    "compactFailed": "압축 실패: {msg}",
    "maxImages": "이미지는 최대 {max}장까지 가능해요",
    "maxVideos": "비디오는 최대 {max}개까지 가능해요",
    "maxAudios": "오디오는 최대 {max}개까지 가능해요",
    "unsupportedImageFormat": "지원하지 않는 이미지 형식: {mime}",
    "unsupportedVideoFormat": "지원하지 않는 비디오 형식: {mime}",
    "unsupportedAudioFormat": "지원하지 않는 오디오 형식: {mime}",
    "imageTooLarge": "이미지 한 장당 20MB를 초과할 수 없어요",
    "videoTooLarge": "비디오 하나는 20MB를 초과할 수 없어요",
    "audioTooLarge": "오디오 하나는 50MB를 초과할 수 없어요",
    "viewImage": "(이미지 보기)",
    "viewVideo": "(비디오 보기)",
    "listenAudio": "(오디오 듣기)",
    "modelNoVision": "현재 모델은 이미지를 지원하지 않아요. 이미지를 지원하는 모델로 전환해 주세요",
    "searchProviderNotConfigured": "검색 provider가 설정되지 않았어요",
    "searchProviderMissingKey": "검색 provider \"{provider}\"의 API Key가 없어요",
    "searchProviderUnknown": "알 수 없는 검색 provider: {provider}",
    "searchFailed": "검색 실패: {msg}",
    "searchEmptyQuery": "검색 키워드를 입력해 주세요.",
    "searchNoResults": "관련 결과를 찾지 못했어요. (via {provider})",
    "searchResults": "검색 결과 (via {provider}):\n\n{results}",
    "searchError": "검색 오류: {msg}",
    "fetchEmptyUrl": "가져올 URL을 입력해 주세요.",
    "fetchHttpOnly": "http/https 프로토콜의 URL만 지원해요.",
    "fetchInvalidUrl": "잘못된 URL: {url}",
    "fetchSsrf": "내부 네트워크 주소 접근이 금지되어 있어요: {host}",
    "fetchRedirectLimit": "리다이렉트 횟수 초과 ({max})",
    "fetchHttpError": "가져오기 실패: HTTP {status} {statusText}",
    "fetchTruncated": "\n\n[... 내용이 잘렸어요. 총 {len}자]",
    "fetchSource": "출처: {host}{path} ({format})\n\n",
    "fetchTimeout": "가져오기 타임아웃 ({sec}s): {url}",
    "fetchError": "가져오기 오류: {msg}",
    "browserError": "오류: {msg}",
    "browserAlreadyRunning": "브라우저가 이미 실행 중이에요",
    "browserLaunched": "브라우저를 시작했어요",
    "browserNotRunning": "브라우저가 실행되고 있지 않아요",
    "browserClosed": "브라우저를 닫았어요",
    "browserNavigateNeedUrl": "navigate에는 url 파라미터가 필요해요",
    "browserNavigated": "{title}(으)로 이동했어요\nURL: {url}\n\n{snapshot}",
    "browserClickNeedRef": "click에는 ref 파라미터가 필요해요",
    "browserClicked": "[{ref}]을(를) 클릭했어요\n\n{snapshot}",
    "browserTypeNeedText": "type에는 text 파라미터가 필요해요",
    "browserTyped": "텍스트를 입력했어요{target}\n\n{snapshot}",
    "browserScrollNeedDir": "scroll에는 direction 파라미터가 필요해요 (up/down)",
    "browserScrolled": "{dir}(으)로 스크롤했어요\n\n{snapshot}",
    "browserSelectNeedRef": "select에는 ref 파라미터가 필요해요",
    "browserSelectNeedValue": "select에는 value 파라미터가 필요해요",
    "browserSelected": "[{ref}] → \"{value}\" 선택했어요\n\n{snapshot}",
    "browserKeyNeedKey": "key에는 key 파라미터가 필요해요",
    "browserKeyPressed": "{key}을(를) 눌렀어요\n\n{snapshot}",
    "browserWaitDone": "대기 완료\n\n{snapshot}",
    "browserEvalNeedExpr": "evaluate에는 expression 파라미터가 필요해요",
    "browserOutputTruncated": "\n\n[... 출력이 잘렸어요]",
    "browserShown": "브라우저 창을 앞으로 가져왔어요",
    "browserUnknownAction": "알 수 없는 동작: {action}",
    "browserActionFailed": "브라우저 동작 실패: {msg}",
    "browserSessionUnavailable": "이 세션의 브라우저 인스턴스를 사용할 수 없어요{reason}. 계속하기 전에 브라우저를 다시 시작하세요.",
    "skillNeedAbsolutePath": "절대 경로가 필요해요",
    "skillPathNotExists": "경로가 존재하지 않아요",
    "skillMissingSkillMd": "폴더에 SKILL.md가 없어요",
    "skillUnsupportedFormat": ".zip 또는 .skill 파일만 지원해요",
    "skillMissingSkillMdInZip": "압축 파일에 SKILL.md가 없어요",
    "skillExtractFailed": "압축 해제 실패: {msg}",
    "skillMissingName": "SKILL.md에 name 필드가 없어요",
    "skillNameInvalid": "스킬 이름이 유효하지 않아요 (\"{name}\"). 영문자, 숫자, 밑줄, 하이픈만 사용할 수 있어요.",
    "skillPathMustBeAbsolute": "경로는 절대 경로여야 해요: {path}",
    "skillCannotAddSelfDir": "HanaAgent 자체의 스킬 디렉토리는 추가할 수 없어요",
    "skillInvalidName": "유효하지 않은 스킬 이름이에요",
    "skillExternalCannotDelete": "외부 호환 스킬은 여기서 삭제할 수 없어요",
    "skillNotExists": "스킬이 존재하지 않아요",
    "channelsDisabled": "채널 기능이 사용자에 의해 비활성화되었어요",
    "channelReadNeedChannel": "오류: read에는 channel 파라미터가 필요해요",
    "channelNotExists": "채널 \"{channel}\"이(가) 존재하지 않아요",
    "agentNotChannelMember": "채널 \"{channel}\"의 멤버가 아니라서 메시지를 보낼 수 없어요",
    "channelNoMessages": "(채널에 메시지가 없어요)",
    "channelPostNeedParams": "오류: post에는 channel과 content 파라미터가 필요해요",
    "channelPosted": "#{channel}에 전송했어요",
    "channelCreateNeedParams": "오류: create에는 name과 members 파라미터가 필요해요",
    "channelCreated": "채널 #{name} ({id}) 생성 완료, 멤버: {members}",
    "channelCreateFailed": "생성 실패: {msg}",
    "channelNoJoined": "아직 채널에 참여하지 않았어요",
    "unknownAction": "알 수 없는 동작: {action}",
    "cannotSelfDm": "자기 자신에게 DM을 보낼 수 없어요",
    "dmSent": "{name}에게 DM을 보냈어요",
    "agentNotFoundAvailable": "agent「{id}」를 찾을 수 없어요. agent의 id 필드 값(표시 이름이 아닌)을 사용해 주세요. 사용 가능:\n{ids}",
    "noOtherAgents": "현재 사용할 수 있는 다른 agent가 없어요.",
    "cronNoJobs": "예약 작업이 없어요",
    "cronAddNeedParams": "오류: add에는 scheduleType, schedule, prompt 파라미터가 필요해요",
    "cronEveryMustBeNumber": "오류: every 타입의 schedule은 양의 정수(밀리초)여야 해요",
    "cronCreated": "예약 작업을 생성했어요: {label} ({id})",
    "cronConfirmed": "사용자가 확인했어요. 예약 작업을 생성했어요: {label} ({id})",
    "cronRejected": "사용자가 예약 작업 \"{label}\"의 생성을 취소했어요",
    "cronTimeout": "예약 작업 \"{label}\" 확인 시간이 초과되었어요",
    "cronPendingConfirm": "예약 작업 {label} 생성 준비 중, 확인 대기",
    "cronRemoveNeedId": "오류: remove에는 id 파라미터가 필요해요",
    "cronJobNotFound": "작업 {id}를 찾을 수 없어요",
    "cronRemoved": "작업 {id}를 삭제했어요",
    "cronToggleNeedId": "오류: toggle에는 id 파라미터가 필요해요",
    "cronToggled": "작업 {id} {state}",
    "cronEnabled": "활성화됨",
    "cronDisabled": "비활성화됨",
    "notifySent": "알림을 보냈어요: {title}",
    "notifyFailed": "알림 전송 실패: {msg}",
    "artifactCreated": "미리보기를 생성했어요: {title}",
    "pinnedAlreadyExists": "이미 고정 메모리에 있어요.",
    "pinnedAdded": "기억했어요: {content}",
    "pinnedEmpty": "고정 메모리가 비어 있어요. 제거할 내용이 없어요.",
    "pinnedNotFound": "\"{keyword}\"을(를) 포함하는 고정 메모리를 찾을 수 없어요.",
    "pinnedRemoved": "{count}개를 제거했어요: {items}",
    "expEmpty": "경험 라이브러리가 비어 있어요.",
    "expCategoryNotFound": "\"{category}\" 카테고리의 경험을 찾을 수 없어요.",
    "expEmptyInput": "카테고리 이름과 경험 내용을 비워둘 수 없어요.",
    "expDuplicate": "이 경험은 이미 기록되어 있어요.",
    "expRecorded": "경험을 기록했어요 [{category}]: {content}",
    "expPaused": "경험은 일시 중지되어 있어요.",
    "outputFileNeedPaths": "filepaths 배열 또는 filePath가 필요해요.",
    "outputFileNotAbsolute": "경로는 절대 경로여야 해요: {path}",
    "outputFileNotFound": "파일을 찾을 수 없어요: {path}",
    "outputFilePresented": "파일을 표시했어요: {summary}",
    "settingsUnknownKey": "알 수 없는 설정 항목 \"{key}\". search로 올바른 키를 찾아보세요.",
    "settingsInvalidValue": "\"{value}\"은(는) 유효한 옵션이 아니에요. 사용 가능: {options}",
    "settingsInvalidToggle": "toggle 유형은 \"true\" 또는 \"false\"만 허용돼요.",
    "settingsNotReady": "설정 시스템이 준비되지 않았어요",
    "settingsNoAgent": "활성 에이전트가 없습니다. 이 설정을 변경할 수 없습니다",
    "settingsApplied": "\"{label}\"을(를) {value}(으)로 변경했어요",
    "settingsApplyFailed": "설정 변경 실패: {msg}",
    "settingsCancelled": "사용자가 \"{label}\" 변경을 취소했어요",
    "settingsTimeout": "\"{label}\" 변경 확인 시간이 초과되었어요. 설정이 변경되지 않았어요",
    "subagentMaxConcurrent": "현재 {max}개의 서브 에이전트가 실행 중이에요. 완료될 때까지 기다려 주세요.",
    "subagentParentSessionRequired": "subagent에는 활성 부모 대화와 백그라운드 작업 저장소가 필요해요. 현재 컨텍스트에서는 계속 가능한 인스턴스를 만들 수 없어요.",
    "subagentWriteAccessDenied": "쓰기 권한을 부여할 수 없어요: 부모 세션이 읽기 전용 모드라서 서브에이전트 권한은 부모를 초과할 수 없어요. 세션을 조작 가능 모드로 전환한 뒤 다시 시도하거나, access:\"read\"로 다시 디스패치해 주세요.",
    "subagentFailed": "서브 에이전트 실행 실패: {msg}",
    "subagentTimeout": "서브 에이전트 실행 시간 초과 ({minutes}분)",
    "subagentAborted": "서브 에이전트가 중단되었어요",
    "subagentNoOutput": "(서브 에이전트가 출력을 생성하지 않았어요)",
    "subagentProducedFiles": "서브 에이전트가 파일 출력을 만들었어요:\n{files}",
    "subagentStopError": "서브 에이전트가 작업을 완료하기 전에 실패했어요.",
    "subagentStopLength": "서브 에이전트가 정상적으로 완료되지 않았어요 (stopReason: length, 출력 한도 도달).",
    "subagentStopReason": "서브 에이전트가 정상적으로 완료되지 않았어요 (stopReason: {reason}).",
    "subagentToolFailed": "서브 에이전트 도구 실행 실패: {msg}",
    "subagentDispatched": "서브 작업을 보냈어요 (task-id: {taskId}). 완료되면 결과가 자동으로 전달돼요.",
    "subagentThreadQueued": "서브 작업을 보냈어요 (task-id: {taskId}). 인스턴스 {threadId}가 사용 중이라 대기열에 넣었어요. 현재 작업이 끝나면 실행돼요.",
    "subagentThreadClosed": "서브 에이전트 인스턴스를 닫았어요: {threadId}",
    "installSkillDisabled": "스킬 설치 기능이 활성화되지 않았어요. 설정에서 「Agent의 스킬 생성/설치 허용」을 켜주세요.",
    "installSkillGithubDisabled": "GitHub 스킬 가져오기가 활성화되지 않았어요. 설정에서 「GitHub에서 스킬 가져오기 허용」을 켜주세요.",
    "installSkillInvalidGithubUrl": "잘못된 GitHub URL: {url}",
    "installSkillGithubApiFailed": "리포지토리 정보를 가져올 수 없어요 (HTTP {status}). URL을 확인해 주세요.",
    "installSkillGithubApiError": "GitHub API 접근 실패: {msg}",
    "installSkillStarTooLow": "이 리포지토리는 {stars} stars만 있어요 (기준 {min}). 안전성을 보장할 수 없어 설치를 거부했어요.",
    "installSkillNoSkillMd": "{owner}/{repo}에서 SKILL.md를 찾을 수 없어요 (시도한 경로: {paths}).",
    "installSkillSafetyFailed": "[보안] 스킬 안전 검토를 통과하지 못했어요. 설치가 차단되었어요.\n이유: {reason}\n\n사용자에게 이 스킬이 안전 검토를 통과하지 못했음과 구체적인 이유를 알려주세요. 사용자는 설정에서 안전 검토를 비활성화할 수 있어요 (비권장).",
    "installSkillNameInvalid": "스킬 이름이 유효하지 않아요{name}. 영문자, 숫자, 밑줄, 하이픈만 사용할 수 있어요.",
    "installSkillSuccess": "스킬 \"{name}\" 설치 성공!\n출처: {source} (⭐ {stars} stars)\n이유: {reason}",
    "installSkillNeedInput": "github_url 또는 skill_content (SKILL.md 내용)를 제공해 주세요.",
    "installSkillNeedName": "skill_content 모드에서는 skill_name이 필요해요.",
    "installSkillSuccessLocal": "스킬 \"{name}\" 설치 성공!\n이유: {reason}",
    "installSkillSizeLimit": "스킬 내용이 크기 제한을 초과했어요 ({size}KB > {max}KB)",
    "installSkillNoUtility": "안전 검토 불가: utility 모델이 설정되지 않았어요. 설정에서 보조 모델을 설정해 주세요",
    "installSkillUtilityIncomplete": "안전 검토 불가: 보조 모델 설정이 불완전해요 (API key 또는 base URL 누락). 설정에서 보완해 주세요",
    "installSkillSafetyPassed": "✓ 안전 검토를 통과했어요",
    "installSkillSafetyEmpty": "안전 검토가 빈 응답을 반환했어요",
    "installSkillSafetyUnexpected": "안전 검토가 예상하지 못한 형식을 반환했어요: {reply}",
    "installSkillSafetyTimeout": "안전 검토 타임아웃 또는 네트워크 오류",
    "activeSessionOnly": "현재 어시스턴트의 활성 세션만 승격할 수 있어요",
    "heartbeatTriggered": "하트비트가 트리거되었어요",
    "dirNotAllowed": "디렉토리가 허용 범위에 없어요",
    "noWorkspace": "워크스페이스가 설정되지 않았어요",
    "tokenSuccess": "토큰을 성공적으로 가져왔어요",
    "verifyFailed": "인증에 실패했어요",
    "tokenFetchFailed": "access_token 가져오기 실패",
    "botInfoFailed": "봇 정보 가져오기 실패",
    "platformTestUnsupported": "이 플랫폼은 테스트를 지원하지 않아요",
    "codexNoHealthCheck": "Codex API는 헬스 체크를 지원하지 않아요",
    "modelNotFound": "모델을 찾을 수 없어요: {id}",
    "noUtilityModel": "utility 모델이 설정되지 않았어요. 설정에서 추가해 주세요",
    "noUtilityLargeModel": "utility_large 모델이 설정되지 않았어요. 설정에서 추가해 주세요",
    "modelNoProvider": "{role} 모델 \"{model}\"에 provider가 연결되지 않았어요",
    "providerMissingApi": "provider \"{provider}\"에 API 프로토콜 설정이 없어요",
    "providerMissingCreds": "provider \"{provider}\"의 인증 정보가 불완전해요",
    "utilityApiProviderMismatch": "utility_api.provider는 모델 \"{model}\"의 provider와 일치해야 해요",
    "utilityApiMissingCreds": "utility_api 인증 정보가 불완전해요 (provider: {provider})",
    "noAvailableModel": "사용 가능한 모델이 없어요. 설정에서 API 키와 모델을 먼저 설정해 주세요",
    "noActiveSessionPrompt": "활성 세션이 없어요. 먼저 createSession()을 호출해 주세요",
    "sessionNotInCache": "세션 \"{path}\"이(가) 캐시에 없어요",
    "agentNotInitialized": "agent \"{id}\"가 존재하지 않거나 초기화되지 않았어요",
    "resolveModelNoChatModel": "resolveModel: models.chat이 지정되지 않아 모델을 선택할 수 없어요",
    "resolveModelNotAvailable": "resolveModel: 모델 \"{id}\"가 사용 가능한 목록에 없어요",
    "executeIsolatedNoModel": "executeIsolated: agent \"{name}\"에 사용 가능한 모델이 없어요",
    "bridgeAgentNoChatModel": "[bridge] agent \"{name}\"에 models.chat이 설정되지 않았어요",
    "bridgeAgentModelNotAvailable": "[bridge] agent \"{name}\"에 설정된 모델 \"{model}\"이(가) 사용 가능한 목록에 없어요",
    "noAgentsFound": "agents/ 디렉토리에 어시스턴트가 없어요. 먼저 하나를 만들어 주세요",
    "channelNotFoundById": "채널 \"{id}\"이(가) 존재하지 않아요",
    "channelAlreadyExists": "채널 \"{id}\"이(가) 이미 존재해요",
    "providerMissingBaseUrl": "provider \"{provider}\"에 Base URL이 없어요",
    "providerMissingApiKey": "provider \"{provider}\"에 API Key가 없어요",
    "modelNameEmpty": "모델 이름을 비워둘 수 없어요",
    "modelNotRegistered": "모델 \"{model}\"이(가) models.json에 provider로 등록되지 않았어요",
    "modelProviderMissingApi": "모델 \"{model}\"의 provider \"{provider}\"에 API 프로토콜 설정이 없어요",
    "modelProviderIncomplete": "모델 \"{model}\"의 provider \"{provider}\" 설정이 불완전해요",
    "browserDesktopOnly": "브라우저 기능은 Electron 데스크톱 모드에서만 사용할 수 있어요",
    "browserCmdTimeout": "브라우저 명령 타임아웃: {cmd}",
    "agentExecNotInit": "agent \"{id}\"가 존재하지 않거나 초기화되지 않았어요",
    "bridgeMgrNotStarted": "외부 플랫폼 관리자가 시작되지 않았어요",
    "qqTokenFailed": "access_token 가져오기 실패: {detail}",
    "missingApiProtocol": "API 프로토콜 설정이 없어요",
    "missingApiKey": "API Key가 없어요",
    "unsupportedApiProtocol": "지원하지 않는 API 프로토콜: {api}",
    "missingModelId": "모델 ID가 없어요",
    "missingBaseUrl": "Base URL이 없어요",
    "llmInvalidJson": "LLM이 파싱할 수 없는 JSON을 반환했어요 ({status})",
    "llmEmptyResponse": "LLM이 빈 내용을 반환했어요",
    "xlsxParseFailed": "{ext} 파일을 파싱할 수 없어요: {msg}",
    "docxParseFailed": "{ext} 파일을 파싱할 수 없어요: {msg}",
    "compatDirCreated": "누락된 디렉토리 {count}개를 생성했어요",
    "compatConfigEmpty": "파일이 비어 있어요",
    "compatConfigInvalid": "YAML 형식이 아닌 것 같아요",
    "compatConfigCorrupted": "config.yaml 손상 ({msg}), 템플릿에서 다시 만들었어요",
    "compatConfigBackedUp": "config.yaml 손상 ({msg}), {backup}(으)로 백업했어요",
    "compatFactsCorrupted": "facts.db 손상 백업 완료, 빈 데이터베이스를 재구축해요",
    "defaultChannelName": "워크그룹",
    "defaultChannelDesc": "일상 업무 조율 채널. 모든 멤버가 여기서 소통해요.",
    "memorySearchLabel": "기억 검색",
    "memorySearchDesc": "기억 뱅크를 검색해요. 무언가에 대해 확실하지 않을 때, 이전에 이야기한 것 같지만 세부 사항이 기억나지 않을 때, 또는 더 많은 맥락이 필요할 때 사용하세요. 자연어 쿼리와 선택적 태그 필터를 입력해요.",
    "memorySearchQueryDesc": "자연어로 된 검색 쿼리",
    "memorySearchTagsDesc": "태그 필터, 정확한 매칭을 위해 2~5개 키워드 태그. 예: [\"초콜릿\", \"음식 취향\"]",
    "memorySearchDateFromDesc": "시작 날짜, 형식 YYYY-MM-DD",
    "memorySearchDateToDesc": "종료 날짜, 형식 YYYY-MM-DD",
    "memorySearchCrossChannelDesc": "다른 채널의 기억을 교차 검색할지 여부. 기본값 false: 채널 세션에서는 현재 채널과 일반 기억만 볼 수 있으며, 필요할 때만 명시적으로 true를 전달하세요",
    "memorySearchEmpty": "기억 뱅크에서 관련 내용을 찾을 수 없어요.",
    "memorySearchError": "기억 검색 오류: {msg}",
    "fallbackUserName": "사용자",
    "uploadFailed": "파일 가져오기 실패",
    "uploadPartialFail": "일부 파일을 가져올 수 없습니다: {files}",
    "stopTaskNotFound": "태스크 {taskId}를 찾을 수 없어요. 이미 완료됐거나 존재하지 않을 수 있어요",
    "stopTaskAlready": "태스크 {taskId}는 이미 종료됐어요",
    "stopTaskNoHandler": "태스크 {taskId}는 중단을 지원하지 않아요",
    "stopTaskDone": "태스크 {taskId}를 종료했어요"
  },
  "main": {
    "tray": {
      "show": "HanaAgent 표시",
      "settings": "설정",
      "quit": "종료"
    },
    "dialog": {
      "selectFolder": "작업 폴더 선택",
      "selectSkill": "스킬 선택",
      "selectPlugin": "플러그인 선택",
      "launchFailedTitle": "HanaAgent 실행 실패",
      "launchFailedBody": "HanaAgent v{version}\n\n{detail}\n\n상세 로그 저장 위치:\n{logPath}\n\n이 스크린샷이나 로그 파일을 개발자에게 보내주세요.",
      "serverRestartFailed": "HanaAgent v{version}\n\nServer가 충돌 후 재시작에 실패했어요.\n{error}\n\n앱을 다시 시작해 주세요.",
      "serverMultipleCrash": "HanaAgent v{version}\n\nServer가 여러 번 충돌했어요 ({reason}).\n\n앱을 다시 시작해 주세요.",
      "serverStartTimeout": "Server 시작 시간 초과",
      "serverKilledBySignal": "Server가 시그널로 종료되었어요 ({signal})",
      "serverExitedWithCode": "Server가 종료되었어요. 코드: {code}",
      "serverFilesNotReady": "자동 업데이트가 방금 완료되었고, 새 버전 파일이 아직 디스크에 쓰이고 있어요 ({missing} 없음). {waited}초 동안 기다렸지만 준비되지 않았어요. 잠시 후 HanaAgent를 다시 시작해 주세요.",
      "serverModuleMissing": "Server 시작 실패: 모듈 {module}을(를) 찾을 수 없어요.\n자동 업데이트가 완료된 직후 파일이 아직 디스크에 쓰이는 중일 때 자주 발생해요.\n권장: 1-2분 기다린 후 HanaAgent를 다시 시작해 주세요. 반복되면 GitHub에 신고해 주세요.",
      "installFailedTitle": "HanaAgent 업데이트",
      "installFailedBody": "업데이트 설치에 실패했어요:\n{error}\n\nHanaAgent를 다시 시작한 후 재시도하거나, 설정 페이지에서 수동으로 업데이트를 확인해 주세요."
    },
    "notification": {
      "ready": "알림이 준비되었어요"
    }
  },
  "devtools": {
    "heartbeat": "하트비트",
    "memoryExport": "메모리 내보내기",
    "onboarding": "Onboarding",
    "previewGuide": "가이드 미리보기",
    "reloadFrontend": "프론트엔드 새로고침",
    "tabLogs": "활동 로그",
    "tabSessions": "세션 목록",
    "tabPrompt": "System Prompt",
    "waitingConnection": "연결 대기 중...",
    "waitingServer": "Server 시작 대기 중...",
    "loading": "로딩 중...",
    "loadFailed": "로드 실패",
    "refreshBtn": "새로고침",
    "clickRefresh": "위의 새로고침을 클릭하세요",
    "noActivities": "아직 활동 없음",
    "heartbeatLabel": "자동 순찰",
    "cronLabel": "예약 작업",
    "heartbeatRunning": "하트비트 실행 중...",
    "heartbeatGenerating": "요약 생성 중...",
    "heartbeatDone": "하트비트 완료",
    "heartbeatNoSummary": "하트비트 완료 (요약 없음)",
    "memoryExported": "메모리 내보내기 완료",
    "exportFailed": "내보내기 실패",
    "onboardingOpened": "Onboarding 창이 열렸습니다",
    "previewOpened": "미리보기 모드 열림",
    "openFailed": "열기 실패",
    "frontendReloaded": "프론트엔드 새로고침 완료",
    "refreshFailed": "새로고침 실패",
    "triggerFailed": "트리거 실패",
    "requestFailed": "요청 실패",
    "justNow": "방금",
    "minutesAgo": "{n}분 전",
    "hoursAgo": "{n}시간 전",
    "chars": "자",
    "empty": "비어 있음",
    "serverConnected": "Server 연결됨 (port {port})"
  },
  "skillViewer": {
    "cantRead": "파일을 읽을 수 없습니다",
    "copied": "스킬 목록에 복사됨",
    "installFailed": "설치 실패: "
  },
  "cli": {
    "disconnected": "연결 끊김",
    "wsError": "WebSocket 오류: {msg}",
    "error": "오류: {msg}",
    "interrupted": "(중단됨)",
    "goodbye": "안녕히 ✿",
    "helpTitle": "명령어 목록",
    "helpModel": "현재 모델 보기",
    "helpModelSet": "모델 전환 (대화형)",
    "helpConfig": "설정 보기",
    "helpSessionNew": "새 세션",
    "helpSessionList": "세션 목록",
    "helpAgent": "현재 agent 보기",
    "helpAgentList": "모든 agent 보기",
    "helpAgentSwitch": "agent 전환",
    "helpJian": "현재 디렉토리의 메모 보기",
    "helpJianSub": "하위 디렉토리의 메모 보기",
    "helpLs": "데스크 파일 목록",
    "helpLsSub": "하위 디렉토리 파일 목록",
    "helpCat": "파일 내용 보기",
    "helpHelp": "이 도움말 표시",
    "helpEsc": "생성 중단",
    "helpCtrlC": "중단 / 종료",
    "noModels": "사용 가능한 모델이 없어요",
    "availableModels": "사용 가능한 모델:",
    "currentModel": "← 현재",
    "selectModel": "번호를 입력해 선택: ",
    "modelSwitched": "{name}(으)로 전환했어요",
    "cancelled": "취소",
    "currentModelLabel": "현재 모델:",
    "noModel": "(없음)",
    "currentConfig": "현재 설정",
    "notSet": "(미설정)",
    "sessionCreated": "새 세션을 만들었어요",
    "noSessions": "세션이 없어요",
    "sessionList": "세션 목록",
    "untitled": "(제목 없음)",
    "sessionUsage": "사용법: /session new | /session list",
    "agentList": "Agent 목록",
    "agentSwitched": "{name}(으)로 전환했어요",
    "currentAgent": "현재 Agent:",
    "jianTitle": "메모",
    "jianEmpty": "이 디렉토리에 메모가 없어요",
    "dirEmpty": "(비어있음)",
    "catUsage": "사용법: /cat <파일 경로>",
    "catFailed": "읽을 수 없어요: {status}",
    "unknownCommand": "알 수 없는 명령어: /{cmd}  /help로 도움말 보기",
    "inputHelp": "/help로 명령어 목록 보기"
  },
  "sandbox": {
    "blocked": "[보안] {reason}\n\n이 작업은 HanaAgent의 샌드박스 보안 정책에 의해 차단되었어요. 이는 명령이 경로나 권한 경계를 넘었다는 뜻이에요. 먼저 현재 워크스페이스, 정확한 경로 표기, 대상 파일이 허용된 워크스페이스 또는 session 경로에 있어야 하는지 확인하세요. 차단된 경로와 이유를 사용자에게 설명하고, 사용자가 명확히 결정한 경우에만 샌드박스 설정 변경을 논의하세요.",
    "noSudo": "sudo 사용이 금지되어 있어요",
    "noSu": "su 사용자 전환이 금지되어 있어요",
    "noChmod": "파일 권한 변경이 금지되어 있어요",
    "noChown": "파일 소유자 변경이 금지되어 있어요",
    "noDelRecursive": "재귀적 파일 삭제 (del /s)가 금지되어 있어요",
    "noRmdirRecursive": "재귀적 디렉토리 삭제 (rmdir /s)가 금지되어 있어요",
    "noRegEdit": "레지스트리 수정이 금지되어 있어요",
    "noTakeown": "파일 소유권 가져오기가 금지되어 있어요",
    "noIcacls": "파일 ACL 권한 수정이 금지되어 있어요",
    "noNetUser": "사용자/그룹 관리 작업이 금지되어 있어요",
    "noSchtasks": "예약 작업 생성이 금지되어 있어요",
    "noScService": "시스템 서비스 조작이 금지되어 있어요",
    "noPsExecutionBypass": "PowerShell 실행 정책 우회가 금지되어 있어요",
    "noFormat": "디스크 포맷이 금지되어 있어요",
    "noBcdedit": "부팅 구성 수정이 금지되어 있어요",
    "noWmic": "WMI 명령이 금지되어 있어요",
    "restrictedPath": "명령이 제한된 경로에 접근했어요: {path}",
    "writeRestricted": "[보안] 파일 시스템 쓰기는 허용된 워크스페이스와 session 경로로 제한되어 있어요. 사용자에게 샌드박스 설정 변경을 묻기 전에 현재 워크스페이스와 경로 표기를 확인하세요.",
    "osRequired": "[sandbox] standard 모드는 OS 레벨 샌드박스가 필요하지만 현재 플랫폼이 지원하지 않아요 ({platform}). sandbox-exec (macOS) 또는 bubblewrap (Linux)을 설치하거나 full-access 모드로 전환해 주세요.",
    "opRead": "읽기",
    "opWrite": "쓰기",
    "opDelete": "삭제",
    "denied": "{op} 거부됨: {path} (접근 레벨: {level})"
  },
  "error.llmTimeout": "Model request timed out",
  "error.llmRateLimited": "Model rate limited, please wait",
  "error.llmEmptyResponse": "Model returned empty response",
  "error.llmAuthFailed": "Model authentication failed",
  "error.llmSlowResponse": "Model is responding slowly, please wait",
  "error.fsPermission": "File permission denied",
  "error.fsNotFound": "File not found",
  "error.fsCopyFailed": "File copy failed",
  "error.wsDisconnected": "Connection lost",
  "error.fetchTimeout": "Request timed out",
  "error.fetchServerError": "Server error",
  "error.ipcFailed": "Internal communication error",
  "error.renderCrash": "Display error",
  "error.configParse": "Configuration file corrupted",
  "error.bridgeSendFailed": "Failed to send message to platform",
  "error.skillSyncFailed": "Skill sync failed",
  "error.memoryCompileFailed": "Memory compilation failed",
  "error.dbError": "Database error",
  "error.serverAuthFailed": "Authentication failed",
  "error.unknown": "An unexpected error occurred",
  "error.regionUnavailable": "This area is temporarily unavailable",
  "status.reconnecting": "Reconnecting...",
  "status.disconnected": "Connection lost",
  "status.reconnect": "Reconnect",
  "action.retry": "Retry",
  "mobile.update.available": "새 Hana 버전이 준비됐어요",
  "mobile.update.reload": "새로고침",
  "subagentAbort": "중지",
  "subagentAborted": "중지됨",
  "preview.toggle": "미리보기 패널",
  "preview.markdownPreview": "미리보기",
  "preview.exitMarkdownPreview": "편집으로 돌아가기",
  "preview.markdownEditorStatus": "선택 {selected}자 · 총 {total}자",
  "preview.markdownAttachmentInsertFailed": "첨부 파일 삽입에 실패했습니다"
}
