Skip to content

Commit 36b4a81

Browse files
authored
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>
1 parent 0854932 commit 36b4a81

14 files changed

Lines changed: 1127 additions & 0 deletions

File tree

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"manage": {
3+
"title": "시스템",
4+
"subtitle": "설치된 모델과 백엔드를 관리합니다"
5+
},
6+
"settings": {
7+
"title": "설정",
8+
"subtitle": "LocalAI 런타임 설정을 구성합니다",
9+
"saved": "설정이 저장되었습니다",
10+
"saveFailed": "저장 실패: {{message}}",
11+
"loadFailed": "설정을 불러오지 못했습니다: {{message}}",
12+
"sections": {
13+
"branding": "브랜딩",
14+
"watchdog": "워치독",
15+
"memory": "메모리",
16+
"backends": "백엔드",
17+
"performance": "성능",
18+
"tracing": "트레이싱",
19+
"api": "API 및 CORS",
20+
"p2p": "P2P",
21+
"galleries": "갤러리",
22+
"apikeys": "API 키",
23+
"agents": "에이전트 작업",
24+
"agentpool": "에이전트 풀",
25+
"assistant": "LocalAI 어시스턴트",
26+
"responses": "응답"
27+
}
28+
},
29+
"backends": {
30+
"title": "백엔드 관리",
31+
"subtitle": "모델을 구동할 AI 백엔드를 탐색하고 설치합니다"
32+
},
33+
"backendLogs": {
34+
"title": "백엔드 로그",
35+
"subtitle": "실행 중인 백엔드의 로그를 확인합니다",
36+
"empty": "사용 가능한 로그가 없습니다"
37+
},
38+
"traces": {
39+
"title": "트레이스",
40+
"subtitle": "기록된 API 요청, 응답, 백엔드 작업을 확인합니다"
41+
},
42+
"nodes": {
43+
"title": "분산 노드",
44+
"subtitle": "백엔드 및 에이전트 워커 노드를 관리합니다"
45+
},
46+
"p2p": {
47+
"title": "분산 AI 컴퓨팅",
48+
"subtitle": "피어 투 피어 분산으로 여러 기기에 걸쳐 AI 워크로드를 확장합니다"
49+
},
50+
"users": {
51+
"title": "사용자",
52+
"subtitle": "등록된 사용자, 역할, 초대를 관리합니다"
53+
},
54+
"usage": {
55+
"title": "사용량",
56+
"subtitle": "API 토큰 사용량 통계",
57+
"sources": {
58+
"tab": "출처",
59+
"mixTitle": "출처 구성",
60+
"ribbonAria": "API 키 {{apikey}}%, 웹 UI {{web}}%, 레거시 {{legacy}}%",
61+
"topSources": "기간별 상위 출처",
62+
"searchPlaceholder": "이름 또는 접두사로 검색",
63+
"sortBy": "정렬",
64+
"sortTokens": "토큰",
65+
"sortRequests": "요청",
66+
"sortLastUsed": "마지막 사용",
67+
"sortName": "이름",
68+
"sortUser": "사용자",
69+
"webUI": "웹 UI",
70+
"legacy": "레거시",
71+
"revoked": "해지됨",
72+
"filteredTo": "필터: {{name}}",
73+
"clearFilter": "필터 지우기",
74+
"other": "기타 ({{count}})",
75+
"noTrafficShort": "이 기간에는 요청이 없습니다.",
76+
"noKeysYet": "요청이 들어오면 여기에 항목별로 표시됩니다.",
77+
"createKey": "첫 API 키 만들기",
78+
"truncatedWarning": "상위 200개 키를 표시합니다. 필터를 적용해 범위를 좁혀 보세요."
79+
}
80+
},
81+
"explorer": {
82+
"title": "탐색기",
83+
"subtitle": "파일과 구성을 둘러봅니다"
84+
}
85+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"title": "에이전트",
3+
"subtitle": "자율 AI 에이전트를 관리합니다",
4+
"actions": {
5+
"agentHub": "에이전트 허브",
6+
"import": "가져오기",
7+
"createAgent": "에이전트 만들기",
8+
"edit": "편집",
9+
"chat": "채팅",
10+
"export": "내보내기",
11+
"delete": "삭제",
12+
"pause": "일시중지",
13+
"resume": "재개"
14+
},
15+
"table": {
16+
"name": "이름",
17+
"status": "상태",
18+
"events": "이벤트",
19+
"actions": "작업",
20+
"eventsTooltip": "이벤트 {{count}}개 - 클릭하여 보기"
21+
},
22+
"search": {
23+
"placeholder": "에이전트 검색...",
24+
"summary_one": "에이전트 {{total}}개 중 {{shown}}개",
25+
"summary_other": "에이전트 {{total}}개 중 {{shown}}개"
26+
},
27+
"empty": {
28+
"noConfigured": "구성된 에이전트가 없습니다",
29+
"noConfiguredText": "에이전트를 만들어 자율 AI 워크플로를 시작하세요.",
30+
"browseHub": "어디서 시작할지 모르겠나요? <1>에이전트 허브</1>를 둘러보고 바로 가져올 수 있는 에이전트 구성을 찾아보세요.",
31+
"noMatching": "일치하는 에이전트가 없습니다",
32+
"noMatchingText": "\"{{query}}\"와 일치하는 에이전트가 없습니다"
33+
},
34+
"sections": {
35+
"yourAgents": "내 에이전트",
36+
"otherUsersAgents": "다른 사용자의 에이전트"
37+
},
38+
"deleteDialog": {
39+
"title": "에이전트 삭제",
40+
"message": "에이전트 \"{{name}}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
41+
"confirm": "삭제"
42+
},
43+
"toasts": {
44+
"loadFailed": "에이전트를 불러오지 못했습니다: {{message}}",
45+
"deleted": "에이전트 \"{{name}}\"이(가) 삭제되었습니다",
46+
"deleteFailed": "에이전트 삭제 실패: {{message}}",
47+
"paused": "에이전트 \"{{name}}\"이(가) 일시중지되었습니다",
48+
"resumed": "에이전트 \"{{name}}\"이(가) 재개되었습니다",
49+
"pauseFailed": "에이전트 일시중지 실패: {{message}}",
50+
"resumeFailed": "에이전트 재개 실패: {{message}}",
51+
"exported": "에이전트 \"{{name}}\"이(가) 내보내졌습니다",
52+
"exportFailed": "에이전트 내보내기 실패: {{message}}",
53+
"parseFailed": "에이전트 파일을 분석하지 못했습니다: {{message}}"
54+
}
55+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"login": {
3+
"subtitle": "계속하려면 로그인하세요",
4+
"registerSubtitle": "계정을 만듭니다",
5+
"createAdminSubtitle": "관리자 계정을 만듭니다",
6+
"tokenSubtitle": "계속하려면 API 키를 입력하세요",
7+
"email": "이메일",
8+
"emailPlaceholder": "you@example.com",
9+
"name": "이름",
10+
"namePlaceholder": "이름 (선택 사항)",
11+
"password": "비밀번호",
12+
"passwordPlaceholder": "비밀번호 입력...",
13+
"newPasswordPlaceholder": "최소 12자 이상",
14+
"confirmPassword": "비밀번호 확인",
15+
"confirmPasswordPlaceholder": "비밀번호 재입력",
16+
"inviteCodeLabel": "초대 코드",
17+
"inviteCodeOptional": " (선택 사항 — 승인 대기를 건너뜁니다)",
18+
"inviteCodePlaceholder": "초대 코드를 붙여넣으세요...",
19+
"tokenPlaceholder": "API 키 입력...",
20+
"tokenAltPlaceholder": "API 토큰 입력...",
21+
"signIn": "로그인",
22+
"signingIn": "로그인 중...",
23+
"register": "회원가입",
24+
"creatingAccount": "계정 생성 중...",
25+
"createAdminAccount": "관리자 계정 만들기",
26+
"signInWithGitHub": "GitHub로 로그인",
27+
"signInWithSSO": "SSO로 로그인",
28+
"loginWithToken": "토큰으로 로그인",
29+
"showTokenLogin": "API 토큰으로 로그인",
30+
"hideTokenLogin": "토큰 로그인 숨기기",
31+
"noAccount": "계정이 없으신가요?",
32+
"hasAccount": "이미 계정이 있으신가요?",
33+
"or": "또는",
34+
"errors": {
35+
"loginFailed": "로그인 실패",
36+
"registrationFailed": "회원가입 실패",
37+
"invalidToken": "유효하지 않은 토큰",
38+
"passwordsDoNotMatch": "비밀번호가 일치하지 않습니다",
39+
"enterToken": "토큰을 입력해 주세요",
40+
"networkError": "네트워크 오류",
41+
"inviteRequired": "회원가입하려면 유효한 초대 코드가 필요합니다"
42+
},
43+
"messages": {
44+
"registrationPending": "회원가입이 완료되었습니다. 승인을 기다리고 있습니다."
45+
}
46+
},
47+
"account": {
48+
"title": "계정",
49+
"subtitle": "프로필, 자격 증명, API 키",
50+
"unavailable": "계정을 사용할 수 없습니다",
51+
"unavailableText": "계정을 관리하려면 인증이 활성화되어 있어야 합니다.",
52+
"tabs": {
53+
"profile": "프로필",
54+
"security": "보안",
55+
"apiKeys": "API 키"
56+
},
57+
"profile": {
58+
"displayName": "표시 이름",
59+
"displayNameDescription": "공개적으로 표시되는 이름",
60+
"avatarUrl": "아바타 URL",
61+
"avatarUrlDescription": "프로필 사진 URL",
62+
"avatarUrlPlaceholder": "https://example.com/avatar.png",
63+
"save": "저장",
64+
"saving": "저장 중...",
65+
"updated": "프로필이 업데이트되었습니다",
66+
"updateFailed": "프로필 업데이트 실패: {{message}}"
67+
},
68+
"security": {
69+
"currentPassword": "현재 비밀번호",
70+
"currentPasswordDescription": "본인 확인을 위해 기존 비밀번호를 입력하세요",
71+
"currentPasswordPlaceholder": "현재 비밀번호",
72+
"newPassword": "새 비밀번호",
73+
"newPasswordDescription": "최소 12자 이상이어야 합니다",
74+
"newPasswordPlaceholder": "새 비밀번호",
75+
"confirmPassword": "비밀번호 확인",
76+
"confirmPasswordDescription": "새 비밀번호를 다시 입력하세요",
77+
"confirmPasswordPlaceholder": "새 비밀번호 확인",
78+
"changePassword": "비밀번호 변경",
79+
"changing": "변경 중...",
80+
"changed": "비밀번호가 변경되었습니다",
81+
"passwordsDoNotMatch": "비밀번호가 일치하지 않습니다",
82+
"tooShort": "새 비밀번호는 최소 12자 이상이어야 합니다",
83+
"oauthOnly": "{{provider}} 계정은 비밀번호 관리를 사용할 수 없습니다."
84+
},
85+
"apiKeys": {
86+
"create": "API 키 만들기",
87+
"createDescription": "프로그래밍 방식 접근을 위한 키를 생성합니다",
88+
"namePlaceholder": "키 이름 (예: my-app)",
89+
"createButton": "만들기",
90+
"creating": "생성 중...",
91+
"createdToast": "API 키가 생성되었습니다",
92+
"createFailed": "API 키 생성 실패: {{message}}",
93+
"loadFailed": "API 키를 불러오지 못했습니다: {{message}}",
94+
"revoke": "해지",
95+
"revokeKey": "키 해지",
96+
"revokeTitle": "API 키 해지",
97+
"revokeMessage": "API 키 \"{{name}}\"을(를) 해지하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
98+
"revoked": "API 키가 해지되었습니다",
99+
"revokeFailed": "API 키 해지 실패: {{message}}",
100+
"copyNow": "지금 복사하세요 — 이 키는 다시 표시되지 않습니다",
101+
"copiedToast": "클립보드에 복사되었습니다",
102+
"copyFailed": "복사하지 못했습니다",
103+
"empty": "아직 API 키가 없습니다. 위에서 하나를 만들어 프로그래밍 방식 접근을 시작하세요.",
104+
"lastUsed": "마지막 사용 {{date}}"
105+
}
106+
},
107+
"notFound": {
108+
"title": "페이지를 찾을 수 없습니다",
109+
"text": "이 페이지가 사라진 것 같습니다. 다시 돌아가도록 도와드리겠습니다.",
110+
"goHome": "홈으로 이동"
111+
}
112+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
{
2+
"activity": {
3+
"thought": "생각",
4+
"tool": "도구",
5+
"result": "결과",
6+
"toolResult": "{{name}} 결과",
7+
"thinking": "생각 중..."
8+
},
9+
"header": {
10+
"manageModeTooltip": "이 채팅은 LocalAI와 대화하여 모델을 설치하고, 구성을 편집하고, 백엔드를 관리할 수 있습니다.",
11+
"modelInfo": "모델 정보",
12+
"chatSettings": "채팅 설정",
13+
"modelInfoTitle": "모델 정보: {{model}}",
14+
"editConfig": "구성 편집",
15+
"close": "닫기"
16+
},
17+
"modelInfo": {
18+
"backend": "백엔드",
19+
"modelFile": "모델 파일",
20+
"contextSize": "컨텍스트 크기",
21+
"threads": "스레드",
22+
"mcp": "MCP",
23+
"configured": "구성됨",
24+
"chatTemplate": "채팅 템플릿",
25+
"yes": "",
26+
"gpuLayers": "GPU 레이어"
27+
},
28+
"context": {
29+
"label": "컨텍스트: {{percent}}%",
30+
"labelWithTokens": "컨텍스트: {{percent}}% ({{tokens}} 토큰)"
31+
},
32+
"settings": {
33+
"title": "채팅 설정",
34+
"manageMode": "관리 모드",
35+
"manageModeDesc": "이 채팅이 LocalAI와 대화하여 모델을 설치하고, 백엔드를 전환하고, 구성을 편집할 수 있게 합니다.",
36+
"systemPrompt": "시스템 프롬프트",
37+
"systemPromptPlaceholder": "당신은 도움이 되는 어시스턴트입니다...",
38+
"temperature": "Temperature",
39+
"topP": "Top P",
40+
"topK": "Top K",
41+
"contextSize": "컨텍스트 크기",
42+
"contextSizePlaceholder": "2048",
43+
"clearHistory": "채팅 기록 지우기"
44+
},
45+
"empty": {
46+
"manageTitle": "채팅으로 LocalAI 관리",
47+
"manageText": "모델 설치, 백엔드 전환, 구성 편집 또는 상태 확인을 요청하세요. 어시스턴트가 작업을 요약하고 변경하기 전에 확인을 기다립니다.",
48+
"startTitle": "대화 시작",
49+
"readyText": "{{model}}와(과) 채팅할 준비가 되었습니다",
50+
"selectModelText": "시작하려면 위에서 모델을 선택하세요",
51+
"suggestionsManage": [
52+
"무엇이 설치되어 있나요?",
53+
"채팅 모델 설치하기",
54+
"시스템 상태 보기",
55+
"백엔드 업데이트하기"
56+
],
57+
"suggestionsChat": [
58+
"이게 어떻게 작동하는지 설명해 줘",
59+
"코드 작성을 도와줘",
60+
"문서를 요약해 줘",
61+
"아이디어를 브레인스토밍해 줘"
62+
],
63+
"recent": "최근",
64+
"noMessages": "아직 메시지가 없습니다",
65+
"hintEnter": "Enter로 전송",
66+
"hintShiftEnter": "Shift+Enter로 줄바꿈",
67+
"hintAttach": "파일 첨부"
68+
},
69+
"errors": {
70+
"viewTraces": "자세한 내용은 트레이스를 확인하세요"
71+
},
72+
"actions": {
73+
"copy": "복사",
74+
"regenerate": "다시 생성"
75+
},
76+
"streaming": {
77+
"transferring": "모델 전송 중...",
78+
"transferringTo": "{{node}}(으)로 모델 전송 중..."
79+
},
80+
"tokens": {
81+
"perSec": "{{count}} tok/s",
82+
"peak": "최고: {{count}} tok/s",
83+
"usage": "{{prompt}}p + {{completion}}c = {{total}}"
84+
},
85+
"input": {
86+
"placeholder": "메시지...",
87+
"attachFile": "파일 첨부",
88+
"stopGenerating": "생성 중지",
89+
"canvasTitle": "캔버스 — 코드 블록과 미디어를 사이드 패널로 추출해 미리보기, 복사, 다운로드할 수 있습니다",
90+
"canvasLabel": "캔버스",
91+
"openCanvas": "캔버스 패널 열기"
92+
},
93+
"deleteAllDialog": {
94+
"title": "모든 채팅 삭제",
95+
"message": "모든 채팅을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
96+
"confirm": "모두 삭제"
97+
},
98+
"toasts": {
99+
"selectModel": "모델을 선택해 주세요",
100+
"copied": "클립보드에 복사되었습니다",
101+
"copyFailed": "클립보드에 복사할 수 없습니다"
102+
},
103+
"menu": {
104+
"trigger": "채팅",
105+
"triggerTitle": "대화 (Ctrl/Cmd+K)",
106+
"search": "대화 검색...",
107+
"clearSearch": "검색 지우기",
108+
"noMatch": "검색과 일치하는 대화가 없습니다",
109+
"noConversations": "아직 대화가 없습니다",
110+
"rename": "이름 변경",
111+
"exportMarkdown": "Markdown으로 내보내기",
112+
"deleteChat": "채팅 삭제",
113+
"newChat": "새 채팅",
114+
"clearAll": "모두 지우기",
115+
"deleteAllTitle": "모든 대화 삭제"
116+
}
117+
}

0 commit comments

Comments
 (0)