Files
mai-bot/dashboard/src/i18n/locales/ko.json
DrSmoothl 5dfd6a60c5 Refactor personality and emoji configuration forms; add chat components
- Updated PersonalityForm to handle multiple reply styles and probabilities.
- Removed unused fields from PersonalityConfig and adjusted default values.
- Refactored loadPersonalityConfig and loadEmojiConfig to align with new structure.
- Introduced ChatComposer, ChatHeaderBar, ChatWorkspaceSidebar, and MessageList components for improved chat interface.
- Enhanced user experience with dynamic message rendering and connection status indicators.
- Cleaned up API calls for saving configurations, focusing on essential fields.

Co-authored-by: Copilot <copilot@github.com>
2026-04-25 00:02:14 +08:00

885 lines
42 KiB
JSON

{
"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": "모델 관리",
"adapterConfig": "어댑터 설정",
"emojiManagement": "이모티콘 관리",
"expressionManagement": "표현 관리",
"slangManagement": "슬랭 관리",
"personInfo": "인물 정보",
"knowledgeGraph": "장기 기억 그래프",
"knowledgeBase": "장기 기억 콘솔",
"pluginMarket": "플러그인 마켓",
"configTemplate": "설정 템플릿",
"pluginConfig": "플러그인 설정",
"logViewer": "로그 뷰어",
"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": "봇의 성격과 말투를 정의합니다"
},
"emoji": {
"title": "이모지 팩",
"description": "이모지 관련 설정을 구성합니다"
},
"other": {
"title": "기타 설정",
"description": "전역 슬랭 등 기본 옵션을 설정합니다"
},
"siliconFlow": {
"title": "API 설정",
"description": "SiliconFlow API 키를 설정합니다"
}
},
"loading": {
"title": "설정을 불러오는 중...",
"description": "기존 설정을 읽고 있습니다"
},
"header": {
"title": "초기 설정 마법사",
"description": "{{appName}}의 초기 설정을 함께 완료해 봅시다"
},
"progress": {
"stepCounter": "단계 {{current}} / {{total}}"
},
"validation": {
"selectPlatform": "플랫폼을 선택해 주세요",
"enterNickname": "닉네임을 입력해 주세요",
"enterQqAccount": "QQ 계정을 입력해 주세요",
"enterAccountId": "계정 ID를 입력해 주세요"
},
"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": "봇이 그룹 슬랭을 학습하고 사용할 수 있게 합니다"
}
},
"siliconFlow": {
"about": {
"title": "SiliconFlow 소개",
"description": "SiliconFlow 는 DeepSeek V3, Qwen, 비전 모델, 음성 인식, 임베딩 모델 등 폭넓은 모델을 제공합니다. API Key 하나로 MaiBot 의 모든 기능을 사용할 수 있습니다.",
"link": "SiliconFlow 에서 API Key 받기"
},
"apiKey": {
"label": "SiliconFlow API Key *",
"description": "SiliconFlow API Key를 입력해 주세요. 입력하면 MaiBot 이 필요한 모델을 자동으로 구성합니다.",
"show": "API Key 표시",
"hide": "API Key 숨기기"
},
"autoConfig": {
"title": "다음 모델이 자동으로 구성됩니다:",
"items": {
"deepseek": "DeepSeek V3 - 주요 대화 및 도구 모델",
"qwen3": "Qwen3 30B - 잦은 소규모 작업과 도구 호출",
"qwen3Vl": "Qwen3 VL 30B - 이미지 인식",
"senseVoice": "SenseVoice - 음성 인식",
"bgeM3": "BGE-M3 - 텍스트 임베딩",
"lpmm": "지식 베이스 관련 모델 (LPMM)"
}
},
"hint": {
"title": "팁: ",
"description": "마법사를 마친 뒤에는 \"시스템 설정 -> 모델 설정\"에서 더 많은 API 제공자와 모델을 추가할 수 있습니다."
}
}
}
},
"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": "시스템 로그 보기",
"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": "토큰 소비 트렌드 차트, 최근 시간대별 토큰 사용량 변화 표시"
}
}
}