From cf3d23ee31fe56514aeb150428cf662d2d0f4b69 Mon Sep 17 00:00:00 2001 From: Ayaan-buzzni Date: Mon, 9 Feb 2026 15:47:10 +0900 Subject: [PATCH] feat(i18n): add Korean language support (#367) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(i18n): add Korean language support - Add Korean (ko) translation files for all namespaces: - common.json, auth.json, settings.json, sidebar.json, chat.json, codeEditor.json - Register Korean locale in config.js and languages.js - Follow translation guidelines: - Keep technical terms in English (UI, API, Shell, Git, etc.) - Use Korean phonetic for some terms (TaskMaster → 테스크마스터) - Maintain concise translations to match English length where possible Co-Authored-By: Claude Opus 4.5 * fix(i18n): keep technical term "UI" in Korean translation - Change "인터페이스" back to "UI" in sidebar subtitle - Keep technical terms in English as per translation guidelines Co-Authored-By: Claude Sonnet 4.5 --------- Co-authored-by: Claude Opus 4.5 --- src/i18n/config.js | 15 + src/i18n/languages.js | 5 + src/i18n/locales/ko/auth.json | 37 +++ src/i18n/locales/ko/chat.json | 205 ++++++++++++++ src/i18n/locales/ko/codeEditor.json | 30 ++ src/i18n/locales/ko/common.json | 222 +++++++++++++++ src/i18n/locales/ko/settings.json | 418 ++++++++++++++++++++++++++++ src/i18n/locales/ko/sidebar.json | 112 ++++++++ 8 files changed, 1044 insertions(+) create mode 100644 src/i18n/locales/ko/auth.json create mode 100644 src/i18n/locales/ko/chat.json create mode 100644 src/i18n/locales/ko/codeEditor.json create mode 100644 src/i18n/locales/ko/common.json create mode 100644 src/i18n/locales/ko/settings.json create mode 100644 src/i18n/locales/ko/sidebar.json diff --git a/src/i18n/config.js b/src/i18n/config.js index 5d3889f..d947001 100644 --- a/src/i18n/config.js +++ b/src/i18n/config.js @@ -21,6 +21,13 @@ import enSidebar from './locales/en/sidebar.json'; import enChat from './locales/en/chat.json'; import enCodeEditor from './locales/en/codeEditor.json'; +import koCommon from './locales/ko/common.json'; +import koSettings from './locales/ko/settings.json'; +import koAuth from './locales/ko/auth.json'; +import koSidebar from './locales/ko/sidebar.json'; +import koChat from './locales/ko/chat.json'; +import koCodeEditor from './locales/ko/codeEditor.json'; + import zhCommon from './locales/zh-CN/common.json'; import zhSettings from './locales/zh-CN/settings.json'; import zhAuth from './locales/zh-CN/auth.json'; @@ -60,6 +67,14 @@ i18n chat: enChat, codeEditor: enCodeEditor, }, + ko: { + common: koCommon, + settings: koSettings, + auth: koAuth, + sidebar: koSidebar, + chat: koChat, + codeEditor: koCodeEditor, + }, 'zh-CN': { common: zhCommon, settings: zhSettings, diff --git a/src/i18n/languages.js b/src/i18n/languages.js index 78555f0..318d560 100644 --- a/src/i18n/languages.js +++ b/src/i18n/languages.js @@ -14,6 +14,11 @@ export const languages = [ label: 'English', nativeName: 'English', }, + { + value: 'ko', + label: 'Korean', + nativeName: '한국어', + }, { value: 'zh-CN', label: 'Simplified Chinese', diff --git a/src/i18n/locales/ko/auth.json b/src/i18n/locales/ko/auth.json new file mode 100644 index 0000000..ebfef60 --- /dev/null +++ b/src/i18n/locales/ko/auth.json @@ -0,0 +1,37 @@ +{ + "login": { + "title": "다시 오신 것을 환영합니다", + "description": "Claude Code UI 계정에 로그인하세요", + "username": "사용자명", + "password": "비밀번호", + "submit": "로그인", + "loading": "로그인 중...", + "errors": { + "invalidCredentials": "사용자명 또는 비밀번호가 잘못되었습니다", + "requiredFields": "모든 항목을 입력해주세요", + "networkError": "네트워크 오류. 다시 시도해주세요." + }, + "placeholders": { + "username": "사용자명을 입력하세요", + "password": "비밀번호를 입력하세요" + } + }, + "register": { + "title": "계정 생성", + "username": "사용자명", + "password": "비밀번호", + "confirmPassword": "비밀번호 확인", + "submit": "계정 생성", + "loading": "계정 생성 중...", + "errors": { + "passwordMismatch": "비밀번호가 일치하지 않습니다", + "usernameTaken": "이미 사용 중인 사용자명입니다", + "weakPassword": "비밀번호가 너무 약합니다" + } + }, + "logout": { + "title": "로그아웃", + "confirm": "정말 로그아웃하시겠습니까?", + "button": "로그아웃" + } +} diff --git a/src/i18n/locales/ko/chat.json b/src/i18n/locales/ko/chat.json new file mode 100644 index 0000000..22fca56 --- /dev/null +++ b/src/i18n/locales/ko/chat.json @@ -0,0 +1,205 @@ +{ + "codeBlock": { + "copy": "복사", + "copied": "복사됨", + "copyCode": "코드 복사" + }, + "messageTypes": { + "user": "U", + "error": "오류", + "tool": "도구", + "claude": "Claude", + "cursor": "Cursor", + "codex": "Codex" + }, + "tools": { + "settings": "도구 설정", + "error": "도구 오류", + "result": "도구 결과", + "viewParams": "입력 파라미터 보기", + "viewRawParams": "Raw 파라미터 보기", + "viewDiff": "편집 Diff 보기:", + "creatingFile": "새 파일 생성:", + "updatingTodo": "Todo 리스트 업데이트", + "read": "읽기", + "readFile": "파일 읽기", + "updateTodo": "Todo 리스트 업데이트", + "readTodo": "Todo 리스트 읽기", + "searchResults": "결과" + }, + "search": { + "found": "{{count}}개의 {{type}} 발견", + "file": "파일", + "files": "파일", + "pattern": "패턴:", + "in": "위치:" + }, + "fileOperations": { + "updated": "파일이 업데이트되었습니다", + "created": "파일이 생성되었습니다", + "written": "파일이 작성되었습니다", + "diff": "Diff", + "newFile": "새 파일", + "viewContent": "파일 내용 보기", + "viewFullOutput": "전체 출력 보기 ({{count}}자)", + "contentDisplayed": "파일 내용이 위의 Diff 보기에 표시됩니다" + }, + "interactive": { + "title": "대화형 프롬프트", + "waiting": "CLI에서 응답을 기다리는 중", + "instruction": "Claude가 실행 중인 터미널에서 옵션을 선택해주세요.", + "selectedOption": "✓ Claude가 옵션 {{number}}을(를) 선택했습니다", + "instructionDetail": "CLI에서 화살표 키 또는 숫자를 입력하여 이 옵션을 대화형으로 선택합니다." + }, + "thinking": { + "title": "생각 중...", + "emoji": "💭 생각 중..." + }, + "json": { + "response": "JSON 응답" + }, + "permissions": { + "grant": "{{tool}}에 대한 권한 부여", + "added": "권한이 추가되었습니다", + "addTo": "{{entry}}을(를) 허용된 도구에 추가합니다.", + "retry": "권한이 저장되었습니다. 도구를 사용하려면 요청을 재시도하세요.", + "error": "권한을 업데이트할 수 없습니다. 다시 시도해주세요.", + "openSettings": "설정 열기" + }, + "todo": { + "updated": "Todo 리스트가 업데이트되었습니다", + "current": "현재 Todo 리스트" + }, + "plan": { + "viewPlan": "📋 구현 계획 보기", + "title": "구현 계획" + }, + "usageLimit": { + "resetAt": "Claude 사용량 한도에 도달했습니다. 한도는 **{{time}} {{timezone}}** - {{date}}에 초기화됩니다" + }, + "codex": { + "permissionMode": "권한 모드", + "modes": { + "default": "기본 모드", + "acceptEdits": "편집 허용", + "bypassPermissions": "권한 우회", + "plan": "Plan 모드" + }, + "descriptions": { + "default": "신뢰할 수 있는 명령어(ls, cat, grep, git status 등)만 자동 실행됩니다. 다른 명령어는 건너뜁니다. 워크스페이스에 쓰기 가능.", + "acceptEdits": "워크스페이스 내에서 모든 명령어가 자동 실행됩니다. 샌드박스 내 완전 자동 모드.", + "bypassPermissions": "제한 없는 전체 시스템 접근. 모든 명령어가 전체 디스크 및 네트워크 접근 권한으로 자동 실행됩니다. 주의해서 사용하세요.", + "plan": "계획 모드 - 명령어가 실행되지 않습니다" + }, + "technicalDetails": "기술 상세" + }, + "input": { + "placeholder": "/를 입력하여 명령어, @를 입력하여 파일, 또는 {{provider}}에게 무엇이든 물어보세요...", + "placeholderDefault": "메시지를 입력하세요...", + "disabled": "입력 비활성화", + "attachFiles": "파일 첨부", + "attachImages": "이미지 첨부", + "send": "전송", + "stop": "중지", + "hintText": { + "ctrlEnter": "Ctrl+Enter로 전송 • Shift+Enter로 줄바꿈 • Tab으로 모드 변경 • /로 슬래시 명령어", + "enter": "Enter로 전송 • Shift+Enter로 줄바꿈 • Tab으로 모드 변경 • /로 슬래시 명령어" + }, + "clickToChangeMode": "클릭하여 권한 모드 변경 (또는 입력창에서 Tab)", + "showAllCommands": "모든 명령어 보기" + }, + "thinkingMode": { + "selector": { + "title": "Thinking 모드", + "description": "확장된 thinking은 Claude에게 대안을 평가할 시간을 더 줍니다", + "active": "활성", + "tip": "높은 thinking 모드는 시간이 더 걸리지만 더 철저한 분석을 제공합니다" + }, + "modes": { + "none": { + "name": "Standard", + "description": "일반 Claude 응답", + "prefix": "" + }, + "think": { + "name": "Think", + "description": "기본 확장 thinking", + "prefix": "think" + }, + "thinkHard": { + "name": "Think Hard", + "description": "더 철저한 평가", + "prefix": "think hard" + }, + "thinkHarder": { + "name": "Think Harder", + "description": "대안을 포함한 심층 분석", + "prefix": "think harder" + }, + "ultrathink": { + "name": "Ultrathink", + "description": "최대 thinking 예산", + "prefix": "ultrathink" + } + }, + "buttonTitle": "Thinking 모드: {{mode}}" + }, + "providerSelection": { + "title": "AI 어시스턴트 선택", + "description": "새 대화를 시작할 프로바이더를 선택하세요", + "selectModel": "모델 선택", + "providerInfo": { + "anthropic": "by Anthropic", + "openai": "by OpenAI", + "cursorEditor": "AI 코드 에디터" + }, + "readyPrompt": { + "claude": "{{model}}로 Claude를 사용할 준비가 되었습니다. 아래에 메시지를 입력하세요.", + "cursor": "{{model}}로 Cursor를 사용할 준비가 되었습니다. 아래에 메시지를 입력하세요.", + "codex": "{{model}}로 Codex를 사용할 준비가 되었습니다. 아래에 메시지를 입력하세요.", + "default": "시작하려면 위에서 프로바이더를 선택하세요" + } + }, + "session": { + "continue": { + "title": "대화 계속하기", + "description": "코드에 대해 질문하거나, 변경을 요청하거나, 개발 작업에 도움을 받으세요" + }, + "loading": { + "olderMessages": "이전 메시지 로딩 중...", + "sessionMessages": "세션 메시지 로딩 중..." + }, + "messages": { + "showingOf": "{{total}}개 중 {{shown}}개 표시", + "scrollToLoad": "위로 스크롤하여 더 로드", + "showingLast": "마지막 {{count}}개 메시지 표시 (총 {{total}}개)", + "loadEarlier": "이전 메시지 로드" + } + }, + "shell": { + "selectProject": { + "title": "프로젝트 선택", + "description": "해당 디렉토리에서 대화형 Shell을 열 프로젝트를 선택하세요" + }, + "status": { + "newSession": "새 세션", + "initializing": "초기화 중...", + "restarting": "재시작 중..." + }, + "actions": { + "disconnect": "연결 끊기", + "disconnectTitle": "Shell 연결 끊기", + "restart": "재시작", + "restartTitle": "Shell 재시작 (먼저 연결 끊기)", + "connect": "Shell에서 계속", + "connectTitle": "Shell에 연결" + }, + "loading": "터미널 로딩 중...", + "connecting": "Shell에 연결 중...", + "startSession": "새 Claude 세션 시작", + "resumeSession": "세션 재개: {{displayName}}...", + "runCommand": "{{projectName}}에서 {{command}} 실행", + "startCli": "{{projectName}}에서 Claude CLI 시작", + "defaultCommand": "명령어" + } +} diff --git a/src/i18n/locales/ko/codeEditor.json b/src/i18n/locales/ko/codeEditor.json new file mode 100644 index 0000000..aca3050 --- /dev/null +++ b/src/i18n/locales/ko/codeEditor.json @@ -0,0 +1,30 @@ +{ + "toolbar": { + "changes": "변경사항", + "previousChange": "이전 변경", + "nextChange": "다음 변경", + "hideDiff": "Diff 하이라이트 숨기기", + "showDiff": "Diff 하이라이트 표시", + "settings": "에디터 설정", + "collapse": "에디터 접기", + "expand": "에디터 전체 너비로 펼치기" + }, + "loading": "{{fileName}} 로딩 중...", + "header": { + "showingChanges": "변경사항 표시" + }, + "actions": { + "download": "파일 다운로드", + "save": "저장", + "saving": "저장 중...", + "saved": "저장됨!", + "exitFullscreen": "전체화면 종료", + "fullscreen": "전체화면", + "close": "닫기" + }, + "footer": { + "lines": "줄:", + "characters": "문자:", + "shortcuts": "Ctrl+S로 저장 • Esc로 닫기" + } +} diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json new file mode 100644 index 0000000..01b2461 --- /dev/null +++ b/src/i18n/locales/ko/common.json @@ -0,0 +1,222 @@ +{ + "buttons": { + "save": "저장", + "cancel": "취소", + "delete": "삭제", + "create": "생성", + "edit": "편집", + "close": "닫기", + "confirm": "확인", + "submit": "제출", + "retry": "재시도", + "refresh": "새로고침", + "search": "검색", + "clear": "지우기", + "copy": "복사", + "download": "다운로드", + "upload": "업로드", + "browse": "찾아보기" + }, + "tabs": { + "chat": "채팅", + "shell": "Shell", + "files": "파일", + "git": "소스 관리", + "tasks": "작업" + }, + "status": { + "loading": "로딩 중...", + "success": "성공", + "error": "오류", + "failed": "실패", + "pending": "대기 중", + "completed": "완료", + "inProgress": "진행 중" + }, + "messages": { + "savedSuccessfully": "저장되었습니다", + "deletedSuccessfully": "삭제되었습니다", + "updatedSuccessfully": "업데이트되었습니다", + "operationFailed": "작업 실패", + "networkError": "네트워크 오류. 연결을 확인해주세요.", + "unauthorized": "인증되지 않았습니다. 로그인해주세요.", + "notFound": "찾을 수 없음", + "invalidInput": "잘못된 입력", + "requiredField": "필수 항목입니다", + "unknownError": "알 수 없는 오류가 발생했습니다" + }, + "navigation": { + "settings": "설정", + "home": "홈", + "back": "뒤로", + "next": "다음", + "previous": "이전", + "logout": "로그아웃" + }, + "common": { + "language": "언어", + "theme": "테마", + "darkMode": "다크 모드", + "lightMode": "라이트 모드", + "name": "이름", + "description": "설명", + "enabled": "활성화", + "disabled": "비활성화", + "optional": "선택사항", + "version": "버전", + "select": "선택", + "selectAll": "전체 선택", + "deselectAll": "전체 해제" + }, + "time": { + "justNow": "방금 전", + "minutesAgo": "{{count}}분 전", + "hoursAgo": "{{count}}시간 전", + "daysAgo": "{{count}}일 전", + "yesterday": "어제" + }, + "fileOperations": { + "newFile": "새 파일", + "newFolder": "새 폴더", + "rename": "이름 변경", + "move": "이동", + "copyPath": "경로 복사", + "openInEditor": "에디터에서 열기" + }, + "mainContent": { + "loading": "Claude Code UI 로딩 중", + "settingUpWorkspace": "워크스페이스 설정 중...", + "chooseProject": "프로젝트 선택", + "selectProjectDescription": "사이드바에서 프로젝트를 선택하여 Claude와 코딩을 시작하세요. 각 프로젝트에는 채팅 세션과 파일 히스토리가 포함됩니다.", + "tip": "팁", + "createProjectMobile": "위의 메뉴 버튼을 눌러 프로젝트에 접근하세요", + "createProjectDesktop": "사이드바의 폴더 아이콘을 클릭하여 새 프로젝트를 생성하세요", + "newSession": "새 세션", + "untitledSession": "제목 없는 세션", + "projectFiles": "프로젝트 파일" + }, + "fileTree": { + "loading": "파일 로딩 중...", + "files": "파일", + "simpleView": "간단히 보기", + "compactView": "컴팩트 보기", + "detailedView": "상세히 보기", + "searchPlaceholder": "파일 및 폴더 검색...", + "clearSearch": "검색 지우기", + "name": "이름", + "size": "크기", + "modified": "수정일", + "permissions": "권한", + "noFilesFound": "파일을 찾을 수 없음", + "checkProjectPath": "프로젝트 경로가 접근 가능한지 확인하세요", + "noMatchesFound": "일치하는 항목 없음", + "tryDifferentSearch": "다른 검색어를 시도하거나 검색을 지우세요", + "justNow": "방금 전", + "minAgo": "{{count}}분 전", + "hoursAgo": "{{count}}시간 전", + "daysAgo": "{{count}}일 전" + }, + "projectWizard": { + "title": "새 프로젝트 생성", + "steps": { + "type": "유형", + "configure": "설정", + "confirm": "확인" + }, + "step1": { + "question": "이미 워크스페이스가 있으신가요, 아니면 새로 생성하시겠습니까?", + "existing": { + "title": "기존 워크스페이스", + "description": "서버에 이미 워크스페이스가 있고 프로젝트 목록에 추가만 하면 됩니다" + }, + "new": { + "title": "새 워크스페이스", + "description": "새 워크스페이스를 생성하고, 선택적으로 GitHub 저장소에서 clone합니다" + } + }, + "step2": { + "existingPath": "워크스페이스 경로", + "newPath": "워크스페이스 경로", + "existingPlaceholder": "/path/to/existing/workspace", + "newPlaceholder": "/path/to/new/workspace", + "existingHelp": "기존 워크스페이스 디렉토리의 전체 경로", + "newHelp": "워크스페이스 디렉토리의 전체 경로", + "githubUrl": "GitHub URL (선택사항)", + "githubPlaceholder": "https://github.com/username/repository", + "githubHelp": "선택사항: 저장소를 clone하려면 GitHub URL을 입력하세요", + "githubAuth": "GitHub 인증 (선택사항)", + "githubAuthHelp": "비공개 저장소에만 필요합니다. 공개 저장소는 인증 없이 clone할 수 있습니다.", + "loadingTokens": "저장된 토큰 로딩 중...", + "storedToken": "저장된 토큰", + "newToken": "새 토큰", + "nonePublic": "없음 (공개)", + "selectToken": "토큰 선택", + "selectTokenPlaceholder": "-- 토큰 선택 --", + "tokenPlaceholder": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "tokenHelp": "이 토큰은 이 작업에만 사용됩니다", + "publicRepoInfo": "공개 저장소는 인증이 필요하지 않습니다. 공개 저장소를 clone하는 경우 토큰을 생략할 수 있습니다.", + "noTokensHelp": "저장된 토큰이 없습니다. 설정 → API Keys에서 토큰을 추가하면 재사용이 편리합니다.", + "optionalTokenPublic": "GitHub 토큰 (공개 저장소는 선택사항)", + "tokenPublicPlaceholder": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (공개 저장소는 비워두세요)" + }, + "step3": { + "reviewConfig": "설정 검토", + "workspaceType": "워크스페이스 유형:", + "existingWorkspace": "기존 워크스페이스", + "newWorkspace": "새 워크스페이스", + "path": "경로:", + "cloneFrom": "Clone 소스:", + "authentication": "인증:", + "usingStoredToken": "저장된 토큰 사용:", + "usingProvidedToken": "제공된 토큰 사용", + "noAuthentication": "인증 없음", + "sshKey": "SSH 키", + "existingInfo": "워크스페이스가 프로젝트 목록에 추가되며 Claude/Cursor 세션에서 사용할 수 있습니다.", + "newWithClone": "이 폴더에 저장소가 clone됩니다.", + "newEmpty": "워크스페이스가 프로젝트 목록에 추가되며 Claude/Cursor 세션에서 사용할 수 있습니다.", + "cloningRepository": "저장소 clone 중..." + }, + "buttons": { + "cancel": "취소", + "back": "뒤로", + "next": "다음", + "createProject": "프로젝트 생성", + "creating": "생성 중...", + "cloning": "Clone 중..." + }, + "errors": { + "selectType": "기존 워크스페이스를 사용할지 새로 생성할지 선택해주세요", + "providePath": "워크스페이스 경로를 입력해주세요", + "failedToCreate": "워크스페이스 생성 실패", + "failedToCreateFolder": "폴더 생성 실패" + } + }, + "versionUpdate": { + "title": "업데이트 가능", + "newVersionReady": "새 버전이 준비되었습니다", + "currentVersion": "현재 버전", + "latestVersion": "최신 버전", + "whatsNew": "새로운 기능:", + "viewFullRelease": "전체 릴리스 보기", + "updateProgress": "업데이트 진행 상황:", + "manualUpgrade": "수동 업그레이드:", + "manualUpgradeHint": "또는 \"지금 업데이트\"를 클릭하여 자동으로 업데이트합니다.", + "updateCompleted": "업데이트가 완료되었습니다!", + "restartServer": "변경사항을 적용하려면 서버를 재시작하세요.", + "updateFailed": "업데이트 실패", + "buttons": { + "close": "닫기", + "later": "나중에", + "copyCommand": "명령어 복사", + "updateNow": "지금 업데이트", + "updating": "업데이트 중..." + }, + "ariaLabels": { + "closeModal": "버전 업그레이드 모달 닫기", + "showSidebar": "사이드바 표시", + "settings": "설정", + "updateAvailable": "업데이트 가능", + "closeSidebar": "사이드바 닫기" + } + } +} diff --git a/src/i18n/locales/ko/settings.json b/src/i18n/locales/ko/settings.json new file mode 100644 index 0000000..60b1018 --- /dev/null +++ b/src/i18n/locales/ko/settings.json @@ -0,0 +1,418 @@ +{ + "title": "설정", + "tabs": { + "account": "계정", + "permissions": "권한", + "mcpServers": "MCP 서버", + "appearance": "외관" + }, + "account": { + "title": "계정", + "language": "언어", + "languageLabel": "표시 언어", + "languageDescription": "인터페이스에 사용할 언어를 선택하세요", + "username": "사용자명", + "email": "이메일", + "profile": "프로필", + "changePassword": "비밀번호 변경" + }, + "mcp": { + "title": "MCP 서버", + "addServer": "서버 추가", + "editServer": "서버 편집", + "deleteServer": "서버 삭제", + "serverName": "서버 이름", + "serverType": "서버 유형", + "config": "설정", + "testConnection": "연결 테스트", + "status": "상태", + "connected": "연결됨", + "disconnected": "연결 끊김", + "scope": { + "label": "범위", + "user": "사용자", + "project": "프로젝트" + } + }, + "appearance": { + "title": "외관", + "theme": "테마", + "codeEditor": "코드 에디터", + "editorTheme": "에디터 테마", + "wordWrap": "자동 줄바꿈", + "showMinimap": "미니맵 표시", + "lineNumbers": "줄 번호", + "fontSize": "글꼴 크기" + }, + "actions": { + "saveChanges": "변경사항 저장", + "resetToDefaults": "기본값으로 초기화", + "cancelChanges": "변경 취소" + }, + "quickSettings": { + "title": "빠른 설정", + "sections": { + "appearance": "외관", + "toolDisplay": "도구 표시", + "viewOptions": "보기 옵션", + "inputSettings": "입력 설정", + "whisperDictation": "Whisper 음성 인식" + }, + "darkMode": "다크 모드", + "autoExpandTools": "도구 자동 펼치기", + "showRawParameters": "Raw 파라미터 표시", + "showThinking": "생각 과정 표시", + "autoScrollToBottom": "자동 스크롤", + "sendByCtrlEnter": "Ctrl+Enter로 전송", + "sendByCtrlEnterDescription": "활성화하면 Enter 대신 Ctrl+Enter로 메시지를 전송합니다. IME 사용자가 실수로 전송하는 것을 방지하는 데 유용합니다.", + "dragHandle": { + "dragging": "드래그 핸들", + "closePanel": "설정 패널 닫기", + "openPanel": "설정 패널 열기", + "draggingStatus": "드래그 중...", + "toggleAndMove": "클릭하여 토글, 드래그하여 이동" + }, + "whisper": { + "modes": { + "default": "기본 모드", + "defaultDescription": "음성을 그대로 텍스트로 변환", + "prompt": "프롬프트 향상", + "promptDescription": "거친 아이디어를 명확하고 상세한 AI 프롬프트로 변환", + "vibe": "Vibe 모드", + "vibeDescription": "아이디어를 상세한 에이전트 지침 형식으로 변환" + } + } + }, + "mainTabs": { + "agents": "에이전트", + "appearance": "외관", + "git": "Git", + "apiTokens": "API & 토큰", + "tasks": "작업" + }, + "appearanceSettings": { + "darkMode": { + "label": "다크 모드", + "description": "라이트/다크 테마 전환" + }, + "projectSorting": { + "label": "프로젝트 정렬", + "description": "사이드바에서 프로젝트 정렬 방식", + "alphabetical": "알파벳순", + "recentActivity": "최근 활동순" + }, + "codeEditor": { + "title": "코드 에디터", + "theme": { + "label": "에디터 테마", + "description": "코드 에디터의 기본 테마" + }, + "wordWrap": { + "label": "자동 줄바꿈", + "description": "에디터에서 기본적으로 자동 줄바꿈 활성화" + }, + "showMinimap": { + "label": "미니맵 표시", + "description": "Diff 보기에서 쉬운 탐색을 위한 미니맵 표시" + }, + "lineNumbers": { + "label": "줄 번호 표시", + "description": "에디터에 줄 번호 표시" + }, + "fontSize": { + "label": "글꼴 크기", + "description": "에디터 글꼴 크기 (픽셀)" + } + } + }, + "mcpForm": { + "title": { + "add": "MCP 서버 추가", + "edit": "MCP 서버 편집" + }, + "importMode": { + "form": "폼 입력", + "json": "JSON 가져오기" + }, + "scope": { + "label": "범위", + "userGlobal": "사용자 (전역)", + "projectLocal": "프로젝트 (로컬)", + "userDescription": "사용자 범위: 모든 프로젝트에서 사용 가능", + "projectDescription": "로컬 범위: 선택한 프로젝트에서만 사용 가능", + "cannotChange": "기존 서버를 편집할 때는 범위를 변경할 수 없습니다" + }, + "fields": { + "serverName": "서버 이름", + "transportType": "전송 유형", + "command": "명령어", + "arguments": "인수 (한 줄에 하나씩)", + "jsonConfig": "JSON 설정", + "url": "URL", + "envVars": "환경 변수 (KEY=value, 한 줄에 하나씩)", + "headers": "헤더 (KEY=value, 한 줄에 하나씩)", + "selectProject": "프로젝트 선택..." + }, + "placeholders": { + "serverName": "my-server" + }, + "validation": { + "missingType": "필수 항목 누락: type", + "stdioRequiresCommand": "stdio 유형은 command 필드가 필요합니다", + "httpRequiresUrl": "{{type}} 유형은 url 필드가 필요합니다", + "invalidJson": "잘못된 JSON 형식", + "jsonHelp": "MCP 서버 설정을 JSON 형식으로 붙여넣으세요. 예시:", + "jsonExampleStdio": "• stdio: {\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"@upstash/context7-mcp\"]}", + "jsonExampleHttp": "• http/sse: {\"type\":\"http\",\"url\":\"https://api.example.com/mcp\"}" + }, + "configDetails": "설정 상세 ({{configFile}}에서)", + "projectPath": "경로: {{path}}", + "actions": { + "cancel": "취소", + "saving": "저장 중...", + "addServer": "서버 추가", + "updateServer": "서버 업데이트" + } + }, + "saveStatus": { + "success": "설정이 저장되었습니다!", + "error": "설정 저장 실패", + "saving": "저장 중..." + }, + "footerActions": { + "save": "설정 저장", + "cancel": "취소" + }, + "git": { + "title": "Git 설정", + "description": "커밋을 위한 Git 정보를 설정합니다. 이 설정은 git config --global로 전역 적용됩니다", + "name": { + "label": "Git 이름", + "help": "Git 커밋에 사용될 이름" + }, + "email": { + "label": "Git 이메일", + "help": "Git 커밋에 사용될 이메일" + }, + "actions": { + "save": "설정 저장", + "saving": "저장 중..." + }, + "status": { + "success": "저장 완료" + } + }, + "apiKeys": { + "title": "API 키", + "description": "다른 애플리케이션에서 외부 API에 접근하기 위한 API 키를 생성합니다.", + "newKey": { + "alertTitle": "⚠️ API 키를 저장하세요", + "alertMessage": "이 키는 지금만 볼 수 있습니다. 안전하게 보관하세요.", + "iveSavedIt": "저장했습니다" + }, + "form": { + "placeholder": "API 키 이름 (예: Production Server)", + "createButton": "생성", + "cancelButton": "취소" + }, + "newButton": "새 API 키", + "empty": "생성된 API 키가 없습니다.", + "list": { + "created": "생성일:", + "lastUsed": "마지막 사용:" + }, + "confirmDelete": "이 API 키를 삭제하시겠습니까?", + "status": { + "active": "활성", + "inactive": "비활성" + }, + "github": { + "title": "GitHub 토큰", + "description": "외부 API를 통해 비공개 저장소를 clone하기 위한 GitHub Personal Access Token을 추가합니다.", + "descriptionAlt": "비공개 저장소를 clone하기 위한 GitHub Personal Access Token을 추가합니다. 저장하지 않고 API 요청에 직접 토큰을 전달할 수도 있습니다.", + "addButton": "토큰 추가", + "form": { + "namePlaceholder": "토큰 이름 (예: Personal Repos)", + "tokenPlaceholder": "GitHub Personal Access Token (ghp_...)", + "descriptionPlaceholder": "설명 (선택사항)", + "addButton": "토큰 추가", + "cancelButton": "취소", + "howToCreate": "GitHub Personal Access Token 생성 방법 →" + }, + "empty": "추가된 GitHub 토큰이 없습니다.", + "added": "추가일:", + "confirmDelete": "이 GitHub 토큰을 삭제하시겠습니까?" + }, + "apiDocsLink": "API 문서", + "documentation": { + "title": "외부 API 문서", + "description": "외부 API를 사용하여 애플리케이션에서 Claude/Cursor 세션을 트리거하는 방법을 알아보세요.", + "viewLink": "API 문서 보기 →" + }, + "loading": "로딩 중...", + "version": { + "updateAvailable": "업데이트 가능: v{{version}}" + } + }, + "tasks": { + "checking": "TaskMaster 설치 확인 중...", + "notInstalled": { + "title": "TaskMaster AI CLI가 설치되지 않았습니다", + "description": "작업 관리 기능을 사용하려면 TaskMaster CLI가 필요합니다. 시작하려면 설치하세요:", + "installCommand": "npm install -g task-master-ai", + "viewOnGitHub": "GitHub에서 보기", + "afterInstallation": "설치 후:", + "steps": { + "restart": "이 애플리케이션을 재시작하세요", + "autoAvailable": "TaskMaster 기능이 자동으로 활성화됩니다", + "initCommand": "프로젝트 디렉토리에서 task-master init을 사용하세요" + } + }, + "settings": { + "enableLabel": "TaskMaster 통합 활성화", + "enableDescription": "인터페이스 전체에 TaskMaster 작업, 배너 및 사이드바 표시" + } + }, + "agents": { + "authStatus": { + "checking": "확인 중...", + "connected": "연결됨", + "notConnected": "연결되지 않음", + "disconnected": "연결 끊김", + "checkingAuth": "인증 상태 확인 중...", + "loggedInAs": "{{email}}(으)로 로그인됨", + "authenticatedUser": "인증된 사용자" + }, + "account": { + "claude": { + "description": "Anthropic Claude AI 어시스턴트" + }, + "cursor": { + "description": "Cursor AI 기반 코드 에디터" + }, + "codex": { + "description": "OpenAI Codex AI 어시스턴트" + } + }, + "connectionStatus": "연결 상태", + "login": { + "title": "로그인", + "reAuthenticate": "재인증", + "description": "AI 기능을 활성화하려면 {{agent}} 계정에 로그인하세요", + "reAuthDescription": "다른 계정으로 로그인하거나 자격 증명을 새로고침하세요", + "button": "로그인", + "reLoginButton": "재로그인" + }, + "error": "오류: {{error}}" + }, + "permissions": { + "title": "권한 설정", + "skipPermissions": { + "label": "권한 확인 건너뛰기 (주의해서 사용)", + "claudeDescription": "--dangerously-skip-permissions 플래그와 동일", + "cursorDescription": "Cursor CLI의 -f 플래그와 동일" + }, + "allowedTools": { + "title": "허용된 도구", + "description": "권한 확인 없이 자동으로 허용되는 도구", + "placeholder": "예: \"Bash(git log:*)\" 또는 \"Write\"", + "quickAdd": "자주 쓰는 도구 빠른 추가:", + "empty": "설정된 허용 도구 없음" + }, + "blockedTools": { + "title": "차단된 도구", + "description": "권한 확인 없이 자동으로 차단되는 도구", + "placeholder": "예: \"Bash(rm:*)\"", + "empty": "설정된 차단 도구 없음" + }, + "allowedCommands": { + "title": "허용된 Shell 명령어", + "description": "권한 확인 없이 자동으로 허용되는 Shell 명령어", + "placeholder": "예: \"Shell(ls)\" 또는 \"Shell(git status)\"", + "quickAdd": "자주 쓰는 명령어 빠른 추가:", + "empty": "설정된 허용 명령어 없음" + }, + "blockedCommands": { + "title": "차단된 Shell 명령어", + "description": "자동으로 차단되는 Shell 명령어", + "placeholder": "예: \"Shell(rm -rf)\" 또는 \"Shell(sudo)\"", + "empty": "설정된 차단 명령어 없음" + }, + "toolExamples": { + "title": "도구 패턴 예시:", + "bashGitLog": "- 모든 git log 명령어 허용", + "bashGitDiff": "- 모든 git diff 명령어 허용", + "write": "- 모든 Write 도구 사용 허용", + "bashRm": "- 모든 rm 명령어 차단 (위험)" + }, + "shellExamples": { + "title": "Shell 명령어 예시:", + "ls": "- ls 명령어 허용", + "gitStatus": "- git status 허용", + "npmInstall": "- npm install 허용", + "rmRf": "- 재귀 삭제 차단" + }, + "codex": { + "permissionMode": "권한 모드", + "description": "Codex가 파일 수정 및 명령어 실행을 처리하는 방식을 제어합니다", + "modes": { + "default": { + "title": "기본", + "description": "신뢰할 수 있는 명령어(ls, cat, grep, git status 등)만 자동 실행됩니다. 다른 명령어는 건너뜁니다. 워크스페이스에 쓰기 가능." + }, + "acceptEdits": { + "title": "편집 허용", + "description": "워크스페이스 내에서 모든 명령어가 자동 실행됩니다. 샌드박스 내 완전 자동 모드." + }, + "bypassPermissions": { + "title": "권한 우회", + "description": "제한 없는 전체 시스템 접근. 모든 명령어가 전체 디스크 및 네트워크 접근 권한으로 자동 실행됩니다. 주의해서 사용하세요." + } + }, + "technicalDetails": "기술 상세", + "technicalInfo": { + "default": "sandboxMode=workspace-write, approvalPolicy=untrusted. 신뢰할 수 있는 명령어: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find(-exec 제외) 등.", + "acceptEdits": "sandboxMode=workspace-write, approvalPolicy=never. 프로젝트 디렉토리 내에서 모든 명령어 자동 실행.", + "bypassPermissions": "sandboxMode=danger-full-access, approvalPolicy=never. 전체 시스템 접근, 신뢰할 수 있는 환경에서만 사용하세요.", + "overrideNote": "채팅 인터페이스의 모드 버튼을 사용하여 세션별로 재정의할 수 있습니다." + } + }, + "actions": { + "add": "추가" + } + }, + "mcpServers": { + "title": "MCP 서버", + "description": { + "claude": "Model Context Protocol 서버는 Claude에 추가 도구와 데이터 소스를 제공합니다", + "cursor": "Model Context Protocol 서버는 Cursor에 추가 도구와 데이터 소스를 제공합니다", + "codex": "Model Context Protocol 서버는 Codex에 추가 도구와 데이터 소스를 제공합니다" + }, + "addButton": "MCP 서버 추가", + "empty": "설정된 MCP 서버 없음", + "serverType": "유형", + "scope": { + "local": "로컬", + "user": "사용자" + }, + "config": { + "command": "명령어", + "url": "URL", + "args": "인수", + "environment": "환경" + }, + "tools": { + "title": "도구", + "count": "({{count}}):", + "more": "+{{count}}개 더" + }, + "actions": { + "edit": "서버 편집", + "delete": "서버 삭제" + }, + "help": { + "title": "Codex MCP 정보", + "description": "Codex는 stdio 기반 MCP 서버를 지원합니다. 추가 도구와 리소스로 Codex의 기능을 확장하는 서버를 추가할 수 있습니다." + } + } +} diff --git a/src/i18n/locales/ko/sidebar.json b/src/i18n/locales/ko/sidebar.json new file mode 100644 index 0000000..2daa765 --- /dev/null +++ b/src/i18n/locales/ko/sidebar.json @@ -0,0 +1,112 @@ +{ + "projects": { + "title": "프로젝트", + "newProject": "새 프로젝트", + "deleteProject": "프로젝트 삭제", + "renameProject": "프로젝트 이름 변경", + "noProjects": "프로젝트가 없습니다", + "loadingProjects": "프로젝트 로딩 중...", + "searchPlaceholder": "프로젝트 검색...", + "projectNamePlaceholder": "프로젝트 이름", + "starred": "즐겨찾기", + "all": "전체", + "untitledSession": "제목 없는 세션", + "newSession": "새 세션", + "codexSession": "Codex 세션", + "fetchingProjects": "Claude 프로젝트와 세션을 가져오는 중", + "projects": "프로젝트", + "noMatchingProjects": "일치하는 프로젝트 없음", + "tryDifferentSearch": "검색어를 변경해보세요", + "runClaudeCli": "프로젝트 디렉토리에서 Claude CLI를 실행하여 시작하세요" + }, + "app": { + "title": "Claude Code UI", + "subtitle": "AI 코딩 어시스턴트 UI" + }, + "sessions": { + "title": "세션", + "newSession": "새 세션", + "deleteSession": "세션 삭제", + "renameSession": "세션 이름 변경", + "noSessions": "세션이 없습니다", + "loadingSessions": "세션 로딩 중...", + "unnamed": "이름 없음", + "loading": "로딩 중...", + "showMore": "더 많은 세션 보기" + }, + "tooltips": { + "viewEnvironments": "환경 보기", + "hideSidebar": "사이드바 숨기기", + "createProject": "새 프로젝트 생성", + "refresh": "프로젝트 및 세션 새로고침 (Ctrl+R)", + "renameProject": "프로젝트 이름 변경 (F2)", + "deleteProject": "빈 프로젝트 삭제 (Delete)", + "addToFavorites": "즐겨찾기에 추가", + "removeFromFavorites": "즐겨찾기에서 제거", + "editSessionName": "세션 이름 직접 편집", + "deleteSession": "이 세션 영구 삭제", + "save": "저장", + "cancel": "취소" + }, + "navigation": { + "chat": "채팅", + "files": "파일", + "git": "Git", + "terminal": "터미널", + "tasks": "작업" + }, + "actions": { + "refresh": "새로고침", + "settings": "설정", + "collapseAll": "모두 접기", + "expandAll": "모두 펼치기", + "cancel": "취소", + "save": "저장", + "delete": "삭제", + "rename": "이름 변경" + }, + "status": { + "active": "활성", + "inactive": "비활성", + "thinking": "생각 중...", + "error": "오류", + "aborted": "중단됨", + "unknown": "알 수 없음" + }, + "time": { + "justNow": "방금 전", + "oneMinuteAgo": "1분 전", + "minutesAgo": "{{count}}분 전", + "oneHourAgo": "1시간 전", + "hoursAgo": "{{count}}시간 전", + "oneDayAgo": "1일 전", + "daysAgo": "{{count}}일 전" + }, + "messages": { + "deleteConfirm": "정말 삭제하시겠습니까?", + "renameSuccess": "이름이 변경되었습니다", + "deleteSuccess": "삭제되었습니다", + "errorOccurred": "오류가 발생했습니다", + "deleteSessionConfirm": "이 세션을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", + "deleteProjectConfirm": "이 빈 프로젝트를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", + "enterProjectPath": "프로젝트 경로를 입력해주세요", + "deleteSessionFailed": "세션 삭제 실패. 다시 시도해주세요.", + "deleteSessionError": "세션 삭제 오류. 다시 시도해주세요.", + "deleteProjectFailed": "프로젝트 삭제 실패. 다시 시도해주세요.", + "deleteProjectError": "프로젝트 삭제 오류. 다시 시도해주세요.", + "createProjectFailed": "프로젝트 생성 실패. 다시 시도해주세요.", + "createProjectError": "프로젝트 생성 오류. 다시 시도해주세요." + }, + "version": { + "updateAvailable": "업데이트 가능" + }, + "deleteConfirmation": { + "deleteProject": "프로젝트 삭제", + "deleteSession": "세션 삭제", + "confirmDelete": "정말 삭제하시겠습니까", + "sessionCount_one": "이 프로젝트에는 {{count}}개의 대화가 있습니다.", + "sessionCount_other": "이 프로젝트에는 {{count}}개의 대화가 있습니다.", + "allConversationsDeleted": "모든 대화가 영구적으로 삭제됩니다.", + "cannotUndo": "이 작업은 취소할 수 없습니다." + } +} \ No newline at end of file