feat(i18n): add Korean (ko) translation (#10312)

Add a full Korean locale (core/http/react-ui/public/locales/ko/, 13 namespaces,
840 keys, full parity with en/) and register ko in SUPPORTED_LANGUAGES
(core/http/react-ui/src/i18n/index.js). All i18next {{interpolation}} and
_one/_other plural keys preserved; brand/model names kept untranslated.

Assisted-by: Claude:claude-opus-4-8

Signed-off-by: moduvoice <moduvoicr77@gmail.com>
This commit is contained in:
moduvoice
2026-06-14 02:58:50 +07:00
committed by GitHub
parent 0854932a25
commit 36b4a81d1e
14 changed files with 1127 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
{
"manage": {
"title": "시스템",
"subtitle": "설치된 모델과 백엔드를 관리합니다"
},
"settings": {
"title": "설정",
"subtitle": "LocalAI 런타임 설정을 구성합니다",
"saved": "설정이 저장되었습니다",
"saveFailed": "저장 실패: {{message}}",
"loadFailed": "설정을 불러오지 못했습니다: {{message}}",
"sections": {
"branding": "브랜딩",
"watchdog": "워치독",
"memory": "메모리",
"backends": "백엔드",
"performance": "성능",
"tracing": "트레이싱",
"api": "API 및 CORS",
"p2p": "P2P",
"galleries": "갤러리",
"apikeys": "API 키",
"agents": "에이전트 작업",
"agentpool": "에이전트 풀",
"assistant": "LocalAI 어시스턴트",
"responses": "응답"
}
},
"backends": {
"title": "백엔드 관리",
"subtitle": "모델을 구동할 AI 백엔드를 탐색하고 설치합니다"
},
"backendLogs": {
"title": "백엔드 로그",
"subtitle": "실행 중인 백엔드의 로그를 확인합니다",
"empty": "사용 가능한 로그가 없습니다"
},
"traces": {
"title": "트레이스",
"subtitle": "기록된 API 요청, 응답, 백엔드 작업을 확인합니다"
},
"nodes": {
"title": "분산 노드",
"subtitle": "백엔드 및 에이전트 워커 노드를 관리합니다"
},
"p2p": {
"title": "분산 AI 컴퓨팅",
"subtitle": "피어 투 피어 분산으로 여러 기기에 걸쳐 AI 워크로드를 확장합니다"
},
"users": {
"title": "사용자",
"subtitle": "등록된 사용자, 역할, 초대를 관리합니다"
},
"usage": {
"title": "사용량",
"subtitle": "API 토큰 사용량 통계",
"sources": {
"tab": "출처",
"mixTitle": "출처 구성",
"ribbonAria": "API 키 {{apikey}}%, 웹 UI {{web}}%, 레거시 {{legacy}}%",
"topSources": "기간별 상위 출처",
"searchPlaceholder": "이름 또는 접두사로 검색",
"sortBy": "정렬",
"sortTokens": "토큰",
"sortRequests": "요청",
"sortLastUsed": "마지막 사용",
"sortName": "이름",
"sortUser": "사용자",
"webUI": "웹 UI",
"legacy": "레거시",
"revoked": "해지됨",
"filteredTo": "필터: {{name}}",
"clearFilter": "필터 지우기",
"other": "기타 ({{count}})",
"noTrafficShort": "이 기간에는 요청이 없습니다.",
"noKeysYet": "요청이 들어오면 여기에 항목별로 표시됩니다.",
"createKey": "첫 API 키 만들기",
"truncatedWarning": "상위 200개 키를 표시합니다. 필터를 적용해 범위를 좁혀 보세요."
}
},
"explorer": {
"title": "탐색기",
"subtitle": "파일과 구성을 둘러봅니다"
}
}

View File

@@ -0,0 +1,55 @@
{
"title": "에이전트",
"subtitle": "자율 AI 에이전트를 관리합니다",
"actions": {
"agentHub": "에이전트 허브",
"import": "가져오기",
"createAgent": "에이전트 만들기",
"edit": "편집",
"chat": "채팅",
"export": "내보내기",
"delete": "삭제",
"pause": "일시중지",
"resume": "재개"
},
"table": {
"name": "이름",
"status": "상태",
"events": "이벤트",
"actions": "작업",
"eventsTooltip": "이벤트 {{count}}개 - 클릭하여 보기"
},
"search": {
"placeholder": "에이전트 검색...",
"summary_one": "에이전트 {{total}}개 중 {{shown}}개",
"summary_other": "에이전트 {{total}}개 중 {{shown}}개"
},
"empty": {
"noConfigured": "구성된 에이전트가 없습니다",
"noConfiguredText": "에이전트를 만들어 자율 AI 워크플로를 시작하세요.",
"browseHub": "어디서 시작할지 모르겠나요? <1>에이전트 허브</1>를 둘러보고 바로 가져올 수 있는 에이전트 구성을 찾아보세요.",
"noMatching": "일치하는 에이전트가 없습니다",
"noMatchingText": "\"{{query}}\"와 일치하는 에이전트가 없습니다"
},
"sections": {
"yourAgents": "내 에이전트",
"otherUsersAgents": "다른 사용자의 에이전트"
},
"deleteDialog": {
"title": "에이전트 삭제",
"message": "에이전트 \"{{name}}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"confirm": "삭제"
},
"toasts": {
"loadFailed": "에이전트를 불러오지 못했습니다: {{message}}",
"deleted": "에이전트 \"{{name}}\"이(가) 삭제되었습니다",
"deleteFailed": "에이전트 삭제 실패: {{message}}",
"paused": "에이전트 \"{{name}}\"이(가) 일시중지되었습니다",
"resumed": "에이전트 \"{{name}}\"이(가) 재개되었습니다",
"pauseFailed": "에이전트 일시중지 실패: {{message}}",
"resumeFailed": "에이전트 재개 실패: {{message}}",
"exported": "에이전트 \"{{name}}\"이(가) 내보내졌습니다",
"exportFailed": "에이전트 내보내기 실패: {{message}}",
"parseFailed": "에이전트 파일을 분석하지 못했습니다: {{message}}"
}
}

View File

@@ -0,0 +1,112 @@
{
"login": {
"subtitle": "계속하려면 로그인하세요",
"registerSubtitle": "계정을 만듭니다",
"createAdminSubtitle": "관리자 계정을 만듭니다",
"tokenSubtitle": "계속하려면 API 키를 입력하세요",
"email": "이메일",
"emailPlaceholder": "you@example.com",
"name": "이름",
"namePlaceholder": "이름 (선택 사항)",
"password": "비밀번호",
"passwordPlaceholder": "비밀번호 입력...",
"newPasswordPlaceholder": "최소 12자 이상",
"confirmPassword": "비밀번호 확인",
"confirmPasswordPlaceholder": "비밀번호 재입력",
"inviteCodeLabel": "초대 코드",
"inviteCodeOptional": " (선택 사항 — 승인 대기를 건너뜁니다)",
"inviteCodePlaceholder": "초대 코드를 붙여넣으세요...",
"tokenPlaceholder": "API 키 입력...",
"tokenAltPlaceholder": "API 토큰 입력...",
"signIn": "로그인",
"signingIn": "로그인 중...",
"register": "회원가입",
"creatingAccount": "계정 생성 중...",
"createAdminAccount": "관리자 계정 만들기",
"signInWithGitHub": "GitHub로 로그인",
"signInWithSSO": "SSO로 로그인",
"loginWithToken": "토큰으로 로그인",
"showTokenLogin": "API 토큰으로 로그인",
"hideTokenLogin": "토큰 로그인 숨기기",
"noAccount": "계정이 없으신가요?",
"hasAccount": "이미 계정이 있으신가요?",
"or": "또는",
"errors": {
"loginFailed": "로그인 실패",
"registrationFailed": "회원가입 실패",
"invalidToken": "유효하지 않은 토큰",
"passwordsDoNotMatch": "비밀번호가 일치하지 않습니다",
"enterToken": "토큰을 입력해 주세요",
"networkError": "네트워크 오류",
"inviteRequired": "회원가입하려면 유효한 초대 코드가 필요합니다"
},
"messages": {
"registrationPending": "회원가입이 완료되었습니다. 승인을 기다리고 있습니다."
}
},
"account": {
"title": "계정",
"subtitle": "프로필, 자격 증명, API 키",
"unavailable": "계정을 사용할 수 없습니다",
"unavailableText": "계정을 관리하려면 인증이 활성화되어 있어야 합니다.",
"tabs": {
"profile": "프로필",
"security": "보안",
"apiKeys": "API 키"
},
"profile": {
"displayName": "표시 이름",
"displayNameDescription": "공개적으로 표시되는 이름",
"avatarUrl": "아바타 URL",
"avatarUrlDescription": "프로필 사진 URL",
"avatarUrlPlaceholder": "https://example.com/avatar.png",
"save": "저장",
"saving": "저장 중...",
"updated": "프로필이 업데이트되었습니다",
"updateFailed": "프로필 업데이트 실패: {{message}}"
},
"security": {
"currentPassword": "현재 비밀번호",
"currentPasswordDescription": "본인 확인을 위해 기존 비밀번호를 입력하세요",
"currentPasswordPlaceholder": "현재 비밀번호",
"newPassword": "새 비밀번호",
"newPasswordDescription": "최소 12자 이상이어야 합니다",
"newPasswordPlaceholder": "새 비밀번호",
"confirmPassword": "비밀번호 확인",
"confirmPasswordDescription": "새 비밀번호를 다시 입력하세요",
"confirmPasswordPlaceholder": "새 비밀번호 확인",
"changePassword": "비밀번호 변경",
"changing": "변경 중...",
"changed": "비밀번호가 변경되었습니다",
"passwordsDoNotMatch": "비밀번호가 일치하지 않습니다",
"tooShort": "새 비밀번호는 최소 12자 이상이어야 합니다",
"oauthOnly": "{{provider}} 계정은 비밀번호 관리를 사용할 수 없습니다."
},
"apiKeys": {
"create": "API 키 만들기",
"createDescription": "프로그래밍 방식 접근을 위한 키를 생성합니다",
"namePlaceholder": "키 이름 (예: my-app)",
"createButton": "만들기",
"creating": "생성 중...",
"createdToast": "API 키가 생성되었습니다",
"createFailed": "API 키 생성 실패: {{message}}",
"loadFailed": "API 키를 불러오지 못했습니다: {{message}}",
"revoke": "해지",
"revokeKey": "키 해지",
"revokeTitle": "API 키 해지",
"revokeMessage": "API 키 \"{{name}}\"을(를) 해지하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"revoked": "API 키가 해지되었습니다",
"revokeFailed": "API 키 해지 실패: {{message}}",
"copyNow": "지금 복사하세요 — 이 키는 다시 표시되지 않습니다",
"copiedToast": "클립보드에 복사되었습니다",
"copyFailed": "복사하지 못했습니다",
"empty": "아직 API 키가 없습니다. 위에서 하나를 만들어 프로그래밍 방식 접근을 시작하세요.",
"lastUsed": "마지막 사용 {{date}}"
}
},
"notFound": {
"title": "페이지를 찾을 수 없습니다",
"text": "이 페이지가 사라진 것 같습니다. 다시 돌아가도록 도와드리겠습니다.",
"goHome": "홈으로 이동"
}
}

View File

@@ -0,0 +1,117 @@
{
"activity": {
"thought": "생각",
"tool": "도구",
"result": "결과",
"toolResult": "{{name}} 결과",
"thinking": "생각 중..."
},
"header": {
"manageModeTooltip": "이 채팅은 LocalAI와 대화하여 모델을 설치하고, 구성을 편집하고, 백엔드를 관리할 수 있습니다.",
"modelInfo": "모델 정보",
"chatSettings": "채팅 설정",
"modelInfoTitle": "모델 정보: {{model}}",
"editConfig": "구성 편집",
"close": "닫기"
},
"modelInfo": {
"backend": "백엔드",
"modelFile": "모델 파일",
"contextSize": "컨텍스트 크기",
"threads": "스레드",
"mcp": "MCP",
"configured": "구성됨",
"chatTemplate": "채팅 템플릿",
"yes": "예",
"gpuLayers": "GPU 레이어"
},
"context": {
"label": "컨텍스트: {{percent}}%",
"labelWithTokens": "컨텍스트: {{percent}}% ({{tokens}} 토큰)"
},
"settings": {
"title": "채팅 설정",
"manageMode": "관리 모드",
"manageModeDesc": "이 채팅이 LocalAI와 대화하여 모델을 설치하고, 백엔드를 전환하고, 구성을 편집할 수 있게 합니다.",
"systemPrompt": "시스템 프롬프트",
"systemPromptPlaceholder": "당신은 도움이 되는 어시스턴트입니다...",
"temperature": "Temperature",
"topP": "Top P",
"topK": "Top K",
"contextSize": "컨텍스트 크기",
"contextSizePlaceholder": "2048",
"clearHistory": "채팅 기록 지우기"
},
"empty": {
"manageTitle": "채팅으로 LocalAI 관리",
"manageText": "모델 설치, 백엔드 전환, 구성 편집 또는 상태 확인을 요청하세요. 어시스턴트가 작업을 요약하고 변경하기 전에 확인을 기다립니다.",
"startTitle": "대화 시작",
"readyText": "{{model}}와(과) 채팅할 준비가 되었습니다",
"selectModelText": "시작하려면 위에서 모델을 선택하세요",
"suggestionsManage": [
"무엇이 설치되어 있나요?",
"채팅 모델 설치하기",
"시스템 상태 보기",
"백엔드 업데이트하기"
],
"suggestionsChat": [
"이게 어떻게 작동하는지 설명해 줘",
"코드 작성을 도와줘",
"문서를 요약해 줘",
"아이디어를 브레인스토밍해 줘"
],
"recent": "최근",
"noMessages": "아직 메시지가 없습니다",
"hintEnter": "Enter로 전송",
"hintShiftEnter": "Shift+Enter로 줄바꿈",
"hintAttach": "파일 첨부"
},
"errors": {
"viewTraces": "자세한 내용은 트레이스를 확인하세요"
},
"actions": {
"copy": "복사",
"regenerate": "다시 생성"
},
"streaming": {
"transferring": "모델 전송 중...",
"transferringTo": "{{node}}(으)로 모델 전송 중..."
},
"tokens": {
"perSec": "{{count}} tok/s",
"peak": "최고: {{count}} tok/s",
"usage": "{{prompt}}p + {{completion}}c = {{total}}"
},
"input": {
"placeholder": "메시지...",
"attachFile": "파일 첨부",
"stopGenerating": "생성 중지",
"canvasTitle": "캔버스 — 코드 블록과 미디어를 사이드 패널로 추출해 미리보기, 복사, 다운로드할 수 있습니다",
"canvasLabel": "캔버스",
"openCanvas": "캔버스 패널 열기"
},
"deleteAllDialog": {
"title": "모든 채팅 삭제",
"message": "모든 채팅을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"confirm": "모두 삭제"
},
"toasts": {
"selectModel": "모델을 선택해 주세요",
"copied": "클립보드에 복사되었습니다",
"copyFailed": "클립보드에 복사할 수 없습니다"
},
"menu": {
"trigger": "채팅",
"triggerTitle": "대화 (Ctrl/Cmd+K)",
"search": "대화 검색...",
"clearSearch": "검색 지우기",
"noMatch": "검색과 일치하는 대화가 없습니다",
"noConversations": "아직 대화가 없습니다",
"rename": "이름 변경",
"exportMarkdown": "Markdown으로 내보내기",
"deleteChat": "채팅 삭제",
"newChat": "새 채팅",
"clearAll": "모두 지우기",
"deleteAllTitle": "모든 대화 삭제"
}
}

View File

@@ -0,0 +1,43 @@
{
"title": "지식 베이스",
"subtitle": "에이전트 RAG를 위한 문서 컬렉션을 관리합니다",
"newPlaceholder": "새 컬렉션 이름...",
"actions": {
"create": "만들기",
"creating": "생성 중...",
"details": "세부 정보",
"reset": "초기화",
"delete": "삭제",
"viewDetails": "세부 정보 보기",
"resetCollection": "컬렉션 초기화",
"deleteCollection": "컬렉션 삭제"
},
"sections": {
"yourCollections": "내 컬렉션",
"otherUsersCollections": "다른 사용자의 컬렉션"
},
"empty": {
"title": "아직 컬렉션이 없습니다",
"text": "컬렉션을 사용하면 문서를 지식 베이스로 정리하여 에이전트가 RAG(검색 증강 생성)로 검색할 수 있습니다. 위에서 컬렉션을 만들어 시작하세요.",
"noPersonal": "아직 컬렉션이 없습니다."
},
"deleteDialog": {
"title": "컬렉션 삭제",
"message": "컬렉션 \"{{name}}\"을(를) 삭제하시겠습니까? 모든 항목이 제거되며 되돌릴 수 없습니다.",
"confirm": "삭제"
},
"resetDialog": {
"title": "컬렉션 초기화",
"message": "컬렉션 \"{{name}}\"을(를) 초기화하시겠습니까? 모든 항목은 제거되지만 컬렉션은 유지됩니다.",
"confirm": "초기화"
},
"toasts": {
"loadFailed": "컬렉션을 불러오지 못했습니다: {{message}}",
"created": "컬렉션 \"{{name}}\"이(가) 생성되었습니다",
"createFailed": "컬렉션 생성 실패: {{message}}",
"deleted": "컬렉션 \"{{name}}\"이(가) 삭제되었습니다",
"deleteFailed": "컬렉션 삭제 실패: {{message}}",
"reset": "컬렉션 \"{{name}}\"이(가) 초기화되었습니다",
"resetFailed": "컬렉션 초기화 실패: {{message}}"
}
}

View File

@@ -0,0 +1,109 @@
{
"actions": {
"save": "저장",
"saving": "저장 중...",
"cancel": "취소",
"close": "닫기",
"confirm": "확인",
"delete": "삭제",
"edit": "편집",
"add": "추가",
"remove": "제거",
"create": "만들기",
"update": "업데이트",
"refresh": "새로고침",
"reload": "다시 불러오기",
"retry": "다시 시도",
"search": "검색",
"filter": "필터",
"clear": "지우기",
"reset": "초기화",
"apply": "적용",
"back": "뒤로",
"next": "다음",
"previous": "이전",
"open": "열기",
"submit": "제출",
"select": "선택",
"selectAll": "모두 선택",
"copy": "복사",
"copied": "복사됨",
"download": "다운로드",
"upload": "업로드",
"import": "가져오기",
"export": "내보내기",
"view": "보기",
"details": "세부 정보",
"settings": "설정",
"help": "도움말",
"yes": "예",
"no": "아니요",
"loading": "불러오는 중..."
},
"status": {
"loading": "불러오는 중...",
"saving": "저장 중...",
"saved": "저장됨",
"ready": "준비됨",
"running": "실행 중",
"stopped": "중지됨",
"starting": "시작 중...",
"stopping": "중지 중...",
"pending": "대기 중",
"active": "활성",
"inactive": "비활성",
"enabled": "사용",
"disabled": "사용 안 함",
"online": "온라인",
"offline": "오프라인",
"error": "오류",
"success": "성공",
"warning": "경고",
"info": "정보",
"empty": "항목 없음",
"none": "없음",
"unknown": "알 수 없음"
},
"dialogs": {
"confirmDelete": {
"title": "삭제 확인",
"message": "정말로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"confirm": "삭제",
"cancel": "취소"
},
"unsavedChanges": {
"title": "저장되지 않은 변경 사항",
"message": "저장되지 않은 변경 사항이 있습니다. 폐기하시겠습니까?",
"discard": "폐기",
"keepEditing": "계속 편집"
}
},
"forms": {
"required": "필수",
"optional": "선택",
"name": "이름",
"description": "설명",
"type": "유형",
"value": "값",
"search": "검색...",
"selectPlaceholder": "옵션을 선택하세요..."
},
"time": {
"now": "방금",
"secondsAgo_one": "{{count}}초 전",
"secondsAgo_other": "{{count}}초 전",
"minutesAgo_one": "{{count}}분 전",
"minutesAgo_other": "{{count}}분 전",
"hoursAgo_one": "{{count}}시간 전",
"hoursAgo_other": "{{count}}시간 전",
"daysAgo_one": "{{count}}일 전",
"daysAgo_other": "{{count}}일 전"
},
"units": {
"bytes": "B",
"kilobytes": "KB",
"megabytes": "MB",
"gigabytes": "GB",
"terabytes": "TB"
}
}

View File

@@ -0,0 +1,17 @@
{
"generic": "문제가 발생했습니다",
"network": "네트워크 오류입니다. 연결을 확인하고 다시 시도하세요.",
"unauthorized": "이 작업을 수행할 권한이 없습니다.",
"forbidden": "접근이 거부되었습니다.",
"notFound": "요청한 리소스를 찾을 수 없습니다.",
"serverError": "서버 오류입니다. 잠시 후 다시 시도하세요.",
"loadFailed": "불러오기 실패: {{message}}",
"saveFailed": "저장 실패: {{message}}",
"deleteFailed": "삭제 실패: {{message}}",
"updateFailed": "업데이트 실패: {{message}}",
"createFailed": "생성 실패: {{message}}",
"operationFailed": "작업 실패: {{message}}",
"invalidInput": "잘못된 입력입니다. 양식을 확인하고 다시 시도하세요.",
"tryAgain": "다시 시도해 주세요.",
"contactAdmin": "문제가 계속되면 관리자에게 문의하세요."
}

View File

@@ -0,0 +1,66 @@
{
"cluster": {
"vram": "클러스터 VRAM",
"ram": "클러스터 RAM",
"nodesOnline": "노드 {{total}}개 중 {{healthy}}개 온라인"
},
"resourceGpu": "GPU",
"resourceRam": "RAM",
"assistant": {
"title": "채팅으로 LocalAI 관리",
"description": "LocalAI와 대화하여 모델을 설치하고, 백엔드를 전환하고, 구성을 편집하고, 상태를 확인하세요.",
"open": "어시스턴트 열기",
"tooltip": "채팅으로 LocalAI 관리"
},
"input": {
"placeholder": "메시지...",
"attachImage": "이미지 첨부",
"attachAudio": "오디오 첨부",
"attachFile": "파일 첨부",
"enterToSend": "Enter로 전송",
"selectModelFirst": "먼저 모델을 선택하세요",
"sendMessage": "메시지 보내기",
"selectModelToast": "먼저 모델을 선택해 주세요"
},
"quickLinks": {
"manageByChat": "채팅으로 관리",
"installedModels": "설치된 모델",
"browseGallery": "갤러리 둘러보기",
"importModel": "모델 가져오기",
"documentation": "문서"
},
"loadedModels": {
"count_one": "모델 {{count}}개 로드됨",
"count_other": "모델 {{count}}개 로드됨",
"stop": "모델 중지",
"stopAll": "모두 중지"
},
"stopDialog": {
"title": "모델 중지",
"message": "모델 {{model}}을(를) 중지하시겠습니까?",
"confirm": "{{model}} 중지",
"stopAllTitle": "모든 모델 중지",
"stopAllMessage": "로드된 모델 {{count}}개를 모두 중지하시겠습니까?",
"stopAllConfirm": "모두 중지",
"stoppedToast": "{{model}} 중지됨",
"allStoppedToast": "모든 모델이 중지되었습니다",
"stopFailed": "중지 실패: {{message}}"
},
"wizard": {
"getStarted": "{{name}} 시작하기",
"intro": "첫 모델을 설치하여 시작하세요. 갤러리를 둘러보거나 직접 가져올 수 있습니다.",
"steps": {
"step1Title": "모델 갤러리 둘러보기",
"step1Body": "엄선된 컬렉션에서 필요에 맞는 모델을 찾으세요.",
"step2Title": "모델 설치",
"step2Body": "설치를 클릭하면 자동으로 다운로드되고 구성됩니다.",
"step3Title": "채팅 시작",
"step3Body": "브라우저에서 바로 모델과 채팅하거나 API를 사용하세요."
},
"browseGallery": "모델 갤러리 둘러보기",
"importModel": "모델 가져오기",
"docs": "문서",
"noModelsTitle": "사용 가능한 모델 없음",
"noModelsBody": "아직 설치된 모델이 없습니다. 채팅을 시작할 수 있도록 관리자에게 모델 설정을 요청하세요."
}
}

View File

@@ -0,0 +1,142 @@
{
"title": "새 모델 가져오기",
"subtitle": {
"simple": "URI에서 모델을 가져옵니다 — 자동 감지가 백엔드를 선택합니다.",
"powerYaml": "전체 모델 YAML 구성을 작성합니다.",
"powerPrefs": "세밀한 가져오기 환경설정."
},
"actions": {
"import": "모델 가져오기",
"importing": "가져오는 중...",
"create": "만들기",
"saving": "저장 중...",
"browseHF": "HF에서 모델 둘러보기",
"addCustom": "사용자 지정 추가",
"copy": "복사"
},
"form": {
"modelUri": "모델 URI",
"uriPlaceholder": "huggingface://TheBloke/Llama-2-7B-Chat-GGUF 또는 https://example.com/model.gguf",
"uriHint": "가져올 모델 파일의 URI 또는 경로를 입력하세요",
"supportedFormats": "지원되는 URI 형식",
"options": "옵션",
"preferences": "환경설정 (선택 사항)",
"commonPreferences": "공통 환경설정",
"customPreferences": "사용자 지정 환경설정",
"customKeyValueHint": "고급 구성을 위한 사용자 지정 키-값 쌍을 추가합니다.",
"preferenceKey": "{{index}}행의 환경설정 키",
"preferenceValue": "{{index}}행의 환경설정 값",
"removePref": "이 환경설정 제거",
"key": "키",
"value": "값",
"backend": "백엔드",
"backendAuto": "자동 감지 (URI 기반)",
"backendLoading": "백엔드 불러오는 중…",
"backendSearch": "백엔드 검색...",
"backendHint": "특정 백엔드를 강제로 지정합니다. 비워 두면 URI에서 자동 감지합니다. \"수동 선택\"으로 표시된 항목은 자동 감지되지 않으므로 모델에 필요한 것을 알고 있다면 직접 선택하세요.",
"backendErrorHint": "백엔드 목록을 불러오지 못했습니다 — 자동 감지만 사용합니다.",
"backendNotInstalled": "이 백엔드는 아직 설치되지 않았습니다. 가져오기를 제출하면 먼저 다운로드됩니다.",
"modelName": "모델 이름",
"modelNamePlaceholder": "비워 두면 파일 이름을 사용합니다",
"modelNameHint": "모델의 사용자 지정 이름입니다. 비워 두면 파일 이름이 사용됩니다.",
"description": "설명",
"descriptionPlaceholder": "비워 두면 기본 설명을 사용합니다",
"descriptionHint": "모델의 사용자 지정 설명입니다.",
"quantizations": "양자화",
"quantizationsPlaceholder": "q4_k_m,q4_k_s,q3_k_m (쉼표로 구분)",
"quantizationsHint": "선호하는 양자화 (쉼표로 구분). 비워 두면 기본값(q4_k_m)을 사용합니다.",
"mmprojQuantizations": "MMProj 양자화",
"mmprojQuantizationsPlaceholder": "fp16,fp32 (쉼표로 구분)",
"mmprojQuantizationsHint": "선호하는 MMProj 양자화입니다. 비워 두면 기본값(fp16)을 사용합니다.",
"embeddings": "임베딩",
"embeddingsHint": "이 모델에 대한 임베딩 지원을 활성화합니다.",
"modelType": "모델 유형",
"modelTypePlaceholder": "AutoModelForCausalLM (transformers 백엔드용)",
"modelTypeHint": "transformers 백엔드의 모델 유형입니다. 예: AutoModelForCausalLM, SentenceTransformer, Mamba.",
"pipelineType": "파이프라인 유형",
"pipelineTypeHint": "diffusers 백엔드의 파이프라인 유형입니다.",
"schedulerType": "스케줄러 유형",
"schedulerTypePlaceholder": "k_dpmpp_2m (선택 사항)",
"schedulerTypeHint": "diffusers 백엔드의 스케줄러 유형입니다. 예: k_dpmpp_2m, euler_a, ddim.",
"enableParameters": "활성화 매개변수",
"enableParametersPlaceholder": "negative_prompt,num_inference_steps (쉼표로 구분)",
"enableParametersHint": "diffusers 백엔드에 대해 활성화된 매개변수 (쉼표로 구분).",
"cuda": "CUDA",
"cudaHint": "GPU 가속을 위한 CUDA 지원을 활성화합니다.",
"yamlEditor": "YAML 구성 편집기",
"manualPick": "수동 선택",
"manualPickTooltip": "자동 감지는 이 백엔드로 라우팅하지 않습니다. 원하는 것이 무엇인지 안다면 여기서 직접 선택하세요."
},
"modality": {
"text": "텍스트 LLM",
"asr": "음성 인식",
"tts": "텍스트 음성 변환",
"image": "이미지 / 비디오",
"embeddings": "임베딩",
"reranker": "리랭커",
"detection": "객체 감지",
"vad": "음성 활동 감지",
"other": "기타"
},
"powerTabs": {
"ariaLabel": "고급 모드 탭",
"preferences": "환경설정",
"yaml": "YAML"
},
"switchDialog": {
"title": "사용자 지정 환경설정을 유지할까요?",
"body": "간단 모드로 전환하면 백엔드, 이름, 설명을 제외한 환경설정이 숨겨집니다. 가져오기 시 여전히 전송됩니다.",
"cancel": "취소",
"discard": "폐기하고 전환",
"keep": "유지하고 전환"
},
"estimate": {
"title": "예상 요구 사항",
"download": "다운로드: {{size}}",
"vram": "VRAM: {{vram}}"
},
"toasts": {
"noUri": "모델 URI를 입력해 주세요",
"noYaml": "YAML 구성을 입력해 주세요",
"started": "가져오기를 시작했습니다! 진행 상황을 추적하는 중...",
"startedWithMeta": "가져오기를 시작했습니다! 진행 상황을 추적하는 중... ({{meta}})",
"imported": "모델을 성공적으로 가져왔습니다!",
"importedYaml": "모델 구성을 성공적으로 가져왔습니다!",
"importFailed": "가져오기 실패: {{message}}",
"startImportFailed": "가져오기를 시작하지 못했습니다: {{message}}",
"backendsLoadFailed": "백엔드 목록을 불러오지 못했습니다 — 자동 감지만 사용합니다",
"modalityClearedBackend": "백엔드 선택을 해제했습니다 — {{label}} 그룹에 없었습니다.",
"copied": "클립보드에 복사되었습니다"
},
"uriFormats": {
"huggingface": {
"title": "HuggingFace",
"standard": "표준 HuggingFace 형식",
"short": "짧은 HuggingFace 형식",
"fullUrl": "전체 HuggingFace URL"
},
"http": {
"title": "HTTP/HTTPS URL",
"direct": "모든 HTTPS URL에서 직접 다운로드"
},
"local": {
"title": "로컬 파일",
"filePath": "로컬 파일 경로 (절대 경로)",
"directYaml": "직접 로컬 YAML 구성 파일"
},
"oci": {
"title": "OCI 레지스트리",
"registry": "OCI 컨테이너 레지스트리",
"tarball": "로컬 OCI tarball 파일"
},
"ollama": {
"title": "Ollama",
"model": "Ollama 모델 형식"
},
"yaml": {
"title": "YAML 구성 파일",
"remote": "원격 YAML 구성 파일",
"local": "로컬 YAML 구성 파일"
}
}
}

View File

@@ -0,0 +1,154 @@
{
"studio": {
"tabs": {
"images": "이미지",
"video": "비디오",
"tts": "TTS",
"sound": "사운드"
}
},
"image": {
"title": "이미지 생성",
"labels": {
"model": "모델",
"prompt": "프롬프트",
"promptPlaceholder": "생성할 이미지를 설명하세요...",
"negativePrompt": "네거티브 프롬프트",
"negativePromptPlaceholder": "피할 요소...",
"size": "크기",
"count": "개수 (1-4)",
"advanced": "고급 설정",
"imageInputs": "이미지 입력",
"steps": "스텝",
"stepsPlaceholder": "20",
"seed": "시드",
"seedPlaceholder": "랜덤",
"sourceImage": "원본 이미지 (img2img)",
"refImages": "참조 이미지",
"refImagesAdded_one": "이미지 {{count}}개 추가됨",
"refImagesAdded_other": "이미지 {{count}}개 추가됨"
},
"actions": {
"generate": "생성",
"generating": "생성 중..."
},
"empty": "생성된 이미지가 여기에 표시됩니다",
"toasts": {
"noPrompt": "프롬프트를 입력해 주세요",
"noModel": "모델을 선택해 주세요",
"noResults": "생성된 이미지가 없습니다"
}
},
"video": {
"title": "비디오 생성",
"labels": {
"model": "모델",
"prompt": "프롬프트",
"promptPlaceholder": "생성할 비디오를 설명하세요...",
"duration": "길이 (초)",
"fps": "FPS",
"size": "크기",
"advanced": "고급 설정",
"seed": "시드",
"seedPlaceholder": "랜덤"
},
"actions": {
"generate": "생성",
"generating": "생성 중..."
},
"empty": "생성된 비디오가 여기에 표시됩니다",
"toasts": {
"noPrompt": "프롬프트를 입력해 주세요",
"noModel": "모델을 선택해 주세요",
"noResults": "생성된 비디오가 없습니다"
}
},
"tts": {
"title": "텍스트 음성 변환",
"labels": {
"model": "모델",
"voice": "음성",
"voicePlaceholder": "음성 ID (선택 사항)",
"input": "텍스트",
"inputPlaceholder": "합성할 텍스트를 입력하세요..."
},
"actions": {
"generate": "생성",
"generating": "생성 중..."
},
"empty": "생성된 오디오가 여기에 표시됩니다",
"toasts": {
"noText": "텍스트를 입력해 주세요",
"noModel": "모델을 선택해 주세요",
"generateFailed": "생성에 실패했습니다"
}
},
"sound": {
"title": "사운드 생성",
"labels": {
"model": "모델",
"prompt": "프롬프트",
"promptPlaceholder": "생성할 사운드를 설명하세요...",
"duration": "길이 (초)",
"language": "언어",
"vocalLanguage": "보컬 언어",
"lyrics": "가사 (선택 사항)",
"lyricsPlaceholder": "보컬 생성을 위한 가사",
"advanced": "고급 설정",
"seed": "시드",
"seedPlaceholder": "랜덤"
},
"actions": {
"generate": "생성",
"generating": "생성 중..."
},
"empty": "생성된 오디오가 여기에 표시됩니다",
"toasts": {
"noPrompt": "프롬프트를 입력해 주세요",
"noModel": "모델을 선택해 주세요",
"generateFailed": "생성에 실패했습니다"
}
},
"talk": {
"title": "대화",
"subtitle": "실시간 음성 대화",
"actions": {
"start": "세션 시작",
"stop": "세션 종료",
"connecting": "연결 중...",
"muted": "음소거됨",
"mute": "음소거",
"unmute": "음소거 해제"
},
"labels": {
"model": "모델",
"voice": "음성",
"voicePlaceholder": "alloy",
"language": "언어",
"languagePlaceholder": "en",
"instructions": "지침",
"instructionsPlaceholder": "어시스턴트의 페르소나를 설정하세요..."
},
"status": {
"idle": "대기 중",
"connecting": "연결 중...",
"listening": "듣는 중...",
"speaking": "말하는 중...",
"ended": "세션이 종료되었습니다"
},
"toasts": {
"noModel": "먼저 모델을 선택하세요",
"connectFailed": "연결에 실패했습니다: {{message}}"
}
},
"history": {
"title": "기록",
"empty": "아직 기록이 없습니다",
"deleteEntry": "항목 삭제",
"clear": "기록 지우기",
"clearTitle": "모든 기록 지우기",
"clearMessage": "모든 기록 항목을 제거하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"clearConfirm": "지우기",
"cleared": "기록이 지워졌습니다"
}
}

View File

@@ -0,0 +1,93 @@
{
"title": "모델 설치",
"subtitle": "갤러리에서 AI 모델을 둘러보고 설치합니다",
"stats": {
"available": "사용 가능",
"installed": "설치됨"
},
"actions": {
"addModel": "모델 추가",
"importModel": "모델 가져오기",
"install": "설치",
"reinstall": "재설치",
"delete": "삭제"
},
"filters": {
"all": "전체",
"llm": "채팅",
"image": "이미지",
"video": "비디오",
"multimodal": "멀티모달",
"vision": "비전",
"tts": "TTS",
"stt": "STT",
"diarization": "화자 분리",
"soundGen": "사운드",
"audioTransform": "오디오 FX",
"realtimeAudio": "실시간 오디오",
"embedding": "임베딩",
"rerank": "리랭크",
"detection": "감지",
"vad": "VAD",
"fitsGpu": "GPU에 적합",
"allBackends": "모든 백엔드",
"searchBackends": "백엔드 검색..."
},
"search": {
"placeholder": "모델 검색...",
"clearFilters": "필터 지우기"
},
"table": {
"modelName": "모델 이름",
"description": "설명",
"backend": "백엔드",
"sizeVram": "크기 / VRAM",
"status": "상태",
"actions": "작업",
"size": "크기: {{size}}",
"vram": "VRAM: {{vram}}",
"fits": "적합",
"mayNotFit": "맞지 않을 수 있음",
"trustRemoteCode": "원격 코드 신뢰",
"installing": "설치 중",
"installingPct": "설치 중 · {{percent}}%",
"installed": "설치됨",
"notInstalled": "설치되지 않음"
},
"detail": {
"description": "설명",
"gallery": "갤러리",
"backend": "백엔드",
"size": "크기",
"vram": "VRAM",
"license": "라이선스",
"tags": "태그",
"links": "링크",
"warning": "경고",
"files": "파일",
"fitsGpu": "GPU에 적합",
"mayNotFitGpu": "GPU에 맞지 않을 수 있음",
"requiresTrustRemoteCode": "원격 코드 신뢰 필요",
"fileCount_one": "파일 {{count}}개",
"fileCount_other": "파일 {{count}}개",
"filename": "파일 이름",
"uri": "URI",
"sha256": "SHA256"
},
"empty": {
"title": "모델을 찾을 수 없습니다",
"withFilters": "현재 검색 또는 필터와 일치하는 모델이 없습니다.",
"noFilters": "모델 갤러리가 비어 있습니다."
},
"deleteDialog": {
"title": "모델 삭제",
"message": "모델 {{model}}을(를) 삭제하시겠습니까?",
"confirm": "{{model}} 삭제",
"deletingToast": "{{model}} 삭제 중..."
},
"errors": {
"loadFailed": "모델을 불러오지 못했습니다: {{message}}",
"installFailed": "설치 실패: {{message}}",
"deleteFailed": "삭제 실패: {{message}}"
}
}

View File

@@ -0,0 +1,54 @@
{
"appName": "LocalAI",
"openMenu": "메뉴 열기",
"closeMenu": "메뉴 닫기",
"primaryNavigation": "기본 탐색",
"switchToLightMode": "라이트 모드로 전환",
"switchToDarkMode": "다크 모드로 전환",
"expandSidebar": "사이드바 펼치기",
"collapseSidebar": "사이드바 접기",
"changeLanguage": "언어 변경",
"logout": "로그아웃",
"accountSettings": "계정 설정",
"account": "계정",
"accountFor": "계정: {{name}}",
"sections": {
"tools": "도구",
"enhance": "향상",
"biometrics": "생체 인식",
"agents": "에이전트",
"system": "시스템"
},
"items": {
"home": "홈",
"installModels": "모델 설치",
"chat": "채팅",
"studio": "스튜디오",
"talk": "대화",
"fineTune": "파인튜닝 (실험적)",
"quantize": "양자화 (실험적)",
"audioTransform": "오디오 변환",
"faceRecognition": "얼굴 인식",
"voiceRecognition": "음성 인식",
"agents": "에이전트",
"skills": "스킬",
"memory": "메모리",
"mcpJobs": "MCP CI 작업",
"usage": "사용량",
"users": "사용자",
"middleware": "미들웨어",
"backends": "백엔드",
"traces": "트레이스",
"nodes": "노드",
"swarm": "Swarm",
"system": "시스템",
"settings": "설정",
"api": "API"
},
"footer": {
"github": "GitHub",
"documentation": "문서",
"author": "작성자",
"copyright": "© 2023-{{year}} {{author}}"
}
}

View File

@@ -0,0 +1,79 @@
{
"title": "스킬",
"subtitle": "에이전트 스킬(재사용 가능한 지침 및 리소스)을 관리합니다",
"unavailable": {
"subtitle": "스킬 서비스를 사용할 수 없거나 인덱스를 다시 빌드하는 중입니다. 잠시 후 다시 시도하세요.",
"retry": "다시 시도"
},
"actions": {
"newSkill": "새 스킬",
"createSkill": "스킬 만들기",
"import": "가져오기",
"importing": "가져오는 중...",
"gitRepos": "Git 저장소",
"edit": "편집",
"delete": "삭제",
"export": "내보내기",
"sync": "동기화",
"addRepo": "저장소 추가",
"adding": "추가 중...",
"remove": "제거",
"enable": "사용",
"disable": "사용 안 함"
},
"search": {
"placeholder": "스킬 검색..."
},
"git": {
"title": "Git 저장소",
"description": "스킬을 가져올 Git 저장소를 추가합니다. 동기화 후 스킬이 목록에 표시됩니다.",
"urlPlaceholder": "https://github.com/user/repo 또는 git@github.com:user/repo.git",
"noRepos": "구성된 Git 저장소가 없습니다. 위에서 추가하세요.",
"disabled": "사용 안 함",
"removeRepo": "저장소 제거"
},
"card": {
"noDescription": "설명 없음",
"readOnly": "읽기 전용",
"editTitle": "스킬 편집",
"deleteTitle": "스킬 삭제",
"exportTitle": ".tar.gz로 내보내기"
},
"empty": {
"title": "스킬을 찾을 수 없습니다",
"text": "스킬을 만들거나 가져와서 시작하세요.",
"noPersonal": "아직 스킬이 없습니다."
},
"sections": {
"yourSkills": "내 스킬",
"otherUsersSkills": "다른 사용자의 스킬"
},
"deleteDialog": {
"title": "스킬 삭제",
"message": "스킬 \"{{name}}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"confirm": "삭제"
},
"removeRepoDialog": {
"title": "Git 저장소 제거",
"message": "이 Git 저장소를 제거하시겠습니까? 해당 저장소의 스킬을 더 이상 사용할 수 없게 됩니다.",
"confirm": "제거"
},
"toasts": {
"loadFailed": "스킬을 불러오지 못했습니다",
"deleted": "스킬 \"{{name}}\"이(가) 삭제되었습니다",
"deleteFailed": "스킬 삭제 실패",
"exported": "스킬 \"{{name}}\"이(가) 내보내졌습니다",
"exportFailed": "내보내기 실패",
"imported": "\"{{file}}\"에서 스킬을 가져왔습니다",
"importFailed": "가져오기 실패",
"loadReposFailed": "Git 저장소를 불러오지 못했습니다",
"repoAdded": "Git 저장소가 추가되고 동기화 중입니다",
"addRepoFailed": "저장소 추가 실패",
"synced": "저장소가 동기화되었습니다",
"syncFailed": "동기화 실패",
"toggled": "저장소가 전환되었습니다",
"toggleFailed": "전환 실패",
"removed": "저장소가 제거되었습니다",
"removeFailed": "제거 실패"
}
}

View File

@@ -11,6 +11,7 @@ export const SUPPORTED_LANGUAGES = [
{ code: 'de', name: 'Deutsch', flag: 'DE' },
{ code: 'zh-CN', name: '简体中文', flag: 'ZH' },
{ code: 'id', name: 'Bahasa Indonesia', flag: 'ID' },
{ code: 'ko', name: '한국어', flag: 'KO' },
]
export const NAMESPACES = [