From b0dd3b52b908dc6bc07d291bf1ba0f4211f238e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jinwoo=20An=20=28=EC=95=88=EC=A7=84=EC=9A=B0=29?= <119289033+An-jinu@users.noreply.github.com> Date: Mon, 27 Apr 2026 17:05:43 +0900 Subject: [PATCH] feat: add Korean locale (#1040) --- packages/ui/src/lib/i18n/messages/en.ts | 1 + packages/ui/src/lib/i18n/messages/es.ts | 1 + .../ui/src/lib/i18n/messages/ko.settings.ts | 1513 ++++++++++++ packages/ui/src/lib/i18n/messages/ko.ts | 2069 +++++++++++++++++ packages/ui/src/lib/i18n/messages/pt-BR.ts | 1 + packages/ui/src/lib/i18n/messages/uk.ts | 1 + packages/ui/src/lib/i18n/messages/zh-CN.ts | 1 + packages/ui/src/lib/i18n/runtime.ts | 10 +- packages/ui/src/lib/i18n/store.ts | 2 + 9 files changed, 3596 insertions(+), 3 deletions(-) create mode 100644 packages/ui/src/lib/i18n/messages/ko.settings.ts create mode 100644 packages/ui/src/lib/i18n/messages/ko.ts diff --git a/packages/ui/src/lib/i18n/messages/en.ts b/packages/ui/src/lib/i18n/messages/en.ts index d370fb6c..a3711595 100644 --- a/packages/ui/src/lib/i18n/messages/en.ts +++ b/packages/ui/src/lib/i18n/messages/en.ts @@ -7,6 +7,7 @@ export const dict = { 'common.language.ukrainian': 'Ukrainian', 'common.language.spanish': 'Spanish', 'common.language.brazilianPortuguese': 'Brazilian Portuguese', + 'common.language.korean': 'Korean', 'common.revealPath.finder': 'Reveal in Finder', 'common.revealPath.fileExplorer': 'Open in File Explorer', 'common.revealPath.fileManager': 'Open in File Manager', diff --git a/packages/ui/src/lib/i18n/messages/es.ts b/packages/ui/src/lib/i18n/messages/es.ts index 7794b123..4685d6fa 100644 --- a/packages/ui/src/lib/i18n/messages/es.ts +++ b/packages/ui/src/lib/i18n/messages/es.ts @@ -8,6 +8,7 @@ export const dict: Record = { "common.language.ukrainian": "Ucraniano", "common.language.spanish": "Español", "common.language.brazilianPortuguese": "Portugués brasileño", + "common.language.korean": "Coreano", "common.revealPath.finder": "Mostrar en Finder", "common.revealPath.fileExplorer": "Abrir en File Explorer", "common.revealPath.fileManager": "Abrir en gestor de archivos", diff --git a/packages/ui/src/lib/i18n/messages/ko.settings.ts b/packages/ui/src/lib/i18n/messages/ko.settings.ts new file mode 100644 index 00000000..12f81962 --- /dev/null +++ b/packages/ui/src/lib/i18n/messages/ko.settings.ts @@ -0,0 +1,1513 @@ +export const settingsDict = { + 'settings.appearance.language.label': '언어', + 'settings.appearance.language.description': '인터페이스 언어를 선택하세요.', + 'settings.appearance.language.select': '언어 선택', + 'settings.window.description': 'OpenChamber 설정 창입니다.', + 'settings.view.home.title': '설정', + 'settings.view.home.description': '자주 사용하는 페이지로 이동하세요.', + 'settings.view.home.cards.providers.title': '프로바이더', + 'settings.view.home.cards.providers.description': '모델과 인증 정보를 연결하세요', + 'settings.view.home.cards.agents.title': 'Agents', + 'settings.view.home.cards.agents.description': '프롬프트, 도구, 권한', + 'settings.view.home.cards.skillsCatalog.title': 'Skills Catalog', + 'settings.view.home.cards.skillsCatalog.description': '카탈로그에서 스킬을 설치하세요', + 'settings.view.home.cards.mcp.title': 'MCP', + 'settings.view.home.cards.mcp.description': 'MCP 서버 연결을 설정하세요', + 'settings.view.home.cards.usage.title': '사용량', + 'settings.view.home.cards.usage.description': '할당량 및 지출 현황', + 'settings.view.unavailable.title': '사용할 수 없음', + 'settings.view.unavailable.description': '이 설정 페이지는 현재 런타임에서 사용할 수 없습니다.', + 'settings.view.badge.beta': 'beta', + 'settings.view.actions.reloadOpenCode': 'OpenCode 다시 로드', + 'settings.view.actions.reloadOpenCodeTooltip': 'OpenCode를 재시작하고 설정을 다시 불러옵니다.', + 'settings.view.actions.backToSettings': '설정으로 돌아가기', + 'settings.view.actions.closeSettings': '설정 닫기', + 'settings.view.actions.openSectionList': '섹션 목록 열기', + 'settings.view.actions.closeSettingsWithShortcut': 'Settings 닫기 ({shortcut}+ ,)', + 'settings.view.actions.back': '뒤로', + 'settings.view.actions.resizeNavigation': '설정 내비게이션 크기 조정', + 'settings.page.projects.title': '프로젝트', + 'settings.page.remoteInstances.title': '원격 인스턴스', + 'settings.page.providers.title': '프로바이더', + 'settings.page.usage.title': '사용량', + 'settings.page.agents.title': 'Agents', + 'settings.page.commands.title': 'Commands', + 'settings.page.mcp.title': 'MCP', + 'settings.page.skills.title': 'Skills', + 'settings.page.skillsCatalog.title': 'Skills Catalog', + 'settings.page.git.title': 'Git', + 'settings.page.appearance.title': '외관', + 'settings.page.chat.title': '채팅', + 'settings.page.shortcuts.title': '단축키', + 'settings.page.sessions.title': '세션', + 'settings.page.magicPrompts.title': 'Magic Prompts', + 'settings.page.notifications.title': '알림', + 'settings.page.voice.title': '음성', + 'settings.page.tunnel.title': '원격 터널', + 'settings.openchamber.tunnel.title': '원격 터널', + 'settings.openchamber.tunnel.description': '퀵 링크나 직접 관리하는 Cloudflare 터널로 안전한 원격 접속을 설정하세요.', + 'settings.openchamber.tunnel.note.serverSideEnforced': '보안 터널 접속은 서버에서 강제됩니다.', + 'settings.openchamber.tunnel.note.connectLinksOneTime': '접속 링크는 일회용이며, 터널이 중지되거나 링크 TTL이 만료되면 폐기됩니다.', + 'settings.openchamber.tunnel.note.cloudflareConnectorTarget': 'Cloudflare 커넥터 대상:', + 'settings.openchamber.tunnel.note.cloudflareConnectorTargetUse': 'Cloudflare 커넥터 대상에는 다음을 사용하세요', + 'settings.openchamber.tunnel.note.tokensSavedPerTunnel': '토큰은 터널별로 저장되며 디스크에서 재사용됩니다.', + 'settings.openchamber.tunnel.note.customConfigUsed': '터널 시작 시 사용자 정의 설정 파일을 사용합니다.', + 'settings.openchamber.tunnel.note.defaultConfigUsed': '비워 두면 cloudflared가 기본 설정 파일(~/.cloudflared/config.yml)을 사용합니다.', + 'settings.openchamber.tunnel.note.managedRemoteRequiresDomain': 'Managed Remote 터널에는 Cloudflare 계정에 등록된 도메인이 필요합니다.', + 'settings.openchamber.tunnel.note.managedLocalUsesConfig': 'Managed Local 터널은 로컬 cloudflared 설정 파일을 사용합니다.', + 'settings.openchamber.tunnel.note.startModeAndGenerateLink': '{mode} 터널을 시작하고 일회용 접속 링크를 만듭니다. 터널을 사용하는 동안 앱을 닫지 마세요.', + 'settings.openchamber.tunnel.note.scanQrToConnect': '휴대폰으로 스캔하여 연결하세요.', + 'settings.openchamber.tunnel.section.redeemedAccessLinks': '사용된 접속 링크', + 'settings.openchamber.tunnel.section.savedManagedRemoteTunnels': '저장된 Managed Remote 터널', + 'settings.openchamber.tunnel.notAvailable.cloudflaredNotFound': 'cloudflared를 찾을 수 없음', + 'settings.openchamber.tunnel.notAvailable.installHint': '원격 터널 접속을 사용하려면 설치하세요:', + 'settings.openchamber.tunnel.field.provider': '프로바이더', + 'settings.openchamber.tunnel.field.providerPlaceholder': '프로바이더 선택', + 'settings.openchamber.tunnel.field.tunnelType': '터널 유형', + 'settings.openchamber.tunnel.field.connectLinkTtl': '접속 링크 TTL', + 'settings.openchamber.tunnel.field.tunnelSessionTtl': '터널 세션 TTL', + 'settings.openchamber.tunnel.field.hostnameLabel': 'Hostname:', + 'settings.openchamber.tunnel.field.savedTokenAvailablePlaceholder': '저장된 토큰 사용 가능(교체 선택 사항)', + 'settings.openchamber.tunnel.field.pasteTokenPlaceholder': '이 터널의 토큰 붙여넣기', + 'settings.openchamber.tunnel.field.newPresetNamePlaceholder': '터널 이름(예: Production)', + 'settings.openchamber.tunnel.field.newPresetHostnamePlaceholder': 'Hostname(예: oc.example.com)', + 'settings.openchamber.tunnel.field.newPresetTokenPlaceholder': '토큰', + 'settings.openchamber.tunnel.field.managedRemoteTokenInfoAria': 'Managed remote 터널 토큰 정보', + 'settings.openchamber.tunnel.field.configurationFile': '설정 파일', + 'settings.openchamber.tunnel.field.configurationFilePlaceholder': '기본 cloudflared 설정 사용 중', + 'settings.openchamber.tunnel.field.managedRemoteTunnelToConnect': '연결할 Managed Remote 터널', + 'settings.openchamber.tunnel.field.selectSavedTunnelPlaceholder': '저장된 터널 선택', + 'settings.openchamber.tunnel.field.publicUrlHint': '공개 URL(토큰 없이는 접속 불가)', + 'settings.openchamber.tunnel.field.connectLink': '접속 링크', + 'settings.openchamber.tunnel.field.expires': '만료', + 'settings.openchamber.tunnel.field.connectQrAlt': '터널 연결 QR 코드', + 'settings.openchamber.tunnel.actions.removePresetAria': '{name} 제거', + 'settings.openchamber.tunnel.actions.saveToken': '토큰 저장', + 'settings.openchamber.tunnel.actions.browseConfigFileAria': '설정 파일 찾아보기', + 'settings.openchamber.tunnel.actions.clearConfigFileAria': '설정 파일 지우기', + 'settings.openchamber.tunnel.actions.openManagedRemoteDocs': 'Managed Remote 터널 설정 문서 열기', + 'settings.openchamber.tunnel.actions.openManagedLocalDocs': 'Managed Local 터널 설정 문서 열기', + 'settings.openchamber.tunnel.actions.startTunnel': '터널 시작', + 'settings.openchamber.tunnel.actions.startingTunnel': '터널 시작 중...', + 'settings.openchamber.tunnel.actions.stopTunnel': '터널 중지', + 'settings.openchamber.tunnel.actions.stopping': '중지 중...', + 'settings.openchamber.tunnel.actions.newConnectLink': '새 접속 링크', + 'settings.openchamber.tunnel.actions.copied': '복사됨', + 'settings.openchamber.tunnel.actions.retry': '다시 시도', + 'settings.openchamber.tunnel.option.moreProvidersSoon': '더 많은 프로바이더가 곧 추가됩니다', + 'settings.openchamber.tunnel.option.mode.quick.label': 'Quick', + 'settings.openchamber.tunnel.option.mode.quick.tooltip': 'Quick Tunnel은 최선 노력 방식이며 Cloudflare는 가동 시간을 보장하지 않습니다.', + 'settings.openchamber.tunnel.option.mode.managedRemote.label': 'Managed Remote', + 'settings.openchamber.tunnel.option.mode.managedRemote.tooltip': 'Managed Remote는 장기 접속을 위해 Cloudflare 계정과 hostname을 사용합니다.', + 'settings.openchamber.tunnel.option.mode.managedLocal.label': 'Managed Local', + 'settings.openchamber.tunnel.option.mode.managedLocal.tooltip': 'Managed Local은 로컬 cloudflared 설정 파일을 사용합니다.', + 'settings.openchamber.tunnel.warning.quickModeReliability': '더 안정적인 장기 접속이 필요하면 Managed Remote 또는 Managed Local 터널 모드로 전환하세요.', + 'settings.openchamber.tunnel.warning.replacesActiveTunnel': '이 터널을 시작하면 활성 터널이 교체되고 기존 접속 링크와 원격 세션이 폐기됩니다.', + 'settings.openchamber.tunnel.badge.quick': 'QUICK', + 'settings.openchamber.tunnel.badge.remote': 'REMOTE', + 'settings.openchamber.tunnel.badge.local': 'LOCAL', + 'settings.openchamber.tunnel.state.loading': '로딩 중', + 'settings.openchamber.tunnel.state.expired': '만료됨', + 'settings.openchamber.tunnel.state.revoked': '폐기됨', + 'settings.openchamber.tunnel.state.inactive': '비활성', + 'settings.openchamber.tunnel.state.noExpiry': '만료 없음', + 'settings.openchamber.tunnel.state.never': '없음', + 'settings.openchamber.tunnel.state.tunnelReady': '터널 준비 완료', + 'settings.openchamber.tunnel.session.redeemedAt': '{time}에 사용됨', + 'settings.openchamber.tunnel.session.expiresIn': '{remaining} 후 만료', + 'settings.openchamber.tunnel.session.inactiveWithReason': '비활성({reason})', + 'settings.openchamber.tunnel.error.invalidConfigExtension': '설정 파일은 .yml, .yaml 또는 .json 확장자를 사용해야 합니다.', + 'settings.openchamber.tunnel.tooltip.tokensSavedPath': '토큰은 ~/.config/openchamber/cloudflare-managed-remote-tunnels.json에 저장됩니다.', + 'settings.openchamber.tunnel.empty.noManagedRemoteTunnels': '저장된 Managed Remote 터널이 아직 없습니다.', + 'settings.openchamber.tunnel.toast.checkAvailabilityFailed': '터널 사용 가능 여부를 확인하지 못했습니다', + 'settings.openchamber.tunnel.toast.saveSettingsFailed': '터널 설정을 저장하지 못했습니다', + 'settings.openchamber.tunnel.toast.saveTtlFailed': '터널 TTL 설정을 저장하지 못했습니다', + 'settings.openchamber.tunnel.toast.saveTokenFailed': 'Managed Remote 터널 토큰을 저장하지 못했습니다', + 'settings.openchamber.tunnel.toast.selectOrAddManagedRemoteFirst': '먼저 Managed Remote 터널을 선택하거나 추가하세요', + 'settings.openchamber.tunnel.toast.managedRemoteTokenRequiredBeforeStarting': '시작하기 전에 Managed Remote 터널 토큰이 필요합니다', + 'settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting': '시작하기 전에 Managed Remote 터널 토큰을 추가하세요', + 'settings.openchamber.tunnel.toast.startFailed': '터널을 시작하지 못했습니다', + 'settings.openchamber.tunnel.toast.startedButNoPublicUrl': '터널이 시작되었지만 공개 URL이 반환되지 않았습니다', + 'settings.openchamber.tunnel.toast.replacedTunnelSingleSingle': '이전 터널을 교체했습니다: 링크 1개가 폐기되고 세션 1개가 무효화되었습니다.', + 'settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions': '이전 터널을 교체했습니다: 링크 1개가 폐기되고 세션 {invalidatedSessionCount}개가 무효화되었습니다.', + 'settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession': '이전 터널을 교체했습니다: 링크 {revokedBootstrapCount}개가 폐기되고 세션 1개가 무효화되었습니다.', + 'settings.openchamber.tunnel.toast.replacedTunnelManyMany': '이전 터널을 교체했습니다: 링크 {revokedBootstrapCount}개가 폐기되고 세션 {invalidatedSessionCount}개가 무효화되었습니다.', + 'settings.openchamber.tunnel.toast.linkReady': '터널 링크가 준비되었습니다', + 'settings.openchamber.tunnel.toast.stopped': '터널이 중지되었습니다', + 'settings.openchamber.tunnel.toast.stopFailed': '터널을 중지하지 못했습니다', + 'settings.openchamber.tunnel.toast.connectLinkCopied': '접속 링크가 복사되었습니다', + 'settings.openchamber.tunnel.toast.copyUrlFailed': 'URL을 복사하지 못했습니다', + 'settings.openchamber.tunnel.toast.saveSelectedManagedRemoteFailed': '선택한 Managed Remote 터널을 저장하지 못했습니다', + 'settings.openchamber.tunnel.toast.tunnelNameRequired': '터널 이름은 필수입니다', + 'settings.openchamber.tunnel.toast.managedRemoteHostnameRequired': 'Managed Remote 터널 hostname은 필수입니다', + 'settings.openchamber.tunnel.toast.managedRemoteTokenRequired': 'Managed Remote 터널 토큰은 필수입니다', + 'settings.openchamber.tunnel.toast.hostnameAlreadyExists': '이 hostname은 이미 존재합니다', + 'settings.openchamber.tunnel.toast.managedRemoteSaved': 'Managed Remote 터널이 저장되었습니다', + 'settings.openchamber.tunnel.toast.managedRemoteRemoved': 'Managed Remote 터널이 제거되었습니다', + 'settings.magicPrompts.sidebar.title': 'Magic Prompts', + 'settings.magicPrompts.sidebar.description': '편집할 프롬프트 템플릿을 선택하세요.', + 'settings.magicPrompts.sidebar.group.git': 'Git', + 'settings.magicPrompts.sidebar.group.github': 'GitHub', + 'settings.magicPrompts.sidebar.group.planning': '계획', + 'settings.magicPrompts.sidebar.group.session': '세션', + 'settings.magicPrompts.sidebar.item.gitCommitGenerate': 'Commit 생성', + 'settings.magicPrompts.sidebar.item.gitPrGenerate': 'PR 생성', + 'settings.magicPrompts.sidebar.item.gitConflictResolve': 'Merge/Rebase 충돌 해결', + 'settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve': 'Cherry-pick 충돌 해결', + 'settings.magicPrompts.sidebar.item.githubPrReview': 'PR 리뷰', + 'settings.magicPrompts.sidebar.item.githubIssueReview': 'Issue 리뷰', + 'settings.magicPrompts.sidebar.item.githubPrFailedChecksReview': 'PR 실패 Checks 리뷰', + 'settings.magicPrompts.sidebar.item.githubPrCommentsReview': 'PR 댓글 리뷰', + 'settings.magicPrompts.sidebar.item.githubSinglePrCommentReview': '단일 PR 댓글 리뷰', + 'settings.magicPrompts.sidebar.item.planTodo': 'Todo 계획', + 'settings.magicPrompts.sidebar.item.planImprove': '계획 개선', + 'settings.magicPrompts.sidebar.item.planImplement': '계획 구현', + 'settings.magicPrompts.sidebar.item.sessionSummary': '세션 요약', + 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': 'Workspace 리뷰', + 'settings.remoteInstances.sidebar.title': '원격 인스턴스', + 'settings.remoteInstances.sidebar.total': '총 {count}개', + 'settings.remoteInstances.sidebar.newSshInstanceName': '새 SSH 인스턴스', + 'settings.remoteInstances.sidebar.actions.addSshInstance': 'SSH 인스턴스 추가', + 'settings.remoteInstances.sidebar.actions.connect': '연결', + 'settings.remoteInstances.sidebar.actions.disconnect': '연결 해제', + 'settings.remoteInstances.sidebar.actions.retry': '다시 시도', + 'settings.remoteInstances.sidebar.actions.remove': '제거', + 'settings.remoteInstances.sidebar.confirm.localPortInUseRetry': '로컬 포트가 이미 사용 중입니다. 임의의 사용 가능한 로컬 포트를 선택해 다시 시도할까요?', + 'settings.remoteInstances.sidebar.toast.createFailed': 'SSH 인스턴스를 생성하지 못했습니다', + 'settings.remoteInstances.sidebar.toast.retriedWithRandomPort': '임의의 로컬 포트로 다시 시도했습니다', + 'settings.remoteInstances.sidebar.toast.connectFailed': '인스턴스에 연결하지 못했습니다', + 'settings.remoteInstances.sidebar.toast.disconnectFailed': '인스턴스 연결을 해제하지 못했습니다', + 'settings.remoteInstances.sidebar.toast.retryFailed': '연결을 다시 시도하지 못했습니다', + 'settings.remoteInstances.sidebar.toast.removeFailed': '인스턴스를 제거하지 못했습니다', + 'settings.remoteInstances.sidebar.phase.ready': '준비됨', + 'settings.remoteInstances.sidebar.phase.error': '오류', + 'settings.remoteInstances.sidebar.phase.reconnect': '재연결', + 'settings.remoteInstances.sidebar.phase.installing': '설치 중', + 'settings.remoteInstances.sidebar.phase.updating': '업데이트 중', + 'settings.remoteInstances.sidebar.phase.forwarding': '포워딩 중', + 'settings.remoteInstances.sidebar.phase.starting': '시작 중', + 'settings.remoteInstances.sidebar.phase.connecting': '연결 중', + 'settings.remoteInstances.sidebar.phase.idle': '대기 중', + 'settings.remoteInstances.page.section.instance': '인스턴스', + 'settings.remoteInstances.page.section.instanceDescription': '핵심 SSH 설정입니다.', + 'settings.remoteInstances.page.field.mode': '모드', + 'settings.remoteInstances.page.field.modeHint': 'Managed는 원격에서 OpenChamber를 설치·업데이트하고 시작합니다. External은 이미 실행 중인 서버에 연결합니다.', + 'settings.remoteInstances.page.field.modePlaceholder': '모드 선택', + 'settings.remoteInstances.page.field.modeManaged': 'Managed(자동 시작)', + 'settings.remoteInstances.page.field.modeExternal': 'External(이미 실행 중)', + 'settings.remoteInstances.page.field.preferredRemotePort': '기본 원격 포트', + 'settings.remoteInstances.page.field.preferredRemotePortHint': '원격 host에서 OpenChamber가 사용할 포트입니다. 비워 두면 런타임이 자동으로 선택합니다.', + 'settings.remoteInstances.page.field.keepServerRunning': '서버 유지', + 'settings.remoteInstances.page.field.keepServerRunningHint': '활성화하면 연결 해제 후에도 OpenChamber daemon이 원격에서 계속 실행됩니다.', + 'settings.remoteInstances.page.field.bindHost': 'Bind host', + 'settings.remoteInstances.page.field.bindHostHint': '기본 로컬 URL의 네트워크 인터페이스입니다. 로컬 전용 접속에는 127.0.0.1/localhost를 사용하세요.', + 'settings.remoteInstances.page.field.preferredLocalPort': '기본 로컬 포트', + 'settings.remoteInstances.page.field.preferredLocalPortHint': '기본 OpenChamber 터널에 사용할 로컬 포트입니다. 자동 선택하려면 비워 두세요.', + 'settings.remoteInstances.page.field.forwardType': '포워딩 유형', + 'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1', + 'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1', + 'settings.remoteInstances.page.field.auto': '자동', + 'settings.remoteInstances.page.confirm.bindAllInterfaces': '0.0.0.0에 바인딩하면 포워딩된 포트가 로컬 네트워크에 노출됩니다. 계속하시겠습니까?', + 'settings.remoteInstances.page.preview.localSocks5': '(로컬 SOCKS5)', + 'settings.remoteInstances.page.preview.local': '(로컬)', + 'settings.remoteInstances.page.preview.remote': '(원격)', + 'settings.remoteInstances.page.toast.openLocalEndpointFailed': '로컬 엔드포인트를 열지 못했습니다', + 'settings.remoteInstances.page.toast.localUrlCopied': '로컬 URL이 복사되었습니다', + 'settings.remoteInstances.page.actions.copyLocalUrl': '로컬 URL 복사', + 'settings.remoteInstances.page.actions.open': '열기', + 'settings.remoteInstances.page.logsDialog.selectedInstanceFallback': '선택한 인스턴스', + 'settings.remoteInstances.page.patternDialog.descriptionWithHost': '{host}에는 구체적인 대상이 필요합니다.', + 'settings.remoteInstances.page.patternDialog.description': '대상을 입력하세요.', + 'settings.common.actions.cancel': '취소', + 'settings.common.actions.create': '생성', + 'settings.common.actions.delete': '삭제', + 'settings.common.actions.reset': '초기화', + 'settings.common.actions.rename': '이름 변경', + 'settings.common.actions.duplicate': '복제', + 'settings.common.actions.import': '가져오기', + 'settings.common.actions.copyAll': '모두 복사', + 'settings.common.actions.clear': '지우기', + 'settings.common.actions.saving': '저장 중...', + 'settings.common.actions.saveChanges': '변경 사항 저장', + 'settings.common.scope.global': '전역', + 'settings.common.scope.project': '프로젝트', + 'settings.common.field.description': '설명', + 'settings.common.badge.new': '새 항목', + 'settings.common.badge.modified': '수정됨', + 'settings.common.permission.allow': '허용', + 'settings.common.permission.ask': '확인', + 'settings.common.permission.deny': '거부', + 'settings.common.state.comingSoon': '곧 제공됩니다...', + 'settings.projects.actions.title': '작업', + 'settings.projects.actions.description': '프로젝트 이름 옆 헤더에 표시할 프로젝트별 명령어입니다.', + 'settings.projects.actions.validation.fillNameAndCommand': '저장하기 전에 작업 이름과 명령을 입력하세요.', + 'settings.projects.actions.state.loading': '로딩 중...', + 'settings.projects.actions.state.empty': '설정된 작업이 아직 없습니다.', + 'settings.projects.actions.state.untitled': '제목 없는 작업', + 'settings.projects.actions.state.noDesktopSshForwards': '활성화된 로컬 SSH 포워딩이 없습니다.', + 'settings.projects.actions.field.selectIconAria': '아이콘 선택', + 'settings.projects.actions.field.iconAria': '아이콘 {icon}', + 'settings.projects.actions.field.actionNamePlaceholder': '작업 이름', + 'settings.projects.actions.field.command': '명령어', + 'settings.projects.actions.field.commandPlaceholder': '예: bun run lint', + 'settings.projects.actions.field.autoOpenUrl': 'URL 자동 열기', + 'settings.projects.actions.field.autoOpenUrlForAria': '{title}의 URL 자동 열기', + 'settings.projects.actions.field.autoOpenUrlDescription': '출력의 URL 또는 아래 사용자 정의 URL을 엽니다', + 'settings.projects.actions.field.overrideUrlPlaceholder': '대체 URL(선택 사항)', + 'settings.projects.actions.field.overrideUrlTooltip': '이 항목을 입력하면 사용자 정의 URL을 사용합니다. 비워 두면 출력에서 가장 적절한 URL을 엽니다.', + 'settings.projects.actions.field.desktopSshForward': 'Desktop SSH 포워딩', + 'settings.projects.actions.field.useOutputManualUrl': '출력/수동 URL 사용', + 'settings.projects.actions.actions.add': '작업 추가', + 'settings.projects.actions.actions.save': '작업 저장', + 'settings.projects.actions.toast.saveFailed': '작업을 저장하지 못했습니다', + 'settings.projects.actions.toast.saved': '프로젝트 작업이 저장되었습니다', + 'settings.openchamber.about.title': 'OpenChamber 정보', + 'settings.openchamber.about.field.version': '버전', + 'settings.openchamber.about.state.checking': '확인 중...', + 'settings.openchamber.about.state.upToDate': '최신 상태', + 'settings.openchamber.about.actions.checkUpdates': '업데이트 확인', + 'settings.openchamber.about.actions.update': '업데이트', + 'settings.openchamber.about.actions.updateToVersion': '{version}으로 업데이트', + 'settings.openchamber.about.actions.checkForUpdates': '업데이트 확인', + 'settings.openchamber.about.toast.latestVersion': '최신 버전을 사용 중입니다', + 'settings.agents.sidebar.title': 'Agents', + 'settings.agents.sidebar.total': '총 {count}개', + 'settings.agents.sidebar.empty.title': '설정된 agent가 없습니다', + 'settings.agents.sidebar.empty.description': '위의 + 버튼으로 새로 생성하세요', + 'settings.agents.sidebar.section.builtIn': '내장 Agents', + 'settings.agents.sidebar.section.custom': '사용자 정의 Agents', + 'settings.agents.sidebar.badge.system': 'system', + 'settings.agents.sidebar.dialog.deleteTitle': 'Agent 삭제', + 'settings.agents.sidebar.dialog.resetTitle': 'Agent 초기화', + 'settings.agents.sidebar.dialog.deleteDescription': 'agent "{name}"을(를) 삭제하시겠습니까?', + 'settings.agents.sidebar.dialog.resetDescription': 'agent "{name}"을(를) 기본 설정으로 초기화하시겠습니까?', + 'settings.agents.sidebar.renameDialog.title': 'Agent 이름 변경', + 'settings.agents.sidebar.renameDialog.description': 'agent "@{name}"의 새 이름을 입력하세요', + 'settings.agents.sidebar.renameDialog.placeholder': '새 agent 이름...', + 'settings.agents.sidebar.toast.builtInCannotDelete': '내장 agent는 삭제할 수 없습니다', + 'settings.agents.sidebar.toast.agentDeleted': 'Agent "{name}"이(가) 삭제되었습니다', + 'settings.agents.sidebar.toast.agentReset': 'Agent "{name}"이(가) 기본값으로 초기화되었습니다', + 'settings.agents.sidebar.toast.deleteFailed': 'agent를 삭제하지 못했습니다', + 'settings.agents.sidebar.toast.resetFailed': 'agent를 초기화하지 못했습니다', + 'settings.agents.sidebar.toast.agentNameRequired': 'Agent 이름은 필수입니다', + 'settings.agents.sidebar.toast.agentExists': '이 이름의 agent가 이미 존재합니다', + 'settings.agents.sidebar.toast.removeOldAfterRenameFailed': '이름 변경 후 이전 agent를 제거하지 못했습니다', + 'settings.agents.sidebar.toast.renameFailed': 'agent 이름을 변경하지 못했습니다', + 'settings.agents.page.toast.permissionNameRequired': '권한 이름은 필수입니다', + 'settings.agents.page.toast.created': 'Agent가 생성되었습니다', + 'settings.agents.page.toast.updated': 'Agent가 업데이트되었습니다', + 'settings.agents.page.toast.createFailed': 'agent를 생성하지 못했습니다', + 'settings.agents.page.toast.updateFailed': 'agent를 업데이트하지 못했습니다', + 'settings.agents.page.toast.saveUnexpectedError': '저장 중 오류가 발생했습니다', + 'settings.agents.page.empty.title': '사이드바에서 agent를 선택하세요', + 'settings.agents.page.empty.description': '또는 새로 생성하세요', + 'settings.agents.page.title.new': '새 Agent', + 'settings.agents.page.subtitle.new': '새 assistant persona를 설정하세요', + 'settings.agents.page.subtitle.edit': 'agent 설정 편집', + 'settings.agents.page.section.identityRole': '정체성 및 역할', + 'settings.agents.page.section.modelParameters': '모델 및 파라미터', + 'settings.agents.page.section.systemPrompt': 'System Prompt', + 'settings.agents.page.section.toolPermissions': '도구 권한', + 'settings.agents.page.field.agentName': 'Agent 이름', + 'settings.agents.page.field.agentNamePlaceholder': 'agent-name', + 'settings.agents.page.field.scopePlaceholder': '범위', + 'settings.agents.page.field.descriptionPlaceholder': '이 agent는 무엇을 하나요?', + 'settings.agents.page.field.mode': '모드', + 'settings.agents.page.field.modeTooltip': 'Primary와 Subagent 표시 여부', + 'settings.agents.page.field.overrideModel': '모델 오버라이드', + 'settings.agents.page.field.temperature': 'Temperature', + 'settings.agents.page.field.temperatureTooltip': '무작위성을 제어합니다. 높을수록 창의적이고 낮을수록 집중적입니다.', + 'settings.agents.page.field.temperatureRange': '0.0 ~ 2.0', + 'settings.agents.page.field.clearTemperatureAria': 'temperature 오버라이드 지우기', + 'settings.agents.page.field.topP': 'Top P', + 'settings.agents.page.field.topPTooltip': 'Nucleus sampling 다양성입니다. 낮을수록 가능성이 높은 토큰만 사용합니다.', + 'settings.agents.page.field.topPRange': '0.0 ~ 1.0', + 'settings.agents.page.field.clearTopPAria': 'top p 오버라이드 지우기', + 'settings.agents.page.field.systemPromptPlaceholder': 'You are an expert coding assistant...', + 'settings.agents.page.mode.primary': 'Primary', + 'settings.agents.page.mode.subagent': 'Subagent', + 'settings.agents.page.mode.all': '전체', + 'settings.agents.page.permissions.defaultLabel': '기본값', + 'settings.agents.page.permissions.hideEditor': '편집기 숨기기', + 'settings.agents.page.permissions.advancedEditor': '고급 편집기', + 'settings.agents.page.permissions.globalSummary': '전역: {summary}', + 'settings.agents.page.permissions.rulesSummary': '규칙: {summary}', + 'settings.agents.page.permissions.globalDefault': '전역 기본값', + 'settings.agents.page.permissions.pattern': '패턴', + 'settings.agents.page.permissions.addCustomRule': '사용자 정의 규칙 추가', + 'settings.agents.page.permissions.permissionPlaceholder': '권한...', + 'settings.agents.page.permissions.patternPlaceholder': '패턴(예: *)', + 'settings.commands.sidebar.title': 'Commands', + 'settings.commands.sidebar.total': '총 {count}개', + 'settings.commands.sidebar.empty.title': '설정된 command가 없습니다', + 'settings.commands.sidebar.empty.description': '위의 + 버튼으로 새로 생성하세요', + 'settings.commands.sidebar.section.builtIn': '내장 Commands', + 'settings.commands.sidebar.section.custom': '사용자 정의 Commands', + 'settings.commands.sidebar.dialog.deleteTitle': 'Command 삭제', + 'settings.commands.sidebar.dialog.resetTitle': 'Command 초기화', + 'settings.commands.sidebar.dialog.deleteDescription': 'command "{name}"을(를) 삭제하시겠습니까?', + 'settings.commands.sidebar.dialog.resetDescription': 'command "{name}"을(를) 기본 설정으로 초기화하시겠습니까?', + 'settings.commands.sidebar.renameDialog.title': 'Command 이름 변경', + 'settings.commands.sidebar.renameDialog.description': 'command "/{name}"의 새 이름을 입력하세요', + 'settings.commands.sidebar.renameDialog.placeholder': '새 command 이름...', + 'settings.commands.sidebar.toast.builtInCannotDelete': '내장 command는 삭제할 수 없습니다', + 'settings.commands.sidebar.toast.commandDeleted': 'Command "{name}"이(가) 삭제되었습니다', + 'settings.commands.sidebar.toast.commandReset': 'Command "{name}"이(가) 기본값으로 초기화되었습니다', + 'settings.commands.sidebar.toast.deleteFailed': 'command를 삭제하지 못했습니다', + 'settings.commands.sidebar.toast.resetFailed': 'command를 초기화하지 못했습니다', + 'settings.commands.sidebar.toast.commandNameRequired': 'Command 이름은 필수입니다', + 'settings.commands.sidebar.toast.commandExists': '이 이름의 command가 이미 존재합니다', + 'settings.commands.sidebar.toast.removeOldAfterRenameFailed': '이름 변경 후 이전 command를 제거하지 못했습니다', + 'settings.commands.sidebar.toast.renameFailed': 'command 이름을 변경하지 못했습니다', + 'settings.commands.page.toast.templateRequired': 'Command 템플릿은 필수입니다', + 'settings.commands.page.toast.created': 'Command가 생성되었습니다', + 'settings.commands.page.toast.updated': 'Command가 업데이트되었습니다', + 'settings.commands.page.toast.createFailed': 'command를 생성하지 못했습니다', + 'settings.commands.page.toast.updateFailed': 'command를 업데이트하지 못했습니다', + 'settings.commands.page.toast.saveUnexpectedError': '저장 중 오류가 발생했습니다', + 'settings.commands.page.empty.title': '사이드바에서 command를 선택하세요', + 'settings.commands.page.empty.description': '또는 새로 생성하세요', + 'settings.commands.page.title.new': '새 Command', + 'settings.commands.page.subtitle.new': '새 slash command를 설정하세요', + 'settings.commands.page.subtitle.edit': 'command 설정 편집', + 'settings.commands.page.section.identity': 'Identity', + 'settings.commands.page.section.executionContext': '실행 컨텍스트', + 'settings.commands.page.section.template': 'Command 템플릿', + 'settings.commands.page.field.commandName': 'Command 이름', + 'settings.commands.page.field.commandNamePlaceholder': 'command-name', + 'settings.commands.page.field.descriptionPlaceholder': '이 command는 무엇을 하나요?', + 'settings.commands.page.field.overrideAgent': 'Agent 오버라이드', + 'settings.commands.page.field.templatePlaceholder': '여기에 command 템플릿을 입력하세요...\n\n사용자 입력을 참조하려면 $ARGUMENTS를 사용하세요.\nshell 출력을 삽입하려면 !`shell command`를 사용하세요.\n파일 내용을 포함하려면 @filename을 사용하세요.', + 'settings.commands.page.templateHint.userInput': '사용자 입력', + 'settings.commands.page.templateHint.shellOutput': 'shell 출력', + 'settings.commands.page.templateHint.fileContents': '파일 내용', + 'settings.commands.agentSelector.title': 'agent 선택', + 'settings.commands.agentSelector.notSelected': '선택 안 됨', + 'settings.commands.agentSelector.selectAgentPlaceholder': 'agent 선택...', + 'settings.gitIdentities.page.section.title': 'Identity', + 'settings.gitIdentities.page.empty.title': '설정된 identity가 없습니다', + 'settings.gitIdentities.page.empty.description': '프로젝트별 Git author를 관리하려면 하나를 생성하세요', + 'settings.gitIdentities.page.discoveredCredentials.title': '~/.git-credentials에서 발견됨', + 'settings.gitIdentities.page.badge.default': '기본값', + 'settings.gitIdentities.page.actions.setAsDefault': '기본값으로 설정', + 'settings.gitIdentities.page.actions.unsetDefault': '기본값 해제', + 'settings.gitIdentities.page.actions.import': '가져오기', + 'settings.gitIdentities.page.toast.updateDefaultFailed': '기본 identity를 업데이트하지 못했습니다', + 'settings.gitIdentities.page.toast.defaultUpdated': '기본 identity가 업데이트되었습니다', + 'settings.gitIdentities.page.toast.defaultUnset': '기본 identity가 해제되었습니다', + 'settings.gitIdentities.page.toast.profileDeleted': '프로필 "{name}"이(가) 삭제되었습니다', + 'settings.gitIdentities.page.toast.deleteProfileFailed': '프로필을 삭제하지 못했습니다', + 'settings.gitIdentities.page.deleteDialog.title': '프로필 삭제', + 'settings.gitIdentities.page.deleteDialog.description': '"{name}"을(를) 삭제하시겠습니까?', + 'settings.gitIdentities.editor.title.importCredential': '인증 정보 가져오기', + 'settings.gitIdentities.editor.title.newIdentity': '새 Identity', + 'settings.gitIdentities.editor.title.globalIdentity': '전역 Identity', + 'settings.gitIdentities.editor.title.editIdentity': 'Identity 편집', + 'settings.gitIdentities.editor.description.globalReadOnly': '시스템 전체 Git identity(읽기 전용)', + 'settings.gitIdentities.editor.description.newProfile': '새 Git identity 프로필을 생성하세요', + 'settings.gitIdentities.editor.description.editProfile': 'identity 프로필 설정을 편집하세요', + 'settings.gitIdentities.editor.field.profileName': '프로필 이름', + 'settings.gitIdentities.editor.field.profileNamePlaceholder': 'Work Profile, Personal 등', + 'settings.gitIdentities.editor.field.color': '색상', + 'settings.gitIdentities.editor.field.icon': '아이콘', + 'settings.gitIdentities.editor.field.userName': '사용자 이름', + 'settings.gitIdentities.editor.field.userNameTooltip': 'Git commit 메시지에 표시될 이름입니다.', + 'settings.gitIdentities.editor.field.userNamePlaceholder': 'John Doe', + 'settings.gitIdentities.editor.field.emailAddress': '이메일 주소', + 'settings.gitIdentities.editor.field.emailAddressTooltip': '올바른 attribution을 위해 GitHub/GitLab의 이메일과 일치해야 합니다.', + 'settings.gitIdentities.editor.field.emailAddressPlaceholder': 'john@example.com', + 'settings.gitIdentities.editor.field.authMethod': '인증 방식', + 'settings.gitIdentities.editor.field.authToken': '토큰', + 'settings.gitIdentities.editor.field.sshKeyPath': 'SSH 키 경로', + 'settings.gitIdentities.editor.field.sshKeyPathTooltip': '개인 키의 선택적 경로입니다. 예: ~/.ssh/id_ed25519', + 'settings.gitIdentities.editor.field.sshKeyPathPlaceholder': '~/.ssh/id_ed25519', + 'settings.gitIdentities.editor.field.host': 'Host', + 'settings.gitIdentities.editor.field.hostTooltip': '이 host의 토큰은 ~/.git-credentials에서 읽습니다.', + 'settings.gitIdentities.editor.field.hostPlaceholder': 'github.com', + 'settings.gitIdentities.editor.actions.close': '닫기', + 'settings.gitIdentities.editor.actions.create': '생성', + 'settings.gitIdentities.editor.actions.save': '저장', + 'settings.gitIdentities.editor.toast.userNameEmailRequired': '사용자 이름과 이메일은 필수입니다', + 'settings.gitIdentities.editor.toast.hostRequiredForToken': '토큰 기반 인증에는 host가 필요합니다', + 'settings.gitIdentities.editor.toast.profileCreated': '프로필이 생성되었습니다', + 'settings.gitIdentities.editor.toast.profileUpdated': '프로필이 업데이트되었습니다', + 'settings.gitIdentities.editor.toast.createProfileFailed': '프로필을 생성하지 못했습니다', + 'settings.gitIdentities.editor.toast.updateProfileFailed': '프로필을 업데이트하지 못했습니다', + 'settings.gitIdentities.editor.toast.saveUnexpectedError': '저장 중 오류가 발생했습니다', + 'settings.gitIdentities.editor.toast.profileDeleted': '프로필이 삭제되었습니다', + 'settings.gitIdentities.editor.toast.deleteProfileFailed': '프로필을 삭제하지 못했습니다', + 'settings.gitIdentities.editor.toast.deleteUnexpectedError': '삭제 중 오류가 발생했습니다', + 'settings.skills.sidebar.title': 'Skills', + 'settings.skills.sidebar.total': '총 {count}개', + 'settings.skills.sidebar.section.project': '프로젝트 Skills', + 'settings.skills.sidebar.section.user': '사용자 Skills', + 'settings.skills.sidebar.empty.title': '설정된 skill이 없습니다', + 'settings.skills.sidebar.empty.description': '위의 + 버튼으로 새로 생성하세요', + 'settings.skills.sidebar.badge.claude': 'claude', + 'settings.skills.sidebar.badge.agents': 'agents', + 'settings.skills.sidebar.toast.skillDeleted': 'Skill "{name}"이(가) 삭제되었습니다', + 'settings.skills.sidebar.toast.deleteSkillFailed': 'skill을 삭제하지 못했습니다', + 'settings.skills.sidebar.toast.duplicateLoadFailed': '복제를 위한 skill 세부 정보를 로드하지 못했습니다', + 'settings.skills.sidebar.toast.renameLoadFailed': 'skill 세부 정보를 로드하지 못했습니다', + 'settings.skills.sidebar.toast.removeOldAfterRenameFailed': '이름 변경 후 이전 skill을 제거하지 못했습니다', + 'settings.skills.sidebar.toast.renameFailed': 'skill 이름을 변경하지 못했습니다', + 'settings.skills.sidebar.deleteDialog.title': 'Skill 삭제', + 'settings.skills.sidebar.deleteDialog.description': 'skill "{name}"을(를) 삭제하시겠습니까?', + 'settings.skills.sidebar.renameDialog.title': 'Skill 이름 변경', + 'settings.skills.sidebar.renameDialog.description': 'skill "{name}"의 새 이름을 입력하세요', + 'settings.skills.sidebar.renameDialog.placeholder': '새 skill 이름...', + 'settings.skills.page.title.newSkill': '새 Skill', + 'settings.skills.page.subtitle.newSkill': '새 skill을 설정하세요', + 'settings.skills.page.subtitle.skillLocation': '{location} skill', + 'settings.skills.page.section.basicInformation': '기본 정보', + 'settings.skills.page.section.instructions': '지침', + 'settings.skills.page.section.supportingFiles': '보조 파일', + 'settings.skills.page.field.skillNameLocation': 'Skill 이름 및 위치', + 'settings.skills.page.field.skillNameHint': '소문자, 숫자, 하이픈', + 'settings.skills.page.field.skillNamePlaceholder': 'skill-name', + 'settings.skills.page.field.descriptionHint': 'agent는 이 설명을 보고 skill을 로드할 시점을 판단합니다', + 'settings.skills.page.field.descriptionPlaceholder': '이 skill이 하는 일을 간략히 설명하세요...', + 'settings.skills.page.field.instructionsPlaceholder': '단계별 지침, 가이드라인 또는 참조 내용을 입력하세요...', + 'settings.skills.page.badge.claudeCompatible': 'Claude 호환', + 'settings.skills.page.badge.pending': '대기 중', + 'settings.skills.page.actions.addFile': '파일 추가', + 'settings.skills.page.actions.createSkill': 'Skill 생성', + 'settings.skills.page.actions.createFile': '파일 생성', + 'settings.skills.page.supportingFiles.empty': '보조 파일이 없습니다. "파일 추가"로 참조 자료를 포함하세요.', + 'settings.skills.page.loading.details': 'skill 세부 정보 로딩 중...', + 'settings.skills.page.loading.fileContent': '파일 내용 로딩 중...', + 'settings.skills.page.empty.title': '사이드바에서 skill을 선택하세요', + 'settings.skills.page.empty.description': '또는 새로 생성하세요', + 'settings.skills.page.deleteFileDialog.title': '보조 파일 삭제', + 'settings.skills.page.deleteFileDialog.description': '"{path}"을(를) 삭제하시겠습니까?', + 'settings.skills.page.fileDialog.titleEdit': '보조 파일 편집', + 'settings.skills.page.fileDialog.titleAdd': '보조 파일 추가', + 'settings.skills.page.fileDialog.descriptionEdit': '파일 내용을 수정하세요', + 'settings.skills.page.fileDialog.descriptionAdd': 'skill 디렉터리에 새 파일을 생성하세요', + 'settings.skills.page.fileDialog.field.filePath': '파일 경로', + 'settings.skills.page.fileDialog.field.filePathPlaceholder': 'example.md 또는 docs/reference.txt', + 'settings.skills.page.fileDialog.field.filePathHint': 'skill 디렉터리 내 상대 경로입니다. 하위 디렉터리는 자동으로 생성됩니다.', + 'settings.skills.page.fileDialog.field.content': '내용', + 'settings.skills.page.fileDialog.field.contentPlaceholder': '파일 내용...', + 'settings.skills.page.toast.skillNameRequired': 'Skill 이름은 필수입니다', + 'settings.skills.page.toast.invalidSkillName': 'Skill 이름은 1~64자의 소문자 영숫자와 하이픈만 사용할 수 있으며, 하이픈으로 시작하거나 끝날 수 없습니다', + 'settings.skills.page.toast.descriptionRequired': '설명은 필수입니다', + 'settings.skills.page.toast.skillExists': '이 이름의 skill이 이미 존재합니다', + 'settings.skills.page.toast.skillCreated': 'Skill이 생성되었습니다', + 'settings.skills.page.toast.skillUpdated': 'Skill이 업데이트되었습니다', + 'settings.skills.page.toast.createSkillFailed': 'skill을 생성하지 못했습니다', + 'settings.skills.page.toast.updateSkillFailed': 'skill을 업데이트하지 못했습니다', + 'settings.skills.page.toast.saveUnexpectedError': '저장 중 오류가 발생했습니다', + 'settings.skills.page.toast.loadFileContentFailed': '파일 내용을 로드하지 못했습니다', + 'settings.skills.page.toast.fileNameRequired': '파일 이름은 필수입니다', + 'settings.skills.page.toast.fileExists': '이 이름의 파일이 이미 존재합니다', + 'settings.skills.page.toast.noSkillSelected': '선택된 skill이 없습니다', + 'settings.skills.page.toast.fileAdded': '파일 "{path}"이(가) 추가되었습니다', + 'settings.skills.page.toast.fileCreated': '파일 "{path}"이(가) 생성되었습니다', + 'settings.skills.page.toast.fileUpdated': '파일 "{path}"이(가) 업데이트되었습니다', + 'settings.skills.page.toast.fileRemoved': '파일 "{path}"이(가) 제거되었습니다', + 'settings.skills.page.toast.fileDeleted': '파일 "{path}"이(가) 삭제되었습니다', + 'settings.skills.page.toast.createFileFailed': '파일을 생성하지 못했습니다', + 'settings.skills.page.toast.updateFileFailed': '파일을 업데이트하지 못했습니다', + 'settings.skills.page.toast.deleteFileFailed': '파일을 삭제하지 못했습니다', + 'settings.skills.location.option.userOpencode.label': '사용자 / OpenCode', + 'settings.skills.location.option.userOpencode.description': '전역 OpenCode 설정 위치', + 'settings.skills.location.option.projectOpencode.label': '프로젝트 / OpenCode', + 'settings.skills.location.option.projectOpencode.description': '현재 프로젝트 .opencode 위치', + 'settings.skills.location.option.userAgents.label': '사용자 / Agents', + 'settings.skills.location.option.userAgents.description': '전역 .agents 호환 위치', + 'settings.skills.location.option.projectAgents.label': '프로젝트 / Agents', + 'settings.skills.location.option.projectAgents.description': '현재 프로젝트 .agents 호환 위치', + 'settings.skills.catalog.shared.field.repository': '저장소', + 'settings.skills.catalog.shared.field.repositoryPlaceholder': 'owner/repo 또는 git@github.com:owner/repo.git', + 'settings.skills.catalog.shared.field.optionalSubpath': '하위 경로(선택)', + 'settings.skills.catalog.shared.field.subpathPlaceholder': '예: skills', + 'settings.skills.catalog.shared.field.targetLocation': '대상 위치', + 'settings.skills.catalog.shared.field.project': '프로젝트', + 'settings.skills.catalog.shared.field.noProjects': '사용 가능한 프로젝트가 없습니다', + 'settings.skills.catalog.shared.field.chooseProjectPlaceholder': '프로젝트 선택', + 'settings.skills.catalog.shared.field.searchSkillsPlaceholder': 'skill 검색…', + 'settings.skills.catalog.shared.toast.repositoryRequired': '저장소 소스는 필수입니다', + 'settings.skills.catalog.shared.toast.privateRepoNotSupportedVsCode': '비공개 저장소는 아직 VS Code에서 지원되지 않습니다', + 'settings.skills.catalog.shared.toast.foundSkills': 'skill {count}개를 찾았습니다', + 'settings.skills.catalog.shared.noDescription': '설명이 제공되지 않았습니다', + 'settings.skills.catalog.shared.actions.scan': '스캔', + 'settings.skills.catalog.shared.actions.scanning': '스캔 중...', + 'settings.skills.catalog.shared.actions.install': '설치', + 'settings.skills.catalog.shared.actions.installing': '설치 중...', + 'settings.skills.catalog.shared.auth.title': '인증 필요', + 'settings.skills.catalog.shared.auth.description': 'Git identity(SSH 키)를 선택하세요', + 'settings.skills.catalog.shared.auth.chooseIdentity': 'identity 선택', + 'settings.skills.catalog.shared.auth.footerHint': 'Settings - Git Identities에서 identity를 설정하세요.', + 'settings.skills.catalog.shared.auth.footerHintArrow': 'Settings → Git Identities에서 identity를 설정하세요.', + 'settings.skills.catalog.conflicts.title': 'Skill이 이미 존재합니다', + 'settings.skills.catalog.conflicts.description': '선택한 일부 skill이 이 범위에 이미 설치되어 있습니다. 건너뛸지 덮어쓸지 선택하세요.', + 'settings.skills.catalog.conflicts.count': '충돌 {count}개', + 'settings.skills.catalog.conflicts.installedIn': '{scope} / {source}에 설치됨', + 'settings.skills.catalog.conflicts.scope.user': '사용자', + 'settings.skills.catalog.conflicts.scope.project': '프로젝트', + 'settings.skills.catalog.conflicts.source.opencode': 'opencode', + 'settings.skills.catalog.conflicts.source.agents': 'agents', + 'settings.skills.catalog.conflicts.decision.skip': '건너뛰기', + 'settings.skills.catalog.conflicts.decision.overwrite': '덮어쓰기', + 'settings.skills.catalog.conflicts.actions.skipAll': '모두 건너뛰기', + 'settings.skills.catalog.conflicts.actions.overwriteAll': '모두 덮어쓰기', + 'settings.skills.catalog.conflicts.actions.continue': '계속', + 'settings.skills.catalog.installSkill.title': 'Skill 설치', + 'settings.skills.catalog.installSkill.descriptionPrefix': '설치할 skill:', + 'settings.skills.catalog.installSkill.descriptionSuffix': '네 가지 대상 위치 중 하나에 설치합니다.', + 'settings.skills.catalog.installSkill.field.destination': '대상', + 'settings.skills.catalog.installSkill.field.project': '프로젝트', + 'settings.skills.catalog.installSkill.field.noProjects': '사용 가능한 프로젝트가 없습니다', + 'settings.skills.catalog.installSkill.field.chooseProjectPlaceholder': '프로젝트 선택', + 'settings.skills.catalog.installSkill.actions.install': '설치', + 'settings.skills.catalog.installSkill.actions.installing': '설치 중...', + 'settings.skills.catalog.installSkill.toast.installed': 'Skill이 설치되었습니다', + 'settings.skills.catalog.installSkill.toast.authRequired': '인증이 필요합니다', + 'settings.skills.catalog.installSkill.toast.installFailed': 'skill을 설치하지 못했습니다', + 'settings.skills.catalog.add.title': 'Skills Catalog 추가', + 'settings.skills.catalog.add.descriptionPrefix': 'Git 저장소를 새 catalog 소스로 추가합니다. OpenChamber는 다음을 포함하는 폴더를 스캔합니다:', + 'settings.skills.catalog.add.descriptionSuffix': '.', + 'settings.skills.catalog.add.field.catalogName': 'Catalog 이름', + 'settings.skills.catalog.add.field.catalogNamePlaceholder': '예: Team Skills', + 'settings.skills.catalog.add.field.repository': '저장소', + 'settings.skills.catalog.add.field.optionalSubpath': '하위 경로(선택)', + 'settings.skills.catalog.add.field.repositoryHint': '공개 repo는 모든 환경에서 작동합니다. 비공개 repo에는 SSH identity가 필요합니다(Desktop/Web만 해당).', + 'settings.skills.catalog.add.scanResult': '스캔 결과: skill {count}개 발견', + 'settings.skills.catalog.add.duplicateMessage': '이 catalog는 이미 추가되어 있습니다.', + 'settings.skills.catalog.add.actions.addCatalog': 'catalog 추가', + 'settings.skills.catalog.add.toast.repositoryRequired': '저장소 소스는 필수입니다', + 'settings.skills.catalog.add.toast.authenticationRequiredScan': '인증이 필요합니다. Git identity를 선택하고 다시 스캔하세요.', + 'settings.skills.catalog.add.toast.scanFailed': '저장소를 스캔하지 못했습니다', + 'settings.skills.catalog.add.toast.noSkillsFound': '이 저장소에서 skill을 찾을 수 없습니다', + 'settings.skills.catalog.add.toast.catalogNameRequired': 'Catalog 이름은 필수입니다', + 'settings.skills.catalog.add.toast.scanBeforeAdd': '이 catalog를 추가하기 전에 저장소를 스캔하세요', + 'settings.skills.catalog.add.toast.catalogAlreadyExists': '이 catalog는 이미 존재합니다', + 'settings.skills.catalog.add.toast.catalogAdded': 'Catalog가 추가되었습니다', + 'settings.skills.catalog.add.toast.saveFailed': 'catalog를 저장하지 못했습니다', + 'settings.skills.catalog.installFromRepo.title': 'Git 저장소에서 설치', + 'settings.skills.catalog.installFromRepo.descriptionPrefix': '다음을 포함하는 폴더를 저장소에서 스캔한 뒤', + 'settings.skills.catalog.installFromRepo.descriptionSuffix': ', 선택한 skill을 설치합니다.', + 'settings.skills.catalog.installFromRepo.repositoryHintPrefix': 'GitHub shorthand의 경우 다음과 같은 하위 경로를 추가할 수 있습니다', + 'settings.skills.catalog.installFromRepo.authDescription': '이 저장소에 접속할 수 있는 Git identity(SSH 키)를 선택하세요.', + 'settings.skills.catalog.installFromRepo.empty.noScanResultsTitle': '아직 스캔 결과가 없습니다', + 'settings.skills.catalog.installFromRepo.empty.noScanResultsDescription': 'skill을 찾으려면 저장소를 스캔하세요', + 'settings.skills.catalog.installFromRepo.actions.selectAll': '모두 선택', + 'settings.skills.catalog.installFromRepo.actions.selectNone': '선택 해제', + 'settings.skills.catalog.installFromRepo.actions.installSelected': '선택 항목 설치', + 'settings.skills.catalog.installFromRepo.badge.installed': '설치됨({scope}/{source})', + 'settings.skills.catalog.installFromRepo.selectedCount': '선택됨: {selected} / {total}', + 'settings.skills.catalog.installFromRepo.toast.authenticationRequiredScan': '인증이 필요합니다. Git identity를 선택하고 다시 스캔하세요.', + 'settings.skills.catalog.installFromRepo.toast.authenticationRequiredInstall': '인증이 필요합니다. Git identity를 선택하고 다시 설치하세요.', + 'settings.skills.catalog.installFromRepo.toast.scanFailed': '저장소를 스캔하지 못했습니다', + 'settings.skills.catalog.installFromRepo.toast.selectAtLeastOne': '설치할 skill을 하나 이상 선택하세요', + 'settings.skills.catalog.installFromRepo.toast.installedCount': 'skill {count}개를 설치했습니다', + 'settings.skills.catalog.installFromRepo.toast.installCompleted': '설치가 완료되었습니다', + 'settings.skills.catalog.installFromRepo.toast.installFailed': 'skill을 설치하지 못했습니다', + 'settings.skills.catalog.page.mode.manual': '수동', + 'settings.skills.catalog.page.mode.external': 'External', + 'settings.skills.catalog.page.title': 'Skills Catalog', + 'settings.skills.catalog.page.section.sourceRepository': '소스 저장소', + 'settings.skills.catalog.page.field.selectSourcePlaceholder': '소스 선택', + 'settings.skills.catalog.page.actions.refreshTitle': '새로고침', + 'settings.skills.catalog.page.actions.removeCatalogTitle': 'Catalog 제거', + 'settings.skills.catalog.page.actions.addCatalog': 'Catalog 추가', + 'settings.skills.catalog.page.actions.removeCatalog': 'Catalog 제거', + 'settings.skills.catalog.page.actions.loadMoreSkills': 'Skill 더 불러오기', + 'settings.skills.catalog.page.loading.catalog': '로딩 중...', + 'settings.skills.catalog.page.loading.skills': 'skill 로딩 중...', + 'settings.skills.catalog.page.loading.more': '로딩 중...', + 'settings.skills.catalog.page.foundCount': 'skill {count}개 발견', + 'settings.skills.catalog.page.error.catalogTitle': 'Catalog 오류', + 'settings.skills.catalog.page.empty.noSkillsTitle': 'skill을 찾을 수 없습니다', + 'settings.skills.catalog.page.empty.noSkillsDescription': '다른 검색어를 사용하거나 catalog를 새로고침해 보세요', + 'settings.skills.catalog.page.badge.installed': '설치됨({scope})', + 'settings.skills.catalog.page.badge.notInstallable': '설치할 수 없음', + 'settings.skills.catalog.page.badge.unknown': '알 수 없음', + 'settings.skills.catalog.page.byOwnerPrefix': '작성자', + 'settings.skills.catalog.page.removeDialog.title': 'Catalog 제거', + 'settings.skills.catalog.page.removeDialog.description': '이 catalog를 제거하시겠습니까?', + 'settings.openchamber.passkeys.title': 'Passkeys', + 'settings.openchamber.passkeys.field.currentDevice': '현재 기기', + 'settings.openchamber.passkeys.actions.add': 'Passkey 추가', + 'settings.openchamber.passkeys.actions.cancelSetup': 'Passkey 설정 취소', + 'settings.openchamber.passkeys.actions.signOutEverywhere': '모든 곳에서 로그아웃', + 'settings.openchamber.passkeys.actions.signingOut': '로그아웃 중…', + 'settings.openchamber.passkeys.actions.removing': '제거 중…', + 'settings.openchamber.passkeys.state.uiPasswordRequired': 'Passkey는 UI 비밀번호 잠금이 활성화된 경우에만 사용할 수 있습니다.', + 'settings.openchamber.passkeys.state.loading': 'Passkey 로딩 중…', + 'settings.openchamber.passkeys.state.noneSaved': '이 host에 저장된 passkey가 아직 없습니다.', + 'settings.openchamber.passkeys.item.lastUsed': '마지막 사용: {time}', + 'settings.openchamber.passkeys.item.added': '추가됨: {time}', + 'settings.openchamber.passkeys.time.neverUsed': '사용된 적 없음', + 'settings.openchamber.passkeys.toast.loadFailed': 'Passkey를 로드할 수 없습니다.', + 'settings.openchamber.passkeys.toast.enableUiPasswordFirst': 'Passkey를 추가하기 전에 UI 비밀번호 잠금을 활성화하세요.', + 'settings.openchamber.passkeys.toast.added': 'Passkey가 추가되었습니다', + 'settings.openchamber.passkeys.toast.setupCanceled': 'Passkey 설정이 취소되었습니다', + 'settings.openchamber.passkeys.toast.addFailed': 'Passkey를 추가할 수 없습니다.', + 'settings.openchamber.passkeys.toast.removed': 'Passkey가 제거되었습니다', + 'settings.openchamber.passkeys.toast.removeFailed': 'Passkey를 제거할 수 없습니다.', + 'settings.openchamber.passkeys.toast.clearAuthFailed': '저장된 인증을 지울 수 없습니다.', + 'settings.openchamber.sessionRetention.title': '세션 보존', + 'settings.openchamber.sessionRetention.tooltip': '마지막 활동 기준으로 비활성 세션을 자동 보관하거나 삭제합니다. 가장 최근 세션 5개는 유지됩니다.', + 'settings.openchamber.sessionRetention.field.enableAutoCleanupAria': '자동 정리 활성화', + 'settings.openchamber.sessionRetention.field.enableAutoCleanup': '자동 정리 활성화', + 'settings.openchamber.sessionRetention.field.retentionPeriod': '보존 기간', + 'settings.openchamber.sessionRetention.field.retentionPeriodAria': '일 단위 보존 기간', + 'settings.openchamber.sessionRetention.field.days': '일', + 'settings.openchamber.sessionRetention.field.whenSessionsExpire': '세션 만료 시', + 'settings.openchamber.sessionRetention.actions.resetRetentionAria': '보존 기간 초기화', + 'settings.openchamber.sessionRetention.actions.runCleanupNow': '지금 정리 실행', + 'settings.openchamber.sessionRetention.actions.cleaningUp': '정리 중...', + 'settings.openchamber.sessionRetention.action.archive': '보관', + 'settings.openchamber.sessionRetention.action.delete': '삭제', + 'settings.openchamber.sessionRetention.manualCleanup.title': '수동 정리', + 'settings.openchamber.sessionRetention.manualCleanup.eligibleArchiveNow': '지금 보관 가능한 항목: {count}개', + 'settings.openchamber.sessionRetention.manualCleanup.eligibleDeleteNow': '지금 삭제 가능한 항목: {count}개', + 'settings.openchamber.sessionRetention.toast.noneEligibleArchive': '보관 가능한 세션이 없습니다', + 'settings.openchamber.sessionRetention.toast.noneEligibleDelete': '삭제 가능한 세션이 없습니다', + 'settings.openchamber.sessionRetention.toast.archivedCount': '세션 {count}개를 보관했습니다', + 'settings.openchamber.sessionRetention.toast.deletedCount': '세션 {count}개를 삭제했습니다', + 'settings.openchamber.sessionRetention.toast.failedArchiveCount': '세션 {count}개를 보관하지 못했습니다', + 'settings.openchamber.sessionRetention.toast.failedDeleteCount': '세션 {count}개를 삭제하지 못했습니다', + 'settings.openchamber.desktopNetwork.title': 'Desktop 네트워크 접속', + 'settings.openchamber.desktopNetwork.field.allowLanAccessAria': 'desktop sidecar에 LAN 접속 허용', + 'settings.openchamber.desktopNetwork.field.allowLanAccess': '로컬 네트워크의 다른 기기에서 이 앱 열기 허용', + 'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': '휴대폰, 태블릿, Wi-Fi의 다른 컴퓨터에서 열 수 있도록 앱을 다시 시작합니다.', + 'settings.openchamber.desktopNetwork.field.warning': '경고: 활성화된 동안 같은 로컬 네트워크의 누구나 앱에 접속할 수 있습니다.', + 'settings.openchamber.desktopNetwork.hint.openAfterRestart': '다시 시작 후 다른 기기에서 열기: ', + 'settings.openchamber.desktopNetwork.hint.openNow': '다른 기기에서 열기: ', + 'settings.openchamber.desktopNetwork.actions.saveAndRestart': '저장 + 다시 시작', + 'settings.openchamber.desktopNetwork.error.loadFailed': 'desktop 설정을 로드하지 못했습니다', + 'settings.openchamber.desktopNetwork.error.saveFailed': 'desktop 설정을 저장하지 못했습니다', + 'settings.openchamber.desktopNetwork.error.savedRestartFailed': '저장했지만 앱을 다시 시작하지 못했습니다', + 'settings.openchamber.opencodeCli.title': 'OpenCode CLI', + 'settings.openchamber.opencodeCli.tooltipPrefix': '선택적 절대 경로:', + 'settings.openchamber.opencodeCli.tooltipSuffix': 'binary.', + 'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode binary 경로', + 'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode', + 'settings.openchamber.opencodeCli.actions.browseAria': 'OpenCode binary 경로 찾아보기', + 'settings.openchamber.opencodeCli.actions.browse': '찾아보기', + 'settings.openchamber.opencodeCli.actions.saveAndReload': '저장 + 다시 로드', + 'settings.openchamber.opencodeCli.actions.restartingOpenCode': 'OpenCode 다시 시작 중…', + 'settings.openchamber.opencodeCli.dialog.selectBinaryTitle': 'opencode binary 선택', + 'settings.openchamber.opencodeCli.tipPrefix': '팁: 다음도 사용할 수 있습니다', + 'settings.openchamber.opencodeCli.tipMiddle': 'env var도 사용할 수 있습니다. 이 설정은 다음 위치에 저장됩니다', + 'settings.mcp.sidebar.title': 'MCP 서버', + 'settings.mcp.sidebar.total': '총 {count}개', + 'settings.mcp.sidebar.actions.refreshStatusAria': 'MCP 상태 새로고침', + 'settings.mcp.sidebar.actions.refreshStatusTitle': 'MCP 상태 새로고침', + 'settings.mcp.sidebar.actions.addServerTitle': 'MCP 서버 추가', + 'settings.mcp.sidebar.actions.deleting': '삭제 중…', + 'settings.mcp.sidebar.empty.title': '설정된 MCP 서버가 없습니다', + 'settings.mcp.sidebar.empty.description': '위의 + 버튼으로 추가하세요', + 'settings.mcp.sidebar.group.projectServers': '프로젝트 서버', + 'settings.mcp.sidebar.group.userServers': '사용자 서버', + 'settings.mcp.sidebar.serverType.localTitle': '로컬 서버', + 'settings.mcp.sidebar.serverType.remoteTitle': '원격 서버', + 'settings.mcp.sidebar.deleteDialog.title': 'MCP 서버 삭제', + 'settings.mcp.sidebar.deleteDialog.descriptionPrefix': '"{name}"을(를) 삭제하시겠습니까? 다음에서 제거됩니다:', + 'settings.mcp.sidebar.toast.deleteFailed': 'MCP 서버를 삭제하지 못했습니다', + 'settings.mcp.sidebar.toast.serverDeleted': 'MCP 서버 "{name}"이(가) 삭제되었습니다', + 'settings.mcp.sidebar.toast.refreshListIfStale': 'UI가 오래된 것처럼 보이면 MCP 목록을 새로고침하세요.', + 'settings.openchamber.keyboardShortcuts.title': '키보드 단축키', + 'settings.openchamber.keyboardShortcuts.actions.resetAll': '모두 초기화', + 'settings.openchamber.keyboardShortcuts.actions.overwrite': '덮어쓰기', + 'settings.openchamber.keyboardShortcuts.tooltip': '새 키 조합을 입력하고 저장하면 바인딩이 바로 업데이트됩니다.', + 'settings.openchamber.keyboardShortcuts.overwritePrompt': '이 조합은 이미 다른 단축키에서 사용 중입니다. 덮어쓰고 기존 매핑을 지울까요?', + 'settings.openchamber.keyboardShortcuts.field.pressKeys': '키를 누르세요...', + 'settings.openchamber.keyboardShortcuts.error.captureFirst': '먼저 단축키를 입력하세요.', + 'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': '이 단축키는 브라우저 기본값과 충돌할 수 있습니다. 그래도 저장됩니다.', + 'settings.openchamber.keyboardShortcuts.action.open_quick_open.label': '빠른 열기 열기', + 'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': '줄로 이동(파일 편집기)', + 'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': '명령 팔레트 열기', + 'settings.openchamber.keyboardShortcuts.action.focus_input.label': '입력에 포커스', + 'settings.openchamber.keyboardShortcuts.action.open_settings.label': '설정 열기', + 'settings.openchamber.keyboardShortcuts.action.toggle_terminal.label': '터미널 dock 토글', + 'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': '터미널 확장 토글', + 'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': '사이드바 토글', + 'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': '오른쪽 사이드바 토글', + 'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': '오른쪽 사이드바 Git 탭 열기', + 'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': '오른쪽 사이드바 Files 탭 열기', + 'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': '오른쪽 사이드바 탭 순환', + 'settings.openchamber.keyboardShortcuts.action.new_chat.label': '새 세션', + 'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '새 worktree 초안', + 'settings.openchamber.keyboardShortcuts.action.open_help.label': '키보드 단축키 열기', + 'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '계획 컨텍스트 패널 토글', + 'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': '서비스 메뉴 토글', + 'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': '서비스 탭 순환', + 'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': '테마 순환', + 'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': '즐겨찾기 모델 앞으로 순환', + 'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label': '즐겨찾기 모델 뒤로 순환', + 'settings.openchamber.keyboardShortcuts.action.expand_input.label': '입력 확장', + 'settings.projects.sidebar.total': '총 {count}개', + 'settings.projects.sidebar.actions.addProject': '프로젝트 추가', + 'settings.projects.page.empty.noProjects': '사용 가능한 프로젝트가 없습니다.', + 'settings.projects.page.title.default': '프로젝트 설정', + 'settings.projects.page.section.worktree': 'Worktree', + 'settings.projects.page.field.projectName': '프로젝트 이름', + 'settings.projects.page.field.projectNamePlaceholder': '프로젝트 이름', + 'settings.projects.page.field.accentColor': '강조 색상', + 'settings.projects.page.field.projectIcon': '프로젝트 아이콘', + 'settings.projects.page.field.projectIconBackgroundAria': '프로젝트 아이콘 배경색', + 'settings.projects.page.field.clearIconBackgroundAria': '아이콘 배경 지우기', + 'settings.projects.page.field.clearBackground': '배경 지우기', + 'settings.projects.page.field.none': '없음', + 'settings.projects.page.field.preview': '미리보기', + 'settings.projects.page.actions.uploadIcon': '아이콘 업로드', + 'settings.projects.page.actions.uploading': '업로드 중...', + 'settings.projects.page.actions.discoverFavicon': 'Favicon 찾기', + 'settings.projects.page.actions.discovering': '찾는 중...', + 'settings.projects.page.actions.removeProjectIcon': '프로젝트 아이콘 제거', + 'settings.projects.page.actions.removing': '제거 중...', + 'settings.projects.page.actions.undoRemove': '제거 실행 취소', + 'settings.projects.page.toast.uploadIconFailed': '프로젝트 아이콘을 업로드하지 못했습니다', + 'settings.projects.page.toast.iconUpdated': '프로젝트 아이콘이 업데이트되었습니다', + 'settings.projects.page.toast.removeIconFailed': '프로젝트 아이콘을 제거하지 못했습니다', + 'settings.projects.page.toast.iconRemoved': '프로젝트 아이콘이 제거되었습니다', + 'settings.projects.page.toast.discoverIconFailed': '프로젝트 아이콘을 찾지 못했습니다', + 'settings.projects.page.toast.customIconAlreadySet': '이 프로젝트에는 이미 사용자 정의 아이콘이 설정되어 있습니다', + 'settings.projects.page.toast.iconDiscovered': '프로젝트 아이콘을 찾았습니다', + 'settings.usage.sidebar.title': '사용량', + 'settings.usage.sidebar.total': '총 {count}개', + 'settings.usage.sidebar.actions.toggleAutoRefreshAria': '자동 새로고침 토글', + 'settings.usage.sidebar.actions.refreshAria': '사용량 새로고침', + 'settings.usage.sidebar.actions.refreshTitle': '사용량 새로고침', + 'settings.usage.sidebar.tooltip.autoRefresh': '설정한 간격으로 사용량 데이터를 자동 새로고침합니다', + 'settings.usage.sidebar.field.intervalPlaceholder': '간격', + 'settings.usage.sidebar.field.display': '표시', + 'settings.usage.sidebar.field.displayModePlaceholder': '표시 모드', + 'settings.usage.sidebar.field.displayModeUsage': '사용량', + 'settings.usage.sidebar.field.displayModeRemaining': '남은 할당량', + 'settings.usage.sidebar.status.notSet': '설정 안 됨', + 'settings.usage.page.empty.selectProvider': '사용량 세부 정보를 보려면 프로바이더를 선택하세요.', + 'settings.usage.page.header.providerUsage': '{provider} 사용량', + 'settings.usage.page.header.refreshing': '사용량 새로고침 중...', + 'settings.usage.page.header.lastUpdated': '마지막 업데이트: {time}', + 'settings.usage.page.options.showInHeaderAria': '헤더 메뉴에 표시', + 'settings.usage.page.options.showInHeader': '헤더 메뉴에 표시', + 'settings.usage.page.options.showInHeaderTooltip': '활성화하면 이 프로바이더의 사용량이 앱 헤더의 빠른 접근 메뉴에 표시됩니다.', + 'settings.usage.page.state.noData': '아직 사용량 데이터가 없습니다.', + 'settings.usage.page.state.refreshFailedTitle': '사용량 데이터를 새로고침하지 못했습니다', + 'settings.usage.page.state.providerNotConfiguredTitle': '프로바이더가 설정되지 않았습니다', + 'settings.usage.page.state.providerNotConfiguredDescription': '사용량 추적을 활성화하려면 프로바이더 탭에서 인증 정보를 추가하세요.', + 'settings.usage.page.section.modelQuotas': '모델 할당량', + 'settings.usage.page.section.otherModels': '기타 모델', + 'settings.usage.page.state.noQuotaWindowsTitle': '보고된 할당량 창이 없습니다', + 'settings.usage.page.state.noQuotaWindowsDescription': '이 프로바이더는 현재 rate limit 또는 사용량 할당량을 보고하지 않습니다.', + 'settings.usage.pace.status.onTrack': '정상 추세', + 'settings.usage.pace.status.slightlyFast': '약간 빠름', + 'settings.usage.pace.status.tooFast': '너무 빠름', + 'settings.usage.pace.status.usedUp': '모두 사용됨', + 'settings.usage.pace.predictionTooltip': '현재 속도를 기준으로 창 종료 시 예상 사용량: {prediction}', + 'settings.usage.pace.wait': '{duration} 대기', + 'settings.usage.pace.prediction': '예측: {prediction}', + 'settings.usage.pace.rate': '속도: {rate}', + 'settings.usage.pace.waitSeparator': ' · 대기 ', + 'settings.usage.pace.predictionLabel': '예측: ', + 'settings.remoteInstances.page.title': '원격 인스턴스', + 'settings.remoteInstances.page.description': 'SSH 연결, 원격 서버, 포워딩 설정을 관리하세요.', + 'settings.remoteInstances.page.empty.selectInstance': '설정을 보고 편집할 인스턴스를 선택하세요.', + 'settings.remoteInstances.page.empty.noExtraForwards': '추가 포트 포워딩이 설정되어 있지 않습니다.', + 'settings.remoteInstances.page.section.actions': '작업', + 'settings.remoteInstances.page.section.actionsDescription': '이 인스턴스를 연결, 재연결, 로그 확인 또는 제거합니다.', + 'settings.remoteInstances.page.section.remoteServer': '원격 서버', + 'settings.remoteInstances.page.section.remoteServerDescription': '원격 host에서 OpenChamber를 관리하고 시작하는 방식입니다.', + 'settings.remoteInstances.page.section.mainTunnel': '기본 터널', + 'settings.remoteInstances.page.section.mainTunnelDescription': '이 원격 인스턴스의 기본 로컬 엔드포인트입니다.', + 'settings.remoteInstances.page.section.authentication': '인증', + 'settings.remoteInstances.page.section.authenticationDescription': 'SSH와 원격 OpenChamber UI를 위한 인증 정보입니다.', + 'settings.remoteInstances.page.section.portForwards': '포트 포워딩', + 'settings.remoteInstances.page.section.portForwardsDescription': '기본 터널 외 추가 SSH 포워딩입니다.', + 'settings.remoteInstances.page.field.sshCommand': 'SSH command', + 'settings.remoteInstances.page.field.sshCommandPlaceholder': 'ssh user@host', + 'settings.remoteInstances.page.field.nickname': '별칭', + 'settings.remoteInstances.page.field.nicknamePlaceholder': '내 원격 host', + 'settings.remoteInstances.page.field.connectionTimeoutSeconds': '연결 시간 초과(초)', + 'settings.remoteInstances.page.field.installMethod': '설치 방식', + 'settings.remoteInstances.page.field.installMethodHint': 'Managed 모드에서 OpenChamber를 설치하는 방식입니다.', + 'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': '설치 방식 선택', + 'settings.remoteInstances.page.field.installMethodDownloadRelease': '릴리스 다운로드', + 'settings.remoteInstances.page.field.installMethodUploadBundle': '번들 업로드', + 'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'bind host 선택', + 'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH 비밀번호(선택 사항)', + 'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'SSH 비밀번호 입력', + 'settings.remoteInstances.page.field.uiPasswordOptional': 'UI 비밀번호(선택 사항)', + 'settings.remoteInstances.page.field.uiPasswordPlaceholder': 'UI 비밀번호 입력', + 'settings.remoteInstances.page.field.forwardTypeHint': '로컬(-L), 원격(-R), 동적(-D) 포워딩 중 선택하세요.', + 'settings.remoteInstances.page.field.typePlaceholder': '유형', + 'settings.remoteInstances.page.forwardType.local': '로컬(-L)', + 'settings.remoteInstances.page.forwardType.remote': '원격(-R)', + 'settings.remoteInstances.page.forwardType.dynamic': '동적(-D)', + 'settings.remoteInstances.page.forwardTypeDescription.local': '로컬 트래픽을 원격 대상으로 포워딩합니다.', + 'settings.remoteInstances.page.forwardTypeDescription.remote': '원격 엔드포인트를 노출하고 로컬 머신으로 다시 포워딩합니다.', + 'settings.remoteInstances.page.forwardTypeDescription.dynamic': '로컬 SOCKS5 proxy를 SSH로 노출합니다.', + 'settings.remoteInstances.page.actions.create': '생성', + 'settings.remoteInstances.page.actions.cancel': '취소', + 'settings.remoteInstances.page.actions.connecting': '연결 중...', + 'settings.remoteInstances.page.actions.reconnecting': '재연결 중...', + 'settings.remoteInstances.page.actions.reconnectNow': '지금 재연결', + 'settings.remoteInstances.page.actions.logs': 'SSH 로그', + 'settings.remoteInstances.page.actions.pickRandomPort': '임의 포트 선택', + 'settings.remoteInstances.page.actions.enableForwardAria': '포워딩 활성화', + 'settings.remoteInstances.page.actions.openLocal': '로컬 열기', + 'settings.remoteInstances.page.actions.addForward': '포워딩 추가', + 'settings.remoteInstances.page.import.sectionTitle': 'SSH config에서 가져오기', + 'settings.remoteInstances.page.import.loading': 'SSH host 로딩 중...', + 'settings.remoteInstances.page.import.noneFound': 'SSH host를 찾을 수 없습니다.', + 'settings.remoteInstances.page.import.noneAvailable': '가져올 수 있는 SSH host가 없습니다.', + 'settings.remoteInstances.page.import.patternSuffix': '(패턴)', + 'settings.remoteInstances.page.status.currentLocalUrl': '현재 로컬 URL:', + 'settings.remoteInstances.page.status.reconnectStale': '재연결이 멈춘 것 같습니다. 지금 다시 시도할 수 있습니다.', + 'settings.remoteInstances.page.logsDialog.title': 'SSH Logs', + 'settings.remoteInstances.page.logsDialog.loading': '로그 로딩 중...', + 'settings.remoteInstances.page.logsDialog.empty': '아직 SSH 로그가 없습니다.', + 'settings.remoteInstances.page.patternDialog.title': '와일드카드 패턴에서 생성', + 'settings.remoteInstances.page.patternDialog.destinationPlaceholder': 'user@host', + 'settings.remoteInstances.page.phase.resolvingConfiguration': '설정 확인 중', + 'settings.remoteInstances.page.phase.checkingAuth': '인증 확인 중', + 'settings.remoteInstances.page.phase.establishingSsh': 'SSH 연결 설정 중', + 'settings.remoteInstances.page.phase.probingRemote': '원격 host 확인 중', + 'settings.remoteInstances.page.phase.installingOpenChamber': 'OpenChamber 설치 중', + 'settings.remoteInstances.page.phase.updatingOpenChamber': 'OpenChamber 업데이트 중', + 'settings.remoteInstances.page.phase.detectingServer': '서버 감지 중', + 'settings.remoteInstances.page.phase.startingServer': '서버 시작 중', + 'settings.remoteInstances.page.phase.forwardingPorts': '포트 포워딩 중', + 'settings.remoteInstances.page.phase.reconnecting': '재연결 중', + 'settings.remoteInstances.page.confirm.storeSshPasswordPlaintext': 'SSH 비밀번호를 디스크에 평문으로 저장할까요?', + 'settings.remoteInstances.page.confirm.storeUiPasswordPlaintext': 'UI 비밀번호를 디스크에 평문으로 저장할까요?', + 'settings.remoteInstances.page.confirm.removeInstance': '이 원격 인스턴스를 제거할까요?', + 'settings.remoteInstances.page.toast.sshCommandRequired': 'SSH command는 필수입니다', + 'settings.remoteInstances.page.toast.saveFailed': '인스턴스를 저장하지 못했습니다', + 'settings.remoteInstances.page.toast.instanceSaved': '인스턴스가 저장되었습니다', + 'settings.remoteInstances.page.toast.instanceCreated': '인스턴스가 생성되었습니다', + 'settings.remoteInstances.page.toast.destinationRequired': '대상은 필수입니다', + 'settings.remoteInstances.page.toast.noLogsToCopy': '복사할 로그가 없습니다', + 'settings.remoteInstances.page.toast.logsCopied': '로그가 복사되었습니다', + 'settings.remoteInstances.page.toast.logsCleared': '로그가 지워졌습니다', + 'settings.remoteInstances.page.toast.clearLogsFailed': '로그를 지우지 못했습니다', + 'settings.remoteInstances.page.toast.instanceUrlUnavailable': '인스턴스 URL을 사용할 수 없습니다', + 'settings.remoteInstances.page.toast.connectFailed': '인스턴스에 연결하지 못했습니다', + 'settings.remoteInstances.page.toast.cancelConnectionFailed': '연결을 취소하지 못했습니다', + 'settings.remoteInstances.page.toast.disconnectFailed': '인스턴스 연결을 해제하지 못했습니다', + 'settings.remoteInstances.page.toast.retryFailed': '연결을 다시 시도하지 못했습니다', + 'settings.remoteInstances.page.toast.instanceRemoved': '인스턴스가 제거되었습니다', + 'settings.remoteInstances.page.toast.removeInstanceFailed': '인스턴스를 제거하지 못했습니다', + 'settings.openchamber.worktrees.state.selectProject': 'worktree를 관리할 프로젝트를 선택하세요.', + 'settings.openchamber.worktrees.state.gitOnly': 'Worktree 설정은 Git repository에서만 사용할 수 있습니다.', + 'settings.openchamber.worktrees.setup.title': '설정 command', + 'settings.openchamber.worktrees.setup.tooltipPrefix': 'worktree 생성 시 새 worktree 디렉터리 안에서 자동 실행됩니다. 프로젝트 root에는 다음을 사용하세요:', + 'settings.openchamber.worktrees.setup.tooltipSuffix': '.', + 'settings.openchamber.worktrees.setup.loading': '로딩 중...', + 'settings.openchamber.worktrees.setup.commandPlaceholder': '예: bun install', + 'settings.openchamber.worktrees.setup.removeCommandAria': 'command 제거', + 'settings.openchamber.worktrees.setup.addCommand': 'command 추가', + 'settings.openchamber.worktrees.list.title': '기존 worktree', + 'settings.openchamber.worktrees.list.tooltip': 'Worktree는 repo 외부에 있습니다(OpenCode 관리). worktree를 삭제하면 연결된 세션도 제거됩니다.', + 'settings.openchamber.worktrees.list.loading': 'worktree 로딩 중...', + 'settings.openchamber.worktrees.list.empty': '이 프로젝트의 worktree를 찾을 수 없습니다', + 'settings.openchamber.worktrees.list.detachedHead': 'Detached HEAD', + 'settings.openchamber.worktrees.list.deleteWorktreeAria': 'worktree {name} 삭제', + 'settings.agents.modelSelector.title': '모델 선택', + 'settings.agents.modelSelector.searchPlaceholder': '모델 검색', + 'settings.agents.modelSelector.selectPlaceholder': '모델 선택...', + 'settings.agents.modelSelector.notSelected': '선택 안 됨', + 'settings.agents.modelSelector.noModelOptional': '모델 없음(선택 사항)', + 'settings.agents.modelSelector.section.favorites': '즐겨찾기', + 'settings.agents.modelSelector.section.recents': '최근 항목', + 'settings.agents.modelSelector.section.recent': '최근', + 'settings.agents.modelSelector.badge.current': '현재', + 'settings.agents.modelSelector.actions.favorite': '즐겨찾기', + 'settings.agents.modelSelector.actions.unfavorite': '즐겨찾기 해제', + 'settings.agents.modelSelector.actions.addToFavorites': '즐겨찾기에 추가', + 'settings.agents.modelSelector.actions.removeFromFavorites': '즐겨찾기에서 제거', + 'settings.agents.modelSelector.state.noModelsFound': '모델을 찾을 수 없습니다', + 'settings.agents.modelSelector.keyboardHints': '↑↓ 이동 • Enter 선택 • Esc 닫기', + 'settings.providers.sidebar.title': '프로바이더', + 'settings.providers.sidebar.total': '총 {count}개', + 'settings.providers.sidebar.actions.connectProviderAria': '프로바이더 연결', + 'settings.providers.sidebar.actions.connectProviderTitle': '프로바이더 연결', + 'settings.providers.sidebar.empty.title': '프로바이더를 찾을 수 없습니다', + 'settings.providers.sidebar.empty.description': 'OpenCode 설정을 확인하세요', + 'settings.providers.sidebar.section.userProviders': '사용자 프로바이더', + 'settings.providers.sidebar.section.projectProviders': '프로젝트 프로바이더', + 'settings.providers.page.state.loading': '로딩 중...', + 'settings.providers.page.state.unableToLoadProviderList': '프로바이더 목록을 로드할 수 없습니다', + 'settings.providers.page.empty.noProvidersDetected': '감지된 프로바이더가 없습니다', + 'settings.providers.page.empty.checkOpenCodeConfiguration': 'OpenCode 설정을 확인하세요', + 'settings.providers.page.empty.selectProviderFromSidebar': '사이드바에서 프로바이더를 선택하세요', + 'settings.providers.page.empty.reviewDetailsAndConfigureAuth': '세부 정보를 확인하고 인증을 설정하세요', + 'settings.providers.page.connect.title': '프로바이더 연결', + 'settings.providers.page.connect.selectProviderTitle': '프로바이더 선택', + 'settings.providers.page.connect.providerField': '프로바이더', + 'settings.providers.page.connect.selectProviderPlaceholder': '프로바이더 선택', + 'settings.providers.page.connect.searchProvidersPlaceholder': '검색...', + 'settings.providers.page.connect.noProvidersFound': '프로바이더를 찾을 수 없습니다', + 'settings.providers.page.connect.allProvidersConnected': '모든 프로바이더가 연결되었습니다.', + 'settings.providers.page.auth.title': '인증', + 'settings.providers.page.auth.loadingMethods': '인증 방식 로딩 중...', + 'settings.providers.page.auth.apiKeyLabel': 'API Key', + 'settings.providers.page.auth.apiKeyTooltip': '키는 OpenCode로 직접 전송되며 OpenChamber에 저장되지 않습니다.', + 'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...', + 'settings.providers.page.auth.oauthMethodFallback': 'OAuth 방식 {index}', + 'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'authorization code 붙여넣기', + 'settings.providers.page.auth.connected': '연결됨', + 'settings.providers.page.auth.useReconnectHint': '· 인증 정보를 업데이트하려면 Reconnect를 사용하세요', + 'settings.providers.page.connectionDetails.title': '연결 세부 정보', + 'settings.providers.page.connectionDetails.configuredIn': '설정 위치:', + 'settings.providers.page.connectionDetails.noActiveSource': '활성 설정 소스 없음', + 'settings.providers.page.connectionDetails.source.authCredentials': '인증 정보', + 'settings.providers.page.connectionDetails.source.userConfig': '사용자 설정', + 'settings.providers.page.connectionDetails.source.projectConfig': '프로젝트 설정', + 'settings.providers.page.connectionDetails.source.customConfig': '사용자 정의 설정', + 'settings.providers.page.models.title': '사용 가능한 모델', + 'settings.providers.page.models.filterPlaceholder': '모델 필터...', + 'settings.providers.page.models.noModelsMatchFilter': '이 필터와 일치하는 모델이 없습니다.', + 'settings.providers.page.models.capability.toolCalling': 'Tool calling', + 'settings.providers.page.models.capability.reasoning': 'Reasoning', + 'settings.providers.page.models.capability.imageInput': 'Image input', + 'settings.providers.page.models.tokenBadge.context': 'ctx', + 'settings.providers.page.models.tokenBadge.output': 'out', + 'settings.providers.page.models.actions.hideModelFromSelectors': '선택기에서 모델 숨기기', + 'settings.providers.page.models.actions.showModelInSelectors': '선택기에 모델 표시', + 'settings.providers.page.models.actions.hideModel': '모델 숨기기', + 'settings.providers.page.models.actions.showModel': '모델 표시', + 'settings.providers.page.actions.saving': '저장 중...', + 'settings.providers.page.actions.saveKey': '키 저장', + 'settings.providers.page.actions.connect': '연결', + 'settings.providers.page.actions.copyCode': '코드 복사', + 'settings.providers.page.actions.open': '열기', + 'settings.providers.page.actions.copy': '복사', + 'settings.providers.page.actions.complete': '완료', + 'settings.providers.page.actions.hide': '숨기기', + 'settings.providers.page.actions.reconnect': '재연결', + 'settings.providers.page.actions.disconnecting': '연결 해제 중...', + 'settings.providers.page.actions.disconnect': '연결 해제', + 'settings.providers.page.actions.hideAll': '모두 숨기기', + 'settings.providers.page.actions.showAll': '모두 표시', + 'settings.providers.page.toast.authMethodsLoadFailed': '프로바이더 인증 방식을 로드하지 못했습니다', + 'settings.providers.page.toast.providerSourcesLoadFailed': '프로바이더 소스를 로드하지 못했습니다', + 'settings.providers.page.toast.apiKeyRequired': 'API key는 필수입니다', + 'settings.providers.page.toast.apiKeySaveFailed': 'API key를 저장하지 못했습니다', + 'settings.providers.page.toast.apiKeySaved': 'API key가 저장되었습니다', + 'settings.providers.page.toast.oauthStartFailed': 'OAuth flow를 시작하지 못했습니다', + 'settings.providers.page.toast.oauthDetailsMissing': '반환된 OAuth 세부 정보가 없습니다', + 'settings.providers.page.toast.completeOAuthInBrowser': '브라우저에서 OAuth flow를 완료하세요', + 'settings.providers.page.toast.oauthCompleteFailed': 'OAuth flow를 완료하지 못했습니다', + 'settings.providers.page.toast.oauthCompleted': 'OAuth 연결이 완료되었습니다', + 'settings.providers.page.toast.oauthLinkCopied': 'OAuth 링크가 복사되었습니다', + 'settings.providers.page.toast.oauthLinkCopyFailed': 'OAuth 링크를 복사하지 못했습니다', + 'settings.providers.page.toast.deviceCodeCopied': '기기 코드가 복사되었습니다', + 'settings.providers.page.toast.deviceCodeCopyFailed': '기기 코드를 복사하지 못했습니다', + 'settings.providers.page.toast.providerDisconnected': '프로바이더 연결이 해제되었습니다', + 'settings.providers.page.toast.providerDisconnectFailed': '프로바이더 연결을 해제하지 못했습니다', + 'settings.mcp.page.empty.selectServer': '사이드바에서 MCP 서버를 선택하세요', + 'settings.mcp.page.empty.addNewOne': '또는 새로 추가하세요', + 'settings.mcp.page.header.newServer': '새 MCP 서버', + 'settings.mcp.page.header.configureNewServer': '새 MCP 서버를 설정하세요', + 'settings.mcp.page.header.transport': '{type} transport', + 'settings.mcp.page.transport.local': '로컬 · stdio', + 'settings.mcp.page.transport.remote': '원격 · SSE', + 'settings.mcp.page.status.label.connected': '연결됨', + 'settings.mcp.page.status.label.failed': '실패', + 'settings.mcp.page.status.label.needsAuth': '인증 필요', + 'settings.mcp.page.status.label.needsRegistration': '등록 필요', + 'settings.mcp.page.status.description.connected': '연결되었습니다. OpenCode가 도구와 리소스를 찾을 준비가 됐습니다.', + 'settings.mcp.page.status.description.failedDefault': 'OpenCode가 이 MCP 서버에 연결할 수 없습니다.', + 'settings.mcp.page.status.description.needsAuth': '이 원격 MCP 서버는 연결 전에 권한 부여가 필요합니다.', + 'settings.mcp.page.status.description.needsClientRegistrationDefault': '이 원격 MCP 서버는 권한 부여를 완료하기 전에 클라이언트 등록이 필요합니다.', + 'settings.mcp.page.status.description.disabled': '이 MCP 서버는 설정에서 비활성화되어 있습니다.', + 'settings.mcp.page.status.description.default': '실시간 런타임 상태를 보려면 연결을 새로고침하거나 테스트하세요.', + 'settings.mcp.page.status.runtimeStatus': '런타임 상태', + 'settings.mcp.page.status.projectScopedTo': '{directory} 프로젝트 범위', + 'settings.mcp.page.status.userScoped': '사용자 범위 설정', + 'settings.mcp.page.status.activeProject': '활성 프로젝트', + 'settings.mcp.page.actions.connect': '연결', + 'settings.mcp.page.actions.disconnect': '연결 해제', + 'settings.mcp.page.actions.authorize': '인증', + 'settings.mcp.page.actions.reauthorize': '다시 인증', + 'settings.mcp.page.actions.clearAuth': '인증 지우기', + 'settings.mcp.page.actions.test': '테스트', + 'settings.mcp.page.actions.testConnection': '연결 테스트', + 'settings.mcp.page.actions.working': '작업 중...', + 'settings.mcp.page.actions.starting': '시작 중...', + 'settings.mcp.page.actions.clearing': '지우는 중...', + 'settings.mcp.page.actions.testing': '테스트 중...', + 'settings.mcp.page.actions.completing': '완료 중...', + 'settings.mcp.page.actions.completeAuthorization': '인증 완료', + 'settings.mcp.page.actions.openInBrowser': '브라우저에서 열기', + 'settings.mcp.page.actions.copyLink': '링크 복사', + 'settings.mcp.page.actions.deleting': '삭제 중…', + 'settings.mcp.page.auth.authorizationUrl': 'Authorization URL', + 'settings.mcp.page.auth.manualFallbackTitle': '수동 인증 대체 방법', + 'settings.mcp.page.auth.manualFallbackDescription': '브라우저가 다른 머신으로 돌아가거나 code가 포함된 callback URL을 표시하면 전체 URL 또는 원본 code를 여기에 붙여넣으세요.', + 'settings.mcp.page.auth.callbackInputPlaceholder': 'callback URL 또는 authorization code 붙여넣기', + 'settings.mcp.page.auth.waitingForOpenCode': 'OpenCode가 브라우저 인증 flow 완료를 감지하기를 기다리는 중...', + 'settings.mcp.page.server.title': '서버', + 'settings.mcp.page.server.name': '서버 이름', + 'settings.mcp.page.server.namePlaceholder': 'my-mcp-server', + 'settings.mcp.page.server.importJson': 'JSON snippet에서 가져오기', + 'settings.mcp.page.server.importJsonTitle': 'JSON snippet에서 전체 MCP 서버 설정을 가져옵니다', + 'settings.mcp.page.server.enable': '서버 활성화', + 'settings.mcp.page.server.enableAria': '서버 활성화', + 'settings.mcp.page.server.transportMode': 'Transport 모드', + 'settings.mcp.page.connection.command': 'Command', + 'settings.mcp.page.connection.serverUrl': '서버 URL', + 'settings.mcp.page.connection.serverUrlPlaceholder': 'https://mcp.example.com/mcp', + 'settings.mcp.page.connection.pasteCommand': 'Command 붙여넣기', + 'settings.mcp.page.connection.pasteCommandTitle': '클립보드에서 로컬 command를 붙여넣고 자동 분리', + 'settings.mcp.page.connection.previewArgs': '미리보기({count} args)', + 'settings.mcp.page.advanced.title': '고급 원격 옵션', + 'settings.mcp.page.advanced.configure': '고급 옵션 설정', + 'settings.mcp.page.advanced.autoDetect': '자동 감지', + 'settings.mcp.page.advanced.custom': '사용자 정의', + 'settings.mcp.page.advanced.headers': 'headers', + 'settings.mcp.page.advanced.timeoutMs': '시간 초과(ms)', + 'settings.mcp.page.advanced.timeoutHint': 'OpenCode의 기본 MCP 시간 초과를 사용하려면 비워 두세요.', + 'settings.mcp.page.advanced.requestHeaders': '요청 헤더', + 'settings.mcp.page.advanced.headerNamePlaceholder': 'Header-Name', + 'settings.mcp.page.advanced.pasteHeaders': '헤더 붙여넣기', + 'settings.mcp.page.advanced.pasteHeadersTitle': '클립보드에서 KEY=VALUE 헤더 줄 붙여넣기', + 'settings.mcp.page.advanced.oauthAutoDetection': 'OAuth 자동 감지 활성화', + 'settings.mcp.page.advanced.oauthAutoDetectionAria': 'OAuth 자동 감지 활성화', + 'settings.mcp.page.advanced.oauthClientIdPlaceholder': 'OAuth client ID', + 'settings.mcp.page.advanced.oauthClientSecretPlaceholder': 'OAuth client secret', + 'settings.mcp.page.advanced.oauthScopesPlaceholder': 'Scopes(공백으로 구분)', + 'settings.mcp.page.advanced.oauthRedirectUriPlaceholder': 'Redirect URI', + 'settings.mcp.page.advanced.oauthHint': 'OpenCode가 MCP 서버에서 OAuth 설정을 추론하도록 하려면 이 필드를 비워 두세요.', + 'settings.mcp.page.advanced.oauthCallbackHint': '브라우저 기반 MCP 권한 부여는 redirect URI가 비어 있을 때 이 callback URL을 사용합니다:', + 'settings.mcp.page.env.title': '환경 변수', + 'settings.mcp.page.env.key': '키', + 'settings.mcp.page.env.value': '값', + 'settings.mcp.page.env.valuePlaceholder': 'value', + 'settings.mcp.page.env.hide': '숨기기', + 'settings.mcp.page.env.show': '표시', + 'settings.mcp.page.env.addVariable': '변수 추가', + 'settings.mcp.page.env.addEnvironmentVariable': '환경 변수 추가', + 'settings.mcp.page.env.keyPlaceholder': 'API_KEY', + 'settings.mcp.page.env.pasteEnv': '.env 붙여넣기', + 'settings.mcp.page.env.pasteEnvTitle': '클립보드에서 KEY=VALUE 줄 붙여넣기', + 'settings.mcp.page.env.plainTextWarning': '⚠ 값은 opencode.json에 평문으로 저장됩니다', + 'settings.mcp.page.env.removeVariableAria': '변수 제거', + 'settings.mcp.page.importDialog.title': 'JSON snippet 가져오기', + 'settings.mcp.page.importDialog.description': '문서나 다른 설정 파일의 전체 MCP JSON snippet을 붙여넣으세요. 파싱된 값은 저장 전에 확인할 수 있도록 이 양식에 채워집니다.', + 'settings.mcp.page.importDialog.pasteFromClipboard': '클립보드에서 JSON 붙여넣기', + 'settings.mcp.page.deleteDialog.title': '"{name}"을(를) 삭제하시겠습니까?', + 'settings.mcp.page.deleteDialog.descriptionPrefix': '이 작업은 서버를 다음에서 제거합니다:', + 'settings.mcp.page.deleteDialog.descriptionSuffix': 'OpenCode를 다시 로드해야 합니다.', + 'settings.mcp.page.toast.clipboardReadFailed': '클립보드를 읽을 수 없습니다', + 'settings.mcp.page.toast.configImported': 'MCP 설정을 가져왔습니다', + 'settings.mcp.page.toast.nameRequired': '이름은 필수입니다', + 'settings.mcp.page.toast.serverNameExists': '이 이름의 서버가 이미 존재합니다', + 'settings.mcp.page.toast.localCommandRequired': '로컬 서버의 command는 비워 둘 수 없습니다', + 'settings.mcp.page.toast.remoteUrlRequired': '원격 서버의 URL은 비워 둘 수 없습니다', + 'settings.mcp.page.toast.serverCreatedReloadFailed': 'MCP 서버가 생성되었지만 OpenCode 다시 로드에 실패했습니다.', + 'settings.mcp.page.toast.savedReloadFailed': '저장했지만 OpenCode 다시 로드에 실패했습니다.', + 'settings.mcp.page.toast.retryRefreshHint': '이 서버에 권한을 부여하기 전에 새로고침을 다시 시도하거나 Settings를 다시 여세요.', + 'settings.mcp.page.toast.serverCreatedReloading': 'MCP 서버가 생성되었습니다. OpenCode 다시 로드 중…', + 'settings.mcp.page.toast.savedReloading': '저장되었습니다. OpenCode 다시 로드 중…', + 'settings.mcp.page.toast.saveFailed': '저장하지 못했습니다', + 'settings.mcp.page.toast.unexpectedError': '오류가 발생했습니다', + 'settings.mcp.page.toast.serverDeletedReloadFailed': '"{name}"이(가) 삭제되었지만 OpenCode 다시 로드에 실패했습니다', + 'settings.mcp.page.toast.refreshListIfStale': 'UI가 오래된 것처럼 보이면 MCP 목록을 새로고침하세요.', + 'settings.mcp.page.toast.serverDeleted': '"{name}"이(가) 삭제되었습니다', + 'settings.mcp.page.toast.deleteFailed': '삭제하지 못했습니다', + 'settings.mcp.page.toast.disconnected': '연결 해제됨', + 'settings.mcp.page.toast.connected': '연결됨', + 'settings.mcp.page.toast.connectionNeedsAuthorization': '연결에 인증이 필요합니다', + 'settings.mcp.page.toast.connectionNeedsClientRegistration': '연결에 클라이언트 등록이 필요합니다', + 'settings.mcp.page.toast.connectionFailed': '연결 실패', + 'settings.mcp.page.toast.connectionAttemptFinished': '연결 시도가 완료되었습니다. 자세한 내용은 상태를 새로고침하세요.', + 'settings.mcp.page.toast.createServerBeforeLiveActions': '라이브 작업을 실행하기 전에 서버를 생성하세요', + 'settings.mcp.page.toast.saveBeforeLiveActions': '라이브 작업을 실행하기 전에 변경사항을 저장하세요', + 'settings.mcp.page.toast.refreshStatusFailed': 'MCP 상태를 새로고침하지 못했습니다', + 'settings.mcp.page.toast.oauthRedirectUrlBuildFailed': 'MCP OAuth redirect URL을 만들 수 없습니다', + 'settings.mcp.page.toast.oauthBrowserCallbackSaveFailed': 'MCP 권한 부여를 위한 브라우저 callback URL을 저장하지 못했습니다', + 'settings.mcp.page.toast.openCodeReloadFailedAfterCallbackSave': '브라우저 callback URL 저장 후 OpenCode 다시 로드에 실패했습니다', + 'settings.mcp.page.toast.completeAuthorizationInBrowserWithPaste': '브라우저에서 MCP 인증 flow를 완료한 뒤 반환된 code 또는 callback URL을 여기에 붙여넣으세요', + 'settings.mcp.page.toast.completeAuthorizationInBrowser': '브라우저에서 MCP 인증 flow를 완료하세요', + 'settings.mcp.page.toast.openAuthorizationUrlFailed': 'authorization URL을 자동으로 열 수 없습니다', + 'settings.mcp.page.toast.authorizationStartFailed': '권한 부여를 시작하지 못했습니다', + 'settings.mcp.page.toast.authSessionExpired': '인증 세션이 만료되었거나 다시 로드 중 지워졌습니다. Authorize를 다시 클릭하세요.', + 'settings.mcp.page.toast.savedAuthorizationRemoved': '저장된 MCP 인증이 제거되었습니다', + 'settings.mcp.page.toast.clearAuthorizationFailed': '인증 정보를 지우지 못했습니다', + 'settings.mcp.page.toast.authorizationUrlCopied': 'Authorization URL이 복사되었습니다', + 'settings.mcp.page.toast.authorizationUrlCopyFailed': 'authorization URL을 복사하지 못했습니다', + 'settings.mcp.page.toast.pasteCallbackOrCodeFirst': '먼저 callback URL 또는 authorization code를 붙여넣으세요', + 'settings.mcp.page.toast.missingServerDetails': 'MCP 서버 세부 정보가 없습니다. 서버를 다시 선택하거나 전체 callback URL을 붙여넣으세요.', + 'settings.mcp.page.toast.authorizationCompleted': 'MCP 인증이 완료되었습니다', + 'settings.mcp.page.toast.authorizationCompletedFor': '{name}의 MCP 인증이 완료되었습니다', + 'settings.mcp.page.toast.authorizationCompleteFailed': 'MCP 인증을 완료하지 못했습니다', + 'settings.mcp.page.toast.enableServerBeforeTest': '연결을 테스트하기 전에 이 서버를 활성화하세요', + 'settings.mcp.page.toast.connectionTestSucceeded': '연결 테스트에 성공했습니다', + 'settings.mcp.page.toast.connectionTestFailed': '연결 테스트에 실패했습니다', + 'settings.mcp.page.toast.connectionTestFinished': '연결 테스트가 완료되었습니다. 자세한 내용은 상태를 새로고침하세요.', + 'settings.mcp.page.toast.authorizationFailed': '권한 부여 실패', + 'settings.mcp.page.toast.authorizationStillInProgress': '브라우저에서 인증이 아직 진행 중입니다. 필요한 경우 callback URL 또는 code를 붙여넣으세요.', + 'settings.mcp.page.toast.noKeyValuePairsFound': '클립보드에서 KEY=VALUE 쌍을 찾을 수 없습니다', + 'settings.mcp.page.toast.importedVariablesCount': '가져온 변수: {count}개', + 'settings.mcp.page.toast.pastedArgumentsCount': '붙여넣은 인수: {count}개', + 'settings.shared.projectSelector.fallbackProject': '프로젝트', + 'settings.shared.projectSelector.switchProjectAria': '프로젝트 전환', + 'settings.shared.projectSelector.switchProjectTitle': '프로젝트 전환', + 'settings.openchamber.defaults.title': '세션 기본값', + 'settings.openchamber.defaults.summaryPrefix': '새 세션은 다음으로 시작됩니다:', + 'settings.openchamber.defaults.summaryOpenCodeDefault': 'OpenCode agent 기본값', + 'settings.openchamber.defaults.field.defaultModel': '기본 모델', + 'settings.openchamber.defaults.field.defaultThinking': '기본 Thinking', + 'settings.openchamber.defaults.field.thinkingPlaceholder': 'Thinking', + 'settings.openchamber.defaults.field.defaultAgent': '기본 Agent', + 'settings.openchamber.defaults.field.showDeletionDialogAria': '삭제 dialog 표시', + 'settings.openchamber.defaults.field.showDeletionDialog': '삭제 dialog 표시', + 'settings.openchamber.defaults.field.openFilesPreviewAria': '파일을 preview 모드로 열기', + 'settings.openchamber.defaults.field.openFilesPreview': '파일을 preview 모드로 열기', + 'settings.openchamber.defaults.option.default': '기본값', + 'settings.openchamber.defaults.option.defaultLowercase': '기본값', + 'settings.openchamber.git.title': 'Git', + 'settings.openchamber.git.changesViewTitle': '변경사항 보기', + 'settings.openchamber.git.changesViewAria': 'Git 변경사항 보기 모드', + 'settings.openchamber.git.option.flatList': '평면 목록', + 'settings.openchamber.git.option.treeView': '트리 보기', + 'settings.openchamber.git.optionAria': 'Git 변경사항 보기 모드: {option}', + 'settings.openchamber.git.enableGitmojiAria': 'Gitmoji picker 활성화', + 'settings.openchamber.git.enableGitmoji': 'Gitmoji Picker 활성화', + 'settings.openchamber.git.showGitignoredAria': 'gitignored 파일 표시', + 'settings.openchamber.git.showGitignored': 'Gitignored 파일 표시', + 'settings.github.page.tooltip.connectAccount': '앱에서 PR과 issue workflow를 사용하려면 GitHub 계정을 연결하세요.', + 'settings.github.page.avatarAlt.withLogin': '{login} avatar', + 'settings.github.page.avatarAlt.fallback': 'GitHub avatar', + 'settings.github.page.label.unknownUser': '알 수 없음', + 'settings.github.page.label.scopes': 'Scopes: {value}', + 'settings.github.page.label.otherAccounts': '다른 계정', + 'settings.github.page.actions.disconnect': '연결 해제', + 'settings.github.page.actions.connect': 'GitHub 연결', + 'settings.github.page.actions.switchTo': '전환', + 'settings.github.page.actions.addAccount': '계정 추가', + 'settings.github.page.actions.openGithub': 'GitHub 열기', + 'settings.github.page.status.notConnected': '연결 안 됨', + 'settings.github.page.status.active': '활성', + 'settings.github.page.flow.title': 'OpenChamber 권한 부여', + 'settings.github.page.flow.description': 'GitHub에서 이 기기를 인증하려면 다음 코드를 입력하세요:', + 'settings.github.page.flow.waiting': '인증 대기 중…(자동 새로고침)', + 'settings.github.page.toast.startConnectFailed': 'GitHub 연결을 시작하지 못했습니다', + 'settings.github.page.toast.connected': 'GitHub가 연결되었습니다', + 'settings.github.page.toast.authorizationFailed': 'GitHub 인증에 실패했습니다', + 'settings.github.page.toast.disconnected': 'GitHub 연결이 해제되었습니다', + 'settings.github.page.toast.disconnectFailed': 'GitHub 연결을 해제하지 못했습니다', + 'settings.github.page.toast.accountSwitched': 'GitHub 계정이 전환되었습니다', + 'settings.github.page.toast.accountSwitchFailed': 'GitHub 계정을 전환하지 못했습니다', + 'settings.notifications.page.delivery.title': '알림', + 'settings.notifications.page.delivery.enableAria': '알림 활성화', + 'settings.notifications.page.delivery.enableLabel': '알림 활성화', + 'settings.notifications.page.delivery.focusedAria': '앱에 포커스가 있을 때 알림', + 'settings.notifications.page.delivery.focusedLabel': '앱 포커스 중에도 알림', + 'settings.notifications.page.delivery.testAction': '테스트 알림 보내기', + 'settings.notifications.page.delivery.browserPermissionHint': '처음에는 브라우저가 권한을 요청할 수 있습니다.', + 'settings.notifications.page.delivery.permissionDenied': '알림 권한이 거부되었습니다. 브라우저 설정에서 활성화하세요.', + 'settings.notifications.page.delivery.permissionGrantedButDisabled': '권한은 부여되었지만 알림이 비활성화되어 있습니다.', + 'settings.notifications.page.delivery.vscodeHint': '활성화하면 알림이 VS Code 기본 알림을 통해 전달됩니다.', + 'settings.notifications.page.events.title': '이벤트', + 'settings.notifications.page.events.completionAria': 'Agent 완료', + 'settings.notifications.page.events.completionLabel': 'Agent 완료', + 'settings.notifications.page.events.subtaskAria': 'Subagent 완료', + 'settings.notifications.page.events.subtaskLabel': 'Subagent 완료', + 'settings.notifications.page.events.errorAria': 'Agent 오류', + 'settings.notifications.page.events.errorLabel': 'Agent 오류', + 'settings.notifications.page.events.questionAria': 'Agent 질문', + 'settings.notifications.page.events.questionLabel': 'Agent 질문', + 'settings.notifications.page.template.title': '알림 템플릿', + 'settings.notifications.page.template.variablesLabel': '변수:', + 'settings.notifications.page.template.event.completion': '완료', + 'settings.notifications.page.template.event.subtask': 'Subagent 완료', + 'settings.notifications.page.template.event.error': '오류', + 'settings.notifications.page.template.event.question': '질문', + 'settings.notifications.page.template.field.title': '제목', + 'settings.notifications.page.template.field.message': '메시지', + 'settings.notifications.page.template.defaults.completion.title': '{agent_name} 준비 완료', + 'settings.notifications.page.template.defaults.completion.message': '{model_name}이(가) 작업을 완료했습니다', + 'settings.notifications.page.template.defaults.error.title': '도구 오류', + 'settings.notifications.page.template.defaults.error.message': '{last_message}', + 'settings.notifications.page.template.defaults.question.title': '입력이 필요합니다', + 'settings.notifications.page.template.defaults.question.message': '{last_message}', + 'settings.notifications.page.template.defaults.subtask.title': '{agent_name} 준비 완료', + 'settings.notifications.page.template.defaults.subtask.message': '{model_name}이(가) 작업을 완료했습니다', + 'settings.notifications.page.summary.title': 'AI 요약', + 'settings.notifications.page.summary.toggleAria': '마지막 메시지 요약', + 'settings.notifications.page.summary.toggleLabel': '마지막 메시지 요약', + 'settings.notifications.page.summary.requiresTemplateVariable': '필수 항목', + 'settings.notifications.page.summary.modelLabel': '요약 모델', + 'settings.notifications.page.summary.modelTooltip': '알림 및 음성 요약에 사용됩니다.', + 'settings.notifications.page.summary.notSelected': '선택 안 됨', + 'settings.notifications.page.summary.thresholdLabel': '요약 기준', + 'settings.notifications.page.summary.thresholdHint': '이보다 긴 메시지는 요약합니다', + 'settings.notifications.page.summary.resetThresholdAria': '임계값 초기화', + 'settings.notifications.page.summary.lengthLabel': '길이', + 'settings.notifications.page.summary.lengthHint': '요약 목표 문자 길이', + 'settings.notifications.page.summary.resetLengthAria': '요약 길이 초기화', + 'settings.notifications.page.summary.maxLengthLabel': '최대 길이', + 'settings.notifications.page.summary.maxLengthHint': '{last_message}를 이 길이로 줄입니다', + 'settings.notifications.page.summary.resetMaxLengthAria': '최대 메시지 길이 초기화', + 'settings.notifications.page.push.title': '백그라운드 Push 알림', + 'settings.notifications.page.push.enableAria': 'Push 알림 활성화', + 'settings.notifications.page.push.enableLabel': 'Push 알림 활성화', + 'settings.notifications.page.push.unsupportedHint': 'Push가 지원되지 않습니다. Desktop Chrome/Edge와 Android는 Push를 지원합니다. iOS는 설치된 PWA가 필요합니다.', + 'settings.notifications.page.push.supportedHint': '운영체제 백그라운드 서비스를 통해 알림을 받습니다', + 'settings.notifications.page.push.loadingAria': '로딩 중', + 'settings.notifications.page.toast.permissionDenied.title': '알림 권한이 거부되었습니다', + 'settings.notifications.page.toast.permissionDenied.description': '브라우저 설정에서 알림을 활성화하세요.', + 'settings.notifications.page.toast.permissionDenied.enableInBrowser': '브라우저 설정에서 알림을 활성화하세요.', + 'settings.notifications.page.toast.requestPermissionFailed': '알림 권한을 요청하지 못했습니다', + 'settings.notifications.page.toast.notificationsApiUnavailable': 'Notifications API를 사용할 수 없습니다', + 'settings.notifications.page.toast.testNotificationSent': '테스트 알림을 보냈습니다', + 'settings.notifications.page.toast.testNotificationFailed': '테스트 알림을 보내지 못했습니다', + 'settings.notifications.page.toast.pushUnsupported': 'Push 알림이 지원되지 않습니다', + 'settings.notifications.page.toast.pushApiUnavailable': 'Push API를 사용할 수 없습니다', + 'settings.notifications.page.toast.pushKeyLoadFailed': 'Push key를 로드하지 못했습니다', + 'settings.notifications.page.toast.enableBackgroundFailed': '백그라운드 알림을 활성화하지 못했습니다', + 'settings.notifications.page.toast.backgroundEnabled': '백그라운드 알림이 활성화되었습니다', + 'settings.notifications.page.toast.backgroundDisabled': '백그라운드 알림이 비활성화되었습니다', + 'settings.notifications.page.testNotification.title': '테스트 알림', + 'settings.notifications.page.testNotification.body': 'OpenChamber의 테스트 알림입니다.', + 'settings.voice.page.section.voiceSetup': '음성', + 'settings.voice.page.section.speechRecognition': '음성 인식', + 'settings.voice.page.section.playbackAndSummary': '재생 및 요약', + 'settings.voice.page.field.enableVoiceModeAria': '음성 모드 활성화', + 'settings.voice.page.field.enableVoiceMode': '음성 모드 활성화', + 'settings.voice.page.field.provider': '프로바이더', + 'settings.voice.page.provider.browser': '브라우저', + 'settings.voice.page.provider.custom': '사용자 정의', + 'settings.voice.page.provider.say': 'Say', + 'settings.voice.page.provider.server': '서버', + 'settings.voice.page.tooltip.browser': '무료, 오프라인, 모바일 지원 제한.', + 'settings.voice.page.tooltip.openai': '고품질, 모바일 지원, API key 필요.', + 'settings.voice.page.tooltip.custom': 'OpenAI 호환 서버(예: Kokoro).', + 'settings.voice.page.tooltip.say': 'macOS native. 빠르고 무료이며 오프라인입니다.', + 'settings.voice.page.tooltip.sttBrowser': 'Web Speech API(Chrome/Edge). 무료, 설정 불필요.', + 'settings.voice.page.tooltip.sttServer': 'OpenAI 호환 Whisper 서버입니다. 정확도가 더 높고 모든 언어를 지원합니다.', + 'settings.voice.page.field.apiKey': 'API Key', + 'settings.voice.page.field.apiKeyHintUsingConfig': '설정의 키를 사용 중', + 'settings.voice.page.field.apiKeyHintRequired': 'OpenAI TTS에는 API key가 필요합니다', + 'settings.voice.page.field.apiKeyHintProvide': 'OpenAI 키를 제공하세요', + 'settings.voice.page.field.serverUrl': '서버 URL', + 'settings.voice.page.field.serverUrlHint': 'OpenAI 호환 TTS 서버의 base URL', + 'settings.voice.page.field.model': '모델', + 'settings.voice.page.field.voice': '음성', + 'settings.voice.page.field.voiceIdentifierHint': '서버에서 지원하는 음성 식별자', + 'settings.voice.page.field.configuredAbove': '위에서 설정됨', + 'settings.voice.page.actions.preview': '미리보기', + 'settings.voice.page.field.selectVoicePlaceholder': '음성 선택', + 'settings.voice.page.field.auto': '자동', + 'settings.voice.page.field.speechRate': '말하기 속도', + 'settings.voice.page.field.speechPitch': '말하기 피치', + 'settings.voice.page.field.speechVolume': '말하기 볼륨', + 'settings.voice.page.field.language': '언어', + 'settings.voice.page.field.selectLanguagePlaceholder': '언어 선택', + 'settings.voice.page.field.sttBrowserSupportError': '이 브라우저에서는 MediaRecorder 또는 AudioContext를 사용할 수 없습니다. Server STT가 작동하지 않을 수 있습니다.', + 'settings.voice.page.field.sttServerUrlHint': 'Whisper 호환 서버의 base URL', + 'settings.voice.page.field.sttLanguageHint': 'BCP-47 코드(예: en, fr). 자동 감지하려면 비워 두세요.', + 'settings.voice.page.field.silenceThreshold': '무음 기준', + 'settings.voice.page.field.silenceHold': '무음 유지', + 'settings.voice.page.field.millisecondsUnit': 'ms', + 'settings.voice.page.field.messageReadAloudButtonAria': '메시지 읽어주기 버튼', + 'settings.voice.page.field.messageReadAloudButton': '메시지 읽어주기 버튼', + 'settings.voice.page.field.summarizeBeforePlaybackAria': '재생 전 요약', + 'settings.voice.page.field.summarizeBeforePlayback': '재생 전 요약', + 'settings.voice.page.field.summarizeVoiceModeResponsesAria': '음성 모드 응답 요약', + 'settings.voice.page.field.summarizeVoiceModeResponses': '음성 모드 응답 요약', + 'settings.voice.page.field.summarizationThreshold': '요약 기준', + 'settings.voice.page.field.summaryMaxLength': '요약 최대 길이', + 'settings.voice.page.hint.shiftClickPrefix': '마이크 버튼에서', + 'settings.voice.page.hint.shiftClickSuffix': '을(를) 눌러 연속 모드를 토글하세요', + 'settings.voice.page.preview.browserVoiceFallback': '브라우저 음성', + 'settings.voice.page.preview.voiceLine': '안녕하세요! 저는 {voiceName}입니다. 이렇게 들립니다.', + 'settings.voice.page.preview.customServerLine': '안녕하세요! 사용자 정의 TTS 서버 미리보기입니다.', + 'settings.openchamber.visual.section.colorMode': '색상 모드', + 'settings.openchamber.visual.section.localization': '지역화', + 'settings.openchamber.visual.section.spacingAndLayout': '간격 및 레이아웃', + 'settings.openchamber.visual.section.navigation': '내비게이션', + 'settings.openchamber.visual.section.chatRenderMode': '채팅 렌더링 모드', + 'settings.openchamber.visual.section.chatRenderModeAria': '채팅 렌더링 모드', + 'settings.openchamber.visual.section.messageStreamTransport': '메시지 스트림 전송', + 'settings.openchamber.visual.section.activityDefault': 'Activity 기본값', + 'settings.openchamber.visual.section.activityDefaultAria': 'Activity 기본 모드', + 'settings.openchamber.visual.section.showToolsOpenedByDefault': '도구를 기본으로 펼쳐 표시:', + 'settings.openchamber.visual.section.userMessageRendering': '사용자 메시지 렌더링', + 'settings.openchamber.visual.section.userMessageRenderingAria': '사용자 메시지 렌더링 모드', + 'settings.openchamber.visual.section.mermaidRendering': 'Mermaid 렌더링', + 'settings.openchamber.visual.section.mermaidRenderingAria': 'Mermaid 렌더링 모드', + 'settings.openchamber.visual.section.diffLayout': 'Diff 레이아웃', + 'settings.openchamber.visual.section.diffLayoutAria': 'Diff 레이아웃', + 'settings.openchamber.visual.section.diffViewMode': 'Diff 보기 모드', + 'settings.openchamber.visual.section.diffViewModeAria': 'Diff 보기 모드', + 'settings.openchamber.visual.section.privacy': '개인정보', + 'settings.openchamber.visual.field.lightTheme': '라이트 테마', + 'settings.openchamber.visual.field.darkTheme': '다크 테마', + 'settings.openchamber.visual.field.selectLightThemeAria': '라이트 테마 선택', + 'settings.openchamber.visual.field.selectDarkThemeAria': '다크 테마 선택', + 'settings.openchamber.visual.field.selectThemePlaceholder': '테마 선택', + 'settings.openchamber.visual.field.timeFormat': '시간 형식', + 'settings.openchamber.visual.field.weekStartsOn': '주 시작 요일', + 'settings.openchamber.visual.field.selectTimeFormatAria': '시간 형식 선택', + 'settings.openchamber.visual.field.selectWeekStartAria': '주 시작 요일 선택', + 'settings.openchamber.visual.actions.reloadThemes': '테마 다시 로드', + 'settings.openchamber.visual.actions.reloadingThemes': '테마 다시 로드 중...', + 'settings.openchamber.visual.field.themeImportInfoAria': '테마 가져오기 정보', + 'settings.openchamber.visual.field.themeImportInfoTooltip': '~/.config/openchamber/themes/에서 사용자 정의 테마를 가져옵니다', + 'settings.openchamber.visual.field.installAppName': '설치 앱 이름', + 'settings.openchamber.visual.field.installAppNameHint': 'PWA 설치 과정에서 사용됩니다.', + 'settings.openchamber.visual.field.pwaInstallAppNameAria': 'PWA 설치 앱 이름', + 'settings.openchamber.visual.actions.resetInstallAppNameAria': '설치 앱 이름 초기화', + 'settings.openchamber.visual.field.installOrientation': '설치 방향', + 'settings.openchamber.visual.field.installOrientationHint': '설치된 web app에서 사용됩니다. 변경 후 PWA를 다시 설치하세요.', + 'settings.openchamber.visual.field.pwaInstallOrientationAria': 'PWA 설치 방향', + 'settings.openchamber.visual.field.selectOrientationPlaceholder': '방향 선택', + 'settings.openchamber.visual.actions.resetInstallOrientationAria': '설치 방향 초기화', + 'settings.openchamber.visual.field.interfaceFontSize': '인터페이스 폰트 크기', + 'settings.openchamber.visual.field.interfaceFont': '인터페이스 폰트', + 'settings.openchamber.visual.field.selectInterfaceFontAria': '인터페이스 폰트 선택', + 'settings.openchamber.visual.actions.resetInterfaceFontAria': '인터페이스 폰트 초기화', + 'settings.openchamber.visual.field.fontSizePercentageAria': '폰트 크기 비율', + 'settings.openchamber.visual.actions.resetFontSizeAria': '폰트 크기 초기화', + 'settings.openchamber.visual.field.terminalFontSize': '터미널 폰트 크기', + 'settings.openchamber.visual.field.codeFont': '코드 폰트', + 'settings.openchamber.visual.field.selectCodeFontAria': '코드 폰트 선택', + 'settings.openchamber.visual.actions.resetCodeFontAria': '코드 폰트 초기화', + 'settings.openchamber.visual.actions.resetTerminalFontSizeAria': '터미널 폰트 크기 초기화', + 'settings.openchamber.visual.field.spacingDensity': '간격 밀도', + 'settings.openchamber.visual.actions.resetSpacingAria': '간격 초기화', + 'settings.openchamber.visual.field.inputBarOffset': '입력 바 오프셋', + 'settings.openchamber.visual.field.inputBarOffsetTooltip': '홈 바 같은 OS 수준 화면 가림 요소를 피하도록 입력 바를 올립니다.', + 'settings.openchamber.visual.actions.resetInputBarOffsetAria': '입력 바 오프셋 초기화', + 'settings.openchamber.visual.field.terminalQuickKeysAria': '터미널 빠른 키', + 'settings.openchamber.visual.field.terminalQuickKeys': '터미널 빠른 키', + 'settings.openchamber.visual.field.terminalQuickKeysTooltip': '터미널 보기에서 Esc, Ctrl, 화살표를 표시합니다', + 'settings.openchamber.visual.field.activityDefaultModeAria': 'Activity 기본 모드: {option}', + 'settings.openchamber.visual.field.showExpandedBashToolsAria': '확장된 Bash 도구 표시', + 'settings.openchamber.visual.field.showExpandedEditToolsAria': '확장된 편집 도구 표시', + 'settings.openchamber.visual.field.bash': 'Bash', + 'settings.openchamber.visual.field.editTools': '편집 도구', + 'settings.openchamber.visual.field.userMessageRenderingAria': '사용자 메시지 렌더링: {option}', + 'settings.openchamber.visual.field.mermaidRenderingAria': 'Mermaid 렌더링: {option}', + 'settings.openchamber.visual.field.diffLayoutAria': 'Diff 레이아웃: {option}', + 'settings.openchamber.visual.field.diffViewModeAria': 'Diff 보기 모드: {option}', + 'settings.openchamber.visual.field.showReasoningTracesAria': 'Reasoning trace 표시', + 'settings.openchamber.visual.field.showReasoningTraces': 'Reasoning Trace 표시', + 'settings.openchamber.visual.field.stickyUserHeaderAria': '고정 사용자 헤더', + 'settings.openchamber.visual.field.stickyUserHeader': '고정 사용자 헤더', + 'settings.openchamber.visual.field.showToolFileIconsAria': '도구 파일 아이콘 표시', + 'settings.openchamber.visual.field.showToolFileIcons': '도구 파일 아이콘 표시', + 'settings.openchamber.visual.field.showMobileStatusBarAria': '모바일 상태 바 표시', + 'settings.openchamber.visual.field.showMobileStatusBar': '모바일 상태 바 표시', + 'settings.openchamber.visual.field.showDotfilesAria': 'Dotfiles 표시', + 'settings.openchamber.visual.field.showDotfiles': 'Dotfiles 표시', + 'settings.openchamber.visual.field.queueMessagesByDefaultAria': '기본으로 메시지 대기열 사용', + 'settings.openchamber.visual.field.queueMessagesByDefault': '기본으로 메시지 대기열 사용', + 'settings.openchamber.visual.field.queueMessagesByDefaultTooltip': '활성화하면 Enter가 메시지를 대기열에 넣습니다. 보내려면 {modifier}+Enter를 사용하세요.', + 'settings.openchamber.visual.field.persistDraftMessagesAria': '초안 메시지 유지', + 'settings.openchamber.visual.field.persistDraftMessages': '초안 메시지 유지', + 'settings.openchamber.visual.field.enableSpellcheckInTextInputsAria': '텍스트 입력에서 맞춤법 검사 활성화', + 'settings.openchamber.visual.field.enableSpellcheckInTextInputs': '텍스트 입력에서 맞춤법 검사 활성화', + 'settings.openchamber.visual.field.sendAnonymousUsageReportsAria': '익명 사용량 보고서 보내기', + 'settings.openchamber.visual.field.sendAnonymousUsageReports': '익명 사용량 보고서 보내기', + 'settings.openchamber.visual.field.sendAnonymousUsageReportsHint': '활성 사용 앱 버전을 파악해 개선 우선순위를 정하는 데 도움이 됩니다. 앱 버전, 플랫폼, 런타임만 수집되며 개인 데이터나 코드는 수집되지 않습니다.', + 'settings.openchamber.visual.option.themeMode.system': 'System', + 'settings.openchamber.visual.option.themeMode.light': 'Light', + 'settings.openchamber.visual.option.themeMode.dark': 'Dark', + 'settings.openchamber.visual.option.diffLayout.dynamic.label': '동적', + 'settings.openchamber.visual.option.diffLayout.dynamic.description': '새 항목은 inline, 수정 항목은 side-by-side로 표시합니다.', + 'settings.openchamber.visual.option.diffLayout.inline.label': '항상 inline', + 'settings.openchamber.visual.option.diffLayout.inline.description': '하나의 통합 보기로 표시합니다.', + 'settings.openchamber.visual.option.diffLayout.sideBySide.label': '항상 side-by-side', + 'settings.openchamber.visual.option.diffLayout.sideBySide.description': '원본 파일과 수정된 파일을 비교합니다.', + 'settings.openchamber.visual.option.diffViewMode.single.label': '단일 파일', + 'settings.openchamber.visual.option.diffViewMode.single.description': '한 번에 하나의 파일을 표시합니다.', + 'settings.openchamber.visual.option.diffViewMode.stacked.label': '모든 파일', + 'settings.openchamber.visual.option.diffViewMode.stacked.description': '변경된 모든 파일을 함께 쌓아 표시합니다.', + 'settings.openchamber.visual.option.mermaidRendering.svg.label': 'SVG', + 'settings.openchamber.visual.option.mermaidRendering.svg.description': '다이어그램을 확장 가능한 그래픽으로 렌더링합니다.', + 'settings.openchamber.visual.option.mermaidRendering.ascii.label': 'ASCII', + 'settings.openchamber.visual.option.mermaidRendering.ascii.description': '다이어그램을 텍스트 블록으로 렌더링합니다.', + 'settings.openchamber.visual.option.pwaOrientation.system.label': '시스템 따르기', + 'settings.openchamber.visual.option.pwaOrientation.system.description': '기기 회전 설정을 따릅니다.', + 'settings.openchamber.visual.option.pwaOrientation.portrait.label': '세로 고정', + 'settings.openchamber.visual.option.pwaOrientation.portrait.description': '앱을 세로로 고정해 설치합니다.', + 'settings.openchamber.visual.option.pwaOrientation.landscape.label': '가로 고정', + 'settings.openchamber.visual.option.pwaOrientation.landscape.description': '앱을 가로로 고정해 설치합니다.', + 'settings.openchamber.visual.option.userMessageRendering.markdown.label': 'Markdown', + 'settings.openchamber.visual.option.userMessageRendering.markdown.description': '사용자 텍스트를 Markdown 서식으로 렌더링합니다.', + 'settings.openchamber.visual.option.userMessageRendering.plain.label': 'Plain text', + 'settings.openchamber.visual.option.userMessageRendering.plain.description': '공백과 링크를 보존해 사용자 텍스트를 렌더링합니다.', + 'settings.openchamber.visual.option.chatRenderMode.sorted.label': '정렬됨', + 'settings.openchamber.visual.option.chatRenderMode.sorted.description': '완료된 assistant 메시지를 live streaming 없이 렌더링합니다.', + 'settings.openchamber.visual.option.chatRenderMode.live.label': 'Live', + 'settings.openchamber.visual.option.chatRenderMode.live.description': '도착하는 대로 assistant 텍스트와 도구를 스트리밍합니다.', + 'settings.openchamber.visual.option.messageTransport.auto.label': '자동', + 'settings.openchamber.visual.option.messageTransport.auto.description': 'WebSocket을 우선 사용하고 필요하면 SSE로 fallback합니다.', + 'settings.openchamber.visual.option.messageTransport.ws.label': 'WebSocket', + 'settings.openchamber.visual.option.messageTransport.ws.description': '메시지 스트리밍에 WebSocket을 사용합니다.', + 'settings.openchamber.visual.option.messageTransport.sse.label': 'SSE', + 'settings.openchamber.visual.option.messageTransport.sse.description': '메시지 스트리밍에 Server-Sent Events를 사용합니다.', + 'settings.openchamber.visual.option.activityRenderMode.collapsed.label': '접힘', + 'settings.openchamber.visual.option.activityRenderMode.collapsed.description': 'Activity를 기본으로 접어 둡니다.', + 'settings.openchamber.visual.option.activityRenderMode.summary.label': '펼침', + 'settings.openchamber.visual.option.activityRenderMode.summary.description': 'Activity를 기본으로 펼칩니다.', + 'settings.openchamber.visual.option.timeFormat.auto.label': '자동', + 'settings.openchamber.visual.option.timeFormat.auto.description': '시스템 locale 기본 설정을 사용합니다.', + 'settings.openchamber.visual.option.timeFormat.24h.label': '24시간', + 'settings.openchamber.visual.option.timeFormat.24h.description': '시간을 14:15로 표시합니다.', + 'settings.openchamber.visual.option.timeFormat.12h.label': '12시간', + 'settings.openchamber.visual.option.timeFormat.12h.description': '시간을 02:15 PM으로 표시합니다.', + 'settings.openchamber.visual.option.weekStart.auto.label': '자동', + 'settings.openchamber.visual.option.weekStart.auto.description': 'locale의 주 시작 요일을 사용합니다.', + 'settings.openchamber.visual.option.weekStart.monday.label': '월요일', + 'settings.openchamber.visual.option.weekStart.sunday.label': '일요일', + 'settings.magicPrompts.page.loading.aria': '로딩 중', + 'settings.magicPrompts.page.loading.text': 'Magic Prompts 로딩 중...', + 'settings.magicPrompts.page.block.visiblePrompt': '표시 프롬프트', + 'settings.magicPrompts.page.block.instructions': '지침', + 'settings.magicPrompts.page.group.gitCommitGenerate.title': 'Commit 생성', + 'settings.magicPrompts.page.group.gitCommitGenerate.description': 'commit 메시지 생성에 사용되는 프롬프트: 표시 사용자 메시지 + 숨겨진 지침입니다.', + 'settings.magicPrompts.page.group.gitPrGenerate.title': 'PR 생성', + 'settings.magicPrompts.page.group.gitPrGenerate.description': 'PR 제목/본문 생성에 사용되는 프롬프트: 표시 사용자 메시지 + 숨겨진 지침입니다.', + 'settings.magicPrompts.page.group.githubPrReview.title': 'PR 리뷰', + 'settings.magicPrompts.page.group.githubPrReview.description': 'PR 리뷰 flow에 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침 payload.', + 'settings.magicPrompts.page.group.githubIssueReview.title': 'Issue 리뷰', + 'settings.magicPrompts.page.group.githubIssueReview.description': 'issue 리뷰 flow에 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침 payload.', + 'settings.magicPrompts.page.group.githubPrFailedChecksReview.title': 'PR 실패 Checks 리뷰', + 'settings.magicPrompts.page.group.githubPrFailedChecksReview.description': 'PR 실패 checks 분석에 사용되는 프롬프트입니다.', + 'settings.magicPrompts.page.group.githubPrCommentsReview.title': 'PR 댓글 리뷰', + 'settings.magicPrompts.page.group.githubPrCommentsReview.description': 'PR 댓글 분석에 사용되는 프롬프트입니다.', + 'settings.magicPrompts.page.group.githubSinglePrCommentReview.title': '단일 PR 댓글 리뷰', + 'settings.magicPrompts.page.group.githubSinglePrCommentReview.description': '단일 PR 댓글 분석에 사용되는 프롬프트입니다.', + 'settings.magicPrompts.page.group.gitConflictResolve.title': 'Merge/Rebase 충돌 해결', + 'settings.magicPrompts.page.group.gitConflictResolve.description': 'AI로 merge/rebase 충돌을 해결할 때 사용하는 프롬프트입니다.', + 'settings.magicPrompts.page.group.gitCherrypickConflictResolve.title': 'Cherry-pick 충돌 해결', + 'settings.magicPrompts.page.group.gitCherrypickConflictResolve.description': 'integrate flow에서 cherry-pick 충돌을 해결할 때 사용하는 프롬프트입니다.', + 'settings.magicPrompts.page.group.planImprove.title': '계획 개선', + 'settings.magicPrompts.page.group.planImprove.description': '저장된 계획을 개선 flow로 보낼 때 사용하는 숨겨진 프롬프트입니다.', + 'settings.magicPrompts.page.group.planTodo.title': 'Todo 계획', + 'settings.magicPrompts.page.group.planTodo.description': 'todo를 새 계획 세션으로 보낼 때 사용하는 숨겨진 프롬프트입니다.', + 'settings.magicPrompts.page.group.planImplement.title': '계획 구현', + 'settings.magicPrompts.page.group.planImplement.description': '저장된 계획을 구현 flow로 보낼 때 사용하는 숨겨진 프롬프트입니다.', + 'settings.magicPrompts.page.group.sessionSummary.title': '세션 요약', + 'settings.magicPrompts.page.group.sessionSummary.description': '/summary slash command에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 비파괴적이며 세션 기록을 압축하지 않습니다.', + 'settings.magicPrompts.page.group.sessionWorkspaceReview.title': 'Workspace 리뷰', + 'settings.magicPrompts.page.group.sessionWorkspaceReview.description': '/workspace-review slash command에서 사용하는 프롬프트입니다: 표시 사용자 메시지 + 숨겨진 지침. 현재 workspace 변경 사항에서 중요한 문제만 리뷰합니다.', + 'settings.magicPrompts.page.actions.resetting': '초기화 중...', + 'settings.magicPrompts.page.actions.resetAllOverrides': '모든 오버라이드 초기화', + 'settings.magicPrompts.page.actions.resetToDefault': '기본값으로 초기화', + 'settings.magicPrompts.page.actions.save': '저장', + 'settings.magicPrompts.page.placeholdersLabel': '플레이스홀더:', + 'settings.magicPrompts.page.validation.visiblePromptRequired': '표시 프롬프트는 비워 둘 수 없습니다.', + 'settings.magicPrompts.page.status.unsavedChanges': '저장되지 않은 변경사항', + 'settings.magicPrompts.page.status.usingSavedOverride': '저장된 오버라이드 사용 중', + 'settings.magicPrompts.page.status.usingBuiltinDefault': '내장 기본값 사용 중', + 'settings.magicPrompts.page.toast.loadFailed': 'Magic Prompts를 로드하지 못했습니다', + 'settings.magicPrompts.page.toast.visiblePromptRequired': '표시 프롬프트는 비워 둘 수 없습니다', + 'settings.magicPrompts.page.toast.saved': 'Magic prompt가 저장되었습니다', + 'settings.magicPrompts.page.toast.saveFailed': 'magic prompt를 저장하지 못했습니다', + 'settings.magicPrompts.page.toast.resetSuccess': '프롬프트가 기본값으로 초기화되었습니다', + 'settings.magicPrompts.page.toast.resetFailed': '프롬프트를 초기화하지 못했습니다', + 'settings.magicPrompts.page.toast.resetAllSuccess': '모든 프롬프트 오버라이드가 초기화되었습니다', + 'settings.magicPrompts.page.toast.resetAllFailed': '모든 프롬프트를 초기화하지 못했습니다', +} as const; diff --git a/packages/ui/src/lib/i18n/messages/ko.ts b/packages/ui/src/lib/i18n/messages/ko.ts new file mode 100644 index 00000000..959e3be0 --- /dev/null +++ b/packages/ui/src/lib/i18n/messages/ko.ts @@ -0,0 +1,2069 @@ +import type { I18nKey } from './en'; +import { settingsDict } from './ko.settings'; + +export const dict: Record = { + ...settingsDict, + 'common.language.english': '영어', + 'common.language.simplifiedChinese': '중국어(간체)', + 'common.language.ukrainian': '우크라이나어', + 'common.language.spanish': '스페인어', + 'common.language.brazilianPortuguese': '브라질 포르투갈어', + 'common.language.korean': '한국어', + 'common.revealPath.finder': 'Finder에서 보기', + 'common.revealPath.fileExplorer': 'File Explorer에서 열기', + 'common.revealPath.fileManager': '파일 관리자에서 열기', + 'layout.mainTab.chat': '채팅', + 'layout.mainTab.plan': '플랜', + 'layout.mainTab.diff': 'diff', + 'layout.mainTab.files': '파일', + 'layout.mainTab.terminal': '터미널', + 'layout.rightSidebar.git': 'Git', + 'layout.rightSidebar.files': '파일', + 'layout.rightSidebar.context': '컨텍스트', + 'layout.services.instance': '인스턴스', + 'layout.services.usage': '사용량', + 'sessions.sidebar.header.actions.closeSessions': '세션 닫기', + 'sessions.sidebar.header.actions.addProject': '프로젝트 추가', + 'sessions.sidebar.header.actions.newSession': '새 세션', + 'sessions.sidebar.header.actions.newMultiRun': '새 멀티런', + 'sessions.sidebar.header.actions.scheduledTasks': '예약 작업', + 'sessions.scheduledTasks.dialog.title': '예약 작업', + 'sessions.scheduledTasks.dialog.description': '새 세션을 만들고 설정된 프롬프트를 보내는 서버 작업입니다.', + 'sessions.scheduledTasks.dialog.project.label': '프로젝트', + 'sessions.scheduledTasks.dialog.project.placeholder': '프로젝트 선택', + 'sessions.scheduledTasks.dialog.project.empty': '프로젝트 없음', + 'sessions.scheduledTasks.dialog.actions.newTask': '새 작업', + 'sessions.scheduledTasks.dialog.actions.runNow': '지금 실행', + 'sessions.scheduledTasks.dialog.actions.edit': '편집', + 'sessions.scheduledTasks.dialog.actions.editAria': '편집 {taskName}', + 'sessions.scheduledTasks.dialog.actions.deleteAria': '{taskName} 삭제', + 'sessions.scheduledTasks.dialog.loading': '작업 로드 중…', + 'sessions.scheduledTasks.dialog.empty.noTasks': '아직 예약 작업 없음', + 'sessions.scheduledTasks.dialog.empty.selectProject': '예약 작업을 관리할 프로젝트를 선택하세요.', + 'sessions.scheduledTasks.dialog.error.chooseProjectFirst': '먼저 프로젝트를 선택하세요', + 'sessions.scheduledTasks.dialog.toast.loadFailed': '예약 작업 로드 실패', + 'sessions.scheduledTasks.dialog.toast.saved': '예약 작업 저장됨', + 'sessions.scheduledTasks.dialog.toast.updateFailed': '작업 업데이트 실패', + 'sessions.scheduledTasks.dialog.toast.deleted': '예약 작업 삭제됨', + 'sessions.scheduledTasks.dialog.toast.deleteFailed': '작업 삭제 실패', + 'sessions.scheduledTasks.dialog.toast.started': '작업 시작됨', + 'sessions.scheduledTasks.dialog.toast.runFailed': '작업 실행 실패', + 'sessions.scheduledTasks.dialog.confirm.deleteTask': '예약 작업 "{taskName}" 삭제?', + 'sessions.scheduledTasks.dialog.schedule.daily': '매일 {time}', + 'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': '매일 {time} ({timezone})', + 'sessions.scheduledTasks.dialog.schedule.weekly': '매주 {days} {time}', + 'sessions.scheduledTasks.dialog.schedule.weeklyWithTimezone': '매주 {days} {time} ({timezone})', + 'sessions.scheduledTasks.dialog.schedule.once': '한 번 {date} {time}', + 'sessions.scheduledTasks.dialog.schedule.onceWithTimezone': '한 번 {date} {time} ({timezone})', + 'sessions.scheduledTasks.dialog.schedule.cron': 'Cron: {cron}', + 'sessions.scheduledTasks.dialog.schedule.cronWithTimezone': 'Cron: {cron} ({timezone})', + 'sessions.scheduledTasks.dialog.schedule.unknownDate': '알 수 없는 날짜', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.sun': '일', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.mon': '월', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.tue': '화', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.wed': '수', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.thu': '목', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.fri': '금', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.sat': '토', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.unknown': '?', + 'sessions.scheduledTasks.dialog.relativeTime.inLessThanOneMinute': '1분 이내', + 'sessions.scheduledTasks.dialog.relativeTime.justNow': '방금 전', + 'sessions.scheduledTasks.dialog.relativeTime.inMinutes': '{count}분 후', + 'sessions.scheduledTasks.dialog.relativeTime.minutesAgo': '{count}분 전', + 'sessions.scheduledTasks.dialog.relativeTime.inDuration': '{duration} 후', + 'sessions.scheduledTasks.dialog.relativeTime.durationAgo': '{duration} 전', + 'sessions.scheduledTasks.dialog.status.success': '성공', + 'sessions.scheduledTasks.dialog.status.error': '오류', + 'sessions.scheduledTasks.dialog.status.running': '실행 중', + 'sessions.scheduledTasks.dialog.status.idle': '대기 중', + 'sessions.scheduledTasks.dialog.nextRun.label': '다음', + 'sessions.scheduledTasks.dialog.lastRun.label': '마지막 실행', + 'sessions.scheduledTasks.dialog.lastRun.runningNow': '지금 실행 중', + 'sessions.scheduledTasks.dialog.lastRun.never': '없음', + 'sessions.scheduledTasks.dialog.taskToggle.enableAria': '{taskName} 활성화', + 'sessions.scheduledTasks.dialog.taskToggle.pauseAria': '{taskName} 일시 중지', + 'sessions.scheduledTasks.dialog.taskToggle.enabled': '활성화됨', + 'sessions.scheduledTasks.dialog.taskToggle.paused': '일시 중지됨', + 'sessions.scheduledTasks.editor.title.edit': '예약 작업 편집', + 'sessions.scheduledTasks.editor.title.new': '새 예약 작업', + 'sessions.scheduledTasks.editor.description': '새 세션을 만들고 프롬프트를 보내는 서버 작업을 설정합니다.', + 'sessions.scheduledTasks.editor.taskName.label': '작업 이름', + 'sessions.scheduledTasks.editor.taskName.placeholder': '매일 sync', + 'sessions.scheduledTasks.editor.scheduleType.label': '예약 유형', + 'sessions.scheduledTasks.editor.scheduleType.daily': '매일', + 'sessions.scheduledTasks.editor.scheduleType.weekly': '매주', + 'sessions.scheduledTasks.editor.scheduleType.once': '한 번', + 'sessions.scheduledTasks.editor.date.label': '날짜', + 'sessions.scheduledTasks.editor.date.placeholder': '날짜 선택', + 'sessions.scheduledTasks.editor.date.previousMonth': '이전 달', + 'sessions.scheduledTasks.editor.date.nextMonth': '다음 달', + 'sessions.scheduledTasks.editor.date.jumpToToday': '오늘로 이동', + 'sessions.scheduledTasks.editor.date.today': '오늘', + 'sessions.scheduledTasks.editor.time.label': '시간', + 'sessions.scheduledTasks.editor.time.hourAria': '시간', + 'sessions.scheduledTasks.editor.time.minuteAria': '분', + 'sessions.scheduledTasks.editor.time.periodAria': '기간', + 'sessions.scheduledTasks.editor.time.period.am': 'AM', + 'sessions.scheduledTasks.editor.time.period.pm': 'PM', + 'sessions.scheduledTasks.editor.times.label': '시간', + 'sessions.scheduledTasks.editor.times.add': '시간 추가', + 'sessions.scheduledTasks.editor.times.removeAria': '시간 제거', + 'sessions.scheduledTasks.editor.timezone.label': '시간대', + 'sessions.scheduledTasks.editor.weekdays.label': '요일', + 'sessions.scheduledTasks.editor.model.label': '모델', + 'sessions.scheduledTasks.editor.thinkingLevel.label': '추론 수준', + 'sessions.scheduledTasks.editor.thinkingLevel.default': '기본값', + 'sessions.scheduledTasks.editor.agent.label': '에이전트', + 'sessions.scheduledTasks.editor.prompt.label': '프롬프트', + 'sessions.scheduledTasks.editor.prompt.placeholder': '열린 작업을 요약하고 다음 액션을 제안하세요', + 'sessions.scheduledTasks.editor.enabled.aria': '작업 활성화', + 'sessions.scheduledTasks.editor.enabled.label': '활성화됨', + 'sessions.scheduledTasks.editor.actions.closeAria': '닫기', + 'sessions.scheduledTasks.editor.actions.cancel': '취소', + 'sessions.scheduledTasks.editor.actions.save': '저장', + 'sessions.scheduledTasks.editor.actions.saving': '저장 중…', + 'sessions.scheduledTasks.editor.toast.saveFailed': '작업 저장 실패', + 'sessions.scheduledTasks.editor.validation.taskNameRequired': '작업 이름 필수', + 'sessions.scheduledTasks.editor.validation.promptRequired': '프롬프트 필수', + 'sessions.scheduledTasks.editor.validation.modelRequired': '모델 필수', + 'sessions.scheduledTasks.editor.validation.dateFormat': '날짜는 YYYY-MM-DD 형식이어야 합니다', + 'sessions.scheduledTasks.editor.validation.timeFormat': '시간은 HH:mm 형식이어야 합니다', + 'sessions.scheduledTasks.editor.validation.atLeastOneTime': '유효한 시간을 하나 이상 추가하세요', + 'sessions.scheduledTasks.editor.validation.atLeastOneWeekday': '요일을 하나 이상 선택하세요', + 'sessions.scheduledTasks.editor.validation.timezoneRequired': '시간대 필수', + 'multirun.launcher.title': '새 멀티런', + 'multirun.launcher.actions.closeEsc': '닫기(Esc)', + 'multirun.launcher.actions.cancel': '취소', + 'multirun.launcher.actions.creating': '생성 중…', + 'multirun.launcher.actions.startWithModelCount': '시작({count}개 모델)', + 'multirun.launcher.project.label': '프로젝트', + 'multirun.launcher.project.placeholder': '프로젝트 선택', + 'multirun.launcher.project.empty': '먼저 프로젝트를 추가하세요.', + 'multirun.launcher.groupName.label': '그룹 이름', + 'multirun.launcher.groupName.info': '워크트리 디렉터리와 브랜치 이름에 사용됩니다', + 'multirun.launcher.groupName.placeholder': 'feature-auth, bugfix-login', + 'multirun.launcher.baseBranch.label': 'base 브랜치', + 'multirun.launcher.baseBranch.info': '모델마다 이 base에서 새 브랜치를 만듭니다', + 'multirun.launcher.agent.label': '에이전트', + 'multirun.launcher.agent.info': '모든 실행에 사용할 에이전트입니다. 설정된 기본 에이전트를 사용합니다.', + 'multirun.launcher.setupCommands.label': '셋업 명령', + 'multirun.launcher.setupCommands.loading': '로드 중…', + 'multirun.launcher.setupCommands.commandPlaceholder': 'bun install', + 'multirun.launcher.setupCommands.removeCommandAria': '명령 제거', + 'multirun.launcher.setupCommands.addCommand': '명령 추가', + 'multirun.launcher.prompt.label': '프롬프트', + 'multirun.launcher.prompt.placeholder': '모든 모델에 보낼 프롬프트 입력…', + 'multirun.launcher.attachments.attach': '첨부', + 'multirun.launcher.attachments.tooltip': '같은 파일을 모든 실행에 보냅니다', + 'multirun.launcher.models.label': '모델', + 'multirun.launcher.models.info': '모델을 2~{max}개 선택하세요. 같은 모델을 여러 번 추가할 수 있습니다.', + 'multirun.launcher.toast.fileTooLarge': '파일 "{fileName}"이 너무 큽니다(최대 10MB)', + 'multirun.launcher.toast.attachFailed': '"{fileName}" 첨부 실패', + 'multirun.launcher.toast.attachedSingle': '파일 {count}개 첨부됨', + 'multirun.launcher.toast.attachedPlural': '파일 {count}개 첨부됨', + 'multirun.modelMultiSelect.actions.addModel': '모델 추가', + 'multirun.modelMultiSelect.search.placeholder': '모델 검색', + 'multirun.modelMultiSelect.search.noResults': '모델 없음', + 'multirun.modelMultiSelect.sections.favorites': '즐겨찾기', + 'multirun.modelMultiSelect.sections.recent': '최근', + 'multirun.modelMultiSelect.variant.placeholder': '추론', + 'multirun.modelMultiSelect.variant.default': '기본값', + 'multirun.modelMultiSelect.keyboard.hint': '↑↓ 이동 • Enter 선택 • Esc 닫기', + 'multirun.modelMultiSelect.validation.minOnly': '모델을 최소 {min}개 선택하세요.', + 'multirun.modelMultiSelect.validation.minToMax': '모델을 {min}~{max}개 선택하세요.', + 'multirun.agentSelector.placeholder': '에이전트 선택', + 'sessions.sidebar.header.actions.searchSessions': '세션 검색', + 'sessions.sidebar.header.actions.exitSelection': '선택 종료', + 'sessions.sidebar.header.actions.selectSessions': '세션 선택', + 'sessions.sidebar.header.actions.sessionDisplayMode': '세션 표시 모드', + 'sessions.sidebar.header.displayMode.label': '표시 모드', + 'sessions.sidebar.header.displayMode.default': '기본값', + 'sessions.sidebar.header.displayMode.minimal': '최소', + 'sessions.sidebar.header.displayMode.collapseAll': '모두 접기', + 'sessions.sidebar.header.displayMode.expandAll': '모두 펼치기', + 'sessions.sidebar.header.search.matchCountSingle': '{count}개 일치', + 'sessions.sidebar.header.search.matchCountPlural': '{count}개 일치', + 'sessions.sidebar.header.search.escapeHint': 'Esc로 지우기', + 'sessions.sidebar.header.search.placeholder': '세션 검색…', + 'sessions.sidebar.header.search.clear': '검색 지우기', + 'sessions.sidebar.footer.actions.settings': '설정', + 'sessions.sidebar.footer.actions.shortcuts': '단축키', + 'sessions.sidebar.footer.actions.aboutOpenChamber': 'OpenChamber 정보', + 'sessions.sidebar.footer.actions.update': '업데이트', + 'sessions.sidebar.empty.noSessions.title': '아직 세션 없음', + 'sessions.sidebar.empty.noSessions.description': '첫 세션을 만들고 코딩을 시작하세요.', + 'sessions.sidebar.empty.noMatches.title': '일치하는 세션 없음', + 'sessions.sidebar.empty.noMatches.description': '다른 제목, 브랜치, 폴더 또는 경로로 검색해 보세요.', + 'sessions.sidebar.activity.recentTitle': '최근', + 'sessions.sidebar.updateCheck.errorTitle': '업데이트 확인 실패', + 'sessions.sidebar.updateCheck.latestVersion': '최신 버전을 사용 중입니다', + 'sessions.sidebar.directory.errorAddProjectTitle': '프로젝트 추가 실패', + 'sessions.sidebar.directory.errorAddProjectDescription': '유효한 디렉터리를 선택하세요.', + 'sessions.sidebar.directory.errorSelectDirectoryTitle': '디렉터리 선택 실패', + 'sessions.sidebar.folder.newFolderName': '새 폴더', + 'sessions.sidebar.bulkActions.delete': '삭제', + 'sessions.sidebar.bulkActions.archive': '보관', + 'sessions.sidebar.bulkActions.selectedCount': '{count}개 선택됨', + 'sessions.sidebar.bulkActions.moveToFolder': '폴더로 이동', + 'sessions.sidebar.bulkActions.deletedSingle': '세션 {count}개 삭제됨', + 'sessions.sidebar.bulkActions.deletedPlural': '세션 {count}개 삭제됨', + 'sessions.sidebar.bulkActions.failedDeleteSingle': '세션 {count}개 삭제 실패', + 'sessions.sidebar.bulkActions.failedDeletePlural': '세션 {count}개 삭제 실패', + 'sessions.sidebar.bulkActions.archivedSingle': '세션 {count}개 보관됨', + 'sessions.sidebar.bulkActions.archivedPlural': '세션 {count}개 보관됨', + 'sessions.sidebar.bulkActions.failedArchiveSingle': '세션 {count}개 보관 실패', + 'sessions.sidebar.bulkActions.failedArchivePlural': '세션 {count}개 보관 실패', + 'sessions.sidebar.folders.none': '아직 폴더 없음', + 'sessions.sidebar.folders.newFolderEllipsis': '새 폴더…', + 'sessions.sidebar.folders.removeFromFolder': '폴더에서 제거', + 'sessions.sidebar.folders.moveToFolder': '폴더로 이동', + 'sessions.sidebar.project.actions.newWorktree': '새 워크트리', + 'sessions.sidebar.project.actions.newWorktreeEllipsis': '새 워크트리…', + 'sessions.sidebar.project.actions.projectMenu': '프로젝트 메뉴', + 'sessions.sidebar.project.actions.newSession': '새 세션', + 'sessions.sidebar.project.actions.closeProject': '프로젝트 닫기', + 'sessions.sidebar.project.actions.newDraftSession': '새 드래프트 세션', + 'sessions.sidebar.session.menu.rename': '이름 변경', + 'sessions.sidebar.session.menu.unpin': '세션 고정 해제', + 'sessions.sidebar.session.menu.pin': '세션 고정', + 'sessions.sidebar.session.menu.share': '공유', + 'sessions.sidebar.session.menu.copied': '복사됨', + 'sessions.sidebar.session.menu.copyLink': '링크 복사', + 'sessions.sidebar.session.menu.unshare': '공유 해제', + 'sessions.sidebar.session.menu.exportMarkdown': 'Markdown 내보내기', + 'sessions.sidebar.session.menu.openInSidePanel': '사이드 패널에서 열기', + 'sessions.sidebar.session.menu.betaBadge': 'beta', + 'sessions.sidebar.session.menu.label': '세션 메뉴', + 'sessions.sidebar.session.untitled': '제목 없는 세션', + 'sessions.sidebar.session.export.nothingToExport': '내보낼 내용 없음', + 'sessions.sidebar.session.export.success': '세션 내보냄', + 'sessions.sidebar.session.export.failedRevealPath': '경로 표시 실패', + 'sessions.sidebar.session.export.untitledSubagent': '제목 없는 서브 에이전트', + 'sessions.sidebar.session.export.skippedSubtaskSingle': '세션을 내보냈지만 로드할 수 없는 서브 에이전트 작업 {count}개는 건너뛰었습니다.', + 'sessions.sidebar.session.export.skippedSubtaskMany': '세션을 내보냈지만 로드할 수 없는 서브 에이전트 작업 {count}개는 건너뛰었습니다.', + 'sessions.sidebar.session.export.dialog.title': 'Markdown 내보내기', + 'sessions.sidebar.session.export.dialog.descriptionSingle': '이 세션에는 서브 에이전트 작업 {count}개가 있습니다. 내보내기에 포함할까요?', + 'sessions.sidebar.session.export.dialog.descriptionMany': '이 세션에는 서브 에이전트 작업 {count}개가 있습니다. 내보내기에 포함할까요?', + 'sessions.sidebar.session.export.dialog.includeSubtasks': '서브 에이전트 작업 포함', + 'sessions.sidebar.session.export.dialog.confirm': '내보내기', + 'sessions.sidebar.session.status.active': '활성 세션', + 'sessions.sidebar.session.status.unread': '읽지 않은 업데이트', + 'sessions.sidebar.session.status.pinned': '고정된 세션', + 'sessions.sidebar.session.status.permissionRequired': '권한 필요', + 'sessions.sidebar.session.subsessions.collapse': '하위 세션 접기', + 'sessions.sidebar.session.subsessions.expand': '하위 세션 펼치기', + 'sessions.sidebar.dialogs.deleteSession.title': '세션 삭제?', + 'sessions.sidebar.dialogs.archiveSession.title': '세션 보관?', + 'sessions.sidebar.dialogs.deleteSession.withOneSubtask': '"{sessionTitle}" 및 하위 작업 {count}개가 영구 삭제됩니다.', + 'sessions.sidebar.dialogs.deleteSession.withManySubtasks': '"{sessionTitle}" 및 하위 작업 {count}개가 영구 삭제됩니다.', + 'sessions.sidebar.dialogs.archiveSession.withOneSubtask': '"{sessionTitle}" 및 하위 작업 {count}개가 보관됩니다.', + 'sessions.sidebar.dialogs.archiveSession.withManySubtasks': '"{sessionTitle}" 및 하위 작업 {count}개가 보관됩니다.', + 'sessions.sidebar.dialogs.deleteSession.single': '"{sessionTitle}"이(가) 영구 삭제됩니다.', + 'sessions.sidebar.dialogs.archiveSession.single': '"{sessionTitle}"이(가) 보관됩니다.', + 'sessions.sidebar.dialogs.neverAsk': '다시 묻지 않기', + 'sessions.sidebar.dialogs.cancel': '취소', + 'sessions.sidebar.dialogs.deleteSession.titleAction': '세션 삭제', + 'sessions.sidebar.dialogs.deleteSessions.titleAction': '세션 삭제', + 'sessions.sidebar.dialogs.deleteSessions.title': '세션 삭제?', + 'sessions.sidebar.dialogs.archiveSessions.title': '세션 보관?', + 'sessions.sidebar.dialogs.deleteSessions.singleDescription': '세션 {count}개가 영구 삭제됩니다.', + 'sessions.sidebar.dialogs.deleteSessions.pluralDescription': '세션 {count}개가 영구 삭제됩니다.', + 'sessions.sidebar.dialogs.archiveSessions.singleDescription': '세션 {count}개가 보관됩니다.', + 'sessions.sidebar.dialogs.archiveSessions.pluralDescription': '세션 {count}개가 보관됩니다.', + 'sessions.sidebar.dialogs.deleteFolder.title': '폴더 삭제?', + 'sessions.sidebar.dialogs.deleteFolder.withOneSubfolder': '"{folderName}" 및 하위 폴더 {count}개가 삭제됩니다. 안의 세션은 삭제되지 않습니다.', + 'sessions.sidebar.dialogs.deleteFolder.withManySubfolders': '"{folderName}" 및 하위 폴더 {count}개가 삭제됩니다. 안의 세션은 삭제되지 않습니다.', + 'sessions.sidebar.dialogs.deleteFolder.withContentsNoSubfolders': '"{folderName}" 폴더가 삭제됩니다. 안의 세션은 삭제되지 않습니다.', + 'sessions.sidebar.dialogs.deleteFolder.single': '"{folderName}" 폴더가 영구 삭제됩니다.', + 'sessions.sidebar.dialogs.deleteResult.singleFailedToDelete': '세션 {count}개를 삭제할 수 없습니다.', + 'sessions.sidebar.dialogs.deleteResult.manyFailedToDelete': '세션 {count}개를 삭제할 수 없습니다.', + 'sessions.sidebar.dialogs.deleteResult.singleFailedToArchive': '세션 {count}개를 보관할 수 없습니다.', + 'sessions.sidebar.dialogs.deleteResult.manyFailedToArchive': '세션 {count}개를 보관할 수 없습니다.', + 'sessions.sidebar.dialogs.deleteResult.removedFromDate': '모든 세션에서 제거됨 ({dateLabel}).', + 'sessions.sidebar.dialogs.deleteResult.tryAgain': '잠시 후 다시 시도하세요.', + 'sessions.sidebar.dialogs.worktreeDelete.descriptionNoLinked': '선택한 워크트리를 제거합니다.', + 'sessions.sidebar.dialogs.worktreeDelete.descriptionOneLinked': '선택한 워크트리를 제거하고 연결된 세션 {count}개를 보관합니다.', + 'sessions.sidebar.dialogs.worktreeDelete.descriptionManyLinked': '선택한 워크트리를 제거하고 연결된 세션 {count}개를 보관합니다.', + 'sessions.sidebar.dialogs.sessionDelete.descriptionOne': 'This 작업 permanently 제거 1 세션.', + 'sessions.sidebar.dialogs.sessionDelete.descriptionOneWithDate': 'This 작업 permanently 제거 1 세션에서 {dateLabel}.', + 'sessions.sidebar.dialogs.sessionDelete.descriptionMany': 'This 작업 permanently 제거 {count} 세션.', + 'sessions.sidebar.dialogs.sessionDelete.descriptionManyWithDate': 'This 작업 permanently 제거 {count} 세션에서 {dateLabel}.', + 'sessions.sidebar.dialogs.sessionList.more': '+{count}개 더 보기', + 'sessions.sidebar.session.share.successTitle': '세션 공유됨', + 'sessions.sidebar.session.share.successDescription': '메뉴에서 링크를 복사할 수 있습니다.', + 'sessions.sidebar.session.share.error': '세션을 공유할 수 없음', + 'sessions.sidebar.session.share.copyUrlError': 'URL 복사 실패', + 'sessions.sidebar.session.unshare.success': '세션 공유 해제됨', + 'sessions.sidebar.session.unshare.error': '세션 공유 해제 실패', + 'sessions.sidebar.session.delete.success': '세션 삭제됨', + 'sessions.sidebar.session.delete.error': '세션 삭제 실패', + 'sessions.sidebar.session.archive.success': '세션 보관됨', + 'sessions.sidebar.session.archive.error': '세션 보관 실패', + 'sessions.sidebar.group.pr.checksPassed': '{success}/{total} checks passed', + 'sessions.sidebar.group.pr.failingCount': '{count} failing', + 'sessions.sidebar.group.pr.pendingCount': '{count} 대기 중', + 'sessions.sidebar.group.pr.conflictsOrBlocked': 'Conflicts 또는 blocked', + 'sessions.sidebar.group.pr.mergeable': 'mergeable', + 'sessions.sidebar.group.pr.mergeState': 'merge state: {state}', + 'sessions.sidebar.group.pr.status.merged': 'merged', + 'sessions.sidebar.group.pr.status.readyToMerge': '준비됨로 merge', + 'sessions.sidebar.group.pr.status.open': 'PR 열기', + 'sessions.sidebar.group.pr.status.mergeConflicts': 'merge conflicts', + 'sessions.sidebar.group.pr.status.mergeBlocked': 'merge blocked', + 'sessions.sidebar.group.pr.status.draft': 'Draft PR', + 'sessions.sidebar.group.pr.status.closed': '닫기d', + 'sessions.sidebar.group.empty.noArchivedSessions': '보관d 세션 yet. 없음', + 'sessions.sidebar.group.empty.noSessionsInWorkspace': '아직 이 워크스페이스에 세션 없음', + 'sessions.sidebar.group.showMoreSingle': '표시 {count} more 세션', + 'sessions.sidebar.group.showMorePlural': '표시 {count} more 세션', + 'sessions.sidebar.group.showFewer': '표시 fewer 세션', + 'sessions.sidebar.group.expandAria': '펼치기 {label}', + 'sessions.sidebar.group.collapseAria': '접기 {label}', + 'sessions.sidebar.group.actions.deleteArchivedInGroupAria': '보관d 세션 in {label} 삭제', + 'sessions.sidebar.group.actions.deleteArchivedSessions': '보관d 세션 삭제', + 'sessions.sidebar.group.actions.deleteGroupAria': '{label} 삭제', + 'sessions.sidebar.group.actions.deleteWorktree': '워크트리 삭제', + 'sessions.sidebar.group.actions.newDraftInGroupAria': '새 draft 세션 in {label}', + 'sessions.sidebar.grouping.projectRoot': '프로젝트 root', + 'sessions.sidebar.grouping.projectRootWithBranch': '프로젝트 root: {branch}', + 'sessions.sidebar.grouping.archived': '보관됨', + 'sessions.sidebar.grouping.archivedDescription': '보관됨 및 unassigned 세션', + 'sessions.sidebar.folderItem.expandAria': '펼치기 폴더 {folderName}', + 'sessions.sidebar.folderItem.collapseAria': '접기 폴더 {folderName}', + 'sessions.sidebar.folderItem.namePlaceholder': '폴더 name', + 'sessions.sidebar.folderItem.newSessionAria': '새 세션 in {folderName}', + 'sessions.sidebar.folderItem.newSubfolderAria': '새 하위 폴더 in {folderName}', + 'sessions.sidebar.folderItem.newSubfolder': '새 하위 폴더', + 'sessions.sidebar.folderItem.renameAria': 'Rename 폴더 {folderName}', + 'sessions.sidebar.folderItem.deleteArchivedInFolderAria': '보관d 세션 in 폴더 {folderName} 삭제', + 'sessions.sidebar.folderItem.deleteFolderAria': '폴더 {folderName} 삭제', + 'sessions.sidebar.folderItem.emptyFolder': '비어 있음 폴더', + 'sessions.sidebar.sessionDialogs.ok': '확인', + 'sessions.sidebar.sessionDialogs.linkedSessionSingle': '연결된 세션', + 'sessions.sidebar.sessionDialogs.linkedSessionPlural': '연결된 세션', + 'sessions.sidebar.sessionDialogs.delete.note': '워크트리 디렉터리는 그대로 둡니다. 선택한 세션에 연결된 하위 세션도 제거됩니다.', + 'sessions.sidebar.sessionDialogs.directory.errorSelectTitle': '디렉터리 선택 실패', + 'sessions.sidebar.sessionDialogs.directory.errorOpenTitle': 'open 디렉터리 실패', + 'sessions.sidebar.sessionDialogs.directory.errorOpenDescription': 'Desktop could not grant 파일 access.', + 'sessions.sidebar.sessionDialogs.directory.errorAddProjectTitle': '프로젝트 추가 실패', + 'sessions.sidebar.sessionDialogs.directory.errorAddProjectDescription': '유효한 디렉터리 경로를 선택하세요.', + 'sessions.sidebar.sessionDialogs.worktree.errorRemoveTitle': 'remove 워크트리 실패', + 'sessions.sidebar.sessionDialogs.worktree.removedTitle': '워크트리 제거됨', + 'sessions.sidebar.sessionDialogs.worktree.removed': '워크트리가 제거되었습니다.', + 'sessions.sidebar.sessionDialogs.worktree.removedWithRemote': '워크트리와 리모트 브랜치가 제거되었습니다.', + 'sessions.sidebar.sessionDialogs.worktree.attachedArchived': '첨부됨 워크트리 보관됨.', + 'sessions.sidebar.sessionDialogs.worktree.attachedArchivedPlural': '첨부됨 워크트리 보관됨.', + 'sessions.sidebar.sessionDialogs.worktree.archivedAndRemoteRemoved': '워크트리가 보관되고 리모트 브랜치가 제거되었습니다.', + 'sessions.sidebar.sessionDialogs.worktree.label': '워크트리', + 'sessions.sidebar.sessionDialogs.worktree.pathUnavailable': '워크트리 경로 unavailable.', + 'sessions.sidebar.sessionDialogs.worktree.uncommittedWarning': '커밋하지 않은 변경 사항은 버려집니다.', + 'sessions.sidebar.sessionDialogs.actions.deleteRemoteBranch': '리모트 브랜치 삭제', + 'sessions.sidebar.sessionDialogs.actions.remoteBranchInfoUnavailable': '리모트 브랜치 info 사용할 수 없음', + 'sessions.sidebar.sessionDialogs.actions.deleteLocalBranch': 'local 브랜치 삭제', + 'sessions.sidebar.sessionDialogs.actions.deleting': '삭제 중…', + 'sessions.sidebar.sessionDialogs.actions.deleteWorktree': '워크트리 삭제', + 'gitView.branch.branchToMergeInto': '브랜치 To merge Into', + 'gitView.branch.branchToRebaseOnto': '브랜치 To rebase Onto', + 'gitView.branch.create': 'new 브랜치... 생성', + 'gitView.branch.currentBadge': '현재', + 'gitView.branch.currentBranchFallback': '현재 브랜치', + 'gitView.branch.currentBranchTooltip': '현재 브랜치', + 'gitView.branch.detachedHead': 'Detached HEAD', + 'gitView.branch.dialogDescriptionPrefix': 'Dialog Description Prefix', + 'gitView.branch.empty': '브랜치es found. 없음', + 'gitView.branch.localBranches': '로컬 브랜치es', + 'gitView.branch.mergeDescription': 'merge Description', + 'gitView.branch.mergeRebase': 'merge/rebase', + 'gitView.branch.mergeRebaseTooltip': 'merge rebase tooltip', + 'gitView.branch.mergingInProgress': 'Merging In Progress', + 'gitView.branch.namePlaceholder': '브랜치 name', + 'gitView.branch.newBranchPlaceholder': '새 브랜치 name', + 'gitView.branch.noLocalBranches': 'local 브랜치es 없음', + 'gitView.branch.noRemoteBranches': '리모트 브랜치es 없음', + 'gitView.branch.operation': 'Operation', + 'gitView.branch.operationCompleted': 'Operation 완료됨', + 'gitView.branch.operationFailed': 'Operation 실패', + 'gitView.branch.pushToPrefix': 'push To Prefix', + 'gitView.branch.pushToSuffix': 'push To Suffix', + 'gitView.branch.rebaseDescription': 'rebase Description', + 'gitView.branch.rebasingInProgress': 'Rebasing In Progress', + 'gitView.branch.remoteBranches': '리모트 브랜치es', + 'gitView.branch.renameTitle': 'Rename 브랜치', + 'gitView.branch.searchPlaceholder': '브랜치es 검색…', + 'gitView.branch.selectBranch': '브랜치 선택', + 'gitView.branch.summaryMergeInfix': 'Summary merge Infix', + 'gitView.branch.summaryMergePrefix': 'Summary merge Prefix', + 'gitView.branch.summaryRebaseInfix': 'Summary rebase Infix', + 'gitView.branch.summaryRebasePrefix': 'Summary rebase Prefix', + 'gitView.branch.updateDescriptionPrefix': '브랜치 설명 접두사 업데이트', + 'gitView.branch.updateTitle': '브랜치 업데이트', + 'gitView.changes.changedFilesAria': 'Changed 파일', + 'gitView.changes.clearSelectionAria': 'Clear 파일 선택ion', + 'gitView.changes.collapseDirectoryAria': '접기 디렉터리 aria label', + 'gitView.changes.expandDirectoryAria': '펼치기 디렉터리 aria label', + 'gitView.changes.revertAll': 'Revert all', + 'gitView.changes.revertAllDescriptionPlural': 'Revert All Description Plural', + 'gitView.changes.revertAllDescriptionSingle': 'Revert All Description Single', + 'gitView.changes.revertAllDialogTitle': 'Revert all changes?', + 'gitView.changes.revertFileAria': 'Revert 파일 aria label', + 'gitView.changes.revertFileTooltip': 'Revert changes', + 'gitView.changes.reverting': 'Reverting…', + 'gitView.changes.selectAllAria': 'all 파일 선택', + 'gitView.changes.selectFileAria': '파일 aria label 선택', + 'gitView.changes.title': 'Changes', + 'gitView.changes.toggleDirectorySelectionAria': '토글 디렉터리 선택ion aria label', + 'gitView.commit.addGitmoji': 'gitmoji 추가', + 'gitView.commit.aiHighlights.insertAria': 'Insert aria label', + 'gitView.commit.aiHighlights.insertTooltip': 'Insert tooltip', + 'gitView.commit.aiHighlights.title': '제목', + 'gitView.commit.commit': '커밋', + 'gitView.commit.commitAria': '커밋 aria label', + 'gitView.commit.committing': '커밋ting…', + 'gitView.commit.generate': '생성', + 'gitView.commit.generateAria': '커밋 메시지 생성', + 'gitView.commit.messagePlaceholder': '커밋 메시지', + 'gitView.commit.push': 'push', + 'gitView.commit.pushAria': 'push', + 'gitView.commit.pushing': 'pushing…', + 'gitView.commit.selectFilesHint': '커밋하려면 변경 사항에서 파일을 선택하세요.', + 'gitView.commit.title': '커밋', + 'gitView.common.cancel': '취소', + 'gitView.common.close': '닫기', + 'gitView.common.done': '완료', + 'gitView.common.processing': '처리 중…', + 'gitView.common.reset': '초기화', + 'gitView.conflict.abortOperation': 'Abort Operation', + 'gitView.conflict.conflictedFiles': 'Conflicted 파일:', + 'gitView.conflict.continueLater': 'Continue Later', + 'gitView.conflict.detectedDescription': 'Detected Description', + 'gitView.conflict.detectedTitle': 'Detected Title', + 'gitView.conflict.errorLoadingDetails': '상세 정보 로드 오류', + 'gitView.conflict.headInfo': 'HEAD information:', + 'gitView.conflict.loadFailed': 'Load 실패', + 'gitView.conflict.loading': 'conflict details 로드 중…', + 'gitView.conflict.noActiveSession': 'Active 세션 없음', + 'gitView.conflict.noActiveSessionDescription': 'Active 세션 Description 없음', + 'gitView.conflict.resolveCurrentSession': 'Resolve에서 현재 세션', + 'gitView.conflict.resolveNewSession': 'Resolve에서 New 세션', + 'gitView.empty.cleanDescription': '모든 변경 사항이 커밋됨', + 'gitView.empty.cleanTitle': '워킹 트리 깨끗함', + 'gitView.empty.pullBehindPlural': 'pull {count} 커밋', + 'gitView.empty.pullBehindSingle': 'pull {count} 커밋', + 'gitView.header.identityTooltip': 'Git 인증 정보', + 'gitView.header.noIdentity': '인증 정보 없음', + 'gitView.header.noProfiles': '적용할 프로필 없음', + 'gitView.header.removeRemoteAria': '리모트 aria label 제거', + 'gitView.header.removeRemoteTitle': '리모트 Title 제거', + 'gitView.history.binary': 'Binary', + 'gitView.history.commitsPlaceholder': '커밋 Placeholder', + 'gitView.history.copySha': 'SHA 복사', + 'gitView.history.loadingFiles': '파일 로드 중…', + 'gitView.history.logSize100': 'Log Size100', + 'gitView.history.logSize25': 'Log Size25', + 'gitView.history.logSize50': 'Log Size50', + 'gitView.history.noCommits': '커밋 없음', + 'gitView.history.noFiles': '파일 없음', + 'gitView.history.title': '히스토리', + 'gitView.integrate.checking': '확인 중…', + 'gitView.integrate.cherryPickAbortedToast': 'Cherry Pick 중단됨 Toast', + 'gitView.integrate.cherryPickConflictDescription': 'Cherry Pick Conflict Description', + 'gitView.integrate.cherryPickConflictToast': 'Cherry Pick Conflict Toast', + 'gitView.integrate.cherryPickContinueFailedToast': 'Cherry Pick Continue 실패 Toast', + 'gitView.integrate.cherryPickFinishedToast': 'Cherry Pick Finished Toast', + 'gitView.integrate.commitsMovedDescriptionPlural': '커밋 Moved Description Plural', + 'gitView.integrate.commitsMovedDescriptionSingle': '커밋 Moved Description Single', + 'gitView.integrate.commitsMovedToast': '커밋 Moved Toast', + 'gitView.integrate.commitsToMove': '커밋로 move', + 'gitView.integrate.conflictsInFiles': 'Conflicts In 파일', + 'gitView.integrate.currentCommit': '현재 커밋', + 'gitView.integrate.currentSession': '현재 세션', + 'gitView.integrate.failedToMoveToast': '실패 To Move Toast', + 'gitView.integrate.moreFiles': 'More 파일', + 'gitView.integrate.move': 'Move', + 'gitView.integrate.moveCommits': 'Move 커밋', + 'gitView.integrate.moving': 'Moving…', + 'gitView.integrate.newSession': '새 세션', + 'gitView.integrate.noActiveSession': 'Active 세션 없음', + 'gitView.integrate.noActiveSessionDescription': 'Active 세션 Description 없음', + 'gitView.integrate.noCommitsToMove': '이동할 커밋 없음', + 'gitView.integrate.noCommitsToMoveToast': '커밋 To Move Toast 없음', + 'gitView.integrate.previewUnavailable': '미리보기를 사용할 수 없음', + 'gitView.integrate.showAll': '표시 All', + 'gitView.integrate.showLess': '표시 Less', + 'gitView.integrate.showingFirstCommits': '표시ing First 커밋', + 'gitView.integrate.target': 'Target', + 'gitView.integrate.title': 'Re-integrate 커밋', + 'gitView.integrate.toMoveCount': 'To Move Count', + 'gitView.operation.abort': '중단', + 'gitView.operation.continue': '계속', + 'gitView.operation.inProgressTitle': 'In Progress Title', + 'gitView.operation.merge': 'merge', + 'gitView.operation.mergeInProgressWithHead': 'merge In Progress With Head', + 'gitView.operation.mergingMessage': 'Merging 메시지', + 'gitView.operation.rebase': 'rebase', + 'gitView.operation.rebaseInProgress': 'rebase In Progress', + 'gitView.operation.rebasingOnto': 'Rebasing Onto', + 'gitView.operation.resolveConflictsHint': 'Resolve Conflicts Hint', + 'gitView.operation.resolveWithAi': 'AI로 해결', + 'gitView.stash.confirmButton': '확인 Button', + 'gitView.stash.description': '설명', + 'gitView.stash.mergeWith': 'merge With', + 'gitView.stash.rebaseOnto': 'rebase Onto', + 'gitView.stash.restoreAfterOperation': 'Restore After Operation', + 'gitView.stash.restoreAria': 'Restore aria label', + 'gitView.stash.stepRestore': 'stash한 변경 사항 복원', + 'gitView.stash.stepStash': '커밋하지 않은 변경 사항 stash', + 'gitView.stash.thisWill': '다음 작업을 수행합니다:', + 'gitView.stash.title': '커밋하지 않은 변경 사항', + 'gitView.sync.fetch': 'fetch', + 'gitView.sync.fetchTooltip': '리모트에서 fetch', + 'gitView.sync.pull': 'pull', + 'gitView.sync.pullTooltip': '변경 사항 pull', + 'gitView.sync.pullTooltipBehind': 'pull changes ({count} behind)', + 'gitView.sync.push': 'push', + 'gitView.sync.pushTooltip': '변경 사항 push', + 'gitView.sync.pushTooltipAhead': 'push changes ({count} ahead)', + 'gitView.branch.actionsUnavailable': '현재 레포지토리 상태에서는 브랜치 작업을 사용할 수 없음', + 'gitView.conflict.noDetailsAvailable': '충돌 상세 정보 없음', + 'gitView.empty.notGitRepository': '이 디렉터리는 Git 레포지토리가 아닙니다', + 'gitView.empty.notGitRepositoryDescription': '이 디렉터리에서 Git을 초기화하거나 레포지토리를 여세요.', + 'gitView.empty.selectSessionOrDirectory': 'Git 상태를 볼 세션 또는 디렉터리를 선택하세요', + 'gitView.empty.worktreeFeaturesUnavailable': '이 워크스페이스 모드에서는 워크트리 기능을 사용할 수 없습니다.', + 'gitView.empty.worktreeSetupDescription': 'Finishing 워크트리 setup 및 preparing 레포지토리 state.', + 'gitView.empty.worktreeSetupInProgress': '워크트리 설정 중', + 'gitView.gitmoji.empty': 'gitmoji 없음', + 'gitView.gitmoji.searchPlaceholder': 'gitmoji 검색…', + 'gitView.gitmoji.title': 'gitmoji 삽입', + 'gitView.history.dialogDescription': '최근 커밋을 둘러보고 변경된 파일을 확인하세요.', + 'gitView.loading.checkingRepository': '레포지토리 확인 중…', + 'gitView.loading.loading': '로드 중…', + 'gitView.pr.actions.add': '추가', + 'gitView.pr.actions.cancelEditing': '취소 편집ing', + 'gitView.pr.actions.cancelEditingAria': '취소 PR 편집ing', + 'gitView.pr.actions.createPr': 'PR 생성', + 'gitView.pr.actions.edit': '편집', + 'gitView.pr.actions.editPr': 'PR 편집', + 'gitView.pr.actions.editPrAria': '편집 PR', + 'gitView.pr.actions.hide': '숨기기', + 'gitView.pr.actions.markReady': 'Mark 준비됨', + 'gitView.pr.actions.markReadyAria': 'Mark PR 준비됨용 review', + 'gitView.pr.actions.mergePr': 'PR merge', + 'gitView.pr.actions.mergePrAria': 'merge PR', + 'gitView.pr.actions.openChecks': '체크 열기', + 'gitView.pr.actions.openChecksAria': 'failed checks 열기', + 'gitView.pr.actions.openComments': '댓글 열기', + 'gitView.pr.actions.openCommentsAria': 'PR 댓글 열기', + 'gitView.pr.actions.openOnGitHub': 'GitHub에서 열기', + 'gitView.pr.actions.openOnGitHubAria': 'PR on GitHub 열기', + 'gitView.pr.actions.openSettings': '설정 열기', + 'gitView.pr.actions.repo': '레포지토리', + 'gitView.pr.actions.resolveFailedChecks': 'Resolve 실패 checks', + 'gitView.pr.actions.resolveFailedChecksAria': '보내기 실패 checks로 에이전트', + 'gitView.pr.actions.savePr': '저장 PR', + 'gitView.pr.actions.savePrAria': '저장 PR changes', + 'gitView.pr.actions.sendCommentToAgent': '보내기 댓글로 에이전트', + 'gitView.pr.actions.sendCommentToAgentAria': '이 댓글을 에이전트에 보내기', + 'gitView.pr.actions.sendToAgent': '보내기로 에이전트', + 'gitView.pr.actions.shareComments': 'Share 댓글', + 'gitView.pr.actions.shareCommentsAria': '보내기 PR 댓글로 에이전트', + 'gitView.pr.actions.toggleDraftAria': '토글 draft state', + 'gitView.pr.additionalContext.added': '추가됨', + 'gitView.pr.additionalContext.hint': '더 나은 리뷰를 위해 추가 컨텍스트를 넣으세요.', + 'gitView.pr.additionalContext.optional': '선택 사항', + 'gitView.pr.additionalContext.title': '추가 컨텍스트', + 'gitView.pr.checkDetails.empty': '체크 상세 정보 없음', + 'gitView.pr.checkDetails.title': '실패한 체크 상세', + 'gitView.pr.checkingStatus': 'PR 상태 확인 중…', + 'gitView.pr.checks.completedLabel': '완료됨', + 'gitView.pr.checks.conclusionLabel': '결론', + 'gitView.pr.checks.startedLabel': '시작됨', + 'gitView.pr.checks.statusLabel': '상태', + 'gitView.pr.checks.stepLabel': '단계', + 'gitView.pr.checks.steps': '단계', + 'gitView.pr.comments.empty': '댓글 없음', + 'gitView.pr.comments.generalContext': 'General 댓글', + 'gitView.pr.comments.reviewContext': 'Review 댓글', + 'gitView.pr.comments.title': '댓글', + 'gitView.pr.comments.unknownAuthor': '알 수 없는 작성자', + 'gitView.pr.createTitle': 'PR 생성', + 'gitView.pr.draftMustBeReady': '드래프트 PR은 merge 전에 리뷰 준비 상태로 바꿔야 합니다.', + 'gitView.pr.field.baseBranch': 'base 브랜치', + 'gitView.pr.field.description': '설명', + 'gitView.pr.field.draft': '드래프트', + 'gitView.pr.field.title': '제목', + 'gitView.pr.githubNotConnected': 'GitHub에 연결되지 않음', + 'gitView.pr.loadingDescription': '설명 로드 중…', + 'gitView.pr.mergeMethod.merge': 'merge 커밋 생성', + 'gitView.pr.mergeMethod.rebase': 'rebase 후 merge', + 'gitView.pr.mergeMethod.squash': 'squash 후 merge', + 'gitView.pr.noDescription': '설명 없음', + 'gitView.pr.noMergePermission': '이 PR을 merge할 권한이 없습니다.', + 'gitView.pr.notMergeable': 'merge 불가', + 'gitView.pr.numberLabel': 'PR #{number}', + 'gitView.pr.placeholder.additionalContext': 'Any constraints, rollout notes, 또는 reviewer 컨텍스트…', + 'gitView.pr.placeholder.description': '변경 사항 설명…', + 'gitView.pr.placeholder.main': 'PR 요약', + 'gitView.pr.placeholder.selectBaseBranch': 'base 브랜치 선택', + 'gitView.pr.placeholder.title': 'PR 제목', + 'gitView.pr.placeholder.whatChanged': '무엇이 왜 바뀌었나요?', + 'gitView.pr.statusUnavailable': 'PR 상태를 사용할 수 없음', + 'gitView.pr.toast.baseBranchRequired': 'base 브랜치를 선택하세요', + 'gitView.pr.toast.baseMustDifferFromHead': 'base 브랜치는 현재 브랜치와 달라야 합니다', + 'gitView.pr.toast.createPrFailed': 'PR 생성 실패', + 'gitView.pr.toast.generateDescriptionFailed': 'PR 설명 생성 실패', + 'gitView.pr.toast.githubApiUnavailable': 'GitHub API를 사용할 수 없음', + 'gitView.pr.toast.loadCheckDetailsFailed': '체크 상세 로드 실패', + 'gitView.pr.toast.loadChecksFailed': 'PR 체크 로드 실패', + 'gitView.pr.toast.loadCommentsFailed': '댓글 로드 실패', + 'gitView.pr.toast.loadPrCommentsFailed': 'PR 댓글 로드 실패', + 'gitView.pr.toast.markReadyFailed': 'PR 준비 상태 변경 실패', + 'gitView.pr.toast.markedReady': 'PR을 리뷰 준비 상태로 표시함', + 'gitView.pr.toast.mergeFailed': 'PR merge 실패', + 'gitView.pr.toast.noActiveSession': '활성 채팅 세션 없음', + 'gitView.pr.toast.noActiveSessionDescription': '에이전트에 컨텍스트를 보내려면 채팅 세션을 열거나 만드세요.', + 'gitView.pr.toast.noFailedChecks': '실패한 체크 없음', + 'gitView.pr.toast.noModelSelected': '먼저 모델을 선택하세요', + 'gitView.pr.toast.noPrComments': 'PR 댓글 없음', + 'gitView.pr.toast.prCreated': 'PR 생성됨', + 'gitView.pr.toast.prMerged': 'PR merge됨', + 'gitView.pr.toast.prNotMerged': 'PR이 merge되지 않음', + 'gitView.pr.toast.prUpdated': 'PR 업데이트됨', + 'gitView.pr.toast.sendMessageFailed': '에이전트에 메시지 전송 실패', + 'gitView.pr.toast.titleRequired': '제목 필수', + 'gitView.pr.toast.updatePrFailed': 'PR 업데이트 실패', + 'gitView.pullRequest.createHint': '이 브랜치에서 PR을 만들고 관리하세요.', + 'gitView.pullRequest.title': 'PR', + 'gitView.tabs.commit': '커밋', + 'gitView.tabs.pr': 'PR', + 'gitView.tabs.update': '업데이트', + 'gitView.tabs.worktree': '워크트리', + 'gitView.toast.abortOperationFailed': 'abort operation 실패', + 'gitView.toast.appliedIdentity': 'Applied 인증 정보: {name}', + 'gitView.toast.applyIdentityFailed': 'apply 인증 정보 실패', + 'gitView.toast.branchCreatedLocally': '브랜치 생성됨 로컬ly, but 실패로 set 업스트림.', + 'gitView.toast.cannotCheckout': '브랜치를 checkout할 수 없음: {reason}', + 'gitView.toast.cannotCreateBranch': '브랜치를 생성할 수 없음: {reason}', + 'gitView.toast.cannotRemoveOriginRemote': 'origin 리모트를 제거할 수 없음', + 'gitView.toast.cannotRenameBranch': '브랜치 이름을 변경할 수 없음: {reason}', + 'gitView.toast.checkedOut': 'Checked out {name}', + 'gitView.toast.checkoutFailed': 'checkout {name} 실패', + 'gitView.toast.commitCreated': '커밋 생성됨', + 'gitView.toast.commitHashCopied': '커밋 해시 복사됨', + 'gitView.toast.continueOperationFailed': 'continue operation 실패', + 'gitView.toast.copyFailed': 'copy 실패', + 'gitView.toast.createBranchFailed': 'create 브랜치 실패', + 'gitView.toast.createCommitFailed': 'create 커밋 실패', + 'gitView.toast.createdBranch': '생성됨 브랜치 {name}', + 'gitView.toast.enterCommitMessage': '커밋 메시지를 입력하세요', + 'gitView.toast.fetchedFromRemote': 'fetched에서 {name}', + 'gitView.toast.generateCommitMessageFailed': 'generate 커밋 메시지 실패', + 'gitView.toast.mergeAborted': 'merge 중단됨', + 'gitView.toast.mergeCompleted': 'merge 완료됨', + 'gitView.toast.mergeConflictsDetected': 'merge conflicts detected', + 'gitView.toast.mergedIntoBranch': 'merged {branch} into {currentBranch}', + 'gitView.toast.pulledFilesPlural': 'pulled {count} 파일에서 {name}', + 'gitView.toast.pulledFilesSingle': 'pulled {count} 파일에서 {name}', + 'gitView.toast.pushedToUpstream': 'pushed로 업스트림', + 'gitView.toast.rebaseAborted': 'rebase 중단됨', + 'gitView.toast.rebaseConflictsDetected': 'rebase conflicts detected', + 'gitView.toast.rebaseStepCompleted': 'rebase step 완료됨', + 'gitView.toast.rebasedOntoBranch': 'rebased {currentBranch} onto {branch}', + 'gitView.toast.refreshRepositoryFailed': 'refresh 레포지토리 실패', + 'gitView.toast.remoteNameRequired': '리모트 name 필수', + 'gitView.toast.removedRemote': '리모트 {name} 제거됨', + 'gitView.toast.renameBranchFailed': '{oldName}에서 {newName}(으)로 이름 변경 실패', + 'gitView.toast.renamedBranch': 'Renamed {oldName}로 {newName}', + 'gitView.toast.restoreStashFailed': 'restore stash 실패', + 'gitView.toast.restoreStashManually': 'stash restored manually 필요', + 'gitView.toast.revertFailed': 'revert changes 실패', + 'gitView.toast.revertedFile': 'Reverted {path}', + 'gitView.toast.revertedFilesPlural': 'Reverted {count} 파일', + 'gitView.toast.revertedFilesSingle': 'Reverted {count} 파일', + 'gitView.toast.revertedSomePlural': 'Reverted {success} 파일, {failed} 실패', + 'gitView.toast.revertedSomeSingle': 'Reverted {success} 파일, {failed} 실패', + 'gitView.toast.selectFileToCommit': '커밋할 파일을 하나 이상 선택하세요', + 'gitView.toast.selectFileToDescribe': '설명할 파일을 하나 이상 선택하세요', + 'gitView.toast.stashedRestored': 'stashed changes restored', + 'gitView.toast.syncActionFailed': '{action} 실패', + 'gitView.toast.upstreamSet': 'Set 업스트림용 {branch}로 {remote}', + 'gitView.worktree.availableInWorktreeMode': 'Available only에서 워크트리 모드', + 'contextPanel.mode.chat': '채팅', + 'contextPanel.mode.files': '파일', + 'contextPanel.mode.diff': 'diff', + 'contextPanel.mode.plan': '플랜', + 'contextPanel.mode.context': '컨텍스트', + 'contextPanel.tab.closeTabAria': '{label} tab 닫기', + 'contextPanel.actions.collapsePanel': '접기 패널', + 'contextPanel.actions.expandPanel': '펼치기 패널', + 'contextPanel.actions.closePanel': 'panel 닫기', + 'contextPanel.actions.resizePanelAria': '컨텍스트 패널 크기 조정', + 'contextPanel.iframe.sessionChatTitle': '세션 chat {sessionID}', + 'sidebarFilesTree.menu.rename': '이름 변경', + 'sidebarFilesTree.menu.copyPath': '경로 복사', + 'sidebarFilesTree.menu.save': '저장', + 'sidebarFilesTree.menu.newFile': '새 파일', + 'sidebarFilesTree.menu.newFolder': '새 폴더', + 'sidebarFilesTree.menu.delete': '삭제', + 'sidebarFilesTree.toast.pathCopied': '경로 복사됨', + 'sidebarFilesTree.toast.copyFailed': '복사 실패', + 'sidebarFilesTree.toast.revealFailed': '경로 표시 실패', + 'sidebarFilesTree.toast.filenameRequired': '파일 이름 필수', + 'sidebarFilesTree.toast.writeNotSupported': '쓰기를 지원하지 않음', + 'sidebarFilesTree.toast.fileCreated': '파일 생성됨', + 'sidebarFilesTree.toast.operationFailed': '작업 실패', + 'sidebarFilesTree.toast.folderNameRequired': '폴더 이름 필수', + 'sidebarFilesTree.toast.folderCreated': '폴더 생성됨', + 'sidebarFilesTree.toast.nameRequired': '이름 필수', + 'sidebarFilesTree.toast.renameNotSupported': '이름 변경을 지원하지 않음', + 'sidebarFilesTree.toast.renamedSuccessfully': '이름 변경됨', + 'sidebarFilesTree.toast.deleteNotSupported': '삭제를 지원하지 않음', + 'sidebarFilesTree.toast.deletedSuccessfully': '삭제됨', + 'sidebarFilesTree.search.placeholder': '파일 검색…', + 'sidebarFilesTree.search.clearAria': '검색 지우기', + 'sidebarFilesTree.actions.newFileTitle': '새 파일', + 'sidebarFilesTree.actions.newFolderTitle': '새 폴더', + 'sidebarFilesTree.actions.refreshTitle': '새로고침', + 'sidebarFilesTree.state.searching': '검색 중…', + 'sidebarFilesTree.state.loading': '로드 중…', + 'sidebarFilesTree.dialog.createFile.title': '파일 생성', + 'sidebarFilesTree.dialog.createFolder.title': '폴더 생성', + 'sidebarFilesTree.dialog.rename.title': '이름 변경', + 'sidebarFilesTree.dialog.delete.title': '삭제', + 'sidebarFilesTree.dialog.createFile.description': '{path}에 새 파일 생성', + 'sidebarFilesTree.dialog.createFolder.description': '{path}에 새 폴더 생성', + 'sidebarFilesTree.dialog.rename.description': '{name} 이름 변경', + 'sidebarFilesTree.dialog.delete.description': '{name}을(를) 삭제할까요? 이 작업은 되돌릴 수 없습니다.', + 'sidebarFilesTree.dialog.rootFallback': '루트', + 'sidebarFilesTree.dialog.rename.placeholder': '새 이름', + 'sidebarFilesTree.dialog.namePlaceholder': '이름', + 'sidebarFilesTree.dialog.cancel': '취소', + 'sidebarFilesTree.dialog.confirm': '확인', + 'sidebarFilesTree.dialog.delete.confirm': '삭제', + 'filesView.dialog.createFile.title': '파일 생성', + 'filesView.dialog.createFolder.title': '폴더 생성', + 'filesView.dialog.rename.title': '이름 변경', + 'filesView.dialog.delete.title': '삭제', + 'filesView.dialog.createFile.description': '{path}에 새 파일 생성', + 'filesView.dialog.createFolder.description': '{path}에 새 폴더 생성', + 'filesView.dialog.rename.description': '{name} 이름 변경', + 'filesView.dialog.delete.description': '{name}을(를) 삭제할까요? 이 작업은 되돌릴 수 없습니다.', + 'filesView.dialog.rootFallback': '루트', + 'filesView.dialog.rename.placeholder': '새 이름', + 'filesView.dialog.namePlaceholder': '이름', + 'filesView.dialog.cancel': '취소', + 'filesView.dialog.confirm': '확인', + 'filesView.dialog.delete.confirm': '삭제', + 'filesView.editor.saving': '저장 중…', + 'filesView.editor.saved': '저장됨', + 'filesView.editor.saveNowTitle': '지금 저장({shortcut}) · 1.5초 후 자동 저장', + 'filesView.editor.saveAria': '저장 ({shortcut})', + 'filesView.editor.openInDesktopApp': '데스크톱 앱에서 열기', + 'filesView.editor.refreshApps': '앱 새로고침', + 'filesView.editor.disableLineWrap': '줄 바꿈 끄기', + 'filesView.editor.enableLineWrap': '줄 바꿈 켜기', + 'filesView.editor.findInFile': '파일에서 찾기', + 'filesView.editor.goToLine': '줄로 이동', + 'filesView.editor.switchToTextView': '텍스트 보기로 전환', + 'filesView.editor.switchToTreeView': '트리 보기로 전환', + 'filesView.toast.copyFailed': '복사 실패', + 'filesView.toast.openInAppFailed': '{app}에서 열기 실패', + 'filesView.toast.savingNotSupported': '저장을 지원하지 않음', + 'filesView.toast.writeFileFailed': '파일 쓰기 실패', + 'filesView.toast.saveFailed': '저장 실패', + 'filesView.editor.copyFileContents': '파일 내용 복사', + 'filesView.editor.copyFilePathTitle': '파일 경로 복사({path})', + 'filesView.editor.saveFile': '파일 저장', + 'filesView.editor.exitFullscreen': '전체 화면 종료', + 'filesView.editor.fullscreen': '전체 화면', + 'filesView.unsaved.title': '저장하지 않은 변경 사항', + 'filesView.unsaved.description': '계속하기 전에 편집 내용을 저장할까요?', + 'filesView.unsaved.saveChanges': '변경 사항 저장', + 'filesView.unsaved.discard': '버리기', + 'filesView.editor.back': 'Back', + 'filesView.editor.openFilesAria': '파일 열기', + 'filesView.editor.closeFileAria': '{name} 닫기', + 'filesView.editor.selectFile': '파일 선택', + 'filesView.editor.showControlsAria': '표시 편집or controls', + 'filesView.editor.controlsTitle': '편집or controls', + 'filesView.editor.pickFileFromTree': '트리에서 파일을 선택하세요.', + 'filesView.state.loading': '로드 중…', + 'filesView.state.openingFileAtChange': '열기ing 파일 at change…', + 'filesView.tree.search.placeholder': '파일 검색…', + 'filesView.tree.search.clearAria': '검색 지우기', + 'filesView.tree.search.searching': '검색 중…', + 'filesView.tree.actions.newFileTitle': '새 파일', + 'filesView.tree.actions.newFolderTitle': '새 폴더', + 'filesView.editor.imageAltFallback': '이미지', + 'filesView.error.jsonViewerUnavailable': 'JSON 뷰어를 사용할 수 없음', + 'filesView.error.switchToTextMode': '원본 내용을 보려면 텍스트 모드로 전환하세요.', + 'filesView.warning.largeFilePreviewLimited': '이 파일은 큽니다({sizeKb}KB). 미리보기가 제한될 수 있습니다.', + 'filesView.error.previewUnavailable': '미리보기를 사용할 수 없음', + 'filesView.error.switchToEditMode': '문제를 수정하려면 편집 모드로 전환하세요.', + 'filesView.error.readFileFailed': '파일 읽기 실패', + 'filesView.editor.htmlPreviewTitle': 'HTML 미리보기', + 'contextUsage.aria.label': '컨텍스트 사용량', + 'contextUsage.mobile.title': '컨텍스트 Usage', + 'contextUsage.mobile.usedTokens': '사용한 토큰', + 'contextUsage.mobile.contextLimit': '컨텍스트 한도', + 'contextUsage.mobile.outputLimit': '출력 한도', + 'contextUsage.mobile.usage': '사용량', + 'contextUsage.tooltip.usedTokens': '사용됨 토큰: {tokens}', + 'contextUsage.tooltip.contextLimit': '컨텍스트 한도: {tokens}', + 'contextUsage.tooltip.outputLimit': '출력 한도: {tokens}', + 'contextSidebar.session.untitled': '제목 없는 세션', + 'contextSidebar.empty.openSession': '컨텍스트를 볼 세션을 여세요.', + 'contextSidebar.section.context': '컨텍스트', + 'contextSidebar.section.lastAssistantMessage': 'Last Assistant 메시지', + 'contextSidebar.section.rawMessages': 'Raw 메시지', + 'contextSidebar.context.percentUsed': '{percent}% 사용됨', + 'contextSidebar.breakdown.user': '사용자', + 'contextSidebar.breakdown.assistant': '어시스턴트', + 'contextSidebar.breakdown.toolCalls': 'Tool Calls', + 'contextSidebar.breakdown.other': '기타', + 'contextSidebar.stats.messages': '메시지', + 'contextSidebar.stats.user': '사용자', + 'contextSidebar.stats.assistant': '어시스턴트', + 'contextSidebar.stats.cost': '비용', + 'contextSidebar.tokens.input': '입력', + 'contextSidebar.tokens.output': '출력', + 'contextSidebar.tokens.reasoning': '추론', + 'contextSidebar.tokens.cacheRead': '캐시 읽기', + 'contextSidebar.tokens.cacheWrite': '캐시 쓰기', + 'contextSidebar.actions.copyJson': 'JSON 복사', + 'contextSidebar.actions.copy': '복사', + 'contextSidebar.actions.copied': '복사됨', + 'planView.file.defaultName': 'plan', + 'planView.title.default': '플랜', + 'planView.error.saveFailed': '저장 실패', + 'planView.error.previewUnavailable': '미리보기를 사용할 수 없음', + 'planView.error.switchToEditMode': '문제를 수정하려면 편집 모드로 전환하세요.', + 'planView.error.writeFailed': 'Write 실패', + 'planView.error.writePlanFileFailed': 'write plan 파일 ({status}) 실패', + 'planView.actions.improvePlanAria': 'Improve plan', + 'planView.actions.improve': '개선', + 'planView.actions.implementPlanAria': 'Implement plan', + 'planView.actions.implement': '구현', + 'planView.actions.sendToNewSession': '새 세션으로 보내기', + 'planView.actions.sendToNewWorktreeSession': '새 워크트리 세션으로 보내기', + 'planView.actions.copyPlanContents': '플랜 내용 복사', + 'planView.state.loading': '로드 중…', + 'diffView.binary.unavailable': '이 파일의 콘텐츠는 볼 수 없습니다.', + 'diffView.change.untracked': '추적되지 않은 파일', + 'diffView.change.new': '새 파일', + 'diffView.change.deleted': '삭제된 파일', + 'diffView.change.renamed': '이름 변경된 파일', + 'diffView.change.copied': '복사된 파일', + 'diffView.change.modified': '수정된 파일', + 'diffView.mode.single.label': '단일 파일', + 'diffView.mode.single.description': '파일을 하나씩 표시', + 'diffView.mode.stacked.label': '모든 파일', + 'diffView.mode.stacked.description': '수정된 파일을 모두 쌓아서 표시', + 'diffView.selector.selectFile': '파일 선택', + 'diffView.selector.viewMode': '보기 모드', + 'diffView.image.original': '원본', + 'diffView.image.modified': '수정됨', + 'diffView.image.new': 'New', + 'diffView.image.originalAlt': 'Original: {path}', + 'diffView.image.modifiedAlt': 'Modified: {path}', + 'diffView.section.files': '파일', + 'diffView.state.selectSessionDirectory': 'diff를 볼 세션 디렉터리를 선택하세요', + 'diffView.state.loadingRepositoryStatus': '레포지토리 상태 로드 중…', + 'diffView.state.notGitRepository': 'Git 레포지토리가 아닙니다. Git 탭에서 초기화하거나 디렉터리를 변경하세요.', + 'diffView.state.cleanWorkingTree': '워킹 트리가 깨끗합니다. 표시할 변경 사항이 없습니다.', + 'diffView.state.failedToLoadDiff': 'diff 로드 실패', + 'diffView.state.loadingDiff': 'diff 로드 중…', + 'diffView.state.loadingChanges': '변경 사항 로드 중…', + 'diffView.summary.changedFilesSingle': '파일 {count}개 변경됨', + 'diffView.summary.changedFilesPlural': '파일 {count}개 변경됨', + 'diffView.actions.retry': '다시 시도', + 'diffView.actions.disableLineWrap': '줄 바꿈 끄기', + 'diffView.actions.enableLineWrap': '줄 바꿈 켜기', + 'diffView.actions.openFileInEditorAtChange': '변경 위치에서 이 파일을 에디터로 열기', + 'diffView.actions.openFileAtFirstChangedLine': '첫 변경 줄에서 이 파일 열기', + 'rightSidebar.contextNotesTodo.plan.defaultTitle': '플랜', + 'rightSidebar.contextNotesTodo.empty.selectProject': '메모와 Todo를 추가할 프로젝트를 선택하세요.', + 'rightSidebar.contextNotesTodo.notes.title': 'Quick notes - {project}', + 'rightSidebar.contextNotesTodo.notes.placeholder': '컨텍스트, 리마인더, 링크를 기록하세요', + 'rightSidebar.contextNotesTodo.todo.title': 'Todo', + 'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} item', + 'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} items', + 'rightSidebar.contextNotesTodo.todo.clearCompleted': '완료 항목 지우기', + 'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Todo 추가', + 'rightSidebar.contextNotesTodo.todo.addAria': 'Todo 추가', + 'rightSidebar.contextNotesTodo.todo.empty': '아직 Todo가 없습니다. 이 프로젝트용 체크리스트를 추가해 보세요.', + 'rightSidebar.contextNotesTodo.todo.actions.markComplete': 'Mark "{text}" complete', + 'rightSidebar.contextNotesTodo.todo.actions.collapse': '접기 todo "{text}"', + 'rightSidebar.contextNotesTodo.todo.actions.expand': '펼치기 todo "{text}"', + 'rightSidebar.contextNotesTodo.todo.actions.delete': '"{text}" 삭제', + 'rightSidebar.contextNotesTodo.todo.actions.send': '보내기 "{text}"', + 'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': '현재 세션으로 보내기', + 'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': '새 세션으로 보내기', + 'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': '새 워크트리 세션으로 보내기', + 'rightSidebar.contextNotesTodo.plans.title': '플랜', + 'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} 파일', + 'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} 파일', + 'rightSidebar.contextNotesTodo.plans.importFromFile': '파일에서 플랜 가져오기', + 'rightSidebar.contextNotesTodo.plans.empty': '아직 저장된 플랜 없음', + 'rightSidebar.contextNotesTodo.plans.deletePlan': '플랜 삭제', + 'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'plan "{title}" 삭제', + 'rightSidebar.contextNotesTodo.sendDialog.title.newSession': '새 세션으로 보내기', + 'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': '보내기로 new 워크트리', + 'rightSidebar.contextNotesTodo.sendDialog.variant.default': '기본값', + 'rightSidebar.contextNotesTodo.sendDialog.actions.cancel': '취소', + 'rightSidebar.contextNotesTodo.sendDialog.actions.send': '보내기', + 'rightSidebar.contextNotesTodo.sendDialog.actions.sending': '보내기ing', + 'rightSidebar.contextNotesTodo.toast.saveNotesFailed': '프로젝트 메모 저장 실패', + 'rightSidebar.contextNotesTodo.toast.loadNotesFailed': '프로젝트 메모 로드 실패', + 'rightSidebar.contextNotesTodo.toast.noActiveSession': '활성 세션이 선택되지 않음', + 'rightSidebar.contextNotesTodo.toast.sentToCurrentSession': 'Todo를 현재 세션으로 보냄', + 'rightSidebar.contextNotesTodo.toast.worktreeRequiresGitRepo': '워크트리 작업은 Git 레포지토리에서만 사용할 수 있습니다', + 'rightSidebar.contextNotesTodo.toast.createSessionFailed': '세션 생성 실패', + 'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'Todo sent로 new 세션', + 'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'Todo sent로 new 워크트리 세션', + 'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Todo 전송 실패', + 'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '삭제 plan 실패', + 'rightSidebar.contextNotesTodo.toast.planFileEmpty': '플랜 파일이 비어 있음', + 'rightSidebar.contextNotesTodo.toast.importPlanFailed': '플랜 가져오기 실패', + 'rightSidebar.contextNotesTodo.toast.planImported': '플랜 가져옴', + 'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': '플랜 파일 읽기 실패', + 'inlineComment.range.lines': '줄 {start}-{end}', + 'inlineComment.input.placeholder': '댓글 추가… (Cmd+Enter로 저장)', + 'inlineComment.actions.cancel': '취소', + 'inlineComment.actions.save': '저장', + 'inlineComment.actions.comment': '댓글', + 'inlineComment.actions.showLess': '표시 less', + 'inlineComment.actions.showMore': '표시 more', + 'inlineComment.actions.editComment': '편집 댓글', + 'inlineComment.actions.deleteComment': '댓글 삭제', + 'inlineComment.toast.selectSessionToSave': '댓글을 저장할 세션을 선택하세요', + 'header.github.connectedWithLogin': 'GitHub: {login}', + 'header.github.connected': 'GitHub connected', + 'header.github.avatarWithLogin': '{login} avatar', + 'header.github.avatar': 'GitHub avatar', + 'header.github.accountsTitle': 'GitHub Accounts', + 'header.services.openWithCurrent': '인스턴스, 사용량, MCP 열기(현재: {current})', + 'header.services.open': '서비스, 사용량, MCP 열기', + 'header.services.tooltip.currentInstanceWithShortcuts': '현재 instance: {current} ({toggle}; next 탭 {nextTab})', + 'header.services.tooltip.servicesWithShortcuts': 'Services ({toggle}; next 탭 {nextTab})', + 'header.services.title': 'Services', + 'header.services.viewAria': 'View services', + 'header.services.closeAria': 'services 닫기', + 'header.services.rateLimits': '레이트 리밋', + 'header.services.refreshRateLimitsAria': '새로고침 레이트 리밋', + 'header.services.noRateLimits': '레이트 리밋 available. 없음', + 'header.services.noRateLimitsReported': '레이트 리밋 레포지토리rted. 없음', + 'header.services.used': '사용됨', + 'header.services.remaining': '남은 양', + 'header.services.modelFamily.other': '기타', + 'header.actions.openPlanAria': 'plan 열기', + 'header.actions.planWithShortcut': 'Plan ({shortcut})', + 'header.actions.terminalPanelWithShortcut': '터미널 패널 ({shortcut})', + 'header.actions.toggleTerminalPanelAria': '토글 터미널 패널', + 'terminalView.stream.processExitedMessage': '\r\n[Process exited{exitCodeSegment}{signalSegment}]\r\n', + 'terminalView.stream.processExitedWithCode': '와 code {exitCode}', + 'terminalView.stream.processExitedWithSignal': ' (signal {signal})', + 'terminalView.error.sessionEnded': '터미널 세션 ended', + 'terminalView.error.connectionFailed': 'Connection 실패: {message}', + 'terminalView.error.startSessionFailed': 'start 터미널 세션 실패', + 'terminalView.error.restartFailed': 'restart 터미널 실패', + 'terminalView.error.sendInputFailed': 'send input 실패', + 'terminalView.empty.noWorkingDirectory': 'working 디렉터리 available for 터미널. 없음', + 'terminalView.empty.selectSession': '터미널을 열 세션을 선택하세요.', + 'terminalView.empty.noWorkingDirectoryForSession': '이 세션에서 사용할 작업 디렉터리가 없습니다.', + 'terminalView.actions.retry': '다시 시도', + 'terminalView.actions.hardRestart': 'Hard 재시작', + 'terminalView.actions.hardRestartTitle': 'Force kill 및 생성 fresh 세션', + 'terminalView.quickKeys.escape': 'Esc', + 'terminalView.quickKeys.tabAria': 'Tab', + 'terminalView.quickKeys.controlLabel': 'Ctrl', + 'terminalView.quickKeys.controlModifierAria': 'Control modifier', + 'terminalView.quickKeys.commandModifierAria': '명령 modifier', + 'terminalView.quickKeys.arrowUpAria': 'Arrow up', + 'terminalView.quickKeys.arrowLeftAria': 'Arrow left', + 'terminalView.quickKeys.arrowDownAria': 'Arrow down', + 'terminalView.quickKeys.arrowRightAria': 'Arrow right', + 'terminalView.quickKeys.enterAria': 'Enter', + 'terminalView.tabs.closeTabTitle': 'tab 닫기', + 'terminalView.tabs.newTabTitle': '새 tab', + 'terminalView.bottomDock.resizeAria': '터미널 패널 크기 조정', + 'terminalView.bottomDock.restoreTitle': 'Restore 터미널 패널 height', + 'terminalView.bottomDock.restoreAria': 'Restore 터미널 패널 height', + 'terminalView.bottomDock.expandTitle': '펼치기 터미널 패널', + 'terminalView.bottomDock.expandAria': '펼치기 터미널 패널', + 'terminalView.bottomDock.closeTitle': '터미널 panel 닫기', + 'terminalView.bottomDock.closeAria': '터미널 panel 닫기', + 'terminalView.viewport.inputAria': '터미널 입력', + 'directoryExplorerDialog.title': '프로젝트 디렉터리 추가', + 'directoryExplorerDialog.description': '프로젝트로 추가할 폴더를 선택하세요.', + 'directoryExplorerDialog.toggle.showHidden': '표시 hidden', + 'directoryExplorerDialog.pathInput.placeholder': '경로를 입력하거나 트리에서 선택…', + 'directoryExplorerDialog.actions.cancel': '취소', + 'directoryExplorerDialog.actions.adding': 'Adding…', + 'directoryExplorerDialog.actions.addProject': '프로젝트 추가', + 'directoryExplorerDialog.toast.unableToAccessDirectory': 'access 디렉터리할 수 없음', + 'directoryExplorerDialog.toast.desktopDeniedAccess': 'Desktop denied 디렉터리 access.', + 'directoryExplorerDialog.toast.failedToOpenDirectory': 'open 디렉터리 실패', + 'directoryExplorerDialog.toast.desktopCouldNotGrantAccess': 'Desktop could not grant 파일 access.', + 'directoryExplorerDialog.toast.failedToAddProject': '프로젝트 추가 실패', + 'directoryExplorerDialog.toast.selectValidDirectoryPath': '유효한 디렉터리 경로를 선택하세요.', + 'directoryExplorerDialog.toast.failedToSelectDirectory': '디렉터리 선택 실패', + 'directoryExplorerDialog.toast.unknownError': '알 수 없음 오류 occurred.', + 'directoryTree.actions.createNewDirectory': 'new 디렉터리 생성', + 'directoryTree.actions.pinDirectory': 'Pin 디렉터리', + 'directoryTree.actions.unpinDirectory': 'Unpin 디렉터리', + 'directoryTree.actions.createDirectory': '디렉터리 생성', + 'directoryTree.actions.cancel': '취소', + 'directoryTree.actions.selectWorkingDirectoryAria': 'working 디렉터리 선택', + 'directoryTree.state.locatingHomeDirectory': 'Locating home 디렉터리…', + 'directoryTree.state.loading': '로드 중…', + 'directoryTree.state.noDirectoriesFound': 'directories 없음', + 'directoryTree.section.pinned': '고정됨', + 'directoryTree.section.browse': 'Browse', + 'aboutDialog.versionLabel': '버전 {version}', + 'aboutDialog.tagline': '워크스페이스에서 에이전트와 함께 코딩하세요.', + 'aboutDialog.actions.copyDiagnostics': '진단 정보 복사', + 'aboutDialog.actions.preparingDiagnostics': 'Preparing 진단 정보…', + 'aboutDialog.actions.diagnosticsCopied': '진단 정보 복사됨', + 'aboutDialog.diagnosticsDescription': 'Includes OpenChamber state, OpenCode health, directories, 및 프로젝트.', + 'aboutDialog.footerNote': '커뮤니티를 위해 정성껏 만들었습니다', + 'aboutDialog.toast.copyFailed': '복사 실패', + 'aboutDialog.toast.diagnosticsNotReady': '진단 정보가 아직 준비되지 않았습니다. 잠시 후 다시 시도하세요.', + 'aboutDialog.toast.diagnosticsCopied': '진단 정보 복사됨', + 'helpDialog.title': '키보드 단축키', + 'helpDialog.description': '이 단축키로 OpenChamber를 빠르게 탐색하세요', + 'helpDialog.section.navigationCommands': 'Navigation & 명령', + 'helpDialog.section.sessionManagement': '세션 Management', + 'helpDialog.section.panels': '패널', + 'helpDialog.section.interface': '인터페이스', + 'helpDialog.item.openCommandPalette': 'Command Palette 열기', + 'helpDialog.item.quickOpenFile': '빠른 파일 열기', + 'helpDialog.item.showKeyboardShortcuts': '키보드 단축키 보기(이 대화상자)', + 'helpDialog.item.toggleSessionSidebar': '토글 세션 사이드바', + 'helpDialog.item.cycleAgent': '에이전트 순환(채팅 입력)', + 'helpDialog.item.openModelSelector': '모델 선택기 열기', + 'helpDialog.item.navigateModels': '모델 이동(선택기)', + 'helpDialog.item.adjustThinkingMode': '추론 모드 조정(지원되는 선택기)', + 'helpDialog.item.cycleThinkingVariant': 'Cycle Thinking Variant (global 단축키)', + 'helpDialog.item.newWindow': '새 Window (desktop only)', + 'helpDialog.item.createNewSession': 'New 세션 생성', + 'helpDialog.item.createNewWorktreeDraft': 'New 워크트리 Draft 생성', + 'helpDialog.item.focusChatInput': 'Focus Chat 입력', + 'helpDialog.item.abortActiveRun': '활성 실행 중단(두 번 누르기)', + 'helpDialog.item.toggleRightSidebar': '토글 Right 사이드바', + 'helpDialog.item.openRightSidebarGitTab': 'Right Sidebar Git Tab 열기', + 'helpDialog.item.openRightSidebarFilesTab': 'Right Sidebar 파일 Tab 열기', + 'helpDialog.item.cycleRightSidebarTab': 'Cycle Right 사이드바 탭', + 'helpDialog.item.toggleTerminalDock': '토글 터미널 Dock', + 'helpDialog.item.toggleTerminalExpanded': '토글 터미널 펼치기ed', + 'helpDialog.item.togglePlanContextPanel': '토글 Plan 컨텍스트 패널', + 'helpDialog.item.cycleTheme': 'Cycle 테마 (Light → Dark → System)', + 'helpDialog.item.switchProject': 'Switch 프로젝트', + 'helpDialog.item.toggleServicesMenu': '토글 Services Menu', + 'helpDialog.item.cycleServicesTab': 'Cycle Services 탭', + 'helpDialog.item.openSettings': '설정 열기', + 'helpDialog.keyCombiner.or': '또는', + 'helpDialog.proTips.title': '팁:', + 'helpDialog.proTips.commandPalette': 'Use 명령 팔레트 ({shortcut})로 quickly access all 작업', + 'helpDialog.proTips.recentSessions': '최근 세션 5개가 명령 팔레트에 표시됩니다', + 'helpDialog.proTips.themeCycling': '테마 순환은 세션 간에도 선호 설정을 기억합니다', + 'header.actions.rightSidebarWithShortcut': 'Right 사이드바 ({shortcut})', + 'header.actions.toggleRightSidebarAria': '오른쪽 사이드바 토글', + 'header.actions.openSessionsWithShortcut': '세션 ({shortcut}) 열기', + 'header.actions.openSessionsAria': '세션 열기', + 'header.actions.closeSessionsAria': '세션 닫기', + 'header.actions.newSessionAria': '새 세션', + 'header.actions.newSessionWithShortcut': '새 세션 ({shortcut})', + 'header.actions.backAria': 'Back', + 'header.navigation.mainAria': '메인 navigation', + 'header.sessions.title': '세션', + 'header.changes.availableAria': 'Changes available', + 'session.githubIssuePicker.error.noActiveProject': 'active 프로젝트 없음', + 'session.githubIssuePicker.error.runtimeUnavailable': 'GitHub run시간 API 사용할 수 없음', + 'session.githubIssuePicker.error.notConnected': 'GitHub not connected', + 'session.githubIssuePicker.error.repoNotResolvable': '레포지토리 not resolvable', + 'session.githubIssuePicker.error.repoMustBeGithub': 'origin 리모트는 GitHub URL이어야 합니다', + 'session.githubIssuePicker.error.issueNotFound': '이슈 not found', + 'session.githubIssuePicker.error.noModelSelected': '모델 selected 없음', + 'session.githubIssuePicker.toast.loadMoreFailed': 'load more 이슈 실패', + 'session.githubIssuePicker.toast.loadIssueDetailsFailed': 'load 이슈 details 실패', + 'session.githubIssuePicker.toast.sendContextFailed': 'send 이슈 컨텍스트 실패', + 'session.githubIssuePicker.toast.sessionCreated': '세션 생성됨에서 이슈', + 'session.githubIssuePicker.toast.startSessionFailed': 'start 세션 실패', + 'session.githubIssuePicker.title.select': 'Link GitHub 이슈', + 'session.githubIssuePicker.title.createSession': '새 세션 From GitHub 이슈', + 'session.githubIssuePicker.description.select': '이 세션에 연결할 이슈를 선택하세요.', + 'session.githubIssuePicker.description.createSession': '제목, 본문, 라벨, 댓글을 숨겨진 이슈 컨텍스트로 새 세션에 추가합니다.', + 'session.githubIssuePicker.searchPlaceholder': '검색 by title 또는 #123, 또는 paste 이슈 URL', + 'session.githubIssuePicker.empty.noActiveProject': 'active 프로젝트 selected. 없음', + 'session.githubIssuePicker.empty.runtimeUnavailable': 'GitHub 런타임 API unavailable.', + 'session.githubIssuePicker.empty.notConnected': 'GitHub에 연결되지 않았습니다. 설정에서 GitHub 계정을 연결하세요.', + 'session.githubIssuePicker.empty.noIssuesFound': '이슈 없음', + 'session.githubIssuePicker.empty.noOpenIssuesFound': 'open 이슈 없음', + 'session.githubIssuePicker.loading.issues': '이슈 로드 중…', + 'session.githubIssuePicker.loading.more': '로드 중…', + 'session.githubIssuePicker.actions.openSettings': '설정 열기', + 'session.githubIssuePicker.actions.useIssue': 'Use 이슈 #{number}', + 'session.githubIssuePicker.actions.openInGitHubAria': 'in GitHub 열기', + 'session.githubIssuePicker.actions.loadMore': 'Load more', + 'session.githubIssuePicker.actions.sectionTitle': '작업', + 'session.githubIssuePicker.actions.toggleWorktreeAria': '토글 워크트리', + 'session.githubIssuePicker.actions.createInWorktree': 'in 워크트리 생성', + 'session.githubIssuePicker.actions.openRepo': '레포지토리 열기', + 'session.githubIssuePicker.actions.refresh': '새로고침', + 'session.githubPrPicker.error.noActiveProject': 'active 프로젝트 없음', + 'session.githubPrPicker.error.runtimeUnavailable': 'GitHub run시간 API 사용할 수 없음', + 'session.githubPrPicker.error.notConnected': 'GitHub not connected', + 'session.githubPrPicker.error.prNotFound': 'PR not found', + 'session.githubPrPicker.error.repoNotResolvable': '레포지토리 not resolvable', + 'session.githubPrPicker.error.repoMustBeGithub': 'origin 리모트는 GitHub URL이어야 합니다', + 'session.githubPrPicker.toast.loadMoreFailed': 'load more PRs 실패', + 'session.githubPrPicker.toast.loadDetailsFailed': 'load PR details 실패', + 'session.githubPrPicker.title': 'Link GitHub PR', + 'session.githubPrPicker.description': '이 메시지에 리뷰 컨텍스트로 첨부할 PR을 선택하세요.', + 'session.githubPrPicker.searchPlaceholder': '검색 by title 또는 #123, 또는 paste PR URL', + 'session.githubPrPicker.includeDiffAria': 'Include PR diff에서 첨부ed 컨텍스트', + 'session.githubPrPicker.includeDiff': 'Include PR diff', + 'session.githubPrPicker.empty.noActiveProject': 'active 프로젝트 selected. 없음', + 'session.githubPrPicker.empty.runtimeUnavailable': 'GitHub 런타임 API unavailable.', + 'session.githubPrPicker.empty.notConnected': 'GitHub에 연결되지 않았습니다. 설정에서 GitHub 계정을 연결하세요.', + 'session.githubPrPicker.empty.noPullRequestsFound': 'PRs 없음', + 'session.githubPrPicker.empty.noOpenPullRequestsFound': 'open PRs 없음', + 'session.githubPrPicker.loading.pullRequests': 'PRs 로드 중…', + 'session.githubPrPicker.loading.more': '로드 중…', + 'session.githubPrPicker.actions.openSettings': '설정 열기', + 'session.githubPrPicker.actions.usePullRequest': 'Use PR #{number}', + 'session.githubPrPicker.actions.openInGitHubAria': 'in GitHub 열기', + 'session.githubPrPicker.actions.loadMore': 'Load more', + 'session.newWorktree.title': '새 워크트리', + 'session.newWorktree.mode.newBranch': '새 브랜치', + 'session.newWorktree.mode.existingBranch': 'Existing 브랜치', + 'session.newWorktree.selectBranch': '브랜치 선택', + 'session.newWorktree.chooseBranch': '브랜치 선택…', + 'session.newWorktree.fetchBranches': 'fetch 브랜치es', + 'session.newWorktree.searchBranches': '브랜치es 검색…', + 'session.newWorktree.loadingBranches': '브랜치es 로드 중…', + 'session.newWorktree.noBranchesFound': '브랜치es 없음', + 'session.newWorktree.matchingBranches': 'Matching 브랜치es', + 'session.newWorktree.noMatchingBranches': 'matching 브랜치es 없음', + 'session.newWorktree.localBranches': '로컬 브랜치es', + 'session.newWorktree.remoteBranches': '리모트 브랜치es', + 'session.newWorktree.otherLocalBranches': 'Other 로컬 브랜치es', + 'session.newWorktree.otherRemoteBranches': 'Other 리모트 브랜치es', + 'session.newWorktree.branchName': '브랜치 Name', + 'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature', + 'session.newWorktree.actions.change': 'Change', + 'session.newWorktree.actions.startFromGitHubIssuePr': '시작에서 GitHub 이슈/PR', + 'session.newWorktree.usingPrBranch': 'Using PR 브랜치: {branch}', + 'session.newWorktree.fromIssue': 'From 이슈 #{number}: {title}', + 'session.newWorktree.worktreeDirectory': '워크트리 디렉터리', + 'session.newWorktree.worktreeDirectoryPlaceholder': 'my-워크트리-디렉터리', + 'session.newWorktree.resetToMatchBranchName': 'Reset로 match 브랜치 name', + 'session.newWorktree.sourceBranch': 'Source 브랜치', + 'session.newWorktree.selectSourceBranch': 'Source 브랜치 선택', + 'session.newWorktree.selectSourceBranchPlaceholder': 'source 브랜치... 선택', + 'session.newWorktree.newBranchFromSource': '{source}에서 새 브랜치가 생성됩니다', + 'session.newWorktree.issueNumber': '이슈 #{number}', + 'session.newWorktree.prNumber': 'PR #{number}', + 'session.newWorktree.includeDiffBadge': '+diff', + 'session.newWorktree.newSessionTitle': '새 세션', + 'session.newWorktree.fromSource': '{source}에서', + 'session.newWorktree.actions.cancel': '취소', + 'session.newWorktree.actions.creating': '생성 중…', + 'session.newWorktree.actions.createWorktree': '워크트리 생성', + 'session.newWorktree.actions.reset': '초기화', + 'session.newWorktree.error.noModelSelected': '모델 selected 없음', + 'session.newWorktree.error.noActiveProject': 'active 프로젝트 없음', + 'session.newWorktree.error.branchNameRequired': '브랜치 name 필수', + 'session.newWorktree.error.worktreeDirectoryRequired': '워크트리 디렉터리 필수', + 'session.newWorktree.error.sendGitHubContextFailed': 'send GitHub 컨텍스트 실패', + 'session.newWorktree.error.createWorktreeFailed': 'create 워크트리 실패', + 'session.newWorktree.toast.sessionFromIssue': '세션 생성됨에서 이슈', + 'session.newWorktree.toast.sessionFromPr': '세션 생성됨에서 PR', + 'session.newWorktree.toast.worktreeCreated': '워크트리 생성됨', + 'session.newWorktree.toast.worktreeCreatedDescription': '{target} - bootstrapping에서 background', + 'session.githubIntegration.title': 'GitHub에서 선택', + 'session.githubIntegration.tabs.issues': '이슈', + 'session.githubIntegration.tabs.pullRequests': 'PRs', + 'session.githubIntegration.connect.title': 'Connect로 GitHub', + 'session.githubIntegration.connect.description': 'Link 이슈 또는 PRs로 auto-fill 워크트리 상세', + 'session.githubIntegration.connect.action': 'Connect GitHub', + 'session.githubIntegration.search.issuesPlaceholder': '이슈 검색 또는 #123 입력…', + 'session.githubIntegration.search.prsPlaceholder': 'PR 검색 또는 #456 입력…', + 'session.githubIntegration.empty.noIssuesFound': '이슈 없음', + 'session.githubIntegration.empty.noPullRequestsFound': 'PRs 없음', + 'session.githubIntegration.actions.loadMore': 'Load more', + 'session.githubIntegration.actions.cancel': '취소', + 'session.githubIntegration.actions.select': '선택', + 'session.githubIntegration.selected.issueNumber': '이슈 #{number}', + 'session.githubIntegration.selected.prNumber': 'PR #{number}', + 'session.githubIntegration.includeDiffAria': 'Include PR diff에서 세션 컨텍스트', + 'session.githubIntegration.includeDiff': 'Include PR diff', + 'session.githubIntegration.error.notConnected': 'GitHub not connected', + 'session.githubIntegration.error.loadDataFailed': 'load data 실패', + 'session.githubIntegration.validation.branchAlreadyCheckedOut': '브랜치가 이미 워크트리에서 checkout되어 있습니다', + 'session.githubIntegration.validation.failed': 'Validation 실패', + 'chat.fileAttachment.toast.attachFailed': '첨부 파일 실패', + 'chat.fileAttachment.toast.someFilesSkipped': '일부 파일을 건너뛰었습니다:\n{summary}', + 'chat.fileAttachment.toast.vscodePickFailed': 'pick 파일 in VS Code 실패', + 'chat.fileAttachment.fileFallback': '파일', + 'chat.fileAttachment.skippedFallback': 'skipped', + 'chat.fileAttachment.actions.attachAria': 'Attach 파일', + 'chat.fileAttachment.actions.attach': 'Attach 파일', + 'chat.fileAttachment.actions.removeNamed': '{name} 제거', + 'chat.fileAttachment.actions.removeImage': 'image 제거', + 'chat.pendingChanges.fileCountSingle': '{count} 파일', + 'chat.pendingChanges.fileCountPlural': '{count} 파일', + 'chat.pendingChanges.changedInWorkspace': 'changed에서 워크스페이스', + 'chat.changedFiles.title': 'Changed 파일', + 'chat.changedFiles.actions.openFileTitle': '{path} 열기', + 'chat.emptyState.opencodeUnreachable': 'OpenCode에 연결할 수 없음', + 'chat.emptyState.startNewChat': '새 채팅 시작', + 'chat.scrollToBottom.aria': 'Scroll로 bottom', + 'chat.timeline.relative.justNow': '방금 전', + 'chat.timeline.relative.minutesAgo': '{count}분 전', + 'chat.timeline.relative.hoursAgo': '{count}h ago', + 'chat.timeline.relative.daysAgo': '{count}d ago', + 'chat.timeline.title': 'Conversation Time줄', + 'chat.timeline.description': '대화의 원하는 지점으로 이동하거나 새 세션으로 분기하세요', + 'chat.timeline.searchPlaceholder': '메시지 검색…', + 'chat.timeline.empty.search': '메시지 없음', + 'chat.timeline.empty.session': '아직 이 세션에 메시지 없음', + 'chat.timeline.noTextContent': '[No text content]', + 'chat.timeline.actions.title': '작업', + 'chat.timeline.actions.revertFromHere': 'Revert에서 here', + 'chat.timeline.actions.forkFromHere': 'Fork에서 here', + 'chat.timeline.actions.previousTurn': 'Previous turn', + 'chat.timeline.actions.latest': 'Latest', + 'chat.timeline.help.clickMessage': '메시지를 클릭하면 대화의 해당 위치로 이동합니다', + 'chat.timeline.help.undoToPoint': '이 지점으로 되돌립니다(메시지 텍스트가 입력창에 채워집니다)', + 'chat.timeline.help.createSessionFromHere': '여기서 새 세션 생성', + 'chat.statusRow.todo.status.inProgress': 'In progress', + 'chat.statusRow.todo.status.pending': '대기 중', + 'chat.statusRow.todo.status.completed': '완료됨', + 'chat.statusRow.todo.status.cancelled': '취소됨', + 'chat.statusRow.todo.priority.high': 'High priority', + 'chat.statusRow.todo.priority.medium': 'Medium priority', + 'chat.statusRow.todo.priority.low': 'Low priority', + 'chat.statusRow.actions.stopGeneratingAria': '중지 generating', + 'chat.statusRow.tasksTitle': '작업', + 'chat.statusRow.summary.activeLeft': '{active} active · {left} left', + 'chat.statusRow.aborted': '중단됨', + 'chat.errorBoundary.title': 'Chat 오류', + 'chat.errorBoundary.description': '채팅 인터페이스에서 오류가 발생했습니다. 일시적인 네트워크 이슈 또는 손상된 메시지 데이터 때문일 수 있습니다.', + 'chat.errorBoundary.sessionLabel': '세션', + 'chat.errorBoundary.detailsSummary': '오류 상세', + 'chat.errorBoundary.resetAction': 'Reset Chat', + 'chat.errorBoundary.persistentHint': '문제가 계속되면 페이지를 새로고침해 보세요.', + 'chat.autocomplete.tabs.commands': '명령', + 'chat.autocomplete.tabs.agents': '에이전트', + 'chat.autocomplete.tabs.files': '파일', + 'chat.autocomplete.keyboardHint': '↑↓ 이동 • Enter 선택 • Esc 닫기', + 'chat.commandAutocomplete.command.initDescription': '생성/update AGENTS.md 파일', + 'chat.commandAutocomplete.command.undoDescription': '마지막 메시지 실행 취소', + 'chat.commandAutocomplete.command.redoDescription': 'Redo previously undone 메시지', + 'chat.commandAutocomplete.command.compactDescription': 'Compress 세션 history using AI로 reduce 컨텍스트 size', + 'chat.commandAutocomplete.command.summaryDescription': '세션 기록을 안전하게 요약합니다. 명령 뒤에 선택적으로 주제 힌트를 넣을 수 있습니다.', + 'chat.commandAutocomplete.command.workspaceReviewDescription': 'Review 현재 워크스페이스 changes용 high-signal 이슈 only.', + 'chat.commandAutocomplete.badge.skill': '스킬', + 'chat.commandAutocomplete.badge.system': 'system', + 'chat.commandAutocomplete.empty': 'commands 없음', + 'chat.agentMentionAutocomplete.badge.system': 'system', + 'chat.agentMentionAutocomplete.empty': '에이전트 없음', + 'chat.fileMentionAutocomplete.searchMoreAgents': 'Type로 검색 more 에이전트', + 'chat.fileMentionAutocomplete.empty': 'matches 없음', + 'chat.queuedMessage.attachments': '+{count} 파일(s)', + 'chat.queuedMessage.empty': '(비어 있음)', + 'chat.queuedMessage.removeAria': '큐에서 제거', + 'chat.container.returnToParent.aria': 'Return로 parent 세션', + 'chat.container.returnToParent.titleNamed': '돌아가기: {title}', + 'chat.container.returnToParent.title': 'Return로 parent 세션', + 'chat.container.returnToParent.label': 'Parent', + 'chat.unifiedControls.title': 'Controls', + 'chat.unifiedControls.model.title': '모델', + 'chat.unifiedControls.model.noRecent': 'recent 모델 없음', + 'chat.unifiedControls.model.moreAria': 'More 모델', + 'chat.unifiedControls.effort.title': 'Effort', + 'chat.unifiedControls.effort.moreAria': 'More effort options', + 'chat.questionCard.summaryTab': 'Summary', + 'chat.questionCard.noAnswer': '(no answer)', + 'chat.questionCard.inputNeeded': '입력 needed', + 'chat.questionCard.fromSubagent': 'From sub에이전트', + 'chat.questionCard.questionFallback': 'Question {index}', + 'chat.questionCard.selectMultiple': 'multiple 선택', + 'chat.questionCard.recommended': 'recommended', + 'chat.questionCard.other': 'Other…', + 'chat.questionCard.yourAnswer': 'Your answer', + 'chat.questionCard.submit': '제출', + 'chat.questionCard.next': '다음', + 'chat.questionCard.dismiss': '닫기', + 'chat.textSelection.toast.noProject': '이 세션의 프로젝트를 찾을 수 없음', + 'chat.textSelection.toast.addToNotesFailed': '메모 추가 실패', + 'chat.textSelection.toast.addToNotesSuccess': '정리된 인사이트를 메모에 추가함', + 'chat.textSelection.actions.addToChat': '채팅에 추가', + 'chat.textSelection.actions.newSession': '새 세션', + 'chat.textSelection.actions.copy': '복사', + 'chat.textSelection.actions.addToNotes': '메모에 추가', + 'chat.textSelection.title.addToCurrentChat': '현재 채팅에 추가', + 'chat.textSelection.title.newSessionWithSelection': '선택한 내용으로 새 세션 생성', + 'chat.textSelection.title.saveInsightToNotes': '저장 distilled insight로 notes', + 'chat.messageBody.actions.revertAria': '이 메시지로 되돌리기', + 'chat.messageBody.actions.revert': 'Revert에서 here', + 'chat.messageBody.actions.forkAria': '이 메시지에서 분기', + 'chat.messageBody.actions.fork': 'Fork에서 here', + 'chat.messageBody.actions.copyMessageAria': '메시지 텍스트 복사', + 'chat.messageBody.actions.copyMessage': '메시지 복사', + 'chat.messageBody.actions.copyAnswer': '답변 복사', + 'chat.messageBody.actions.savingImage': 'Saving 이미지…', + 'chat.messageBody.actions.saveAsImage': '저장 as 이미지', + 'chat.messageBody.actions.saveAsPlan': '저장 as plan', + 'chat.messageBody.actions.startNewSession': '이 응답에서 새 세션 시작', + 'chat.messageBody.actions.startNewMultiRun': '이 응답에서 새 멀티런 시작', + 'chat.messageBody.tts.stopSpeaking': '중지 speaking', + 'chat.messageBody.tts.readAloud': 'Read aloud', + 'chat.messageBody.tts.readAloudWithProvider': 'Read aloud ({provider} 음성)', + 'chat.messageBody.toast.noProject': '이 세션의 프로젝트를 찾을 수 없음', + 'chat.messageBody.toast.savePlanFailed': 'save plan 실패', + 'chat.messageBody.toast.planSaved': 'Plan 저장된', + 'chat.messageBody.toast.imageSaved': '이미지 저장된', + 'chat.messageBody.toast.generateImageFailed': 'generate image 실패', + 'chat.chatInput.actions.commands': '명령', + 'chat.chatInput.actions.attachFiles': 'Attach 파일', + 'chat.chatInput.actions.addAttachment': '첨부ment 추가', + 'chat.chatInput.actions.linkGithubIssue': 'Link GitHub 이슈', + 'chat.chatInput.actions.linkGithubPr': 'Link GitHub PR', + 'chat.chatInput.actions.modelAgentSettings': '모델 및 에이전트 설정', + 'chat.chatInput.actions.sendMessageAria': '보내기 메시지', + 'chat.chatInput.actions.queueMessageAria': 'Queue 메시지', + 'chat.chatInput.actions.stopGeneratingAria': '중지 generating', + 'chat.chatInput.focusMode.toggleAria': '토글 focus 모드', + 'chat.chatInput.focusMode.label': 'Focus 모드', + 'chat.chatInput.permissionAutoAccept.disable': 'Disable 권한 auto-accept', + 'chat.chatInput.permissionAutoAccept.enable': '활성화 권한 auto-accept', + 'chat.chatInput.permissionAutoAccept.on': '권한 auto-accept: on', + 'chat.chatInput.permissionAutoAccept.off': '권한 auto-accept: off', + 'chat.chatInput.linked.byAuthor': 'by {author}', + 'chat.chatInput.linked.issue.openInBrowserAria': '이슈 in browser 열기', + 'chat.chatInput.linked.issue.removeAria': 'linked 이슈 제거', + 'chat.chatInput.linked.pr.number': 'PR #{number}', + 'chat.chatInput.linked.pr.openInBrowserAria': 'PR in browser 열기', + 'chat.chatInput.linked.pr.removeAria': 'linked PR 제거', + 'chat.chatInput.placeholder.shell': 'Shell 명령 입력…', + 'chat.chatInput.placeholder.chat': '@용 파일/에이전트; /용 명령; !용 shell', + 'chat.chatInput.placeholder.selectSession': '채팅을 시작할 세션을 선택하거나 새로 만드세요', + 'chat.chatInput.toast.compactFailed': 'compact 세션 실패', + 'chat.chatInput.toast.summaryFailed': 'generate summary 실패', + 'chat.chatInput.toast.reviewFailed': 'review changes 실패', + 'chat.chatInput.toast.attachmentsTooLarge': '첨부 파일이 너무 커서 보낼 수 없습니다. 이미지 수나 크기를 줄여 보세요.', + 'chat.chatInput.toast.sendAttachmentsFailed': '첨부 파일 전송 실패. 파일 수나 이미지 크기를 줄여 보세요.', + 'chat.chatInput.toast.messageSendFailed': '메시지 실패로 보내기. Attachments restored.', + 'chat.chatInput.toast.clipboardAttachFailed': '클립보드 이미지 첨부 실패', + 'chat.chatInput.toast.addedFileMentions': '파일 멘션 {count}개 추가됨', + 'chat.chatInput.toast.attachFileFailed': '첨부 파일 실패', + 'chat.chatInput.toast.attachNamedFailed': '첨부 {name} 실패', + 'chat.chatInput.toast.someFilesSkipped': '일부 파일을 건너뛰었습니다:\n{summary}', + 'chat.chatInput.toast.vscodePickFailed': 'pick 파일 in VS Code 실패', + 'chat.chatInput.toast.openSessionFirst': '먼저 세션을 여세요', + 'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'toggle permission auto-accept 실패', + 'chat.chatInput.reviewComments': 'Review 댓글:', + 'chat.chatInput.projectRoot': '프로젝트 root', + 'chat.chatInput.branch': '브랜치', + 'chat.chatInput.worktrees': '워크트리', + 'chat.chatInput.worktreeNew': '+ New', + 'chat.chatInput.drop.insertMention': 'Drop로 insert as mention', + 'chat.chatInput.drop.attachFiles': 'Drop 파일 here로 첨부', + 'chat.chatInput.fileFallback': '파일', + 'chat.mobileStatus.editProjects.title': '편집 프로젝트', + 'chat.mobileStatus.editProjects.footer': 'Drag items로 reorder, 또는 use arrows로 move. Tap 편집로 change 상세.', + 'chat.mobileStatus.editProjects.empty': '편집할 프로젝트 없음', + 'chat.mobileStatus.projects.empty': '프로젝트 없음', + 'chat.mobileStatus.projects.addAria': '프로젝트 추가', + 'chat.mobileStatus.projects.removeTitle': '프로젝트 제거', + 'chat.mobileStatus.projects.removeDescriptionPrefix': 'Are you sure you want로 제거', + 'chat.mobileStatus.projects.cancel': '취소', + 'chat.mobileStatus.projects.remove': '제거', + 'chat.mobileStatus.new': 'New', + 'chat.mobileStatus.noSessionsInProject': '이 프로젝트에 세션 없음', + 'chat.mobileStatus.swipeHint': '← Swipe here로 열기 사이드바 →', + 'chat.mobileStatus.toast.addProjectFailed': '프로젝트 추가 실패', + 'chat.mobileStatus.toast.selectValidDirectory': '유효한 디렉터리를 선택하세요.', + 'chat.mobileStatus.toast.selectDirectoryFailed': '디렉터리 선택 실패', + 'chat.toolOutputDialog.image.previousAria': 'Previous 이미지', + 'chat.toolOutputDialog.image.nextAria': '다음 이미지', + 'chat.toolOutputDialog.image.closeAria': 'image preview 닫기', + 'chat.toolOutputDialog.mermaid.missingSource': 'Missing Mermaid source URL.', + 'chat.toolOutputDialog.mermaid.loadFailed': 'load Mermaid diagram.할 수 없음', + 'chat.toolOutputDialog.mermaid.closeAria': 'diagram preview 닫기', + 'chat.toolOutputDialog.mermaid.loading': 'diagram 로드 중…', + 'chat.toolOutputDialog.mermaid.renderFailed': 'render Mermaid diagram.할 수 없음', + 'chat.toolOutputDialog.mermaid.retry': '다시 시도', + 'chat.toolOutputDialog.commandCompleted': '명령 완료됨 성공fully', + 'chat.toolOutputDialog.noOutputProduced': '출력 없음', + 'chat.toolPart.lspErrors': 'LSP 오류', + 'chat.toolPart.moreErrors': '+{count} more 오류', + 'chat.toolPart.error': '오류:', + 'chat.toolPart.awaitingResponse': 'Awaiting response…', + 'chat.toolPart.noOutputProduced': 'output produced 없음', + 'chat.toolPart.output': '출력', + 'chat.toolPart.openSubtask': '{type} subtask 열기', + 'chat.todo.total': 'Total', + 'chat.todo.inProgress': 'In Progress', + 'chat.todo.pending': '대기 중', + 'chat.todo.completed': '완료됨', + 'chat.todo.cancelled': '취소됨', + 'chat.permissionCard.workingDirectory': 'Working 디렉터리:', + 'chat.permissionCard.timeout': 'Timeout:', + 'chat.permissionCard.request': 'Request:', + 'chat.permissionCard.headers': 'Headers:', + 'chat.permissionCard.body': 'Body:', + 'chat.permissionCard.action': '작업:', + 'chat.permissionCard.details': '상세:', + 'chat.permissionCard.patterns': 'Patterns:', + 'chat.permissionToast.sessionFallback': '세션', + 'chat.permissionToast.permissionFallback': 'Permission details 사용할 수 없음', + 'chat.permissionToast.labels.session': '세션:', + 'chat.permissionToast.labels.permission': '권한:', + 'chat.permissionToast.actions.once': '한 번', + 'chat.permissionToast.actions.always': '항상', + 'chat.permissionToast.actions.deny': '거부', + 'chat.permissionToast.actions.approveOnceAria': 'Approve 한 번', + 'chat.permissionToast.actions.approveOnceAriaWithSession': 'Approve 한 번용 {session}', + 'chat.permissionToast.actions.approveAlwaysAria': 'Approve 항상', + 'chat.permissionToast.actions.approveAlwaysAriaWithSession': 'Approve 항상용 {session}', + 'chat.permissionToast.actions.denyAria': '거부 권한', + 'chat.permissionToast.actions.denyAriaWithSession': '거부 권한용 {session}', + 'chat.permissionRequest.required': '권한 required:', + 'chat.permissionRequest.actions.once': '한 번', + 'chat.permissionRequest.actions.always': '항상', + 'chat.permissionRequest.actions.reject': 'Reject', + 'chat.modelControls.provider': '프로바이더', + 'chat.modelControls.capability.toolCalling': 'Tool calling', + 'chat.modelControls.capability.reasoning': '추론', + 'chat.modelControls.modality.text': 'Text', + 'chat.modelControls.modality.image': '이미지', + 'chat.modelControls.modality.video': 'Video', + 'chat.modelControls.modality.audio': 'Audio', + 'chat.modelControls.modality.pdf': 'PDF', + 'chat.modelControls.capabilities': 'Capabilities', + 'chat.modelControls.modalities': 'Modalities', + 'chat.modelControls.input': '입력', + 'chat.modelControls.output': '출력', + 'chat.modelControls.limits': '한도', + 'chat.modelControls.context': '컨텍스트', + 'chat.modelControls.metadata': 'Metadata', + 'chat.modelControls.knowledge': 'Knowledge', + 'chat.modelControls.release': 'Release', + 'chat.modelControls.mode': '모드', + 'chat.modelControls.model': '모델', + 'chat.modelControls.temperature': 'Temperature', + 'chat.modelControls.topP': 'Top P', + 'chat.modelControls.permissions': '권한', + 'chat.modelControls.edit': '편집', + 'chat.modelControls.bash': 'Bash', + 'chat.modelControls.webFetch': 'WebFetch', + 'chat.modelControls.customPrompt': 'Custom 프롬프트', + 'chat.modelControls.selectModel': '모델 선택', + 'chat.modelControls.searchProvidersOrModels': '검색 프로바이더 또는 모델', + 'chat.modelControls.clearSearch': '검색 지우기', + 'chat.modelControls.current': '현재', + 'chat.modelControls.thinking': '추론', + 'chat.modelControls.default': '기본값', + 'chat.modelControls.selectAgent': '에이전트 선택', + 'chat.modelControls.costPerMillion': '비용 ($/1M 토큰)', + 'chat.modelControls.metadataUnavailable': '모델 metadata unavailable.', + 'chat.modelControls.addNewProvider': 'new 프로바이더 추가', + 'chat.modelControls.noAgentSelected': '에이전트 selected. 없음', + 'chat.modelControls.resetToDefault': 'Reset로 default', + 'chat.modelControls.searchModels': '모델 검색', + 'chat.modelControls.searchAgents': '검색 에이전트', + 'chat.modelControls.noModelsFound': '모델 없음', + 'chat.modelControls.favorites': '즐겨찾기', + 'chat.modelControls.recent': '최근', + 'chat.modelControls.addToFavorites': '즐겨찾기에 추가', + 'chat.modelControls.removeFromFavorites': '즐겨찾기에서 제거', + 'chat.modelControls.favoriteAria': 'Favorite', + 'chat.modelControls.unfavoriteAria': 'Unfavorite', + 'chat.modelControls.collapseProvider': '접기 프로바이더', + 'chat.modelControls.expandProvider': '펼치기 프로바이더', + 'chat.modelControls.keyboardHint': '↑↓ 이동 {thinking} • Enter 선택 • Esc 닫기', + 'chat.modelControls.keyboardHintThinking': '←→ thinking', + 'chat.modelControls.permissionLabel.custom': 'Custom', + 'chat.modelControls.permissionLabel.allow': '허용', + 'chat.modelControls.permissionLabel.deny': '거부', + 'chat.modelControls.permissionLabel.ask': '묻기', + 'chat.modelControls.modeValue.primary': 'Primary', + 'chat.modelControls.modeValue.subagent': 'Sub에이전트', + 'chat.modelControls.modeValue.all': 'All', + 'chat.modelControls.modeValue.none': '—', + 'chat.messageBody.subtask.title': 'Delegated 작업', + 'chat.messageBody.subtask.hidePrompt': '숨기기 프롬프트', + 'chat.messageBody.subtask.showPrompt': '표시 프롬프트', + 'chat.messageBody.subtask.openSession': 'subtask 세션 열기', + 'chat.messageBody.shellCommand.title': 'Shell 명령', + 'chat.messageBody.shellCommand.hideOutput': '숨기기 출력', + 'chat.messageBody.shellCommand.showOutput': '표시 출력', + 'chat.messageBody.shellCommand.copied': '복사됨', + 'chat.messageBody.shellCommand.copyOutput': '출력 복사', + 'commandPalette.input.placeholder': '명령 입력 또는 검색…', + 'commandPalette.empty.noResults': 'results found. 없음', + 'commandPalette.section.sessions': '세션', + 'commandPalette.section.view': 'View', + 'commandPalette.section.theme': '테마', + 'commandPalette.section.settings': '설정', + 'commandPalette.section.recentSessions': 'Recent 세션', + 'commandPalette.item.quickOpen': 'Quick 열기', + 'commandPalette.item.newSession': '새 세션', + 'commandPalette.item.newWorktreeDraft': '새 워크트리 Draft', + 'commandPalette.item.showSessionSwitcher': '표시 세션 Switcher', + 'commandPalette.item.toggleSidebar': '토글 사이드바', + 'commandPalette.item.toggleRightSidebar': '토글 Right 사이드바', + 'commandPalette.item.showGitRightSidebar': '표시 Git에서 Right 사이드바', + 'commandPalette.item.showFilesRightSidebar': '표시 파일에서 Right 사이드바', + 'commandPalette.item.showContextUsage': '표시 컨텍스트 Usage', + 'commandPalette.item.showPlan': '표시 Plan', + 'commandPalette.item.toggleTerminal': '토글 터미널', + 'commandPalette.item.collapseTerminal': '접기 터미널', + 'commandPalette.item.expandTerminal': '펼치기 터미널', + 'commandPalette.item.keyboardShortcuts': '키보드 단축키', + 'commandPalette.item.themeLight': 'Light', + 'commandPalette.item.themeDark': 'Dark', + 'commandPalette.item.themeSystem': 'System', + 'commandPalette.item.openSettings': '설정... 열기', + 'commandPalette.session.untitled': '제목 없는 세션', + 'commandPalette.settingsGroup.appearance': 'Appearance', + 'commandPalette.settingsGroup.projects': '프로젝트', + 'commandPalette.settingsGroup.general': 'General', + 'commandPalette.settingsGroup.opencode': 'OpenChamber', + 'commandPalette.settingsGroup.git': 'Git', + 'commandPalette.settingsGroup.skills': '스킬', + 'commandPalette.settingsGroup.usage': '사용량', + 'commandPalette.settingsGroup.advanced': 'Advanced', + 'commandPalette.settingsPage.home': 'Home', + 'commandPalette.settingsPage.projects': '프로젝트', + 'commandPalette.settingsPage.remoteInstances': '리모트 Instances', + 'commandPalette.settingsPage.providers': '프로바이더', + 'commandPalette.settingsPage.usage': '사용량', + 'commandPalette.settingsPage.agents': '에이전트', + 'commandPalette.settingsPage.commands': '명령', + 'commandPalette.settingsPage.mcp': 'MCP', + 'commandPalette.settingsPage.skillsInstalled': 'Installed 스킬', + 'commandPalette.settingsPage.skillsCatalog': '스킬 카탈로그', + 'commandPalette.settingsPage.git': 'Git', + 'commandPalette.settingsPage.appearance': 'Appearance', + 'commandPalette.settingsPage.chat': '채팅', + 'commandPalette.settingsPage.shortcuts': '키보드 단축키', + 'commandPalette.settingsPage.sessions': '세션', + 'commandPalette.settingsPage.magicPrompts': 'Magic 프롬프트', + 'commandPalette.settingsPage.notifications': 'Notifications', + 'commandPalette.settingsPage.voice': '음성', + 'commandPalette.settingsPage.tunnel': '리모트 터널', + 'quickOpenDialog.title': 'Quick 열기', + 'quickOpenDialog.description': '현재 프로젝트에서 파일을 빠르게 여세요.', + 'quickOpenDialog.input.placeholder': '파일 검색…', + 'quickOpenDialog.empty.openProjectFirst': '먼저 프로젝트를 여세요', + 'quickOpenDialog.empty.searchingFiles': '검색ing 파일…', + 'quickOpenDialog.empty.noMatchingFiles': 'matching 파일 없음', + 'quickOpenDialog.empty.noMatchingRecentFiles': 'recent 파일 없음', + 'quickOpenDialog.group.files': '파일', + 'quickOpenDialog.group.recentFiles': 'Recent 파일', + 'openCodeStatusDialog.title': 'OpenCode Status', + 'openCodeStatusDialog.description': 'Inspect 현재 OpenCode status 및 진단 정보.', + 'openCodeStatusDialog.actions.copy': '복사', + 'openCodeStatusDialog.empty.noData': 'data. 없음', + 'openCodeStatusDialog.toast.copiedTitle': '복사됨', + 'openCodeStatusDialog.toast.copiedDescription': 'Status copied로 clipboard', + 'openCodeStatusDialog.toast.copyFailed': 'copy status 실패', + 'saveProjectPlanDialog.title': '저장 프로젝트 Plan', + 'saveProjectPlanDialog.description': '이 플랜을 프로젝트에 Markdown 파일로 저장합니다.', + 'saveProjectPlanDialog.field.title': '제목', + 'saveProjectPlanDialog.field.titlePlaceholder': 'Plan title', + 'saveProjectPlanDialog.field.contentPreview': 'Content 미리보기', + 'saveProjectPlanDialog.actions.cancel': '취소', + 'saveProjectPlanDialog.actions.save': '저장', + 'saveProjectPlanDialog.actions.saving': '저장 중…', + 'branchPickerDialog.title': '브랜치 Picker', + 'branchPickerDialog.description.localBranchesForProject': '로컬 브랜치es용 {project}', + 'branchPickerDialog.description.selectProject': '브랜치를 볼 프로젝트를 선택하세요', + 'branchPickerDialog.search.placeholder': '브랜치es 검색…', + 'branchPickerDialog.search.renameBranchPlaceholder': 'Rename 브랜치', + 'branchPickerDialog.state.noProjectSelected': '프로젝트 selected 없음', + 'branchPickerDialog.state.loadingBranches': '브랜치es 로드 중…', + 'branchPickerDialog.state.noMatchingBranches': 'matching 브랜치es 없음', + 'branchPickerDialog.state.noBranchesFound': '브랜치es 없음', + 'branchPickerDialog.badge.head': 'HEAD', + 'branchPickerDialog.badge.worktree': '워크트리', + 'branchPickerDialog.actions.createWorktreeAria': '브랜치에서 워크트리 생성', + 'branchPickerDialog.actions.renameAria': 'Rename 브랜치', + 'branchPickerDialog.actions.deleteAria': '브랜치 삭제', + 'branchPickerDialog.actions.deleteWorktreeAria': '워크트리 제거', + 'branchPickerDialog.actions.confirmRenameAria': '확인 rename', + 'branchPickerDialog.actions.cancelRenameAria': '취소 rename', + 'branchPickerDialog.actions.confirmDeleteAria': '확인 삭제 브랜치', + 'branchPickerDialog.actions.cancelDeleteAria': '취소 삭제 브랜치', + 'branchPickerDialog.actions.deletePrompt': '삭제', + 'branchPickerDialog.actions.forceDeletePrompt': 'Force 삭제', + 'branchPickerDialog.tooltip.createWorktree': '워크트리 생성', + 'branchPickerDialog.tooltip.worktreeAlreadyExists': '워크트리 al준비됨 exists', + 'branchPickerDialog.tooltip.rename': 'Rename 브랜치', + 'branchPickerDialog.tooltip.renameDisabledForRoot': '루트 브랜치는 이름을 바꿀 수 없음', + 'branchPickerDialog.tooltip.delete': '브랜치 삭제', + 'branchPickerDialog.tooltip.deleteCurrentBranch': '현재 브랜치는 삭제할 수 없음', + 'branchPickerDialog.tooltip.deleteDisabledForRoot': '루트 브랜치는 삭제할 수 없음', + 'branchPickerDialog.tooltip.deleteWorktree': '워크트리 제거', + 'branchPickerDialog.tooltip.deleteWorktreeRootProtected': '루트 워크트리는 제거할 수 없음', + 'branchPickerDialog.toast.branchRenamed': '브랜치 renamed', + 'branchPickerDialog.toast.failedToRenameBranch': 'rename 브랜치 실패', + 'branchPickerDialog.toast.branchDeleted': '브랜치 삭제됨', + 'branchPickerDialog.toast.branchNotMerged': '브랜치가 아직 완전히 merge되지 않았습니다', + 'branchPickerDialog.toast.confirmAgainToForceDelete': '확인 again로 force 삭제', + 'branchPickerDialog.toast.failedToDeleteBranch': '삭제 브랜치 실패', + 'branchPickerDialog.toast.worktreeCreated': '워크트리 생성됨', + 'branchPickerDialog.toast.failedToCreateWorktree': 'create 워크트리 실패', + 'branchPickerDialog.error.failedToLoad': 'load 브랜치es 실패', + 'branchPickerDialog.error.renameRejected': '이름 변경이 거부되었습니다', + 'branchPickerDialog.error.renameFailed': 'rename 브랜치 실패', + 'branchPickerDialog.error.deleteRejected': '삭제가 거부되었습니다', + 'branchPickerDialog.error.deleteFailed': '삭제 브랜치 실패', + 'branchPickerDialog.error.createWorktreeFailed': 'create 워크트리 실패', + 'projectEditDialog.title': '편집 프로젝트', + 'projectEditDialog.field.name': '이름', + 'projectEditDialog.field.namePlaceholder': '프로젝트 name', + 'projectEditDialog.field.color': 'Color', + 'projectEditDialog.field.icon': 'Icon', + 'projectEditDialog.field.preview': '미리보기', + 'projectEditDialog.field.iconBackground': 'Icon Background', + 'projectEditDialog.field.iconBackgroundAria': '프로젝트 icon background color', + 'projectEditDialog.option.none': 'None', + 'projectEditDialog.actions.uploadIcon': 'Upload Icon', + 'projectEditDialog.actions.uploading': 'Uploading…', + 'projectEditDialog.actions.discoverFavicon': 'Discover Favicon', + 'projectEditDialog.actions.discovering': 'Discovering…', + 'projectEditDialog.actions.removeProjectIcon': '프로젝트 Icon 제거', + 'projectEditDialog.actions.removing': '제거 중…', + 'projectEditDialog.actions.undoRemove': 'Undo 제거', + 'projectEditDialog.actions.clear': 'Clear', + 'projectEditDialog.actions.cancel': '취소', + 'projectEditDialog.actions.save': '저장', + 'projectEditDialog.toast.failedToUploadIcon': 'upload 프로젝트 icon 실패', + 'projectEditDialog.toast.iconUpdated': '프로젝트 icon 업데이트됨', + 'projectEditDialog.toast.failedToRemoveIcon': 'remove 프로젝트 icon 실패', + 'projectEditDialog.toast.iconRemoved': '프로젝트 아이콘 제거됨', + 'projectEditDialog.toast.failedToDiscoverIcon': 'discover 프로젝트 icon 실패', + 'projectEditDialog.toast.customIconAlreadySet': '이 프로젝트에는 이미 사용자 지정 아이콘이 설정되어 있습니다', + 'projectEditDialog.toast.iconDiscovered': '프로젝트 icon discovered', + 'agentManager.sidebar.search.placeholder': '에이전트 Groups 검색…', + 'agentManager.sidebar.actions.newAgentGroup': '새 에이전트 Group', + 'agentManager.sidebar.actions.more': '… More ({count})', + 'agentManager.sidebar.actions.showLess': '표시 less', + 'agentManager.sidebar.section.agentGroups': '에이전트 Groups', + 'agentManager.sidebar.state.loading': '로드 중…', + 'agentManager.sidebar.state.noGroupsFound': 'groups 없음', + 'agentManager.sidebar.state.noGroupsYet': '에이전트 groups yet 없음', + 'agentManager.sidebar.state.createToGetStarted': '시작하려면 새 에이전트 그룹을 만드세요', + 'agentManager.sidebar.item.modelCountSingle': '{count} 모델', + 'agentManager.sidebar.item.modelCountPlural': '{count} 모델', + 'agentManager.sidebar.item.groupMenuAria': 'Group menu', + 'agentManager.sidebar.item.delete': '삭제', + 'agentManager.sidebar.relativeTime.now': 'now', + 'agentManager.sidebar.relativeTime.minutes': '{count}m', + 'agentManager.sidebar.relativeTime.hours': '{count}h', + 'agentManager.sidebar.relativeTime.days': '{count}d', + 'agentManager.sidebar.dialog.deleteGroupTitle': '에이전트 group 삭제', + 'agentManager.sidebar.dialog.deleteGroupDescription': '"{group}"을(를) 삭제할까요? 이 그룹의 모든 워크트리와 세션이 제거됩니다.', + 'agentManager.sidebar.dialog.cancel': '취소', + 'agentManager.sidebar.dialog.delete': '삭제', + 'agentManager.sidebar.dialog.deleting': 'Deleting…', + 'agentManager.sidebar.toast.deletingGroup': 'Deleting "{group}"…', + 'agentManager.sidebar.toast.deletedGroup': '삭제됨 "{group}"', + 'agentManager.sidebar.toast.failedToDeleteGroup': 'fully 삭제 "{group}" 실패', + 'agentManager.detail.header.modelCountSingle': '{count} 모델', + 'agentManager.detail.header.modelCountPlural': '{count} 모델', + 'agentManager.detail.header.noBranch': '브랜치 없음', + 'agentManager.detail.actions.worktreeActionsAria': '워크트리 작업', + 'agentManager.detail.actions.removeThisWorktree': '이 워크트리 제거', + 'agentManager.detail.actions.keepThisRemoveOthers': '이 워크트리만 남기고 나머지 제거', + 'agentManager.detail.actions.copyWorktreePath': '워크트리 경로 복사', + 'agentManager.detail.dialog.removeWorktreeTitle': '워크트리 제거', + 'agentManager.detail.dialog.removeOtherWorktreesTitle': '다른 워크트리 제거', + 'agentManager.detail.dialog.removeWorktreeDescription': '"{label}"을(를) 제거할까요? 이 워크트리의 모든 세션과 워크트리 자체가 삭제됩니다.', + 'agentManager.detail.dialog.removeOtherWorktreesDescription': '"{label}"은 유지하고 "{group}"의 다른 워크트리를 제거합니다.', + 'agentManager.detail.dialog.cancel': '취소', + 'agentManager.detail.dialog.remove': '제거', + 'agentManager.detail.dialog.removeOthers': '나머지 제거', + 'agentManager.detail.dialog.working': '처리 중…', + 'agentManager.detail.state.loadingSessionFor': '{label} 세션 로드 중', + 'agentManager.detail.state.sessionId': '세션 ID: {id}', + 'agentManager.detail.state.noSessionsInGroup': '이 그룹에 세션 없음', + 'agentManager.detail.toast.noWorktreePath': '워크트리 경로 없음', + 'agentManager.detail.toast.worktreePathCopied': '워크트리 경로 복사됨', + 'agentManager.detail.toast.failedToCopyPath': '경로 복사 실패', + 'agentManager.detail.toast.removingWorktree': '워크트리 제거 중…', + 'agentManager.detail.toast.removingOtherWorktrees': '다른 워크트리 제거 중…', + 'agentManager.detail.toast.failedToFullyRemoveWorktree': '워크트리 완전 제거 실패', + 'agentManager.detail.toast.worktreeRemoved': '워크트리 제거됨', + 'agentManager.detail.toast.otherWorktreesRemoved': '다른 워크트리 제거됨', + 'agentManager.empty.groupName.label': '그룹 이름', + 'agentManager.empty.groupName.placeholder': '예: feature-auth, bugfix-login', + 'agentManager.empty.groupName.description': '워크트리 디렉터리와 브랜치 이름에 사용됩니다', + 'agentManager.empty.baseBranch.label': '베이스 브랜치', + 'agentManager.empty.baseBranch.description': '생성 new 브랜치es에서 {branch}', + 'agentManager.empty.setupCommands.label': '셋업 명령', + 'agentManager.empty.setupCommands.configured': '{count} configured', + 'agentManager.empty.setupCommands.description': '명령 실행에서 each new 워크트리. Use $ROOT_PROJECT_PATH용 프로젝트 root.', + 'agentManager.empty.setupCommands.loading': '로드 중…', + 'agentManager.empty.setupCommands.commandPlaceholder': '예: bun install', + 'agentManager.empty.setupCommands.removeCommandAria': '명령 제거', + 'agentManager.empty.setupCommands.addCommand': '명령 추가', + 'agentManager.empty.agent.label': '에이전트', + 'agentManager.empty.agent.description': '설정된 기본 에이전트를 사용합니다', + 'agentManager.empty.models.label': '모델', + 'agentManager.empty.models.addModel': '모델 추가', + 'agentManager.empty.models.selectedSingle': '{count} 모델 선택ed', + 'agentManager.empty.models.selectedPlural': '{count} 모델 선택ed', + 'agentManager.empty.prompt.label': '프롬프트', + 'agentManager.empty.prompt.placeholder': '무엇이든 물어보세요…', + 'agentManager.empty.prompt.addAttachmentAria': '첨부ment 추가', + 'agentManager.empty.actions.startAgentGroupAria': '시작 에이전트 Group', + 'agentManager.empty.toast.fileTooLarge': '파일 "{fileName}"이 너무 큽니다(최대 10MB)', + 'agentManager.empty.toast.failedToAttach': '첨부 "{fileName}" 실패', + 'agentManager.empty.toast.attachedSingle': '첨부됨 {count} 파일', + 'agentManager.empty.toast.attachedPlural': '첨부됨 {count} 파일', + 'agentManager.empty.toast.failedToCreateGroup': 'create 에이전트 group 실패', + 'openInApp.actions.open': '열기', + 'openInApp.actions.openInAria': 'in {app} 열기', + 'openInApp.actions.chooseAppAria': '선택 app로 열기', + 'openInApp.actions.copyPath': '경로 복사', + 'openInApp.actions.refreshApps': '앱 새로고침', + 'openInApp.toast.pathCopied': '경로 copied로 clipboard', + 'projectActions.actions.addActionAria': 'action 추가', + 'projectActions.actions.addAction': 'action 추가', + 'projectActions.actions.addNewAction': 'new action 추가', + 'projectActions.actions.chooseActionAria': '선택 프로젝트 작업', + 'projectActions.actions.runNamedAria': '실행 {name}', + 'projectActions.actions.stopNamedAria': '중지 {name}', + 'projectActions.label.fallbackAction': '작업', + 'projectActions.toast.openedUrlFromOutput': '열기ed URL에서 작업 출력', + 'projectActions.toast.openedForwardedUrl': '열기ed forwarded URL', + 'projectActions.toast.openedActionUrl': '열기ed 작업 URL', + 'projectActions.error.noActiveDirectory': 'active 디렉터리 없음', + 'projectActions.error.noActiveDirectoryForAction': 'active 디렉터리 for action 없음', + 'projectActions.error.failedToCreateTerminalSession': 'create 터미널 세션 실패', + 'projectActions.error.invalidCustomUrlFormat': '유효하지 않은 custom URL format', + 'projectActions.error.selectedDesktopSshForwardUnavailable': '선택한 데스크톱 SSH 포워딩을 사용할 수 없음', + 'projectActions.error.failedToRunAction': 'run action 실패', + 'mcpDropdown.title': 'MCP Servers', + 'mcpDropdown.actions.refreshAria': '새로고침', + 'mcpDropdown.actions.openAria': 'MCP servers', + 'mcpDropdown.statusAria': 'MCP status', + 'mcpDropdown.status.unknown': '알 수 없음', + 'mcpDropdown.status.connected': 'Connected', + 'mcpDropdown.status.failed': '실패: {error}', + 'mcpDropdown.status.unknownError': '알 수 없음 오류', + 'mcpDropdown.status.needsAuth': 'Needs authentication', + 'mcpDropdown.status.needsRegistration': 'Needs registration: {error}', + 'mcpDropdown.empty.configureInConfig': '설정 MCP servers에서 OpenCode config.', + 'sessionAuth.error.rateLimitTitle': 'Too many attempts', + 'sessionAuth.error.networkTitle': 'reach server할 수 없음', + 'sessionAuth.error.rateLimitDescriptionSingle': 'Please wait {minutes} minute before trying again.', + 'sessionAuth.error.rateLimitDescriptionPlural': 'Please wait {minutes} minutes before trying again.', + 'sessionAuth.error.networkDescription': 'UI 세션을 확인할 수 없습니다. 서비스가 실행 중인지 확인하고 다시 시도하세요.', + 'sessionAuth.error.retry': '다시 시도', + 'sessionAuth.error.passkeySetupFailed': '패스키 setup 실패.', + 'sessionAuth.error.incorrectPassword': 'Incorrect password. Try again.', + 'sessionAuth.error.unexpectedResponse': '서버에서 예상치 못한 응답을 받았습니다.', + 'sessionAuth.error.networkRetry': 'Network 오류. Check connection 및 다시 시도.', + 'sessionAuth.error.passkeySignInCanceled': '패스키 로그인이 취소되었습니다.', + 'sessionAuth.error.enterPasswordForPasskey': '패스키를 추가하려면 비밀번호를 입력하세요.', + 'sessionAuth.locked.tunnelTitle': '터널 access 필요', + 'sessionAuth.locked.unlockTitle': 'Unlock OpenChamber', + 'sessionAuth.locked.tunnelDescription': '데스크톱 앱의 일회용 연결 링크로 이 터널을 여세요.', + 'sessionAuth.locked.passwordDescription': '이 세션은 비밀번호로 보호됩니다.', + 'sessionAuth.locked.hostSwitcherHint': '원격에 연결할 수 없으면 로컬을 사용하세요.', + 'sessionAuth.actions.cancelPasskey': '취소 패스키', + 'sessionAuth.actions.usePasskey': 'Use 패스키', + 'sessionAuth.actions.unlockingAria': 'Unlocking', + 'sessionAuth.actions.unlockAria': 'Unlock', + 'sessionAuth.actions.trustDevice': '이 디바이스 신뢰', + 'sessionAuth.actions.trustDeviceAria': '이 디바이스 신뢰', + 'sessionAuth.actions.cancelPasskeySetup': '취소 패스키 setup', + 'sessionAuth.actions.addPasskey': '패스키 추가', + 'sessionAuth.password.placeholder': '비밀번호 입력', + 'sessionAuth.toast.passkeyAdded': '패스키 added', + 'sessionAuth.toast.passkeySetupCanceled': '패스키 setup 취소됨', + 'desktopHostSwitcher.title': '인스턴스', + 'desktopHostSwitcher.description': 'Switch between 로컬 및 리모트 OpenChamber servers', + 'desktopHostSwitcher.header.current': '현재', + 'desktopHostSwitcher.header.default': '기본값', + 'desktopHostSwitcher.header.currentColon': 'Current:', + 'desktopHostSwitcher.header.currentDefaultColon': '현재 default:', + 'desktopHostSwitcher.status.connected': 'Connected', + 'desktopHostSwitcher.status.authRequired': 'Auth 필요', + 'desktopHostSwitcher.status.wrongService': 'Wrong service', + 'desktopHostSwitcher.status.unreachable': 'Unreachable', + 'desktopHostSwitcher.status.unknown': '알 수 없음', + 'desktopHostSwitcher.status.ping': ' · {ms}ms ping', + 'desktopHostSwitcher.statusAria': 'Instance status', + 'desktopHostSwitcher.sshPhase.ready': '준비됨', + 'desktopHostSwitcher.sshPhase.error': '오류', + 'desktopHostSwitcher.sshPhase.reconnecting': 'Reconnecting', + 'desktopHostSwitcher.sshPhase.resolvingConfig': 'Resolving config', + 'desktopHostSwitcher.sshPhase.checkingAuth': '인증 확인 중', + 'desktopHostSwitcher.sshPhase.connectingSsh': 'Connecting SSH', + 'desktopHostSwitcher.sshPhase.probingRemote': 'Probing 리모트', + 'desktopHostSwitcher.sshPhase.installing': '설치 중', + 'desktopHostSwitcher.sshPhase.updating': 'Updating', + 'desktopHostSwitcher.sshPhase.detectingServer': 'Detecting server', + 'desktopHostSwitcher.sshPhase.startingServer': '시작ing server', + 'desktopHostSwitcher.sshPhase.forwardingPorts': 'Forwarding ports', + 'desktopHostSwitcher.sshPhase.idle': '대기 중', + 'desktopHostSwitcher.ssh.needInstancesHint': 'SSH 인스턴스가 필요하신가요? 설정에서 관리하세요.', + 'desktopHostSwitcher.ssh.instanceFallback': 'SSH instance', + 'desktopHostSwitcher.ssh.connectingTo': 'Connecting로 {host}', + 'desktopHostSwitcher.actions.refresh': '새로고침', + 'desktopHostSwitcher.actions.refreshInstancesAria': '새로고침 instances', + 'desktopHostSwitcher.actions.remoteSsh': '리모트 SSH', + 'desktopHostSwitcher.actions.instanceActionsAria': 'Instance 작업', + 'desktopHostSwitcher.actions.edit': '편집', + 'desktopHostSwitcher.actions.delete': '삭제', + 'desktopHostSwitcher.actions.connect': 'Connect', + 'desktopHostSwitcher.actions.defaultInstanceAria': 'Default instance', + 'desktopHostSwitcher.actions.setAsDefaultAria': 'Set as default', + 'desktopHostSwitcher.actions.setAsDefault': 'Set as default', + 'desktopHostSwitcher.actions.openInNewWindowAria': 'in new window 열기', + 'desktopHostSwitcher.actions.openInNewWindow': 'in new window 열기', + 'desktopHostSwitcher.actions.addInstance': 'instance 추가', + 'desktopHostSwitcher.actions.cancel': '취소', + 'desktopHostSwitcher.actions.save': '저장', + 'desktopHostSwitcher.actions.add': '추가', + 'desktopHostSwitcher.actions.switchToLocal': 'Switch로 로컬', + 'desktopHostSwitcher.actions.retry': '다시 시도', + 'desktopHostSwitcher.actions.switchInstanceAria': 'Switch instance', + 'desktopHostSwitcher.actions.switchInstance': 'Switch instance', + 'desktopHostSwitcher.actions.switchToAria': 'Switch로 {instance}', + 'desktopHostSwitcher.field.labelPlaceholder': 'Label', + 'desktopHostSwitcher.field.labelOptionalPlaceholder': 'Label (optional)', + 'desktopHostSwitcher.field.urlPlaceholder': 'https://host:port', + 'desktopHostSwitcher.state.limitedOnPage': '이 페이지에서는 인스턴스 전환 기능이 제한됩니다. 복구하려면 로컬을 사용하세요.', + 'desktopHostSwitcher.state.loading': '로드 중…', + 'desktopHostSwitcher.state.instanceUnreachable': 'Instance unreachable', + 'desktopHostSwitcher.edit.title': '편집 instance', + 'desktopHostSwitcher.add.title': 'instance 추가', + 'desktopHostSwitcher.error.failedToSave': 'save 실패', + 'desktopHostSwitcher.error.failedToLoad': 'load 실패', + 'desktopHostSwitcher.error.invalidUrl': '유효하지 않은 URL(http/https 필요)', + 'desktopHostSwitcher.error.failedToOpenNewWindow': 'open new window 실패', + 'desktopHostSwitcher.instance.local': '로컬', + 'desktopHostSwitcher.instance.fallback': '인스턴스', + 'desktopHostSwitcher.startup.title': 'Default SSH instance 사용할 수 없음', + 'desktopHostSwitcher.startup.connectingTo': 'Connecting로 {host}…', + 'desktopHostSwitcher.startup.failed': '기본 SSH 인스턴스에 연결하지 못했습니다.', + 'desktopHostSwitcher.toast.sshConnected': 'SSH instance "{host}" connected', + 'desktopHostSwitcher.toast.sshFailedToConnect': 'SSH instance "{host}" 실패로 connect', + 'desktopHostSwitcher.toast.instanceUnreachable': '인스턴스 "{host}"에 연결할 수 없음', + 'errorBoundary.title': 'Something went wrong', + 'errorBoundary.description': 'The application encountered an unexpected 오류. This has been logged용 debugging.', + 'errorBoundary.state.unknownError': '알 수 없음 오류', + 'errorBoundary.state.componentStackLabel': 'Component stack:', + 'errorBoundary.actions.errorDetails': '오류 상세', + 'errorBoundary.actions.tryAgain': 'Try again', + 'errorBoundary.actions.copy': '복사', + 'errorBoundary.actions.copied': '복사됨', + 'jsonTreeView.error.emptyJson': '비어 있음 JSON content', + 'jsonTreeView.error.invalidJson': '유효하지 않은 JSON', + 'jsonTreeView.error.invalidJsonTitle': '유효하지 않은 JSON', + 'jsonTreeView.actions.expandAll': '펼치기 All', + 'jsonTreeView.actions.collapseAll': '접기 All', + 'numberInput.actions.decreaseAria': 'Decrease value', + 'numberInput.actions.increaseAria': 'Increase value', + 'goToLineDialog.field.linePlaceholderShort': '줄', + 'goToLineDialog.field.linePlaceholder': '줄 number', + 'goToLineDialog.actions.go': 'Go', + 'goToLineDialog.helper.editorUnavailable': '편집or unavailable.', + 'goToLineDialog.helper.currentLineRange': '현재 줄: {current}. 1~{max} 사이의 줄 번호를 입력하세요.', + 'goToLineDialog.helper.goToLine': 'Go로 줄 {line}', + 'dialog.common.actions.close': '닫기', + 'filesView.toast.relativePathCopied': '상대 경로 복사됨', + 'filesView.tree.menu.copyRelativePath': '상대 경로 복사', + 'multiRun.branchSelector.placeholder.selectSourceBranch': 'source 브랜치... 선택', + 'multiRun.branchSelector.status.loadingBranches': '브랜치es 로드 중…', + 'multiRun.branchSelector.status.noBranchesFound': '브랜치es 없음', + 'multiRun.branchSelector.status.notInGitRepository': 'Git 레포지토리가 아닙니다.', + 'multiRun.branchSelector.groups.localBranches': '로컬 브랜치es', + 'multiRun.branchSelector.groups.remoteBranches': '리모트 브랜치es', + 'multiRun.window.actions.closeAria': '멀티런 닫기', + 'multiRun.window.description': 'OpenChamber 멀티런 창.', + 'voice.status.idle': '음성 준비됨', + 'voice.status.listening': '듣는 중…', + 'voice.status.processing': '처리 중…', + 'voice.status.speaking': '말하는 중…', + 'voice.status.error': '음성 오류', + 'voice.status.conversationModeActiveAria': 'Conversation 모드 active', + 'onboarding.common.actions.back': 'Back', + 'onboarding.common.copyToClipboard': '클립보드에 복사', + 'onboarding.common.status.copiedToClipboard': 'Copied로 clipboard', + 'onboarding.chooser.title': 'Welcome로 OpenChamber', + 'onboarding.chooser.description': '선택 how you want로 connect로 get 시작됨.', + 'onboarding.chooser.tabs.localInstall': '로컬 Install', + 'onboarding.chooser.tabs.connectRemote': 'Connect 리모트', + 'onboarding.localSetup.title': 'Setting Up OpenCode', + 'onboarding.localSetup.description': 'Install OpenCode CLI로 continue.', + 'onboarding.localSetup.dialog.selectOpencodeBinary': 'opencode binary 선택', + 'onboarding.localSetup.errors.cliNotReady': 'OpenCode CLI가 아직 준비되지 않았습니다. 설치가 완료되었는지 확인하고 다시 시도하세요.', + 'onboarding.localSetup.errors.detectionFailed': 'Detection 실패', + 'onboarding.localSetup.windows.title': '창 setup (WSL recommended)', + 'onboarding.localSetup.windows.stepInstallWsl': '필요하면 WSL 설치:', + 'onboarding.localSetup.windows.stepInstallWslSuffix': 'in PowerShell.', + 'onboarding.localSetup.windows.stepRunInstallInWsl': '아래 설치 명령을 WSL 터미널에서 실행하세요.', + 'onboarding.localSetup.windows.stepSetBinaryPath': 'OpenChamber가 OpenCode를 자동으로 찾지 못하면 아래에 바이너리 경로를 설정하세요.', + 'onboarding.localSetup.docs.windows': 'View 창 + WSL documentation', + 'onboarding.localSetup.docs.default': 'View documentation', + 'onboarding.localSetup.actions.checking': '확인 중…', + 'onboarding.localSetup.actions.checkAndContinue': 'I\'ve 완료됨 installation, check 및 continue', + 'onboarding.localSetup.helper.checkAndContinue': 'OpenCode CLI를 사용할 수 있으면 확인을 누르세요. 성공하면 자동으로 메인 화면으로 이동합니다.', + 'onboarding.localSetup.field.alreadyInstalled': '이미 설치되어 있나요? OpenCode CLI 경로 설정:', + 'onboarding.localSetup.actions.browse': 'Browse', + 'onboarding.localSetup.actions.apply': '적용', + 'onboarding.localSetup.helper.saveAndReload': '저장s로 OpenChamber 설정 및 reloads OpenCode configuration.', + 'onboarding.localSetup.remotePreference': '원격 서버를 사용하시겠어요?', + 'onboarding.localSetup.actions.connectRemoteServer': 'Connect로 리모트 Server →', + 'onboarding.localSetup.windows.hintInstallInWsl': 'On 창, install 및 실행 OpenCode에서 WSL용 best compatibility.', + 'onboarding.localSetup.windows.hintDetectionFailed': '감지에 실패하면 native 경로(opencode.cmd/opencode.exe), wsl.exe 또는 wsl:/usr/local/bin/opencode를 설정하세요.', + 'onboarding.localSetup.hint.ensurePath': '이미 설치되어 있나요? opencode가 PATH에 있는지 확인하세요.', + 'onboarding.localSetup.hint.setEnv': 'Or set OPENCODE_BINARY environment variable.', + 'onboarding.localSetup.hint.missingRuntime': '"env: node: No such file or directory" 또는 "env: bun: No such file or directory"가 보이면 해당 런타임을 설치하거나 PATH에 있는지 확인하세요.', + 'onboarding.remoteConnection.title': 'Connect로 리모트 Server', + 'onboarding.remoteConnection.titleRecovery': '다른 서버에 연결', + 'onboarding.remoteConnection.description': '연결할 OpenChamber 서버 주소를 입력하세요.', + 'onboarding.remoteConnection.field.serverAddress': 'Server Address', + 'onboarding.remoteConnection.field.serverAddressPlaceholder': 'https://your-server.example.com:4096', + 'onboarding.remoteConnection.field.nameOptional': 'Name (optional)', + 'onboarding.remoteConnection.field.namePlaceholder': 'My 리모트 Server', + 'onboarding.remoteConnection.errors.connectionTestFailed': 'Connection test 실패', + 'onboarding.remoteConnection.errors.failedToSaveConnection': 'save connection 실패', + 'onboarding.remoteConnection.status.connectedSuccessfully': 'Connected 성공fully ({latencyMs}ms)', + 'onboarding.remoteConnection.status.authWarning': 'Server requires authentication. You can still connect.', + 'onboarding.remoteConnection.status.connectionFailed': 'Connection 실패', + 'onboarding.remoteConnection.status.suggestionsUnreachable': '서버 주소를 확인하고, 서버가 실행 중인지와 네트워크 연결을 점검하세요.', + 'onboarding.remoteConnection.status.suggestionsWrongService': 'URL이 OpenChamber 서버를 가리키는지 확인하거나 서버 관리자에게 문의하세요.', + 'onboarding.remoteConnection.actions.testing': 'Testing…', + 'onboarding.remoteConnection.actions.testConnection': 'Test Connection', + 'onboarding.remoteConnection.actions.connectAndRestart': 'Connect & 재시작', + 'onboarding.remoteConnection.actions.whatToDo': 'What would you like로 do?', + 'onboarding.remoteConnection.actions.chooseDifferentServer': '선택 different Server', + 'onboarding.remoteConnection.actions.useLocalInstead': 'Use 로컬 Instead', + 'onboarding.remoteConnection.probe.authMessage': 'Server requires authentication. You can still connect, but may need로 provide credentials.', + 'onboarding.remoteConnection.probe.wrongServiceMessage': '서버가 응답했지만 OpenChamber가 실행 중이 아닙니다. 주소가 OpenChamber 서버를 가리키는지 확인하세요.', + 'onboarding.remoteConnection.probe.unreachableMessage': '서버에 연결할 수 없습니다. 네트워크 연결과 서버 주소를 확인하세요.', + 'onboarding.desktopRecovery.localUnavailable.title': '로컬 OpenCode를 사용할 수 없음', + 'onboarding.desktopRecovery.localUnavailable.description': 'OpenCode CLI를 시작할 수 없거나 설치되어 있지 않습니다. OpenCode를 설치하거나 원격 서버에 연결하세요.', + 'onboarding.desktopRecovery.localUnavailable.retry': '다시 시도 로컬', + 'onboarding.desktopRecovery.localUnavailable.useLocal': 'Set Up 로컬', + 'onboarding.desktopRecovery.noDefaultConnection.title': 'Default Connection 없음', + 'onboarding.desktopRecovery.noDefaultConnection.description': '저장된 기본 연결을 찾을 수 없습니다. 연결 방식을 선택하세요.', + 'onboarding.desktopRecovery.remoteUnreachable.title': '리모트 Server Unreachable', + 'onboarding.desktopRecovery.remoteUnreachable.description': '"{host}"에 연결할 수 없습니다. 네트워크 연결과 서버 주소를 확인하세요.', + 'onboarding.desktopRecovery.remoteUnreachable.retry': '다시 시도 Connection', + 'onboarding.desktopRecovery.incompatibleServer.title': 'Incompatible Server', + 'onboarding.desktopRecovery.incompatibleServer.description': '"{host}"의 서버에서 OpenChamber가 실행 중이 아닙니다. 주소가 OpenChamber 서버를 가리키는지 확인하세요.', + 'onboarding.desktopRecovery.common.useLocal': 'Use 로컬', + 'onboarding.desktopRecovery.common.useRemote': 'Use 리모트', + 'onboarding.desktopRecovery.actions.retrying': '다시 시도ing…', + 'onboarding.desktopRecovery.actions.retryConnection': '다시 시도 Connection', + 'startup.initRecovery.title': '시작up 실패', + 'startup.initRecovery.description': 'OpenChamber 초기화를 완료할 수 없습니다. 서버가 실행 중인지 확인한 뒤 다시 시도하세요.', + 'startup.initRecovery.retry': '다시 시도', + 'startup.initRecovery.retrying': '다시 시도ing…', + 'onboarding.desktopRecovery.placeholders.remoteServer': '원격 서버', + 'onboarding.desktopRecovery.placeholders.unknownServer': '알 수 없음', + 'vscodeLayout.title.chat': '채팅', + 'vscodeLayout.title.newSession': '새 세션', + 'vscodeLayout.title.sessions': '세션', + 'vscodeLayout.title.sessionFallback': '세션', + 'vscodeLayout.actions.backToSessionsAria': 'Back로 세션', + 'vscodeLayout.actions.newSessionAria': '새 세션', + 'vscodeLayout.actions.openAgentManagerAria': '에이전트 Manager 열기', + 'vscodeLayout.actions.resizeSessionsSidebarAria': '세션 사이드바 크기 조정', + 'vscodeLayout.actions.settingsAria': '설정', + 'vscodeLayout.quota.title': '레이트 리밋', + 'vscodeLayout.quota.mode.used': '사용됨', + 'vscodeLayout.quota.mode.remaining': '남은 양', + 'vscodeLayout.quota.lastUpdated': 'Last updated {time}', + 'vscodeLayout.quota.noRateLimitsAvailable': '레이트 리밋 available. 없음', + 'vscodeLayout.quota.noRateLimitsReported': '레이트 리밋 레포지토리rted. 없음', + 'vscodeLayout.quota.actions.rateLimitsAria': '레이트 리밋', + 'vscodeLayout.quota.actions.showUsedAria': '표시 사용됨 quota', + 'vscodeLayout.quota.actions.showRemainingAria': '표시 남은 양 quota', + 'vscodeLayout.quota.actions.refreshAria': '새로고침 레이트 리밋', + 'updateDialog.header.updateAvailable': '업데이트 가능', + 'updateDialog.header.updating': 'Updating OpenChamber…', + 'updateDialog.changelog.title': 'What\'s new', + 'updateDialog.status.installingUpdate': '설치 중 update…', + 'updateDialog.status.serverRestarting': '서버 재시작 중…', + 'updateDialog.status.waitingForServer': '서버 대기 중…', + 'updateDialog.status.autoReloadHint': '업데이트가 완료되면 페이지가 자동으로 새로고침됩니다.', + 'updateDialog.fallback.updateViaTerminal': '또는 터미널에서 업데이트:', + 'updateDialog.actions.copyCommand': '명령어 복사', + 'updateDialog.actions.copied': '복사 완료!', + 'updateDialog.status.downloadingPayload': '업데이트 패키지 다운로드 중…', + 'updateDialog.actions.downloadUpdate': '업데이트 다운로드', + 'updateDialog.status.downloading': '다운로드 중…', + 'updateDialog.actions.restartToUpdate': '업데이트를 위해 재시작', + 'updateDialog.actions.updateNow': '지금 업데이트', + 'updateDialog.status.updating': '업데이트 중…', + 'updateDialog.error.updateFailed': '업데이트 실패', + 'updateDialog.error.takingLonger': '업데이트가 예상보다 오래 걸립니다. 잠시 기다린 뒤 새로고침하거나 `openchamber update`를 실행하세요.', + 'memoryDebugPanel.title': '디버그 패널', + 'memoryDebugPanel.tabs.memory': '메모리', + 'memoryDebugPanel.tabs.streaming': '스트리밍', + 'memoryDebugPanel.section.sessionsInMemory': '메모리 내 세션', + 'memoryDebugPanel.section.uiStreamingMetrics': 'UI 스트리밍 지표', + 'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code 브리지 지표', + 'memoryDebugPanel.section.noUiSamples': '아직 UI 스트리밍 샘플 없음. 스트림을 시작하고 이 패널을 열어 두세요.', + 'memoryDebugPanel.section.noVscodeSamples': 'VS Code 브리지 샘플 없음', + 'memoryDebugPanel.metric.totalMessages': '전체 메시지', + 'memoryDebugPanel.metric.cachedSessions': '캐시된 세션', + 'memoryDebugPanel.metric.viewportWindow': '뷰포트', + 'memoryDebugPanel.metric.zombieTimeout': '좀비 타임아웃', + 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 전체 요청', + 'memoryDebugPanel.metric.metrics': '지표', + 'memoryDebugPanel.metric.samples': '샘플', + 'memoryDebugPanel.metric.lastUpdate': '마지막 업데이트', + 'memoryDebugPanel.metric.uiMetrics': 'UI 지표', + 'memoryDebugPanel.metric.vscodeMetrics': 'VS Code 지표', + 'memoryDebugPanel.metric.messageListRenders': '메시지 목록 렌더', + 'memoryDebugPanel.metric.messageListStreamRenders': '메시지 목록 스트림 렌더', + 'memoryDebugPanel.metric.chatMessageRenders': '채팅 메시지 렌더', + 'memoryDebugPanel.metric.chatMessageStreamRenders': '채팅 메시지 스트림 렌더', + 'memoryDebugPanel.metric.chatMessageStaticDuringStream': '스트림 중 정적 채팅 메시지', + 'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': '활성 턴 외부 정적 채팅 메시지', + 'memoryDebugPanel.metric.messagesValue': '{count}개 메시지', + 'memoryDebugPanel.metric.minutesValue': '{count}분', + 'memoryDebugPanel.metric.msgsValue': '{count}개 메시지', + 'memoryDebugPanel.metric.countValue': '개수 {value}', + 'memoryDebugPanel.metric.avgValue': '평균 {value}', + 'memoryDebugPanel.metric.maxValue': '최대 {value}', + 'memoryDebugPanel.metric.totalValue': '합계 {value}', + 'memoryDebugPanel.actions.logState': '상태 기록', + 'memoryDebugPanel.actions.copyJson': 'JSON 복사', + 'memoryDebugPanel.tooltip.logCurrentState': '현재 메모리 상태를 브라우저 콘솔에 기록', + 'memoryDebugPanel.streaming.copy.copied': '스트리밍 디버그 JSON 복사 완료', + 'memoryDebugPanel.streaming.copy.failed': 'JSON 복사 실패', + 'memoryDebugPanel.streaming.copy.hint': 'UI와 VS Code 스트리밍 메트릭을 JSON으로 복사합니다', + 'memoryDebugPanel.common.idle': '유휴', + 'memoryDebugPanel.common.live': '실시간', + 'memoryDebugPanel.common.notAvailable': 'n/a', + 'memoryDebugPanel.common.untitled': '제목 없음', + 'directoryTree.field.newDirectoryPlaceholder': 'new_directory', + 'textarea.resizeHandleAria': '텍스트 영역 크기 조정', + 'sidebar.resize.leftPanelAria': '왼쪽 패널 크기 조정', + 'sidebar.resize.rightPanelAria': '오른쪽 패널 크기 조정', + 'mainLayout.mobile.closeDrawerAria': '드로어 닫기', + 'sortableTabsStrip.aria.tabs': '탭', + 'openChamberLogo.aria.logo': 'OpenChamber 로고', + 'markdownRenderer.table.actions.copyTitle': '표 복사', + 'markdownRenderer.table.actions.downloadTitle': '표 다운로드', + 'markdownRenderer.table.toast.downloadedAsFormat': '{format} 형식으로 다운로드됨', + 'markdownRenderer.mermaid.actions.copyTitle': '복사', + 'markdownRenderer.mermaid.actions.copySourceTitle': '소스 복사', + 'markdownRenderer.mermaid.actions.downloadSvgTitle': 'SVG 다운로드', + 'markdownRenderer.mermaid.toast.downloadFailed': '다이어그램 다운로드 실패', +}; diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.ts b/packages/ui/src/lib/i18n/messages/pt-BR.ts index f78976b5..80d62faf 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.ts @@ -8,6 +8,7 @@ export const dict: Record = { "common.language.ukrainian": "Ucraniano", "common.language.spanish": "Espanhol", "common.language.brazilianPortuguese": "Português brasileiro", + "common.language.korean": "Coreano", "common.revealPath.finder": "Mostrar no Finder", "common.revealPath.fileExplorer": "Abrir no File Explorer", "common.revealPath.fileManager": "Abrir no gerenciador de arquivos", diff --git a/packages/ui/src/lib/i18n/messages/uk.ts b/packages/ui/src/lib/i18n/messages/uk.ts index 71791e5e..a6767f65 100644 --- a/packages/ui/src/lib/i18n/messages/uk.ts +++ b/packages/ui/src/lib/i18n/messages/uk.ts @@ -8,6 +8,7 @@ export const dict: Record = { "common.language.ukrainian": "Українська", "common.language.spanish": "Іспанська", "common.language.brazilianPortuguese": "Бразильська португальська", + "common.language.korean": "Корейська", "common.revealPath.finder": "Показати у Finder", "common.revealPath.fileExplorer": "Відкрити у File Explorer", "common.revealPath.fileManager": "Відкрити у файловому менеджері", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.ts b/packages/ui/src/lib/i18n/messages/zh-CN.ts index 623d3a4a..5a714866 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.ts @@ -8,6 +8,7 @@ export const dict: Record = { 'common.language.ukrainian': '乌克兰语', 'common.language.spanish': '西班牙语', 'common.language.brazilianPortuguese': '巴西葡萄牙语', + 'common.language.korean': '韩语', 'common.revealPath.finder': '在 Finder 中显示', 'common.revealPath.fileExplorer': '在文件资源管理器中打开', 'common.revealPath.fileManager': '在文件管理器中打开', diff --git a/packages/ui/src/lib/i18n/runtime.ts b/packages/ui/src/lib/i18n/runtime.ts index f7f43dc2..52a5ffff 100644 --- a/packages/ui/src/lib/i18n/runtime.ts +++ b/packages/ui/src/lib/i18n/runtime.ts @@ -1,15 +1,16 @@ -export type Locale = 'en' | 'zh-CN' | 'uk' | 'es' | 'pt-BR'; +export type Locale = 'en' | 'zh-CN' | 'uk' | 'es' | 'pt-BR' | 'ko'; -export const LOCALES = ['en', 'zh-CN', 'uk', 'es', 'pt-BR'] as const satisfies readonly Locale[]; +export const LOCALES = ['en', 'zh-CN', 'uk', 'es', 'pt-BR', 'ko'] as const satisfies readonly Locale[]; export const DEFAULT_LOCALE: Locale = 'en'; -export const LOCALE_LABEL_KEYS: Record = { +export const LOCALE_LABEL_KEYS: Record = { en: 'common.language.english', 'zh-CN': 'common.language.simplifiedChinese', uk: 'common.language.ukrainian', es: 'common.language.spanish', 'pt-BR': 'common.language.brazilianPortuguese', + ko: 'common.language.korean', }; export const LOCALE_STORAGE_KEY = 'openchamber.i18n.v1'; @@ -42,6 +43,9 @@ export function normalizeLocale(value: string | undefined | null): Locale { if (normalized === 'pt' || normalized === 'pt-br' || normalized.startsWith('pt-br-')) { return 'pt-BR'; } + if (normalized === 'ko' || normalized.startsWith('ko-')) { + return 'ko'; + } return DEFAULT_LOCALE; } diff --git a/packages/ui/src/lib/i18n/store.ts b/packages/ui/src/lib/i18n/store.ts index e6ce0127..0bfb669b 100644 --- a/packages/ui/src/lib/i18n/store.ts +++ b/packages/ui/src/lib/i18n/store.ts @@ -29,6 +29,8 @@ async function loadDictionary(locale: Locale): Promise { ? await import('./messages/pt-BR') as { dict: I18nDictionary } : locale === 'uk' ? await import('./messages/uk') as { dict: I18nDictionary } + : locale === 'ko' + ? await import('./messages/ko') as { dict: I18nDictionary } : { dict: enDict }; dictionaries.set(locale, mod.dict); return mod.dict;