{
  "header": {
    "collapseSidebar": "사이드바 접기",
    "expandSidebar": "사이드바 펼치기",
    "toggleConnection": "백엔드 연결 전환",
    "viewAnnualSummary": "연간 요약 보기",
    "annualSummary": "2025 연간 요약",
    "searchPlaceholder": "검색...",
    "viewDocs": "MaiBot 문서 보기",
    "docs": "MaiBot 문서",
    "switchToLight": "라이트 모드로 전환",
    "switchToDark": "다크 모드로 전환",
    "logout": "로그아웃",
    "logoutLabel": "로그아웃",
    "notConnected": "연결 안됨"
  },
  "sidebar": {
    "groups": {
      "overview": "개요",
      "botConfig": "봇 설정",
      "botResources": "봇 리소스",
      "extensionsMonitor": "플러그인 및 확장",
      "system": "시스템"
    },
    "menu": {
      "home": "홈",
      "botMainConfig": "봇 메인 설정",
      "aiModelProvider": "AI 모델 공급자",
      "modelManagement": "모델 관리",
      "promptManagement": "Prompt 관리",
      "adapterConfig": "어댑터 설정",
      "emojiManagement": "이모티콘 관리",
      "expressionManagement": "표현 관리",
      "slangManagement": "슬랭 관리",
      "personInfo": "인물 정보",
      "knowledgeGraph": "장기 기억 그래프",
      "knowledgeBase": "장기 기억",
      "pluginMarket": "플러그인 마켓",
      "configTemplate": "설정 템플릿",
      "pluginConfig": "플러그인 관리",
      "mcpSettings": "MCP 설정",
      "logViewer": "로그 뷰어",
      "reasoningProcess": "추론 과정",
      "maisakaMonitor": "MaiSaka 채팅 모니터",
      "localChat": "로컬 채팅",
      "settings": "설정"
    }
  },
  "workspace": {
    "switcherLabel": "MaiBot 작업 공간 전환",
    "settings": "麦麦 설정",
    "chat": "麦麦 채팅"
  },
  "chat": {
    "defaultTab": "WebUI",
    "botNameFallback": "麦麦",
    "userFallback": "사용자",
    "userNameFallback": "WebUI 사용자",
    "virtualGroupFallback": "WebUI 가상 그룹 채팅",
    "status": {
      "connected": "연결됨",
      "connecting": "연결 중...",
      "disconnected": "연결 안됨"
    },
    "actions": {
      "cancel": "취소",
      "reconnect": "다시 연결",
      "save": "저장",
      "send": "메시지 보내기"
    },
    "identity": {
      "current": "현재 신분:",
      "editName": "닉네임 수정",
      "group": "그룹: {{group}}",
      "namePlaceholder": "닉네임 입력",
      "virtual": "가상 신분:"
    },
    "input": {
      "placeholder": "메시지 입력...",
      "waiting": "연결 대기 중..."
    },
    "message": {
      "empty": "{{bot}}와 대화를 시작해 보세요!",
      "emptyHint": "아래 입력란에 메시지를 입력하고 Enter 키를 눌러 보내세요",
      "errorFallback": "오류가 발생했습니다",
      "thinking": "생각 중..."
    },
    "composer": {
      "hint": "Enter 전송 · Shift + Enter 줄바꿈"
    },
    "sidebar": {
      "closeConversation": "{{label}} 닫기",
      "conversations": "채팅 대화",
      "emptyPreview": "아직 메시지가 없습니다",
      "identityHint": "로컬 채팅 신분",
      "newVirtual": "새 가상 신분 대화",
      "online": "온라인",
      "offline": "오프라인",
      "subtitle": "대화 {{count}}개",
      "title": "채팅",
      "webuiBadge": "WebUI",
      "virtualBadge": "가상",
      "profileTitle": "내 신분",
      "editName": "닉네임 편집",
      "saveName": "저장"
    },
    "dialog": {
      "create": "대화 만들기",
      "description": "麦麦가 이미 알고 있는 사용자를 선택해 그 사용자 신분으로 대화합니다. 麦麦는 해당 사용자에 대한 기억과 이해를 사용해 응답합니다.",
      "groupName": "가상 그룹 이름(선택)",
      "groupNameHint": "麦麦는 이 이름의 그룹 채팅으로 인식합니다",
      "knownUserSuffix": " · 알고 있음",
      "loading": "불러오는 중...",
      "noUsers": "사용자를 찾을 수 없습니다",
      "personCount": "({{count}}명)",
      "platform": "플랫폼 선택",
      "platformPlaceholder": "플랫폼 선택",
      "searchUser": "사용자 이름 검색...",
      "title": "새 가상 신분 대화",
      "user": "사용자 선택"
    },
    "media": {
      "audioUnsupported": "브라우저가 오디오 재생을 지원하지 않습니다",
      "emoji": "이모티콘",
      "face": "[표정:{{data}}]",
      "file": "[파일: {{data}}]",
      "forward": "[전달 메시지]",
      "image": "이미지",
      "loadFailed": "[{{type}} 로드 실패]",
      "music": "[음악 공유]",
      "noCaptions": "자막 없음",
      "reply": "[답장]",
      "unknown": "[{{type}}]",
      "unknownMessage": "알 수 없는 메시지",
      "videoUnsupported": "브라우저가 비디오 재생을 지원하지 않습니다"
    },
    "toast": {
      "backendUnavailable": "백엔드 서비스에 연결할 수 없습니다. MaiBot이 실행 중인지 확인하세요.",
      "backendUnavailableShort": "백엔드 서비스에 연결할 수 없습니다",
      "connectionFailed": "연결 실패",
      "currentSessionUnavailable": "현재 채팅 세션을 사용할 수 없습니다. 잠시 후 다시 시도하세요.",
      "error": "오류",
      "incompleteConfig": "설정이 완전하지 않습니다",
      "networkError": "네트워크 오류",
      "platformFailed": "플랫폼을 불러오지 못했습니다",
      "selectPlatformAndUser": "플랫폼과 사용자를 선택하세요",
      "sendFailed": "전송 실패",
      "serverError": "서버 오류: {{status}}",
      "sessionUnavailable": "채팅 세션을 열 수 없습니다. 잠시 후 다시 시도하세요.",
      "virtualTabCreated": "가상 신분 탭",
      "virtualTabCreatedDesc": "{{label}} 대화를 만들었습니다"
    }
  },
  "layout": {
    "verifyingLogin": "로그인 상태 확인 중...",
    "logoTitle": "MaiBot WebUI",
    "logoTitleShort": "M"
  },
  "httpWarning": {
    "title": "보안 알림: ",
    "message": "현재 HTTP로 WebUI에 접속하고 있습니다.",
    "description": "로컬이 아닌 HTTP 연결에서는 액세스 토큰과 설정 내용이 노출될 수 있습니다. 가능하면 HTTPS 또는 신뢰할 수 있는 내부망 연결을 사용하세요.",
    "dismiss": "HTTP 보안 알림 닫기"
  },
  "settings": {
    "title": "설정",
    "description": "앱 환경 설정 관리",
    "tabs": {
      "appearance": "외관",
      "security": "보안",
      "other": "기타",
      "about": "정보"
    },
    "appearance": {
      "themeMode": "테마 모드",
      "themeModeDesc": "라이트 / 다크 / 시스템 따라가기",
      "light": "라이트",
      "dark": "다크",
      "system": "시스템",
      "accentColor": "강조 색상",
      "resetDefault": "기본값으로 재설정",
      "colorPreview": "색상 미리보기",
      "styleTweaks": "스타일 조정",
      "typography": "타이포그래피",
      "visualEffects": "시각 효과",
      "layout": "레이아웃",
      "animation": "애니메이션",
      "background": "배경",
      "customCss": "사용자 정의 CSS",
      "animationEffect": "애니메이션 효과",
      "importExportTheme": "테마 가져오기 / 내보내기",
      "importTheme": "테마 가져오기",
      "exportTheme": "테마 내보내기",
      "importSuccess": "가져오기 성공",
      "importFailed": "가져오기 실패",
      "resetSuccess": "재설정 성공",
      "fontFamily": "글꼴",
      "fontSize": "글자 크기",
      "borderRadius": "테두리 반경",
      "contentWidth": "콘텐츠 너비",
      "sidebarWidth": "사이드바 너비",
      "animationSpeed": "애니메이션 속도",
      "backgroundImage": "배경 이미지",
      "backgroundBlur": "배경 흐림",
      "backgroundOpacity": "배경 투명도",
      "lightDesc": "항상 라이트 테마 사용",
      "darkDesc": "항상 다크 테마 사용",
      "systemDesc": "시스템 설정에 따라 자동 전환",
      "accentPrimary": "링 컴러",
      "accentHint": "색상 퐹을 클릭하거나 HEX 값을 입력하세요",
      "resetTheme": "기본값으로 재설정",
      "confirmResetTheme": "테마 재설정 확인",
      "confirmResetThemeDesc": "이렇게 하면 색상, 글꼴, 레이아웃 및 사용자 정의 CSS를 포함한 모든 테마 설정이 기본값으로 재설정됩니다. 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?",
      "confirmResetAction": "재설정 확인",
      "cssWarningTitle": "다음 내용이 안전 필터를 거쳣습니다:",
      "cssPlaceholder": "/* 사용자 정의 CSS를 여기에 입력 */\n\n/* 예시: */\n/* .sidebar { background: #1a1a2e; } */",
      "cssDescription": "인터페이스를 더욱 개인화하도록 사용자 정의 CSS를 작성하세요. 위험한 CSS(@import, url() 등)는 자동으로 필터됩니다.",
      "clearCss": "지우기",
      "exportDesc": "주제를 JSON 파일로 내보내 공유하거나 백업합니다. 가져올 때 모든 설정이 자동으로 적용됩니다.",
      "importSuccessDesc": "테마 설정을 가져왔습니다. 페이지가 자동으로 새로고침됩니다",
      "resetSuccessDesc": "테마가 기본값으로 재설정되었습니다",
      "enableAnimations": "애니메이션 활성화",
      "enableAnimationsDesc": "비활성화하면 모든 전환 애니메이션과 효과가 긺히고 성능이 향상됩니다",
      "loginWavesBackground": "로그인 페이지 파도 배경",
      "loginWavesBackgroundDesc": "비활성화하면 로그인 페이지가 단색 배경이 됩니다. 저사양 디바이스에 적합합니다",
      "inheritParentBg": "상위 배경 상속",
      "inheritParentBgDesc": "활성화하면 상위 레이어의 배경 설정을 사용합니다",
      "fontFamilyLabel": "글꼴 패밀리",
      "fontFamilyPlaceholder": "글꼴 패밀리 선택",
      "fontFamilySystem": "시스템 기본 (System)",
      "fontFamilySans": "돋움체 (Sans-serif)",
      "fontFamilySerif": "세리프 (Serif)",
      "fontFamilyMono": "등폭 (Monospace)",
      "baseFontSize": "기본 글자 크기 (Base Size)",
      "lineHeight": "줄 높이 (Line Height)",
      "lineHeightPlaceholder": "줄 높이 선택",
      "lineHeightCompact": "콤팬트 (1.2)",
      "lineHeightNormal": "보통 (1.5)",
      "lineHeightLoose": "느슨 (1.75)",
      "borderRadiusLabel": "테두리 반경 (Radius)",
      "shadowLabel": "그림자 강도 (Shadow)",
      "shadowPlaceholder": "그림자 강도 선택",
      "shadowNone": "없음 (None)",
      "shadowSm": "약함 (Small)",
      "shadowMd": "중간 (Medium)",
      "shadowLg": "강함 (Large)",
      "shadowXl": "매우 강함 (Extra Large)",
      "blurLabel": "흘림 효과 (Blur)",
      "sidebarWidthLabel": "사이드바드 너비 (Sidebar Width)",
      "maxContentWidth": "콘텐츠 최대 너비 (Max Width)",
      "spacingUnit": "기본 간격 (Spacing Unit)",
      "animationSpeedLabel": "애니메이션 속도 (Speed)",
      "animationSpeedPlaceholder": "애니메이션 속도 선택",
      "animationFast": "빠름 (100ms)",
      "animationNormal": "보통 (300ms)",
      "animationSlow": "느림 (500ms)",
      "animationOff": "끄기 (0ms)",
      "bgPage": "페이지",
      "bgSidebar": "사이드바드",
      "typographyGroup": "타이포그래피 (Typography)",
      "visualGroup": "시각 효과 (Visual)",
      "layoutGroup": "레이아웃 (Layout)",
      "animationGroup": "애니메이션 (Animation)",
      "backgroundGroup": "배경 설정 (Backgrounds)"
    },
    "security": {
      "currentToken": "현재 액세스 토큰",
      "yourToken": "액세스 토큰",
      "regenerate": "재생성",
      "customToken": "사용자 정의 액세스 토큰",
      "securityTip": "보안 팁",
      "cannotCopy": "복사할 수 없습니다",
      "copySuccess": "복사됨",
      "copyFailed": "복사 실패",
      "updateSuccess": "업데이트됨",
      "updateFailed": "업데이트 실패",
      "generateSuccess": "생성됨",
      "generateFailed": "생성 실패",
      "newToken": "새 액세스 토큰",
      "confirmRegenerate": "토큰 재생성 확인",
      "confirmRegenerateDesc": "재생성 후 이전 토큰은 무효화됩니다. 다시 로그인해야 합니다.",
      "cancel": "취소",
      "confirm": "확인",
      "cannotCopyDesc": "토큰이 보안 쿠키에 저장되어 있습니다. 새 토큰을 얻으려면 재생성하세요.",
      "copySuccessDesc": "토큰이 클립보드에 복사되었습니다",
      "copyFailedDesc": "토큰을 수동으로 복사하세요",
      "inputError": "입력 오류",
      "inputErrorDesc": "새 토큰을 입력하세요",
      "formatError": "형식 오류",
      "formatErrorDesc": "토큰이 요구 사항을 충족하지 않습니다: {{failedRules}}",
      "updateSuccessDesc": "액세스 토큰이 업데이트되었습니다. 로그인 페이지로 이동합니다.",
      "updateFailedDesc": "토큰을 업데이트할 수 없습니다",
      "updateFailedConn": "서버 연결에 실패했습니다",
      "generateSuccessDesc": "새 액세스 토큰이 생성되었습니다. 즉시 저장하세요.",
      "generateFailedDesc": "새 토큰을 생성할 수 없습니다",
      "generateFailedConn": "서버 연결에 실패했습니다",
      "cannotView": "볼 수 없습니다",
      "cannotViewDesc": "토큰이 보안 쿠키에 저장되어 있습니다. 새 토큰이 필요하면 \"재생성\"을 클릭하세요.",
      "hide": "숨기기",
      "show": "표시",
      "copyTip": "클립보드에 복사",
      "regenerateShort": "생성",
      "confirmRegenerateFullDesc": "새로운 64자 보안 토큰을 생성하고 현재 토큰을 즉시 무효화합니다. 새 토큰으로 다시 로그인해야 합니다. 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?",
      "confirmGenerate": "생성 확인",
      "tokenStorePlaceholder": "토큰이 보안 쿠키에 저장되어 있습니다",
      "safekeepTip": "액세스 토큰을 안전하게 보관하고 다른 사람과 공유하지 마세요.",
      "newTokenLabel": "새 액세스 토큰",
      "customTokenPlaceholder": "사용자 정의 토큰 입력",
      "tokenReqTitle": "토큰 보안 요구 사항:",
      "tokenValid": "토큰 형식이 올바르며 사용 가능합니다",
      "updateBtn": "사용자 정의 토큰 업데이트",
      "updating": "업데이트 중...",
      "dialogTitle": "새 액세스 토큰",
      "dialogDesc": "새 토큰입니다. 즉시 저장하세요. 창을 닫으면 로그인 페이지로 이동합니다.",
      "dialogTokenLabel": "새 토큰 (64자 보안 토큰)",
      "important": "중요 공지",
      "tip1": "이 토큰은 한 번만 표시됩니다. 닫은 후에는 볼 수 없습니다",
      "tip2": "즉시 복사하여 안전한 위치에 저장하세요",
      "tip3": "닫으면 자동으로 로그인 페이지로 이동합니다",
      "tip4": "새 토큰으로 다시 로그인하세요",
      "copied": "복사됨",
      "copyToken": "토큰 복사",
      "savedClose": "저장했습니다, 닫기",
      "securityTip1": "재생성하면 시스템이 랜덤 64자 보안 토큰을 생성합니다",
      "securityTip2": "사용자 정의 토큰은 모든 보안 요구 사항을 충족해야 합니다",
      "securityTip3": "토큰을 업데이트하면 이전 토큰이 즉시 무효화됩니다",
      "securityTip4": "안전한 환경에서 토큰을 확인하고 복사하세요",
      "securityTip5": "토큰 유출이 의심되면 즉시 재생성하거나 업데이트하세요",
      "securityTip6": "최고의 보안을 위해 시스템 생성 토큰을 권장합니다"
    },
    "other": {
      "performance": "성능 & 저장소",
      "localStorage": "로컬 저장소 사용량",
      "logCache": "로그 캐시 크기",
      "importExport": "설정 가져오기 / 내보내기",
      "configWizard": "설정 마법사",
      "devTools": "개발자 도구",
      "clearStorage": "로컬 저장소 지우기",
      "clearStorageDesc": "모든 로컬 저장소 데이터를 지웁니다",
      "clearStorageConfirm": "지우기 확인",
      "clearLogCache": "로그 캐시 지우기",
      "clearLogCacheDesc": "모든 캐시된 로그 데이터를 지웁니다",
      "clearLogCacheConfirm": "지우기 확인",
      "importSettings": "설정 가져오기",
      "exportSettings": "설정 내보내기",
      "resetAllSettings": "모든 설정 재설정",
      "resetAllSettingsDesc": "모든 설정을 기본값으로 되돌립니다",
      "resetAllSettingsConfirm": "재설정 확인",
      "clearStorageSuccess": "로컬 저장소를 지웠습니다",
      "clearStorageFailed": "지우기 실패",
      "clearLogSuccess": "로그 캐시를 지웠습니다",
      "clearLogFailed": "지우기 실패",
      "importSuccess": "가져오기 성공",
      "importFailed": "가져오기 실패",
      "exportSuccess": "내보내기 성공",
      "exportFailed": "내보내기 실패",
      "resetSuccess": "재설정 성공",
      "resetFailed": "재설정 실패",
      "storageItems": "{{count}}개 저장 항목",
      "logCacheSizeDesc": "로그 뷰어가 캐시할 최대 로그 수를 제어합니다. 값이 클수록 메모리를 더 사용합니다.",
      "logCacheSizeUnit": "개",
      "dataSyncIntervalLabel": "홈 데이터 새로고침 간격",
      "dataSyncIntervalUnit": "초",
      "dataSyncIntervalDesc": "홈 화면 통계 데이터의 자동 새로고침 간격을 제어합니다",
      "wsReconnectLabel": "WebSocket 재연결 간격",
      "wsReconnectUnit": "초",
      "wsReconnectDesc": "로그 WebSocket 연결 해제 후 재연결 기본 간격",
      "wsMaxReconnectLabel": "WebSocket 최대 재연결 횟수",
      "wsMaxReconnectUnit": "회",
      "wsMaxReconnectDesc": "연결 실패 후 최대 재연결 시도 횟수",
      "clearLogCacheFn": "로그 캐시 지우기",
      "clearLocalCache": "로컬 캐시 지우기",
      "confirmClearCache": "로컬 캐시 지우기 확인",
      "confirmClearCacheDesc": "로그인 자격 증명을 제외한 모든 로컬 캐시 설정과 데이터를 지웁니다. 일부 기본 설정을 다시 구성해야 할 수 있습니다. 계속하시겠습니까?",
      "confirmClear": "지우기 확인",
      "importExportDesc": "현재 인터페이스 설정을 내보내 백업하거나, 이전에 내보낸 파일에서 복원하세요.",
      "exporting": "내보내는 중...",
      "importing": "가져오는 중...",
      "resetAllSettingsBtn": "모든 설정을 기본값으로 재설정",
      "confirmResetAll": "모든 설정 재설정 확인",
      "confirmResetAllDesc": "테마, 색상, 애니메이션 등 모든 인터페이스 설정을 기본값으로 복원합니다. 로그인 상태에는 영향이 없습니다. 계속하시겠습니까?",
      "configWizardDesc": "초기 설정 마법사를 다시 실행하여 시스템 기본 설정을 재구성할 수 있습니다.",
      "rerunSetup": "초기 설정 다시 실행",
      "confirmRerunSetup": "재구성 확인",
      "confirmRerunSetupDesc": "초기 설정 마법사로 돌아갑니다. 시스템 기본 설정을 재구성할 수 있습니다. 계속하시겠습니까?",
      "devToolsDesc": "아래 기능은 개발 및 디버깅 전용입니다. 페이지 충돌이나 비정상 동작을 유발할 수 있습니다.",
      "triggerError": "테스트 오류 발생",
      "confirmTriggerError": "오류 발생 확인",
      "confirmTriggerErrorDesc": "React 오류를 수동으로 발생시켜 오류 경계 컴포넌트를 테스트합니다. 페이지를 새로고침하거나 홈으로 돌아가면 복구됩니다.",
      "confirmTrigger": "발생 확인",
      "logCleared": "로그 지워짐",
      "logClearedDesc": "로그 캐시가 지워졌습니다",
      "cacheCleared": "캐시 지워짐",
      "cacheClearedDesc": "{{count}}개의 캐시 데이터를 지웠습니다",
      "exportSuccessDesc": "설정을 JSON 파일로 내보냈습니다",
      "exportFailedDesc": "설정을 내보낼 수 없습니다",
      "importSuccessDesc": "{{imported}}개 설정을 가져왔습니다",
      "importSkippedSuffix": ", {{skipped}}개 건너뜀",
      "importRefreshHint": "참고",
      "importRefreshHintDesc": "일부 설정은 페이지를 새로고침해야 완전히 적용됩니다",
      "importNoDataDesc": "가져올 유효한 설정이 없습니다",
      "importInvalidDesc": "유효하지 않은 파일 형식",
      "resetDone": "재설정 완료",
      "resetDoneDesc": "모든 설정이 기본값으로 복원되었습니다. 변경 사항을 적용하려면 페이지를 새로고침하세요."
    },
    "about": {
      "openSource": "오픈 소스",
      "aboutApp": "MaiBot Dashboard 정보",
      "version": "버전:",
      "author": "작성자",
      "techStack": "기술 스택",
      "frontendFramework": "프론트엔드 프레임워크",
      "uiComponents": "UI 컴포넌트",
      "backend": "백엔드",
      "buildTool": "빌드 도구",
      "openSourceThanks": "오픈 소스 라이브러리",
      "openSourceLicense": "오픈 소스 라이선스",
      "openSourceDesc": "이 프로젝트는 GitHub에서 오픈 소스입니다. Star ⭐로 응원해 주세요!",
      "visitGitHub": "GitHub 방문",
      "appDesc": "MaiBot의 현대적인 웹 관리 인터페이스",
      "maimaiCore": "MaiBot 코어",
      "uiFrameworkGroup": "UI 프레임워크 & 컴포넌트",
      "routingStateGroup": "라우팅 & 상태 관리",
      "formGroup": "폼 처리",
      "utilsGroup": "유틸리티 라이브러리",
      "animationGroup": "애니메이션",
      "backendGroup": "백엔드 프레임워크",
      "devToolsGroup": "개발자 도구",
      "openSourceThanksDesc": "이 프로젝트는 다음 훌륭한 오픈 소스 라이브러리를 사용합니다. 기여에 감사드립니다:",
      "licenseDesc": "이 프로젝트는 GNU General Public License v3.0으로 라이선스됩니다. 동일한 오픈 소스 라이선스를 유지하는 한 자유롭게 사용, 수정, 배포할 수 있습니다.",
      "licenseDeps": "이 프로젝트의 모든 오픈 소스 라이브러리는 각각의 라이선스(MIT, Apache-2.0, BSD 등)를 따릅니다. 모든 오픈 소스 기여자에게 감사드립니다.",
      "lib": {
        "react": "UI 구축을 위한 라이브러리",
        "shadcn": "우아한 React 컴포넌트 라이브러리",
        "radix": "스타일 없는 접근 가능한 컴포넌트",
        "tailwind": "유틸리티 우선 CSS 프레임워크",
        "lucide": "아름다운 아이콘 라이브러리",
        "tanstackRouter": "타입 안전한 라우팅 라이브러리",
        "zustand": "경량 상태 관리 라이브러리",
        "reactHookForm": "고성능 폼 라이브러리",
        "zod": "TypeScript 우선 스키마 검증",
        "clsx": "조건부 className 빌더",
        "tailwindMerge": "Tailwind 클래스 이름 병합 도구",
        "cva": "컴포넌트 변형 관리",
        "dateFns": "현대적인 날짜 유틸리티 라이브러리",
        "framerMotion": "React 애니메이션 라이브러리",
        "vaul": "드로어 컴포넌트 애니메이션",
        "fastapi": "현대적인 Python 웹 프레임워크",
        "uvicorn": "ASGI 서버",
        "pydantic": "데이터 검증 라이브러리",
        "pythonMultipart": "파일 업로드 지원",
        "typescript": "JavaScript의 슈퍼셋",
        "vite": "차세대 프론트엔드 빌드 도구",
        "eslint": "JavaScript 코드 린터"
      }
    }
  },
  "auth": {
    "title": "로그인",
    "description": "계속하려면 액세스 토큰을 입력하세요",
    "tokenLabel": "액세스 토큰",
    "tokenPlaceholder": "액세스 토큰 입력",
    "loginButton": "로그인",
    "loggingIn": "로그인 중...",
    "loginFailed": "로그인 실패",
    "loginSuccess": "로그인 성공",
    "checkingAuth": "로그인 상태 확인 중...",
    "welcome": "MaiBot에 오신 것을 환영합니다",
    "accessDesc": "시스템에 액세스하려면 액세스 토큰을 입력하세요",
    "tokenRequired": "액세스 토큰을 입력해 주세요",
    "verifyingLabel": "확인 중...",
    "verifyEnter": "확인 후 입장",
    "helpLink": "Token이 없습니다. 어디서 얻을 수 있나요?",
    "helpTitle": "Access Token 얻는 방법",
    "helpDesc": "Access Token은 MaiBot WebUI에 액세스하는 유일한 자격 증명입니다. 다음 방법으로 얻으세요",
    "method1Title": "방법 1: 시작 로그 확인",
    "method1Desc": "MaiBot 시작 시 콘솔에 WebUI Access Token이 표시됩니다.",
    "method1Example1": "🔑 WebUI Access Token: abc123...",
    "method1Example2": "💡 이 Token으로 WebUI에 로그인하세요",
    "method2Title": "방법 2: 설정 파일 확인",
    "method2Desc": "Token은 프로젝트 루트의 설정 파일에 저장됩니다:",
    "method2FileHint": "이 파일을 열고 access_token 필드의 값을 복사하세요",
    "securityTipTitle": "보안 안내",
    "securityTip1": "Token을 안전하게 유지하고 타인에게 노출하지 마세요",
    "securityTip2": "Token을 재설정하려면 로그인 후 시스템 설정으로 이동하세요",
    "slowLink": "인터페이스가 느립니다. 어떻게 하나요?",
    "disableAnimTitle": "배경 애니메이션 비활성화",
    "disableAnimDesc": "배경 애니메이션은 저사양 디바이스에서 느리게 동작할 수 있습니다. 비활성화하면 화면이 훨씬 부드러워집니다.",
    "disableAnimDetail": "비활성화 후 배경은 단색으로 바뀐지지만 모든 기능은 정상 작동합니다. 시스템 설정에서 언제든지 다시 활성화할 수 있습니다.",
    "disableAnimBtn": "애니메이션 비활성화",
    "verifyFailed": "Token 확인에 실패했습니다. 확인 후 다시 시도해 주세요.",
    "connFailed": "서버에 연결하지 못했습니다. 네트워크 연결을 확인해 주세요.",
    "switchToLight": "라이트 모드로 전환",
    "switchToDark": "다크 모드로 전환"
  },
  "setupPage": {
    "steps": {
      "botBasic": {
        "title": "Bot 기본 설정",
        "description": "봇의 기본 정보를 설정합니다"
      },
      "personality": {
        "title": "성격 설정",
        "description": "봇의 성격과 말투를 정의합니다"
      },
      "apiProvider": {
        "title": "API 설정",
        "description": "API 제공자를 설정합니다"
      },
      "modelSetup": {
        "title": "모델 설정",
        "description": "planner와 replyer 모델을 설정합니다"
      }
    },
    "loading": {
      "title": "설정을 불러오는 중...",
      "description": "기존 설정을 읽고 있습니다"
    },
    "header": {
      "title": "초기 설정 마법사",
      "description": "{{appName}}의 초기 설정을 함께 완료해 봅시다"
    },
    "progress": {
      "stepCounter": "단계 {{current}} / {{total}}"
    },
    "validation": {
      "selectPlatform": "플랫폼을 선택해 주세요",
      "enterNickname": "닉네임을 입력해 주세요",
      "enterQqAccount": "QQ 계정을 입력해 주세요",
      "enterAccountId": "계정 ID를 입력해 주세요",
      "enterProviderName": "API 제공자 이름을 입력해 주세요",
      "enterBaseUrl": "API Base URL을 입력해 주세요",
      "enterApiKey": "API Key를 입력해 주세요",
      "enterPlannerModelIdentifier": "planner 모델 식별자를 입력해 주세요",
      "enterReplyerModelIdentifier": "replyer 모델 식별자를 입력해 주세요"
    },
    "toast": {
      "loadFailedTitle": "설정 불러오기에 실패했습니다",
      "loadFailedDescription": "기존 설정을 불러올 수 없어 기본값을 사용합니다",
      "saveSuccessTitle": "저장되었습니다",
      "saveSuccessDescription": "{{step}} 설정이 저장되었습니다",
      "saveFailedTitle": "저장에 실패했습니다",
      "validationFailedTitle": "입력값을 확인해 주세요",
      "completeSuccessTitle": "설정이 완료되었습니다",
      "completeSuccessDescription": "새 설정을 적용하기 위해 {{appName}}을(를) 재시작하는 중입니다...",
      "completeFailedTitle": "설정 완료에 실패했습니다",
      "skipFailedTitle": "설정 마법사 건너뛰기에 실패했습니다",
      "unknownError": "알 수 없는 오류"
    },
    "actions": {
      "previous": "이전",
      "next": "다음",
      "skip": "마법사 건너뛰기",
      "complete": "설정 완료",
      "saving": "저장 중...",
      "completing": "완료 중..."
    },
    "skipDialog": {
      "title": "설정 마법사를 건너뛸까요?",
      "description": "시스템 설정에서 언제든지 다시 설정 마법사를 열 수 있습니다. 정말 건너뛰시겠습니까?",
      "confirm": "건너뛰기"
    },
    "footer": "이 설정들은 언제든지 설정 화면에서 변경할 수 있습니다",
    "defaults": {
      "personality": {
        "personality": "여자 대학생이며 현재 2학년이고, Tieba 같은 커뮤니티를 자주 봅니다.",
        "replyStyle": "답변은 담백하고 짧게 하며 중국어로 말하세요. 자신의 학과 배경을 일부러 강조하지 마세요. Tieba, Zhihu, Weibo의 답변 스타일을 참고할 수 있습니다.",
        "multipleReplyStyles": {
          "plain": "말투는 담백하지만 약간 냉소적이고, 매우 짧고 구어체입니다. Tieba 와 Weibo 답변 스타일을 참고할 수 있습니다.",
          "shortText": "1-2글자로 답장하기",
          "shortSymbol": "1-2개의 기호로 답장하기",
          "translation": "살짝 번역체로 말하되 길게 쓰지 않기"
        }
      },
      "emoji": {
        "filtrationPrompt": "공공질서와 미풍양속에 어긋나지 않음"
      }
    },
    "forms": {
      "botBasic": {
        "platform": {
          "label": "플랫폼 *",
          "placeholder": "플랫폼 선택",
          "description": "봇이 실행될 플랫폼을 선택합니다",
          "options": {
            "custom": "기타 플랫폼"
          }
        },
        "customPlatform": {
          "label": "플랫폼 이름 *",
          "placeholder": "예: matrix 와 같은 플랫폼 이름 입력"
        },
        "qqAccount": {
          "label": "QQ 계정 *",
          "placeholder": "봇의 QQ 계정을 입력하세요",
          "description": "봇 로그인에 사용하는 QQ 계정입니다"
        },
        "primaryAccount": {
          "label": "계정 ID *",
          "placeholder": "봇의 계정 ID를 입력하세요",
          "description": "이 플랫폼에서 봇을 식별하는 계정 ID입니다"
        },
        "nickname": {
          "label": "닉네임 *",
          "placeholder": "봇의 닉네임을 입력하세요",
          "description": "봇의 대표 호칭입니다"
        },
        "alias": {
          "label": "별칭",
          "placeholder": "별칭을 입력하고 Enter 로 추가",
          "add": "추가",
          "description": "봇의 다른 호칭을 여러 개 추가할 수 있습니다",
          "remove": "별칭 {{alias}} 제거"
        }
      },
      "personality": {
        "personality": {
          "label": "성격 특성 *",
          "placeholder": "봇의 성격과 설정을 설명해 주세요 (권장 120자 이내)",
          "description": "예: 대학 2학년 여자 대학생으로 Tieba 를 자주 본다"
        },
        "replyStyle": {
          "label": "말투 *",
          "placeholder": "봇이 말하는 방식과 표현 습관을 설명해 주세요",
          "description": "예: 답변은 담백하고 짧게, 중국어로 말하며 Tieba, Zhihu, Weibo 스타일을 참고한다"
        },
        "multipleReplyStyle": {
          "label": "대체 답변 스타일",
          "placeholder": "한 줄에 하나씩 대체 답변 스타일을 입력하세요",
          "description": "목록이 비어 있지 않으면 MaiBot 이 아래 확률에 따라 기본 답변 스타일을 무작위로 대체합니다"
        },
        "multipleProbability": {
          "label": "대체 스타일 적용 확률",
          "description": "답변을 만들 때마다 기본 답변 스타일을 대체 스타일로 무작위 교체할 확률입니다"
        }
      },
      "emoji": {
        "emojiSendNum": {
          "label": "이모지 후보 수",
          "description": "전송 전에 몇 개의 이모지 중에서 고를지 정합니다. 최대 64개입니다"
        },
        "maxRegNum": {
          "label": "최대 이모지 수",
          "description": "봇이 저장할 수 있는 이모지의 최대 개수입니다"
        },
        "doReplace": {
          "label": "최대 수 도달 시 교체",
          "description": "켜면 오래된 이모지를 삭제하고, 끄면 새 이모지를 더 이상 수집하지 않습니다"
        },
        "checkInterval": {
          "label": "확인 간격 (분)",
          "description": "이모지 등록, 손상, 삭제를 확인하는 간격입니다"
        },
        "stealEmoji": {
          "label": "이모지 수집",
          "description": "일부 이모지를 봇이 자신의 것으로 저장할 수 있게 합니다"
        },
        "contentFiltration": {
          "label": "이모지 필터링 사용",
          "description": "조건에 맞는 이모지만 저장합니다"
        },
        "filtrationPrompt": {
          "label": "필터 조건",
          "placeholder": "예: 공공질서와 미풍양속에 어긋나지 않음",
          "description": "저장할 이모지가 충족해야 하는 조건을 설명해 주세요"
        }
      },
      "other": {
        "allGlobal": {
          "label": "전역 슬랭 모드 사용",
          "description": "봇이 그룹 슬랭을 학습하고 사용할 수 있게 합니다"
        }
      },
      "apiProvider": {
        "providerName": {
          "label": "API 제공자 이름 *",
          "placeholder": "예: OpenAI, DeepSeek, 자체 호스팅",
          "description": "이 이름은 model_config.toml에 저장되며 아래 모델에서 참조됩니다"
        },
        "baseUrl": {
          "label": "API Base URL *",
          "description": "OpenAI 호환 엔드포인트를 입력해 주세요. 예: https://api.example.com/v1"
        },
        "apiKey": {
          "label": "API Key *",
          "description": "이 제공자의 API Key를 입력해 주세요",
          "show": "API Key 표시",
          "hide": "API Key 숨기기"
        }
      },
      "modelSetup": {
        "planner": {
          "identifier": {
            "label": "planner 모델 식별자 *",
            "description": "API 서비스가 제공하는 실제 모델 ID입니다. 모델 이름은 이 식별자로 초기화됩니다"
          },
          "visual": {
            "label": "비전 사용"
          }
        },
        "replyer": {
          "identifier": {
            "label": "replyer 모델 식별자 *",
            "description": "API 서비스가 제공하는 실제 모델 ID입니다. 모델 이름은 이 식별자로 초기화됩니다"
          },
          "visual": {
            "label": "비전 사용"
          }
        },
        "saveHint": "더 자세한 작업 할당은 나중에 설정할 수 있습니다."
      }
    }
  },
  "common": {
    "loading": "로딩 중...",
    "error": "오류",
    "retry": "재시도",
    "save": "저장",
    "cancel": "취소",
    "confirm": "확인",
    "delete": "삭제",
    "edit": "편집",
    "close": "닫기",
    "search": "검색",
    "noData": "데이터 없음",
    "success": "성공",
    "failed": "실패"
  },
  "restart": {
    "preparing": "재시작 준비 중",
    "preparingDesc": "재시작 요청 전송 중...",
    "preparingTip": "🔄 MaiBot 재시작을 준비 중...",
    "restarting": "MaiBot 재시작 중",
    "restartingDesc": "잠시 기다려주세요, MaiBot이 재시작 중입니다...",
    "restartingTip": "🔄 설정을 저장했습니다, 메인 프로세스를 재시작 중...",
    "checking": "서비스 상태 확인 중",
    "checkingDesc": "서비스 복구 대기 중... ({{current}}/{{max}})",
    "checkingTip": "⏳ 서비스 복구를 기다리는 중, 페이지를 닫지 마세요...",
    "success": "재시작 성공",
    "successDesc": "로그인 페이지로 이동 중...",
    "successTip": "✅ 설정이 적용되었습니다, 서비스가 정상적으로 실행 중입니다",
    "failed": "재시작 시간 초과",
    "failedDesc": "서비스가 예상 시간 내에 복구되지 않았습니다",
    "failedTip": "⚠️ 장시간 응답이 없으면 수동으로 재시작해 보세요",
    "refreshPage": "페이지 새로고침",
    "retryCheck": "재시도",
    "elapsed": "경과 시간:"
  },
  "errorBoundary": {
    "title": "문제가 발생했습니다",
    "description": "앱이 예기치 않은 오류를 만났습니다. 페이지를 새로고침하거나 홈으로 돌아갈 수 있습니다.",
    "refreshPage": "페이지 새로고침",
    "goHome": "홈으로 이동",
    "footer": "문제가 계속되면 오류 정보를 복사하여 개발자에게 보고해 주세요",
    "copiedToClipboard": "클립보드에 복사됨",
    "copyError": "오류 정보 복사"
  },
  "search": {
    "placeholder": "페이지 검색...",
    "title": "검색",
    "noResults": "일치하는 페이지를 찾을 수 없습니다",
    "startSearch": "키워드를 입력하여 검색 시작",
    "navigate": "탐색",
    "select": "선택",
    "close": "닫기",
    "categories": {
      "overview": "개요",
      "config": "설정",
      "resources": "리소스",
      "monitor": "모니터",
      "extensions": "확장 기능",
      "system": "시스템"
    },
    "items": {
      "home": "홈",
      "homeDesc": "대시보드 개요 보기",
      "botConfig": "속 메인 설정",
      "botConfigDesc": "속 핵심 설정 구성",
      "modelProvider": "모델 공급자 설정",
      "modelProviderDesc": "모델 공급자 구성",
      "model": "모델 설정",
      "modelDesc": "모델 매개변수 구성",
      "emoji": "이모티콘 관리",
      "emojiDesc": "속 이모티콘 관리",
      "expression": "표현 관리",
      "expressionDesc": "속 표현 관리",
      "person": "인물 정보",
      "personDesc": "인물 정보 관리",
      "jargon": "슬랭 관리",
      "jargonDesc": "속이 학습한 슬랭 관리",
      "statistics": "통계 정보",
      "statisticsDesc": "사용 통계 보기",
      "plugins": "플러그인 마켓",
      "pluginsDesc": "플러그인 탐색 및 설치",
      "logs": "로그 뷰어",
      "logsDesc": "시스템 로그 보기",
      "reasoningProcessDesc": "Maisaka prompt 추론 로그 보기",
      "settings": "설정",
      "settingsDesc": "시스템 설정 구성"
    }
  },
  "a11y": {
    "skipToContent": "메인 콘텐츠로 건너뀐기",
    "sidebarNav": "메인 내비게이션",
    "closeMenu": "메뉴 닫기",
    "navigatedTo": "{{page}}으로 이동했습니다"
  },
  "home": {
    "title": "실시간 모니터",
    "subtitle": "MaiBot 실행 상태 및 통계 데이터 개요",
    "loading": "통계 데이터 로딩 중...",
    "loadingHint": "MaiBot 실행 데이터를 가져오는 중",
    "timeRange": {
      "24h": "24시간",
      "7d": "7일",
      "30d": "30일"
    },
    "autoRefresh": "자동 새로고침",
    "botStatus": {
      "title": "MaiBot 상태",
      "running": "실행 중",
      "stopped": "중지됨",
      "uptime": "가동 {{time}}"
    },
    "quickActions": {
      "title": "빠른 작업",
      "restart": "MaiBot 재시작",
      "restarting": "재시작 중...",
      "expressionReview": "표현 검토",
      "viewLogs": "로그 보기",
      "pluginManage": "플러그인 관리",
      "systemSettings": "시스템 설정"
    },
    "survey": {
      "title": "피드백 설문",
      "description": "제품 경험 개선에 도움을 주세요",
      "webui": "WebUI 피드백",
      "maibot": "MaiBot 피드백"
    },
    "stats": {
      "totalRequests": "총 요청 수",
      "totalCost": "총 비용",
      "tokenUsage": "토큰 소비",
      "avgResponse": "평균 응답",
      "avgResponseDesc": "API 평균 지연",
      "onlineTime": "온라인 시간",
      "messageProcessing": "메시지 처리",
      "costEfficiency": "비용 효율",
      "recentPeriod": "최근 {{range}}",
      "perHour": "{{value}}/시간",
      "noData": "데이터 없음",
      "replied": "답장 {{num}}건",
      "per100Messages": "100건당",
      "seconds": "초",
      "hours": "시간",
      "days": "일"
    },
    "charts": {
      "tabs": {
        "trends": "트렌드",
        "models": "모델",
        "activity": "활동",
        "daily": "일간 통계"
      },
      "requestTrend": "요청 트렌드",
      "requestTrendDesc": "최근 {{hours}}시간의 요청량 변화",
      "costTrend": "비용 트렌드",
      "costTrendDesc": "API 호출 비용 변화",
      "tokenUsage": "토큰 소비",
      "tokenUsageDesc": "토큰 사용량 변화",
      "modelDistribution": "모델 요청 분포",
      "modelDistributionDesc": "모델별 사용 비율 ({{count}}개 모델)",
      "modelDetails": "모델 상세 통계",
      "modelDetailsDesc": "요청 수, 비용 및 성능",
      "recentActivity": "최근 활동",
      "recentActivityDesc": "최신 API 호출 기록",
      "dailyStats": "일간 통계",
      "dailyStatsDesc": "최근 7일 데이터 요약",
      "requests": "요청 수",
      "cost": "비용(¥)",
      "requestCount": "요청 수",
      "costLabel": "비용",
      "avgTime": "평균 소요",
      "timeCost": "소요 시간",
      "status": "상태"
    },
    "time": {
      "hoursMinutes": "{{hours}}시간 {{minutes}}분"
    },
    "hitokotoFallback": "인생은 초콜릿 상자와 같아서, 다음에 무엇이 나올지 모릅니다.",
    "hitokotoFallbackFrom": "포레스트 검프",
    "unknownSource": "알 수 없음",
    "ariaLabel": {
      "requestTrend": "시간별 요청 트렌드 차트, 최근 시간대별 요청 수 변화 표시",
      "costTrend": "API 비용 트렌드 차트, 최근 시간대별 API 호출 비용 변화 표시",
      "tokenUsage": "토큰 소비 트렌드 차트, 최근 시간대별 토큰 사용량 변화 표시"
    }
  }
}
