{
  "LoginPage": {
    "titleAccept": "로그인하여 수락하기",
    "titleWelcome": "다시 오신 것을 환영합니다",
    "descAccept": "로그인하시면 초대 페이지로 이동합니다.",
    "descWelcome": "계정에 로그인하세요",
    "emailLabel": "이메일",
    "emailPlaceholder": "you@example.com",
    "passwordLabel": "비밀번호",
    "forgotPassword": "비밀번호를 잊으셨나요?",
    "passwordPlaceholder": "비밀번호를 입력하세요",
    "signingIn": "로그인 중...",
    "signIn": "로그인",
    "noAccount": "계정이 없으신가요?",
    "createAccount": "계정 만들기",
    "linkExpired": "링크가 만료되었습니다. 비밀번호를 재설정하려면 “비밀번호를 잊으셨나요?”에서 새 링크를 요청하세요. 이메일 인증 중이었다면 다시 가입해 주세요.",
    "linkInvalid": "이 링크로는 로그인할 수 없습니다. 이메일 인증 중이었다면 이미 인증이 완료되었을 수 있으니 아래에서 로그인하세요. 비밀번호 재설정은 새 링크를 요청한 뒤 요청한 브라우저에서 열어 주세요."
  },
  "Sidebar": {
    "title": "WhatsApp용 CRM 템플릿",
    "primaryNav": "기본 메뉴",
    "dashboard": "대시보드",
    "inbox": "인박스",
    "notifications": "알림",
    "contacts": "연락처",
    "pipelines": "파이프라인",
    "broadcasts": "브로드캐스트",
    "automations": "자동화",
    "flows": "플로우",
    "aiAgents": "AI 에이전트",
    "settings": "설정",
    "beta": "베타",
    "unreadConversations": "읽지 않은 대화 {count}건",
    "unreadNotifications": "읽지 않은 알림 {count}건",
    "roleOwner": "소유자",
    "roleAdmin": "관리자",
    "roleAgent": "상담원",
    "roleViewer": "뷰어",
    "closeMenu": "메뉴 닫기",
    "defaultUser": "사용자",
    "defaultAvatar": "아바타",
    "menuProfile": "프로필",
    "menuSettings": "설정",
    "menuSignOut": "로그아웃"
  },
  "Header": {
    "dashboard": "대시보드",
    "inbox": "인박스",
    "notifications": "알림",
    "contacts": "연락처",
    "pipelines": "파이프라인",
    "broadcasts": "브로드캐스트",
    "automations": "자동화",
    "settings": "설정",
    "openMenu": "메뉴 열기",
    "openAccountMenu": "계정 메뉴 열기",
    "defaultUser": "사용자",
    "defaultAvatar": "아바타",
    "menuProfile": "프로필",
    "menuSettings": "설정",
    "menuSignOut": "로그아웃"
  },
  "ModeToggle": {
    "switchMode": "{mode} 모드로 전환"
  },
  "AccountAccess": {
    "unlinkedTitle": "이 사용자가 계정에 연결되어 있지 않음",
    "unlinkedBody": "이 문제가 해결되기 전에는 변경 사항이 저장되지 않습니다. 계정이나 역할이 없는 사용자의 모든 쓰기 요청은 데이터베이스가 거부합니다. 팀에 초대된 경우 소유자에게 초대를 다시 보내달라고 요청하세요. 자체 호스팅 환경이라면 이 사용자에 대해 계정 부트스트랩 마이그레이션이 실행되었는지 확인하세요.",
    "errorTitle": "권한을 불러올 수 없음",
    "errorBody": "계정 역할을 불러오지 못해 모든 작업이 읽기 전용으로 처리되며 변경 사항은 저장되지 않습니다. 연결을 확인한 후 다시 시도하세요.",
    "retry": "다시 시도"
  },
  "Dashboard": {
    "page": {
      "title": "대시보드",
      "description": "대화, 연락처, 딜, 브로드캐스트, 자동화 전반의 실시간 분석입니다.",
      "activeConversations": "진행 중인 대화",
      "newContactsToday": "오늘의 신규 연락처",
      "openDealsValue": "진행 중인 딜 금액",
      "messagesSentToday": "오늘 보낸 메시지",
      "newTodayVsYesterday": "어제 대비 신규",
      "vsYesterday": "어제 대비",
      "openDeals": "진행 중인 딜 {count}건",
      "noChange": "변동 없음 {suffix}"
    },
    "quickActions": {
      "newContact": "새 연락처",
      "newDeal": "새 딜",
      "newBroadcast": "새 브로드캐스트",
      "newAutomation": "새 자동화"
    },
    "activityFeed": {
      "title": "최근 활동",
      "viewAll": "전체 보기 →",
      "noActivity": "아직 활동이 없습니다",
      "noActivityHint": "메시지, 딜, 브로드캐스트, 자동화 관련 활동이 여기에 표시됩니다.",
      "showingOf": "{totalLoaded}개 중 {visible}개 표시{plus}",
      "show": "표시",
      "timeS": "{sec}초 전",
      "timeM": "{min}분 전",
      "timeH": "{hr}시간 전",
      "timeD": "{day}일 전",
      "items": {
        "newMessage": "{who}에게서 새 메시지",
        "newContact": "새 연락처: {name}",
        "dealInStage": "딜 \"{title}\" - {stage} 단계",
        "dealUpdated": "딜 \"{title}\" 업데이트됨",
        "broadcastSent": "브로드캐스트 \"{name}\" 연락처 {count}명에게 전송됨",
        "broadcastStatus": "브로드캐스트 \"{name}\" {status} (수신자 {count}명)",
        "broadcastStatusNames": {
          "draft": "초안",
          "scheduled": "예약됨",
          "sending": "전송 중",
          "sent": "전송됨",
          "failed": "실패"
        },
        "automationFailed": "자동화 \"{name}\" 실행 실패: {who}",
        "automationTriggered": "자동화 \"{name}\" 실행됨: {who}",
        "unknown": "알 수 없음",
        "aContact": "연락처",
        "automationFallback": "자동화"
      }
    },
    "conversationsChart": {
      "title": "기간별 대화 추이",
      "description": "방향별 일일 메시지 볼륨",
      "days": "{count}일",
      "noActivity": "이 기간에는 메시지 활동이 없습니다",
      "noActivityHint": "메시지를 주고받으면 이 차트가 채워지기 시작합니다.",
      "incoming": "수신",
      "outgoing": "발신",
      "tooltipIncoming": "수신 {count}건",
      "tooltipOutgoing": "발신 {count}건",
      "ariaLabel": "일별 대화 수"
    },
    "pipelineDonut": {
      "title": "파이프라인 금액",
      "description": "단계별 진행 중인 딜",
      "noOpenDeals": "아직 진행 중인 딜이 없습니다",
      "noOpenDealsHint": "파이프라인에서 딜을 만들면 단계별 분포를 여기서 확인할 수 있습니다.",
      "dealCount": "딜 {count}건",
      "total": "합계",
      "ariaLabel": "단계별 파이프라인 금액"
    },
    "responseTimeChart": {
      "title": "평균 첫 응답 시간",
      "description": "요일별, 고객의 첫 미응답 메시지에 답변하기까지 걸린 시간(분)",
      "target": "목표 {minutes}분",
      "thisWeek": "이번 주:",
      "lastWeek": "지난 주:",
      "noReplies": "아직 기록된 응답이 없습니다",
      "noRepliesHint": "고객 메시지에 답변하면 이 차트가 채워집니다.",
      "avgMinutes": "평균 시간(분)"
    },
    "emptyState": {
      "title": "아직 데이터가 충분하지 않습니다"
    }
  },
  "Inbox": {
    "page": {
      "whatsappNotConnected": "WhatsApp®이 연결되어 있지 않습니다. 설정으로 이동해 계정을 연결하세요."
    },
    "conversationList": {
      "searchPlaceholder": "대화 검색...",
      "filterAll": "전체",
      "filterUnread": "읽지 않음",
      "filterOpen": "열림",
      "filterPending": "대기 중",
      "filterClosed": "닫힘",
      "tags": "태그",
      "company": "회사",
      "allCompanies": "전체 회사",
      "clearAll": "모두 지우기",
      "noConversations": "대화를 찾을 수 없습니다",
      "noMessagesYet": "아직 메시지가 없습니다",
      "unknown": "알 수 없음"
    },
    "messageThread": {
      "backToConversations": "대화 목록으로 돌아가기",
      "hideContactPanel": "연락처 패널 숨기기",
      "showContactPanel": "연락처 패널 표시",
      "hideContact": "연락처 숨기기",
      "showContact": "연락처 표시",
      "refresh": "새로고침",
      "refreshConversation": "대화 새로고침",
      "status": "상태",
      "statusOpen": "열림",
      "statusPending": "대기 중",
      "statusClosed": "닫힘",
      "assign": "담당자 지정",
      "assigned": "담당자 지정됨",
      "unassign": "담당자 해제",
      "noTeammates": "지정 가능한 팀원이 없습니다",
      "me": " (나)",
      "noMessagesYet": "아직 메시지가 없습니다",
      "sendTemplateHint": "템플릿을 보내 대화를 시작하세요",
      "selectConversation": "대화를 선택하세요",
      "selectConversationHint": "왼쪽에서 대화를 선택해 메시지를 시작하세요",
      "today": "오늘",
      "yesterday": "어제",
      "customer": "고객",
      "unknown": "알 수 없음",
      "sendFailed": "전송 실패: {reason}",
      "sendTemplateFailed": "템플릿 전송 실패: {reason}",
      "waitForSending": "메시지 전송이 끝날 때까지 기다려 주세요",
      "reactionFailed": "반응 추가 실패: {reason}",
      "assignmentUpdateFailed": "담당자 변경에 실패했습니다",
      "networkError": "네트워크 오류",
      "documentFallback": "문서",
      "you": "나"
    },
    "sessionTimer": {
      "expired": "만료됨",
      "xhRemaining": "{hours}시간 남음",
      "xmRemaining": "{minutes}분 남음",
      "noCustomerMessages": "고객 메시지 없음"
    },
    "composer": {
      "draftHint": "✨를 눌러 AI로 답장 초안을 작성하세요 — 보내기 전에 수정할 수 있습니다",
      "sessionExpiredHint": "24시간 세션이 만료되었습니다. 다시 연결하려면 템플릿을 사용하세요.",
      "templates": "템플릿",
      "readOnlyPlaceholder": "읽기 전용 — 뷰어는 열람만 가능하고 답장할 수 없습니다",
      "sessionExpiredPlaceholder": "세션 만료 - 템플릿을 사용하세요",
      "typeMessagePlaceholder": "메시지를 입력하세요... (줄바꿈은 Shift+Enter)",
      "readOnlyTitle": "읽기 전용 — 현재 역할로는 메시지를 보낼 수 없습니다",
      "recording": "녹음 중… {current} / {max}",
      "cancel": "취소",
      "stopAndAttach": "중지하고 첨부",
      "attachMedia": "미디어 첨부",
      "photo": "사진",
      "video": "동영상",
      "document": "문서",
      "voiceNote": "음성 메모",
      "sendTemplate": "템플릿 보내기",
      "aiNotConfigured": "AI가 아직 설정되지 않았습니다 — 설정 → AI 어시스턴트에서 활성화하세요.",
      "draftFailed": "답장 초안을 작성하지 못했습니다.",
      "draftEmpty": "어시스턴트가 답장을 반환하지 않았습니다.",
      "aiUnreachable": "AI 어시스턴트에 연결할 수 없습니다.",
      "recordingTooLong": "녹음이 너무 깁니다 (16MB 초과).",
      "recordingUnsupported": "이 브라우저에서는 음성 녹음을 지원하지 않습니다.",
      "microphoneDenied": "마이크 접근이 거부되었거나 사용할 수 없습니다.",
      "draftWithAI": "AI로 답장 초안 작성",
      "addCaption": "캡션 추가…",
      "removeAttachment": "첨부 파일 제거",
      "moreActions": "더보기",
      "interactiveMessage": "인터랙티브 메시지",
      "quickReplies": "빠른 답장",
      "quickRepliesEmpty": "아직 빠른 답장이 없습니다. 설정 → 빠른 답장에서 추가하세요.",
      "saveAsQuickReply": "빠른 답장으로 저장",
      "send": "보내기",
      "quickReplyNamePrompt": "이 빠른 답장의 이름을 지정하세요:",
      "quickReplySaved": "빠른 답장으로 저장되었습니다.",
      "quickReplySaveError": "빠른 답장을 저장하지 못했습니다.",
      "fileTooLarge": "파일 크기가 {size}MB입니다 — {kind} 제한은 {max}MB입니다.",
      "mediaKind": {
        "image": "이미지",
        "video": "동영상",
        "document": "문서",
        "audio": "오디오"
      },
      "uploadFailed": "업로드에 실패했습니다."
    },
    "bubble": {
      "photo": "사진",
      "video": "동영상",
      "audio": "오디오",
      "unavailable": "{label}을(를) 사용할 수 없습니다",
      "document": "문서",
      "locationShared": "위치 공유됨",
      "template": "템플릿",
      "buttonReply": "버튼 응답",
      "interactiveReply": "[인터랙티브 응답]",
      "unsupported": "[지원되지 않는 메시지 형식]",
      "aiBadge": "AI",
      "aiBadgeTitle": "AI 어시스턴트가 자동으로 전송함",
      "notDelivered": "전송 실패",
      "download": "다운로드",
      "downloadFailed": "첨부파일을 다운로드할 수 없습니다",
      "viewImage": "이미지 보기",
      "expandVideo": "동영상 확대",
      "imageAlt": "공유된 이미지"
    },
    "mediaViewer": {
      "counter": "{total}개 중 {index}번째",
      "previous": "이전",
      "next": "다음",
      "zoomIn": "실제 크기로 보기",
      "zoomOut": "화면에 맞추기",
      "openOriginal": "원본 열기",
      "download": "다운로드",
      "downloadFailed": "첨부파일을 다운로드할 수 없습니다",
      "failed": "이 첨부파일은 더 이상 사용할 수 없습니다",
      "imageAlt": "공유된 이미지",
      "you": "나"
    },
    "actions": {
      "reply": "답장",
      "copyText": "텍스트 복사",
      "delete": "삭제",
      "react": "반응 남기기",
      "reactWith": "{emoji}(으)로 반응하기",
      "nothingToCopy": "복사할 내용이 없습니다",
      "copied": "복사됨",
      "copyFailed": "복사 실패"
    },
    "replyQuote": {
      "photo": "[사진]",
      "video": "[동영상]",
      "document": "[문서]",
      "audio": "[오디오]",
      "voiceMessage": "[음성 메시지]",
      "location": "[위치]",
      "template": "[템플릿]",
      "message": "[메시지]",
      "cancelReply": "답장 취소"
    },
    "templatePicker": {
      "sendTemplate": "템플릿 보내기",
      "fillPlaceholders": "이 템플릿을 렌더링하려면 자리표시자를 채워주세요. Meta는 모든 변수 값을 요구합니다.",
      "pickTemplate": "이 연락처에 보낼 승인된 WhatsApp 템플릿을 선택하세요.",
      "noApprovedTemplates": "승인된 템플릿이 없습니다",
      "noApprovedTemplatesHint": "Meta WhatsApp 관리자에서 템플릿을 승인한 뒤 설정 → 템플릿에서 동기화하세요.",
      "preview": "미리보기",
      "headerValuePlaceholder": "헤더 변수 값",
      "bodyValuePlaceholder": "{val}의 값",
      "urlSuffixValuePlaceholder": "URL 접미사 값",
      "finalUrl": "최종 URL: {url}",
      "back": "뒤로",
      "cancel": "취소",
      "send": "템플릿 보내기",
      "headerVarLabel": "헤더 {var}",
      "bodyVarLabel": "본문 {var}",
      "urlButtonVarLabel": "URL 버튼 \"{text}\" — {var} 값"
    },
    "sidebar": {
      "contactInfo": "연락처 정보",
      "tags": "태그",
      "notes": "메모",
      "deals": "딜",
      "noTags": "태그 없음",
      "noDeals": "딜 없음",
      "addNotePlaceholder": "메모 추가..."
    },
    "aiBanner": {
      "pausedTitle": "이 대화에서 AI 어시스턴트가 일시 중지됨",
      "activeText": "AI 어시스턴트가 자동으로 응답 중입니다",
      "takeOver": "직접 처리",
      "resume": "AI 재개",
      "tookOver": "이 대화를 직접 처리하기 시작했습니다.",
      "resumed": "AI가 재개되었습니다.",
      "updateError": "AI 어시스턴트를 업데이트하지 못했습니다.",
      "networkError": "서버에 연결할 수 없습니다."
    }
  },
  "Contacts": {
    "page": {
      "title": "연락처",
      "subtitle": "연락처 목록을 관리하세요. 전체 연락처 {count}개.",
      "subtitleZero": "연락처 목록을 관리하세요.",
      "customFieldsBtn": "커스텀 필드",
      "selectAllOnPage": "이 페이지의 모든 연락처 선택",
      "importBtn": "가져오기",
      "addContactBtn": "연락처 추가",
      "searchPlaceholder": "이름, 전화번호, 이메일로 검색...",
      "filterByTags": "태그로 필터링",
      "clearAll": "모두 지우기",
      "noTagsYet": "아직 태그가 없습니다.",
      "selectedCount": "{count}개 선택됨",
      "clearSelection": "지우기",
      "deleteSelected": "선택 항목 삭제",
      "tableColumns": {
        "name": "이름",
        "phone": "전화번호",
        "email": "이메일",
        "company": "회사",
        "tags": "태그",
        "createdAt": "생성일"
      },
      "loading": "연락처를 불러오는 중...",
      "noContactsMatch": "필터와 일치하는 연락처가 없습니다.",
      "noContactsYet": "아직 연락처가 없습니다.",
      "addFirstContact": "첫 연락처 추가하기",
      "unnamed": "이름 없음",
      "editAction": "수정",
      "deleteAction": "삭제",
      "showingPagination": "전체 {total}개 중 {start}-{end}",
      "pageCount": "{total} 중 {page}페이지",
      "deleteContactTitle": "연락처 삭제",
      "deleteContactDesc": "{name}을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
      "cancel": "취소",
      "deleteBtn": "삭제",
      "deleteBulkTitle": "연락처 삭제",
      "deleteBulkDesc": "선택한 연락처 {count}개를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
      "toastFailedLoad": "연락처를 불러오지 못했습니다",
      "toastFailedDelete": "연락처를 삭제하지 못했습니다",
      "toastDeleted": "연락처가 삭제되었습니다",
      "toastBulkFailedDelete": "연락처를 삭제하지 못했습니다",
      "toastBulkDeleted": "연락처 {count}개가 삭제되었습니다",
      "filterByTag": "{name}(으)로 필터링",
      "removeTagFilter": "{name} 필터 제거",
      "selectContact": "{name} 선택"
    },
    "form": {
      "addTitle": "연락처 추가",
      "addDesc": "새 연락처를 만듭니다. 이름은 필수입니다.",
      "editTitle": "연락처 수정",
      "editDesc": "연락처 정보와 태그를 업데이트합니다.",
      "nameLabel": "이름",
      "namePlaceholder": "홍길동",
      "phoneLabel": "전화번호",
      "phonePlaceholder": "+1234567890",
      "phoneHint": "국가 코드를 포함하세요. 예: 미국은 +1",
      "emailLabel": "이메일",
      "emailPlaceholder": "jane@example.com",
      "companyLabel": "회사",
      "companyPlaceholder": "Acme Corp",
      "tagsLabel": "태그",
      "tagsPlaceholder": "태그 선택...",
      "noTagsFound": "태그를 찾을 수 없습니다.",
      "createTagAction": "\"{value}\" 태그 만들기",
      "cancel": "취소",
      "save": "연락처 저장",
      "update": "업데이트",
      "create": "만들기",
      "toastSuccessAdd": "연락처가 생성되었습니다",
      "toastSuccessEdit": "연락처가 업데이트되었습니다",
      "toastError": "연락처를 저장하지 못했습니다",
      "toastConflict": "이 전화번호를 가진 연락처가 이미 있습니다",
      "viewExisting": "{name} 보기",
      "dupExact": "이 전화번호를 가진 연락처가 이미 있습니다.",
      "dupSimilar": "매우 유사한 번호를 가진 연락처가 이미 있습니다.",
      "loadingTags": "태그를 불러오는 중...",
      "noTagsAvailable": "사용 가능한 태그가 없습니다. 설정에서 태그를 만드세요.",
      "phoneRequired": "전화번호는 필수입니다",
      "phoneNeedsCountryCode": "국가 코드를 포함하세요. 번호는 +로 시작해야 합니다 (예: +14155550123)",
      "notAuthenticated": "인증되지 않았습니다",
      "notLinkedToAccount": "프로필이 계정에 연결되어 있지 않습니다."
    },
    "detailView": {
      "tabs": {
        "details": "상세 정보",
        "activity": "활동",
        "notes": "메모",
        "custom": "커스텀 필드",
        "deals": "딜",
        "tags": "태그",
        "noTags": "태그 없음",
        "noDeals": "딜 없음",
        "addNotePlaceholder": "메모 추가..."
      },
      "actions": {
        "edit": "수정",
        "message": "메시지",
        "delete": "삭제"
      },
      "contactInfo": "연락처 정보",
      "unnamed": "알 수 없음",
      "contactDetailsDesc": "연락처 정보",
      "name": "이름",
      "phone": "전화번호",
      "email": "이메일",
      "company": "회사",
      "createdAt": "생성일",
      "customFields": "커스텀 필드",
      "noCustomFields": "정의된 커스텀 필드가 없습니다. 설정에서 만드세요.",
      "manageFields": "필드 관리",
      "enterCustomField": "{name} 입력...",
      "activityTab": {
        "title": "활동 내역",
        "noActivity": "아직 활동이 없습니다."
      },
      "notesTab": {
        "title": "내부 메모",
        "placeholder": "메모를 작성하세요...",
        "save": "메모 추가",
        "noNotes": "아직 메모가 없습니다."
      },
      "dealsTab": {
        "noDeals": "아직 딜이 없습니다"
      },
      "tagsTab": {
        "clickTagDesc": "태그를 클릭해 이 연락처에 추가하거나 제거하세요.",
        "noTagsAvailable": "사용 가능한 태그가 없습니다. 설정에서 태그를 만드세요."
      },
      "sendTemplateBtn": "템플릿 보내기",
      "saveChangesBtn": "변경 사항 저장",
      "saveCustomFieldsBtn": "커스텀 필드 저장",
      "toastPhoneRequired": "전화번호는 필수입니다",
      "toastPhoneNeedsCountryCode": "국가 코드를 포함하세요. 번호는 +로 시작해야 합니다 (예: +14155550123)",
      "toastUpdateFailed": "연락처를 업데이트하지 못했습니다",
      "toastUpdated": "연락처가 업데이트되었습니다",
      "toastNotAuthenticated": "인증되지 않았습니다",
      "toastNoteAddFailed": "메모를 추가하지 못했습니다",
      "toastNoteAdded": "메모가 추가되었습니다",
      "toastNoteDeleteFailed": "메모를 삭제하지 못했습니다",
      "toastNoteDeleted": "메모가 삭제되었습니다",
      "toastCustomFieldsSaved": "커스텀 필드가 저장되었습니다",
      "toastCustomFieldsFailed": "커스텀 필드를 저장하지 못했습니다",
      "toastTemplateSent": "\"{name}\" 템플릿을 보냈습니다",
      "toastTemplateFailed": "템플릿을 보내지 못했습니다: {reason}",
      "networkError": "네트워크 오류"
    },
    "importModal": {
      "title": "연락처 가져오기",
      "desc": "필수 <phoneCode>phone</phoneCode> 열이 포함된 CSV를 업로드하세요. 선택 항목: <nameCode>name</nameCode>, <emailCode>email</emailCode>, <companyCode>company</companyCode>, <tagsCode>tags</tagsCode> (쉼표로 구분; 여러 태그가 있는 셀은 따옴표로 묶으세요).",
      "uploadDropzone": "클릭하여 CSV 파일 선택",
      "uploadHint": "브라우저 제한까지 .csv 업로드 가능",
      "rowsReady": "{count}개 행 준비됨",
      "rowsReady_plural": "{count}개 행 준비됨",
      "preview": "미리보기 · 처음 {count}개",
      "previewTags": "태그 {tags}개 · 연락처 {contacts}개",
      "previewTags_plural": "태그 {tags}개 · 연락처 {contacts}개",
      "moreRows": "표시되지 않은 행 {count}개 더 있음",
      "moreRows_plural": "표시되지 않은 행 {count}개 더 있음",
      "importComplete": "가져오기 완료",
      "resultImported": "{count}개 가져옴",
      "resultTags": "태그 {count}개 지정됨",
      "resultTags_plural": "태그 {count}개 지정됨",
      "resultSkipped": "{count}개 건너뜀",
      "resultInvalidPhone": "전화번호 오류 {count}개",
      "resultInvalidPhone_plural": "전화번호 오류 {count}개",
      "resultFailed": "{count}개 실패",
      "invalidPhoneHint": "전화번호는 +와 국가 코드로 시작해야 합니다 (예: +14155550123). 국가 코드가 없는 번호는 다른 국가로 발송될 수 있습니다.",
      "failedRowsHeading": "실패한 행",
      "unknownReason": "알 수 없는 오류",
      "willBeCreated": "{name} (가져오기 시 생성됨)",
      "columns": {
        "phone": "전화번호",
        "name": "이름",
        "email": "이메일",
        "company": "회사",
        "tags": "태그"
      },
      "cancel": "취소",
      "close": "닫기",
      "importBtn": "{count}개 연락처 가져오기",
      "importBtn_plural": "{count}개 연락처 가져오기",
      "toastNoValidRows": "유효한 행을 찾을 수 없습니다. CSV에 \"phone\" 열 헤더가 있는지 확인하세요.",
      "toastTagsWarning": "연락처는 가져왔지만 일부 태그 지정에 실패했습니다.",
      "toastImported": "연락처 {count}개를 가져왔습니다",
      "toastImported_plural": "연락처 {count}개를 가져왔습니다",
      "toastTagsAssigned": "태그 지정 {count}건을 적용했습니다",
      "toastTagsAssigned_plural": "태그 지정 {count}건을 적용했습니다",
      "toastTagsSkipped": "알 수 없는 태그를 건너뛰었습니다 (설정에서 먼저 만드세요): {sample}{more}",
      "toastSkipped": "중복 {count}건을 건너뛰었습니다",
      "toastSkipped_plural": "중복 {count}건을 건너뛰었습니다",
      "toastInvalidPhone": "연락처 {count}개에 사용할 수 있는 전화번호가 없었습니다",
      "toastInvalidPhone_plural": "연락처 {count}개에 사용할 수 있는 전화번호가 없었습니다",
      "toastFailed": "연락처 {count}개를 가져오지 못했습니다",
      "toastFailed_plural": "연락처 {count}개를 가져오지 못했습니다",
      "toastError": "가져오기 실패",
      "notAuthenticated": "인증되지 않았습니다",
      "notLinkedToAccount": "프로필이 계정에 연결되어 있지 않습니다.",
      "toastTagsSkippedMore": " (외 {count}개)"
    },
    "customFields": {
      "title": "커스텀 필드",
      "desc": "추가 연락처 필드를 정의하세요 (예: 우편번호, 리드 출처). 모든 연락처와 \"연락처 필드 업데이트\" 자동화 액션에 표시됩니다.",
      "addField": "추가",
      "fieldName": "새 필드 이름…",
      "loading": "불러오는 중…",
      "empty": "아직 커스텀 필드가 없습니다.",
      "renameAria": "{name} 이름 변경",
      "deleteTitle": "필드 삭제",
      "deleteConfirm": "\"{name}\"을(를) 삭제하시겠습니까? 모든 연락처에 저장된 값도 함께 삭제되며, 되돌릴 수 없습니다.",
      "toastNoAccount": "프로필이 계정에 연결되어 있지 않습니다.",
      "toastDuplicate": "\"{name}\"이라는 필드가 이미 존재합니다.",
      "toastCreateFailed": "필드를 만들 수 없습니다. 권한이 없을 수 있습니다.",
      "toastCreated": "\"{name}\"을(를) 만들었습니다.",
      "toastRenameFailed": "필드 이름을 변경할 수 없습니다.",
      "toastDeleteFailed": "필드를 삭제할 수 없습니다.",
      "toastDeleted": "\"{name}\"을(를) 삭제했습니다."
    }
  },
  "Pipelines": {
    "page": {
      "selectPipeline": "파이프라인 선택",
      "noPipelinesYet": "아직 파이프라인이 없습니다",
      "managePipelines": "파이프라인 관리",
      "addPipeline": "파이프라인 추가",
      "addDeal": "딜 추가",
      "createToStartTracking": "파이프라인을 만들어 딜 추적을 시작하세요",
      "createPipeline": "파이프라인 만들기",
      "newPipeline": "새 파이프라인",
      "pipelineName": "파이프라인 이름",
      "pipelineNamePlaceholder": "예: 기업 영업",
      "defaultStagesDesc": "기본 단계(신규 리드 → 성사)가 자동으로 생성됩니다.",
      "cancel": "취소",
      "creating": "만드는 중...",
      "createPipelineBtn": "파이프라인 만들기",
      "toastFailedLoadPipelines": "파이프라인을 불러오지 못했습니다",
      "toastFailedMoveDeal": "딜을 이동하지 못했습니다",
      "toastFailedCreatePipeline": "파이프라인을 만들지 못했습니다",
      "toastPipelineCreated": "파이프라인이 생성되었습니다",
      "toastNotLinkedToAccount": "프로필이 계정에 연결되어 있지 않습니다.",
      "defaultPipelineName": "영업 파이프라인",
      "defaultStages": {
        "newLead": "신규 리드",
        "qualified": "검증됨",
        "proposalSent": "제안서 발송",
        "negotiation": "협상",
        "won": "성사"
      }
    },
    "board": {
      "dropDealHere": "여기에 딜을 놓으세요",
      "addDeal": "딜 추가"
    },
    "card": {
      "noContact": "연락처 없음",
      "won": "성사",
      "lost": "실패"
    },
    "form": {
      "editDeal": "딜 수정",
      "newDeal": "새 딜",
      "title": "제목",
      "titlePlaceholder": "딜 제목",
      "contact": "연락처",
      "selectContact": "연락처 선택",
      "linkToConversation": "대화에 연결",
      "value": "금액",
      "currency": "통화",
      "expectedCloseDate": "예상 마감일",
      "stage": "단계",
      "assignedTo": "담당자",
      "unassigned": "담당자 없음",
      "notes": "메모",
      "notesPlaceholder": "메모 추가...",
      "status": "상태",
      "markAsWon": "성사로 표시",
      "markAsLost": "실패로 표시",
      "reopenDeal": "딜 재개",
      "cancel": "취소",
      "saving": "저장 중...",
      "saveChanges": "변경 사항 저장",
      "createDeal": "딜 만들기",
      "deletePrompt": "이 딜을 삭제하시겠습니까?",
      "confirm": "확인",
      "deleting": "삭제 중...",
      "deleteDeal": "딜 삭제",
      "toastRequired": "제목, 연락처, 단계는 필수입니다",
      "toastFailedSave": "딜을 저장하지 못했습니다",
      "toastNotSignedIn": "로그인되어 있지 않습니다",
      "toastNotLinked": "프로필이 계정에 연결되어 있지 않습니다.",
      "toastFailedCreate": "딜을 만들지 못했습니다",
      "toastUpdated": "딜이 업데이트되었습니다",
      "toastCreated": "딜이 생성되었습니다",
      "toastFailedStatus": "딜 상태를 업데이트하지 못했습니다",
      "toastMarkedWon": "성사로 표시했습니다",
      "toastMarkedLost": "실패로 표시했습니다",
      "toastReopened": "딜이 재개되었습니다",
      "toastFailedDelete": "딜을 삭제하지 못했습니다",
      "toastDeleted": "딜이 삭제되었습니다"
    },
    "settings": {
      "managePipeline": "파이프라인 관리",
      "deletePipeline": "파이프라인 삭제",
      "deletePipelineDesc": "이 파이프라인의 모든 딜이 보관 처리됩니다. 되돌릴 수 없습니다.",
      "cancel": "취소",
      "deleting": "삭제 중...",
      "deletePipelineBtn": "파이프라인 삭제",
      "pipelineName": "파이프라인 이름",
      "stages": "단계",
      "newStageNamePlaceholder": "새 단계 이름",
      "add": "추가",
      "createNewPipeline": "새 파이프라인 만들기",
      "saving": "저장 중...",
      "saveChanges": "변경 사항 저장",
      "dragToReorder": "드래그하여 순서 변경",
      "changeColor": "색상 변경",
      "toastFailedSave": "파이프라인을 저장하지 못했습니다",
      "toastSaved": "파이프라인이 저장되었습니다",
      "toastFailedAddStage": "단계를 추가하지 못했습니다",
      "toastMoveOrDeleteDeals": "먼저 이 단계의 딜을 이동하거나 삭제하세요",
      "toastFailedDeleteStage": "단계를 삭제하지 못했습니다",
      "toastFailedDeletePipeline": "파이프라인을 삭제하지 못했습니다",
      "toastDeleted": "파이프라인이 삭제되었습니다",
      "pickColor": "{color} 색상 선택"
    },
    "analytics": {
      "totalDeals": "전체 딜",
      "totalDealsTooltip": "실패로 표시되지 않은, 이 파이프라인의 모든 딜 수입니다. 성사된 딜도 포함됩니다.",
      "pipelineValue": "파이프라인 금액",
      "pipelineValueTooltip": "실패로 표시된 딜을 제외한, 이 파이프라인 내 모든 딜 금액의 합계입니다.",
      "avgDealSize": "평균 딜 규모",
      "avgDealSizeTooltip": "파이프라인 금액을 전체 딜 수로 나눈 값 — 실패하지 않은 개별 딜의 평균 금액입니다.",
      "weightedValue": "가중 금액",
      "weightedValueTooltip": "예상 매출: 진행 중인 각 딜의 금액 × 단계별 성사 확률. 첫 단계는 약 10%, 이후 단계는 최대 90%까지 상승하며, 성사 시 100%입니다. 실패한 딜은 제외됩니다.",
      "wonThisMonth": "이번 달 성사",
      "wonThisMonthTooltip": "이번 달 1일 이후 성사로 표시된 딜입니다.",
      "lostThisMonth": "이번 달 실패",
      "lostThisMonthTooltip": "이번 달 1일 이후 실패로 표시된 딜입니다.",
      "howCalculated": "{label} 계산 방법"
    }
  },
  "Broadcasts": {
    "page": {
      "title": "브로드캐스트",
      "subtitle": "승인된 템플릿을 사용해 연락처에 대량 메시지를 보내세요.",
      "newBroadcast": "새 브로드캐스트",
      "noBroadcastsYet": "아직 브로드캐스트가 없습니다",
      "createFirst": "첫 브로드캐스트를 만들어 연락처에 대규모로 도달해보세요.",
      "table": {
        "name": "이름",
        "template": "템플릿",
        "recipients": "수신자",
        "delivery": "전달",
        "read": "읽음",
        "status": "상태",
        "date": "날짜"
      },
      "errorLoad": "브로드캐스트를 불러오지 못했습니다",
      "broadcastInProgress": "브로드캐스트 진행 중",
      "retry": "다시 시도"
    },
    "status": {
      "draft": "초안",
      "scheduled": "예약됨",
      "sending": "전송 중",
      "sent": "전송됨",
      "failed": "실패",
      "pending": "대기 중",
      "delivered": "전달됨",
      "read": "읽음",
      "replied": "응답함",
      "unknown": "알 수 없음"
    },
    "detail": {
      "backToBroadcasts": "브로드캐스트로 돌아가기",
      "notFound": "브로드캐스트를 찾을 수 없습니다",
      "template": "템플릿: {name}",
      "createdAt": "{date} 생성",
      "deletePrompt": "이 브로드캐스트를 삭제하시겠습니까?",
      "cancel": "취소",
      "confirm": "확인",
      "deleting": "삭제 중…",
      "delete": "삭제",
      "cannotDeleteSending": "브로드캐스트가 전송 중일 때는 삭제할 수 없습니다",
      "deleteHover": "이 브로드캐스트 삭제",
      "funnel": "퍼널",
      "recipientsHeader": "수신자 (전체 {total}명 중 {filtered}명)",
      "recipientsHeaderAll": "수신자 ({total}명)",
      "allStatuses": "모든 상태",
      "exportCsv": "CSV 내보내기",
      "noRecipients": "수신자가 없습니다.",
      "noRecipientsFilter": "이 필터와 일치하는 수신자가 없습니다.",
      "table": {
        "contact": "연락처",
        "phone": "전화번호",
        "status": "상태",
        "sent": "전송됨",
        "delivered": "전달됨",
        "read": "읽음",
        "error": "오류"
      },
      "stats": {
        "totalRecipients": "전체 수신자",
        "sent": "전송됨",
        "delivered": "전달됨",
        "read": "읽음",
        "replied": "응답함",
        "failed": "실패"
      },
      "toastFailedDelete": "삭제하지 못했습니다: {error}",
      "toastDeleted": "브로드캐스트가 삭제되었습니다",
      "resumeTitle": "일부 수신자는 다시 시도해야 합니다",
      "resumeStalledTitle": "이 캠페인이 중간에 중단되었습니다",
      "resumeHint": "{count}명의 수신자에게 발송이 실패했습니다. 재시도하면 서버에서 다시 발송합니다.",
      "resumeStalledHint": "{count}명에게 아직 발송되지 않았습니다. 캠페인을 실행하던 브라우저 탭이 완료 전에 닫혔습니다. 이어서 발송하면 서버에서 나머지를 처리합니다.",
      "resumePending": "이어서 발송 ({count})",
      "retryFailed": "실패 재시도 ({count})",
      "toastResumeStarted": "{count}명에게 백그라운드로 발송 중입니다.",
      "toastResumeStartedCapped": "{count}명에게 백그라운드로 발송 중입니다. 나머지 {remaining}명은 한 번 더 실행해야 합니다.",
      "toastResumeFailed": "이어서 발송할 수 없습니다: {error}",
      "unknownError": "알 수 없는 오류",
      "unknownContact": "알 수 없음"
    },
    "new": {
      "title": "새 브로드캐스트",
      "subtitle": "연락처에 보낼 브로드캐스트 메시지를 만듭니다.",
      "steps": {
        "template": "템플릿",
        "audience": "대상",
        "personalize": "개인화",
        "send": "전송"
      },
      "toastGiveName": "초안을 저장하기 전에 브로드캐스트 이름을 입력하세요.",
      "toastNotSignedIn": "로그인되어 있지 않습니다.",
      "toastNotLinked": "프로필이 계정에 연결되어 있지 않습니다.",
      "toastFailedDraft": "초안 저장 실패: {error}",
      "toastDraftSaved": "초안이 저장되었습니다",
      "broadcastFailed": "브로드캐스트 실패"
    },
    "wizard": {
      "next": "다음",
      "back": "뒤로",
      "cancel": "취소",
      "chooseTemplate": {
        "title": "템플릿 선택",
        "subtitle": "브로드캐스트에 사용할 승인된 메시지 템플릿을 선택하세요.",
        "noTemplates": "사용 가능한 템플릿이 없습니다.",
        "createFirst": "먼저 설정에서 템플릿을 만드세요.",
        "errorLoad": "템플릿을 불러오지 못했습니다"
      },
      "selectAudience": {
        "title": "대상 선택",
        "subtitle": "이 브로드캐스트를 받을 대상을 선택하세요.",
        "method": {
          "all": "전체 연락처",
          "tags": "태그로 필터링",
          "customField": "커스텀 필드",
          "csv": "CSV 업로드"
        },
        "allDesc": "데이터베이스의 전체 연락처 {count}명에게 보냅니다.",
        "allDescLoading": "데이터베이스의 전체 연락처에게 보냅니다.",
        "tagDesc": "특정 태그와 일치하는 연락처에 보냅니다.",
        "customFieldDesc": "커스텀 필드 규칙과 일치하는 연락처에 보냅니다.",
        "csvDesc": "전화번호(선택적으로 이름 포함)가 담긴 CSV를 업로드하세요.",
        "selectTags": "태그 선택",
        "searchTags": "태그 검색...",
        "noTagsFound": "태그를 찾을 수 없습니다.",
        "excludeTags": "제외할 태그 (선택)",
        "searchExcludeTags": "제외할 태그 검색...",
        "field": "필드",
        "selectField": "필드 선택...",
        "operator": "연산자",
        "operatorIs": "같음",
        "operatorIsNot": "같지 않음",
        "operatorContains": "포함",
        "value": "값",
        "valuePlaceholder": "일치시킬 값",
        "uploadCsv": "CSV 파일 업로드",
        "csvFormatDesc": "'phone' 열(E.164 형식)이 필요합니다. 'name' 열은 선택 사항입니다.",
        "csvContactsFound": "CSV에서 유효한 연락처 {count}개를 찾았습니다.",
        "csvInvalidPhones": "{count}개 행을 건너뛰었습니다. 전화번호는 +와 국가 코드로 시작해야 합니다 (예: +14155550123).",
        "errorLoadTags": "태그를 불러오지 못했습니다",
        "errorLoadFields": "커스텀 필드를 불러오지 못했습니다",
        "errorCsvParse": "CSV 파일을 파싱할 수 없습니다.",
        "errorCsvMissingPhone": "CSV에 'phone' 열이 있어야 합니다.",
        "audienceSummary": "대상 요약",
        "calculating": "계산 중…",
        "estimatedRecipients": "예상 수신자",
        "selectTypeForEstimate": "예상치를 보려면 대상 유형을 선택하세요."
      },
      "personalize": {
        "title": "변수 개인화",
        "subtitle": "템플릿 변수를 연락처 필드에 매핑하거나 고정 값을 입력하세요.",
        "headerImage": "헤더 이미지",
        "headerImageDesc": "이 템플릿에는 헤더 이미지가 필요합니다.",
        "imageUrl": "이미지 URL",
        "imageUrlPlaceholder": "https://example.com/image.jpg",
        "variables": "변수",
        "varDesc": "{{name}}의 값을 설정하세요",
        "type": "유형",
        "typeStatic": "고정 값",
        "typeContact": "연락처 필드",
        "typeCustom": "커스텀 필드",
        "staticValue": "고정 값",
        "contactField": "연락처 필드",
        "selectContactField": "필드 선택...",
        "customField": "커스텀 필드",
        "selectCustomField": "커스텀 필드 선택...",
        "preview": "미리보기",
        "previewSample": "샘플 데이터로 미리보기를 표시합니다.",
        "noPreview": "미리보기를 사용할 수 없습니다.",
        "headerPreviewAlt": "헤더 미리보기",
        "mediaUrlRequired": "이 템플릿을 보내려면 미디어 URL이 필요합니다.",
        "mediaUrlInvalid": "올바른 http(s) URL을 입력하세요.",
        "enterValue": "값을 입력하세요...",
        "loadingFields": "불러오는 중…",
        "noCustomFields": "커스텀 필드 없음",
        "unmappedWarning": "계속하기 전에 모든 자리표시자를 매핑하세요 — 아직 <mono>{keys}</mono>이(가) 비어 있습니다. 그대로 두면 해당 자리표시자가 빈 문자열로 Meta에 전송됩니다.",
        "fieldMap": {
          "name": "이름",
          "phone": "전화번호",
          "email": "이메일"
        },
        "sampleName": "홍길동",
        "sampleCompany": "예시 주식회사"
      },
      "scheduleSend": {
        "title": "검토 및 전송",
        "subtitle": "브로드캐스트 이름을 입력하고 전송을 확인하세요.",
        "broadcastName": "브로드캐스트 이름",
        "broadcastNamePlaceholder": "예: 여름 프로모션",
        "summary": "요약",
        "template": "템플릿:",
        "audience": "대상:",
        "audienceAll": "전체 연락처",
        "audienceTags": "태그로 필터링됨",
        "audienceField": "커스텀 필드로 필터링됨",
        "audienceCsv": "CSV 업로드",
        "variables": "변수:",
        "variablesMapped": "{count}개 매핑됨",
        "saveDraft": "초안으로 저장",
        "sendNow": "브로드캐스트 전송",
        "sending": "전송 중...",
        "preparing": "준비 중...",
        "progressDesc": "수신자 {total}명 중 {current}명 처리 중...",
        "toastFailedPreview": "미리보기 데이터를 불러오지 못했습니다",
        "estimatedReach": "예상 도달 수",
        "language": "언어",
        "confirmTitle": "브로드캐스트 확인",
        "confirmDesc": "<b>{template}</b> 템플릿으로 연락처 <b>{count, number}</b>명에게 이 브로드캐스트를 보내려고 합니다. 이 작업은 되돌릴 수 없습니다."
      }
    },
    "sending": {
      "notSignedIn": "로그인되어 있지 않습니다.",
      "notLinkedToAccount": "프로필이 계정에 연결되어 있지 않습니다.",
      "lookupCsvContactsFailed": "CSV 연락처를 조회하지 못했습니다: {error}",
      "createCsvContactsFailed": "CSV 연락처를 만들지 못했습니다: {error}",
      "noContactsForAudience": "이 대상에 해당하는 연락처가 없습니다.",
      "createBroadcastFailed": "브로드캐스트를 만들지 못했습니다: {error}",
      "unknownErrorLower": "알 수 없는 오류",
      "insertRecipientBatchFailed": "수신자 배치 {batch}을(를) 추가하지 못했습니다: {error}",
      "fetchRecipientsFailed": "브로드캐스트 수신자를 가져오지 못했습니다",
      "apiRequestFailed": "브로드캐스트 API 요청 실패",
      "noPhoneOnContact": "연락처에 전화번호가 없습니다",
      "unknownError": "알 수 없는 오류"
    }
  },
  "Automations": {
    "list": {
      "title": "자동화",
      "subtitle": "WhatsApp® 이벤트에 자동으로 반응하는 워크플로를 만드세요.",
      "create": "자동화 만들기",
      "retry": "다시 시도",
      "templatesTitle": "빠른 시작 템플릿",
      "emptyTitle": "아직 자동화가 없습니다",
      "emptyDesc": "위의 템플릿을 선택하거나 처음부터 새로 만드세요.",
      "runs": "실행 {count}회",
      "runsPlural": "실행 {count}회",
      "lastRun": "마지막 실행 {time}",
      "activate": "활성화",
      "deactivate": "비활성화",
      "edit": "수정",
      "duplicate": "복제",
      "viewLogs": "로그 보기",
      "delete": "삭제",
      "cancel": "취소",
      "deleteTitle": "자동화 삭제",
      "deleteDesc": "{name}과(와) 실행 기록이 영구적으로 삭제됩니다. 되돌릴 수 없습니다.",
      "activeIndicator": "활성",
      "openMenu": "메뉴 열기",
      "toasts": {
        "activated": "자동화가 활성화되었습니다",
        "paused": "자동화가 일시 중지되었습니다",
        "duplicated": "자동화가 복제되었습니다",
        "deleted": "자동화가 삭제되었습니다",
        "updateError": "업데이트하지 못했습니다",
        "duplicateError": "복제하지 못했습니다",
        "deleteError": "삭제하지 못했습니다"
      },
      "loadFailed": "자동화를 불러오지 못했습니다"
    },
    "edit": {
      "loading": "불러오는 중...",
      "loadError": "불러오지 못했습니다 ({status})",
      "back": "자동화로 돌아가기"
    },
    "logs": {
      "title": "실행 로그",
      "loadError": "로그를 불러오지 못했습니다",
      "emptyTitle": "아직 실행 기록이 없습니다",
      "emptyDesc": "이 자동화를 실행시켜 여기서 결과를 확인하세요.",
      "unknownContact": "알 수 없는 연락처",
      "step": "단계 {count}개",
      "stepPlural": "단계 {count}개",
      "noSteps": "기록된 단계가 없습니다.",
      "status": {
        "success": "성공",
        "partial": "부분 성공",
        "failed": "실패"
      },
      "back": "뒤로",
      "backAria": "뒤로"
    },
    "relative": {
      "never": "없음",
      "justNow": "방금",
      "minutesAgo": "{n}분 전",
      "hoursAgo": "{n}시간 전",
      "daysAgo": "{n}일 전"
    },
    "builder": {
      "steps": {
        "send_message": "메시지 보내기",
        "send_buttons": "버튼 보내기",
        "send_list": "목록 보내기",
        "send_template": "템플릿 보내기",
        "add_tag": "태그 추가",
        "remove_tag": "태그 제거",
        "assign_conversation": "대화 담당자 지정",
        "update_contact_field": "연락처 필드 업데이트",
        "create_deal": "딜 생성",
        "wait": "대기",
        "condition": "조건 (If/Else)",
        "send_webhook": "웹훅 보내기",
        "close_conversation": "대화 닫기"
      },
      "triggers": {
        "new_message_received": {
          "label": "새 메시지 수신",
          "hint": "모든 수신 메시지"
        },
        "first_inbound_message": {
          "label": "연락처의 첫 메시지",
          "hint": "이 연락처가 처음으로 메시지를 보냈을 때 (수동으로 추가한 연락처에도 적용됨)"
        },
        "keyword_match": {
          "label": "키워드 일치",
          "hint": "메시지에 특정 키워드가 포함된 경우"
        },
        "interactive_reply": {
          "label": "버튼 / 목록 응답",
          "hint": "고객이 id가 일치하는 버튼이나 목록 행을 탭했을 때 — 자동화 간 메뉴를 연결할 수 있습니다"
        },
        "new_contact_created": {
          "label": "새 연락처 생성됨",
          "hint": "수신 메시지로 연락처가 자동 생성되었을 때"
        },
        "conversation_assigned": {
          "label": "대화 담당자 지정됨",
          "hint": "상담원에게 배정되었을 때"
        },
        "tag_added": {
          "label": "태그 추가됨",
          "hint": "연락처에 태그가 추가되었을 때"
        },
        "time_based": {
          "label": "시간 기반",
          "hint": "반복 일정에 따라"
        }
      },
      "trigger": "트리거",
      "triggerType": "트리거 유형",
      "keywords": "키워드",
      "keywordsHint": "쉼표로 구분된 목록 (예: hello, help, buy)",
      "replyIds": "응답 ID",
      "replyIdsHint": "yes, no, more_info",
      "replyIdsHelp": "정확히 일치시킬 버튼/목록 행 id를 쉼표로 구분해 입력하세요. 버튼 보내기 / 목록 보내기 단계에서 설정한 것과 같은 id를 사용하세요.",
      "schedule": "일정",
      "scheduleHint": "Cron 표현식 (예: 0 9 * * 1-5)",
      "schedulePlaceholder": "Cron 표현식 또는 HH:mm",
      "active": "활성",
      "activeAria": "활성",
      "save": "저장",
      "saveDraft": "초안 저장",
      "untitled": "제목 없는 자동화",
      "backToAutomations": "자동화로 돌아가기",
      "toasts": {
        "saved": "자동화가 저장되었습니다",
        "created": "자동화가 생성되었습니다",
        "saveFailed": "저장 실패",
        "issueAt": "위치: {path}"
      },
      "tags": {
        "select": "태그 선택…",
        "placeholder": "태그 id",
        "unknown": "{id} (알 수 없는 태그)"
      },
      "fields": {
        "name": "이름",
        "email": "이메일",
        "company": "회사",
        "customFields": "커스텀 필드",
        "unknown": "{id} (알 수 없는 필드)"
      },
      "agents": {
        "select": "상담원 선택…",
        "placeholder": "상담원 id",
        "unknown": "{id} (알 수 없는 상담원)"
      },
      "pipelines": {
        "pipelineLabel": "파이프라인",
        "pipelineIdLabel": "파이프라인 id",
        "stageLabel": "단계",
        "stageIdLabel": "단계 id",
        "selectPipeline": "파이프라인 선택…",
        "selectStage": "단계 선택…",
        "selectPipelineFirst": "먼저 파이프라인을 선택하세요…",
        "unknownPipeline": "{id} (알 수 없는 파이프라인)",
        "unknownStage": "{id} (알 수 없는 단계)"
      },
      "templates": {
        "templateLabel": "템플릿",
        "templateNameLabel": "템플릿 이름",
        "languageLabel": "언어",
        "select": "템플릿 선택…",
        "unknown": "{name} ({lang}) — 승인 목록에 없음",
        "unknownLang": "알 수 없음"
      },
      "branches": {
        "yes": "예",
        "no": "아니요"
      },
      "addStep": "단계 추가",
      "moveUp": "위로 이동",
      "moveDown": "아래로 이동",
      "kindCondition": "조건",
      "kindWait": "대기",
      "kindAction": "액션",
      "delete": "삭제",
      "config": {
        "messageText": "메시지 텍스트",
        "placeholderMessageText": "안녕하세요! 문의해주셔서 감사합니다…",
        "tagLabel": "태그",
        "modeLabel": "모드",
        "modes": {
          "round_robin": "순차 배정",
          "specific": "특정 상담원"
        },
        "agentLabel": "상담원",
        "fieldLabel": "필드",
        "valueLabel": "값",
        "placeholderValue": "텍스트 또는 {{ vars.x }} / {{ message.text }}",
        "titleLabel": "제목",
        "amountLabel": "수치",
        "unitLabel": "단위",
        "units": {
          "minutes": "분",
          "hours": "시간",
          "days": "일"
        },
        "subjectLabel": "대상",
        "subjects": {
          "tag_presence": "태그 존재 여부",
          "contact_field": "연락처 필드",
          "message_content": "메시지 내용",
          "time_of_day": "시간대"
        },
        "operandLabel": "피연산자",
        "placeholderTime": "HH:mm-HH:mm",
        "placeholderContact": "이름 / 이메일 / 회사",
        "placeholderTag": "태그 id",
        "urlLabel": "URL",
        "headersLabel": "헤더",
        "placeholderHeaders": "{\"Authorization\": \"Bearer ...\"}",
        "bodyTemplateLabel": "본문 템플릿",
        "placeholderBody": "{\"id\": \"{{ contact.id }}\"}",
        "matchType": "일치 유형",
        "matchContains": "포함",
        "matchWord": "단어 단위 일치",
        "matchWordHint": "키워드가 독립된 단어일 때만 일치하므로 \"k\"가 \"thanks\"에서 실행되지 않습니다. 공백으로 단어를 구분하는 언어의 짧은 키워드에 적합하며, 공백 없이 표기하는 언어에는 \"포함\"을 사용하세요.",
        "matchExact": "정확히 일치",
        "waitForReply": "계속하기 전에 답장 기다리기",
        "waitForReplyHint": "고객이 버튼을 누르거나 답장할 때까지 여기서 멈춥니다(최대 24시간). 이후 단계(메시지 내용 조건 포함)는 그 답장을 사용합니다.",
        "closeConversationHint": "대화 상태를 \"닫힘\"으로 설정합니다. 추가 설정이 필요 없습니다."
      },
      "preview": {
        "noText": "아직 텍스트 없음",
        "noBody": "아직 본문 없음",
        "withWaitForReply": "{preview} · 답장 대기",
        "pickTemplate": "템플릿을 선택하세요",
        "wait": "{amount} {unit}",
        "units": {
          "minutes": "분",
          "hours": "시간",
          "days": "일"
        },
        "when": "{subject} 조건",
        "noUrl": "URL 없음"
      }
    }
  },
  "Flows": {
    "list": {
      "title": "플로우",
      "beta": "베타",
      "description": "분기하는 버튼 기반 WhatsApp 대화를 만드세요. 메뉴, FAQ, 사람이 개입하기 전 1차 응대에 유용합니다.",
      "newFlow": "새 플로우",
      "statusDraft": "초안",
      "statusActive": "활성",
      "statusArchived": "보관됨",
      "loadError": "플로우를 불러올 수 없습니다.",
      "createError": "플로우를 만들 수 없습니다.",
      "cloneError": "복제 실패",
      "deleteConfirm": "\"{name}\"을(를) 삭제하시겠습니까? 실행 중인 세션은 즉시 종료됩니다.",
      "deleteSuccess": "플로우가 삭제되었습니다.",
      "deleteError": "플로우를 삭제할 수 없습니다.",
      "emptyTitle": "아직 플로우가 없습니다",
      "emptyDesc": "첫 대화를 만들어보세요 — 환영 메뉴, 주문 조회, FAQ 봇 등. 고객이 버튼을 탭하면 봇이 알맞은 답변(또는 알맞은 상담원)으로 안내합니다.",
      "createFirst": "첫 플로우 만들기",
      "createTitle": "새 플로우 만들기",
      "createDesc": "템플릿에서 시작하거나 처음부터 만드세요.",
      "startTemplate": "템플릿에서 시작",
      "nodeCount": "노드 {count}개",
      "startBlank": "또는 빈 상태로 시작",
      "placeholderName": "예: 환영 메뉴",
      "cancel": "취소",
      "createBlank": "빈 플로우 만들기",
      "runCount": "실행 {count}회",
      "edit": "수정",
      "delete": "삭제",
      "triggerKeywordNone": "키워드로 트리거 (설정 안 됨)",
      "triggerKeyword": "트리거 조건: {keywords}",
      "triggerFirstInbound": "연락처의 첫 수신 메시지에서 트리거됨",
      "triggerManual": "수동 트리거",
      "cloneFailedStatus": "복제 실패: {status}"
    },
    "edit": {
      "notFound": "플로우를 찾을 수 없습니다.",
      "backToFlows": "← 플로우로 돌아가기",
      "loadError": "플로우를 불러올 수 없습니다."
    },
    "logs": {
      "title": "실행 기록",
      "description": "이 플로우가 실행된 가장 최근 50건입니다. 행을 펼치면 엔진의 단계별 로그를 볼 수 있습니다.",
      "emptyState": "아직 실행 기록이 없습니다. 개인 WhatsApp 번호로 플로우를 실행시켜 여기서 확인해보세요.",
      "loadError": "실행 기록을 불러올 수 없습니다.",
      "unknownContact": "알 수 없는 연락처",
      "atNode": "{node}에서",
      "started": "{time} 시작",
      "reprompts": "재요청 {count}회",
      "ranFor": "{duration} 동안 실행됨",
      "capturedVars": "수집된 변수 ({count}개)",
      "noEvents": "이 실행에 대해 기록된 이벤트가 없습니다.",
      "statusActive": "실행 중",
      "statusCompleted": "완료됨",
      "statusHandedOff": "인계됨",
      "statusTimedOut": "시간 초과",
      "statusPaused": "상담원이 일시 중지함",
      "statusFailed": "실패"
    },
    "builder": {
      "triggerTitle": "트리거",
      "whenLabel": "조건…",
      "triggerKeywordTitle": "메시지에 키워드가 포함될 때",
      "triggerFirstInboundTitle": "고객의 첫 수신 메시지",
      "triggerManualTitle": "수동 전용 (자동 트리거 없음)",
      "keywordsLabel": "키워드 (쉼표로 구분)",
      "keywordsPlaceholder": "support, help, hi",
      "entryNodeTitle": "시작 노드:",
      "entryNodePlaceholder": "첫 노드를 선택하세요…",
      "nodesTitle": "노드 ({count}개)",
      "nodesEmpty": "<strong>시작</strong> 노드를 추가한 뒤 <strong>버튼 보내기</strong> 노드, 그다음 <strong>인계</strong> 노드를 추가하세요 — 브리프에 나온 환영 메뉴 구조입니다.",
      "addNode": "노드 추가",
      "setAsEntry": "시작 노드로 설정",
      "removeNode": "노드 제거",
      "showAdvanced": "고급 설정 표시",
      "hideAdvanced": "고급 설정 숨기기",
      "nodeKeyLabel": "노드 키 (내부 식별자 — 분석을 위해 값을 고정하세요)",
      "replyIdsHint": "각 옵션의 응답 ID는 위에 인라인으로 표시됩니다. 고객이 탭했을 때 WhatsApp이 반환하는 값이며, 보통 직접 수정할 필요는 없습니다.",
      "badgeEntry": "시작",
      "noNodesYet": "아직 노드가 없습니다.",
      "deleteNode": "노드 삭제",
      "canvasView": "캔버스",
      "listView": "목록",
      "noNodeSelected": "선택된 노드가 없습니다",
      "noNodeDesc": "캔버스에서 노드를 선택해 설정을 편집하세요.",
      "editorView": "편집기 보기",
      "form": {
        "advancesTo": "다음 진행",
        "textToCustomer": "고객에게 전송되는 텍스트",
        "promptToCustomer": "고객에게 전송되는 질문",
        "varKeyLabel": "변수 키 (flow_runs.vars에 저장됨; 영숫자 + 밑줄만 사용)",
        "varKeyPlaceholder": "예: name, email, company",
        "varKeyHelp": "다음과 같이 이후 프롬프트와 인계 메모에서 참조할 수 있습니다",
        "advanceAfterCapture": "수집 후 다음 진행",
        "internalNote": "내부 메모 (인계받는 상담원용)",
        "endNodeHelp": "종료 노드입니다. 러너가 이 노드에 도달하면 실행이 완료로 표시됩니다. 추가 설정이 필요 없습니다.",
        "bodyText": "본문 텍스트",
        "footerText": "푸터 (선택, 60자)",
        "buttonsHelp": "버튼 (1–3개) — 각 버튼은 서로 다른 다음 노드로 연결됩니다",
        "optionTitlePlaceholder": "표시될 제목 (20자 이하)",
        "nextNodePlaceholder": "다음 노드…",
        "addButton": "버튼 추가",
        "buttonLabel": "탭하여 펼치는 버튼 라벨 (20자 이하)",
        "rowsHelp": "행 (모든 섹션 합쳐 1–10개)",
        "sectionTitlePlaceholder": "섹션 {count} 제목 (선택)",
        "rowTitlePlaceholder": "행 제목 (24자 이하)",
        "addRow": "행 추가",
        "addSection": "섹션 추가",
        "ifLabel": "만약",
        "capturedVariable": "수집된 변수",
        "contactHasTag": "연락처에 태그가 있음",
        "contactField": "연락처 필드",
        "varName": "변수 이름",
        "tagLabel": "태그",
        "fieldLabel": "필드",
        "pickTag": "태그 선택…",
        "pickField": "필드 선택…",
        "operatorLabel": "연산자",
        "isPresent": "존재함",
        "isAbsent": "존재하지 않음",
        "equals": "일치함",
        "contains": "포함함",
        "valueLabel": "값",
        "ifTrueAdvance": "참일 경우 → 다음 진행",
        "ifFalseAdvance": "거짓일 경우 → 다음 진행",
        "actionLabel": "액션",
        "addTag": "태그 추가",
        "removeTag": "태그 제거",
        "tagUuidPlaceholder": "태그 UUID",
        "thenAdvanceTo": "이후 다음 진행",
        "mediaTypeLabel": "미디어 유형",
        "imageLabel": "이미지 (PNG, JPEG, WebP)",
        "videoLabel": "동영상 (MP4, 3GP)",
        "documentLabel": "문서 (PDF, Word, Excel, PowerPoint, TXT)",
        "fileLabel": "파일",
        "removeFile": "파일 제거",
        "uploading": "업로드 중…",
        "clickToUpload": "클릭하여 업로드 (최대 16MB)",
        "captionLabel": "캡션 (선택, 미디어 아래에 표시됨)",
        "filenameLabel": "고객에게 표시될 파일명 (문서 전용)",
        "filenamePlaceholder": "invoice.pdf",
        "advanceAfterSending": "전송 후 다음 진행",
        "pickNextNode": "다음 노드를 선택하세요…",
        "none": "— 없음 —",
        "removeSection": "섹션 제거",
        "fileUploaded": "파일이 업로드되었습니다.",
        "uploadFailed": "업로드에 실패했습니다.",
        "fileTooLarge": "파일이 {size}MB입니다 — 제한은 16MB입니다.",
        "defaultOptionTitle": "옵션",
        "optionN": "옵션 {n}"
      },
      "categories": {
        "messaging": "메시징",
        "logic": "로직 & 데이터",
        "flow": "플로우 제어"
      },
      "nodes": {
        "start": {
          "label": "시작",
          "blurb": "플로우의 진입점"
        },
        "send_message": {
          "label": "메시지 보내기",
          "blurb": "WhatsApp 텍스트 메시지를 보냅니다"
        },
        "send_buttons": {
          "label": "버튼 보내기",
          "blurb": "빠른 응답 버튼을 보냅니다"
        },
        "send_list": {
          "label": "목록 보내기",
          "blurb": "탭 가능한 옵션 목록을 보냅니다"
        },
        "send_media": {
          "label": "미디어 보내기",
          "blurb": "이미지, 동영상, 문서를 보냅니다"
        },
        "collect_input": {
          "label": "입력 수집",
          "blurb": "질문을 하고 응답을 저장합니다"
        },
        "condition": {
          "label": "만약 / 아니면",
          "blurb": "규칙에 따라 분기합니다"
        },
        "set_tag": {
          "label": "연락처 태그 지정",
          "blurb": "연락처 태그를 추가하거나 제거합니다"
        },
        "handoff": {
          "label": "상담원에게 인계",
          "blurb": "대화를 사람에게 넘깁니다"
        },
        "end": {
          "label": "종료",
          "blurb": "플로우를 종료합니다"
        }
      }
    },
    "validation": {
      "noIssues": "문제가 없습니다. 활성화할 준비가 되었습니다.",
      "summary": "오류 {errorCount}건, 경고 {warningCount}건",
      "jumpToNode": "{key} 노드로 이동"
    },
    "editorState": {
      "saved": "저장되었습니다.",
      "fixIssues": "활성화하기 전에 아래 문제를 해결하세요.",
      "statusActivated": "플로우가 활성화되었습니다.",
      "statusArchived": "보관되었습니다.",
      "statusDraft": "초안으로 저장되었습니다.",
      "deleteConfirm": "\"{name}\"을(를) 삭제할까요? 진행 중인 실행이 즉시 종료되며 되돌릴 수 없습니다.",
      "defaultYes": "예",
      "defaultListButton": "옵션 보기",
      "saveFailedStatus": "저장 실패: {status}",
      "saveFailed": "저장 실패",
      "statusUpdateFailedStatus": "상태 업데이트 실패: {status}",
      "statusUpdateFailed": "상태 업데이트 실패",
      "deleteFailedStatus": "삭제 실패: {status}",
      "deleteFailed": "삭제 실패"
    },
    "summary": {
      "options": "옵션 {count}개",
      "optionsAcrossSections": "{sectionCount}개 섹션에 걸쳐 옵션 {rowCount}개",
      "noFile": "{label} (업로드된 파일 없음)",
      "media": "미디어",
      "image": "이미지",
      "video": "동영상",
      "document": "문서",
      "audio": "오디오",
      "hasTag": "{tag} 태그 있음",
      "opContains": "포함함",
      "opExists": "존재함",
      "opMissing": "존재하지 않음",
      "modeAdd": "추가",
      "modeRemove": "제거",
      "tagPicked": "{tag} 태그 {mode}…",
      "tagNone": "태그 {mode} (선택된 태그 없음)"
    },
    "header": {
      "backToFlows": "플로우로 돌아가기",
      "namePlaceholder": "플로우 이름",
      "unsavedHint": "저장되지 않은 변경 사항 — 저장을 눌러 반영하세요",
      "edited": "수정됨",
      "runs": "실행",
      "delete": "삭제",
      "pause": "일시 중지",
      "activate": "활성화",
      "fixIssues": "활성화하기 전에 아래 문제를 해결하세요",
      "save": "저장",
      "descriptionPlaceholder": "짧은 설명을 추가하세요 (내부용 — 고객에게는 보이지 않습니다)",
      "descriptionLabel": "플로우 설명"
    }
  },
  "Settings": {
    "pageTitle": "설정",
    "pageDesc": "계정과 워크스페이스에 관한 모든 것을 한곳에서 관리하세요. 관리할 섹션을 선택하세요.",
    "sectionsNav": "설정 섹션",
    "overview": {
      "notSetup": "아직 설정되지 않음",
      "connected": "연결됨",
      "needsReconnecting": "재연결 필요",
      "viewTeamMembers": "팀원 보기",
      "membersCount": "멤버 {count}명",
      "pendingInvites": "대기 중인 초대 {count}건",
      "manageTemplates": "메시지 템플릿 관리",
      "templatesCount": "템플릿 {count}개",
      "pendingReview": "검토 대기 {count}건",
      "tagsAndFields": "태그 및 커스텀 필드",
      "tagsCount": "태그 {count}개",
      "fieldsCount": "커스텀 필드 {count}개",
      "appearance": "{mode} 모드 · {theme} 색상",
      "yourAccount": "내 계정",
      "loading": "불러오는 중…"
    },
    "members": {
      "title": "팀원",
      "description": "이 계정에 접근 권한이 있는 사람들입니다. 역할에 따라 각 팀원이 할 수 있는 작업이 결정됩니다.",
      "inviteMember": "멤버 초대",
      "online": "온라인",
      "away": "자리비움",
      "offline": "오프라인",
      "memberCount": "멤버 {count}명",
      "you": "나",
      "unnamed": "이름 없음",
      "joined": "{date} 참여",
      "remove": "제거",
      "removedToast": "{name}을(를) 제거했습니다",
      "updatedToast": "{name}을(를) {role}(으)로 변경했습니다",
      "pendingInvitations": "대기 중인 초대",
      "inviteHint": "보안을 위해 초대 URL 원문은 생성 시 한 번만 표시됩니다 — 다시 공유하려면 아래에서 초대를 취소하고 새로 만드세요.",
      "noPendingTitle": "대기 중인 초대가 없습니다.",
      "noPendingDesc": "위의 <bold>멤버 초대</bold>를 클릭해 공유 가능한 링크를 생성하세요.",
      "untitledInvite": "제목 없는 초대",
      "created": "{date} 생성",
      "expiresInDays": "{days}일 후 만료",
      "expiresInHours": "{hours}시간 후 만료",
      "expired": "만료됨",
      "revoke": "취소",
      "revokedToast": "초대가 취소되었습니다",
      "loadFailed": "팀원을 불러오지 못했습니다",
      "loadInvitationsFailed": "초대를 불러오지 못했습니다",
      "updateRoleFailed": "역할을 변경하지 못했습니다",
      "removeFailed": "팀원을 제거하지 못했습니다",
      "revokeFailed": "초대를 취소하지 못했습니다",
      "networkError": "서버에 연결할 수 없습니다",
      "memberAlt": "팀원",
      "removeDialogTitle": "멤버 제거",
      "removeDialogDesc": "<bold>{name}</bold>을(를) 이 계정에서 제거하시겠습니까? 이 계정에서 로그아웃되며 다음 로그인 시 새로운 개인 계정이 발급됩니다. 로그인 정보 자체는 삭제되지 않습니다.",
      "cancel": "취소",
      "removing": "제거 중...",
      "removeBtn": "멤버 제거"
    },
    "invite": {
      "inviteCreated": "초대가 생성되었습니다",
      "inviteCreatedDesc": "이 링크를 새 팀원과 공유하세요. <bold>{role}</bold> 역할로 가입(또는 로그인)해 계정에 합류할 수 있습니다. 링크는 <bold>{days}일</bold> 동안 유효합니다.",
      "inviteLink": "초대 링크",
      "copy": "복사",
      "saveLinkNow": "지금 이 링크를 저장하세요.",
      "saveLinkHint": "원문은 저장되지 않으며, 이 대화상자를 닫으면 URL이 사라집니다. 다시 공유하려면 이 초대를 취소하고 새로 만드세요.",
      "sendViaWhatsApp": "WhatsApp으로 보내기",
      "done": "완료",
      "dialogTitle": "팀원 초대",
      "networkError": "서버에 연결할 수 없습니다. 다시 시도할까요?",
      "fallbackAccountName": "우리 wacrm 계정",
      "dialogDesc": "일회용 초대 링크를 생성합니다. WhatsApp, Slack 등 원하는 채널로 공유하세요 — 이메일 서비스가 필요하지 않습니다.",
      "roleLabel": "역할",
      "validForLabel": "링크 유효 기간",
      "days1": "1일",
      "days7": "7일",
      "days30": "30일",
      "labelTitle": "라벨",
      "optional": "(선택)",
      "labelPlaceholder": "예: Sara — 지원팀",
      "labelHint": "아래 대기 목록에서 링크를 누구에게 보냈는지 기억하는 데 도움이 됩니다.",
      "cancel": "취소",
      "creating": "만드는 중...",
      "generateLink": "링크 생성",
      "labelTooLong": "라벨은 {max}자 이하여야 합니다",
      "copied": "초대 링크가 복사되었습니다",
      "clipboardBlocked": "클립보드 접근이 차단되었습니다 — 링크를 직접 복사하세요",
      "whatsappMessage": "이 링크(유효 기간 {expiresInDays}일)로 wacrm의 {accountName}에 참여하세요: {url}",
      "createFailed": "초대를 만들지 못했습니다"
    },
    "tagsAndFields": {
      "title": "필드 & 태그",
      "description": "연락처를 정리하는 두 가지 방법: 빠른 그룹화를 위한 색상 태그와, 구조화된 데이터를 위한 커스텀 필드.",
      "tagsTitle": "태그",
      "tagsDesc": "연락처를 그룹화하고 필터링하기 위한 색상 라벨입니다.",
      "fieldsTitle": "커스텀 필드",
      "fieldsDesc": "추가 연락처 필드입니다 (예: 우편번호, 리드 출처). 모든 연락처와 \"연락처 필드 업데이트\" 자동화 액션에 표시됩니다.",
      "adminRole": "관리자",
      "failedToLoadTags": "태그를 불러오지 못했습니다",
      "nameRequired": "태그 이름은 필수입니다",
      "notAuthenticated": "인증되지 않았습니다",
      "tagCreated": "태그가 생성되었습니다",
      "failedToCreateTag": "태그를 생성하지 못했습니다",
      "tagDeleted": "태그가 삭제되었습니다",
      "failedToDeleteTag": "태그를 삭제하지 못했습니다",
      "deleteAria": "{name} 삭제",
      "noTags": "아직 태그가 없습니다 — 아래에서 첫 태그를 만들어보세요.",
      "placeholder": "예: 뉴스레터",
      "useColor": "{color} 사용",
      "addTag": "태그 추가",
      "deleteTag": "태그 삭제",
      "deleteConfirm": "\"{name}\" 태그를 삭제하시겠습니까? 모든 연락처에서 제거되며 되돌릴 수 없습니다.",
      "cancel": "취소",
      "deleting": "삭제 중...",
      "colors": {
        "red": "빨강",
        "orange": "주황",
        "amber": "호박색",
        "emerald": "에메랄드",
        "cyan": "청록",
        "blue": "파랑",
        "violet": "보라",
        "pink": "분홍"
      }
    },
    "templates": {
      "title": "메시지 템플릿",
      "description": "템플릿을 만들어 Meta에 승인을 요청하세요. 다른 곳에서 승인된 템플릿을 가져오려면 \"Meta에서 동기화\"를 사용하세요.",
      "syncFromMeta": "Meta에서 동기화",
      "qualityScoreTitle": "Meta 품질 점수",
      "headerTextLabel": "헤더 텍스트",
      "editFailedHttp": "수정에 실패했습니다 (HTTP {status})",
      "submitFailedHttp": "제출에 실패했습니다 (HTTP {status})",
      "syncing": "동기화 중…",
      "syncTitle": "Meta WhatsApp 비즈니스 계정에서 승인된 템플릿 가져오기",
      "newTemplate": "새 템플릿",
      "noTemplates": "아직 템플릿이 없습니다.",
      "createFirst": "시작할 첫 메시지 템플릿을 만드세요.",
      "editTitle": "수정하면 Meta 재검토가 트리거되어 상태가 대기 중으로 바뀝니다.",
      "editLabel": "템플릿 수정",
      "edit": "수정",
      "resubmitTitle": "템플릿을 수정해 Meta 검토를 위해 다시 제출하세요.",
      "resubmitLabel": "템플릿 수정 후 재제출",
      "resubmit": "재제출",
      "deleteMetaLocallyAria": "Meta와 로컬에서 템플릿 삭제",
      "deleteLocallyAria": "로컬에서 템플릿 삭제",
      "deleteMetaLocallyTitle": "Meta와 로컬에서 삭제",
      "deleteLocallyTitle": "로컬에서 삭제",
      "dialogEditTitle": "메시지 템플릿 수정",
      "dialogNewTitle": "새 메시지 템플릿",
      "dialogEditDesc": "변경 사항을 저장해 Meta에 재제출하세요. 검토 중에는 상태가 다시 대기 중으로 바뀝니다.",
      "dialogNewDesc": "템플릿을 만들어 Meta 승인을 요청하세요. 승인되면 브로드캐스트와 인박스에서 사용할 수 있습니다.",
      "authWarning": "AUTHENTICATION 템플릿은 본문과 OTP 버튼 형식이 고정되어 있어 별도의 빌더가 필요합니다. 지금은 Meta WhatsApp 관리자에서 만든 뒤 <bold>Meta에서 동기화</bold>로 가져오세요.",
      "templateName": "템플릿 이름",
      "namePlaceholder": "예: order_confirmation",
      "nameFixed": "템플릿이 Meta에 존재하면 이름이 고정됩니다 — 변경하려면 새 템플릿을 만드세요.",
      "nameHint": "소문자, 숫자, 밑줄만 사용할 수 있습니다.",
      "category": "카테고리",
      "language": "언어",
      "langFixed": "템플릿이 Meta에 존재하면 언어가 고정됩니다.",
      "langHint": "Meta의 정확한 코드와 일치해야 합니다 — <code>en_US</code>와 <code>en</code>은 다른 코드입니다.",
      "header": "헤더",
      "headerNone": "없음",
      "headerText": "텍스트",
      "headerImage": "이미지",
      "headerVideo": "동영상",
      "headerDocument": "문서",
      "headerTextPlaceholder": "헤더 텍스트 (최대 60자, {{1}} 선택 가능)",
      "headerSampleAria": "헤더 변수 샘플 값",
      "headerSamplePlaceholder": "{{1}}의 샘플 값 (Meta 검토에 필요)",
      "uploadImage": "이미지 업로드",
      "uploadVideo": "동영상 업로드",
      "uploadDocument": "문서 업로드",
      "uploadHint": "JPEG 또는 PNG, 5MB 이하",
      "uploadHintVideo": "MP4 또는 3GPP, 16MB 이하",
      "uploadHintDocument": "PDF, Word, PowerPoint, Excel 또는 텍스트, 16MB 이하",
      "mediaUrlPlaceholder": "https://… (또는 공개 {format} 링크 붙여넣기)",
      "imageHint": "JPEG/PNG(5MB 이하, 800×418px 이상 권장)를 업로드하거나 공개 HTTPS 링크를 붙여넣으세요 — 검토를 위해 자동으로 Meta에 업로드됩니다.",
      "mediaHint": "파일을 업로드하거나 공개 HTTPS 링크를 붙여넣으세요 — 검토를 위해 자동으로 Meta에 업로드됩니다.",
      "videoHint": " MP4 또는 3GPP, 16MB 이하, 60초 이하 권장.",
      "documentHint": " PDF, Word, PowerPoint, Excel 또는 텍스트, 링크는 100MB 이하(여기서 업로드 시 16MB 이하).",
      "bodyText": "본문 텍스트",
      "bodyPlaceholder": "안녕하세요 {{1}}님, 주문 {{2}}이(가) 확정되었습니다.",
      "sampleValues": "샘플 값 (Meta가 템플릿 검토에 사용합니다)",
      "bodyHint": "변수에는 {{1}}, {{2}}를 사용하세요 ({{1}}부터 연속되어야 합니다).",
      "sampleAria": "본문 변수 {var}의 샘플 값",
      "samplePlaceholder": "{var}의 샘플",
      "footer": "푸터 (선택)",
      "footerPlaceholder": "선택적 푸터 텍스트 (최대 60자)",
      "buttons": "버튼 (선택)",
      "addButton": "버튼 추가",
      "buttonsLimit": "최대 {max}개 버튼. QUICK_REPLY 버튼은 URL / 전화 / 코드 복사 버튼보다 앞에 와야 합니다.",
      "btnQuickReply": "빠른 응답",
      "btnUrl": "URL",
      "btnPhone": "전화",
      "btnCopyCode": "코드 복사",
      "btnLabelPlaceholder": "버튼 라벨",
      "urlPlaceholder": "https://example.com/path 또는 {{1}} 접미사 포함",
      "urlSamplePlaceholder": "{{1}}의 예시 값 (URL에 변수가 있을 때 필요)",
      "phonePlaceholder": "+15551234567",
      "codePlaceholder": "예시 코드 (예: SUMMER20)",
      "cancel": "취소",
      "saving": "저장 중…",
      "submitting": "제출 중…",
      "saveResubmit": "저장 & 재제출",
      "submitApproval": "승인 요청",
      "deleteDialogTitle": "템플릿을 삭제하시겠습니까?",
      "deleteMetaDesc": "\"{name}\"이(가) Meta와 wacrm에서 삭제됩니다. 이 템플릿을 사용하는 활성 브로드캐스트는 다음 전송부터 실패하기 시작합니다. 되돌릴 수 없습니다.",
      "deleteLocalDesc": "\"{name}\"이(가) wacrm에서 삭제됩니다. Meta에 제출된 적이 없으므로 별도의 원격 정리가 필요하지 않습니다.",
      "deleting": "삭제 중…",
      "delete": "삭제",
      "toastLoadFailed": "템플릿을 불러오지 못했습니다",
      "toastSubmitFailed": "제출하지 못했습니다",
      "toastSubmitEditSuccess": "수정 사항이 제출되었습니다 — Meta는 보통 24시간 이내에 검토합니다.",
      "toastSubmitNewSuccess": "Meta에 제출되었습니다 — 일반적인 검토 시간은 24시간입니다. 상태는 자동으로 업데이트됩니다.",
      "toastSaveEditDry": "템플릿이 업데이트되었습니다 (드라이런 — Meta 호출 없음)",
      "toastSaveNewDry": "템플릿이 저장되었습니다 (드라이런 — Meta 호출 없음)",
      "toastSyncCount": "Meta에서 템플릿 {total}개를 동기화했습니다",
      "toastSyncDetails": " (신규 {inserted}개, 업데이트 {updated}개)",
      "toastSyncFailed": "동기화 실패: {preview}",
      "toastSyncTruncated": "처음 2000개 템플릿만 동기화했습니다 — 계정에 더 많은 템플릿이 있습니다. 계속하려면 다시 동기화하거나, 문제가 지속되면 지원팀에 문의하세요.",
      "toastSyncError": "템플릿 동기화에 실패했습니다",
      "toastDeleteSuccess": "템플릿이 삭제되었습니다",
      "toastDeleteError": "템플릿을 삭제하지 못했습니다",
      "toastInvalidImage": "헤더 이미지는 JPEG 또는 PNG여야 합니다.",
      "toastInvalidVideo": "헤더 동영상은 MP4 또는 3GPP 파일이어야 합니다.",
      "toastInvalidDocument": "헤더 문서는 PDF, Word, PowerPoint, Excel 또는 텍스트 파일이어야 합니다.",
      "toastMediaTooLarge": "파일 크기가 {size}MB입니다 — 업로드 제한은 {max}MB입니다.",
      "toastUploadSuccess": "파일이 업로드되었습니다.",
      "toastUploadFailed": "업로드에 실패했습니다.",
      "syncFailedHttp": "동기화 실패 (HTTP {status})",
      "deleteFailedHttp": "삭제 실패 (HTTP {status})",
      "syncMoreSuffix": ", 외 {count}개",
      "headerSampleAlt": "헤더 샘플",
      "categoryLabels": {
        "Marketing": "마케팅",
        "Utility": "유틸리티",
        "Authentication": "인증"
      }
    },
    "roles": {
      "admin": "관리자",
      "adminHint": "멤버 관리 + 모든 기능",
      "agent": "상담원",
      "agentHint": "기능 사용 가능; 설정 접근 불가",
      "viewer": "뷰어",
      "viewerHint": "앱 전체를 읽기 전용으로 열람",
      "owner": "소유자",
      "ownerHint": "계정과 결제에 대한 전체 권한"
    },
    "whatsapp": {
      "title": "WhatsApp 연결",
      "description": "Meta WhatsApp 비즈니스 API를 연결하세요. 자격 증명, 웹훅, 설정 단계가 모두 여기 있습니다.",
      "tokenCorrupted": "저장된 토큰을 복호화할 수 없습니다",
      "resetting": "초기화 중...",
      "resetConfig": "설정 초기화",
      "credentialsValid": "자격 증명이 유효합니다",
      "notConnected": "연결되지 않음",
      "connectedDesc": "액세스 토큰으로 Meta 인증이 완료되었습니다. 웹훅이 실제로 연결되었는지는 아래 등록 상태를 확인하세요.",
      "notConnectedDesc": "아래에서 Meta API 자격 증명을 설정해 WhatsApp 비즈니스 계정을 연결하세요.",
      "registered": "등록됨 — Meta가 wacrm으로 이벤트를 전달합니다",
      "notRegistered": "등록되지 않음 — Meta가 이벤트를 전달하지 않습니다",
      "verifyWithMeta": "Meta로 확인",
      "subscribedSince": "{date}부터 구독 중입니다. 이벤트가 더 이상 도착하지 않으면 Meta로 확인을 클릭하세요.",
      "unknownDate": "알 수 없음",
      "lastAttemptFailed": "마지막 시도 실패 원인: ",
      "retryHint": "아래에 2단계 PIN을 입력(또는 수정)하고 설정 저장을 클릭해 다시 시도하세요.",
      "noRegistrationHint": "이 번호는 등록 추적 기능이 생기기 전에 저장되었거나 등록이 생략되었습니다. 아래에 2단계 PIN을 입력하고 설정 저장을 클릭해 구독하세요.",
      "diagnosticLastRun": "진단 — 마지막 실행: ",
      "live": "실시간",
      "notLive": "실시간 아님",
      "apiCredentialsTitle": "API 자격 증명",
      "apiCredentialsDesc": "Meta WhatsApp 비즈니스 API 자격 증명을 입력하세요.",
      "phoneNumberId": "전화번호 ID",
      "wabaId": "WhatsApp 비즈니스 계정 ID",
      "accessToken": "영구 액세스 토큰",
      "accessTokenPlaceholder": "액세스 토큰을 입력하세요",
      "tokenHidden": "보안을 위해 토큰이 숨겨져 있습니다. 설정을 업데이트하려면 다시 입력하세요.",
      "webhookVerifyToken": "웹훅 인증 토큰",
      "webhookVerifyTokenPlaceholder": "사용자 지정 인증 토큰을 만드세요",
      "webhookVerifyTokenHint": "직접 만드는 문자열입니다. Meta 웹훅 설정에 지정한 토큰과 일치해야 합니다.",
      "webhookVerifyTokenSaved": "저장되어 있습니다. 유지하려면 그대로 두고, 교체하려면 새 값을 입력하세요.",
      "twoStepPin": "2단계 인증 PIN",
      "optional": "(선택)",
      "pinPlaceholder": "Meta WhatsApp 관리자에서 발급받은 6자리 PIN",
      "pinHint": "프로덕션 번호의 수신 메시지를 연결하려면 필요합니다. Meta 비즈니스 관리자 → WhatsApp 계정 → 전화번호 → 2단계 인증에서 설정한 뒤 여기에 붙여넣으면 wacrm이 해당 번호를 구독할 수 있습니다 — 그렇지 않으면 Meta는 마지막으로 이 번호를 등록한 앱으로 수신 이벤트를 보냅니다(공유 WABA 하의 두 번째 번호에서 흔히 발생하는 증상입니다). Meta 테스트 번호는 PIN이 없고 이미 등록되어 있으므로 이 필드를 비워두세요. 비워두면 기존 등록도 그대로 유지됩니다.",
      "webhookTitle": "웹훅 설정",
      "webhookDesc": "Meta 앱 대시보드의 웹훅 콜백으로 이 URL을 사용하세요.",
      "webhookUrl": "웹훅 콜백 URL",
      "mediaTitle": "첨부파일 저장",
      "mediaDesc": "Meta는 수신된 미디어를 도착 후 약 30일이 지나면 삭제합니다. 첨부파일을 자체 스토리지에 복사해 두면 계속 볼 수 있습니다.",
      "mirrorInbound": "수신 첨부파일 보관",
      "mirrorInboundDesc": "고객이 보낸 사진, 동영상, 음성 메모, 문서를 모두 복사해 저장합니다. Supabase 스토리지를 사용하며 16MB를 초과하는 파일은 건너뜁니다.",
      "mirrorInboundOffWarning": "새 첨부파일이 더 이상 복사되지 않으며, 도착 후 약 30일이 지나면 볼 수 없게 됩니다.",
      "mirrorInboundSaveFailed": "첨부파일 설정을 업데이트하지 못했습니다.",
      "loadFailed": "WhatsApp 설정을 불러오지 못했습니다",
      "phoneNumberIdRequired": "전화번호 ID는 필수입니다",
      "accessTokenRequired": "처음 설정할 때는 액세스 토큰이 필요합니다",
      "reenterAccessToken": "변경 사항을 저장하려면 액세스 토큰을 다시 입력하세요",
      "saveFailed": "설정을 저장하지 못했습니다",
      "savedButRegistrationFailed": "저장했지만 Meta가 번호를 등록하지 못했습니다: {error}",
      "savedRegistrationSkipped": "자격 증명이 저장되고 확인되었습니다. PIN이 없어 수신 등록은 생략되었습니다 — 아래 등록 상태를 확인하세요.",
      "liveWithName": "실시간 — {name}이(가) 이제 이벤트를 받을 수 있습니다.",
      "connectedGeneric": "WhatsApp이 연결되었습니다. 1분 안에 이벤트가 들어오기 시작합니다.",
      "connectedTo": "{name}에 연결되었습니다",
      "apiConnectionOk": "API 연결에 성공했습니다",
      "apiConnectionFailed": "API 연결에 실패했습니다",
      "connectionTestFailed": "연결 테스트에 실패했습니다. 네트워크를 확인한 뒤 다시 시도하세요.",
      "fullyWired": "번호가 완전히 연결되었습니다 — Meta가 이벤트를 전달하고 있습니다.",
      "notFullyRegistered": "번호가 완전히 등록되지 않았습니다. 어느 단계가 실패했는지 아래 점검 항목을 확인하세요.",
      "verifyEndpointUnreachable": "확인 엔드포인트에 연결할 수 없습니다.",
      "resetConfirm": "현재 WhatsApp 설정을 삭제하고 다시 입력할 수 있게 합니다. 계속할까요?",
      "resetFailed": "설정을 초기화하지 못했습니다",
      "resetDone": "설정이 초기화되었습니다. 이제 자격 증명을 다시 입력할 수 있습니다.",
      "webhookCopied": "웹훅 URL이 클립보드에 복사되었습니다",
      "phoneNumberIdPlaceholder": "예: 100234567890123",
      "wabaIdPlaceholder": "예: 100234567890456",
      "saving": "저장 중...",
      "saveConfig": "설정 저장",
      "testing": "테스트 중...",
      "testConnection": "API 연결 테스트",
      "setupInstructions": "설정 안내",
      "setupInstructionsDesc": "WhatsApp 비즈니스 API를 연결하려면 다음 단계를 따르세요.",
      "step1": "Meta 앱 만들기",
      "step1_1": "developers.facebook.com으로 이동",
      "step1_2": "\"My Apps\"를 클릭한 뒤 \"Create App\" 클릭",
      "step1_3": "앱 유형으로 \"Business\" 선택",
      "step1_4": "앱 정보를 입력하고 생성",
      "step2": "WhatsApp 제품 추가",
      "step2_1": "앱 대시보드에서 \"Add Product\" 클릭",
      "step2_2": "\"WhatsApp\"을 찾아 \"Set Up\" 클릭",
      "step2_3": "설정 마법사를 따라 비즈니스를 연결",
      "step3": "API 자격 증명 가져오기",
      "step3_1": "WhatsApp > API Setup으로 이동",
      "step3_2": "<strong class=\"text-foreground\">전화번호 ID</strong> 복사",
      "step3_3": "<strong class=\"text-foreground\">WhatsApp 비즈니스 계정 ID</strong> 복사",
      "step3_4": "Business Settings > System Users에서 <strong class=\"text-foreground\">영구 액세스 토큰</strong> 생성",
      "step4": "웹훅 설정",
      "step4_1": "WhatsApp > Configuration으로 이동",
      "step4_2": "웹훅 섹션에서 \"Edit\" 클릭",
      "step4_3": "위의 <strong class=\"text-foreground\">웹훅 콜백 URL</strong>을 붙여넣기",
      "step4_4": "여기서 설정한 것과 동일한 <strong class=\"text-foreground\">인증 토큰</strong>을 입력",
      "step4_5": "\"messages\" 웹훅 필드를 구독",
      "metaDocs": "Meta WhatsApp API 문서",
      "lastSaveFailed": "마지막 저장 실패",
      "metaErrorStep": "단계",
      "metaErrorCode": "Meta 오류 코드",
      "metaErrorTrace": "추적 ID",
      "metaErrorMessage": "Meta 응답",
      "metaErrorDetailsHint": "Meta 지원팀에 문의할 때 이 정보를 함께 알려 주세요.",
      "phoneNumberIdNotNumeric": "전화번호 ID는 숫자만 포함해야 합니다. 전화번호가 아닌, Meta → WhatsApp → API 설정에 표시된 숫자 ID를 복사하세요.",
      "wabaIdNotNumeric": "WhatsApp 비즈니스 계정 ID는 숫자만 포함해야 합니다. Meta → WhatsApp → API 설정에서 복사하세요.",
      "wabaSubscribed": "WhatsApp 비즈니스 계정이 이 앱에 구독되어 있어 수신 웹훅을 받을 수 있습니다.",
      "wabaNotSubscribed": "WhatsApp 비즈니스 계정이 이 앱에 구독되어 있지 않아 Meta가 수신 웹훅을 전달하지 않습니다. 액세스 토큰을 다시 입력하고 저장해 구독하세요."
    },
    "sections": {
      "overview": "개요",
      "profile": "내 프로필",
      "security": "로그인 & 보안",
      "appearance": "화면 설정",
      "whatsapp": "WhatsApp",
      "templates": "템플릿",
      "quick-replies": "빠른 답장",
      "fields": "필드 & 태그",
      "deals": "딜 & 통화",
      "members": "팀원",
      "api": "API 키"
    },
    "groups": {
      "account": "계정",
      "workspace": "워크스페이스"
    },
    "profile": {
      "title": "내 프로필",
      "description": "앱 전체에서 나를 어떻게 보여줄지 설정합니다. 아바타와 이름은 헤더, 사이드바, 팀원이 보는 모든 곳에 표시됩니다.",
      "changePhoto": "사진 변경",
      "uploadPhoto": "사진 업로드",
      "remove": "제거",
      "photoHint": "PNG, JPG, WebP, GIF. 최대 2MB.",
      "unknownError": "알 수 없는 오류",
      "displayName": "표시 이름",
      "email": "이메일",
      "emailChangeHint": "<bold>{oldEmail}</bold>과(와) <bold>{newEmail}</bold>의 받은편지함을 확인하세요 — 변경 사항이 적용되려면 둘 다 확인이 필요합니다.",
      "accountDetails": "계정 정보",
      "role": "역할",
      "joined": "가입일",
      "userId": "사용자 ID",
      "loading": "프로필을 불러오는 중…",
      "saving": "저장 중…",
      "saveChanges": "변경 사항 저장",
      "unsupportedImage": "지원되지 않는 이미지 형식입니다",
      "unsupportedImageDesc": "PNG, JPG, WebP, GIF를 사용하세요.",
      "imageTooLarge": "이미지가 너무 큽니다",
      "imageTooLargeDesc": "최대 2MB.",
      "nameRequired": "표시 이름은 필수입니다",
      "invalidEmail": "유효한 이메일 주소를 입력하세요",
      "uploadFailed": "업로드 실패: {message}",
      "saveFailed": "저장 실패: {message}",
      "profileSaved": "프로필이 저장되었습니다",
      "emailChangeFailed": "이메일 변경 실패: {message}",
      "profileSavedEmailCheck": "프로필이 저장되었습니다 — 이메일 주소 변경을 확인하려면 이메일을 확인하세요",
      "passwordTitle": "비밀번호",
      "passwordDesc": "최소 {min}자 이상 사용하세요. 변경 후에도 이 기기에서는 로그인이 유지됩니다.",
      "currentPassword": "현재 비밀번호",
      "newPassword": "새 비밀번호",
      "confirmPassword": "새 비밀번호 확인",
      "updating": "업데이트 중…",
      "updatePassword": "비밀번호 업데이트",
      "cannotChangeNoEmail": "현재 이메일 없이는 비밀번호를 변경할 수 없습니다",
      "passwordTooShort": "비밀번호는 최소 {min}자 이상이어야 합니다",
      "passwordMismatch": "새 비밀번호와 확인이 일치하지 않습니다",
      "currentPasswordIncorrect": "현재 비밀번호가 올바르지 않습니다",
      "passwordUpdateFailed": "비밀번호 업데이트 실패: {message}",
      "passwordUpdated": "비밀번호가 업데이트되었습니다",
      "sessionsTitle": "활성 세션",
      "sessionsDesc": "이 기기를 포함해 로그인되어 있는 모든 기기에서 로그아웃합니다. 노트북을 분실했거나 비밀번호를 공유한 경우 유용합니다.",
      "signOutAll": "모든 기기에서 로그아웃",
      "signOutConfirmTitle": "모든 곳에서 로그아웃하시겠습니까?",
      "signOutConfirmDesc": "이 계정에 로그인된 모든 기기가 로그아웃되며 다시 로그인해야 합니다. 로그인 페이지로 이동합니다.",
      "cancel": "취소",
      "signingOut": "로그아웃 중…",
      "signOutEverywhere": "모든 곳에서 로그아웃",
      "signOutFailed": "로그아웃 실패: {message}",
      "avatarAlt": "아바타",
      "fullNamePlaceholder": "김민지"
    },
    "appearance": {
      "title": "화면 설정",
      "description": "앱 전체에서 사용할 모드와 강조 색상을 설정합니다. 이 기기에 저장되며, 바로 적용되니 자유롭게 시도해보세요.",
      "mode": "모드",
      "colorMode": "색상 모드",
      "useMode": "{mode} 모드 사용",
      "active": "사용 중",
      "accentColor": "강조 색상",
      "useTheme": "{name} 테마 사용",
      "themeId": "테마 ID: {id}"
    },
    "security": {
      "title": "로그인 & 보안",
      "description": "비밀번호를 변경하고 기기에서 로그아웃하세요. 계정을 안전하게 유지하는 데 도움이 됩니다."
    },
    "browserNotifications": {
      "title": "브라우저 알림",
      "description": "다른 페이지를 보고 있어도 새 고객 메시지마다 데스크톱 알림을 받습니다. 이 기기에 저장됩니다.",
      "toggleLabel": "새 고객 메시지 알림 받기",
      "toggleDesc": "브라우저 탭에 앱이 열려 있는 동안에만 작동합니다.",
      "statusGranted": "브라우저에서 허용됨.",
      "statusDefault": "켜면 브라우저가 알림 권한을 요청합니다.",
      "statusDenied": "브라우저 설정에서 차단됨",
      "deniedHint": "브라우저의 사이트 설정(보통 주소창 옆 잠금 아이콘)에서 이 사이트의 알림을 허용한 뒤 페이지를 새로 고치세요.",
      "unsupported": "이 브라우저는 데스크톱 알림을 지원하지 않습니다.",
      "sendTest": "테스트 알림 보내기",
      "testTitle": "테스트 알림",
      "testBody": "알림이 정상 작동합니다. 새 고객 메시지가 이렇게 표시됩니다.",
      "permissionDeniedToast": "브라우저가 알림을 차단했습니다",
      "labels": {
        "fallbackTitle": "새 메시지",
        "image": "📷 사진",
        "audio": "🎤 음성 메시지",
        "video": "🎬 동영상",
        "document": "📄 문서",
        "location": "📍 위치",
        "template": "📋 템플릿"
      }
    },
    "apiKeys": {
      "title": "API 키",
      "description": "키는 공개 REST API(<apiCode>/api/v1</apiCode>)를 인증해 직접 자동화를 구축할 수 있게 해줍니다. <headerCode>Authorization: Bearer &lt;key&gt;</headerCode> 형식으로 전송하세요.",
      "newApiKey": "새 API 키",
      "noApiKeys": "아직 API 키가 없습니다.",
      "createOneHint": "<bold>새 API 키</bold>를 클릭해 만드세요.",
      "askAdminHint": "관리자에게 생성을 요청하세요.",
      "revoked": "취소됨",
      "expired": "만료됨",
      "noScopes": "권한 범위 없음",
      "created": "{date} 생성",
      "lastUsed": "마지막 사용 {date}",
      "neverUsed": "사용한 적 없음",
      "expires": "{date} 만료",
      "revoke": "취소",
      "revokeSuccess": "\"{name}\"을(를) 취소했습니다",
      "revokeFailed": "키를 취소하지 못했습니다",
      "loadFailed": "API 키를 불러오지 못했습니다",
      "createError": "키를 생성하지 못했습니다",
      "nameRequired": "키 이름을 입력하세요",
      "nameLabel": "이름",
      "namePlaceholder": "예: Zapier 자동화",
      "scopesLabel": "권한 범위",
      "scopesHint": "권한 범위가 없는 키도 <code>GET /api/v1/me</code>를 호출해 동작을 확인할 수 있습니다.",
      "cancel": "취소",
      "creating": "만드는 중…",
      "createKey": "키 생성",
      "copyTitle": "API 키 복사",
      "copyDesc": "전체 키가 표시되는 것은 이번이 마지막입니다. 안전한 곳에 보관하세요 — 분실하면 취소하고 새로 만드세요.",
      "apiKeyLabel": "API 키",
      "copy": "복사",
      "copySuccess": "API 키가 복사되었습니다",
      "copyFailed": "복사 실패 — 직접 선택해 복사하세요",
      "newKeyTitle": "새 API 키",
      "newKeyDesc": "이 키를 사용할 연동 서비스의 이름을 붙이고, 필요한 권한 범위만 부여하세요.",
      "done": "완료",
      "networkError": "서버에 연결할 수 없습니다"
    },
    "deals": {
      "title": "딜 & 통화",
      "description": "새 딜과 파이프라인, 대시보드 합계에 사용되는 통화입니다.",
      "defaultCurrency": "기본 통화",
      "defaultCurrencyDesc": "새 딜은 이 통화를 기본값으로 사용하며, 파이프라인과 대시보드 합계도 이 통화로 표시됩니다. 기존 딜은 저장 당시의 통화를 그대로 유지합니다.",
      "currencyLabel": "통화",
      "adminOnlyHint": "계정 관리자만 기본 통화를 변경할 수 있습니다.",
      "save": "저장",
      "saving": "저장 중...",
      "saveFailed": "기본 통화를 저장하지 못했습니다",
      "saveSuccess": "기본 통화가 업데이트되었습니다"
    },
    "aiConfig": {
      "title": "에이전트 설정",
      "description": "OpenAI, Anthropic 또는 OpenAI 호환 API 키를 직접 사용하세요. wacrm은 입력한 키로 제공업체를 직접 호출하므로 좌석당 AI 요금이 없으며 데이터는 그대로 유지됩니다. 받은 키는 받은편지함 AI 초안, 자동 응답 봇, Playground에 사용됩니다.",
      "adminOnlyConfig": "관리자와 소유자만 AI 설정을 변경할 수 있습니다.",
      "loadFailed": "AI 설정을 불러오지 못했습니다",
      "providerAndKey": "공급자 & 키",
      "encryptionNotice": "키는 저장 시 암호화되며(AES-256-GCM), 저장 후에는 다시 표시되지 않습니다.",
      "provider": "공급자",
      "model": "모델",
      "apiKey": "API 키",
      "testKey": "키 테스트",
      "testSuccess": "키가 정상 작동합니다 — 공급자가 응답했습니다.",
      "testRejected": "공급자가 요청을 거부했습니다.",
      "testNetworkError": "공급자에 연결할 수 없습니다.",
      "embeddingsKey": "임베딩 키",
      "optionalSemanticSearch": "(선택 — 의미 기반 지식베이스 검색을 활성화합니다)",
      "embeddingsHint": "지식베이스를 임베딩하는 데만 사용되는 OpenAI 키입니다(text-embedding-3-small){sameKeyText}. 비워두면 키워드 검색을 사용합니다. 비우면 의미 기반 검색이 꺼집니다.",
      "sameKeyText": " — 위와 동일한 키를 사용할 수 있습니다",
      "behaviour": "동작 방식",
      "behaviourDesc": "비즈니스에 대해 어시스턴트에게 알려주세요 — 제품, 어조, 약속해도 되는 것과 안 되는 것. 이 맥락은 초안 작성과 자동 응답 모두에 반영됩니다.",
      "businessContext": "비즈니스 맥락 & 지침",
      "promptPlaceholder": "예: 저희는 커피 장비 매장 Acme입니다. 따뜻하고 간결하게 응대해주세요. 가격이나 배송일은 절대 언급하지 말고 사람에게 인계하세요.",
      "enableAssistant": "AI 어시스턴트 활성화",
      "enableAssistantDesc": "마스터 스위치입니다. 인박스의 \"AI로 초안 작성\" 버튼을 켭니다.",
      "autoReply": "수신 메시지 자동 응답",
      "autoReplyDesc": "봇이 새 수신 메시지에 자동으로 응답합니다(플로우가 처리하지 않고 담당 상담원이 없는 경우에만). 도움을 줄 수 없으면 사람에게 인계합니다.",
      "maxAutoReplies": "대화당 최대 자동 응답 횟수",
      "maxAutoRepliesDesc": "한 대화에서 이 횟수만큼 봇이 응답하면 더 이상 응답하지 않습니다.",
      "handoffTo": "인계 대상",
      "handoffToDesc": "봇이 도움을 줄 수 없거나 응답 한도에 도달하면 일시 중지하고 무슨 일이 있었는지 짧은 메모와 함께 이 대상에게 대화를 넘깁니다.",
      "handoffQueue": "미배정 대기열 (모든 상담원이 처리 가능)",
      "remove": "제거",
      "save": "저장",
      "missingModel": "모델 이름을 입력하세요.",
      "missingApiKey": "API 키를 입력하세요.",
      "saveSuccess": "AI 어시스턴트가 저장되었습니다.",
      "saveFailed": "저장하지 못했습니다.",
      "removeSuccess": "AI 설정이 제거되었습니다.",
      "removeFailed": "제거하지 못했습니다.",
      "providerOpenAiCompatible": "OpenAI 호환 API",
      "baseUrl": "기본 URL",
      "baseUrlHint": "OpenAI 호환 API의 기본 URL입니다. 예: https://api.groq.com/openai/v1. /chat/completions 경로는 직접 입력하지 않는 경우 자동으로 추가됩니다.",
      "missingBaseUrl": "OpenAI 호환 API의 기본 URL을 입력하세요."
    },
    "aiKnowledge": {
      "loadFailed": "지식베이스를 불러오지 못했습니다",
      "openFailed": "문서를 열지 못했습니다",
      "titleContentRequired": "제목과 내용은 필수입니다.",
      "saveSuccessNew": "문서가 추가되었습니다.",
      "saveSuccessUpdate": "문서가 업데이트되었습니다.",
      "saveFailed": "저장하지 못했습니다.",
      "removeSuccess": "문서가 제거되었습니다.",
      "removeFailed": "제거하지 못했습니다.",
      "reindexSuccess": "문서 {count}개를 재색인했습니다.",
      "reindexFailed": "재색인에 실패했습니다.",
      "title": "지식베이스",
      "description": "FAQ, 정책, 제품 정보를 추가하세요. 어시스턴트가 초안 작성과 자동 응답 시 관련된 부분을 검색해 인계 대신 직접 답변할 수 있습니다.{searchType}",
      "semanticSearchOn": " 의미 기반 검색이 켜져 있습니다 (임베딩 키 설정됨).",
      "keywordSearchOn": " 키워드 검색을 사용 중입니다 — 의미 기반 검색을 사용하려면 위에서 임베딩 키를 추가하세요.",
      "noDocs": "아직 문서가 없습니다.",
      "editDocTitle": "제목",
      "editDocTitlePlaceholder": "예: 반품 & 환불 정책",
      "editDocContent": "내용",
      "editDocContentPlaceholder": "FAQ 답변, 정책 텍스트, 제품 정보를 붙여넣으세요…",
      "cancel": "취소",
      "saveDoc": "문서 저장",
      "addDoc": "문서 추가",
      "reindex": "재색인",
      "reindexTooltip": "모든 문서를 다시 임베딩합니다 (예: 임베딩 키 추가 후)",
      "editDoc": "수정",
      "deleteDoc": "삭제",
      "loading": "불러오는 중…"
    },
    "quickReplies": {
      "nameRequired": "빠른 답장의 이름을 입력하세요.",
      "saveError": "빠른 답장을 저장하지 못했습니다.",
      "updated": "빠른 답장을 수정했습니다.",
      "created": "빠른 답장을 만들었습니다.",
      "deleteConfirm": "이 빠른 답장을 삭제할까요?",
      "deleteError": "빠른 답장을 삭제하지 못했습니다.",
      "title": "빠른 답장",
      "description": "상담원이 인박스 작성기에서 삽입할 수 있는 재사용 가능한 문구(일반 텍스트 또는 저장된 인터랙티브 메시지)입니다.",
      "new": "새 빠른 답장",
      "edit": "빠른 답장 편집",
      "empty": "아직 빠른 답장이 없습니다. 하나 만들어 여러 대화에서 재사용하세요.",
      "nameLabel": "이름",
      "namePlaceholder": "예: 영업시간",
      "kindText": "텍스트",
      "kindInteractive": "인터랙티브",
      "textPlaceholder": "삽입할 메시지 텍스트",
      "cancel": "취소",
      "save": "저장"
    }
  },
  "SignupPage": {
    "passwordsMismatch": "비밀번호가 일치하지 않습니다",
    "passwordTooShort": "비밀번호는 6자 이상이어야 합니다",
    "checkEmailTitle": "이메일을 확인하세요",
    "checkEmailDesc": "<strong>{email}</strong>로 확인 링크를 보냈습니다. 받은 편지함에서 링크를 클릭해 계정을 인증하세요.",
    "backToSignIn": "로그인으로 돌아가기",
    "titleJoin": "계정 만들고 참여하기",
    "title": "계정 만들기",
    "descJoin": "이메일을 인증한 뒤 초대를 수락해 팀에 참여하세요.",
    "desc": "WhatsApp용 CRM Template을 시작하세요",
    "fullNameLabel": "이름",
    "fullNamePlaceholder": "홍길동",
    "emailLabel": "이메일",
    "emailPlaceholder": "you@example.com",
    "passwordLabel": "비밀번호",
    "passwordPlaceholder": "6자 이상",
    "confirmPasswordLabel": "비밀번호 확인",
    "confirmPasswordPlaceholder": "비밀번호를 다시 입력하세요",
    "creating": "계정 만드는 중...",
    "submit": "계정 만들기",
    "haveAccount": "이미 계정이 있으신가요?",
    "signIn": "로그인"
  },
  "ForgotPasswordPage": {
    "checkEmailTitle": "이메일을 확인하세요",
    "checkEmailDesc": "<strong>{email}</strong>로 비밀번호 재설정 링크를 보냈습니다. 받은 편지함을 확인하세요.",
    "backToSignIn": "로그인으로 돌아가기",
    "title": "비밀번호 재설정",
    "desc": "이메일을 입력하시면 재설정 링크를 보내드립니다",
    "emailLabel": "이메일",
    "emailPlaceholder": "you@example.com",
    "sending": "전송 중...",
    "sendLink": "재설정 링크 보내기"
  },
  "ResetPasswordPage": {
    "title": "새 비밀번호 설정",
    "desc": "계정의 새 비밀번호를 입력하세요.",
    "passwordLabel": "새 비밀번호",
    "passwordPlaceholder": "6자 이상",
    "confirmPasswordLabel": "새 비밀번호 확인",
    "confirmPasswordPlaceholder": "새 비밀번호를 다시 입력하세요",
    "submit": "비밀번호 변경",
    "saving": "변경 중...",
    "passwordsMismatch": "비밀번호가 일치하지 않습니다",
    "passwordTooShort": "비밀번호는 6자 이상이어야 합니다",
    "checking": "링크를 확인하는 중...",
    "expiredTitle": "이 링크는 더 이상 유효하지 않습니다",
    "expiredDesc": "비밀번호 재설정 링크는 한 번만 사용할 수 있으며 잠시 후 만료됩니다. 새 링크를 요청한 뒤 요청한 브라우저에서 열어 주세요.",
    "requestNewLink": "새 링크 요청",
    "backToSignIn": "로그인으로 돌아가기",
    "successTitle": "비밀번호가 변경되었습니다",
    "successDesc": "새 비밀번호로 로그인되었습니다.",
    "continueToDashboard": "대시보드로 이동"
  },
  "JoinPage": {
    "fail": {
      "notFoundTitle": "초대를 찾을 수 없습니다",
      "notFoundBody": "이 링크는 유효한 초대와 일치하지 않습니다. URL을 다시 확인하거나 초대한 분에게 새 링크를 요청하세요.",
      "usedTitle": "이미 사용된 초대입니다",
      "usedBody": "이 초대는 이미 수락되었습니다. 본인이 아니라면 계정 관리자에게 새 링크를 요청하세요.",
      "expiredTitle": "초대가 만료되었습니다",
      "expiredBody": "이 초대는 만료되었습니다. 계정 관리자에게 새 초대를 요청하세요 — 몇 초면 생성됩니다.",
      "serverErrorTitle": "문제가 발생했습니다",
      "serverErrorBody": "지금은 이 초대를 확인할 수 없습니다. 잠시 후 페이지를 새로 고쳐 보세요."
    },
    "conflictDefault": "이미 다른 계정에 속해 있습니다. 이 계정에 참여하려면 다른 이메일로 로그인하세요.",
    "acceptFailed": "초대를 수락하지 못했습니다",
    "welcome": "팀에 오신 것을 환영합니다",
    "serverUnreachable": "서버에 연결할 수 없습니다",
    "signOutFailed": "로그아웃할 수 없습니다. 페이지를 새로 고쳐 보세요.",
    "verifying": "초대 확인 중…",
    "tryAgain": "다시 시도",
    "createNewAccount": "대신 새 계정 만들기",
    "signIn": "로그인",
    "invitedTo": "<account>{name}</account>에 초대되었습니다",
    "joinAs": "<badge>{role}</badge> 역할로 참여합니다. 링크는 {date}까지 유효합니다.",
    "accepting": "수락 중…",
    "acceptInvitation": "초대 수락",
    "acceptNote": "수락하면 로그인 계정이 {name}으로 이동합니다. 가입 시 만들어진 빈 개인 계정은 정리됩니다.",
    "conflictTitle": "이 계정으로는 {name}에 참여할 수 없습니다",
    "conflictBody": "<account>{name}</account>에 참여하려면 로그아웃한 뒤 다른 이메일 주소로 다시 가입하세요. 초대 링크는 만료되지 않은 한 계속 유효합니다.",
    "staySignedIn": "로그인 유지",
    "signingOut": "로그아웃 중…",
    "signOutSwitch": "로그아웃 후 다른 이메일 사용",
    "createAndJoin": "계정 만들고 참여하기",
    "haveAccount": "이미 계정이 있습니다"
  },
  "Notifications": {
    "title": "알림",
    "description": "다른 팀원이 나에게 배정한 대화가 여기에 표시됩니다.",
    "markAllRead": "모두 읽음으로 표시",
    "markReadFailed": "알림을 읽음으로 표시하지 못했습니다",
    "markAllFailed": "모두 읽음으로 표시하지 못했습니다",
    "retry": "다시 시도",
    "emptyTitle": "아직 알림이 없습니다",
    "emptyDesc": "누군가 대화를 배정하면 여기에 알림이 표시됩니다.",
    "unread": "읽지 않음"
  },
  "Agents": {
    "title": "AI 에이전트",
    "description": "직접 키를 가져오는 AI 에이전트입니다 — 설정을 마친 뒤, 받은 편지함에서 고객에게 답하기 전에 플레이그라운드에서 테스트해 보세요.",
    "tabPlayground": "플레이그라운드",
    "tabSetup": "설정",
    "tabUsage": "사용량",
    "playground": {
      "title": "플레이그라운드",
      "subtitle": "— 고객 입장에서 답변을 테스트하세요",
      "reset": "초기화",
      "emptyTitle": "메시지를 보내 에이전트가 어떻게 답하는지 확인하세요.",
      "emptyDesc": "지식베이스를 사용하며 자동 응답 봇과 똑같이 동작합니다 — 인계까지 포함해서요.",
      "goToSetup": "아직 설정하지 않았나요? 설정으로 이동",
      "handoff": "여기서 사람에게 인계합니다",
      "thinking": "생각 중…",
      "placeholder": "고객 메시지를 입력하세요…",
      "notConfigured": "아직 에이전트가 설정되지 않았습니다 — 먼저 설정을 완료하세요.",
      "noReply": "답변을 받을 수 없습니다.",
      "unreachable": "에이전트에 연결할 수 없습니다."
    },
    "usage": {
      "title": "토큰 사용량",
      "description": "초안 작성과 자동 응답 봇이 내 제공자 키로 사용한 토큰입니다. 개수만 기록되며 메시지 내용은 저장되지 않습니다.",
      "window": "최근 {days}일",
      "loadFailed": "사용량을 불러오지 못했습니다",
      "empty": "최근 {days}일 동안 AI 사용량이 없습니다.",
      "emptyHint": "어시스턴트가 초안을 작성하고 자동 응답하면 채워집니다.",
      "totalTokens": "총 토큰",
      "llmCalls": "LLM 호출",
      "autoReply": "자동 응답",
      "drafts": "초안",
      "tokens": "토큰",
      "tokensPerDay": "일별 토큰",
      "byModel": "모델별",
      "modelCalls": "{tokens} 토큰 · 호출 {count}회",
      "partialWindow": "일부 기간만 표시 중 — 사용량이 많아 최근 기록만 요약되었습니다."
    }
  },
  "Interactive": {
    "replyButtons": "답장 버튼",
    "list": "목록",
    "body": "본문",
    "bodyPlaceholder": "고객이 옵션 위에서 읽는 내용",
    "header": "헤더 (선택)",
    "footer": "푸터 (선택)",
    "showIds": "답장 ID 표시 (고급)",
    "preview": "미리보기",
    "previewBody": "메시지 본문…",
    "previewButton": "버튼",
    "previewMenu": "메뉴",
    "buttonsCount": "버튼 ({count}/{max})",
    "idPlaceholder": "id",
    "buttonLabelPlaceholder": "버튼 라벨",
    "addButton": "버튼 추가",
    "listButtonLabel": "목록 버튼 라벨",
    "rowsCount": "행 ({count}/{max})",
    "sectionTitlePlaceholder": "섹션 제목 (선택)",
    "rowTitlePlaceholder": "행 제목",
    "rowDescriptionPlaceholder": "설명 (선택)",
    "addRow": "행 추가",
    "addSection": "섹션 추가",
    "defaultListButton": "메뉴"
  },
  "DashboardShell": {
    "loading": "불러오는 중..."
  },
  "UiPrimitives": {
    "close": "닫기"
  },
  "GatedButton": {
    "readOnly": "읽기 전용 — 현재 역할로는 {action} 수 없습니다",
    "reasons": {
      "createAutomations": "자동화를 만들",
      "createBroadcasts": "브로드캐스트를 만들",
      "addOrImportContacts": "연락처를 추가하거나 가져올",
      "deleteContacts": "연락처를 삭제할",
      "createFlows": "플로우를 만들",
      "createPipelines": "파이프라인을 만들",
      "createDeals": "거래를 만들",
      "sendMessages": "메시지를 보낼"
    }
  },
  "Metadata": {
    "description": "직접 호스팅할 수 있는 WhatsApp용 CRM 템플릿입니다."
  },
  "Currency": {
    "USD": "미국 달러",
    "EUR": "유로",
    "GBP": "영국 파운드",
    "INR": "인도 루피",
    "AUD": "호주 달러",
    "CAD": "캐나다 달러",
    "BRL": "브라질 헤알",
    "JPY": "일본 엔",
    "CNY": "중국 위안",
    "AED": "UAE 디르함",
    "ZAR": "남아프리카 랜드",
    "NGN": "나이지리아 나이라",
    "SGD": "싱가포르 달러",
    "MXN": "멕시코 페소",
    "COP": "콜롬비아 페소"
  },
  "TemplateStatus": {
    "DRAFT": "초안",
    "PENDING": "대기 중",
    "APPROVED": "승인됨",
    "REJECTED": "거부됨",
    "PAUSED": "일시 중지됨",
    "DISABLED": "비활성화됨",
    "IN_APPEAL": "이의 제기 중",
    "PENDING_DELETION": "삭제 대기 중"
  },
  "StarterAutomations": {
    "welcome_message": {
      "name": "환영 메시지",
      "description": "처음 연락한 연락처에게 인사말로 자동 응답합니다.",
      "text": "안녕하세요! 👋 연락 주셔서 감사합니다. 곧 답변드리겠습니다."
    },
    "out_of_office": {
      "name": "부재중",
      "description": "업무 시간 외에 자동 응답하여 아무도 기다리지 않게 합니다.",
      "text": "메시지 감사합니다! 지금은 업무 시간(오전 9시–오후 6시)이 아니며, 내일 아침 가장 먼저 답변드리겠습니다."
    },
    "lead_qualifier": {
      "name": "리드 검증",
      "description": "검증 질문으로 유입 리드를 선별합니다.",
      "keywords": "가격,견적,구매",
      "text": "좋습니다 — 가격 안내를 도와드리겠습니다! 간단한 질문: 대략 몇 개의 좌석(라이선스)이 필요하신가요?"
    },
    "follow_up_reminder": {
      "name": "후속 리마인더",
      "description": "연락처가 24시간 이내에 답장하지 않으면 리마인더를 보냅니다.",
      "text": "다시 연락드립니다 — 다른 궁금한 점이 있으신가요? 기꺼이 도와드리겠습니다!"
    }
  },
  "StarterFlows": {
    "welcome_menu": {
      "name": "환영 메뉴",
      "description": "키워드를 입력한 고객을 맞이하고 신규 또는 기존 고객 여부에 따라 적합한 상담원에게 연결합니다.",
      "keywords": "지원,도움,안녕",
      "text": "안녕하세요! 👋 고객 지원에 오신 것을 환영합니다. 기존 고객이신가요, 신규 고객이신가요?",
      "footer": "계속하려면 아래 버튼을 누르세요.",
      "existingButton": "기존 고객",
      "newButton": "신규 고객",
      "existingNote": "기존 고객이 도움을 요청합니다 — 답장하기 전에 계정 이력을 확인하세요.",
      "newNote": "신규 고객 — 가격 정보와 온보딩 링크를 공유하세요."
    },
    "faq_bot": {
      "name": "FAQ 봇",
      "description": "자주 묻는 질문에 자동으로 답변합니다. 고객이 목록에서 주제를 고르면 봇이 답변하고 종료합니다.",
      "keywords": "faq,질문,정보",
      "text": "무엇을 도와드릴까요?",
      "buttonLabel": "주제 보기",
      "commonSection": "자주 묻는 질문",
      "hoursRow": "영업시간",
      "pricingRow": "가격",
      "refundsRow": "환불 정책",
      "otherSection": "기타",
      "humanRow": "상담원과 대화",
      "hoursAnswer": "월–금, 현지 시간 오전 9시–오후 6시에 운영합니다. 주말에는 긴급한 문제만 지원합니다.",
      "pricingAnswer": "요금은 월 $9부터 시작합니다. 자세한 내용은 https://example.com/pricing 에서 확인하세요.",
      "refundsAnswer": "구매 후 30일 이내에 환불이 가능합니다. 주문 번호를 답장으로 보내주시면 처리해 드리겠습니다.",
      "humanNote": "고객이 FAQ 봇에서 상담원과의 대화를 요청했습니다."
    },
    "lead_capture": {
      "name": "리드 수집",
      "description": "처음 문의한 고객을 맞이하고 이름 + 이메일 + 회사를 수집한 뒤, 답변을 메모에 담아 영업팀에 인계합니다.",
      "intro": "환영합니다! 👋 적합한 담당자에게 연결해 드리기 위해 몇 가지 간단한 질문을 드리겠습니다.",
      "askName": "성함이 어떻게 되시나요?",
      "askEmail": "감사합니다, {name}님! 업무용 이메일 주소를 알려주세요.",
      "askCompany": "거의 끝났습니다 — 회사 이름이 무엇인가요?",
      "handoffNote": "신규 리드 — 이름={name}, 이메일={email}, 회사={company}."
    }
  },
  "LibErrors": {
    "upload": {
      "notSignedIn": "로그인되어 있지 않습니다.",
      "accountUnresolved": "계정을 확인할 수 없습니다."
    },
    "media": {
      "noAttachment": "이 메시지에는 첨부 파일이 없습니다."
    },
    "ai": {
      "timeout": "AI 제공업체의 응답 시간이 너무 깁니다.",
      "unreachable": "AI 제공업체에 연결할 수 없습니다: {message}",
      "emptyResponse": "{provider}에서 빈 응답을 반환했습니다.",
      "compatBaseUrlRequired": "OpenAI 호환 API 기본 URL은 필수입니다.",
      "compatBaseUrlInvalid": "OpenAI 호환 API 기본 URL은 올바른 URL이어야 합니다.",
      "compatBaseUrlProtocol": "OpenAI 호환 API 기본 URL은 http:// 또는 https://를 사용해야 합니다.",
      "compatBaseUrlHttpsRequired": "OpenAI 호환 API 기본 URL은 호스트가 {envVar}에 등록되어 있지 않으면 https://를 사용해야 합니다.",
      "compatBaseUrlCredentials": "OpenAI 호환 API 기본 URL에는 인증 정보를 포함할 수 없습니다.",
      "compatBaseUrlQuery": "OpenAI 호환 API 기본 URL에는 쿼리 문자열이나 프래그먼트를 포함할 수 없습니다.",
      "compatBlockedUrl": "OpenAI 호환 제공자 URL이 서버의 외부 URL 정책에 의해 차단되었습니다. 운영자가 승인한 사설 호스트라면 {envVar}에 추가하세요.",
      "invalidKey": "{provider}에서 API 키를 거부했습니다",
      "rateLimited": "{provider} 요청 한도에 도달했습니다",
      "apiError": "{provider} API 오류 ({status})",
      "embeddingsMalformed": "임베딩 응답 형식이 올바르지 않습니다.",
      "embeddingsMissingIndices": "임베딩 응답에 결과 인덱스가 없습니다.",
      "embeddingsMissingVector": "임베딩 응답에 벡터가 누락되었습니다."
    },
    "tags": {
      "verifyFailed": "연락처 태그 소유권을 확인할 수 없습니다",
      "contactNotFound": "연락처를 찾을 수 없습니다",
      "tagNotFound": "태그를 찾을 수 없습니다",
      "addFailed": "연락처 태그를 추가하지 못했습니다: {message}",
      "removeFailed": "연락처 태그를 제거하지 못했습니다: {message}"
    },
    "auth": {
      "unauthorized": "인증되지 않았습니다",
      "forbidden": "접근이 거부되었습니다",
      "internal": "내부 서버 오류",
      "loadContext": "계정 정보를 불러올 수 없습니다",
      "notLinked": "프로필이 계정에 연결되어 있지 않습니다",
      "requiresRole": "이 작업에는 {min} 이상의 역할이 필요합니다",
      "roleNames": {
        "owner": "소유자",
        "admin": "관리자",
        "agent": "상담원",
        "viewer": "뷰어"
      }
    },
    "rateLimitExceeded": "요청 한도를 초과했습니다",
    "send": {
      "contactNotFound": "이 계정에서 연락처를 찾을 수 없습니다",
      "noWhatsAppAddress": "연락처에 사용할 수 있는 WhatsApp 주소가 없습니다 (전화번호: {phone})",
      "none": "없음",
      "notConfigured": "이 계정에 WhatsApp이 설정되어 있지 않습니다",
      "dbInsertFailed": "Meta로 전송되었지만 DB 저장에 실패했습니다: {message}",
      "conversationLookupFailed": "대화 조회에 실패했습니다: {message}",
      "conversationNotFound": "이 계정에서 대화를 찾을 수 없습니다"
    },
    "engine": {
      "needsContact": "{step}에는 연락처가 필요합니다",
      "emptyText": "send_message의 텍스트가 비어 있습니다",
      "needsTemplateName": "send_template에는 template_name이 필요합니다",
      "needsContactAndTag": "{step}에는 연락처 + tag_id가 필요합니다",
      "needsPipelineStage": "create_deal에는 파이프라인 + 단계가 필요합니다",
      "needsUrl": "send_webhook에는 URL이 필요합니다",
      "pausedWhileWaitingForReply": "답장을 기다리는 동안 자동화가 일시 중지되었습니다",
      "noReplyWithin24h": "24시간 내 답장 없음",
      "parkForReplyFailed": "답장 대기 상태로 전환할 수 없습니다: {message}",
      "destinationNotAllowed": "send_webhook: 허용되지 않는 대상입니다",
      "webhookStatus": "웹훅이 {status}을(를) 반환했습니다",
      "conversationNotInAccount": "대화가 이 계정에 속하지 않습니다",
      "noContactForConversation": "대화를 확인할 수 없습니다: 연락처 없음",
      "noConversation": "전송할 수 없습니다: 연락처에 기존 대화가 없습니다",
      "tagAddedNoConversation": "tag_added 자동화가 전송할 수 없습니다: 연락처에 기존 대화가 없습니다"
    }
  },
  "Validation": {
    "flows": {
      "nameRequired": "플로우 이름은 필수입니다.",
      "entryRequired": "활성화하기 전에 시작 노드를 선택하세요.",
      "needsNode": "활성화하려면 플로우에 노드가 하나 이상 있어야 합니다.",
      "entryMissing": "시작 노드 \"{id}\"이(가) 존재하지 않습니다.",
      "duplicateNodeKey": "중복된 node_key \"{key}\".",
      "unreachable": "노드 \"{key}\"은(는) 시작 노드에서 도달할 수 없습니다.",
      "keywordsRequired": "키워드 트리거에는 키워드가 하나 이상 필요합니다.",
      "blankKeywords": "키워드 {count}개가 비어 있습니다 — 아무것과도 일치하지 않습니다.",
      "startNeedsNext": "시작 노드는 다음 노드를 가리켜야 합니다.",
      "startMissingNext": "시작 노드가 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "sendMessageNeedsText": "메시지 보내기 노드에는 본문 텍스트가 필요합니다.",
      "sendMessageNeedsNext": "메시지 보내기 노드는 다음 노드를 가리켜야 합니다.",
      "sendMessageMissingNext": "메시지 보내기 노드가 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "sendMediaNeedsType": "미디어 보내기 노드에는 미디어 유형(이미지, 동영상 또는 문서)이 필요합니다.",
      "sendMediaNeedsFile": "미디어 보내기 노드에는 파일이 필요합니다(활성화하기 전에 업로드하세요).",
      "captionTooLong": "캡션이 {max}자를 초과합니다(WhatsApp 제한).",
      "sendMediaNeedsNext": "미디어 보내기 노드는 다음 노드를 가리켜야 합니다.",
      "sendMediaMissingNext": "미디어 보내기 노드가 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "sendButtonsNeedsText": "버튼 보내기 노드에는 본문 텍스트가 필요합니다.",
      "sendButtonsNeedsButton": "버튼 보내기에는 버튼이 하나 이상 필요합니다.",
      "tooManyButtons": "WhatsApp는 메시지당 최대 {max}개의 버튼만 허용합니다.",
      "buttonNeedsReplyId": "버튼 {n}에 응답 ID가 필요합니다.",
      "duplicateButtonReplyId": "중복된 버튼 응답 ID \"{id}\".",
      "buttonNeedsTitle": "버튼 {n}에 제목이 필요합니다.",
      "buttonTitleTooLong": "버튼 {n}의 제목이 {max}자를 초과합니다(WhatsApp 제한).",
      "buttonNeedsNext": "버튼 {n}에 다음 노드가 필요합니다.",
      "buttonMissingNext": "버튼 {n}이(가) 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "sendListNeedsText": "목록 보내기 노드에는 본문 텍스트가 필요합니다.",
      "sendListNeedsLabel": "목록 보내기에는 버튼 라벨(탭하여 펼치는 텍스트)이 필요합니다.",
      "sendListNeedsRow": "목록 보내기에는 행이 하나 이상 필요합니다.",
      "tooManyRows": "목록 보내기는 모든 섹션을 합쳐 최대 {max}개의 행만 허용합니다.",
      "rowNeedsReplyId": "섹션 {section}의 행 {row}에 응답 ID가 필요합니다.",
      "duplicateRowId": "중복된 목록 행 ID \"{id}\".",
      "rowNeedsTitle": "행 {n}에 제목이 필요합니다.",
      "rowTitleTooLong": "행 {n}의 제목이 {max}자를 초과합니다.",
      "rowDescriptionTooLong": "행 {n}의 설명이 {max}자를 초과합니다.",
      "rowNeedsNext": "행 {n}에 다음 노드가 필요합니다.",
      "rowMissingNext": "행 {n}이(가) 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "collectNeedsPrompt": "입력 수집에는 고객에게 보낼 질문이 필요합니다.",
      "collectNeedsVarKey": "입력 수집에는 답변을 저장할 var_key가 필요합니다.",
      "invalidVarKey": "var_key \"{key}\"는 영문자, 숫자, 밑줄만 사용할 수 있으며 영문자나 밑줄로 시작해야 합니다.",
      "collectNeedsNext": "입력 수집 노드는 다음 노드를 가리켜야 합니다.",
      "collectMissingNext": "입력 수집 노드가 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "conditionNeedsSubject": "조건에는 대상(var / tag / contact_field)이 필요합니다.",
      "conditionNeedsSubjectKey": "조건에는 subject_key(변수 이름, 태그 ID 또는 필드 이름)가 필요합니다.",
      "conditionNeedsOperator": "조건에는 연산자가 필요합니다.",
      "operatorNeedsValue": "연산자 \"{operator}\"는 보통 비교 값이 필요합니다 — 값이 비어 있으면 비어 있는 대상과만 일치합니다.",
      "conditionNeedsBranch": "조건의 \"{branch}\" 분기에 노드가 필요합니다.",
      "conditionMissingBranch": "조건의 \"{branch}\"이(가) 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "setTagNeedsMode": "연락처 태그 지정에는 모드(추가 또는 제거)가 필요합니다.",
      "setTagNeedsTag": "연락처 태그 지정에는 적용할 태그가 필요합니다.",
      "setTagNeedsNext": "연락처 태그 지정 노드는 다음 노드를 가리켜야 합니다.",
      "setTagMissingNext": "연락처 태그 지정 노드가 존재하지 않는 노드 \"{key}\"을(를) 가리킵니다.",
      "unknownNodeType": "알 수 없는 노드 유형 \"{type}\"."
    },
    "automations": {
      "needsStep": "활성 자동화에는 단계가 하나 이상 필요합니다",
      "messageTextRequired": "메시지 텍스트는 필수입니다",
      "templateNameRequired": "템플릿 이름은 필수입니다",
      "tagRequired": "태그는 필수입니다",
      "agentRequired": "모드가 \"specific\"이면 상담원은 필수입니다",
      "fieldNameRequired": "필드 이름은 필수입니다",
      "fieldValueRequired": "필드 값은 필수입니다",
      "pipelineRequired": "파이프라인은 필수입니다",
      "stageRequired": "단계는 필수입니다",
      "titleRequired": "제목은 필수입니다",
      "waitAmountInvalid": "대기 시간은 0보다 커야 합니다",
      "waitUnitInvalid": "대기 단위는 분, 시간 또는 일이어야 합니다",
      "conditionSubjectRequired": "조건 대상은 필수입니다",
      "conditionOperandRequired": "조건 피연산자는 필수입니다",
      "webhookUrlRequired": "웹훅 URL은 필수입니다",
      "webhookUrlScheme": "웹훅 URL은 http 또는 https를 사용해야 합니다",
      "webhookUrlInvalid": "웹훅 URL이 올바른 URL이 아닙니다",
      "unknownStepType": "알 수 없는 단계 유형: {type}",
      "keywordRequired": "키워드가 하나 이상 필요합니다",
      "keywordsEmpty": "키워드는 빈 문자열일 수 없습니다",
      "matchTypeInvalid": "일치 유형은 \"exact\", \"contains\" 또는 \"word\"여야 합니다",
      "scheduleRequired": "일정은 필수입니다",
      "replyIdRequired": "응답 ID가 하나 이상 필요합니다",
      "replyIdsEmpty": "응답 ID는 빈 문자열일 수 없습니다"
    },
    "templates": {
      "nameRequired": "템플릿 이름은 필수입니다.",
      "nameInvalid": "템플릿 이름에는 영문 소문자, 숫자, 밑줄만 사용할 수 있습니다(1-512자).",
      "bodyNotContiguous": "본문 변수는 {first}부터 연속되어야 합니다 — 발견된 변수: {found}.",
      "bodyRequired": "본문 텍스트는 필수입니다.",
      "bodyTooLong": "본문 텍스트가 {max}자를 초과합니다(현재 {got}자).",
      "footerTooLong": "푸터 텍스트가 {max}자를 초과합니다(현재 {got}자).",
      "footerNoVariables": "푸터 텍스트에는 {placeholder} 변수를 넣을 수 없습니다(Meta 규칙).",
      "headerTextRequired": "텍스트 헤더에는 header_content가 필요합니다.",
      "headerTextTooLong": "헤더 텍스트가 {max}자를 초과합니다(현재 {got}자).",
      "headerTooManyVariables": "텍스트 헤더에는 변수를 최대 1개만 사용할 수 있습니다 — {count}개 발견(Meta 규칙).",
      "headerVariableMustBeFirst": "텍스트 헤더 변수는 {var}이어야 합니다(Meta 규칙).",
      "mediaHeaderRequiresSource": "{type} 헤더에는 공개 샘플 URL(header_media_url) 또는 Resumable Upload 핸들(header_handle)이 필요합니다.",
      "headerMediaUrlScheme": "header_media_url은 http(s) 스킴을 사용해야 합니다.",
      "headerMediaUrlInvalid": "header_media_url은 올바른 URL이어야 합니다.",
      "tooManyButtons": "템플릿에는 버튼을 최대 {max}개까지 넣을 수 있습니다(현재 {got}개).",
      "tooManyUrlButtons": "URL 버튼은 최대 {max}개까지 허용됩니다(현재 {got}개).",
      "tooManyPhoneButtons": "PHONE_NUMBER 버튼은 최대 {max}개까지 허용됩니다(현재 {got}개).",
      "tooManyCopyCodeButtons": "COPY_CODE 버튼은 최대 {max}개까지 허용됩니다(현재 {got}개).",
      "quickReplyInterleaved": "QUICK_REPLY 버튼은 URL / PHONE_NUMBER / COPY_CODE 버튼과 섞을 수 없습니다 — 맨 앞에 모아 두세요.",
      "buttonMissingText": "버튼 #{n}({type})에 텍스트가 없습니다.",
      "buttonTextTooLong": "버튼 #{n}의 텍스트가 {max}자를 초과합니다.",
      "urlButtonMissingUrl": "URL 버튼 #{n}에 url이 없습니다.",
      "urlButtonInvalidUrl": "URL 버튼 #{n}의 url이 올바르지 않습니다.",
      "urlButtonTooManyVariables": "URL 버튼 #{n}에는 변수를 최대 1개만 사용할 수 있습니다(Meta 규칙).",
      "urlButtonVariableMustBeFirst": "URL 버튼 #{n}의 변수는 {var}이어야 합니다(Meta 규칙).",
      "urlButtonNeedsExample": "URL 버튼 #{n}이(가) {var}을(를) 사용합니다 — Meta는 예시 값을 요구합니다.",
      "phoneButtonMissingNumber": "PHONE_NUMBER 버튼 #{n}에 phone_number가 없습니다.",
      "copyCodeButtonMissingExample": "COPY_CODE 버튼 #{n}에 예시 값이 없습니다.",
      "bodySampleCountMismatch": "본문에 변수가 {count}개 있습니다 — 샘플 값을 정확히 {count}개 입력하세요(현재 {got}개).",
      "headerSampleCountMismatch": "헤더에 변수가 {count}개 있습니다 — 샘플 값을 정확히 {count}개 입력하세요(현재 {got}개).",
      "bodySampleEmpty": "본문 샘플 값 #{n}이(가) 비어 있습니다.",
      "headerSampleEmpty": "헤더 샘플 값 #{n}이(가) 비어 있습니다.",
      "languageRequired": "언어는 필수입니다.",
      "metaAppIdRequired": "미디어 헤더 템플릿에는 META_APP_ID 설정이 필요합니다(Meta의 Resumable Upload에 사용). 환경 변수에 추가하거나 미디어 헤더를 제거하세요.",
      "headerUrlUnreachable": "헤더 미디어 URL을 가져올 수 없습니다. 공개적으로 접근 가능한지 확인하세요.",
      "headerUrlStatus": "헤더 {kind} URL이 {status}을(를) 반환했습니다. 공개적으로 접근 가능해야 합니다.",
      "headerWrongType": "헤더 {kind}은(는) {formats} 형식이어야 합니다(현재 {contentType}).",
      "headerEmpty": "헤더 {kind}이(가) 비어 있습니다.",
      "headerTooLarge": "헤더 {kind}의 크기가 {size} MB입니다 — Meta의 제한은 {max} MB입니다.",
      "headerTextValueRequired": "헤더 텍스트 변수 {var}에 값이 필요합니다 — headerText를 전달하세요.",
      "mediaHeaderSendSource": "{type} 헤더는 전송 시 미디어 링크나 id가 필요합니다 — 템플릿에 header_media_url을 설정하거나 headerMediaUrl/headerMediaId를 전달하세요.",
      "bodyValuesMissing": "본문에 변수가 {count}개 있지만 값은 {got}개만 제공되었습니다.",
      "urlButtonParamRequired": "URL 버튼 #{n}이(가) {var}을(를) 사용합니다 — buttonParams[{index}] 값이 필요합니다."
    },
    "interactive": {
      "buttonCount": "인터랙티브 버튼 메시지에는 버튼이 1-{max}개 필요합니다(현재 {got}개).",
      "buttonMissingId": "인터랙티브 버튼에 id가 없습니다.",
      "duplicateButtonId": "인터랙티브 메시지에 중복된 버튼 id \"{id}\"이(가) 있습니다.",
      "buttonMissingTitle": "인터랙티브 버튼 \"{id}\"에 제목이 없습니다.",
      "buttonTitleTooLong": "인터랙티브 버튼 제목 \"{title}\"이(가) {max}자를 초과합니다.",
      "listRequiresButtonLabel": "인터랙티브 목록에는 buttonLabel이 필요합니다.",
      "listButtonLabelTooLong": "인터랙티브 목록 buttonLabel \"{label}\"이(가) {max}자를 초과합니다.",
      "listSectionCount": "인터랙티브 목록에는 섹션이 1-{max}개 필요합니다(현재 {got}개).",
      "listRowCount": "인터랙티브 목록에는 모든 섹션을 합쳐 행이 1-{max}개 필요합니다(현재 {got}개).",
      "listRowMissingId": "인터랙티브 목록 행에 id가 없습니다.",
      "duplicateRowId": "인터랙티브 목록에 중복된 행 id \"{id}\"이(가) 있습니다.",
      "listRowMissingTitle": "인터랙티브 목록 행 \"{id}\"에 제목이 없습니다.",
      "listRowTitleTooLong": "인터랙티브 목록 행 제목 \"{title}\"이(가) {max}자를 초과합니다.",
      "listRowDescriptionTooLong": "인터랙티브 목록 행 \"{id}\"의 설명이 {max}자를 초과합니다.",
      "bodyRequired": "인터랙티브 메시지에는 bodyText가 필요합니다.",
      "bodyTooLong": "인터랙티브 bodyText가 {max}자를 초과합니다.",
      "headerTooLong": "인터랙티브 headerText가 {max}자를 초과합니다.",
      "footerTooLong": "인터랙티브 footerText가 {max}자를 초과합니다."
    }
  },
  "Api": {
    "common": {
      "notFound": "찾을 수 없습니다",
      "invalidJson": "잘못된 JSON입니다",
      "unauthorized": "인증되지 않았습니다",
      "internalServerError": "내부 서버 오류",
      "profileNotLinked": "프로필이 계정에 연결되어 있지 않습니다.",
      "conversationNotFound": "대화를 찾을 수 없습니다",
      "failedToLoadConversation": "대화를 불러오지 못했습니다",
      "whatsappNotConfigured": "WhatsApp가 설정되지 않았습니다",
      "whatsappNotConfiguredDot": "WhatsApp가 설정되지 않았습니다.",
      "whatsappNotConfiguredSetup": "WhatsApp가 설정되지 않았습니다. 먼저 WhatsApp 연동을 설정하세요.",
      "whatsappNotConfiguredConnect": "WhatsApp가 설정되지 않았습니다. 먼저 설정에서 WhatsApp Business 계정을 연결하세요.",
      "wabaIdMissing": "WABA(WhatsApp Business Account) ID가 없습니다. 설정에서 계정을 다시 연결하세요.",
      "unknownError": "알 수 없는 오류",
      "invalidRequestBody": "잘못된 요청 본문입니다",
      "titleEmpty": "제목은 비워둘 수 없습니다",
      "insertFailed": "추가하지 못했습니다"
    },
    "account": {
      "apiKeys": {
        "revokeFailed": "API 키를 폐기하지 못했습니다",
        "notFoundOrRevoked": "API 키를 찾을 수 없거나 이미 폐기되었습니다",
        "loadFailed": "API 키를 불러오지 못했습니다",
        "nameRequired": "이름은 필수입니다",
        "nameTooLong": "이름은 {max}자 이하여야 합니다",
        "scopesInvalid": "권한 범위는 알려진 범위 문자열의 배열이어야 합니다",
        "createFailed": "API 키를 생성하지 못했습니다"
      },
      "invitations": {
        "revokeFailed": "초대를 취소하지 못했습니다",
        "notFound": "초대를 찾을 수 없습니다",
        "loadFailed": "초대 목록을 불러오지 못했습니다",
        "roleInvalid": "역할은 admin, agent, viewer 중 하나여야 합니다",
        "labelTooLong": "라벨은 {max}자 이하여야 합니다",
        "createFailed": "초대를 생성하지 못했습니다"
      },
      "members": {
        "loadFailed": "팀원 목록을 불러오지 못했습니다",
        "updateFailed": "팀원을 업데이트하지 못했습니다",
        "roleInvalid": "역할은 owner, admin, agent, viewer 중 하나여야 합니다",
        "useTransferOwnership": "팀원을 소유자로 승격하려면 POST /api/account/transfer-ownership을 사용하세요"
      },
      "nameMustBeString": "이름은 문자열이어야 합니다",
      "nameEmpty": "계정 이름은 비워둘 수 없습니다",
      "nameTooLong": "계정 이름은 {max}자 이하여야 합니다",
      "updateFailed": "계정을 업데이트하지 못했습니다",
      "transferFailed": "소유권을 이전하지 못했습니다",
      "newOwnerInvalid": "newOwnerUserId는 유효한 UUID여야 합니다"
    },
    "invitations": {
      "redeemFailed": "초대를 수락하지 못했습니다",
      "missingToken": "초대 토큰이 없습니다"
    },
    "ai": {
      "pausedRequired": "paused(불리언)는 필수입니다",
      "updateConversationFailed": "대화를 업데이트하지 못했습니다",
      "loadConfigFailed": "AI 설정을 불러오지 못했습니다",
      "providerInvalid": "제공자는 \"openai\", \"anthropic\" 또는 \"openai_compatible\"이어야 합니다",
      "baseUrlRequired": "openai_compatible에는 base_url이 필수입니다",
      "baseUrlInvalid": "base_url은 올바른 http(s) URL이어야 합니다",
      "modelRequired": "모델은 필수입니다",
      "handoffNotMember": "인계 담당자(handoff_agent_id)는 이 계정의 팀원이어야 합니다",
      "storedKeyReenter": "저장된 API 키를 복호화할 수 없습니다 — 키를 다시 입력하세요.",
      "apiKeyRequired": "API 키는 필수입니다",
      "validateWithProviderFailed": "제공자에서 API 키를 확인할 수 없습니다.",
      "embeddingsKeyError": "임베딩 키: {message}",
      "validateEmbeddingsFailed": "임베딩 키를 확인할 수 없습니다.",
      "saveConfigFailed": "AI 설정을 저장하지 못했습니다",
      "deleteConfigFailed": "AI 설정을 삭제하지 못했습니다",
      "conversationIdRequired": "conversation_id는 필수입니다",
      "storedKeyUndecryptable": "저장된 API 키를 복호화할 수 없습니다.",
      "notConfigured": "AI 어시스턴트가 설정되지 않았습니다. 설정 → AI 어시스턴트에서 활성화하세요.",
      "noMessages": "아직 초안을 작성할 메시지가 없습니다.",
      "messagesRequired": "messages는 필수입니다",
      "sendMessageToTest": "에이전트를 테스트하려면 메시지를 보내세요.",
      "noAgentConfigured": "아직 설정된 에이전트가 없습니다. 설정에서 제공자 키를 추가하세요.",
      "enterApiKey": "테스트할 API 키를 입력하세요.",
      "validateFailed": "API 키를 확인할 수 없습니다.",
      "loadUsageFailed": "사용량을 불러오지 못했습니다",
      "knowledge": {
        "loadDocFailed": "문서를 불러오지 못했습니다",
        "nothingToUpdate": "업데이트할 내용이 없습니다",
        "contentEmpty": "내용은 비워둘 수 없습니다",
        "updateDocFailed": "문서를 업데이트하지 못했습니다",
        "indexingFailed": "색인 실패",
        "updatedIndexFailed": "업데이트되었지만 의미 기반 색인에 실패했습니다({message}). 키워드 검색은 계속 작동합니다. 재색인을 사용해 다시 시도하세요.",
        "updatedKeywordOnly": "키워드 검색만으로 업데이트되었습니다 — 임베딩 키를 복호화할 수 없습니다(ENCRYPTION_KEY를 확인한 후 키를 다시 입력하세요).",
        "deleteDocFailed": "문서를 삭제하지 못했습니다",
        "loadDocsFailed": "문서 목록을 불러오지 못했습니다",
        "reindexKeyCorrupt": "임베딩 키를 복호화할 수 없습니다(ENCRYPTION_KEY를 확인한 후 설정 → AI 어시스턴트에서 키를 다시 입력하세요). 재색인된 항목이 없습니다.",
        "reindexPartial": "{reindexed}개를 재색인한 후 오류가 발생했습니다: {message}",
        "loadKbFailed": "지식베이스를 불러오지 못했습니다",
        "titleContentRequired": "제목과 내용은 필수입니다",
        "saveDocFailed": "문서를 저장하지 못했습니다",
        "savedIndexFailed": "저장되었지만 의미 기반 색인에 실패했습니다({message}). 키워드 검색은 계속 작동합니다. 재색인을 사용해 다시 시도하세요.",
        "savedKeywordOnly": "키워드 검색만으로 저장되었습니다 — 임베딩 키를 복호화할 수 없습니다(ENCRYPTION_KEY를 확인한 후 키를 다시 입력하세요)."
      }
    },
    "automations": {
      "copyName": "{name} (복사본)",
      "copyFailed": "복제하지 못했습니다",
      "invalidActiveConfig": "잘못된 설정으로는 자동화를 활성 상태로 유지할 수 없습니다",
      "invalidActivateConfig": "잘못된 설정으로는 자동화를 활성화할 수 없습니다",
      "nameTriggerRequired": "이름과 트리거는 필수입니다"
    },
    "contacts": {
      "tagIdRequired": "tag_id는 필수입니다"
    },
    "flows": {
      "statusInvalid": "상태는 'draft', 'active', 'archived' 중 하나여야 합니다",
      "cannotActivate": "플로우를 활성화할 수 없습니다 — 먼저 아래 문제를 해결하세요.",
      "nameEmpty": "이름은 비워둘 수 없습니다",
      "unknownTemplate": "알 수 없는 플로우 템플릿 \"{slug}\"",
      "insertFailed": "플로우를 생성하지 못했습니다",
      "nameRequired": "이름은 필수입니다"
    },
    "quickReplies": {
      "kindInvalid": "종류는 \"text\" 또는 \"interactive\"여야 합니다",
      "contentTextRequired": "텍스트 빠른 답장에는 내용이 필요합니다",
      "titleRequired": "제목은 필수입니다"
    },
    "broadcast": {
      "alreadyRunning": "이 브로드캐스트의 발송이 이미 진행 중입니다. 완료될 때까지 기다린 후 다시 재개하세요.",
      "recipientsRequired": "`recipients`(권장) 또는 `phone_numbers`를 제공하세요 — 비어 있지 않은 배열이어야 합니다",
      "templateNameRequired": "템플릿 이름은 필수입니다",
      "templateMalformed": "로컬 템플릿 데이터가 손상되었습니다 — 브로드캐스트 전에 설정에서 \"Meta에서 동기화\"를 실행해 복구하세요.",
      "invalidPhoneFormat": "전화번호 형식이 올바르지 않습니다"
    },
    "whatsappConfig": {
      "fetchFailed": "설정을 가져오지 못했습니다",
      "noConfig": "아직 저장된 WhatsApp 설정이 없습니다. 양식을 작성하고 설정 저장을 클릭하세요.",
      "tokenCorrupted": "저장된 액세스 토큰을 현재 ENCRYPTION_KEY로 복호화할 수 없습니다. 보통 키가 변경되었거나 환경마다 다르기 때문입니다(local vs Hostinger vs Vercel). 아래의 \"설정 초기화\"를 클릭한 후 다시 저장하세요.",
      "credentialsRequired": "access_token과 phone_number_id는 필수입니다",
      "phoneIdDigits": "Phone Number ID는 숫자만 포함해야 합니다 — 전화번호 자체가 아니라 Meta → WhatsApp → API Setup에 표시되는 숫자 ID입니다.",
      "wabaIdDigits": "WhatsApp Business Account ID는 숫자만 포함해야 합니다 — Meta → WhatsApp → API Setup에서 복사하세요.",
      "pinDigits": "PIN은 정확히 6자리여야 합니다.",
      "validateFailed": "설정을 검증하지 못했습니다",
      "numberLinkedElsewhere": "이 WhatsApp 전화번호는 이미 이 인스턴스의 다른 계정에 연결되어 있습니다. 각 전화번호는 하나의 wacrm 사용자에만 연결할 수 있습니다.",
      "encryptFailed": "토큰을 암호화하지 못했습니다. 환경 변수의 ENCRYPTION_KEY가 유효한 64자 16진수 문자열인지 확인하세요.",
      "updateFailed": "설정을 업데이트하지 못했습니다",
      "saveFailed": "설정을 저장하지 못했습니다",
      "deleteFailed": "설정을 삭제하지 못했습니다",
      "noConfigShort": "아직 저장된 WhatsApp 설정이 없습니다.",
      "tokenUndecryptable": "저장된 액세스 토큰을 복호화할 수 없습니다 — ENCRYPTION_KEY가 변경되었을 가능성이 높습니다. 토큰을 다시 입력해 복구하세요.",
      "phoneCheckFailed": "전화번호 메타데이터 확인 실패: {message}",
      "wabaNoApps": "WABA에 구독된 앱이 없습니다. 설정을 다시 저장해 구독하세요.",
      "wabaCheckFailed": "WABA 구독 확인 실패: {message}",
      "noWabaId": "등록된 WABA ID가 없습니다 — WABA ID 없이는 웹훅을 연결할 수 없습니다. 양식에 추가한 후 다시 저장하세요."
    },
    "media": {
      "idRequired": "미디어 ID는 필수입니다",
      "fetchFailed": "미디어를 가져오지 못했습니다"
    },
    "react": {
      "idEmojiRequired": "message_id와 emoji는 필수입니다",
      "messageNotFound": "메시지를 찾을 수 없습니다",
      "notSent": "WhatsApp으로 전송되지 않은 메시지에는 반응할 수 없습니다",
      "contactNoPhone": "연락처에 전화번호나 WhatsApp 사용자 ID가 없습니다",
      "unknownMetaError": "알 수 없는 Meta API 오류",
      "metaError": "Meta API 오류: {message}",
      "dbDeleteFailed": "반응은 Meta로 전송되었지만 DB에서 삭제하지 못했습니다",
      "dbUpsertFailed": "반응은 Meta로 전송되었지만 DB에 저장하지 못했습니다"
    },
    "send": {
      "idsRequired": "conversation_id 또는 contact_id와 message_type이 필요합니다",
      "contactNotFound": "연락처를 찾을 수 없습니다",
      "openConversationFailed": "이 연락처와 대화를 열지 못했습니다"
    },
    "templates": {
      "invalidId": "잘못된 템플릿 ID입니다.",
      "invalidJsonBody": "잘못된 JSON 본문입니다.",
      "notFound": "템플릿을 찾을 수 없습니다.",
      "neverSubmitted": "이 템플릿은 Meta에 제출된 적이 없습니다 — 새 템플릿을 사용해 제출하세요.",
      "statusNotEditable": "{status} 상태의 템플릿은 수정할 수 없습니다. 허용: APPROVED, REJECTED, PAUSED.",
      "authNotEditable": "AUTHENTICATION 템플릿은 여기서 수정할 수 없습니다 — Meta WhatsApp 관리자에서 관리하세요.",
      "validationFailed": "유효성 검사에 실패했습니다.",
      "headerUploadFailed": "헤더 미디어 업로드에 실패했습니다.",
      "metaEditFailed": "Meta에서 수정하지 못했습니다.",
      "editedSaveFailed": "Meta에서 수정되었지만 로컬에 저장하지 못했습니다: {message}. 복구하려면 \"Meta에서 동기화\"를 실행하세요.",
      "editFailed": "템플릿을 수정하지 못했습니다.",
      "notConfiguredDelete": "WhatsApp가 설정되지 않아 Meta에서 삭제할 수 없습니다.",
      "metaDeleteFailed": "Meta에서 삭제하지 못했습니다.",
      "deletedLocalFailed": "Meta에서 삭제되었지만 로컬에서 삭제하지 못했습니다: {message}.",
      "deleteFailed": "템플릿을 삭제하지 못했습니다.",
      "authNotSupported": "AUTHENTICATION 템플릿은 아직 여기서 지원되지 않습니다 — Meta WhatsApp 관리자에서 만든 후 \"Meta에서 동기화\"를 사용하세요.",
      "metaSubmitFailed": "Meta에 제출하지 못했습니다.",
      "rateLimit": "Meta 요청 한도에 도달했습니다(시간당 템플릿 생성 100개). 나중에 다시 시도하세요.",
      "submittedSaveFailed": "Meta에 제출되었지만 로컬에 저장하지 못했습니다: {message}. 복구하려면 \"Meta에서 동기화\"를 실행하세요.",
      "submitFailed": "템플릿을 제출하지 못했습니다.",
      "metaApiStatus": "Meta API 오류: {status}",
      "syncFailed": "템플릿을 동기화하지 못했습니다"
    }
  }
}
