Skip to content

Commit 5da8804

Browse files
authored
feat(i18n): korean language support (#828)
## What type of PR is this? <!-- Add one of the following kinds: /kind bug /kind cleanup /kind refactor /kind documentation /kind feature /kind chore /kind perf /kind style /kind test --> /kind feature ## What this PR does / why we need it: - Added Korean translations for UI labels and messages - Updated i18n configuration to include `ko` locale ## Which issue(s) this PR fixes: <!-- *Automatically closes linked issue when PR is merged. Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`. _If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_* --> Fixes # Signed-off-by: nueavv <[email protected]>
1 parent dbf5be5 commit 5da8804

File tree

4 files changed

+242
-0
lines changed

4 files changed

+242
-0
lines changed

ui/src/i18n.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import en from './locales/en.json'
55
import zh from './locales/zh.json'
66
import de from './locales/de.json'
77
import pt from './locales/pt.json'
8+
import ko from './locales/ko.json'
89

910
const resources = {
1011
en: {
@@ -19,6 +20,9 @@ const resources = {
1920
pt: {
2021
translation: pt,
2122
},
23+
ko: {
24+
translation: ko,
25+
},
2226
}
2327

2428
const currentLocale = localStorage.getItem('lang') || 'en'

ui/src/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import zhCN from 'antd/locale/zh_CN'
99
import enUS from 'antd/locale/en_US'
1010
import deDE from 'antd/locale/de_DE'
1111
import ptBR from 'antd/locale/pt_BR'
12+
import koKR from 'antd/locale/ko_KR'
1213
import { BrowserRouter } from 'react-router-dom'
1314
import WrappedRoutes from '@/router'
1415
import store from '@/store'
@@ -34,6 +35,7 @@ function App() {
3435
zh: zhCN,
3536
de: deDE,
3637
pt: ptBR,
38+
ko: koKR,
3739
}
3840

3941
return (

ui/src/locales/ko.json

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
{
2+
"Help": "도움말",
3+
"ReadOnlyMode": "읽기 전용 모드",
4+
"Search": "검색",
5+
"Cluster": "클러스터",
6+
"Insight": "인사이트",
7+
"KeywordSearch": "키워드 검색",
8+
"SQLSearch": "SQL 검색",
9+
"SearchUsingSQL": "SQL로 검색하기",
10+
"PopularQueries": "자주 쓰는 쿼리",
11+
"ClusterManagement": "클러스터 관리",
12+
"AllClusters": "전체 클러스터",
13+
"HealthyClusters": "정상 클러스터",
14+
"UnhealthyClusters": "문제 있는 클러스터",
15+
"SortByName": "이름 순으로 정렬",
16+
"SortByTime": "시간 순으로 정렬",
17+
"RegisterCluster": "클러스터 등록",
18+
"Edit": "편집",
19+
"RotateCertificate": "인증서 갱신",
20+
"Delete": "삭제",
21+
"AboutInSearchResult": "검색 결과 개요",
22+
"SearchResult": "검색 결과",
23+
"AllIssues": "모든 이슈",
24+
"HighRisk": "심각한 위험",
25+
"MediumRisk": "중간 위험",
26+
"LowRisk": "낮은 위험",
27+
"Rescan": "재 스캔",
28+
"CheckAllIssues": "모든 위험 보기",
29+
"ResourceTopology": "리소스 토폴로지",
30+
"LogAggregator": "로그",
31+
"LogAggregator.SelectContainer": "컨테이너 선택",
32+
"LogAggregator.ResumeLogs": "로그 재시작",
33+
"LogAggregator.PauseLogs": "로그 일시 중지",
34+
"LogAggregator.ClearLogs": "로그 지우기",
35+
"LogAggregator.DiagnoseLogs": "AI 진단",
36+
"LogAggregator.Connected": "연결됨",
37+
"LogAggregator.Disconnected": "연결 끊김",
38+
"LogAggregator.ConnectedTip": "컨테이너 {{container}}에 연결되었습니다",
39+
"LogAggregator.DisconnectedTip": "연결이 끊어졌습니다. 재연결 중입니다...",
40+
"LogAggregator.DiagnosisResult": "AI 진단 결과",
41+
"LogAggregator.PreparingDiagnosis": "분석 중...",
42+
"LogAggregator.DiagnosisError": "진단 실패",
43+
"LogAggregator.TryAgainLater": "잠시 후 다시 시도해주세요",
44+
"LogAggregator.DiagnosisConnectionError": "연결 실패로 진단을 시작하지 못했습니다",
45+
"LogAggregator.FailedToStartDiagnosis": "진단을 시작할 수 없습니다",
46+
"LogAggregator.FailedToDiagnoseLogs": "로그 진단에 실패했습니다",
47+
"LogAggregator.StopDiagnosis": "진단 중단",
48+
"LogAggregator.DownloadLogs": "로그 다운로드",
49+
"LogAggregator.DownloadError": "로그 다운로드에 실패했습니다",
50+
"LogAggregator.Settings": "로그 설정",
51+
"LogAggregator.Since": "언제부터 로그를 보여줄지",
52+
"LogAggregator.SinceTime": "특정 시간 이후의 로그 표시",
53+
"LogAggregator.TailLines": "표시할 로그 라인 수",
54+
"LogAggregator.ShowTimestamps": "타임스탬프 표시",
55+
"LogAggregator.NoLogsSelected": "선택된 로그가 없습니다",
56+
"LogAggregator.SearchPlaceholder": "로그 검색...",
57+
"LogAggregator.SearchModeHighlight": "하이라이트 모드",
58+
"LogAggregator.SearchModeFilter": "필터 모드",
59+
"LogAggregator.FullScreen": "전체 화면",
60+
"EventAggregator": "이벤트",
61+
"EventAggregator.Type": "이벤트 종류",
62+
"EventAggregator.Normal": "정상",
63+
"EventAggregator.Warning": "경고",
64+
"EventAggregator.Diagnose": "AI 진단",
65+
"EventAggregator.DiagnosisInProgress": "분석 중...",
66+
"EventAggregator.DiagnosisResult": "AI 진단 결과",
67+
"EventAggregator.PreparingDiagnosis": "분석 중...",
68+
"EventAggregator.DiagnosisError": "진단 실패",
69+
"EventAggregator.TryAgainLater": "잠시 후 다시 시도해주세요",
70+
"EventAggregator.DiagnosisConnectionError": "진단 연결에 실패했습니다",
71+
"EventAggregator.FailedToStartDiagnosis": "진단을 시작할 수 없습니다",
72+
"EventAggregator.FailedToDiagnoseLogs": "이벤트 진단에 실패했습니다",
73+
"EventAggregator.ConnectionError": "이벤트 스트림 연결에 실패했습니다",
74+
"EventAggregator.StopDiagnosis": "진단 중단",
75+
"EventAggregator.DiagnosisFailed": "진단에 실패했습니다",
76+
"EventAggregator.NoEvents": "이벤트가 없습니다",
77+
"EventAggregator.SearchEvents": "이벤트 검색...",
78+
"EventAggregator.ColumnType": "유형",
79+
"EventAggregator.ColumnReason": "원인",
80+
"EventAggregator.ColumnMessage": "메시지",
81+
"EventAggregator.ColumnTimes": "횟수",
82+
"EventAggregator.ColumnFirstSeen": "최초 발생",
83+
"EventAggregator.ColumnLastSeen": "마지막 발생",
84+
"Name": "이름",
85+
"Times": "횟수",
86+
"FilterByName": "이름으로 필터링",
87+
"SelectResourcesAboveToSeeDetailsHere": "위에서 리소스를 선택하면 자세한 정보를 볼 수 있습니다",
88+
"Issues": "이슈",
89+
"Critical": "심각",
90+
"High": "높음",
91+
"Medium": "중간",
92+
"Low": "낮음",
93+
"Safe": "안전",
94+
"IssueSource": "이슈 출처",
95+
"NumberOfOccurrences": "발생 횟수",
96+
"Description": "설명",
97+
"RelatedResources": "관련 리소스",
98+
"More": "더보기",
99+
"Less": "숨기기",
100+
"Capacity": "용량",
101+
"Memory": "메모리",
102+
"MemoryCapacity": "메모리 용량",
103+
"Version": "버전",
104+
"SorryThePageYouVisitedDoesNotExist": "페이지를 찾을 수 없습니다",
105+
"BackToHome": "홈으로 돌아가기",
106+
"Cancel": "취소",
107+
"Submit": "제출",
108+
"OK": "확인",
109+
"DisplayName": "화면에 표시될 이름",
110+
"ClusterName": "클러스터 이름",
111+
"ClusterDetail": "클러스터 상세",
112+
"DataSyncConfiguration": "데이터 동기화 설정",
113+
"VerifiedSuccessfullyAndSubmitted": "검증을 마치고 정상적으로 제출했습니다",
114+
"VerificationSuccessfulButSubmissionFailed": "검증에는 성공했으나 제출에 실패했습니다",
115+
"KubeConfigDoesNotMeetTheRequirements": "KubeConfig 형식이 올바르지 않습니다. 유효한 인증서를 업로드해주세요",
116+
"UploadSuccessful": "업로드 성공",
117+
"TheFileMustBeIn": "파일 형식은 다음만 지원합니다",
118+
"TheKubeConfigFileCannotBeEmpty": "KubeConfig 파일이 비어 있습니다.",
119+
"Upload": "업로드",
120+
"ConfigurationFile": "설정 파일",
121+
"VerifyAndSubmit": "검증 후 제출",
122+
"ExistingConfigurations": "기존 설정",
123+
"NewConfiguration": "새 설정",
124+
"PleaseUploadNewKubeConfigFile": "새로운 KubeConfig 파일을 업로드해주세요",
125+
"SubmitAnd3STOClusterPage": "검증 후 제출이 완료되었습니다. 곧 클러스터 관리 페이지로 이동합니다",
126+
"SubmitAndValidate": "검증 및 제출 중",
127+
"SubmitAndUpdate": "검증 후 업데이트",
128+
"DeleteAndNoLongUpdateResources": "삭제하면 더 이상 이 클러스터를 관리하지 않고 관련 리소스도 업데이트되지 않습니다",
129+
"UpdateSuccess": "수정 완료",
130+
"RequestFailedAndTry": "요청에 실패했습니다. 다시 시도해주세요",
131+
"DeletedSuccess": "삭제 완료",
132+
"EmptyCluster": "현재 관리 중인 클러스터가 없습니다",
133+
"ClusterRequiresKubeConfigConfigurationFileAccess": "새 클러스터의 KubeConfig 파일을 업로드해주세요",
134+
"PleaseEnterKeywords": "검색어를 입력하세요",
135+
"IssuesDetail": "이슈 상세",
136+
"Close": "닫기",
137+
"Total": "",
138+
"ViewIssueDetail": "이슈 상세 보기",
139+
"Occur": "발생",
140+
"CollectedFrom": "수집 위치",
141+
"Tool": "도구",
142+
"NoIssuesFound": "이슈가 발견되지 않았습니다",
143+
"HealthScore": "상태 점수",
144+
"TriggeredTimestamp": "트리거 시점",
145+
"Exception": "예외",
146+
"Warning": "경고",
147+
"Normal": "정상",
148+
"CreateTime": "생성 시각",
149+
"InDevelopment": "개발 중",
150+
"InputClusterName": "클러스터 이름을 입력해주세요",
151+
"YAML": {
152+
"NoContent": "해석할 내용이 없습니다",
153+
"Interpret": "AI 해석",
154+
"InterpretResult": "해석 결과",
155+
"InterpretInProgress": "해석 중...",
156+
"StopInterpret": "해석 중단",
157+
"InterpretConnectionError": "해석 연결 오류",
158+
"FailedToStartInterpret": "해석을 시작할 수 없습니다",
159+
"FailedToInterpret": "해석 실패",
160+
"TabName": "YAML",
161+
"Refresh": "새로고침"
162+
},
163+
"Yesterday": "어제",
164+
"Collapse": "접기",
165+
"Expand": "펼치기",
166+
"Detail": "자세히 보기",
167+
"View": "보기",
168+
"AllTags": "모든 태그",
169+
"DuplicateData": "중복된 데이터입니다. 다시 확인해주세요",
170+
"AreYouSureDeleteResourceGroupRule": "정말 리소스 그룹 규칙을 삭제하시겠습니까?",
171+
"Copy": "복사",
172+
"CopySuccess": "복사 완료",
173+
"TotalResourceGroupRules": "등록된 리소스 그룹 규칙",
174+
"TotalResources": "전체 리소스",
175+
"ClusterCount": "클러스터 수",
176+
"UnableCreateResourceGroupInReadOnly": "읽기 전용 모드에서는 리소스 그룹 규칙을 생성할 수 없습니다",
177+
"PleaseEnterValidSQLStatement": "유효한 SQL 문을 입력해주세요",
178+
"NoClusterAndJumpToClusterPage": "현재 연결된 클러스터가 없습니다. 먼저 클러스터를 등록해주세요",
179+
"Logout": "로그아웃",
180+
"TokenCreationGuide": "Hub 클러스터에 접속하려면 토큰이 필요합니다. 자세히 보기: <a href='{{linkUrl}}' target='_blank'>[토큰 생성 방법]</a>",
181+
"LoginFailedAndCheck": "로그인에 실패했습니다. 입력하신 토큰이 유효한지 확인해주세요",
182+
"UnLoginAndTokenLogin": "현재 로그인되어 있지 않습니다. 토큰을 입력하여 로그인해주세요",
183+
"LoginSuccess": "로그인 성공",
184+
"Login": "로그인",
185+
"LogoutSuccess": "로그아웃 성공",
186+
"InputToken": "토큰 입력",
187+
"SearchByNaturalLanguage": "자연어 검색",
188+
"CannotBeEmpty": "비워둘 수 없습니다",
189+
"DefaultTag": "기본 태그",
190+
"FailedToParsePodDetails": "Pod 세부 정보를 파싱하는 데 실패했습니다",
191+
"CopiedToClipboard": "클립보드에 복사됨",
192+
"Metrics": {
193+
"Tooltips": {
194+
"NodeCount": "클러스터 내 전체 노드 수",
195+
"ServerVersion": "클러스터의 Kubernetes 서버 버전",
196+
"ReadyNodes": "Ready 상태인 노드 수",
197+
"Pods": "현재 Pod 수 / 배포 가능한 최대 Pod 수",
198+
"CPU": "CPU 사용량 / CPU 전체",
199+
"Memory": "메모리 사용량 / 메모리 전체",
200+
"MetricsServer": "Metrics Server는 Kubelet에서 리소스 지표를 수집합니다"
201+
}
202+
},
203+
"Enabled": "활성화됨",
204+
"Disabled": "비활성화됨",
205+
"ExceptionList": {
206+
"NoIssues": "문제가 발견되지 않았습니다",
207+
"NoIssuesFound": "문제가 발견되지 않았습니다",
208+
"InterpretConnectionError": "해석 연결 실패",
209+
"FailedToInterpretLogs": "로그 해석에 실패했습니다",
210+
"Interpret": "AI 해석",
211+
"InterpretResult": "AI 해석 결과",
212+
"StopInterpret": "해석 중단",
213+
"InterpretInProgress": "분석 중...",
214+
"InterpretFailed": "해석 실패",
215+
"TryAgainLater": "잠시 후 다시 시도해주세요",
216+
"Rescan": "다시 스캔",
217+
"Collapse": "접기",
218+
"Expand": "펼치기",
219+
"CheckAllIssues": "모든 문제 보기",
220+
"ViewIssueDetail": "문제 상세 보기",
221+
"Occur": "발생",
222+
"Times": "횟수",
223+
"CollectedFrom": "수집 위치",
224+
"Tool": "도구",
225+
"Description": "설명",
226+
"High": "높음",
227+
"Medium": "중간",
228+
"Low": "낮음"
229+
}
230+
}
231+

ui/src/utils/constants.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,16 @@ export const Languages = [
127127
label: 'Português',
128128
value: 'pt',
129129
},
130+
{
131+
label: '한국어',
132+
value: 'ko',
133+
},
130134
]
131135

132136
export const LanguagesMap = {
133137
zh: '简体中文',
134138
en: 'English',
135139
de: 'Deutsch',
136140
pt: 'Português',
141+
ko: '한국어',
137142
}

0 commit comments

Comments
 (0)