diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index 93a6a50646..001f8726ef 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -27,14 +27,14 @@ "copy": "복사", "copied": "복사되었습니다!", "enabled": "활성화됨", - "disabled": "장애인", + "disabled": "비활성화됨", "active": "활성", "inactive": "비활성", "noData": "사용 가능한 데이터가 없습니다.", "nothingHere": "Nothing here yet", "configure": "구성", "manualConfig": "수동 구성", - "manage": "관리하다", + "manage": "관리", "name": "이름", "actions": "작업", "status": "상태", @@ -143,7 +143,7 @@ "where_used": "where_used", "windowMs": "windowMs", "social-github": "GitHub", - "social-google": "구글", + "social-google": "Google", "TOOL_ALLOWLIST": "도구 허용 목록", "TOOL_DENYLIST": "도구 거부 목록", "Failed to save pricing": "가격을 저장하지 못했습니다.", @@ -368,14 +368,14 @@ "signatureDefaults": "Signature Defaults", "errorCreating": "Error Creating", "timeRangeYear": "Time Range Year", - "compatibleLabel": "Compatible Label", + "compatibleLabel": "호환", "cloudDisabledSuccess": "Cloud Disabled Success", "deleteConfirm": "Delete Confirm", "check": "Check", "safeSearch": "Safe Search", "protocolLastActivity": "Protocol Last Activity", "openMcpDashboard": "Open Mcp Dashboard", - "testBenchTab": "Test Bench Tab", + "testBenchTab": "테스트 벤치", "chatPathLabel": "Chat Path Label", "retryDelay": "Retry Delay", "errorUpdating": "Error Updating", @@ -433,7 +433,7 @@ "expirationBannerExpiringSoonDesc": "Expiration Banner Expiring Soon Desc", "source": "Source", "failed": "Failed", - "apiKeyMgmt": "Api Key Mgmt", + "apiKeyMgmt": "API 키 관리", "mcpQuickStartStep1": "Mcp Quick Start Step1", "runTest": "Run Test", "loadingFallbackChains": "Loading Fallback Chains", @@ -540,7 +540,7 @@ "comboUpdated": "Combo Updated", "weighted": "Weighted", "providers": "Providers", - "ccCompatibleLabel": "Cc Compatible Label", + "ccCompatibleLabel": "CC 호환", "noFallbackChainsDesc": "No Fallback Chains Desc", "yesImport": "Yes Import", "lockoutsAutoRefreshHint": "Lockouts Auto Refresh Hint", @@ -584,7 +584,7 @@ "searchTypeNews": "Search Type News", "durationMillisecondsShort": "Duration Milliseconds Short", "addOpenAICompatible": "Add Open Ai Compatible", - "chatTesterTab": "Chat Tester Tab", + "chatTesterTab": "채팅 테스터", "queued": "Queued", "domainPlaceholder": "Domain Placeholder", "durationMinutesShort": "Duration Minutes Short", @@ -742,7 +742,7 @@ "tokensDisconnect": "연결 끊기", "tierCoverageTitle": "계층 적용 범위", "tierCoverageSubtitle": "대체 계층별로 구성된 공급자", - "batchDetailCopyId": "신분증 복사", + "batchDetailCopyId": "ID 복사", "batchDetailClose": "닫기", "batchDetailEndpoint": "엔드포인트", "batchDetailModel": "모델", @@ -760,7 +760,7 @@ "batchListDeleteBatchTitle": "배치 및 해당 파일 삭제", "leaderboardYourRank": "당신의 순위", "leaderboardLoading": "리더보드 로드 중...", - "batchFileDetailCopyId": "신분증 복사", + "batchFileDetailCopyId": "ID 복사", "batchFileDetailClose": "닫기", "batchFileDetailFailedToLoad": "파일 콘텐츠를 로드하지 못했습니다.", "batchFileDetailLoadError": "파일 내용을 불러오는 중 오류가 발생했습니다", @@ -938,10 +938,10 @@ "dashboard": "대시보드", "providers": "공급자", "combos": "콤보", - "usage": "사용법", + "usage": "사용량", "analytics": "분석", "costs": "비용", - "health": "건강", + "health": "상태", "proxy": "프록시", "limits": "한도 및 할당량", "cliTools": "CLI 도구", @@ -955,22 +955,22 @@ "memory": "Memory", "skills": "Skills", "omniSkills": "옴니스킬", - "agentSkills": "에이전트 기술", + "agentSkills": "AgentSkills", "chaosConfig": "카오스 모드", "docs": "문서", "issues": "문제", "endpoints": "엔드포인트", "endpointsSubtitle": "귀하의 AI 연결 URL", - "apiManager": "API 관리자", + "apiManager": "API 키", "apiManagerSubtitle": "API 키 및 액세스 관리", "embeddedServices": "내장 서비스", "embeddedServicesSubtitle": "로컬 프록시 서비스 관리", "logs": "로그", "webhooks": "웹훅", "webhooksSubtitle": "이벤트 알림 받기", - "combosSubtitle": "장애 조치를 위한 그룹 공급자", + "combosSubtitle": "장애 조치를 위해 공급자를 그룹화", "batchSubtitle": "여러 요청 처리", - "contextCavemanSubtitle": "신속한 압축", + "contextCavemanSubtitle": "프롬프트 압축", "contextRtkSubtitle": "출력 필터링", "auditLog": "감사 로그", "shutdown": "종료", @@ -1094,7 +1094,7 @@ "logsActivity": "Activity", "auditMcp": "MCP Audit", "auditA2a": "A2A 감사", - "settingsGeneral": "General", + "settingsGeneral": "저장소", "settingsAppearance": "Appearance", "settingsAi": "AI Settings", "settingsSecurity": "Security", @@ -1175,7 +1175,7 @@ "mediaSubtitle": "Cached media files", "batchFilesSubtitle": "Batch input/output files", "settingsSubtitle": "All settings", - "settingsGeneralSubtitle": "App basics", + "settingsGeneralSubtitle": "데이터베이스 및 백업", "settingsAppearanceSubtitle": "Theme and layout", "settingsAiSubtitle": "AI behavior defaults", "globalRoutingSubtitle": "Global routing rules", @@ -1229,7 +1229,7 @@ "addWebhook": "웹훅 추가", "editWebhook": "웹훅 편집", "name": "이름", - "namePlaceholder": "생산 모니터링", + "namePlaceholder": "프로덕션 모니터링", "unnamedWebhook": "이름이 지정되지 않은 웹훅", "url": "엔드포인트 URL", "events": "이벤트", @@ -1248,7 +1248,7 @@ "enabledDesc": "비활성화된 웹후크는 저장된 상태로 유지되지만 전달을 받지 않습니다.", "refresh": "새로고침", "loading": "웹훅 로드 중...", - "never": "절대로", + "never": "없음", "failureCount": "{count, plural, =0 {no failures} one {# failure} other {# failures}}", "testWebhook": "테스트 보내기", "testSuccess": "테스트 웹훅이 성공적으로 전송되었습니다.", @@ -1374,10 +1374,10 @@ "result": "결과", "details": "세부정보", "timestamp": "타임스탬프", - "from": "에서", - "to": "받는 사람", + "from": "시작", + "to": "종료", "refresh": "새로고침", - "export": "수출", + "export": "내보내기", "clearFilters": "필터 지우기", "loading": "감사 이벤트 로드 중...", "showing": "{total} 이벤트 중 {count} 표시 중", @@ -1410,15 +1410,15 @@ "a2aSkill": "스킬", "a2aSkillPlaceholder": "스킬 이름으로 필터링", "a2aState": "상태", - "a2aAllStates": "모든 주", + "a2aAllStates": "모든 상태", "a2aStateSubmitted": "제출됨", - "a2aStateWorking": "일 중", + "a2aStateWorking": "작업 중", "a2aStateCompleted": "완료됨", "a2aStateFailed": "실패", "a2aStateCancelled": "취소됨", "a2aTaskId": "작업 ID", "a2aEvents": "이벤트", - "a2aArtifacts": "유물", + "a2aArtifacts": "아티팩트", "a2aNoTasks": "기록된 A2A 작업이 없습니다.", "a2aLoadingTasks": "A2A 작업 로드 중...", "actor": "행위자", @@ -1500,7 +1500,7 @@ "settings": "설정", "settingsDescription": "환경설정 관리", "openaiCompatible": "OpenAI 호환", - "anthropicCompatible": "인류 친화적", + "anthropicCompatible": "Anthropic 호환", "media": "Media", "mediaDescription": "Generate images, videos, and music", "themes": "Themes", @@ -1548,7 +1548,7 @@ "settingsAiDescription": "AI behaviors, thinking budgets, vision, and memory settings", "settingsSecurityDescription": "Authentication, authorization, and access control settings", "featureFlags": "기능 플래그", - "featureFlagsDescription": "제어 시스템 기능 및 실험적 특징", + "featureFlagsDescription": "시스템 기능과 실험적 기능을 제어합니다", "featureFlagsActive": "{count} 활성", "featureFlagsInactive": "{count} 비활성", "featureFlagsOverrides": "{count} DB 재정의", @@ -1559,10 +1559,10 @@ "featureFlagsCategoryPolicies": "정책", "featureFlagsCategoryRuntime": "런타임", "featureFlagsCategoryCli": "CLI", - "featureFlagsCategoryHealth": "건강", + "featureFlagsCategoryHealth": "상태", "featureFlagsSourceDb": "DB", - "featureFlagsSourceEnv": "환경", - "featureFlagsSourceDefault": "데프", + "featureFlagsSourceEnv": "ENV", + "featureFlagsSourceDefault": "DEF", "featureFlagsReset": "재설정", "featureFlagsResetAll": "모든 재정의 재설정", "featureFlagsResetAllConfirm": "모든 기능 플래그 재정의를 재설정하시겠습니까? 그러면 모든 플래그가 ENV 또는 기본값으로 되돌아갑니다.", @@ -1684,15 +1684,15 @@ "quickStartDesc": "4단계로 시작해 보세요. 공급자를 연결하고, 모델을 라우팅하고, 모든 것을 모니터링하세요.", "fullDocs": "전체 문서", "step1Title": "1. API 키 생성", - "step1Desc": "Endpoint -> 등록된 키로 이동합니다. 환경당 하나의 키를 생성합니다.", + "step1Desc": "API 키로 이동하세요. 환경당 하나의 키를 생성합니다.", "step2Title": "2. 공급자 연결", "step2Desc": "Providers에 계정을 추가하세요. OAuth, API 키 및 무료 등급을 지원합니다.", - "step3Title": "3. 고객에게 지시하십시오", + "step3Title": "3. 클라이언트 연결", "step3Desc": "IDE 또는 API 클라이언트에서 기본 URL을 {url}으로 설정하세요.", "step4Title": "4. 모니터링 및 최적화", "step4Desc": "요청 로그Analytics에서 토큰, 비용 및 오류를 추적합니다.", "providersOverview": "공급자 개요", - "configuredOf": "{configured}은(는) {total} 사용 가능한 공급자로 구성되었습니다.", + "configuredOf": "사용 가능한 공급자 {total}개 중 {configured}개 구성됨", "noModelsAvailable": "이 제공업체에 사용할 수 있는 모델이 없습니다.", "noProvidersConfigured": "아직 구성된 제공업체가 없습니다.", "addProvider": "제공업체 추가", @@ -1704,7 +1704,7 @@ "connectionsActivePlural": "{count} 연결이 활성화되었습니다.", "copyModelName": "모델명 복사", "documentation": "문서", - "healthMonitor": "건강 모니터", + "healthMonitor": "상태 모니터", "reportIssue": "문제 신고", "activeError": "{active} 활성 · {errors} 오류", "oauthLabel": "OAuth", @@ -1831,7 +1831,7 @@ "compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats.", "autoRoutingTotalAutoRequests": "총 자동 요청", "autoRoutingAvgSelectionScore": "평균 선택 점수", - "autoRoutingExplorationRate": "탐사율", + "autoRoutingExplorationRate": "탐색률", "autoRoutingLkgpHitRate": "LKGP 적중률", "autoRoutingRequestsByVariant": "변형별 요청", "autoRoutingTopRoutedProviders": "상위 라우팅 제공업체", @@ -1847,8 +1847,8 @@ "comboHealthSuccess": "성공", "comboHealthLatency": "대기 시간", "comboHealthQuota": "할당량", - "comboHealthTitle": "콤보 건강", - "comboHealthUnableToLoad": "콤보 체력을 로드할 수 없습니다", + "comboHealthTitle": "콤보 상태", + "comboHealthUnableToLoad": "콤보 상태를 로드할 수 없습니다", "comboHealthGettingStarted": "시작하기", "comboHealthForecastTitle": "비용 및 할당량 예측", "comboHealthForecastDescription": "과거 콤보 트래픽 및 할당량 스냅샷을 기반으로 한 선형 예측입니다.", @@ -1928,7 +1928,7 @@ "comboHealthStepAutomatic": "요청이 라우팅되면 상태 메트릭이 자동으로 표시됩니다", "comboHealthTracking": "{range} 동안 {count}개 조합 추적 중", "compressionAnalyticsTotalRequests": "총 요청", - "compressionAnalyticsTokensSaved": "저장된 토큰", + "compressionAnalyticsTokensSaved": "절약된 토큰", "compressionAnalyticsAvgSavings": "평균 절감액", "compressionAnalyticsAvgDuration": "평균 기간", "compressionAnalyticsReceipts": "영수증", @@ -2046,7 +2046,7 @@ "apiManager": { "title": "API 키", "createKey": "API 키 생성", - "key": "열쇠", + "key": "키", "revokeKey": "키 취소", "revokeConfirm": "이 API 키를 취소하시겠습니까?", "noKeys": "아직 API 키가 없습니다.", @@ -2054,7 +2054,7 @@ "keyLabel": "키 라벨", "permissions": "권한", "expiresAt": "만료", - "never": "절대로", + "never": "없음", "revoke": "취소", "showKey": "키 표시", "hideKey": "키 숨기기", @@ -2075,10 +2075,10 @@ "keysSecurityNote": "각 키는 사용 추적을 분리하고 독립적으로 취소할 수 있습니다. 보안을 위해 키는 생성 후 마스크 처리됩니다.", "createFirstKey": "첫 번째 키 만들기", "name": "이름", - "usage": "사용법", + "usage": "사용량", "created": "생성됨", "actions": "작업", - "reqs": "요구 사항", + "reqs": "요청", "neverUsed": "한번도 사용하지 않음", "deleteConfirm": "이 API 키를 삭제하시겠습니까?", "usageTips": "사용 팁", @@ -2087,7 +2087,7 @@ "tipSeparate": "다양한 클라이언트 또는 환경에 대해 별도의 키 생성", "tipRestrict": "더 나은 보안 및 비용 관리를 위해 키를 특정 모델로 제한합니다.", "keyName": "키 이름", - "keyNamePlaceholder": "예: 생산 키, 개발 키", + "keyNamePlaceholder": "예: 프로덕션 키", "keyNameDesc": "이 키의 목적을 식별하려면 설명이 포함된 이름을 선택하세요.", "managementAccessDesc": "이 API 키가 OmniRoute 구성을 관리하도록 허용합니다.", "selfServiceVisibility": "셀프서비스 표시 권한", @@ -2103,7 +2103,7 @@ "keyCreatedSuccess": "키가 생성되었습니다!", "keyCreatedNote": "지금 이 키를 복사하여 저장하세요. 다시 표시되지 않습니다.", "done": "완료", - "savePermissions": "저장 권한", + "savePermissions": "권한 저장", "endpointRestrictions": "Allowed Endpoints", "allEndpointsAllowed": "This key can access all API endpoints.", "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}.", @@ -2133,7 +2133,7 @@ "dayFri": "Fri", "daySat": "Sat", "allowAll": "모두 허용", - "restrict": "제한하다", + "restrict": "제한", "allowAllInfo": "이 키는 사용 가능한 모든 모델에 액세스할 수 있습니다.", "restrictInfo": "이 키는 {total} 모델 중 {selected}에 액세스할 수 있습니다.", "selected": "{count} 선택됨", @@ -2185,13 +2185,13 @@ "allowedCombos": "허용된 조합", "allCombosAllowed": "이 키는 모든 조합을 사용할 수 있습니다.", "restrictedComboCount": "{count, plural, one {#개 조합} other {#개 조합}}으로 제한됨.", - "apiManagerCustomRateLimits": "사용자 정의 비율 제한", + "apiManagerCustomRateLimits": "사용자 정의 속도 제한", "apiManagerCustomRateLimitsDesc": "전역 기본 제한을 재정의합니다. 기본값을 사용하려면 비워 두세요.", "apiManagerRateLimitRequestsPlaceholder": "요청사항", "apiManagerRateLimitReqPer": "요청 /", "apiManagerRateLimitSecondsPlaceholder": "초", "apiManagerRemoveLimitTitle": "한도 삭제", - "apiManagerTimezonePlaceholder": "아메리카/상파울루", + "apiManagerTimezonePlaceholder": "America/Sao_Paulo", "noLogPayloadPrivacy": "로그 없는 페이로드 개인정보 보호", "bannedStatus": "금지 상태", "managementApiAccess": "관리 API 액세스", @@ -2224,18 +2224,18 @@ }, "auditLog": { "title": "감사 로그", - "searchPlaceholder": "검색 작업...", + "searchPlaceholder": "작업 검색...", "action": "액션", - "actor": "배우", + "actor": "행위자", "target": "대상", "ipAddress": "IP 주소", "timestamp": "타임스탬프", "noEntries": "감사 항목을 찾을 수 없습니다.", "filterByAction": "작업별로 필터링...", - "filterByActor": "배우별로 필터링...", + "filterByActor": "행위자별로 필터링...", "filterEntriesAria": "감사 로그 항목 필터링", "filterByActionTypeAria": "작업 유형별로 필터링", - "filterByActorAria": "배우별로 필터링", + "filterByActorAria": "행위자별로 필터링", "refreshAuditLogAria": "감사 로그 새로 고침", "tableAria": "감사 로그 항목", "failedFetchAuditLog": "감사 로그를 가져오지 못했습니다.", @@ -2424,7 +2424,7 @@ "scrapeProvider": "Provider", "scrapeSize": "Size", "scrapeEmptyState": "콘텐츠를 추출할 URL을 입력하세요", - "scrapeProvidersAvailable": "사용 가능한 제공자: Firecrawl, Jina Reader, Tavily.", + "scrapeProvidersAvailable": "사용 가능한 공급자: Firecrawl, Jina Reader, Tavily, TinyFish.", "compareRun": "Compare", "compareRunning": "Comparing…", "autoProvider": "Auto (cheapest)", @@ -2509,7 +2509,7 @@ "claudeProfilesDescription": "모델 검색 후 각 ~/.claude/profiles/…/settings.json을 재생성합니다.", "noActiveProviders": "활성 제공업체 없음", "noActiveProvidersDesc": "CLI 도구를 구성하려면 먼저 공급자를 추가하고 연결하세요.", - "mapModels": "지도 모델", + "mapModels": "모델 매핑", "testConnection": "연결 테스트", "connectionStatus": "연결 상태", "configureEndpoint": "끝점 구성", @@ -2535,7 +2535,7 @@ "custom": "맞춤", "unknown": "알 수 없음", "lastSavedAt": "마지막 저장: {date}", - "never": "절대로", + "never": "없음", "justNow": "지금 막", "minutesAgoShort": "{count}분 전", "hoursAgoShort": "{count}시간 전", @@ -2543,8 +2543,8 @@ "monthsAgoShort": "{count}개월 전", "yearsAgoShort": "{count}년 전", "runtimeCheckFailed": "런타임 확인 실패", - "yourApiKeyPlaceholder": "귀하의 API 키", - "modelPlaceholder": "공급자/모델 ID", + "yourApiKeyPlaceholder": "your-api-key", + "modelPlaceholder": "provider/model-id", "configurationSaved": "구성이 성공적으로 저장되었습니다.", "failedToSave": "구성을 저장하지 못했습니다.", "noApiKeysCreateOne": "API 키 없음 - 키 페이지에서 키 만들기", @@ -2597,7 +2597,7 @@ "antigravityStep1": "1. MITM을 시작하여 OmniRoute를 통해 요청을 라우팅합니다.", "antigravityStep2Prefix": "2. 추가", "antigravityStep2Suffix": "호스트 파일에 127.0.0.1로 저장하세요.", - "antigravityStep3": "3. 반중력을 공개하면 요청이 프록시됩니다.", + "antigravityStep3": "3. Antigravity를 열면 요청이 프록시됩니다.", "mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.", "mitmStep1": "1. Start MITM to route requests through OmniRoute.", "mitmStep2Prefix": "2. Add", @@ -2632,7 +2632,7 @@ "current": "현재", "baseUrlPlaceholder": "https://.../v1", "resetToDefault": "기본값으로 재설정", - "providerModelPlaceholder": "공급자/모델 ID", + "providerModelPlaceholder": "provider/model-id", "apply": "적용", "reset": "재설정", "manualConfig": "수동 구성", @@ -2666,15 +2666,15 @@ "deleteProfile": "프로필 삭제", "profileNamePlaceholder": "프로필 이름(예: 개인 계정)", "saveCurrent": "현재 저장", - "codexAuthNotePrefix": "코덱스 사용", + "codexAuthNotePrefix": "Codex는 다음을 사용합니다:", "codexAuthNoteMiddle": "와", "codexAuthNoteSuffix": "자동 구성하려면 \"적용\"을 클릭하세요.", "claudeManualConfiguration": "Claude CLI - 수동 구성", "codexManualConfiguration": "Codex CLI - 수동 구성", "droidManualConfiguration": "Factory Droid - 수동 구성", - "openClawManualConfiguration": "오픈 클로 - 수동 구성", - "clineManualConfiguration": "클라인 수동 구성", - "kiloManualConfiguration": "Kilo 코드 수동 구성", + "openClawManualConfiguration": "Open Claw - 수동 구성", + "clineManualConfiguration": "Cline 수동 구성", + "kiloManualConfiguration": "Kilo Code 수동 구성", "whenToUseLabel": "언제 사용하나요?", "openToolDocs": "도구 문서 열기", "toolUseCases": { @@ -2684,36 +2684,36 @@ "openclaw": "Open Claw 스타일 코딩 에이전트를 원하지만 OmniRoute 정책을 통해 라우팅되는 경우에 사용합니다.", "cline": "편집기 내에서 코딩 에이전트를 구성하고 OmniRoute 모델을 사용하여 안내 설정을 원하는 경우 사용합니다.", "kilo": "작업 흐름이 Kilo Code 명령과 빠른 반복 편집에 의존하는 경우에 사용하세요.", - "cursor": "Cursor에서 코딩할 때 사용하고 OmniRoute를 통해 사용자 정의 OpenAI 호환 모델이 필요합니다.", - "continue": "IDE에서 계속을 실행할 때 사용하고 이식 가능한 JSON 기반 공급자 구성이 필요합니다.", + "cursor": "Cursor에서 코딩하면서 OmniRoute를 통해 사용자 정의 OpenAI 호환 모델이 필요할 때 사용하세요.", + "continue": "IDE에서 Continue를 실행하면서 이식 가능한 JSON 기반 공급자 구성이 필요할 때 사용하세요.", "opencode": "OpenCode를 통해 터미널 기반 에이전트 실행 및 스크립트 자동화를 선호할 때 사용하세요.", "kiro": "Kiro를 통합하고 OmniRoute에서 중앙에서 모델 라우팅을 제어할 때 사용합니다.", "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute.", "antigravity": "Antigravity/Kiro 트래픽이 MITM을 통해 가로채어 OmniRoute로 라우팅되어야 하는 경우에 사용합니다.", "copilot": "OmniRoute 키와 라우팅 규칙을 적용하면서 Copilot 채팅 스타일 UX를 원할 때 사용하세요.", - "amp": "Use when you want Amp CLI routed through OmniRoute with stable shorthand aliases and OpenAI-compatible setup.", + "amp": "Amp 단축 워크플로를 원하면서도 OmniRoute 별칭 및 라우팅 규칙 적용이 필요할 때 사용하세요.", "hermes": "빠른 작업을 위해 경량 터미널 기반 AI 도우미가 필요할 때 사용하세요.", "hermes-agent": "OmniRoute를 통해 라우팅되는 기본, 위임, 비전 및 보조 모델과 함께 Hermes Agent(Nousresearch 제공)를 사용해야 할 때 사용합니다.", "custom": "사용자 정의 도구 구현 또는 일반 OpenAI 호환 구성에 사용합니다." }, "toolDescriptions": { - "antigravity": "MITM이 포함된 Google 반중력 IDE", - "claude": "인류 클로드 코드 CLI", - "codex": "OpenAI 코덱스 CLI", + "antigravity": "MITM이 포함된 Google Antigravity IDE", + "claude": "Anthropic Claude Code CLI", + "codex": "OpenAI Codex CLI", "grok-build": "사용자 정의 제공자 지원 기능이 포함된 xAI Grok Build TUI 코딩 에이전트", - "droid": "팩토리 드로이드 AI 어시스턴트", - "openclaw": "Claw AI 도우미 열기", + "droid": "Factory Droid AI 어시스턴트", + "openclaw": "Open Claw AI 어시스턴트", "cline": "Cline AI 코딩 어시스턴트 CLI", - "kilo": "킬로코드 AI 어시스턴트 CLI", + "kilo": "Kilo Code AI 어시스턴트 CLI", "qwen": "Qwen Code CLI", - "cursor": "커서 AI 코드 편집기", - "continue": "AI 어시스턴트 계속하기", + "cursor": "Cursor AI 코드 편집기", + "continue": "Continue AI 어시스턴트", "opencode": "OpenCode AI coding agent (Terminal)", "kiro": "Amazon Kiro — AI-powered IDE", "windsurf": "Windsurf AI Code Editor", "copilot": "GitHub Copilot AI Assistant", "amp": "Sourcegraph Amp coding assistant CLI", - "hermes": "헤르메스 AI 터미널 어시스턴트", + "hermes": "Hermes AI 터미널 어시스턴트", "hermes-agent": "Hermes Agent(Nousresearch 제공) - 다중 모델 지원(위임, 비전, 압축 등)을 갖춘 고급 터미널 AI", "custom": "일반 OpenAI 호환 CLI 또는 SDK 구성 생성기", "aider": "OpenAI 호환 베이스 URL을 사용하는 Aider AI 페어 프로그래밍 CLI", @@ -2767,7 +2767,7 @@ "steps": { "1": { "title": "구성 열기", - "desc": "계속 구성 파일 열기" + "desc": "Continue 구성 파일 열기" }, "2": { "title": "API 키" @@ -2856,11 +2856,11 @@ } } }, - "autoConfiguredTab": "Auto Configured Tab", - "toolCategoriesDesc": "Tool Categories Desc", - "allToolsTab": "All Tools Tab", - "guidedClientsTab": "Guided Clients Tab", - "mitmClientsTab": "Mitm Clients Tab", + "autoConfiguredTab": "자동 구성됨", + "toolCategoriesDesc": "AI 코딩 어시스턴트가 OmniRoute를 통해 라우팅되도록 구성합니다", + "allToolsTab": "모든 도구", + "guidedClientsTab": "가이드 클라이언트", + "mitmClientsTab": "MITM 클라이언트", "customCliTab": "맞춤형 CLI", "toolCategories": "Tool Categories", "visibleToolsCount": "{count}개의 도구 사용 가능", @@ -2940,7 +2940,7 @@ "description": "가중치 기반 라우팅 및 폴백 지원을 통해 모델 콤보 생성", "autoCatalogTitle": "자동 라우팅 카탈로그", "autoCatalogTemplateCount": "{count} 템플릿", - "autoCatalogDescription": "내장된 자동/* 콤보는 연결된 공급자로부터 동적으로 해결됩니다. 이러한 ID 중 하나를 모델 필드로 사용하세요. 설정이 필요하지 않습니다.", + "autoCatalogDescription": "내장된 auto/* 콤보는 연결된 공급자로부터 동적으로 확인됩니다. 이러한 ID 중 하나를 모델 필드로 사용하세요 — 설정이 필요하지 않습니다.", "autoCatalogExpand": "자동 라우팅 카탈로그 확장", "autoCatalogCollapse": "자동 라우팅 카탈로그 축소", "createCombo": "콤보 생성", @@ -2953,14 +2953,14 @@ "routingStrategy": "라우팅 전략", "maxRetries": "최대 재시도 횟수", "timeout": "시간 초과(밀리초)", - "healthcheck": "건강검진", + "healthcheck": "헬스체크", "priority": "우선순위", "fallback": "대체", "roundRobin": "라운드 로빈", "random": "무작위", "leastLatency": "최소 지연 시간", "comboName": "콤보 이름", - "comboNamePlaceholder": "내 콤보", + "comboNamePlaceholder": "my-combo", "comboDescription": "설명", "comboDescriptionPlaceholder": "이 조합에 대한 설명 (선택 사항)", "deleteConfirm": "이 콤보를 삭제하시겠습니까?", @@ -2976,22 +2976,22 @@ "testFailed": "테스트 요청 실패", "failedToggle": "콤보를 전환하지 못했습니다.", "testResults": "테스트 결과 — {name}", - "resolvedBy": "해결 방법:", + "resolvedBy": "다음으로 해결됨:", "more": "+{count} 더보기", - "reqs": "요구 사항", + "reqs": "요청", "success": "성공", "proxyConfigured": "프록시가 구성됨", "copyComboName": "콤보 이름 복사", "enableCombo": "콤보 활성화", "disableCombo": "콤보 비활성화", - "testCombo": "테스트 콤보", - "duplicate": "중복", + "testCombo": "콤보 테스트", + "duplicate": "복제", "proxyConfig": "프록시 구성", "nameRequired": "이름은 필수입니다", - "nameInvalid": "문자, 숫자, -, _, / 및 .만 가능합니다. 허용됨", + "nameInvalid": "문자, 숫자, -, _, /, .만 허용됩니다", "nameHint": "문자, 숫자, -, _, / 및 . 허용됨", "priorityDesc": "순차적 폴백: 모델 1을 먼저 시도한 다음 2 등을 시도합니다.", - "weightedDesc": "대체 기능을 사용하여 중량 비율로 트래픽을 분산합니다.", + "weightedDesc": "폴백을 지원하며 가중치 비율로 트래픽을 분산합니다.", "roundRobinDesc": "순환 배포: 각 요청은 교대로 다음 모델로 이동합니다.", "contextRelay": "Context Relay", "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate", @@ -3087,7 +3087,7 @@ }, "weighted": { "when": "모델 간에 제어된 트래픽 분할이 필요합니다.", - "avoid": "시간이 지나도 정확한 체중을 유지할 수 없습니다.", + "avoid": "시간이 지나면서 정확한 가중치를 유지할 수 없는 경우입니다.", "example": "80% 안정적인 모델 + 20% 카나리아 모델 출시." }, "round-robin": { @@ -3133,7 +3133,7 @@ "fill-first": { "when": "다음 공급자로 이동하기 전에 한 공급자의 할당량을 완전히 소진하려는 경우에 사용합니다.", "avoid": "공급자 간 요청 수준 로드 밸런싱이 필요한 경우에는 피하세요.", - "example": "예: Groq로 돌아가기 전에 $200 Deepgram 크레딧을 모두 사용하세요." + "example": "예: Groq로 폴백하기 전에 $200 Deepgram 크레딧을 모두 사용합니다." }, "auto": { "when": "비용, 대기 시간, 품질을 기준으로 다단계 채점 라우팅이 필요한 경우에 사용하세요.", @@ -3309,8 +3309,8 @@ "title": "재설정 인식 계정 순환", "description": "재설정 시기와 남은 공급자 할당량의 균형을 맞춥니다.", "tip1": "할당량 원격 분석을 사용하는 공급자에 대해 명시적인 계정 단계 또는 계정 태그 라우팅을 사용합니다.", - "tip2": "단기적인 피로가 더 위험한 경우 세션과 주간 가중치를 조정하세요.", - "tip3": "동등한 계정이 여전히 공평하게 순환되도록 연결 범위를 작게 유지하십시오." + "tip2": "단기 할당량 소진이 더 위험한 경우 세션 가중치와 주간 가중치를 조정하세요.", + "tip3": "동등한 계정이 계속 공평하게 순환되도록 동점 허용 범위(tie band)를 작게 유지하세요." }, "strict-random": { "title": "Shuffle deck distribution", @@ -3320,7 +3320,7 @@ "tip3": "Ideal for load balancing across multiple API accounts." }, "fill-first": { - "description": "후퇴하기 전에 공급업체 할당량을 순차적으로 소진합니다.", + "description": "폴백하기 전에 공급자 할당량을 순차적으로 소진합니다.", "tip1": "명확한 대체 체인이 있는 할당량 기반 라우팅에 사용합니다.", "tip2": "조기 대체를 방지하려면 할당량을 정확하게 설정하세요.", "tip3": "무료 등급 또는 크레딧 버킷을 제공하는 제공업체와 가장 잘 작동합니다.", @@ -3359,7 +3359,7 @@ "tip1": "정확한 부하 평가를 위해 공급자 상태 지표를 모니터링합니다.", "tip2": "동질적인 공급자 풀에서 가장 잘 작동합니다.", "tip3": "트래픽 급증 시 진동을 방지하려면 감도를 조정하세요.", - "title": "두 가지 선택의 힘" + "title": "Power of Two Choices (P2C)" } }, "templateFreeStack": "Free Stack ($0)", @@ -3377,7 +3377,7 @@ "wizardStep2Title": "Add Models", "wizardStep2Desc": "Select AI models and arrange their fallback priority order", "wizardStep3Title": "Choose Strategy", - "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", + "wizardStep3Desc": "모델 전반에 요청이 분산되는 방식을 선택하세요 - 14가지 전략 사용 가능", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", "emailVisibilityStateOn": "On", @@ -3457,7 +3457,7 @@ "modePackCustom": "맞춤", "browseLegacyCatalog": "레거시 콤보 카탈로그 찾아보기", "agentFeaturesTitle": "에이전트 기능", - "agentFeaturesDescription": "이 콤보를 사용하여 상담원의 고급 기능을 활성화하세요.", + "agentFeaturesDescription": "이 콤보를 사용하는 에이전트를 위한 고급 기능을 활성화합니다.", "responseValidationTitle": "응답 검증", "responseValidationHelp": "200 OK 본문이 이 검사(어시스턴트 콘텐츠)에 실패하면 다음 대상으로 페일오버합니다.", "responseValidationForbidden": "금지된 하위 문자열 (한 줄에 하나씩)", @@ -3465,9 +3465,9 @@ "responseValidationMinLength": "최소 콘텐츠 길이 (자수)", "responseValidationJsonPaths": "JSON-path 검사", "responseValidationAddCheck": "+ 검사 추가", - "agentFeaturesSystemMessageOverride": "시스템 메시지 무시", + "agentFeaturesSystemMessageOverride": "시스템 메시지 재정의", "agentFeaturesSystemMessagePlaceholder": "당신은 전문 조수입니다 ...", - "agentFeaturesSystemMessageHint": "상담원에 대한 시스템 메시지 재정의", + "agentFeaturesSystemMessageHint": "에이전트에 대한 시스템 메시지 재정의", "agentFeaturesToolFilterRegex": "/정규식 패턴/", "agentFeaturesToolFilterHint": "에이전트에 대한 도구 필터 정규식", "agentFeaturesContextCacheHint": "에이전트 도구에 대한 컨텍스트 내 캐시 활성화", @@ -3508,17 +3508,17 @@ "activeModels": "Active Models", "selectedWindow": "Selected Window", "activeProviders": "Active Providers", - "overviewTitle": "Overview Title", + "overviewTitle": "비용 개요", "spend7d": "Spend7D", "avgCostPerRequest": "Avg Cost Per Request", - "noCostDataDescription": "No Cost Data Description", + "noCostDataDescription": "요청을 시작하면 여기에 비용 데이터가 표시됩니다. 모든 공급자의 비용이 자동으로 추적됩니다.", "spendToday": "Spend Today", - "overviewLoadFailed": "Overview Load Failed", - "overviewDescription": "Overview Description", + "overviewLoadFailed": "비용 개요를 로드하지 못했습니다", + "overviewDescription": "연결된 모든 공급자 및 모델에 대한 실시간 지출 분석", "providerShare": "Provider Share", "topProviders": "Top Providers", "costTrend": "Cost Trend", - "noCostDataTitle": "No Cost Data Title", + "noCostDataTitle": "아직 비용 데이터가 없습니다", "topModels": "Top Models", "requestsInWindow": "Requests In Window", "tokenUsage": "토큰 사용", @@ -3537,20 +3537,20 @@ "costByAccount": "계정별 비용", "apiKeyName": "API 키", "account": "계정", - "requests": "요청사항", + "requests": "요청", "cost": "비용", - "dayStreak": "하루 연속", + "dayStreak": "일 연속", "weeklyUsagePattern": "주간 사용 패턴", "activityHeatmap": "활동(365일)", - "less": "덜", - "more": "더보기", + "less": "적음", + "more": "많음", "monthlyForecast": "월별 예측", "forecastBasis": "지난 {days}일 기준", "avgDailyCost": "평균 일일 비용", "daysRemaining": "{days}일 남음", "periodComparison": "기간 비교", - "previousPeriod": "전반전", - "currentPeriod": "현재 절반", + "previousPeriod": "이전 절반 기간", + "currentPeriod": "현재 절반 기간", "exportCSV": "CSV로 내보내기", "exportJSON": "JSON으로 내보내기", "legacyFreeLabel": "레거시 / 무료", @@ -3587,7 +3587,7 @@ "baseUrl": "기본 URL", "apiKeyLabel": "API 키", "registeredKeys": "등록된 키", - "chatCompletions": "채팅 완료", + "chatCompletions": "Chat Completions", "responses": "응답", "listModels": "모델 나열", "usingCloudProxy": "클라우드 프록시 사용", @@ -3605,13 +3605,13 @@ "rerank": "순위 재지정", "rerankDesc": "쿼리 관련성에 따라 문서의 순위를 다시 매깁니다.", "audioTranscription": "오디오 전사", - "audioTranscriptionDesc": "오디오 파일을 텍스트로 변환(속삭임)", + "audioTranscriptionDesc": "오디오 파일을 텍스트로 변환 (Whisper)", "textToSpeech": "텍스트 음성 변환", "textToSpeechDesc": "텍스트를 자연스러운 음성으로 변환", "musicGeneration": "Music Generation", "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)", - "moderations": "조정", - "moderationsDesc": "콘텐츠 조정 및 안전 분류", + "moderations": "모더레이션", + "moderationsDesc": "콘텐츠 모더레이션 및 안전 분류", "responsesDesc": "Codex 및 고급 에이전트 워크플로용 OpenAI Responses API", "listModelsDesc": "연결된 모든 공급자의 사용 가능한 모든 모델 나열", "settingsApiDesc": "API를 통해 OmniRoute 구성 읽기 및 수정", @@ -3625,7 +3625,7 @@ "searchProvider": "Search Provider", "searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.", "enableCloudTitle": "클라우드 프록시 활성화", - "whatYouGet": "당신이 얻을 것입니다", + "whatYouGet": "얻게 되는 것", "cloudBenefitAccess": "전 세계 어디에서나 API에 액세스하세요", "cloudBenefitShare": "팀과 쉽게 엔드포인트 공유", "cloudBenefitPorts": "포트를 열거나 방화벽을 구성할 필요가 없습니다.", @@ -3680,11 +3680,11 @@ "chat": "채팅", "embedding": "임베딩", "image": "이미지", - "custom": "관습", + "custom": "사용자 정의", "modelsCount": "{count, plural, one {# model} other {# models}}", "sectionTitle": "Integration Surface", "sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints", - "tabApis": "OpenAI-compatible APIs", + "tabApis": "API", "tabProtocols": "Protocols", "tabsAria": "Endpoint sections", "protocolsTitle": "Protocols", @@ -3753,9 +3753,9 @@ "tailscaleSudoPlaceholder": "Optional sudo password", "tailscaleInstalling": "Installing", "tailscaleSudoLabel": "Sudo 비밀번호(macOS/Linux에 필요)", - "ngrokTitle": "응록 터널", - "ngrokRunning": "달리기", - "ngrokStarting": "시작", + "ngrokTitle": "ngrok 터널", + "ngrokRunning": "실행 중", + "ngrokStarting": "시작 중", "ngrokStoppedState": "중지됨", "ngrokNeedsAuth": "인증 필요", "ngrokNotInstalled": "설치되지 않음", @@ -3768,8 +3768,8 @@ "ngrokAuthTokenPlaceholder": "ngrok 인증 토큰을 입력하세요", "ngrokLastError": "마지막 오류: {error}", "ngrokStarted": "ngrok 터널이 시작되었습니다", - "ngrokStopped": "Ngrok 터널이 중지되었습니다.", - "ngrokRequestFailed": "ngrok 터널을 업데이트하지 못했습니다.", + "ngrokStopped": "ngrok 터널이 중지되었습니다", + "ngrokRequestFailed": "ngrok 터널을 업데이트하지 못했습니다", "apiEndpointsCatalogUnavailable": "API 카탈로그를 사용할 수 없습니다.", "apiEndpointsSearchPlaceholder": "엔드포인트 검색...", "apiEndpointsRequiresAuth": "인증이 필요합니다", @@ -3828,7 +3828,7 @@ "vscodeAliasModelsLabel": "VS Code 모델", "vscodeAliasChatLabel": "VS Code 채팅", "localServer": "로컬 서버", - "cloudOmniroute": "클라우드 옴니루트", + "cloudOmniroute": "클라우드 OmniRoute", "copyUrl": "URL 복사", "badgeLoopbackTooltip": "이 엔드포인트는 로컬에서만 액세스할 수 있습니다 (루프백 전용)", "badgeAlwaysProtectedTooltip": "이 엔드포인트는 항상 보호되며 인증이 필요합니다", @@ -4015,29 +4015,29 @@ "allSkills": "all skills", "loadingTasks": "Loading tasks...", "noTasksForFilters": "현재 필터에 대한 작업을 찾을 수 없습니다.", - "tableTask": "일", + "tableTask": "작업", "tableSkill": "Skill", "tableState": "State", "tableUpdated": "Updated", - "tableActions": "행위", - "view": "보다", + "tableActions": "동작", + "view": "보기", "cancel": "Cancel", "previous": "Previous", "next": "Next", "taskDetail": "작업 세부정보", - "close": "닫다", + "close": "닫기", "metadata": "메타데이터", "events": "이벤트", - "artifacts": "유물", + "artifacts": "아티팩트", "tablePhase": "Table Phase", "offset": "Offset", "limit": "Limit", "skill": "Skill", - "rpcEndpoint": "포스트 /a2a", - "rpcMethodSend": "메시지/보내기", - "rpcMethodStream": "메시지/스트림", - "rpcMethodGet": "작업/가져오기", - "rpcMethodCancel": "작업/취소", + "rpcEndpoint": "POST /a2a", + "rpcMethodSend": "message/send", + "rpcMethodStream": "message/stream", + "rpcMethodGet": "tasks/get", + "rpcMethodCancel": "tasks/cancel", "serviceLabel": "A2A", "online": "온라인", "offline": "오프라인", @@ -4056,7 +4056,7 @@ "addMemory": "Add Memory", "allTypes": "All Types", "cancel": "취소", - "checkHealth": "건강 확인", + "checkHealth": "상태 확인", "checkingHealth": "확인 중…", "compactOld": "오래된 데이터 압축", "concept": { @@ -4124,13 +4124,13 @@ "episodic": "Episodic", "export": "Export", "factual": "Factual", - "healthUnknown": "건강 상태를 알 수 없음", + "healthUnknown": "상태를 알 수 없음", "hitRate": "Hit Rate", "import": "Import", "importError": "파일을 가져오지 못했습니다", "importResult": "{imported}개 가져옴, {skipped}개 건너뜀", "key": "Key", - "keyPlaceholder": "예를 들어 사용자.기본 설정.테마", + "keyPlaceholder": "예: user.preferences.theme", "loading": "Loading memories...", "memories": "Memories", "next": "다음", @@ -4319,9 +4319,9 @@ "health": { "title": "시스템 상태", "description": "OmniRoute 인스턴스의 실시간 모니터링", - "healthy": "건강하다", + "healthy": "정상", "degraded": "저하됨", - "down": "아래로", + "down": "중단됨", "uptime": "가동 시간", "memory": "메모리", "memoryRss": "메모리(RSS)", @@ -4335,7 +4335,7 @@ "tokenHealth": "토큰 상태", "refreshAll": "모두 새로 고침", "checkNow": "지금 확인하세요", - "loadingHealth": "건강 데이터 로드 중...", + "loadingHealth": "상태 데이터 로드 중...", "failedToLoad": "상태 데이터를 로드하지 못했습니다: {error}", "retry": "재시도", "allOperational": "모든 시스템 작동", @@ -4352,17 +4352,17 @@ "promptCache": "프롬프트 캐시", "entries": "항목", "hitRate": "적중률", - "hitsMisses": "안타/실패", + "hitsMisses": "적중 / 미적중", "signatureCache": "서명 캐시", "signatureDefaults": "기본값", "signatureTool": "도구", - "signatureFamily": "가족", + "signatureFamily": "패밀리", "signatureSession": "세션", "recovering": "회복 중", "noCBData": "사용 가능한 회로 차단기 데이터가 없습니다. 먼저 몇 가지 요청을 해보세요.", "providerHealthStatusAria": "공급자 상태", "issuesLabel": "발견된 문제", - "operational": "운영", + "operational": "정상 작동", "providers": "공급자", "configuredProvidersLabel": "대시보드에 구성됨", "configuredProvidersHint": "런타임 상태에 관계없이 /dashboard/providers에 자격 증명이 저장된 공급자입니다.", @@ -4370,19 +4370,19 @@ "activeProvidersHint": "현재 요청 라우팅을 위해 활성화된 구성된 공급자입니다.", "monitoredProviders": "{count} monitored", "monitoredProvidersHint": "현재 회로 차단기 상태 모니터로 추적되는 공급자입니다.", - "healthyCount": "{count} 건강함", + "healthyCount": "{count}개 정상", "nodeVersion": "노드 {version}", "failures": "{count} 실패", "failuresPlural": "{count} 실패", "lastFailure": "마지막", - "rateLimitStatus": "비율 제한 상태", + "rateLimitStatus": "속도 제한 상태", "activeLimiters": "{count} 활성 제한기", "activeLimitersPlural": "{count} 활성 제한기", "queued": "대기 중", "queuedCount": "{count} 대기 중", - "running": "달리기", + "running": "실행 중", "runningCount": "{count} 실행 중", - "ok": "알았어", + "ok": "정상", "activeLockouts": "활성 잠금", "resetConfirm": "모든 회로 차단기를 정상 상태로 재설정하시겠습니까? 그러면 모든 실패 횟수가 지워지고 모든 공급자가 작동 상태로 복원됩니다.", "resetAllTitle": "모든 회로 차단기를 정상 상태로 재설정", @@ -4420,7 +4420,7 @@ "sessionsByApiKey": "API 키별 세션", "noActiveSessionsTracked": "아직 추적된 활성 세션이 없습니다.", "noSessionQuotaMonitorsActive": "활성 세션 할당량 모니터가 없습니다.", - "gracefulDegradationStatus": "우아한 저하 상태", + "gracefulDegradationStatus": "점진적 성능 저하 상태", "additionalModels": "+{count} 모델 더보기", "providerHealthMatrixTitle": "프로바이더 상태 매트릭스", "providerHealthMatrixDescription": "브레이커, 쿨다운, 잠금 및 로그의 프로바이더 × 계정 × 모델 상태입니다.", @@ -4475,7 +4475,7 @@ "enable": "MITM 프록시 활성화", "enableDesc": "로컬 차단 프로세스와 DNS 재정의를 시작하거나 중지합니다.", "status": "상태", - "running": "달리기", + "running": "실행 중", "stopped": "중지됨", "start": "시작", "stop": "중지", @@ -4499,7 +4499,7 @@ "missing": "누락", "downloadCert": "CA 인증서 다운로드", "regenerateCert": "인증서 재생성", - "regenerateConfirm": "이렇게 하면 기존 클라이언트 신뢰가 무효화됩니다. 계속하다?", + "regenerateConfirm": "이렇게 하면 기존 클라이언트 신뢰가 무효화됩니다. 계속하시겠습니까?", "regenerateSuccess": "MITM 인증서가 재생성되었습니다.", "regenerateFailed": "MITM 인증서를 재생성하지 못했습니다.", "targetRoutes": "대상 경로", @@ -4520,7 +4520,7 @@ }, "limits": { "title": "한도 및 할당량", - "rateLimit": "비율 제한", + "rateLimit": "속도 제한", "remaining": "남은", "requestsPerMinute": "요청/분", "tokensPerMinute": "토큰/분", @@ -4536,10 +4536,10 @@ "loading": "로드 중...", "refresh": "새로고침", "filterByAction": "작업별로 필터링...", - "filterByActor": "배우별로 필터링...", + "filterByActor": "행위자별로 필터링...", "filterEntriesAria": "감사 로그 항목 필터링", "filterByActionTypeAria": "작업 유형별로 필터링", - "filterByActorAria": "배우별로 필터링", + "filterByActorAria": "행위자별로 필터링", "refreshAuditLogAria": "감사 로그 새로 고침", "tableAria": "감사 로그 항목", "failedFetchAuditLog": "감사 로그를 가져오지 못했습니다.", @@ -4547,7 +4547,7 @@ "search": "검색", "timestamp": "타임스탬프", "action": "액션", - "actor": "배우", + "actor": "행위자", "target": "대상", "details": "세부정보", "ipAddress": "IP 주소", @@ -4555,12 +4555,12 @@ "noEntries": "감사 로그 항목이 없습니다.", "previous": "이전", "next": "다음", - "providerWarningTitle": "Provider Warning Title", + "providerWarningTitle": "공급자 경고", "viewDetails": "View Details", "eventMetadata": "Event Metadata", "eventPayload": "Event Payload", "requestId": "Request Id", - "providerWarningDesc": "Provider Warning Desc", + "providerWarningDesc": "요청 처리 중 일부 공급자가 경고를 반환했습니다", "a": "A", "offset": "Offset", "limit": "Limit", @@ -4568,7 +4568,7 @@ "resourceType": "Resource Type", "totalEntries": "Total Entries", "tab": "Tab", - "auditModalSubtitle": "Audit Modal Subtitle", + "auditModalSubtitle": "이벤트 세부정보 및 메타데이터", "close": "Close", "runningRequests": "Active Requests", "runningRequestsDesc": "Real-time view of currently running upstream requests", @@ -4833,14 +4833,14 @@ "understand": "이해했습니다, 계속하기", "cancel": "취소" }, - "disabled": "장애인", + "disabled": "비활성화됨", "enableProvider": "공급자 활성화", "disableProvider": "공급자 비활성화", "testResults": "테스트 결과", "noCompatibleYet": "아직 호환되는 제공업체가 추가되지 않았습니다.", "compatibleHint": "위 버튼을 사용하여 OpenAI 또는 Anthropic 호환 엔드포인트를 추가하세요.", "addOpenAICompatible": "OpenAI 호환 추가", - "addAnthropicCompatible": "인류 호환 추가", + "addAnthropicCompatible": "Anthropic 호환 추가", "addNewProvider": "새 공급자 추가", "backToProviders": "공급자로 돌아가기", "configureNewProvider": "애플리케이션과 함께 사용할 새 AI 공급자를 구성합니다.", @@ -4883,7 +4883,7 @@ "failedCount": "{count} 실패", "testedCount": "{count} 테스트됨", "millisecondsAbbr": "{value}ms", - "okShort": "알았어", + "okShort": "정상", "errorShort": "오류", "noActiveConnectionsInGroup": "이 그룹에 대한 활성 연결이 없습니다.", "allTestsPassed": "모든 {total} 테스트를 통과했습니다.", @@ -4897,7 +4897,7 @@ "baseUrlHint": "필수입니다. 공급자 API 기본 URL.", "iconUrlLabel": "아이콘 URL", "iconUrlHint": "선택 사항. 이 제공자의 아이콘으로 표시될 이미지 URL입니다.", - "anthropicPrefixPlaceholder": "AC-PROD", + "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", "openaiBaseUrlPlaceholder": "https://api.openai.com/v1", @@ -4936,7 +4936,7 @@ "failedSaveConnectionRetry": "연결을 저장하지 못했습니다. 다시 시도해 주세요.", "failedRetestConnection": "연결을 다시 테스트하지 못했습니다.", "deleteCompatibleNodeConfirm": "이 {type} 호환 노드를 삭제하시겠습니까?", - "anthropicCompatibleDetails": "인류 친화적인 세부 사항", + "anthropicCompatibleDetails": "Anthropic 호환 세부 정보", "openaiCompatibleDetails": "OpenAI 호환 세부정보", "messagesApi": "메시지 API", "responsesApi": "응답 API", @@ -4944,7 +4944,7 @@ "audioTranscriptions": "Audio Transcriptions", "audioSpeech": "Audio Speech", "imagesGenerations": "Images Generations", - "chatCompletions": "채팅 완료", + "chatCompletions": "Chat Completions", "importingModels": "가져오는 중...", "importFromModels": "/models에서 가져오기", "modelsImported": "{count} models imported", @@ -4957,7 +4957,7 @@ "autoSyncDisabled": "자동 동기화 비활성화", "autoSyncToggleFailed": "자동 동기화 전환 실패", "clearAllModels": "모든 모델 삭제", - "clearAllModelsConfirm": "이 공급자의 모든 모델을 제거하시겠습니까?", + "clearAllModelsConfirm": "이 공급자의 모든 모델을 제거하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "clearAllModelsSuccess": "모든 모델 삭제됨", "clearAllModelsFailed": "모델 삭제 실패", "addConnectionToImport": "가져오기를 활성화하려면 연결을 추가하세요.", @@ -4995,12 +4995,12 @@ "testAllProgress": "{done}/{total} 테스트 완료", "testAllFailedHidden": "{count}개의 실패한 모델 숨김", "testAllDone": "모든 모델 테스트 완료", - "productionKey": "생산 키", + "productionKey": "프로덕션 키", "enterNewApiKey": "새 API 키를 입력하세요", - "codexApplyModalTitle": "지역 코덱스에 적용", + "codexApplyModalTitle": "로컬 Codex에 적용", "codexApplyTargetLabel": "대상 경로", "codexApplyBackupLabel": "백업", - "codexApplyWarning": "이는 기존 auth.json을 대체합니다. 계속하다?", + "codexApplyWarning": "기존 auth.json을 대체합니다. 계속하시겠습니까?", "codexApplyConfirmCheckbox": "기존 auth.json을 교체할 것임을 확인합니다.", "codexApply": "적용", "bulkTabSingle": "싱글", @@ -5011,7 +5011,7 @@ "bulkAddedCount": "{count, plural, one {# key added} other {# keys added}}", "bulkFailedCount": "{count, plural, one {# failed} other {# failed}}", "optional": "선택사항", - "anthropicCompatibleName": "인류 친화적", + "anthropicCompatibleName": "Anthropic 호환", "openaiCompatibleName": "OpenAI 호환", "compatibleDefaultModelLabel": "기본 모델", "compatibleDefaultModelHint": "호환되는 엔드포인트가 요구하는 것과 정확히 일치하는 모델 ID를 입력하세요. 이 모델은 연결 기본값으로 저장됩니다.", @@ -5025,14 +5025,14 @@ "importDoneCount": "✓ 완료! {count, plural, one {# model imported.} other {# models imported.}}", "unexpectedErrorOccurred": "예상치 못한 오류가 발생했습니다.", "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", - "messagesPath": "메시지", - "responsesPath": "응답", - "chatCompletionsPath": "채팅/완료", + "messagesPath": "messages", + "responsesPath": "responses", + "chatCompletionsPath": "chat/completions", "add": "추가", "edit": "편집", "delete": "삭제", - "anthropic": "인류학", - "openai": "오픈AI", + "anthropic": "Anthropic", + "openai": "OpenAI", "singleConnectionPerCompatible": "호환되는 노드당 하나의 연결만 허용됩니다. 더 많은 연결이 필요한 경우 다른 노드를 추가하세요.", "connections": "연결", "providerProxyTitleConfigured": "공급자 프록시: {host}", @@ -5051,15 +5051,15 @@ "builtInModels": "Built-in models", "builtInModelsHint": "Registry models for this provider. Use the pencil to set compatibility options.", "pageAutoRefresh": "페이지가 자동으로 새로 고쳐집니다...", - "statusDisabled": "장애인", + "statusDisabled": "비활성화됨", "statusConnected": "연결됨", "statusRuntimeIssue": "런타임 문제", "statusAuthFailed": "인증 실패", - "statusRateLimited": "요금 제한", + "statusRateLimited": "속도 제한됨", "statusNetworkIssue": "네트워크 문제", "statusTestUnsupported": "지원되지 않는 테스트", "statusUnavailable": "이용할 수 없음", - "statusFailed": "실패했다", + "statusFailed": "실패", "statusError": "오류", "oauthAccount": "OAuth 계정", "errorTypeRuntime": "로컬 런타임", @@ -5067,7 +5067,7 @@ "errorTypeMissingCredential": "자격증명 누락", "errorTypeRefreshFailed": "새로고침 실패", "errorTypeTokenExpired": "토큰이 만료되었습니다.", - "errorTypeRateLimited": "요금 제한", + "errorTypeRateLimited": "속도 제한됨", "errorTypeUpstreamUnavailable": "업스트림 이용 불가", "errorTypeNetworkError": "네트워크 오류", "errorTypeTestUnsupported": "지원되지 않는 테스트", @@ -5076,7 +5076,7 @@ "errorTypeBanned": "403 차단됨", "proxySourceGlobal": "글로벌", "proxySourceProvider": "공급자", - "proxySourceKey": "열쇠", + "proxySourceKey": "키", "proxyConfiguredBySource": "프록시({source}): {host}", "proxyOn": "프록시 켬", "proxyOff": "직접 연결 (프록시 우회)", @@ -5100,7 +5100,7 @@ "clickToEditAlias": "Alias: {alias} (click to edit)", "openRouterAnyModelHint": "OpenRouter는 모든 모델을 지원합니다. 빠른 액세스를 위해 모델을 추가하고 별칭을 만듭니다.", "modelIdFromOpenRouter": "모델 ID(OpenRouter에서)", - "openRouterModelPlaceholder": "인류학/claude-3-opus", + "openRouterModelPlaceholder": "anthropic/claude-3-opus", "customModels": "맞춤형 모델", "customModelsHint": "기본 목록에 없는 모델 ID를 추가하세요. 라우팅에 사용할 수 있습니다.", "normalizeToolCallIdLabel": "Normalize tool call IDs to 9 characters (e.g. Mistral)", @@ -5161,13 +5161,13 @@ "compatUpstreamAddRow": "Add header", "compatUpstreamRemoveRow": "Remove row", "compatBadgeUpstreamHeaders": "Headers", - "perModelQuotaLabel": "Per Model Quota Label", - "perModelQuotaDescription": "Per Model Quota Description", + "perModelQuotaLabel": "모델별 할당량", + "perModelQuotaDescription": "활성화하면 429/404 오류가 전체 연결이 아닌 해당 모델만 잠급니다. 모델별 속도 제한이 있는 공급자(예: ModelScope)에 사용하세요.", "importFreeModelsOnlyLabel": "무료 모델만 가져오기", "importFreeModelsOnlyHint": "활성화하면 이 제공자의 무료 모델만 가져옵니다. 유료 모델은 건너뜁니다.", "perModelQuotaToggle": "모델별 할당량 토글", "modelId": "모델 ID", - "customModelPlaceholder": "예를 들어 gpt-4.5-터보", + "customModelPlaceholder": "예: gpt-4.5-turbo", "loading": "로드 중...", "removeCustomModel": "맞춤 모델 삭제", "noCustomModels": "아직 추가된 커스텀 모델이 없습니다.", @@ -5181,7 +5181,7 @@ "modelRemovedSuccess": "모델이 성공적으로 제거되었습니다.", "failedDeleteModelTryAgain": "모델을 삭제하지 못했습니다. 다시 시도해 주세요.", "compatibleModelsDescription": "{type} 호환 모델을 수동으로 추가하거나 /models 엔드포인트에서 가져옵니다.", - "anthropicCompatibleModelPlaceholder": "클로드-3-opus-20240229", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", "openaiCompatibleModelPlaceholder": "gpt-4o", "apiKeyValidationFailed": "API 키 검증에 실패했습니다. 키를 확인하고 다시 시도해 주세요.", "addProviderApiKeyTitle": "{provider} API 키 추가", @@ -5222,18 +5222,18 @@ "applyClaudeAuthLocal": "인증 적용", "exportClaudeAuthFile": "인증 내보내기", "importClaudeAuth": "인증 가져오기", - "claudeApplyModalTitle": "지역 클로드 코드에 적용", + "claudeApplyModalTitle": "로컬 Claude Code에 적용", "claudeApplyTargetLabel": "대상 경로", "claudeApplyBackupLabel": "백업", "claudeApplyMcpHint": "기존 MCP OAuth 상태는 유지됩니다.", - "claudeApplyWarning": "이는 기존 cludeAiOauth 섹션을 대체합니다. 계속하다?", - "claudeApplyConfirmCheckbox": "기존 cludeAiOauth 섹션을 교체할 것임을 확인합니다.", + "claudeApplyWarning": "기존 claudeAiOauth 섹션을 대체합니다. 계속하시겠습니까?", + "claudeApplyConfirmCheckbox": "기존 claudeAiOauth 섹션을 교체할 것임을 확인합니다.", "claudeApply": "적용", "claudeAuthAppliedLocal": "Claude 인증이 로컬로 적용됨", "claudeAuthApplyFailed": "Claude 인증을 로컬로 적용하지 못했습니다.", "claudeAuthExported": "Claude 인증 파일을 내보냈습니다.", "claudeAuthExportFailed": "Claude 인증 파일을 내보내지 못했습니다.", - "claudeImportModalTitle": "클로드 인증 가져오기", + "claudeImportModalTitle": "Claude 인증 가져오기", "claudeImportTabSingle": "싱글", "claudeImportTabBulk": "대량", "claudeImportTabUpload": "파일 업로드", @@ -5252,8 +5252,8 @@ "claudeImportFailed": "Claude 인증을 가져오지 못했습니다.", "claudeImportBulkModeUpload": "파일 업로드", "claudeImportBulkModePaste": "JSON 배열 붙여넣기", - "claudeImportBulkModeZip": "우편번호 업로드", - "claudeImportBulkUploadHint": "최대 50개의 .credentials.json 파일(각각 256KB, 총 10MB)을 삭제하거나 선택하세요.", + "claudeImportBulkModeZip": "ZIP 업로드", + "claudeImportBulkUploadHint": "최대 50개의 .credentials.json 파일(각각 256KB, 총 10MB)을 끌어다 놓거나 선택하세요.", "claudeImportBulkPasteHint": "객체 배열 붙여넣기: [{ json, name?, email? }...]", "claudeImportBulkZipHint": ".json 항목이 포함된 ZIP입니다. 최대 50개 항목, 압축 해제 시 10MB.", "claudeImportBulkSubmit": "모두 가져오기", @@ -5284,8 +5284,8 @@ "geminiImportFailed": "Gemini 인증을 가져오지 못했습니다.", "geminiImportBulkModeUpload": "파일 업로드", "geminiImportBulkModePaste": "JSON 배열 붙여넣기", - "geminiImportBulkModeZip": "우편번호 업로드", - "geminiImportBulkUploadHint": "최대 50개의 oauth_creds.json 파일(각각 256KB, 총 10MB)을 삭제하거나 선택하세요.", + "geminiImportBulkModeZip": "ZIP 업로드", + "geminiImportBulkUploadHint": "최대 50개의 oauth_creds.json 파일(각각 256KB, 총 10MB)을 끌어다 놓거나 선택하세요.", "geminiImportBulkPasteHint": "객체 배열 붙여넣기: [{ json, name?, email? }...]", "geminiImportBulkZipHint": "oauth_creds.json 항목이 포함된 ZIP입니다. 최대 50개 항목, 압축 해제 시 10MB.", "geminiImportBulkSubmit": "모두 가져오기", @@ -5358,11 +5358,11 @@ "showEmails": "Show all emails", "hideEmails": "Hide all emails", "a": "A", - "accountConcurrencyCapHint": "이 provider 계정의 최대 동시 요청 수입니다. 비워 두거나 0으로 설정하면 제한이 없습니다. provider 자체가 부과하는 제한에 먼저 걸리지 않도록 돕습니다.", + "accountConcurrencyCapHint": "이 연결/계정이 처리할 수 있는 최대 동시 요청 수입니다. 구독 계정은 보통 소수(1~3개)만 허용하며, 초과하면 429 오류와 쿨다운이 발생합니다. 기본값을 사용하려면 비워 두세요.", "accountConcurrencyCapLabel": "Provider 계정 최대 동시 요청 수", - "accountIdHint": "Account Id Hint", - "accountIdLabel": "Account Id Label", - "accountIdPlaceholder": "Account Id Placeholder", + "accountIdHint": "일부 공급자(예: Cloudflare Workers AI)에서 API 토큰과 함께 필요합니다.", + "accountIdLabel": "계정 ID", + "accountIdPlaceholder": "공급자 계정 ID", "addAnotherApiKey": "Add another API key or paste multiple keys", "addCcCompatible": "Add Cc Compatible", "aggregatorsGateways": "Aggregators Gateways", @@ -5386,38 +5386,38 @@ "blackboxWebCookieHint": "Blackbox Web Cookie Hint", "blackboxWebCookiePlaceholder": "Blackbox Web Cookie Placeholder", "t3ChatWebCookieHint": "t3.chat → DevTools → Application → Local Storage → https://t3.chat을 열고 'convex-session-id'를 복사하세요. 그런 다음 DevTools → Network를 열고 채팅 요청에서 전체 쿠키 헤더를 복사하세요. 아래 필드에 두 값을 모두 붙여넣습니다.", - "t3ChatWebCookiePlaceholder": "볼록-세션-id=abc123...", + "t3ChatWebCookiePlaceholder": "convex-session-id=abc123...", "grokWebCookieHint": "Grok Web Cookie Hint", - "blockClaudeExtraUsageDescription": "Block Claude Extra Usage Description", - "blockClaudeExtraUsageLabel": "Block Claude Extra Usage Label", + "blockClaudeExtraUsageDescription": "활성화하면 사용량 API가 대기 중인 추가 사용량을 보고하는 즉시 OmniRoute가 이 Claude 연결을 사용 불가로 표시하여, 종량제 추가 과금을 계속하는 대신 폴백이 다른 연결로 전환됩니다.", + "blockClaudeExtraUsageLabel": "Claude 추가 사용 차단", "disableCoolingDescription": "일시적인 쿨다운을 건너뛰어 복구 가능한 오류가 발생한 후에도 이 연결이 사용 가능한 상태로 유지되도록 합니다(차단됨/만료됨과 같은 최종 상태는 여전히 적용됨).", "disableCoolingLabel": "이 연결에 대한 쿨다운 비활성화", "bulkPasteAdded": "{count, plural, one {1 key added} other {# keys added}}", "bulkPasteDuplicatesIgnored": "{count, plural, one {1 duplicate skipped} other {# duplicates skipped}}", "bulkPasteHint": "Paste one API key per line. Empty lines are ignored and duplicate keys are skipped.", - "ccCompatibleBaseUrlHint": "Cc Compatible Base Url Hint", - "ccCompatibleBaseUrlPlaceholder": "Cc Compatible Base Url Placeholder", - "ccCompatibleChatPathHint": "Cc Compatible Chat Path Hint", - "ccCompatibleContext1mDescription": "Cc Compatible Context1M Description", - "ccCompatibleContext1mLabel": "Cc Compatible Context1M Label", + "ccCompatibleBaseUrlHint": "Claude Code 전용 릴레이의 기본 URL입니다. /messages는 포함하지 마세요.", + "ccCompatibleBaseUrlPlaceholder": "https://relay.example.com/v1", + "ccCompatibleChatPathHint": "기본값은 Claude Code의 엄격한 Messages API 경로입니다. 릴레이 문서에 다른 경로가 명시된 경우에만 변경하세요.", + "ccCompatibleContext1mDescription": "선택한 Claude 모델이 지원하는 경우 context-1m 베타 헤더를 추가합니다.", + "ccCompatibleContext1mLabel": "1M 컨텍스트 베타 활성화", "ccCompatibleRedactThinkingDescription": "Adds the redact-thinking beta header for CC Compatible upstreams that require hidden Claude thinking streams.", "ccCompatibleRedactThinkingLabel": "Enable redact-thinking beta", "ccCompatibleSummarizeThinkingDescription": "Adds `display: \"summarized\"` to CC Compatible thinking requests so supported Claude models stream visible thinking deltas.", "ccCompatibleSummarizeThinkingLabel": "Enable summarized thinking display", - "ccCompatibleDetailsTitle": "Cc Compatible Details Title", - "ccCompatibleLabel": "Cc Compatible Label", - "ccCompatibleModelsDescription": "Cc Compatible Models Description", - "ccCompatibleNameHint": "Cc Compatible Name Hint", - "ccCompatibleNamePlaceholder": "Cc Compatible Name Placeholder", - "ccCompatiblePrefixHint": "Cc Compatible Prefix Hint", - "ccCompatiblePrefixPlaceholder": "Cc Compatible Prefix Placeholder", - "ccCompatibleValidationHint": "Cc Compatible Validation Hint", - "claudeExtraUsageShort": "Claude Extra Usage Short", - "claudeExtraUsageToggleTitle": "Claude Extra Usage Toggle Title", - "codex5hToggleTitle": "Codex5H Toggle Title", + "ccCompatibleDetailsTitle": "CC 호환 릴레이 세부 정보", + "ccCompatibleLabel": "CC 호환", + "ccCompatibleModelsDescription": "CC 호환 릴레이는 모델 목록을 제공하지 않습니다. 릴레이가 허용하는 Claude 모델 ID를 추가하세요.", + "ccCompatibleNameHint": "이 Claude Code 전용 릴레이의 표시 이름입니다.", + "ccCompatibleNamePlaceholder": "CC Relay Production", + "ccCompatiblePrefixHint": "prefix/model-id와 같은 모델 별칭에 사용됩니다.", + "ccCompatiblePrefixPlaceholder": "cc", + "ccCompatibleValidationHint": "Claude Code 클라이언트 전용으로 서비스하는 릴레이에만 이 공급자를 사용하세요. OmniRoute는 들어오는 모든 요청을 Claude Code 호환 와이어 형식으로 재작성하여 해당 릴레이가 수락하도록 합니다. Claude Code CLI만 사용하려는 경우이거나 이 릴레이 유형이 무엇인지 확실하지 않은 경우에는 일반 Anthropic 호환 공급자를 사용하세요.", + "claudeExtraUsageShort": "추가 사용량", + "claudeExtraUsageToggleTitle": "이 연결에 대해 Claude 추가 사용량 집계 차단", + "codex5hToggleTitle": "이 연결에 대해 Codex 5시간 할당량 추적", "codexFastServiceTierDescription": "Use the priority service tier for Codex requests when available.", "codexFastServiceTierLabel": "Codex fast service tier", - "codexWeeklyToggleTitle": "Codex Weekly Toggle Title", + "codexWeeklyToggleTitle": "이 연결에 대해 Codex 주간 할당량 추적", "compatUpstreamHeaderNamePlaceholder": "Compat Upstream Header Name Placeholder", "compatUpstreamHeaderValuePlaceholder": "Compat Upstream Header Value Placeholder", "compatible": "Compatible", @@ -5428,8 +5428,8 @@ "newApiUserIdLabel": "New-API 사용자 ID", "newApiUserIdPlaceholder": "예: 12345", "newApiUserIdHint": "AgentRouter의 New-Api-User 헤더 값으로, 할당량 잔액을 조회할 때 콘솔 API 키와 함께 사용됩니다.", - "cpaModeDisabledTitle": "Cpa Mode Disabled Title", - "cpaModeEnabledTitle": "Cpa Mode Enabled Title", + "cpaModeDisabledTitle": "CLIProxyAPI 호환 모드가 비활성화되어 있습니다", + "cpaModeEnabledTitle": "CLIProxyAPI 호환 모드가 활성화되어 있습니다", "customUserAgentHint": "Custom User Agent Hint", "customUserAgentLabel": "Custom User Agent Label", "databricksBaseUrlHint": "Databricks Base Url Hint", @@ -5464,7 +5464,7 @@ "codexFastTierActiveChip": "Codex Fast 티어가 활성화되어 있습니다", "tierFast": "Fast", "antigravityProjectIdLabel": "Google Cloud 프로젝트 ID", - "antigravityProjectIdPlaceholder": "내-gcp-프로젝트-id", + "antigravityProjectIdPlaceholder": "my-gcp-project-id", "grokWebCookiePlaceholder": "Grok Web Cookie Placeholder", "herokuBaseUrlHint": "Heroku Base Url Hint", "hideEmail": "Hide Email", @@ -5498,9 +5498,9 @@ "perplexitySearchSharedKeyInfo": "Perplexity Search Shared Key Info", "perplexityWebCookieHint": "Perplexity Web Cookie Hint", "perplexityWebCookiePlaceholder": "Perplexity Web Cookie Placeholder", - "personalAccessTokenLabel": "Personal Access Token Label", - "qoderPatHint": "Qoder Pat Hint", - "qoderPatPlaceholder": "Qoder Pat Placeholder", + "personalAccessTokenLabel": "개인 액세스 토큰", + "qoderPatHint": "Qoder 개인 액세스 토큰(PAT)을 붙여넣으세요. Qoder → Settings → Personal Access Tokens에서 생성할 수 있습니다.", + "qoderPatPlaceholder": "Qoder 개인 액세스 토큰", "rateLimitOverridesSection": "속도 제한 재정의", "rateLimitOverridesMaxConcurrentHint": "이 연결에 대한 최대 동시 요청 수 재정의입니다. 계정 수준의 제한을 재정의합니다.", "rateLimitOverridesMaxConcurrentLabel": "최대 동시 요청 수 (속도 제한)", @@ -5533,18 +5533,18 @@ "sessionCookieLabel": "Session Cookie Label", "showEmail": "Show Email", "snowflakeBaseUrlHint": "Snowflake Base Url Hint", - "supportedEndpointAudio": "Supported Endpoint Audio", - "supportedEndpointChat": "Supported Endpoint Chat", - "supportedEndpointEmbeddings": "Supported Endpoint Embeddings", - "supportedEndpointImages": "Supported Endpoint Images", - "supportedEndpointsLabel": "Supported Endpoints Label", + "supportedEndpointAudio": "오디오", + "supportedEndpointChat": "채팅", + "supportedEndpointEmbeddings": "임베딩", + "supportedEndpointImages": "이미지", + "supportedEndpointsLabel": "지원되는 엔드포인트", "tagGroupHint": "Tag Group Hint", "tagGroupLabel": "Tag Group Label", "tagGroupPlaceholder": "Tag Group Placeholder", "testModel": "Test Model", "testingModel": "Testing Model", - "toggleOffShort": "Toggle Off Short", - "toggleOnShort": "Toggle On Short", + "toggleOffShort": "끔", + "toggleOnShort": "켬", "tokenExpiredBadge": "Token Expired Badge", "tokenExpiredTitle": "Token Expired Title", "tokenExpiresSoonTitle": "Token Expires Soon Title", @@ -5552,9 +5552,9 @@ "totalKeysRotating": "{count, plural, one {1 key rotating} other {# keys rotating}}", "unhideModel": "Unhide Model", "upstreamProxyProviders": "Upstream Proxy Providers", - "validationModelIdHint": "Validation Model Id Hint", - "validationModelIdLabel": "Validation Model Id Label", - "validationModelIdPlaceholder": "Validation Model Id Placeholder", + "validationModelIdHint": "API 키를 검증하는 데 사용할 모델입니다. 비워 두면 공급자의 첫 번째 사용 가능한 모델을 사용합니다.", + "validationModelIdLabel": "검증 모델", + "validationModelIdPlaceholder": "예: meta-llama/llama-3.1-8b-instruct", "vertexServiceAccountPlaceholder": "Paste your Service Account JSON ({\"type\":\"service_account\",\"project_id\":\"…\",\"client_email\":\"…\",\"private_key\":\"…\"}) or an OAuth access_token", "webCookieProviders": "Web Cookie Providers", "weeklyShort": "Weekly Short", @@ -5568,13 +5568,13 @@ "importGrokAuth": "Grok Build 인증 가져오기", "zedImportTitle": "Zed 키체인에서 가져오기", "zedImportDescription": "OS 키체인에 Zed IDE가 저장한 AI 제공업체 자격 증명(OpenAI, Anthropic, Google, Mistral, xAI)을 찾아 연결로 가져옵니다. 이 컴퓨터에 Zed IDE가 설치되어 있어야 합니다.", - "zedImportButton": "Zed Import Button", - "zedImportFailed": "Zed Import Failed", + "zedImportButton": "Zed에서 가져오기", + "zedImportFailed": "Zed 가져오기 실패", "zedImportHint": "Zed Import Hint", "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", - "zedImportSuccess": "Zed Import Success", - "zedImporting": "Zed Importing", + "zedImportSuccess": "{providers}개 공급자에 대해 Zed에서 {credentials}개의 자격 증명을 가져왔습니다", + "zedImporting": "가져오는 중…", "zedNoCredentials": "키체인에서 Zed 자격 증명을 찾을 수 없습니다", "zedUnsupportedCredentials": "키체인 자격 증명을 {count}개 찾았으나, 지원되는 제공업체와 일치하는 것이 없습니다", "zedManualTitle": "수동 토큰 가져오기", @@ -5603,7 +5603,7 @@ "freeTierProvidersDesc": "무료 등급이 있는 공급자 - 일부는 API 키 등록이 필요하고 다른 공급자는 자격 증명이 전혀 필요하지 않습니다.", "providerSummaryAll": "합계", "ideProviders": "IDE 제공업체", - "ideProvidersDesc": "AI 구독이 내장된 편집자. 공급자 페이지를 사용하여 IDE 키체인에서 직접 자격 증명을 가져옵니다.", + "ideProvidersDesc": "AI 구독이 내장된 에디터입니다. 공급자 페이지에서 IDE 키체인의 자격 증명을 직접 가져올 수 있습니다.", "noIdeProviders": "현재 필터와 일치하는 IDE 공급자가 없습니다.", "providerDetailFastTierTooltip": "기본적으로 모든 Codex 연결에 Codex Fast 계층 적용", "providerDetailFastDefaultLabel": "빠른 기본값", @@ -5612,7 +5612,7 @@ "providerDetailCallbackUrl": "콜백 URL", "providerDetailValidClaudeCredentialsFile": "유효한 Claude 자격 증명 파일", "providerDetailPathAutoDetectedAllOs": "경로는 OS(Linux/Mac/Windows)별로 자동 감지됩니다.", - "providerDetailMyClaudeAccountPlaceholder": "내 클로드 계정", + "providerDetailMyClaudeAccountPlaceholder": "내 Claude 계정", "providerDetailPathAutoDetected": "경로는 OS(Linux/Mac)별로 자동 감지됩니다.", "compatBlockedParamsPlaceholder": "thinking, … (쉼표로 구분)", "compatAllowedParamsPlaceholder": "reasoning, … (쉼표로 구분)", @@ -5661,7 +5661,7 @@ "onboardingChooseProviderDescription": "공급자를 선택하면 마법사가 자격 증명 및 테스트 과정을 안내합니다.", "onboardingChangeType": "유형 변경", "onboardingChangeProvider": "공급자 변경", - "onboardingSearchProviders": "검색 공급자…", + "onboardingSearchProviders": "공급자 검색…", "onboardingApiKeyOptional": "API 키 선택사항", "onboardingProviderConnected": "제공업체가 연결됨", "onboardingProviderSavedWithWarnings": "경고와 함께 공급자가 저장되었습니다.", @@ -5670,7 +5670,7 @@ "onboardingTestPassed": "테스트 통과", "onboardingTestFailed": "테스트 실패", "onboardingOpenProviderDetails": "제공업체 세부정보 열기", - "onboardingTryInPlayground": "놀이터에서 시험해 보세요", + "onboardingTryInPlayground": "플레이그라운드에서 시험해 보세요", "onboardingDefaultConnectionName": "{provider} 기본", "onboardingTestingConnection": "제공업체 연결 테스트 중…", "onboardingValidatingCredentials": "사용자 인증 정보 확인 중…", @@ -5687,20 +5687,20 @@ "onboardingConnectionName": "연결 이름", "onboardingApiKeyOptionalLabel": "API 키(선택사항)", "onboardingBaseUrlOverride": "기본 URL 재정의", - "onboardingBaseUrlOverrideHint": "선택사항. 공급자별 데이터.baseUrl로 저장됩니다.", + "onboardingBaseUrlOverrideHint": "선택사항. providerSpecificData.baseUrl로 저장됩니다.", "onboardingRegion": "지역", - "onboardingSearchCx": "CX/엔진 ID 검색", + "onboardingSearchCx": "검색 CX / 엔진 ID", "onboardingProviderSpecificIdPlaceholder": "선택적 제공업체별 ID", "onboardingCustomUserAgent": "맞춤형 사용자 에이전트", - "onboardingWorking": "일하는 중…", + "onboardingWorking": "처리 중…", "onboardingValidateSaveTest": "검증, 저장 및 테스트", "onboardingBack": "뒤로", "onboardingCreateCustomCompatibleProvider": "맞춤형 호환 제공자 생성", "onboardingCreateCustomCompatibleDescription": "마법사는 먼저 공급자 노드를 생성한 다음 API 키 연결을 저장하고 테스트합니다.", "onboardingProtocol": "프로토콜", "onboardingOpenAiCompatible": "OpenAI 호환", - "onboardingAnthropicCompatible": "인류 친화적인", - "onboardingClaudeCodeCompatible": "클로드 코드 호환", + "onboardingAnthropicCompatible": "Anthropic 호환", + "onboardingClaudeCodeCompatible": "Claude Code 호환", "onboardingProviderPrefix": "공급자 접두사", "onboardingProviderPrefixHint": "관리형 공급자 ID를 생성하는 데 사용됩니다.", "onboardingChatPath": "채팅 경로", @@ -5923,7 +5923,7 @@ "webSessionGuideStep2": "브라우저 개발자 도구를 열고 웹 앱의 요청을 검사합니다.", "webSessionGuideStep3": "공급자의 자체 도메인에서 필수 자격 증명을 복사합니다. 쿠키의 경우 Cookie 헤더 값만 복사하고 Cookie:를 생략하세요.", "webSessionGuideStep4": "여기에 붙여넣고 연결을 확인하세요. 작동이 중지되면 다시 로그인하여 새로운 값으로 바꾸세요.", - "webSessionSecurityHint": "이를 비밀번호처럼 취급하십시오. 비밀번호가 만료되거나 취소될 때까지 로그인한 웹 계정에 액세스할 수 있습니다.", + "webSessionSecurityHint": "이 값을 비밀번호처럼 취급하세요. 만료되거나 취소되기 전까지 로그인된 웹 계정에 액세스할 수 있습니다.", "webNoAuthGuideTitle": "자격 증명이 필요하지 않습니다", "webNoAuthGuideBody": "{provider}에는 API 키나 쿠키가 필요하지 않습니다. 무료 웹 엔드포인트를 사용하려면 연결을 저장하세요.", "webSessionCredentialValidationFailed": "세션 자격 증명 유효성 검사에 실패했습니다. 다시 로그인하고 새로운 자격 증명을 복사한 후 다시 시도하세요.", @@ -6025,7 +6025,7 @@ "resilienceSettingsIntro": "공급자가 실패할 경우 자동 재시도, 휴지 및 대체.", "aiSettingsIntro": "사고 예산, 모델 동작 및 압축을 위한 AI 관련 설정입니다.", "systemPrompt": "시스템 프롬프트", - "thinkingBudget": "생각하는 예산", + "thinkingBudget": "사고 예산", "proxy": "프록시", "httpProxy": "HTTP Proxy", "1proxy": "1proxy", @@ -6045,7 +6045,7 @@ "requestBodyLimitCurrent": "Current: {value}", "mitmProxy": "MITM 프록시", "pricing": "가격", - "storage": "저장", + "storage": "저장소", "policies": "정책", "ipFilter": "IP 필터", "comboDefaults": "콤보 기본값", @@ -6162,7 +6162,7 @@ "resilienceStructureTitle": "Resilience Structure", "resilienceStructureDesc": "이 페이지는 동작만 구성합니다. 라이브 차단기 상태는 상태 페이지에 표시됩니다. 콤보별 재시도 및 라운드 로빈 슬롯 제어는 콤보 설정에 유지됩니다.", "enableThinking": "사고 활성화", - "maxThinkingTokens": "맥스 씽킹 토큰", + "maxThinkingTokens": "최대 사고 토큰 수", "enableProxy": "프록시 활성화", "perKeyProxyEnabled": "키별 프록시 할당 활성화", "perKeyProxyEnabledDesc": "활성화하면 각 제공자 연결에서 자체 프록시 할당을 사용할 수 있습니다", @@ -6178,7 +6178,7 @@ "cacheCreation": "캐시 생성", "customPricing": "맞춤형 가격", "databaseSize": "데이터베이스 크기", - "backupDb": "백업 데이터베이스", + "backupDb": "데이터베이스 백업", "restoreDb": "데이터베이스 복원", "exportData": "데이터 내보내기", "importData": "데이터 가져오기", @@ -6196,16 +6196,16 @@ "settingsSectionsAria": "설정 섹션", "switchThemes": "밝은 테마와 어두운 테마 간 전환", "themeSelectionAria": "테마 선택", - "themeLight": "빛", - "themeDark": "어둠", + "themeLight": "라이트", + "themeDark": "다크", "themeSystem": "시스템", "endpointTunnelVisibility": "엔드포인트 터널 가시성", "endpointTunnelVisibilityDesc": "터널 상태를 변경하지 않고 끝점 페이지에서 터널 제어를 숨깁니다.", "showCloudflareTunnel": "Cloudflare 빠른 터널", "showCloudflareTunnelDesc": "엔드포인트 페이지에 Cloudflare Quick Tunnel 컨트롤을 표시하세요.", - "showTailscaleFunnel": "꼬리비늘 깔때기", + "showTailscaleFunnel": "Tailscale Funnel", "showTailscaleFunnelDesc": "엔드포인트 페이지에 Tailscale Funnel 컨트롤을 표시합니다.", - "showNgrokTunnel": "응록 터널", + "showNgrokTunnel": "ngrok 터널", "showNgrokTunnelDesc": "엔드포인트 페이지에 ngrok Tunnel 컨트롤을 표시합니다.", "sidebarVisibility": "Hide sidebar items", "sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.", @@ -6246,8 +6246,8 @@ "flushCache": "캐시 플러시", "flushing": "플러싱…", "size": "크기", - "hits": "조회수", - "evictions": "퇴거", + "hits": "적중", + "evictions": "축출", "loadingCacheStats": "캐시 통계 로드 중…", "globalProxy": "글로벌 프록시", "globalProxyDesc": "모든 API 호출에 대해 글로벌 아웃바운드 프록시를 구성합니다. 개별 공급자, 콤보 및 키가 이를 재정의할 수 있습니다.", @@ -6348,12 +6348,12 @@ "afterPromptDesc": "에이전트/제공자 시스템 지침 후에 주입됨", "afterPromptPlaceholder": "에이전트/제공자 프롬프트 후에 삽입되는 지침...", "chars": "{count}자", - "thinkingBudgetTitle": "생각하는 예산", + "thinkingBudgetTitle": "사고 예산", "thinkingBudgetDesc": "모든 요청에서 AI 추론 토큰 사용을 제어합니다.", "passthrough": "통과", "passthroughDesc": "변경 사항 없음 - 클라이언트가 사고 예산을 제어합니다.", - "auto": "자동", - "autoDesc": "모든 사고 구성 제거 - 공급자가 결정하도록 함", + "auto": "자동 콤보", + "autoDesc": "자가 복구형 스마트 라우팅 풀(성능 최적화)", "custom": "맞춤", "customDesc": "모든 요청에 대해 고정 토큰 예산 설정", "adaptive": "적응형", @@ -6387,7 +6387,7 @@ "authModelClient": "클라이언트 API 엔드포인트(/v1/*, /chat/*, /responses/*, /codex/*, /messages/*)에는 Bearer API 키가 필요합니다.", "authModelManagement": "관리 엔드포인트(/dashboard, /api/*)에는 대시보드 세션 또는 관리 자격 증명이 필요합니다.", "authModelPublic": "로그인, 상태 및 부트스트랩 경로만 공개됩니다.", - "bruteForceProtection": "로그인 무차별 보호", + "bruteForceProtection": "로그인 무차별 대입 보호", "bruteForceProtectionDesc": "동일한 IP에서 반복적으로 실패하면 /api/auth/login을 제한하고 잠급니다.", "corsAllowedOrigins": "CORS 허용 출처", "corsAllowedOriginsDesc": "이 서버를 호출하도록 허용된 브라우저 출처의 쉼표로 구분된 목록입니다. 빈 목록 = 브라우저 CORS 액세스가 없습니다(서버 간은 여전히 ​​작동함). CORS_ALLOW_ALL=true env var는 개발에만 사용하세요.", @@ -6402,7 +6402,7 @@ "enableFingerprintTitle": "Enable fingerprint for {provider}", "disableFingerprintTitle": "Disable fingerprint for {provider}", "systemTransforms": "시스템 블록 변환 파이프라인", - "systemTransformsDesc": "전달하기 전에 요청 본문에 적용되는 변환의 공급자별 주문 파이프라인입니다. 모든 공급자 ID를 지원합니다.", + "systemTransformsDesc": "전달 전에 요청 본문에 적용되는 공급자별 순서 지정 변환 파이프라인입니다. 모든 공급자 ID를 지원합니다.", "systemTransformsAddProvider": "제공업체 추가", "systemTransformsAddProviderPlaceholder": "제공업체를 선택하세요…", "systemTransformsAddProviderAllConfigured": "모든 제공업체가 이미 구성되어 있습니다.", @@ -6410,11 +6410,11 @@ "systemTransformsNoProviders": "구성된 제공업체가 없습니다. 시작하려면 공급자를 추가하세요.", "systemTransformsOpMoveUp": "위로 이동", "systemTransformsOpMoveDown": "아래로 이동", - "systemTransformsOpDelete": "삭제 작업", + "systemTransformsOpDelete": "작업 삭제", "routingStrategy": "라우팅 전략", "routingAdvancedGuideTitle": "고급 경로 안내", - "routingAdvancedGuideHint1": "예측 가능한 우선순위를 위해서는 Fill First를 사용하고, 공정성을 위해서는 Round Robin을, 지연 시간 복원력을 위해서는 P2C를 사용하세요.", - "routingAdvancedGuideHint2": "서비스 제공업체의 품질/비용이 다양한 경우 백그라운드 작업에는 비용 선택(Cost Opt)으로 시작하고 균형 잡힌 착용에는 최소 사용(Least Used)으로 시작하세요.", + "routingAdvancedGuideHint1": "이 전략은 새 콤보 기본값과 글로벌 계정 폴백 라우팅 모두에 동기화됩니다.", + "routingAdvancedGuideHint2": "예측 가능한 계정 우선순위에는 Fill First를, 계정 배치에는 Round Robin과 Sticky Limit을, 지연 시간 복원력에는 P2C를 사용하세요.", "fillFirst": "먼저 채우기", "fillFirstDesc": "우선순위에 따라 계정을 사용하세요", "roundRobin": "라운드 로빈", @@ -6425,14 +6425,14 @@ "randomDesc": "각 요청마다 무작위 계정", "leastUsed": "최소 사용", "leastUsedDesc": "최근에 가장 적게 사용한 계정 선택", - "costOpt": "비용 선택", + "costOpt": "비용 최적화", "costOptDesc": "가장 저렴한 계정을 선호합니다", "resetAware": "재설정 인식 RR", "resetAwareDesc": "남은 할당량이 양호하고 재설정이 가까운 계정을 선호합니다.", "strictRandom": "Strict Random", "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling", "stickyLimit": "고정 한도", - "stickyLimitDesc": "전환 전 계정당 통화", + "stickyLimitDesc": "글로벌 계정 폴백이 Round Robin을 사용할 때 전환 전 계정당 호출 수", "routingStrategyTitle": "라우팅 전략", "routingStrategySubtitle": "9router 일치: 계정 라운드 로빈, 스티키 제한 및 콤보 로테이션", "accountRoundRobin": "라운드 로빈", @@ -6467,8 +6467,8 @@ "cheapModel": "저렴한 모델", "detectionPatterns": "감지 패턴", "newPattern": "예: \"제목 생성\"", - "aliasPatternPlaceholder": "클로드-소네트-*", - "aliasTargetPlaceholder": "클로드 소네트-4-20250514", + "aliasPatternPlaceholder": "claude-sonnet-*", + "aliasTargetPlaceholder": "claude-sonnet-4-20250514", "pattern": "패턴", "targetModel": "대상 모델", "add": "+ 추가", @@ -6478,7 +6478,7 @@ "authenticated": "인증됨", "guest": "손님", "loginTime": "로그인 시간", - "sessionAge": "세션 연령", + "sessionAge": "세션 경과 시간", "browser": "브라우저", "clearLocalData": "로컬 데이터 지우기", "logout": "로그아웃", @@ -6487,7 +6487,7 @@ "systemActor": "시스템", "ipAccessControl": "IP 접근 제어", "ipAccessControlDesc": "특정 IP 주소 차단 또는 허용", - "ipModeDisabled": "장애인", + "ipModeDisabled": "비활성화됨", "ipModeBlacklist": "블랙리스트", "ipModeWhitelist": "화이트리스트", "ipModeWhitelistPriority": "WL 우선순위", @@ -6504,16 +6504,16 @@ "failedLoadAuditLog": "감사 로그를 로드하지 못했습니다.", "noAuditEvents": "감사 이벤트가 없습니다.", "action": "액션", - "actor": "배우", + "actor": "행위자", "details": "세부정보", "time": "시간", "fallbackChainsTitle": "폴백 체인", "fallbackChainsDesc": "모델별 공급자 대체 순서 정의", "addChain": "+ 체인 추가", "modelName": "모델명", - "modelNamePlaceholder": "클로드 소네트-4-20250514", + "modelNamePlaceholder": "claude-sonnet-4-20250514", "providersCommaSeparated": "공급자(쉼표로 구분, 우선순위)", - "providersCommaSeparatedPlaceholder": "인류, openai, 쌍둥이자리", + "providersCommaSeparatedPlaceholder": "anthropic, openai, gemini", "createChain": "체인 생성", "noFallbackChains": "대체 체인 없음", "noFallbackChainsDesc": "모델에 대한 공급자 대체 순서를 정의하는 체인을 만듭니다.", @@ -6528,7 +6528,7 @@ "addAtLeastOneProvider": "제공업체를 하나 이상 추가하세요.", "comboDefaultsTitle": "콤보 기본값", "comboDefaultsGuideTitle": "콤보 기본값을 조정하는 방법", - "comboDefaultsGuideHint1": "지연 시간이 짧은 흐름에서는 재시도 횟수를 낮게 유지하세요. 긴 세대 작업에 대해서만 시간 제한을 늘립니다.", + "comboDefaultsGuideHint1": "지연 시간이 짧은 흐름에서는 재시도 횟수를 낮게 유지하세요. 긴 생성 작업에 대해서만 시간 제한을 늘리세요.", "comboDefaultsGuideHint2": "하나의 공급자가 전역 기본값과 다른 시간 초과/재시도 동작을 필요로 하는 경우 공급자 재정의를 사용합니다.", "globalComboConfig": "글로벌 콤보 구성", "moveUp": "위로 이동", @@ -6541,11 +6541,11 @@ "priority": "우선순위", "weighted": "가중", "contextRelay": "Context Relay", - "contextRelayDesc": "Hands off context between providers with automatic summarization", + "contextRelayDesc": "계정 로테이션이 발생할 때 자동 컨텍스트 핸드오프를 수행하는 우선순위 방식 라우팅", "maxRetriesLabel": "최대 재시도 횟수", "retryDelayLabel": "재시도 지연(ms)", "timeoutLabel": "시간 초과(밀리초)", - "healthCheck": "건강검진", + "healthCheck": "상태 확인", "healthCheckDesc": "제공업체 가용성 사전 확인", "trackMetrics": "추적 지표", "trackMetricsDesc": "콤보별 요청 측정항목 기록", @@ -6571,11 +6571,11 @@ "contextRelaySummaryModel": "Summary Model", "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.", "providerProfiles": "공급자 프로필", - "providerProfilesDesc": "OAuth(세션 기반) 및 API 키(측정) 공급자에 대한 별도의 복원력 설정입니다. OAuth 공급자는 낮은 비율 제한으로 인해 더 엄격한 기준을 적용합니다.", + "providerProfilesDesc": "OAuth(세션 기반) 및 API 키(종량제) 공급자에 대한 별도의 복원력 설정입니다. OAuth 공급자는 속도 제한이 낮아 더 엄격한 임계값이 적용됩니다.", "oauthProviders": "OAuth 제공자", "apiKeyProviders": "API 키 제공자", "transientCooldown": "일시적인 쿨다운", - "rateLimitCooldown": "비율 제한 쿨다운", + "rateLimitCooldown": "속도 제한 쿨다운", "maxBackoffLevel": "최대 백오프 수준", "cbThreshold": "CB 임계값", "cbResetTime": "차단기 재설정 시간", @@ -6583,16 +6583,16 @@ "rateLimitingDesc": "API 키 제공자는 안전한 기본값을 사용하여 자동으로 속도가 제한됩니다. 제한은 응답 헤더에서 학습되고 시간이 지남에 따라 조정됩니다.", "defaultSafetyNet": "기본 안전망", "rpm": "RPM", - "minGap": "민갭", + "minGap": "최소 간격", "maxConcurrent": "최대 동시", "activeLimiters": "활성 리미터", "noActiveLimiters": "아직 활성 속도 제한기가 없습니다.", - "reservoir": "저수지", - "running": "달리기", + "reservoir": "리저버", + "running": "실행 중", "queued": "대기 중", "circuitBreakers": "회로 차단기", - "breakerStateClosed": "휴무", - "breakerStateOpen": "열기", + "breakerStateClosed": "닫힘", + "breakerStateOpen": "열림", "breakerStateHalfOpen": "반개방형", "tripped": "{count}이(가) 작동되었습니다.", "healthy": "{count} 건강함", @@ -6623,14 +6623,14 @@ "importDatabase": "데이터베이스 가져오기", "confirmDbImport": "데이터베이스 가져오기 확인", "confirmDbImportDesc": "그러면 모든 현재 데이터가 {file}의 콘텐츠로 대체됩니다. 가져오기 전에 백업이 자동으로 생성됩니다.", - "yesImport": "예, 수입합니다", + "yesImport": "예, 가져옵니다", "lastBackup": "마지막 백업", "noBackupYet": "아직 백업이 없습니다", "backupNow": "지금 백업", "backupRestore": "백업 및 복원", "viewBackups": "백업 보기", "hide": "숨기기", - "backupRetentionDesc": "데이터베이스 스냅샷은 복원 전과 데이터가 변경될 때 15분마다 자동으로 생성됩니다. 보존: 스마트 순환을 통한 24시간 + 30일 백업.", + "backupRetentionDesc": "데이터베이스 스냅샷은 복원 전과 데이터 변경 시 15분마다 자동으로 생성됩니다. 보존: 스마트 순환으로 시간별 백업 24개 + 일별 백업 30개.", "loadingBackups": "백업 로드 중...", "noBackupsYet": "아직 사용할 수 있는 백업이 없습니다. 데이터가 변경되면 백업이 자동으로 생성됩니다.", "backupsAvailable": "{count} 백업 사용 가능", @@ -6649,7 +6649,7 @@ "minutesAgo": "{count}분 전", "hoursAgo": "{count}시간 전", "daysAgo": "{count}일 전", - "backupReasonManual": "매뉴얼", + "backupReasonManual": "수동", "backupReasonPreRestore": "사전 복원", "connectionsCount": "{count, plural, one {# connection} other {# connections}}", "noChangesSinceBackup": "마지막 백업 이후 변경 사항 없음", @@ -6708,10 +6708,10 @@ "resetPricingConfirm": "{provider}의 모든 가격을 기본값으로 재설정하시겠습니까?", "pricingDescInput": "입력: 모델에 전송된 토큰", "pricingDescOutput": "출력: 생성된 토큰", - "pricingDescCached": "캐시됨: 재사용된 입력(입력 속도의 ~50%)", + "pricingDescCached": "캐시됨: 재사용된 입력(입력 요율의 ~50%)", "pricingDescReasoning": "추론: 사고 토큰(출력으로 대체)", "pricingDescCacheWrite": "캐시 쓰기: 캐시 항목 생성(입력으로 대체)", - "pricingDescFormula": "비용 = (입력 × 입력 속도) + (출력 × 출력 속도) + (캐시 × 캐시 속도) 백만 토큰당.", + "pricingDescFormula": "비용 = (입력 × 입력 요율) + (출력 × 출력 요율) + (캐시 × 캐시 요율), 백만 토큰당 기준입니다.", "pricingSettingsTitle": "가격 설정", "totalModels": "총 모델", "active": "활성", @@ -6722,9 +6722,9 @@ "tokenTypes": "토큰 유형", "inputTokenDesc": "표준 프롬프트 토큰", "outputTokenDesc": "완료/응답 토큰", - "cachedTokenDesc": "캐시된 입력 토큰(일반적으로 입력 속도의 50%)", - "reasoningTokenDesc": "특수 추론/사고 토큰(출력 속도로 대체)", - "cacheCreationTokenDesc": "캐시 항목을 생성하는 데 사용되는 토큰(입력 속도로 대체)", + "cachedTokenDesc": "캐시된 입력 토큰(일반적으로 입력 요율의 50%)", + "reasoningTokenDesc": "특수 추론/사고 토큰(출력 요율로 폴백)", + "cacheCreationTokenDesc": "캐시 항목을 생성하는 데 사용되는 토큰(입력 요율로 폴백)", "customPricingNote": "특정 모델의 기본 가격을 재정의할 수 있습니다. 맞춤 재정의는 자동 감지된 가격보다 우선 적용됩니다.", "editPricing": "가격 편집", "viewFullDetails": "전체 세부정보 보기", @@ -6737,7 +6737,7 @@ "echoRequestedModelDesc": "When enabled, the response `model` field echoes the alias or combo name the client requested instead of the upstream model name. Fixes strict clients (e.g. Claude Desktop) that reject a response whose model does not match the request.", "webSearchRouteTitle": "Web search routing", "webSearchRouteDesc": "When a request includes a native web_search tool, route the whole request to this model instead of the default — useful for providers that don't implement Anthropic's web_search server tool. Leave blank to disable.", - "webSearchRoutePlaceholder": "e.g. openrouter,anthropic/claude-3.5-sonnet", + "webSearchRoutePlaceholder": "모델 검색 또는 선택…", "paidModelPatternWarning": "This pattern only matches paid models — enable paid models or adjust the pattern.", "clearLkgpCache": "Clear LKGP Cache", "lkgpCacheCleared": "LKGP cache cleared successfully", @@ -6787,27 +6787,27 @@ "noWildcardAliasesConfigured": "No wildcard aliases configured.", "overview": "Overview", "unknownError": "Unknown Error", - "pricingSourceLiteLLM": "Pricing Source Lite Llm", - "clearSyncedPricingConfirm": "Clear Synced Pricing Confirm", + "pricingSourceLiteLLM": "LiteLLM (커뮤니티)", + "clearSyncedPricingConfirm": "동기화된 가격 데이터를 모두 삭제하시겠습니까? 대신 공급자 기본값이 사용됩니다.", "clearSyncedPricingFailed": "Clear Synced Pricing Failed", - "pricingSourceUser": "Pricing Source User", - "pageDescription": "Page Description", + "pricingSourceUser": "사용자 재정의", + "pageDescription": "애플리케이션 설정, 모델 별칭, 가격 및 라우팅 규칙을 관리합니다", "pricingSyncStatus": "Pricing Sync Status", "whitelist": "Whitelist", "syncDisabled": "Sync Disabled", "pricingLoadFailed": "Pricing Load Failed", - "pricingSyncDescription": "Pricing Sync Description", + "pricingSyncDescription": "정확한 비용 계산을 위해 외부 소스에서 모델 가격을 자동으로 동기화합니다", "clearSyncedPricingSuccess": "Clear Synced Pricing Success", "clearSyncedPricingFailedWithReason": "가격을 삭제하지 못했습니다: {reason}", - "pricingSourceDefault": "Pricing Source Default", + "pricingSourceDefault": "기본 제공 기본값", "pricingSyncSuccess": "Pricing Sync Success", - "enableSyncError": "Enable Sync Error", + "enableSyncError": "가격 동기화를 전환하지 못했습니다", "syncEnabled": "Sync Enabled", "blacklist": "Blacklist", - "pricingSourceModelsDev": "Pricing Source Models Dev", + "pricingSourceModelsDev": "Models.dev", "syncedModels": "Synced Models", "budget": "Budget", - "pricingSyncTitle": "Pricing Sync Title", + "pricingSyncTitle": "가격 동기화", "pricingResetFailedWithReason": "가격 재설정 실패: {reason}", "tab": "Tab", "pricingSavedProvider": "{provider}의 가격이 저장되었습니다.", @@ -6844,14 +6844,14 @@ "compressionModeAggressive": "Aggressive", "compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings", "compressionModeUltra": "Ultra", - "compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication", + "compressionModeUltraDesc": "선택적 로컬 SLM 폴백이 포함된 휴리스틱 토큰 정리", "compressionAggressiveConfig": "공격적인 엔진 구성", "compressionAggressiveConfigDesc": "요약, 도구 압축 및 에이징 임계값을 미세 조정합니다.", "compressionUltraConfig": "울트라 엔진 구성", "compressionUltraConfigDesc": "경험적 정리, SLM 대체 및 메시지별 임계값을 미세 조정합니다.", - "compressionUltraRate": "요금 유지", + "compressionUltraRate": "유지 비율", "compressionUltraMinScore": "최소 점수 기준", - "compressionUltraSlmFallback": "공격적으로 대체", + "compressionUltraSlmFallback": "Aggressive로 폴백", "compressionUltraModelPath": "SLM 모델 경로", "compressionUltraEngine": "울트라 티어", "compressionUltraEngineHeuristic": "휴리스틱 (Tier-A, 기본값)", @@ -6955,7 +6955,7 @@ "routingNeedlesSubstrings": "바늘(일치할 하위 문자열)", "routingCaseSensitive": "대소문자 구분", "routingPrefixes": "접두사", - "routingMatch": "경기", + "routingMatch": "일치", "routingReplacement": "교체", "routingReplaceAllOccurrences": "모든 항목 바꾸기", "routingPatternRegex": "패턴(정규식)", @@ -6970,8 +6970,8 @@ "logsSettingsTitle": "로그 설정", "detailedLogsLabel": "자세한 로그가 활성화되었습니다.", "detailedLogsDesc": "자세한 요청/응답 로깅 활성화", - "callLogPipelineLabel": "통화 기록 파이프라인", - "callLogPipelineDesc": "통화 기록 처리 파이프라인 활성화", + "callLogPipelineLabel": "호출 로그 파이프라인", + "callLogPipelineDesc": "호출 로그 처리 파이프라인 활성화", "maxDetailSizeLabel": "최대 세부정보 크기(KB)", "maxDetailSizeDesc": "자세한 로그 항목의 최대 크기", "ringBufferSizeLabel": "링 버퍼 크기", @@ -6992,18 +6992,18 @@ "appearanceFaviconPreviewAlt": "파비콘 미리보기", "oneproxyLastSync": "마지막 동기화", "oneproxyAllProtocols": "모든 프로토콜", - "oneproxyCountryCodePlaceholder": "국가 코드(예: 미국)", + "oneproxyCountryCodePlaceholder": "국가 코드(예: US)", "oneproxyMinQualityPlaceholder": "최소 품질", "oneproxyLoadingProxies": "프록시 로드 중...", "oneproxyLastSyncLabel": "마지막 동기화:", "oneproxyProxiesFetched": "가져온 프록시:", "oneproxyConsecutiveFailures": "연속 실패:", "oneproxyErrorLabel": "오류:", - "oneproxyNever": "절대로", + "oneproxyNever": "없음", "oneproxySyncStatusTitle": "동기화 상태", "oneproxySuccess": "성공", "oneproxyFailed": "실패", - "routingAntigravitySignatureTitle": "반중력 서명 캐시 모드", + "routingAntigravitySignatureTitle": "Antigravity 서명 캐시 모드", "routingAntigravitySignatureDesc": "OmniRoute가 저장된 Gemini 생각 서명만 재사용할지, 아니면 Antigravity 호환 도구 호출 흐름에서 검증된 클라이언트 제공 서명을 수락할지 제어합니다.", "routingAntigravitySignatureEnabledLabel": "활성화됨", "routingAntigravitySignatureEnabledDesc": "현재 동작입니다. 클라이언트가 제공한 서명을 무시하고 저장된 OmniRoute 흐름을 계속 사용합니다.", @@ -7028,7 +7028,7 @@ "visionBridgeDesc": "이미지 요청을 텍스트 전용 모델로 라우팅하기 전에 자동 vision-to-text 폴백을 실행합니다.", "visionBridgeEnabledLabel": "활성화됨", "visionBridgeEnabledDesc": "이미지 부분을 추출된 텍스트로 대체하는 사전 호출 브릿지를 토글합니다.", - "visionBridgeModel": "교량 모델", + "visionBridgeModel": "브릿지 모델", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "비전을 지원하는 모든 OmniRoute 모델 ID를 여기에 사용할 수 있습니다.", "visionBridgePrompt": "브리지 프롬프트", @@ -7040,9 +7040,9 @@ "resilienceProviderBreakerTitle": "Circuit Breaker per Provider", "resilienceFailureThreshold": "Failure threshold", "resilienceDegradationThreshold": "Degradation threshold", - "resilienceResetTimeout": "시간 초과 재설정", + "resilienceResetTimeout": "재설정 시간 제한", "resilienceFailureThresholdLabel": "실패 임계값", - "resilienceResetTimeoutLabel": "시간 초과 재설정", + "resilienceResetTimeoutLabel": "재설정 시간 제한", "resilienceConnectionCooldownTitle": "Connection Cooldown", "resilienceUseUpstreamRetryHintsLabel": "업스트림 재시도 힌트 사용", "resilienceUseUpstream429BreakerLabel": "업스트림 429 힌트 사용(차단기)", @@ -7092,14 +7092,14 @@ "retentionCompressionAnalytics": "Compression Analytics (days)", "retentionMcpAudit": "MCP 감사(일)", "retentionA2aEvents": "A2A 이벤트(일)", - "retentionCallLogs": "통화 기록(일)", + "retentionCallLogs": "호출 로그(일)", "retentionUsageHistory": "이용내역(일)", "retentionMemoryEntries": "메모리 항목(일)", "retentionXpAuditLog": "XP Audit Log (days)", "saveRetentionSettings": "Save retention settings", - "storageAutoVacuumMode": "자동 진공 모드", - "storageScheduledVacuum": "예약된 진공", - "storageVacuumHour": "진공 시간(0-23)", + "storageAutoVacuumMode": "자동 VACUUM 모드", + "storageScheduledVacuum": "예약된 VACUUM", + "storageVacuumHour": "VACUUM 시간(0-23)", "storagePageSize": "페이지 크기(바이트)", "storageOptimizationSettings": "Optimization Settings", "storageJournalModeNone": "None", @@ -7128,11 +7128,11 @@ "purgeDetailedLogs": "Purge Detailed Logs", "storageDatabaseSize": "데이터베이스 크기", "storagePageCount": "페이지 수", - "storageFreelistCount": "자유 목록 수", - "storageLastVacuum": "마지막 진공", + "storageFreelistCount": "프리리스트 수", + "storageLastVacuum": "마지막 VACUUM", "storageLastOptimization": "마지막 최적화", "storageIntegrityCheck": "무결성 검사", - "storageIntegrityOk": "✓ 알았어", + "storageIntegrityOk": "✓ 정상", "storageIntegrityError": "✗ 오류", "storageUsageTokenBuffer": "사용 토큰 버퍼", "storageUsageTokenBufferDesc": "Extra tokens added to reported usage to account for system prompt overhead.", @@ -7142,7 +7142,7 @@ "redisLauncherDesc": "응답 캐시, 할당량 추적 및 속도 제한을 위해 Redis 7 컨테이너(Podman 또는 Docker)를 원클릭으로 실행합니다.", "redisLauncherRefresh": "새로고침", "redisLauncherStop": "중지", - "redisLauncherLaunching": "실행 중...", + "redisLauncherLaunching": "시작 중...", "redisLauncherLaunch": "Redis 실행", "redisLauncherContainer": "컨테이너", "redisLauncherRunning": "실행 중", @@ -7152,12 +7152,12 @@ "compressionSettingsAutoTriggerMode": "자동 트리거 모드", "compressionSettingsMcpDescriptionCompression": "MCP 설명 압축", "mcpAccessibilityTitle": "MCP 접근성 출력", - "compressionSettingsCavemanIntensity": "원시인의 강도", - "compressionSettingsCavemanOutputMode": "원시인 출력 모드", + "compressionSettingsCavemanIntensity": "케이브맨 강도", + "compressionSettingsCavemanOutputMode": "케이브맨 출력 모드", "compressionSettingsOutputStyles": "출력 스타일", "compressionStylesTileTitle": "출력 스타일", "compressionSettingsOutputIntensity": "출력 강도", - "compressionSettingsAutoClarityBypass": "자동 선명도 우회", + "compressionSettingsAutoClarityBypass": "자동 명확성 우회", "compressionEffectivePipeline": "유효 파이프라인:", "compressionDerivedOff": "꺼짐", "compressionDerivedRuns": "실행: {pipeline}", @@ -7240,14 +7240,14 @@ "description": "한문 초간결 스타일 (중국어만 지원)." } }, - "resilienceWaitForCooldown": "쿨다운을 기다리세요", + "resilienceWaitForCooldown": "쿨다운 대기", "resilienceEnableServerSideWait": "서버측 대기 활성화", "resilienceMaximumRetries": "최대 재시도", "resilienceMaximumWaitPerRetry": "재시도당 최대 대기 시간", "memorySkillsSkillsmpMarketplace": "SkillsMP 마켓플레이스", "memorySkillsFailedToSave": "저장하지 못했습니다.", "memorySkillsApiKey": "API 키", - "memorySkillsActiveSkillsProvider": "활성 기술 제공자", + "memorySkillsActiveSkillsProvider": "활성 스킬 공급자", "cliproxyapiFallback": "CLIProxyAPI 대체", "cliproxyapiEnableFallback": "CLIProxyAPI 대체 활성화", "cliproxyapiUrl": "CLIProxyAPI URL", @@ -7287,7 +7287,7 @@ "maxResponseTokensLabel": "최대 응답 토큰", "maxResponseTokensDesc": "단일 응답에서 허용되는 최대 총 토큰 수입니다.", "modelCooldownsTitle": "쿨다운 중인 모델", - "modelCooldownsEmpty": "현재 대기 중인 모델이 없습니다.", + "modelCooldownsEmpty": "현재 쿨다운 중인 모델이 없습니다.", "modelCooldownsDescription": "실패 후 일시적으로 격리된 모델입니다. 쿨다운이 만료되면 자동으로 복구됩니다.", "modelCooldownsLoadFailed": "쿨다운을 로드하지 못했습니다.", "modelCooldownReactivated": "모델이 다시 활성화되었습니다: {model}", @@ -7305,7 +7305,7 @@ "responsesStateModePreserve": "Preserve", "responsesStateHint": "연결에서 OpenAI Responses 스토리지를 명시적으로 활성화하지 않는 한 Auto는 previous_response_id를 제거합니다. VS Code Custom Endpoint와 같은 상태 비저장 클라이언트에는 Strip이 가장 안전하며, 이 경우 컨텍스트는 전체 기록을 전송하는 클라이언트에 의존합니다.", "responsesStateSaveError": "응답 상태 설정을 업데이트하지 못했습니다.", - "codexFastTierTitle": "코덱스 패스트 티어", + "codexFastTierTitle": "Codex Fast Tier", "codexFastTierDesc": "OpenAI Codex 요청에 대해 service_tier=priority를 전역적으로 삽입합니다.", "codexFastTierHint": "활성화되면 OmniRoute는 아직 계층을 지정하지 않은 연결에 대한 아웃바운드 Codex 요청에 service_tier=priority를 추가합니다. 우선 순위 계층에는 OpenAI Enterprise API 키 또는 ChatGPT 인증 Codex 경로가 필요합니다. 다른 키 유형은 OpenAI로부터 계층 관련 오류를 수신합니다. Codex 공급자 페이지의 연결별 설정이 우선적으로 적용됩니다.", "codexFastTierSaveError": "Codex Fast Tier 설정을 업데이트하지 못했습니다.", @@ -7321,9 +7321,9 @@ "codexFastTierModelsLabel": "Fast 티어 모델", "codexFastTierModelsHint": "Fast Tier가 활성화된 경우 선택된 모델만 service_tier를 받습니다.", "codexFastTierModelCheckbox": "{model}에 Fast Tier 활성화", - "claudeFastModeTitle": "클로드 패스트 모드", - "claudeFastModeDesc": "선택한 Claude 요청을 Anthropic Fast 모드(속도:\"빠름\")로 선택하세요.", - "claudeFastModeHint": "Anthropic은 SDK 스타일 클라이언트에 대한 빠른 모드를 공식적으로 지원하지 않습니다. 활성화되면 OmniRoute는 X-CPA-Force-Fast-Mode 헤더를 전달하므로 쌍을 이루는 CLIProxyAPI 빌드가 진입점 스푸핑을 선택할 수 있습니다. 나열된 Opus 모델만 Anthropic의 클라이언트 측 확인에 의해 통제됩니다. 구독 등급, 최대 요금제 및 빠른 모드 크레딧 잔고는 여전히 서버 측에서 시행됩니다. Anthropic은 토글이 켜져 있어도 out_of_credits를 반환할 수 있습니다.", + "claudeFastModeTitle": "Claude Fast Mode", + "claudeFastModeDesc": "선택한 Claude 요청에 Anthropic Fast Mode(speed:\"fast\")를 적용합니다.", + "claudeFastModeHint": "Anthropic은 SDK 스타일 클라이언트에 대한 Fast Mode를 공식적으로 지원하지 않습니다. 활성화되면 OmniRoute는 X-CPA-Force-Fast-Mode 헤더를 전달하여 쌍을 이루는 CLIProxyAPI 빌드가 진입점 스푸핑을 선택할 수 있도록 합니다. 나열된 Opus 모델만 Anthropic의 클라이언트 측 확인에 의해 통제됩니다. 구독 등급, Max 요금제, Fast Mode 크레딧 잔고는 여전히 서버 측에서 시행되며, 토글이 켜져 있어도 Anthropic이 out_of_credits를 반환할 수 있습니다.", "claudeFastModeModelsLabel": "모델에 적용됨({count})", "claudeFastModeModelCheckbox": "{model}에 대한 빠른 모드 활성화", "claudeFastModeSaveError": "Claude 빠른 모드 설정을 업데이트하지 못했습니다.", @@ -7393,11 +7393,11 @@ "triggerLabel": "트리거", "effectLabel": "효과", "statusEnabled": "활성화됨", - "statusDisabled": "장애인", + "statusDisabled": "비활성화됨", "resilienceRequestQueueScope": "요청당 대기열", - "resilienceRequestQueueTrigger": "상류로 보내기 전에", - "resilienceRequestQueueEffect": "요청을 대기열에 추가하고, 동시성을 제한하고, 통화 공간을 확보합니다.", - "resilienceRequestQueueDesc": "이 레이어는 대기열 및 간격만 제어합니다. 쿨타임이나 개방형 회로 차단기는 저장되지 않습니다.", + "resilienceRequestQueueTrigger": "업스트림으로 보내기 전에", + "resilienceRequestQueueEffect": "요청을 대기열에 추가하고, 동시성을 제한하며, 호출 간격을 둡니다.", + "resilienceRequestQueueDesc": "이 레이어는 대기열 처리와 간격 조절만 제어합니다. 쿨다운을 저장하거나 회로 차단기를 열지는 않습니다.", "resilienceAutoEnableApiKeyProvidersDesc": "활성 API 키 연결에 대해 기본적으로 대기열 보호를 활성화합니다.", "resilienceMaxQueueWait": "최대 대기열 대기 시간", "resilienceConnectionCooldownScope": "개별 연결", @@ -7413,7 +7413,7 @@ "resilienceProviderBreakerEffect": "재설정 시간이 만료될 때까지 해당 공급자를 일시적으로 차단합니다.", "resilienceProviderBreakerDesc": "라이브 차단기 상태는 상태 페이지에만 나타납니다. 연결 범위의 429 속도 제한은 연결 쿨다운 상태로 유지되며 공급자 차단기를 트립하지 않습니다.", "resilienceResetTime": "재설정 시간", - "resilienceWaitForCooldownTitle": "쿨다운을 기다리세요", + "resilienceWaitForCooldownTitle": "쿨다운 대기", "resilienceWaitForCooldownScope": "현재 클라이언트 요청", "resilienceWaitForCooldownTrigger": "모든 후보 연결이 이미 냉각되고 있는 경우", "resilienceWaitForCooldownEffect": "서버에서 기다렸다가 첫 번째 재사용 대기시간이 만료되면 다시 시도합니다.", @@ -7445,7 +7445,7 @@ "sessionAffinityDesc": "모든 제공자에 대해 지정된 초 동안 하나의 대화를 동일한 계정으로 유지합니다. 0으로 설정하면 비활성화됩니다.", "sessionAffinityTtl": "어피니티 TTL(초)", "resetAwareQuotaCacheTitle": "재설정 인식 할당량 캐시", - "resetAwareQuotaCacheDesc": "재설정 인식 주문에 대해서만 할당량 원격 분석을 캐시합니다. 실행 전 할당량은 여전히 ​​요청을 보호합니다. 0/0은 계속 실시간 가져오기를 수행합니다.", + "resetAwareQuotaCacheDesc": "재설정 인식 정렬에만 할당량 원격 분석을 캐시합니다. 할당량 프리플라이트는 여전히 요청을 보호합니다. 0/0은 실시간 가져오기를 유지합니다.", "resetAwareQuotaCacheTtl": "새로운 TTL(초)", "resetAwareQuotaCacheMaxStale": "최대 오래된 시간(초)", "qdrantCleanupSuccess": "확인: {count} 포인트 제거됨(보존 기간: {days}일)", @@ -7545,7 +7545,7 @@ "deduplicateThreshold": "중복 제거 임계값", "customFilters": "맞춤 필터", "detectedType": "감지된 유형", - "confidence": "자신감", + "confidence": "신뢰도", "beforeAfter": "전/후", "trustProjectFilters": "프로젝트 필터 신뢰", "rawOutputRetention": "원시 출력 보존", @@ -7556,7 +7556,7 @@ "filterTesting": "Filter Testing", "pasteOutput": "Paste tool output to test filtering...", "presetHigh": "공격적", - "presetLow": "빛", + "presetLow": "라이트", "presetMaxChars": "최대 출력 문자", "presetMaxLines": "최대 출력 라인", "presetMedium": "표준", @@ -7564,7 +7564,7 @@ "result": "Result", "previewEmpty": "Run a sample to preview RTK output.", "detected": "Detected", - "masterSwitchOffAlert": "Token Saver 마스터 스위치가 OFF 상태입니다 — Endpoint 페이지에서 켤 때까지 이 설정은 요청에 영향을 주지 않습니다.", + "masterSwitchOffAlert": "Token Saver 마스터 스위치가 OFF 상태입니다 — 압축 설정에서 켤 때까지 이 설정은 요청에 영향을 주지 않습니다.", "tokensFiltered": "Tokens filtered", "filtersActive": "Filters active", "requests": "Requests", @@ -8030,7 +8030,7 @@ "labelCompressionRate": "압축 강도", "labelMaxTokens": "메시지당 대상 토큰", "labelMinLength": "최소 메시지 길이", - "labelMinSavings": "저장할 최소 토큰", + "labelMinSavings": "절약할 최소 토큰 수", "enabled": "Enabled", "autoDetect": "Auto-detect language", "rulesCount": "{count} rules", @@ -8040,7 +8040,7 @@ "noAnalytics": "No compression analytics yet.", "masterDisabledWarning": "Token Saver 마스터 스위치가 꺼져 있습니다. 압축 설정에서 켜거나 여기에서 변경하기 전까지는 이 설정이 요청에 영향을 미치지 않습니다.", "outputMode": "출력 모드", - "outputModeDesc": "Instructs the LLM to respond in a terse, compact format.", + "outputModeDesc": "압축된 출력이 표시되는 방식을 제어합니다.", "outputModeTitle": "Output Mode", "quickSettings": "빠른 설정", "quickSettingsDesc": "시작하기 위한 기본 압축 설정", @@ -8053,7 +8053,7 @@ "tooltipCompressionRate": "0.0 = 없음, 1.0 = 최대. 0.5 = 균형.", "tooltipMaxTokens": "압축 후 대상 토큰 수입니다. 낮음 = 더 공격적입니다.", "tooltipMinLength": "이보다 짧은 메시지는 압축되지 않습니다. 낮음 = 더 많은 압축.", - "tooltipMinSavings": "최소한 이만큼의 토큰을 저장하는 경우에만 압축하세요.", + "tooltipMinSavings": "최소한 이만큼의 토큰을 절약할 수 있는 경우에만 압축합니다.", "ultraSettings": "울트라 설정", "ultraSettingsDesc": "SLM 기반 의미 압축", "preview": { @@ -8064,15 +8064,15 @@ }, "translator": { "title": "번역기", - "metaTitle": "번역가 놀이터 | 옴니루트", + "metaTitle": "번역기 플레이그라운드 | OmniRoute", "metaDescription": "공급자 간의 API 형식 변환을 디버그, 테스트 및 시각화합니다.", - "playgroundTitle": "번역가 놀이터", - "playground": "놀이터", + "playgroundTitle": "번역기 플레이그라운드", + "playground": "플레이그라운드", "realtime": "실시간 번역 활동", "chatTester": "채팅 테스터", "testBench": "테스트 벤치", "liveMonitor": "라이브 모니터", - "modeDescriptionPlayground": "API 요청 본문을 붙여넣고 OmniRoute가 이를 공급자 형식(OpenAI ← Claude ← Gemini ← Responses API) 간에 어떻게 변환하는지 확인하세요.", + "modeDescriptionPlayground": "API 요청 본문을 붙여넣고 OmniRoute가 이를 공급자 형식(OpenAI ↔ Claude ↔ Gemini ↔ Responses API) 간에 어떻게 변환하는지 확인하세요.", "modeDescriptionChatTester": "OmniRoute를 통해 실제 채팅 요청을 보내고 전체 왕복(입력, 번역된 요청, 공급자 응답 및 번역된 출력)을 검사합니다.", "modeDescriptionTestBench": "사전 정의된 시나리오를 실행하고 공급자와 모델 간의 호환성을 비교하세요.", "modeDescriptionLiveMonitor": "요청이 OmniRoute를 통해 전달됨에 따라 번역 이벤트를 실시간으로 감시하세요.", @@ -8099,27 +8099,27 @@ "externalApiCalls": "외부 API 호출", "ideCliIntegrations": "IDE/CLI 통합", "inMemoryNote": "참고: 이벤트는 메모리에 저장되며 서버가 다시 시작되면 재설정됩니다.", - "ok": "알았어", + "ok": "정상", "errorShort": "오류", "formatConverter": "형식 변환기", - "formatConverterDescription": "JSON 요청 본문을 붙여넣거나 입력하세요. 변환기는 소스 형식을 자동으로 감지하여 대상 형식으로 변환합니다. 이를 사용하여 OmniRoute가 형식(OpenAI ← Claude ⇔ Gemini ⇔ Responses API) 간 요청을 변환하는 방법을 디버깅합니다.", - "translationPathHubSpoke": "{source} → OpenAI(중급) → {target}", + "formatConverterDescription": "JSON 요청 본문을 붙여넣거나 입력하세요. 변환기는 소스 형식을 자동으로 감지하여 대상 형식으로 변환합니다. 이를 사용하여 OmniRoute가 형식(OpenAI ↔ Claude ↔ Gemini ↔ Responses API) 간 요청을 변환하는 방법을 디버깅할 수 있습니다.", + "translationPathHubSpoke": "{source} → OpenAI(중간 단계) → {target}", "translationPathDirect": "{source} → {target} (직접 번역기)", "translationPathPassthrough": "동일한 형식 - 번역이 필요하지 않습니다.", - "openaiIntermediatePanel": "OpenAI 중급", + "openaiIntermediatePanel": "OpenAI 중간 형식", "autoFeaturesTitle": "OmniRoute가 자동으로 수행하는 작업", "autoFeaturesCount": "8가지 기능", "featureReasoningCache": "추론 캐시", - "featureReasoningCacheDesc": "클라이언트가 대화 기록에서 이를 생략한 경우 사고 모드 모델(DeepSeek V4, Kimi K2, Qwen)에 대해 캐시된 Reasoning_content를 다시 주입합니다.", + "featureReasoningCacheDesc": "클라이언트가 대화 기록에서 생략한 경우 사고 모드 모델(DeepSeek V4, Kimi K2, Qwen)에 대해 캐시된 reasoning_content를 다시 주입합니다.", "featureSchemaCoercion": "스키마 강제", - "featureSchemaCoercionDesc": "손상된 도구 스키마를 수정합니다. 누락된 추가 속성을 추가하고, 긴 설명을 삭제하고, 중첩된 개체를 정규화합니다.", + "featureSchemaCoercionDesc": "손상된 도구 스키마를 수정합니다: 누락된 additionalProperties를 추가하고, 긴 설명을 정리하며, 중첩된 객체를 정규화합니다.", "featureRoleNormalization": "역할 정규화", - "featureRoleNormalizationDesc": "OpenAI가 아닌 대상을 위한 지도 개발자→시스템. 시스템 역할을 지원하지 않는 모델의 경우 시스템→사용자를 매핑합니다.", + "featureRoleNormalizationDesc": "OpenAI가 아닌 대상에는 developer→system으로 매핑합니다. 시스템 역할을 지원하지 않는 모델에는 system→user로 매핑합니다.", "featureToolCallIds": "도구 호출 ID 정규화", "featureToolCallIdsDesc": "누락된 경우 고유한 tool_call ID를 생성합니다. Mistral과 같은 공급자의 경우 9자 형식으로 정규화됩니다.", "featureMissingToolResponse": "도구 응답 주입", "featureMissingToolResponseDesc": "클라이언트가 해당 응답 없이 tool_call을 보낼 때 빈 tool_result 메시지를 삽입합니다.", - "featureThinkingBudget": "생각하는 예산", + "featureThinkingBudget": "사고 예산", "featureThinkingBudgetDesc": "사고 구성을 자동으로 관리합니다. 마지막 메시지가 사용자로부터 온 것이 아닐 때 사고 매개변수를 제거합니다.", "featureDirectPaths": "직접 번역 경로", "featureDirectPathsDesc": "일부 형식 쌍(Claude→Gemini)에는 OpenAI 허브를 우회하는 직접 변환기가 있어 보다 정확한 출력을 생성합니다.", @@ -8129,7 +8129,7 @@ "output": "출력", "auto": "자동", "swapFormats": "형식 교환", - "translateAction": "번역하다", + "translateAction": "번역", "clear": "지우기", "inputPlaceholder": "여기에 요청 본문을 붙여넣거나 아래에서 템플릿을 선택하세요...", "exampleTemplates": "예제 템플릿", @@ -8144,19 +8144,19 @@ "reRun": "재실행", "running": "실행중...", "passed": "합격", - "failed": "실패했다", + "failed": "실패", "passedIconLabel": "✅ 합격", - "chunks": "덩어리", + "chunks": "청크", "scenarioSimpleChat": "간단한 채팅", "scenarioToolCalling": "도구 호출", - "scenarioMultiTurn": "다회전", + "scenarioMultiTurn": "멀티턴", "scenarioThinking": "생각", "scenarioSystemPrompt": "시스템 프롬프트", "scenarioStreaming": "스트리밍", "templateNames": { "simple-chat": "간단한 채팅", "tool-calling": "도구 호출", - "multi-turn": "다회전", + "multi-turn": "멀티턴", "thinking": "생각", "system-prompt": "시스템 프롬프트", "streaming": "스트리밍", @@ -8164,9 +8164,9 @@ "schema-coercion": "스키마 강제" }, "templateDescriptions": { - "simple-chat": "기본 문자 메시지", + "simple-chat": "기본 텍스트 메시지", "tool-calling": "함수/도구 호출", - "multi-turn": "역사와의 대화", + "multi-turn": "기록이 포함된 대화", "thinking": "확장된 사고/추론", "system-prompt": "복잡한 시스템 지침", "streaming": "SSE 스트리밍 요청", @@ -8186,7 +8186,7 @@ "multiTurn": { "system": "당신은 코딩 도우미입니다.", "userInitial": "Python에서 배열을 정렬하는 함수를 작성합니다.", - "assistantExample": "다음은 간단한 정렬 기능입니다. ``파이썬\ndef sort_array(arr): 반환 정렬(arr)\n````", + "assistantExample": "다음은 간단한 정렬 함수입니다: ```python\ndef sort_array(arr): return sorted(arr)\n```", "userFollowUp": "이제 내림차순으로 정렬해 보겠습니다." }, "thinking": { @@ -8211,7 +8211,7 @@ } }, "openaiCompatibleLabel": "OpenAI 호환", - "anthropicCompatibleLabel": "인류 친화적", + "anthropicCompatibleLabel": "Anthropic 호환", "noTemplateForFormat": "이 형식에 대한 템플릿이 없습니다.", "translationFailed": "번역 실패: {error}", "pipelineDebugger": "파이프라인 디버거", @@ -8243,7 +8243,7 @@ "clientRequestDescription": "클라이언트가 보내는 요청 본문", "formatDetected": "형식이 감지되었습니다.", "formatDetectedDescription": "OmniRoute는 요청 구조에서 API 형식을 자동 감지합니다.", - "openaiIntermediate": "OpenAI 중급", + "openaiIntermediate": "OpenAI 중간 형식", "openaiIntermediateDescription": "모든 형식은 먼저 OpenAI 형식(범용 브리지)으로 정규화됩니다.", "providerFormat": "공급자 형식", "providerFormatDescription": "OpenAI 형식은 공급자의 기본 형식으로 변환됩니다.", @@ -8262,15 +8262,15 @@ "eventSourceMainPipeline": "• 기본 요청 파이프라인(CLI/IDE/API 트래픽)", "liveMonitorDescriptionPrefix": "OmniRoute를 통한 API 호출 흐름으로 번역 이벤트를 표시합니다. 이벤트는 메모리 내 버퍼에서 발생합니다(다시 시작 시 재설정). 사용", "liveMonitorDescriptionSuffix": ", 또는 외부 API 호출을 통해 이벤트를 생성합니다.", - "streamTransformer": "스트림 변압기", + "streamTransformer": "스트림 변환기", "modeDescriptionStreamTransformer": "응답 변환기를 통해 채팅 완료 SSE 스트림을 실행합니다.", "streamTransformerTitle": "응답 스트림 변환기", "streamTransformerDescription": "채팅 완료 SSE 스트림을 붙여넣고 OmniRoute의 응답 변환기를 통해 실행한 후 클라이언트에 연결하기 전에 내보낸 response.* 이벤트를 검사합니다.", "loadTextSample": "텍스트 샘플 로드", "loadToolSample": "도구 호출 샘플 로드", - "transformToResponses": "응답으로 변환", + "transformToResponses": "Responses로 변환", "rawChatSseInput": "원시 채팅 완료 SSE", - "transformedResponsesSse": "변환된 응답 API SSE", + "transformedResponsesSse": "변환된 Responses API SSE", "noResultsYet": "아직 결과가 없습니다", "transformedEvents": "변형된 이벤트", "uniqueEventTypes": "고유한 이벤트 유형", @@ -8372,7 +8372,7 @@ "streamTransformFailed": "스트림 변환 실패" }, "usage": { - "title": "사용법", + "title": "사용량", "loggerTab": "로거", "proxyTab": "프록시", "budgetManagement": "예산 관리", @@ -8391,7 +8391,7 @@ "dailyLimitPlaceholder": "예를 들어 5.00", "monthlyLimitPlaceholder": "예를 들어 50.00", "warningThresholdPlaceholder": "80", - "saveLimits": "저장 한도", + "saveLimits": "한도 저장", "budgetOk": "예산 양호 — {remaining} 남음", "budgetExceeded": "예산 초과 - 요청이 차단될 수 있음", "totalRequests": "총 요청수", @@ -8404,12 +8404,12 @@ "systemHealth": "시스템 상태", "entries": "항목", "activeCount": "{count} 활성", - "openCircuitBreakersDetected": "개방형 회로 차단기가 감지되었습니다.", + "openCircuitBreakersDetected": "OPEN 상태의 회로 차단기가 감지되었습니다.", "hitRate": "적중률", - "hitsMisses": "안타/실패", + "hitsMisses": "적중 / 미적중", "circuitBreakers": "회로 차단기", "lockedIPs": "잠긴 IP", - "lockoutsAutoRefreshHint": "모델별 비율 제한 잠금 • 10초 자동 새로고침", + "lockoutsAutoRefreshHint": "모델별 속도 제한 잠금 • 10초 자동 새로고침", "lockedCount": "{count, plural, one {# locked} other {# locked}}", "timeLeft": "{time} 남음", "howItWorks": "작동 방식", @@ -8418,7 +8418,7 @@ "defineStepDescription": "포함, 정규식 또는 정확한 일치와 같은 전략을 사용하여 입력 프롬프트 및 예상 출력 기준으로 테스트 사례를 만듭니다.", "run": "실행", "runStepDescription": "OmniRoute를 통해 LLM 엔드포인트에 대해 테스트 케이스를 실행하세요. 각 사례는 실제 API 요청으로 전송됩니다.", - "evaluate": "평가하다", + "evaluate": "평가", "evaluateStepDescription": "응답은 예상 기준과 비교됩니다. 지연 시간 측정항목과 자세한 피드백을 통해 각 사례의 통과/실패를 확인하세요.", "evalsStrategyContainsLabel": "포함", "evalsStrategyExactLabel": "정확히 일치", @@ -8433,11 +8433,11 @@ "historyColumnPassRate": "통과율", "historyColumnAvgLatencyMs": "평균 지연 시간", "historyColumnCreatedAt": "실행됨", - "evalSuites": "평가 제품군", - "evalSuitesHint": "제품군을 클릭하여 테스트 사례를 본 다음 실행하여 LLM 엔드포인트를 평가하세요.", + "evalSuites": "평가 스위트", + "evalSuitesHint": "스위트를 클릭하여 테스트 케이스를 확인한 다음 실행하여 LLM 엔드포인트를 평가하세요.", "evalsLoading": "평가 모음 로드 중...", - "noEvalSuitesFound": "평가 제품군을 찾을 수 없습니다.", - "noEvalSuitesDescription": "평가 제품군은 API 또는 코드를 통해 정의할 수 있습니다. 포함, 정규식, 정확한 일치 및 사용자 정의 기능과 같은 전략을 사용하여 예상 결과에 대해 모델 출력을 테스트합니다.", + "noEvalSuitesFound": "평가 스위트를 찾을 수 없습니다.", + "noEvalSuitesDescription": "평가 스위트는 API 또는 코드를 통해 정의할 수 있습니다. 포함, 정규식, 정확히 일치, 사용자 정의 함수와 같은 전략을 사용하여 예상 결과에 대해 모델 출력을 테스트합니다.", "columnCase": "케이스", "columnStatus": "상태", "columnLatency": "대기 시간", @@ -8452,7 +8452,7 @@ "statsStrategiesCount": "{count} 전략", "evaluationStrategies": "평가 전략", "modelsUnderTest": "테스트 중인 모델", - "searchSuitesPlaceholder": "제품군 검색...", + "searchSuitesPlaceholder": "스위트 검색...", "passSuffix": "통과", "casesCount": "{count, plural, one {# case} other {# cases}}", "runEval": "평가 실행", @@ -8460,8 +8460,8 @@ "runAllRunning": "모두 실행 중...", "runAllProgress": "{current}/{total} 실행: {name}", "runAllFailedSuites": "{count, plural, one {# suite failed} other {# suites failed}}", - "runAllCompleted": "{suites} 제품군 실행 — {passed} 통과, {failed} 실패", - "runAllCompletedWithFailures": "{completed} 제품군을 실행했습니다. {failedSuites}을(를) 완료하지 못했습니다.", + "runAllCompleted": "{suites}개 스위트 실행 — {passed} 통과, {failed} 실패", + "runAllCompletedWithFailures": "{completed}개 스위트를 실행했습니다. {failedSuites}개는 완료하지 못했습니다.", "runningProgress": "{current}/{total} 실행 중...", "passRate": "합격률", "summaryBreakdown": "{passed} 통과 · {failed} 실패 · 총 {total}", @@ -8479,13 +8479,13 @@ "testCasesCount": "테스트 케이스({count})", "noTestCasesDefined": "정의된 테스트 사례가 없습니다.", "runEvalHint": "LLM 엔드포인트에 대해 모든 사례를 실행하려면 \"평가 실행\"을 클릭하세요. 각 테스트는 OmniRoute를 통해 실제 요청을 보냅니다.", - "notifyNoTestCases": "이 제품군에 대해 정의된 테스트 사례가 없습니다.", + "notifyNoTestCases": "이 스위트에 정의된 테스트 케이스가 없습니다.", "notifyAllCasesPassed": "{total} 건 모두 통과됨 ✅", "notifySomeCasesFailed": "{passed}/{total} 통과, {failed} 실패", "notifyEvalRunFailed": "평가 실행 실패", "notifyEvalTitle": "평가: {name}", "modelEvals": "모델 평가", - "evalsHeroDescription": "사전 정의된 평가 제품군을 실행하여 LLM 엔드포인트를 테스트하고 검증하세요. 각 제품군에는 OmniRoute를 통해 실제 프롬프트를 보내고 예상 기준과 응답을 비교하는 테스트 사례가 포함되어 있어 회귀를 감지하고, 모델을 비교하고, 공급자 전체의 응답 품질을 보장하는 데 도움이 됩니다.", + "evalsHeroDescription": "사전 정의된 평가 스위트를 실행하여 LLM 엔드포인트를 테스트하고 검증하세요. 각 스위트에는 OmniRoute를 통해 실제 프롬프트를 보내고 응답을 예상 기준과 비교하는 테스트 케이스가 포함되어 있어 회귀를 감지하고, 모델을 비교하고, 공급자 전반의 응답 품질을 보장하는 데 도움이 됩니다.", "qualityValidation": "품질 검증", "modelComparison": "모델 비교", "regressionDetection": "회귀 감지", @@ -8497,8 +8497,8 @@ "sessionsHint": "세션은 프록시를 통한 요청 흐름으로 나타납니다.", "sessionsTrackedHint": "요청 핑거프린팅을 통해 추적됨 • 자동 새로고침 5초", "session": "세션", - "age": "나이", - "requests": "요청사항", + "age": "경과 시간", + "requests": "요청", "connection": "연결", "durationMillisecondsShort": "{value}ms", "durationSecondsShort": "{value}s", @@ -8524,14 +8524,14 @@ "modelQuotas": "모델 할당량", "lastUsed": "Last Refreshed", "actions": "작업", - "refreshQuota": "새로고침 할당량", + "refreshQuota": "할당량 새로고침", "today": "오늘", "tomorrow": "내일", "dayTimeFormat": "{day}, {time}", - "inDuration": "{duration}에서", + "inDuration": "{duration} 후", "notApplicable": "해당 없음", - "rawPlanWithValue": "기본 계획: {plan}", - "noPlanFromProvider": "공급자의 계획 없음", + "rawPlanWithValue": "원시 플랜: {plan}", + "noPlanFromProvider": "공급자에서 제공한 플랜 없음", "tokenExpiresIn": "토큰이 {time} 후에 만료됨", "tokenExpired": "토큰 만료됨", "noQuotaData": "할당량 데이터 없음", @@ -8592,15 +8592,15 @@ "resetCreditRedeemFailed": "재설정 크레딧을 사용하지 못했습니다", "suiteBuilderSaveFailed": "Failed to save suite", "clone": "클론", - "exportSuite": "수출", + "exportSuite": "내보내기", "importSuite": "가져오기", - "suiteExported": "내보낸 제품군", - "suiteExportFailed": "제품군을 내보내지 못했습니다.", - "suiteImportReady": "검토를 위해 도구 모음 가져오기 로드됨", - "suiteImportFailed": "제품군을 가져오지 못했습니다.", + "suiteExported": "스위트를 내보냈습니다.", + "suiteExportFailed": "스위트를 내보내지 못했습니다.", + "suiteImportReady": "검토를 위해 스위트 가져오기가 로드되었습니다.", + "suiteImportFailed": "스위트를 가져오지 못했습니다.", "suiteImportInvalid": "잘못된 평가 모음 JSON", "suiteBuilderCloneSuffix": "복사", - "suiteBuilderImportedSuite": "수입 제품군", + "suiteBuilderImportedSuite": "가져온 스위트", "scorecardTitle": "Scorecard", "evalApiKey": "API Key", "scorecardPassRate": "Pass Rate", @@ -8643,10 +8643,10 @@ "recentRunsTitle": "Recent Runs", "suiteBuilderCaseSystemPromptLabel": "System Prompt", "suiteBuilderCaseExpectedPlaceholder": "e.g. def fibonacci", - "suiteBuilderCaseExpectedPlaceholderContains": "예를 들어 데프 피보나치", + "suiteBuilderCaseExpectedPlaceholderContains": "예: def fibonacci", "suiteBuilderCaseExpectedPlaceholderExact": "예상되는 정확한 응답을 붙여넣으세요.", "suiteBuilderCaseExpectedPlaceholderRegex": "예를 들어 ^\\\\s*\\\\{.*\\\\}\\\\s*$", - "suiteBuilderCaseExpectedHintRegex": "슬래시를 줄 바꿈하지 않고 JavaScript 정규 표현식을 사용하십시오.", + "suiteBuilderCaseExpectedHintRegex": "양쪽을 슬래시로 감싸지 않은 JavaScript 정규 표현식을 사용하세요.", "suiteBuilderNamePlaceholder": "e.g. Coding Quality Suite", "suiteBuilderAddCase": "Add Case", "cancel": "Cancel", @@ -8660,7 +8660,7 @@ "resultErrorLabel": "Error", "suiteBuilderBuiltInBadge": "Built-in", "suiteBuilderCaseCardTitle": "Test Case", - "suiteBuilderDuplicateCase": "중복", + "suiteBuilderDuplicateCase": "복제", "weeklyLimitPlaceholder": "e.g. 50.00", "suiteBuilderCaseTagsHint": "Comma-separated tags for organizing test cases.", "notifyEvalRunFailedWithReason": "Evaluation failed: {reason}", @@ -8698,7 +8698,7 @@ "targetComparisonHint": "Side-by-side comparison of evaluation results between targets.", "compareCompletedWithScore": "Comparison completed — {score}% pass rate", "staleQuotaTooltip": "Last refresh failed — showing cached data", - "quotaThresholdLabel": "분 남음", + "quotaThresholdLabel": "최소 잔여", "quotaCutoffsColumnHelp": "남은 할당량이 이 비율 이하로 떨어지면 요청을 중지합니다.", "quotaCutoffsButtonDefault": "기본값", "quotaCutoffsButtonHelp": "이 계정의 최소 남은 할당량 기준을 편집하세요.", @@ -8708,17 +8708,17 @@ "accountActivated": "계정이 활성화되었습니다", "accountDeactivated": "계정이 비활성화되었습니다", "toggleActiveFailed": "계정 상태를 업데이트하지 못했습니다", - "quotaCutoffsTitle": "{name}({provider})에 대한 할당량 마감", + "quotaCutoffsTitle": "{name}({provider})의 할당량 컷오프", "quotaCutoffsExplainer": "각 할당량 창에 대해 이 계정이 선택되지 않는 최소 남은 할당량 비율을 재정의합니다. 공급자 기본값을 상속하려면 비워 두세요.", - "quotaCutoffsDefaultHint": "남은 기본 분: {default}%", + "quotaCutoffsDefaultHint": "기본 최소 잔여: {default}%", "quotaCutoffsResetAll": "모두 재설정", "quotaCutoffsNoWindows": "이 계정에는 아직 할당량 기간이 없습니다.", "quotaThresholdInvalid": "0부터 100까지의 정수를 입력하세요.", "budgetKpiToday": "오늘", "budgetKpiThisMonth": "이번 달", - "budgetKpiProjEom": "EOM 프로젝트", + "budgetKpiProjEom": "월말 예상", "budgetKpiBlocked": "차단됨", - "budgetKpiAtRisk": "위험에 처하다", + "budgetKpiAtRisk": "위험", "budgetKpiActiveKeys": "활성 키", "budgetPageTitle": "예산", "budgetPageDescription": "각 API 키에 대한 일일, 주간 및 월간 지출 한도를 설정합니다.", @@ -8752,20 +8752,20 @@ "budgetColumnToday": "오늘", "budgetColumnMonth": "이번 달", "budgetColumnStatus": "상태", - "budgetSearchKeysPlaceholder": "검색 키...", + "budgetSearchKeysPlaceholder": "키 검색...", "budgetSortPctUsed": "정렬: 사용률 ↓", "budgetSortTodayDollar": "정렬: 오늘 $ ↓", "budgetSortMonthDollar": "정렬: 월 $ ↓", "budgetSortNameAZ": "정렬: 이름(A~Z)", - "budgetColDailyLim": "데일리림", - "budgetColMonthlyLim": "월간 리미트", + "budgetColDailyLim": "일일 한도", + "budgetColMonthlyLim": "월간 한도", "budgetColUsedPct": "사용률(%)", "percentUsed": "{pct}% 사용됨", "budgetLoading": "로드 중…", - "budgetNoKeysMatch": "키 일치 필터가 없습니다.", + "budgetNoKeysMatch": "필터와 일치하는 키가 없습니다.", "budgetLinearExtrapolation": "선형 외삽", "budgetThisMonthSoFar": "이번달 현재까지", - "budgetProjectedEndOfMonth": "이달말 예정", + "budgetProjectedEndOfMonth": "이번 달 말 예상", "budgetByProvider": "공급자별", "budgetProjection": "예상치", "budgetAboveMonthlyLimit": "⚠ {limit}/월 초과", @@ -8782,7 +8782,7 @@ "budgetMonthlyDollar": "월 $", "budgetWarnAtPct": "%로 경고", "quotaAlerts": "할당량 알림", - "quotaTableRefreshing": "⟳ 상쾌하다...", + "quotaTableRefreshing": "⟳ 새로고침 중...", "noSpendLast30Days": "지난 30일 동안 지출이 없습니다.", "updatedShort": "업데이트됨", "lastRefreshed": "마지막 새로고침", @@ -8797,16 +8797,16 @@ "connectedSuccess": "성공적으로 연결되었습니다!", "connectionFailed": "연결 실패", "chooseAuthMethod": "인증 방법을 선택하세요:", - "awsBuilderId": "AWS 빌더 ID", + "awsBuilderId": "AWS Builder ID", "awsIamIdentity": "AWS IAM 자격 증명 센터", "googleAccount": "구글 계정", "githubAccount": "GitHub 계정", "importToken": "토큰 가져오기", "pasteToken": "Kiro IDE에서 새로 고침 토큰을 붙여넣습니다.", - "awsRegion": "AWS 지역", + "awsRegion": "AWS 리전", "autoDetecting": "토큰 자동 감지 중...", "readingFromCache": "AWS SSO 캐시에서 읽기", - "readingFromCursor": "커서 IDE 데이터베이스에서 읽기", + "readingFromCursor": "Cursor IDE 데이터베이스에서 읽기", "initializing": "초기화 중...", "pricingConfig": "가격 구성", "loadingPricing": "가격 데이터 로드 중...", @@ -8832,11 +8832,11 @@ "level": "레벨", "directNative": "직접(네이티브)", "combo": "콤보", - "inputTokens": "나:", - "outputTokens": "아:" + "inputTokens": "I:", + "outputTokens": "O:" }, "stats": { - "usageOverview": "사용법 개요", + "usageOverview": "사용량 개요", "outputTokens": "출력 토큰", "totalCost": "총 비용", "usageByModel": "모델별 사용량", @@ -8844,7 +8844,7 @@ "failedToLoad": "사용 통계를 로드하지 못했습니다.", "tokenHealth": "토큰 상태", "totalOAuth": "총 OAuth", - "healthy": "건강하다", + "healthy": "정상", "warning": "경고", "errored": "오류 발생", "lastCheck": "마지막 확인", @@ -8902,14 +8902,14 @@ "fileLabelSuffix": "파일:", "newPasswordPlaceholder": "your_new_password", "deleteSettingsFile": "삭제", - "orRemovePasswordHashField": "또는 PasswordHash 필드를 제거하세요.", + "orRemovePasswordHashField": "또는 passwordHash 필드를 제거하세요", "restartServerWithNewPassword": "서버를 다시 시작하세요. 새 비밀번호가 사용됩니다.", "backToLogin": "로그인으로 돌아가기", "forgotPassword": "비밀번호를 잊으셨나요?", "continueWithOidc": "OIDC로 계속하기", "defaultPasswordHint": "Default password: CHANGEME (unless INITIAL_PASSWORD was set)", "Authorization": "승인", - "Content-Disposition": "컨텐츠 처리", + "Content-Disposition": "Content-Disposition", "waitingForAuthorization": "Waiting for authorization...", "waitingForGoogleAuthorization": "Waiting for Google authorization...", "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...", @@ -8922,8 +8922,8 @@ "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." }, "landing": { - "brandName": "옴니루트", - "navigateHome": "집으로 이동", + "brandName": "OmniRoute", + "navigateHome": "홈으로 이동", "toggleMenu": "토글 메뉴", "featuresLink": "특징", "docsLink": "문서", @@ -8956,7 +8956,7 @@ "howItWorksDescription": "데이터는 귀하의 애플리케이션에서 당사의 지능형 라우팅 계층을 통해 작업에 가장 적합한 제공업체로 원활하게 흐릅니다.", "howItWorksStep1Title": "1. CLI 및 SDK", "howItWorksStep1Description": "귀하의 요청은 귀하가 선호하는 도구 또는 당사의 통합 SDK에서 시작됩니다. 기본 URL만 변경하면 됩니다.", - "howItWorksStep2Title": "2. 옴니루트 허브", + "howItWorksStep2Title": "2. OmniRoute 허브", "howItWorksStep2Description": "우리 엔진은 프롬프트를 분석하고 공급자 상태를 확인하며 지연 시간이나 비용이 가장 낮은 경로를 지정합니다.", "howItWorksStep3Title": "3. AI 제공업체", "howItWorksStep3Description": "요청은 OpenAI, Anthropic, Gemini 등이 즉시 이행합니다.", @@ -8977,26 +8977,26 @@ "readyToRoute": "라우팅 준비 완료! ✓", "configureProvidersNote": "📝 대시보드에서 공급자를 구성하거나 환경 변수를 사용하세요.", "dataLocation": "데이터 위치:", - "dataLocationMacLinux": "맥OS/리눅스:", - "dataLocationWindows": "윈도우:", + "dataLocationMacLinux": "macOS/Linux:", + "dataLocationWindows": "Windows:", "product": "제품", "dashboardLink": "대시보드", "changelog": "변경 내역", "resources": "자원", "documentation": "문서", "npm": "NPM", - "legal": "법적", + "legal": "법적 고지", "mitLicense": "MIT 라이센스", "footerTagline": "AI 생성을 위한 통합 엔드포인트입니다. AI 공급자를 쉽게 연결하고 라우팅하고 관리하세요.", "copyright": "© {year} OmniRoute. 모든 권리 보유.", - "flowToolClaudeCode": "클로드 코드", - "flowToolOpenAICodex": "오픈AI 코덱스", - "flowToolCline": "클라인", - "flowToolCursor": "커서", - "flowProviderOpenAI": "오픈AI", - "flowProviderAnthropic": "인류학", - "flowProviderGemini": "쌍둥이자리", - "flowProviderGithubCopilot": "GitHub 코파일럿", + "flowToolClaudeCode": "Claude Code", + "flowToolOpenAICodex": "OpenAI Codex", + "flowToolCline": "Cline", + "flowToolCursor": "Cursor", + "flowProviderOpenAI": "OpenAI", + "flowProviderAnthropic": "Anthropic", + "flowProviderGemini": "Gemini", + "flowProviderGithubCopilot": "GitHub Copilot", "interactiveDiagram": "데스크탑에 표시되는 대화형 다이어그램", "ctaTitle": "AI 인프라를 단순화할 준비가 되셨나요?", "ctaDescription": "OmniRoute를 통해 AI 통합을 간소화하는 개발자와 함께하세요. 오픈 소스이며 무료로 시작할 수 있습니다.", @@ -9016,7 +9016,7 @@ "apiReference": "API 참조", "managementApiReference": "Management API Reference", "managementApiDescription": "Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.", - "method": "방법", + "method": "메서드", "path": "경로", "notes": "메모", "modelPrefixes": "모델 접두어", @@ -9045,12 +9045,12 @@ "quickStartStep4Suffix": "예를 들어 공급자 접두사를 사용하십시오.", "deploySetupTitle": "설정 가이드", "deploySetupText": "OmniRoute에 대한 단계별 설치, 환경 구성 및 첫 실행 연습입니다.", - "deployElectronTitle": "전자 데스크탑", + "deployElectronTitle": "Electron 데스크톱", "deployElectronText": "Windows, macOS 및 Linux에서 기본 데스크톱 애플리케이션으로 OmniRoute를 실행하세요.", - "deployDockerTitle": "도커", + "deployDockerTitle": "Docker", "deployDockerText": "Docker Compose를 사용한 컨테이너화된 배포 프로덕션 스택과 Kubernetes를 위한 준비가 되어 있습니다.", "deployVmTitle": "가상 머신", - "deployVmText": "모든 Linux VM의 자체 호스트. 시스템 단위, 로그 회전 및 백업 도구가 포함됩니다.", + "deployVmText": "모든 Linux VM에서 자체 호스팅하세요. systemd 유닛, 로그 로테이션 및 백업 도구가 포함되어 있습니다.", "deployFlyTitle": "Fly.io", "deployFlyText": "하나의 fly.toml과 단일 배포 명령을 사용하여 Fly.io 엣지 런타임에 배포하세요.", "deployPwaTitle": "PWA", @@ -9085,7 +9085,7 @@ "useCaseFallbackText": "대시보드에서 콤보 모델을 생성하고 공급자가 내부적으로 순환하는 동안 클라이언트 구성을 안정적으로 유지하세요.", "useCaseUsageVisibilityTitle": "사용량, 비용 및 디버그 가시성", "useCaseUsageVisibilityText": "사용량 및 분석 탭에서 공급자, 계정, API 키별로 토큰과 비용을 추적하세요.", - "clientCherryStudioTitle": "체리 스튜디오", + "clientCherryStudioTitle": "Cherry Studio", "baseUrlLabel": "기본 URL", "chatEndpointLabel": "채팅 엔드포인트", "modelRecommendationLabel": "모델 권장사항: 명시적 접두사", @@ -9093,15 +9093,15 @@ "clientCodexBullet1": "다음과 함께 모델 ID를 사용하세요.", "clientCodexBullet2": "Codex 계열 모델은 다음으로 자동 라우팅됩니다.", "clientCodexBullet3": "비 Codex 모델은 계속됩니다", - "clientCursorTitle": "커서 IDE", + "clientCursorTitle": "Cursor IDE", "clientCursorBullet1": "사용", - "clientCursorBullet1Suffix": "커서 모델의 접두사.", + "clientCursorBullet1Suffix": "Cursor 모델의 접두사.", "clientCursorBullet2": "OAuth 연결 - 공급자 페이지에서 로그인합니다.", - "clientClaudeTitle": "클로드 코드 / 반중력", + "clientClaudeTitle": "Claude Code / Antigravity", "clientClaudeBullet1Prefix": "사용", - "clientClaudeBullet1Middle": "(클로드) 또는", - "clientClaudeBullet1Suffix": "(반중력) 접두사.", - "clientWindsurfTitle": "윈드서핑", + "clientClaudeBullet1Middle": "(Claude) 또는", + "clientClaudeBullet1Suffix": "(Antigravity) 접두사.", + "clientWindsurfTitle": "Windsurf", "clientWindsurfBullet1": "OmniRoute를 OpenAI 호환 기본 URL로 사용하고 결정적 라우팅을 위해 명시적인 공급자 접두사를 유지하세요.", "clientWindsurfBullet2": "일반 트래픽의 경우 모델이 '/v1/chat/completions'을 가리키고 Codex 스타일 흐름의 경우 '/v1/responses'를 유지합니다.", "clientWindsurfBullet3": "미리 만들어진 Windsurf 구성 가이드를 보려면 대시보드 -> CLI 도구를 사용하세요.", @@ -9109,7 +9109,7 @@ "clientClineBullet1": "Cline은 명시적인 공급자/모델 접두사와 함께 가장 잘 작동하므로 라우터는 백엔드를 추측할 필요가 없습니다.", "clientClineBullet2": "일반 모델에는 `/v1/chat/completions`를 사용하고 여러 계정에서 동일한 OmniRoute 기본 URL을 재사용합니다.", "clientClineBullet3": "Cline 런타임 문제를 디버깅하기 전에 공급자 대시보드를 사용하여 OAuth/API 키를 검증하세요.", - "clientKimiTitle": "키미코딩", + "clientKimiTitle": "Kimi Coding", "clientKimiBullet1": "아래에서 계정이나 공급자 콤보를 순환하면서 OmniRoute를 안정적인 기본 URL로 사용하세요.", "clientKimiBullet2": "대체 및 감사 추적이 명시적으로 유지되도록 코딩 흐름에서 접두사가 붙은 모델을 선호합니다.", "clientKimiBullet3": "도구를 사용하는 클라이언트에 대해 기본 응답 스타일 라우팅을 원할 경우 `/v1/responses`를 사용하세요.", @@ -9136,9 +9136,9 @@ "endpointSpeechNote": "음성 합성 (ElevenLabs, OpenAI TTS).", "endpointEmbeddingsNote": "텍스트 임베딩 생성 (OpenAI, Cohere, Voyage).", "endpointImagesNote": "이미지 생성(NanoBanana).", - "endpointRewriteChatNote": "/v1이 없는 클라이언트용 도우미를 다시 작성합니다.", - "endpointRewriteResponsesNote": "/v1 없이 응답에 대한 도우미를 다시 작성합니다.", - "endpointRewriteModelsNote": "/v1 없이 모델 검색을 위한 도우미를 다시 작성합니다.", + "endpointRewriteChatNote": "/v1이 없는 클라이언트를 위한 재작성(rewrite) 도우미입니다.", + "endpointRewriteResponsesNote": "/v1이 없는 Responses 요청을 위한 재작성(rewrite) 도우미입니다.", + "endpointRewriteModelsNote": "/v1이 없는 모델 검색을 위한 재작성(rewrite) 도우미입니다.", "mgmtProxiesListNote": "List saved proxy registry items (supports pagination).", "mgmtProxiesCreateNote": "Create a reusable proxy item in the registry.", "mgmtProxiesHealthNote": "Get 24h/rolling health metrics per saved proxy from proxy logs.", @@ -9163,7 +9163,7 @@ "endpointSearchAnalyticsNote": "검색 요청에 대한 분석 및 측정항목입니다.", "endpointVideoNote": "비디오 생성(ComfyUI, SD WebUI 워크플로우)", "endpointMusicNote": "ComfyUI 워크플로우를 통한 음악 생성.", - "endpointMessagesNote": "인류의 기본 메시지 끝점.", + "endpointMessagesNote": "Anthropic 네이티브 메시지 엔드포인트입니다.", "endpointCountTokensNote": "특정 메시지 페이로드에 대한 토큰을 계산합니다.", "endpointFilesNote": "다중 모드 입력을 위한 파일 업로드.", "endpointBatchesNote": "대량 API 요청에 대한 일괄 처리.", @@ -9185,7 +9185,7 @@ "mcpToolsRoutingTitle": "라우팅 및 검색", "mcpToolsRoutingDesc": "상태 확인, 콤보 관리, 할당량 모니터링, 비용 보고 및 모델 카탈로그 액세스.", "mcpToolsOperationsTitle": "운영 및 전략", - "mcpToolsOperationsDesc": "경로 시뮬레이션, 예산 경비, 전략 전환, 탄력성 프로필 및 공급자 지표.", + "mcpToolsOperationsDesc": "경로 시뮬레이션, 예산 가드, 전략 전환, 복원력 프로필 및 공급자 지표.", "mcpToolsCacheTitle": "캐시 관리", "mcpToolsCacheDesc": "캐시 통계를 보고 의미 체계 또는 서명 캐시를 플러시합니다.", "mcpToolsCompressionTitle": "압축 엔진", @@ -9223,15 +9223,15 @@ "clearHistory": "언제든지 사용 내역 지우기", "configureRetention": "로그 보존 정책 구성", "backupRestore": "데이터베이스 백업 및 복원", - "privacyMetadataTitle": "개인정보 보호정책 | 옴니루트", + "privacyMetadataTitle": "개인정보 보호정책 | OmniRoute", "privacyMetadataDescription": "OmniRoute AI API 프록시 라우터에 대한 개인정보 보호정책.", - "termsMetadataTitle": "서비스 약관 | 옴니루트", + "termsMetadataTitle": "서비스 약관 | OmniRoute", "termsMetadataDescription": "OmniRoute AI API 프록시 라우터에 대한 서비스 약관입니다.", - "backToHome": "집으로 돌아가기", + "backToHome": "홈으로 돌아가기", "lastUpdated": "최종 업데이트: {date}", "policyLastUpdatedDate": "2026년 2월 13일", "listSeparator": "-", - "questionsVisit": "질문이 있으신가요? 우리를 방문하세요", + "questionsVisit": "질문이 있으신가요? 다음을 방문하세요:", "githubRepository": "GitHub 저장소", "privacySection1Title": "1. 로컬 우선 아키텍처", "privacySection1Text": "OmniRoute는 로컬 우선 애플리케이션으로 설계되었습니다. 모든 데이터 처리 및 저장은 전적으로 귀하의 컴퓨터에서 이루어집니다. 귀하의 정보를 수집하는 중앙 집중식 서버가 없습니다.", @@ -9246,7 +9246,7 @@ "privacySection4Title": "4. 제3자 AI 제공업체", "privacySection4Text": "OmniRoute를 통해 API 호출을 수행하면 요청은 구성한 AI 공급자(예: OpenAI, Anthropic, Google)로 전달됩니다. 이러한 제공업체는 귀하의 데이터를 처리하는 방법을 관리하는 자체 개인 정보 보호 정책을 가지고 있습니다. 검토해 주십시오:", "privacyOpenAiPolicy": "OpenAI 개인정보 보호정책", - "privacyAnthropicPolicy": "인류학적 개인정보 보호정책", + "privacyAnthropicPolicy": "Anthropic 개인정보 보호정책", "privacyGooglePolicy": "Google 개인정보 보호정책", "privacySection5Title": "5. 클라우드 동기화(선택 사항)", "privacySection5Text": "선택적 클라우드 동기화 기능을 활성화하면 공급자 구성 및 API 키가 구성된 클라우드 엔드포인트로 전송될 수 있습니다. 이 기능은 기본적으로 비활성화되어 있으며 명시적인 선택이 필요합니다.", @@ -9302,19 +9302,19 @@ "setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.", "setupGuideCommandMissingTitle": "Fix 'command not found'", "setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh.", - "cliToolsRedirectTitle": "Cli Tools Redirect Title", - "cliToolsRedirectDesc": "Cli Tools Redirect Desc", - "spawnArgsPlaceholder": "Spawn Args Placeholder", - "binaryNamePlaceholder": "Binary Name Placeholder", - "versionCommandPlaceholder": "Version Command Placeholder", - "architectureTitle": "Architecture Title", - "flowLocalBinary": "Flow Local Binary", - "flowOmniRoute": "Flow Omni Route", - "agentNamePlaceholder": "Agent Name Placeholder", - "architectureDescription": "Architecture Description", - "flowExecute": "Flow Execute", - "flowSpawn": "Flow Spawn", - "cliToolsRedirectCta": "Cli Tools Redirect Cta", + "cliToolsRedirectTitle": "IDE를 구성하려고 하시나요?", + "cliToolsRedirectDesc": "Claude Code, Cursor, Codex 또는 다른 IDE가 OmniRoute를 프록시로 사용하도록 설정하려면 CLI 도구 페이지로 이동하세요. 이 페이지는 그 반대로, OmniRoute가 로컬 CLI 바이너리를 실행 대상으로 삼아 요청을 라우팅하도록 하는 기능을 위한 것입니다.", + "spawnArgsPlaceholder": "예: --quiet, --json, --no-auto-commits", + "binaryNamePlaceholder": "예: my-agent 또는 /usr/local/bin/llm-cli", + "versionCommandPlaceholder": "예: my-agent --version", + "architectureTitle": "에이전트 대상의 작동 방식", + "flowLocalBinary": "3 · 자체 인증을 사용하는 CLI 프로세스", + "flowOmniRoute": "1 · 요청이 OmniRoute에 도착", + "agentNamePlaceholder": "예: My Custom Agent", + "architectureDescription": "요청이 도착하면 OmniRoute는 로컬 CLI 바이너리(예: claude, codex, goose)를 실행하여 요청을 전달할 수 있습니다. CLI는 자체 자격 증명으로 요청을 처리하고 결과를 OmniRoute를 통해 반환합니다.", + "flowExecute": "4 · 클라이언트에 응답 반환", + "flowSpawn": "2 · OmniRoute가 로컬 바이너리 실행", + "cliToolsRedirectCta": "CLI 도구로 이동 →", "comparisonTitle": "CLI 도구와 에이전트 대상 — 차이점은 무엇입니까?", "comparisonCliToolsLabel": "CLI 도구 페이지", "comparisonCliToolsTitle": "IDE는 OmniRoute를 통해 요청을 보냅니다.", @@ -9326,7 +9326,7 @@ "agentUseCaseHint": "ACP 프로토콜을 통해 실행 대상으로 사용 가능", "flowDiagramClient": "클라이언트 앱", "flowDiagramClientDesc": "SDK, API 또는 업스트림 서비스", - "flowDiagramOmniRoute": "옴니루트", + "flowDiagramOmniRoute": "OmniRoute", "flowDiagramOmniRouteDesc": "요청을 받고 대상을 선택합니다.", "flowDiagramSpawn": "스폰 프로세스", "flowDiagramSpawnDesc": "stdio를 통해 CLI 바이너리 실행", @@ -9364,11 +9364,11 @@ "newTaskDescription": "클라우드 에이전트로 새 작업 시작", "selectAgent": "에이전트 선택", "taskDescription": "작업 설명", - "taskDescriptionPlaceholder": "상담원에게 원하는 작업을 설명하세요.", + "taskDescriptionPlaceholder": "에이전트가 수행할 작업을 설명하세요...", "startTask": "작업 시작", "tasks": "작업", "taskDetail": "작업 세부정보", - "noTasks": "아직 작업이 없습니다. 시작하려면 계정을 만드세요.", + "noTasks": "아직 작업이 없습니다. 시작하려면 작업을 만드세요.", "noTasksTitle": "아직 작업이 없습니다", "noTasksDesc": "시작하려면 첫 번째 작업을 생성하세요.", "tasksTab": "작업", @@ -9399,19 +9399,19 @@ "planReady": "계획 승인 준비 완료", "approvePlan": "계획 승인", "rejectPlan": "거부 및 취소", - "sendMessagePlaceholder": "상담원에게 메시지를 보내세요...", + "sendMessagePlaceholder": "에이전트에게 메시지를 보내세요...", "cancel": "취소", "delete": "삭제", "selectTaskPrompt": "세부정보를 보려면 작업을 선택하세요.", "statusPending": "보류 중", - "statusRunning": "달리기", + "statusRunning": "실행 중", "statusWaitingApproval": "승인 대기 중", "statusCompleted": "완료됨", "statusFailed": "실패", "statusCancelled": "취소됨", "repositoryName": "저장소 이름", "repositoryUrl": "저장소 URL", - "branch": "지점", + "branch": "브랜치", "agentDescriptions": { "jules": "Google의 자율 코딩 에이전트", "devin": "Cognition의 AI 소프트웨어 엔지니어", @@ -9453,7 +9453,7 @@ "userGreeting": "안녕하세요! 오늘은 무엇을 도와드릴까요?" }, "streaming": { - "prompt": "에 관한 이야기를 써 보세요." + "prompt": "다음 주제에 관한 이야기를 써 보세요:" }, "systemPrompt": { "question": "삶의 의미는 무엇입니까?", @@ -9571,7 +9571,7 @@ "disabled": "Disabled", "totalRequests": "Total Requests", "reasoningCache": "추론 재생", - "reasoningCacheDesc": "다중 회전 도구 호출 흐름에 대한 모델 사고를 유지합니다.", + "reasoningCacheDesc": "멀티턴 도구 호출 흐름을 위해 모델의 사고 과정을 유지합니다.", "reasoningEntries": "활성 항목", "reasoningReplayRate": "재생률", "reasoningReplays": "총 리플레이", @@ -9581,12 +9581,12 @@ "reasoningByModel": "모델별", "reasoningRecentEntries": "최근 항목", "reasoningToolCallId": "도구 호출 ID", - "reasoningChars": "캐릭터", - "reasoningAge": "나이", + "reasoningChars": "문자 수", + "reasoningAge": "경과 시간", "reasoningView": "보기", "reasoningDetail": "추론 내용", "reasoningBehavior": "행동", - "reasoningBehaviorCapture": "스트리밍 응답에서 Reasoning_content를 캡처합니다.", + "reasoningBehaviorCapture": "스트리밍 응답에서 reasoning_content를 캡처합니다.", "reasoningBehaviorReplay": "클라이언트가 생략하면 다음 턴에 다시 주입합니다.", "reasoningBehaviorFallback": "충돌 복구를 위한 SQLite 대체 기능을 갖춘 메모리 우선", "reasoningBehaviorTtl": "TTL: 2시간 | 최대 항목: 2,000(메모리)", @@ -9612,7 +9612,7 @@ "levelGlobal": "글로벌", "levelProvider": "공급자", "levelCombo": "콤보", - "levelKey": "열쇠", + "levelKey": "키", "levelDirect": "직접(프록시 없음)", "titleGlobal": "글로벌 프록시 구성", "titleLevel": "{level} 프록시 — {label}", @@ -9624,8 +9624,8 @@ "selectSavedProxyPlaceholder": "저장된 프록시 선택...", "proxyType": "프록시 유형", "host": "호스트", - "hostPlaceholder": "1.2.3.4 또는 Proxy.example.com", - "port": "항구", + "hostPlaceholder": "1.2.3.4 또는 proxy.example.com", + "port": "포트", "authOptional": "인증(선택사항)", "username": "사용자 이름", "usernamePlaceholder": "사용자 이름", @@ -9634,7 +9634,7 @@ "connected": "연결됨", "ip": "IP:", "connectionFailed": "연결 실패", - "testConnection": "테스트 연결", + "testConnection": "연결 테스트", "clear": "지우기", "cancel": "취소", "save": "저장", @@ -9650,19 +9650,19 @@ "title": "{providerName} 연결", "waiting": "승인을 기다리는 중", "completeAuthInPopup": "팝업에서 승인을 완료하세요.", - "popupClosedHint": "다시 리디렉션하지 않고 팝업이 닫히면(예: Qoder) 이 대화 상자는 수동 URL 입력 모드로 자동 전환됩니다.", + "popupClosedHint": "팝업이 닫히거나 콜백을 전달할 수 없는 경우 이 대화 상자는 자동으로 수동 URL 입력 모드로 전환됩니다.", "popupBlocked": "팝업이 차단되었나요? URL을 직접 입력하세요.", "deviceCodeVisitUrl": "아래 URL을 방문하여 코드를 입력하세요.", "deviceCodeVerificationUrl": "확인 URL", "deviceCodeYourCode": "귀하의 코드", "deviceCodeWaiting": "승인을 기다리는 중...", - "googleOAuthWarning": "원격 액세스 + Google OAuth: 기본 자격 증명은 localhost에 대한 리디렉션만 허용합니다. 승인 후 브라우저는 localhost 열기를 시도합니다. 전체 URL을 복사하여 아래에 붙여넣으세요. 이 수동 단계 없이 완전히 원격으로 사용하려면 자신의 OAuth 자격 증명을 구성하세요.", + "googleOAuthWarning": "원격 액세스 + Google OAuth: 기본 제공 자격 증명은 127.0.0.1과 같은 루프백 리디렉션만 허용합니다. Google 승인을 진행하는 브라우저가 해당 로컬 포트의 OmniRoute에 접근할 수 있어야 하며, 보통 OmniRoute를 로컬에서 열거나 SSH/로컬 포워딩 터널을 사용합니다. 원격 설치에 권장: 본인 컴퓨터에서 npx omniroute login antigravity를 실행하고 출력된 자격 증명 블롭을 아래 필드에 붙여넣으세요. 이 로컬 콜백 없이 완전히 원격으로 사용하려면 자체 OAuth 자격 증명을 구성하세요.", "remoteAccessInfo": "원격 액세스: OmniRoute에 원격으로 액세스하므로 인증 후 오류 페이지가 표시됩니다(localhost를 찾을 수 없음). 이것은 정상적인 현상입니다. 브라우저 주소 표시줄에서 전체 URL을 복사하여 아래에 붙여넣으면 됩니다.", "step1OpenUrl": "1단계: 브라우저에서 이 URL을 엽니다.", "copy": "복사", "step2PasteCallback": "2단계: 여기에 콜백 URL 또는 승인 코드를 붙여넣으세요.", - "step2Hint": "승인 후 전체 콜백 URL을 붙여넣습니다. Claude Code 및 Cline의 경우 인증 코드를 직접 붙여 넣을 수도 있습니다. 코드#상태.", - "connect": "연결하다", + "step2Hint": "승인 후 전체 콜백 URL을 붙여넣으세요. Claude Code 및 Cline의 경우 code#state와 같이 인증 코드를 직접 붙여넣을 수도 있습니다.", + "connect": "연결", "cancel": "취소", "success": "연결 성공!", "successMessage": "귀하의 {providerName} 계정이 연결되었습니다.", @@ -9671,11 +9671,11 @@ "tryAgain": "다시 시도하세요" }, "cursorAuthModal": { - "title": "커서 IDE 연결", + "title": "Cursor IDE 연결", "autoDetecting": "토큰 자동 감지 중...", - "readingFromCursor": "커서 IDE 또는 커서 에이전트에서 읽기", + "readingFromCursor": "Cursor IDE 또는 cursor-agent에서 읽는 중", "tokensAutoDetected": "Cursor IDE에서 토큰이 자동 감지되었습니다!", - "cursorNotDetected": "커서 IDE가 감지되지 않습니다. 토큰을 수동으로 붙여넣으세요.", + "cursorNotDetected": "Cursor IDE가 감지되지 않았습니다. 토큰을 수동으로 붙여넣으세요.", "accessToken": "액세스 토큰", "required": "*", "accessTokenPlaceholder": "액세스 토큰이 자동으로 채워집니다...", @@ -9713,25 +9713,25 @@ "proxyRegistry": { "selectAllProxies": "모든 프록시 선택", "selectProxy": "{name} 선택", - "title": "Title", - "description": "Description", + "title": "프록시 레지스트리", + "description": "재사용 가능한 프록시를 저장하고 할당을 추적합니다.", "importLegacy": "Import Legacy", "bulkAssign": "Bulk Assign", "addProxy": "Add Proxy", - "loading": "Loading", - "noProxies": "No Proxies", - "tableName": "Table Name", - "tableEndpoint": "Table Endpoint", - "tableStatus": "Table Status", - "tableHealth": "Table Health", - "tableUsage": "Table Usage", - "tableActions": "Table Actions", + "loading": "프록시 로드 중...", + "noProxies": "아직 저장된 프록시가 없습니다.", + "tableName": "이름", + "tableEndpoint": "엔드포인트", + "tableStatus": "상태", + "tableHealth": "상태 (24h)", + "tableUsage": "사용량", + "tableActions": "작업", "test": "Test", "edit": "Edit", "delete": "Delete", - "modalCreateTitle": "Modal Create Title", - "modalEditTitle": "Modal Edit Title", - "labelName": "Label Name", + "modalCreateTitle": "프록시 생성", + "modalEditTitle": "프록시 편집", + "labelName": "이름", "labelType": "유형", "labelFamily": "IP 패밀리", "familyAuto": "자동 (듀얼 스택)", @@ -9739,7 +9739,7 @@ "familyIpv6": "IPv6 전용", "familyHint": "Egress 주소 패밀리입니다. 자동은 듀얼 스택을 유지하며, IPv4/IPv6는 이 프록시를 해당 패밀리로 고정합니다(IPv6 전용 프록시에서 v4 유출 방지).", "labelHost": "호스트", - "labelPort": "항구", + "labelPort": "포트", "labelUsername": "사용자 이름", "labelPassword": "비밀번호", "labelRegion": "지역", @@ -9756,7 +9756,7 @@ "bulkLabelProxy": "프록시", "bulkClearAssignment": "(할당 지우기)", "bulkLabelScopeIds": "범위 ID(쉼표 또는 줄바꿈으로 구분)", - "bulkScopeIdsPlaceholder": "공급자-개방형, 공급자-인류적", + "bulkScopeIdsPlaceholder": "provider-openai,provider-anthropic", "bulkApply": "적용", "labelScope": "범위", "labelProxy": "프록시", @@ -9767,22 +9767,22 @@ "bulkImportErrorMissingName": "NAME 누락", "bulkImportErrorMissingHost": "호스트 누락", "bulkImportErrorInvalidPort": "잘못된 포트(1-65535여야 함)", - "bulkImportErrorInvalidType": "잘못된 TYPE(http, https 또는 양말5 사용)", + "bulkImportErrorInvalidType": "잘못된 TYPE(http, https 또는 socks5 사용)", "bulkImportErrorInvalidStatus": "잘못된 STATUS(활성 또는 비활성 사용)", - "errorLoadFailed": "Error Load Failed", - "errorNameHostRequired": "Error Name Host Required", - "errorSaveFailed": "Error Save Failed", - "errorDeleteFailed": "Error Delete Failed", - "errorForceDeleteConfirm": "Error Force Delete Confirm", - "errorMigrateFailed": "Error Migrate Failed", - "errorBulkFailed": "Error Bulk Failed", + "errorLoadFailed": "프록시 레지스트리를 로드하지 못했습니다", + "errorNameHostRequired": "이름과 호스트는 필수 항목입니다", + "errorSaveFailed": "프록시를 저장하지 못했습니다", + "errorDeleteFailed": "프록시를 삭제하지 못했습니다", + "errorForceDeleteConfirm": "이 프록시는 아직 할당되어 있습니다. 강제로 삭제하고 모든 할당을 제거하시겠습니까?", + "errorMigrateFailed": "레거시 프록시 구성을 마이그레이션하지 못했습니다", + "errorBulkFailed": "대량 할당을 실행하지 못했습니다", "success": "✓", "failure": "✗", "failed": "Failed", "successRate": "{rate}% 성공", "avgLatency": "{latency}ms 평균", - "assignmentsCount": "{count} 과제", - "noData": "No Data", + "assignmentsCount": "{count}개 할당", + "noData": "—", "testSuccess": "✓ {ip}", "testLatency": "{latency}ms", "testFailure": "✗ {error}", @@ -9795,7 +9795,7 @@ "relayProbeSummary": "릴레이 프로브: {alive}/{tested} 활성", "bulkImport": "대량 가져오기", "bulkImportTitle": "대량 가져오기 프록시", - "bulkImportDescription": "파이프로 구분된 형식을 사용하여 프록시 프로필을 붙여넣습니다. 한 줄에 하나의 프록시. 기존 프록시(동일 호스트 + 포트)가 업데이트됩니다.", + "bulkImportDescription": "프록시 프로필을 한 줄에 하나씩 붙여넣으세요. 지원 형식: 파이프 구분(NAME|HOST|PORT|…), 단축형(ip:port, ip:port:user:pass, user:pass@ip:port, user:pass:ip:port, protocol://ip:port, protocol://user:pass@ip:port), 프로토콜 헤더 모드(첫 줄에 프로토콜만 입력하면 이후 단축형 줄에 적용). 기존 프록시(동일 호스트 + 포트)는 업데이트됩니다.", "bulkImportParse": "구문 분석", "bulkImportImport": "{count} 프록시 가져오기", "bulkImportImporting": "가져오는 중...", @@ -9807,7 +9807,7 @@ "bulkImportErrorLine": "{line} 라인: {reason}", "bulkImportMaxExceeded": "가져오기당 최대 100개의 프록시", "bulkImportPreview": "미리보기", - "clearAssignment": "(명확한 할당)", + "clearAssignment": "(할당 지우기)", "bulkProxyAssignment": "대량 프록시 할당", "testAll": "모두 테스트", "errorTestFailed": "프록시 테스트 실패", @@ -9842,8 +9842,8 @@ "poolSaveFailed": "풀 할당을 저장하지 못했습니다" }, "playground": { - "title": "Title", - "description": "Description", + "title": "모델 플레이그라운드", + "description": "대시보드에서 직접 모든 모델을 테스트하세요. 공급자, 모델, 엔드포인트 유형을 선택한 후 요청을 보내 원시 응답을 확인하세요.", "endpoint": "Endpoint", "provider": "Provider", "model": "Model", @@ -9854,9 +9854,9 @@ "cancel": "Cancel", "audioFile": "Audio File", "attachImages": "Attach Images", - "multipartFormData": "Multipart Form Data", - "upToImages": "Up To Images", - "selectAudioFile": "Select Audio File", + "multipartFormData": "multipart/form-data", + "upToImages": "최대 4개 이미지", + "selectAudioFile": "전사할 오디오 파일 선택 (mp3, wav, m4a, ogg, flac…)", "clearAll": "Clear All", "request": "Request", "response": "Response", @@ -9865,14 +9865,14 @@ "resetToDefault": "Reset To Default", "downloadAudio": "Download Audio", "copyText": "Copy Text", - "transcriptionHint": "Transcription Hint", + "transcriptionHint": "전사(Transcription)는 multipart/form-data를 사용합니다. 위에서 오디오 파일을 업로드하세요 — 아래 JSON은 추가 매개변수(model, language)를 제어합니다.", "imagesGenerated": "생성된 {count}개의 이미지", "generatedImage": "생성된 이미지 {index}", "save": "Save", "endpointOptions": { "chat": "Chat", "responses": "Responses", - "completions": "완성", + "completions": "Completions", "images": "Images", "embeddings": "Embeddings", "speech": "Speech", @@ -10313,7 +10313,7 @@ "title": "Quota Sharing", "description": "Share provider quotas across API keys with % limits", "newPool": "New pool", - "betaTitle": "Beta — UI preview.", + "betaTitle": "베타", "betaDescription": "Configuration is saved in localStorage (not yet persisted on the server). Per-request cap enforcement is not yet wired into the proxy pipeline. This screen lets you design and visualize the quota split; real enforcement will land in a future iteration with DB persistence and upstream call interception.", "kpiActivePools": "Active pools", "kpiKeysAllocated": "Keys allocated", @@ -10364,7 +10364,7 @@ "betaConfigSavedPrefix": "구성은 다음 위치에 저장됩니다.", "betaConfigSavedSuffix": "(아직 서버에 유지되지 않음) 요청별 한도 적용은 아직 프록시 파이프라인에 연결되지 않았습니다. 이 화면을 사용하면 할당량 분할을 디자인하고 시각화할 수 있습니다. 실제 시행은 DB 지속성 및 업스트림 호출 차단을 통해 향후 반복에 착수할 것입니다.", "policyLabel": "정책:", - "resetIn": "재설정", + "resetIn": "재설정까지", "quotaTotal": "합계", "kpiAvgUtilization": "평균 사용률", "kpiBorrowingNow": "현재 대여 중", @@ -10436,7 +10436,7 @@ "endpointsCollapse": "접기", "endpointsExpand": "펼치기", "endpointsAnthropicNote": "Anthropic 네이티브", - "endpointsResponsesNote": "OpenAI 응답 — codex/github", + "endpointsResponsesNote": "OpenAI Responses — codex/github", "endpointsWsNote": "WebSocket — codex 전용", "betaText": "할당량 공유(Quota Share) 기능은 작동하지만 버그가 발생할 수 있습니다. 버그를 발견하셨나요? 보고해 주세요.", "betaReportLink": "문제 보고", @@ -10569,7 +10569,7 @@ "cloudAgentSession": "{target}의 클라우드 에이전트 세션이 시작되었습니다", "mcpToolRegistered": "MCP 도구 {target}이(가) 등록되었습니다", "webhookCreated": "{actor}님이 웹훅 {target}을(를) 생성했습니다", - "webhookDeleted": "{actor}님이 웹훅 {target}을((를) 제거했습니다", + "webhookDeleted": "{actor}님이 웹훅 {target}을(를) 제거했습니다", "quotaPoolCreated": "{actor}님이 할당량 풀 {target}을(를) 생성했습니다", "quotaPoolUpdated": "{actor}님이 할당량 풀 {target}을(를) 업데이트했습니다", "quotaPoolDeleted": "{actor}님이 할당량 풀 {target}을(를) 제거했습니다", @@ -11242,7 +11242,7 @@ } }, "pageTitle": "에이전트 스킬", - "pageSubtitle": "에이전트에게 OmniRoute를 작동하는 방법 교육 — 22개 API 영역 + 20개 CLI 제품군", + "pageSubtitle": "에이전트에게 OmniRoute를 작동하는 방법 교육 — 23개 API 영역 + 21개 CLI 제품군", "conceptCard": { "agent": { "title": "에이전트 스킬 — 아웃바운드",