wacrm/messages/ko.json
Nicolas Pastorello ec137c6fa5 fix(i18n): label the contact name field with its own key
The Details tab rendered `t("company")` above the name input, so the
panel showed "Company" twice and the name field carried the wrong
label — in English as well as Korean. There was no
`Contacts.detailView.name` key at all; the call papered over it with
`{ fallback: "Name" }`, which next-intl ignores (the second argument
is ICU values, not options).

Add the missing key to both catalogues, point the label at it, and
drop the two decorative `fallback` arguments so the remaining call
sites read as what they are.
2026-07-29 13:52:51 -03:00

1700 lines
82 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"LoginPage": {
"titleAccept": "로그인하여 수락하기",
"titleWelcome": "다시 오신 것을 환영합니다",
"descAccept": "로그인하시면 초대 페이지로 이동합니다.",
"descWelcome": "계정에 로그인하세요",
"emailLabel": "이메일",
"emailPlaceholder": "you@example.com",
"passwordLabel": "비밀번호",
"forgotPassword": "비밀번호를 잊으셨나요?",
"passwordPlaceholder": "비밀번호를 입력하세요",
"signingIn": "로그인 중...",
"signIn": "로그인",
"noAccount": "계정이 없으신가요?",
"createAccount": "계정 만들기"
},
"Sidebar": {
"title": "WhatsApp용 CRM 템플릿",
"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} 모드로 전환"
},
"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}일 전"
},
"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": "고객 메시지에 답변하면 이 차트가 채워집니다."
},
"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": "어제"
},
"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": "템플릿 보내기",
"draftWithAI": "AI로 답장 초안 작성",
"addCaption": "캡션 추가…",
"removeAttachment": "첨부 파일 제거",
"moreActions": "더보기",
"interactiveMessage": "인터랙티브 메시지",
"quickReplies": "빠른 답장",
"quickRepliesEmpty": "아직 빠른 답장이 없습니다. 설정 → 빠른 답장에서 추가하세요.",
"saveAsQuickReply": "빠른 답장으로 저장",
"send": "보내기",
"quickReplyNamePrompt": "이 빠른 답장의 이름을 지정하세요:",
"quickReplySaved": "빠른 답장으로 저장되었습니다.",
"quickReplySaveError": "빠른 답장을 저장하지 못했습니다."
},
"bubble": {
"photo": "사진",
"video": "동영상",
"audio": "오디오",
"unavailable": "{label}을(를) 사용할 수 없습니다",
"document": "문서",
"locationShared": "위치 공유됨",
"template": "템플릿",
"buttonReply": "버튼 응답",
"interactiveReply": "[인터랙티브 응답]",
"unsupported": "[지원되지 않는 메시지 형식]",
"aiBadge": "AI",
"aiBadgeTitle": "AI 어시스턴트가 자동으로 전송함"
},
"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": "템플릿 보내기"
},
"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": "커스텀 필드",
"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}개가 삭제되었습니다"
},
"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": "전화번호는 필수입니다"
},
"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": "전화번호는 필수입니다",
"toastUpdateFailed": "연락처를 업데이트하지 못했습니다",
"toastUpdated": "연락처가 업데이트되었습니다",
"toastNotAuthenticated": "인증되지 않았습니다",
"toastNoteAddFailed": "메모를 추가하지 못했습니다",
"toastNoteAdded": "메모가 추가되었습니다",
"toastNoteDeleteFailed": "메모를 삭제하지 못했습니다",
"toastNoteDeleted": "메모가 삭제되었습니다",
"toastCustomFieldsSaved": "커스텀 필드가 저장되었습니다",
"toastCustomFieldsFailed": "커스텀 필드를 저장하지 못했습니다",
"toastTemplateSent": "\"{name}\" 템플릿을 보냈습니다",
"toastTemplateFailed": "템플릿을 보내지 못했습니다: {reason}"
},
"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}개 건너뜀",
"resultFailed": "{count}개 실패",
"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}건을 건너뛰었습니다",
"toastFailed": "연락처 {count}개를 가져오지 못했습니다",
"toastFailed_plural": "연락처 {count}개를 가져오지 못했습니다",
"toastError": "가져오기 실패"
},
"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": "프로필이 계정에 연결되어 있지 않습니다."
},
"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": "파이프라인이 삭제되었습니다"
},
"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": "브로드캐스트를 불러오지 못했습니다",
"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": "브로드캐스트가 삭제되었습니다"
},
"new": {
"title": "새 브로드캐스트",
"subtitle": "연락처에 보낼 브로드캐스트 메시지를 만듭니다.",
"steps": {
"template": "템플릿",
"audience": "대상",
"personalize": "개인화",
"send": "전송"
},
"toastGiveName": "초안을 저장하기 전에 브로드캐스트 이름을 입력하세요.",
"toastNotSignedIn": "로그인되어 있지 않습니다.",
"toastNotLinked": "프로필이 계정에 연결되어 있지 않습니다.",
"toastFailedDraft": "초안 저장 실패: {error}",
"toastDraftSaved": "초안이 저장되었습니다"
},
"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}개를 찾았습니다.",
"errorLoadTags": "태그를 불러오지 못했습니다",
"errorLoadFields": "커스텀 필드를 불러오지 못했습니다",
"errorCsvParse": "CSV 파일을 파싱할 수 없습니다.",
"errorCsvMissingPhone": "CSV에 'phone' 열이 있어야 합니다."
},
"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": "미리보기를 사용할 수 없습니다.",
"fieldMap": {
"name": "이름",
"phone": "전화번호",
"email": "이메일"
}
},
"scheduleSend": {
"title": "검토 및 전송",
"subtitle": "브로드캐스트 이름을 입력하고 전송을 확인하세요.",
"broadcastName": "브로드캐스트 이름",
"broadcastNamePlaceholder": "예: 여름 프로모션",
"summary": "요약",
"template": "템플릿:",
"audience": "대상:",
"audienceAll": "전체 연락처",
"audienceTags": "태그로 필터링됨",
"audienceField": "커스텀 필드로 필터링됨",
"audienceCsv": "CSV 업로드",
"variables": "변수:",
"variablesMapped": "{count}개 매핑됨",
"saveDraft": "초안으로 저장",
"sendNow": "브로드캐스트 전송",
"sending": "전송 중...",
"preparing": "준비 중...",
"progressDesc": "수신자 {total}명 중 {current}명 처리 중...",
"toastFailedPreview": "미리보기 데이터를 불러오지 못했습니다"
}
}
},
"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}과(와) 실행 기록이 영구적으로 삭제됩니다. 되돌릴 수 없습니다.",
"toasts": {
"activated": "자동화가 활성화되었습니다",
"paused": "자동화가 일시 중지되었습니다",
"duplicated": "자동화가 복제되었습니다",
"deleted": "자동화가 삭제되었습니다",
"updateError": "업데이트하지 못했습니다",
"duplicateError": "복제하지 못했습니다",
"deleteError": "삭제하지 못했습니다"
}
},
"edit": {
"loading": "불러오는 중...",
"loadError": "불러오지 못했습니다 ({status})",
"back": "자동화로 돌아가기"
},
"logs": {
"title": "실행 로그",
"loadError": "로그를 불러오지 못했습니다",
"emptyTitle": "아직 실행 기록이 없습니다",
"emptyDesc": "이 자동화를 실행시켜 여기서 결과를 확인하세요.",
"unknownContact": "알 수 없는 연락처",
"step": "단계 {count}개",
"stepPlural": "단계 {count}개",
"noSteps": "기록된 단계가 없습니다.",
"status": {
"success": "성공",
"partial": "부분 성공",
"failed": "실패"
},
"back": "뒤로",
"backAria": "뒤로"
},
"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)",
"active": "활성",
"activeAria": "활성",
"save": "저장",
"saveDraft": "초안 저장",
"untitled": "제목 없는 자동화",
"backToAutomations": "자동화로 돌아가기",
"toasts": {
"saved": "자동화가 저장되었습니다",
"created": "자동화가 생성되었습니다",
"saveFailed": "저장 실패"
},
"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": "단계 추가",
"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": "포함",
"matchExact": "정확히 일치",
"closeConversationHint": "대화 상태를 \"닫힘\"으로 설정합니다. 추가 설정이 필요 없습니다."
}
}
},
"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": "수동 트리거"
},
"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": "캔버스에서 노드를 선택해 설정을 편집하세요.",
"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": "— 없음 —"
},
"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": "초안으로 저장되었습니다."
},
"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} (선택된 태그 없음)"
}
},
"Settings": {
"pageTitle": "설정",
"pageDesc": "계정과 워크스페이스에 관한 모든 것을 한곳에서 관리하세요. 관리할 섹션을 선택하세요.",
"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": "초대가 취소되었습니다",
"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": "팀원 초대",
"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}"
},
"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에서 동기화",
"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": "이미지 업로드",
"uploadHint": "JPEG 또는 PNG, 5MB 이하",
"mediaUrlPlaceholder": "https://… (또는 공개 {format} 링크 붙여넣기)",
"imageHint": "JPEG/PNG(5MB 이하, 800×418px 이상 권장)를 업로드하거나 공개 HTTPS 링크를 붙여넣으세요 — 검토를 위해 자동으로 Meta에 업로드됩니다.",
"mediaHint": "공개적으로 접근 가능한 HTTPS 링크여야 합니다. Meta가 검토 중 한 번 가져오므로 약 24시간 동안 살아있어야 합니다.",
"videoHint": " 권장: MP4 / 3GPP, 16MB 이하, 60초 이하.",
"documentHint": " 권장: PDF, 100MB 이하.",
"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여야 합니다.",
"toastImageTooLarge": "이미지 크기가 {size}MB입니다 — Meta 제한은 5MB입니다.",
"toastUploadSuccess": "이미지가 업로드되었습니다.",
"toastUploadFailed": "업로드에 실패했습니다."
},
"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 웹훅 설정에 지정한 토큰과 일치해야 합니다.",
"twoStepPin": "2단계 인증 PIN",
"optional": "(선택)",
"pinPlaceholder": "Meta WhatsApp 관리자에서 발급받은 6자리 PIN",
"pinHint": "프로덕션 번호의 수신 메시지를 연결하려면 필요합니다. Meta 비즈니스 관리자 → WhatsApp 계정 → 전화번호 → 2단계 인증에서 설정한 뒤 여기에 붙여넣으면 wacrm이 해당 번호를 구독할 수 있습니다 — 그렇지 않으면 Meta는 마지막으로 이 번호를 등록한 앱으로 수신 이벤트를 보냅니다(공유 WABA 하의 두 번째 번호에서 흔히 발생하는 증상입니다). Meta 테스트 번호는 PIN이 없고 이미 등록되어 있으므로 이 필드를 비워두세요. 비워두면 기존 등록도 그대로 유지됩니다.",
"webhookTitle": "웹훅 설정",
"webhookDesc": "Meta 앱 대시보드의 웹훅 콜백으로 이 URL을 사용하세요.",
"webhookUrl": "웹훅 콜백 URL",
"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 문서"
},
"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.",
"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}"
},
"appearance": {
"title": "화면 설정",
"description": "앱 전체에서 사용할 모드와 강조 색상을 설정합니다. 이 기기에 저장되며, 바로 적용되니 자유롭게 시도해보세요.",
"mode": "모드",
"useMode": "{mode} 모드 사용",
"active": "사용 중",
"accentColor": "강조 색상",
"useTheme": "{name} 테마 사용"
},
"security": {
"title": "로그인 & 보안",
"description": "비밀번호를 변경하고 기기에서 로그아웃하세요. 계정을 안전하게 유지하는 데 도움이 됩니다."
},
"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 키를 사용하세요. wacrm은 회원님의 키로 공급자에 직접 요청하므로 좌석당 AI 비용이 없고 데이터도 온전히 회원님의 것입니다. 인박스의 AI 답장 초안, 자동 응답 봇, 플레이그라운드에 사용됩니다.",
"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": "제거하지 못했습니다."
},
"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": "모든 문서를 다시 임베딩합니다 (예: 임베딩 키 추가 후)",
"loading": "불러오는 중…"
}
}
}