Issue #611 asked for file-type icons like the official explorer's, and #429 built a colored theme for them. DSH 0.1.5-rc.2 makes most of that work unnecessary: `@deepseek-ai/dsh-client-ui-primitives` now exports `FileTypeIcon` / `CodeFileIcon` with the host's own 48-type full-color code artwork plus category-colored sheet glyphs (and its classifier behind them). So the plugin renders the host's icons instead of shipping a color table, and color becomes the only behaviour rather than an opt-in theme. File icons (src/client/file-icons.tsx) - `builtinFileIcon(path, size)` → `<FileTypeIcon path size />`; folders use the host's folder category. The plugin's own per-extension VSCodicon map is gone. - The public `registerFileIcon` API from #531 is unchanged and still outranks the built-ins, so an external plugin can take over any row. One semantic consequence, now documented and tested: because the host classifier covers every path, a registered catch-all (`exts: []`) claims rows it used to lose to the built-in map. An unregistered catch-all (the old icon theme's shape) is unaffected. - Nothing is lazy any more: the artwork lives in a platform module the client already holds, so `lib/client-file-icons.js` and its 563-entry dataset (255 kB) are deleted outright — the core bundle grew by 10 kB (0.85 → 0.86 MB). - `src/client/file-icon-theme.ts`, the `fileIconTheme` pref (prefs-shared / config / client prefs), the settings-page select row and the six `settingsFileIconTheme*` keys in all 20 dictionaries are removed with it. Tab glyphs (src/client/builtins/tab-icons.tsx) - Every built-in tab type now declares a colored glyph: files (the host's folder artwork), changes/diff (commit), tasks (checklist), side chat (discussion), terminal (shell), browser (globe). - The color comes from a `--dsw-alias-*` token through a wrapper class, never from a literal — the skin contract (§12) holds and `tests/theme.spec.ts` enforces both halves (no literals in the module, every color declaration in the stylesheet resolves to a token). Native right Sidebar chips (src/client/native/tab-adapter.tsx) - The host's tab definition has no icon field, but the `sidebar.right.pane.tab.title` slot IS the chip's content, so the plugin draws the glyph itself: an editor tab with a path shows that file's icon, every other tab shows its descriptor's icon — the same `descriptor.icon` the workbench strip and the guide capsules already render, so the three cannot drift. The glyph is `aria-hidden`, which keeps the chip's accessible name exactly the title the mount lane matches on. Gates: typecheck / lint / check:consumer-types green; pnpm test 127 files / 1342 passed / 9 skipped (3 new chip cases, 1 rewritten built-in case).
450 lines
34 KiB
TypeScript
450 lines
34 KiB
TypeScript
/**
|
||
* Korean dictionary for the better-sidebar plugin (LOCALE_NS `betterSidebar`).
|
||
*
|
||
* Key-set-equal to the zh dictionary in `./locales.ts` (zh is the source of
|
||
* truth). Registered through the better-locale override store when that
|
||
* plugin is installed; the override borrows DSH's English slot, so it takes
|
||
* effect only while DSH's active locale is `'en'`.
|
||
*/
|
||
|
||
export const ko: Record<string, string> = {
|
||
files: '파일',
|
||
guideDescFiles: '워크스페이스 파일 트리를 보고 클릭하면 미리보기/편집',
|
||
guideDescGit: 'Git 변경 사항과 이번 세션의 파일 변경을 한 탭에서',
|
||
guideDescSubagent: '하위 에이전트 구조와 백그라운드 작업을 실시간으로',
|
||
guideDescSidechat: '현재 세션의 컨텍스트를 이어받는 독립 후속 스레드',
|
||
guideDescTerminal: '실제 셸(xterm + pty), 재연결 지원',
|
||
guideDescBrowser: '내장 브라우저, 채팅 링크도 대신 열 수 있음',
|
||
changesSessionEmpty: '이 세션에 아직 파일 작업이 없습니다',
|
||
changesRead: '읽기',
|
||
changesMdReading: '읽기',
|
||
changesHtmlRender: "렌더링",
|
||
changesHtmlRaw: "원문",
|
||
changesPdfRender: "렌더링",
|
||
changesPdfRaw: "원문",
|
||
changesMdRaw: '원문',
|
||
changesWrite: '쓰기',
|
||
changesEdit: '편집',
|
||
changesRunning: '실행 중',
|
||
changesError: '오류',
|
||
changesFold: '{count}줄… 클릭하여 펼치기',
|
||
changesFoldLoading: '펼치는 중…',
|
||
changesFoldUnavailable: '컨텍스트를 불러올 수 없음',
|
||
changesContext: '컨텍스트',
|
||
changesPriorUnknown: '변경 전 내용이 창에 없어 모두 새로 추가된 것으로 표시됩니다',
|
||
explorer: '탐색기',
|
||
terminal: '터미널',
|
||
editor: '편집기',
|
||
editorExplorer: '파일 열기 방식',
|
||
editorExplorerDesc: '파일이 열리는 방식을 제어합니다',
|
||
editorExplorerMerged: '병합',
|
||
editorExplorerMergedDesc: '파일이 같은 창에서 그 자리로 전환됩니다. 새 창은 기본으로 파일 트리가 펼쳐집니다',
|
||
editorExplorerSplit: '분리',
|
||
editorExplorerSplitDesc: '경로가 없는 창은 파일 탐색기(파일 트리만)입니다. 파일은 각자 새 창(파일 트리 포함, 기본 접힘)으로 열립니다',
|
||
editorTreeToggle: '파일 트리 패널',
|
||
editorPathPlaceholder: '파일 경로 입력(세션 디렉터리 기준 상대 경로 또는 절대 경로), Enter로 열기',
|
||
editorSearchPlaceholder: '파일 이름으로 검색…',
|
||
editorSearchNoResults: '일치하는 파일 없음',
|
||
editorSearchTruncated: '결과가 너무 많아 일부 일치 항목만 표시합니다',
|
||
editorEmptyHint: '오른쪽 파일 트리나 위쪽 경로 입력란에서 파일을 선택해 미리보기를 시작하세요',
|
||
openFileNewTab: '새 Tab으로 열기',
|
||
openFileSide: '측면에 열기',
|
||
openWithMenu: '앱에서 열기',
|
||
openWithSshSuffix: ' (SSH)',
|
||
pinOpenWith: '메뉴에 고정',
|
||
unpinOpenWith: '고정 해제',
|
||
openWithExplorer: '파일 탐색기',
|
||
openWithVscode: 'VS Code',
|
||
openWithCursor: 'Cursor',
|
||
openWithZed: 'Zed',
|
||
openWithSettingsSshTitle: 'SSH 원격 호스트',
|
||
openWithSettingsSshDesc: '비워두면 로컬 작업 공간입니다. user@host 또는 SSH 별칭을 입력하면 VSCode 계열 열기 방식이 vscode-remote/ssh-remote 프로토콜을 사용하게 되며, 파일 탐색기 / Zed / 비 VSCode 계열 사용자 지정 편집기는 메뉴에서 숨겨집니다',
|
||
openWithSettingsSshPlaceholder: 'user@host 또는 SSH 별칭',
|
||
openWithSettingsCustomTitle: '사용자 지정 편집기',
|
||
openWithSettingsCustomDesc: '이름 + URL 템플릿({path} 자리 표시자) + VSCode 계열 여부. SSH 모드에서는 VSCode 계열만 원격을 열 수 있습니다',
|
||
openWithSettingsAdd: '추가',
|
||
openWithSettingsName: '이름',
|
||
openWithSettingsTemplate: '예: cursor://file/{path}',
|
||
openWithSettingsFamily: 'VSCode 계열',
|
||
openWithSettingsFamilyDesc: '이 편집기는 VSCode의 URL 프로토콜을 사용합니다(SSH 원격 열기 지원)',
|
||
openWithSettingsRemove: '삭제',
|
||
openWithSettingsInvalidHint: '이름이나 템플릿({path} 포함, scheme:// 로 시작해야 함)을 입력하지 않은 편집기는 메뉴에 표시되지 않습니다',
|
||
newTab: '새 탭',
|
||
openExplorer: '파일 탐색기',
|
||
brokenSymlink: '깨진 심볼릭 링크',
|
||
openGit: 'Git 패널',
|
||
newTerminal: '새 터미널',
|
||
terminalLimit: '터미널 개수가 최대치에 도달했습니다 (3)',
|
||
close: '닫기',
|
||
closeOtherTabs: '다른 탭 닫기',
|
||
closeLeftTabs: '왼쪽 탭 닫기',
|
||
closeRightTabs: '오른쪽 탭 닫기',
|
||
floatDropHint: '놓으면 자유 창에서 열립니다',
|
||
dockToSidebar: '사이드바로 돌아가기',
|
||
pinTerminal: '터미널 고정',
|
||
pinAgentTerminal: 'Agent 터미널 고정',
|
||
pinToWorkspace: '워크스페이스에 고정',
|
||
pinToGlobal: '전역에 고정',
|
||
unpinTerminal: '고정 해제',
|
||
pinnedTerminalTooltip: '{kind} · {scope} · {cwd}',
|
||
pinnedTerminalKindUi: 'UI 터미널',
|
||
pinnedTerminalKindAgent: 'Agent 터미널',
|
||
pinnedTerminalScopeWorkspace: '워크스페이스에 고정됨',
|
||
pinnedTerminalScopeGlobal: '전역에 고정됨',
|
||
pinnedRailLabel: '고정된 터미널',
|
||
closePinnedTerminal: '터미널 닫기',
|
||
collapseBottomPanel: '하단 패널 접기',
|
||
expandBottomPanel: '하단 패널 펼치기',
|
||
terminalError: '터미널 연결 실패',
|
||
terminalConnectFailed: '터미널 연결이 여러 번 실패했습니다',
|
||
terminalRetry: '다시 시도',
|
||
terminalWaitBanner: '에이전트가 {needle} 대기 중',
|
||
terminalSkipWait: '대기 건너뛰기',
|
||
terminalDepsFailed: '터미널 의존성 node-pty 로드 실패',
|
||
terminalDepsHint: 'DSH가 설치된 환경의 터미널 또는 cmd에서 아래 명령을 실행하여 복구한 후 다시 시도를 클릭하세요(node-pty는 DSH 코어와 동일한 버전을 유지합니다):',
|
||
terminalDepsProfile: ' (profile 감지됨: {profile})',
|
||
terminalShellNotFound: '설정된 셸을 찾을 수 없습니다: {name} — 설정 → 사이드 카드 → 터미널에서 셸 경로를 확인하세요',
|
||
preview: '미리보기',
|
||
toc: '목차',
|
||
edit: '편집',
|
||
mermaidError: 'Mermaid 렌더링 실패',
|
||
mermaidZoomIn: '확대',
|
||
mermaidZoomOut: '축소',
|
||
mermaidZoomReset: '초기화',
|
||
mermaidZoomHint: '휠로 확대/축소 · 드래그로 이동 · Esc로 닫기',
|
||
refresh: '새로고침',
|
||
showInFolder: '폴더에서 표시',
|
||
refreshUnsavedConfirm: '디스크의 파일이 변경되었습니다. 새로고침하면 저장되지 않은 편집 내용이 손실됩니다. 계속하시겠습니까?',
|
||
save: '저장',
|
||
saved: '저장됨',
|
||
unsaved: '저장 안 됨',
|
||
saveFailed: '저장 실패',
|
||
truncation: '파일이 너무 커 앞의 512KB만 표시합니다',
|
||
binary: '이진 파일이라 미리보기를 할 수 없습니다',
|
||
loading: '불러오는 중…',
|
||
error: '불러오기 실패',
|
||
retry: '다시 시도',
|
||
splitLeft: '왼쪽으로 분할',
|
||
splitRight: '오른쪽으로 분할',
|
||
splitUp: '위로 분할',
|
||
splitDown: '아래로 분할',
|
||
notRepo: '현재 디렉터리는 git 저장소가 아닙니다',
|
||
noChanges: '변경 사항 없음',
|
||
statusTruncated: '변경 사항이 너무 많아 처음 2000개만 표시합니다',
|
||
stage: '스테이징',
|
||
unstage: '스테이징 해제',
|
||
stageAll: '모두 스테이징',
|
||
unstageAll: '모두 스테이징 해제',
|
||
commitPlaceholder: '커밋 메시지 (Ctrl+Enter)',
|
||
commit: '커밋',
|
||
commitError: '커밋 실패',
|
||
branch: '브랜치',
|
||
worktree: '워크트리',
|
||
checkoutError: '브랜치 전환 실패',
|
||
history: '기록',
|
||
changes: '파일 변경',
|
||
changesGitLens: 'Git',
|
||
changesSessionLens: '세션',
|
||
changesFilterAll: '모두',
|
||
changesFilterEmpty: '이 종류의 작업이 없습니다',
|
||
changesOpenDiffTab: '별도 탭에서 열기',
|
||
changesClosePreview: '미리보기 닫기',
|
||
changesResizePreview: '미리보기 높이 조정',
|
||
changesLoadError: '세션 파일 기록을 지금 사용할 수 없습니다',
|
||
staged: '스테이징됨',
|
||
unstaged: '스테이징 안 됨',
|
||
cancel: '취소',
|
||
diffEmpty: '텍스트 차이 없음',
|
||
diffLoadError: '차이(diff) 불러오기 실패',
|
||
diffBinary: '이진',
|
||
diffAdded: '추가됨',
|
||
diffDeleted: '삭제됨',
|
||
diffRenamed: '이름 변경됨',
|
||
diffExpand: '나머지 {count}줄 펼치기',
|
||
diffCollapse: '접기',
|
||
discard: '변경 사항 버리기',
|
||
discardTitle: '변경 사항 버리기',
|
||
discardDesc: '"{path}"의 작업 공간 수정을 버립니다(복구 불가).',
|
||
viewCommitDiff: '커밋 차이 보기',
|
||
copyShortHash: '짧은 해시 복사',
|
||
copyFullHash: '전체 해시 복사',
|
||
copySubject: '커밋 메시지 복사',
|
||
revertCommit: '이 커밋 되돌리기',
|
||
revertTitle: '이 커밋 되돌리기',
|
||
revertDesc: '현재 브랜치에 "{subject}"을(를) 되돌리는 새 커밋을 만듭니다.',
|
||
cherryPickCommit: '이 커밋 체리픽',
|
||
cherryPickTitle: '이 커밋 체리픽',
|
||
cherryPickDesc: '"{subject}"의 변경 사항을 현재 브랜치에 적용합니다.',
|
||
timeJustNow: '방금',
|
||
timeMinutesAgo: '{n}분 전',
|
||
timeHoursAgo: '{n}시간 전',
|
||
timeYesterday: '어제',
|
||
loadMore: '더 불러오기',
|
||
historyLoadError: '더 많은 기록 불러오기 실패',
|
||
produced: '이번 산출물',
|
||
producedOpen: '사이드바에서 열기',
|
||
disconnected: '터미널 연결이 끊겨 다시 연결하는 중…',
|
||
exited: '터미널 프로세스가 종료되었습니다',
|
||
noSession: '사이드바를 사용하려면 대화를 선택하세요',
|
||
pluginNotLoaded: '플러그인이 로드되지 않아 탭을 지금 사용할 수 없습니다:',
|
||
hiddenFiles: '숨김 파일',
|
||
parent: '상위 디렉터리',
|
||
copied: '복사됨',
|
||
copy: '복사',
|
||
newFile: '새 파일',
|
||
openEditor: '편집기 열기',
|
||
gitDetail: '변경 사항 세부 정보 보기',
|
||
referenceFile: '@파일',
|
||
addToConversation: '대화에 추가',
|
||
copyRelative: '상대 경로 복사',
|
||
copyAbsolute: '절대 경로 복사',
|
||
rename: '이름 바꾸기',
|
||
renameInvalid: '이름은 비워 둘 수 없으며 경로 구분 기호를 포함할 수 없습니다.',
|
||
delete: '삭제',
|
||
deleteTitle: '"{name}"을(를) 삭제할까요?',
|
||
deleteDescFile: '이 파일이 영구적으로 삭제됩니다. 되돌릴 수 없습니다.',
|
||
deleteDescDir: '이 디렉터리와 모든 내용이 영구적으로 삭제됩니다. 되돌릴 수 없습니다.',
|
||
dismiss: '닫기',
|
||
download: '다운로드',
|
||
uploadFiles: '파일 업로드',
|
||
uploadFolder: '폴더 업로드',
|
||
uploadHere: '여기에 업로드',
|
||
uploadDropHint: '파일/폴더를 여기로 끌어다 놓아 업로드',
|
||
uploadDropChat: '채팅 영역에 끌어다 놓기: 대화에 이미지 추가',
|
||
uploadTo: '{dir}에 업로드',
|
||
uploadingTo: '{dir}에 업로드 중…',
|
||
uploadProgress: '{done}/{total} 업로드 중: {name}',
|
||
uploadDone: '파일 {count}개 업로드됨',
|
||
uploadFailed: '업로드 실패: {error}',
|
||
uploadFailedUnknown: '알 수 없는 오류',
|
||
uploadTooLarge: '파일이 너무 커 업로드 상한을 초과했습니다',
|
||
uploadCancelled: '업로드가 취소됨',
|
||
settingsNav: '사이드 카드',
|
||
settingsIntro: '사이드 카드의 표시 내용과 기본 동작을 관리합니다',
|
||
settingsPopupDesc: '"{feature}" 관련 옵션을 구성합니다',
|
||
settingsDone: '완료',
|
||
settingsOpenToolsTitle: '모델에 사이드바 열기 도구 주입',
|
||
settingsOpenToolsDesc: '켜면 모델이 sidebar_open 도구로 사이드바에서 파일·폴더·HTTP(S) 페이지를 열 수 있습니다(기본 꺼짐)',
|
||
settingsTitleBarTitle: '위치 호환 모드',
|
||
settingsTitleBarDesc: '상단 바 호환 방식을 선택하세요: 자동 감지(기본, 보수적) / DSH 공식 Web / 알려진 데스크톱 셸 / 사용자 지정 방식(하강 거리 + 사용자 지정 CSS)',
|
||
settingsTitleBarStripTitle: '하강 거리',
|
||
settingsTitleBarStripDesc: '타이틀 바 스트립 높이: 사이드바 버튼과 콘텐츠가 아래로 내려가는 픽셀 수(0–120, 기본 40. 사용자 지정 방식에서 적용)',
|
||
settingsSchemeAutoTitle: '자동 감지',
|
||
settingsSchemeAutoDesc: '보수적 방식: Window Controls Overlay 표준 API를 사용할 수 있을 때만 실제 타이틀 바 높이만큼 양보합니다. 웹 환경에서는 아무 것도 수정하지 않습니다',
|
||
settingsSchemeWebTitle: 'DSH 공식 Web',
|
||
settingsSchemeWebDesc: '공식 웹 버전에서 실행 중임을 명시적으로 선언합니다. 어떤 적응도 하지 않습니다(표준 WCO 기하 정보도 적용하지 않음)',
|
||
settingsSchemeCustomTitle: '사용자 지정 방식',
|
||
settingsSchemeCustomDesc: '전적으로 사용자가 제어합니다. 사용자 지정 CSS(내장 스타일 덮어쓰기 가능)를 주입하고 타이틀 바 하강 거리를 지정합니다',
|
||
settingsSchemeDetectedSuffix: '감지됨',
|
||
settingsCustomCssTitle: '사용자 지정 CSS',
|
||
settingsCustomCssDesc: '페이지 끝에 추가되는 스타일(동일 우선순위에서는 나중에 쓴 것이 이깁니다. JS 인라인 변수를 덮으려면 !important를 사용해야 합니다)',
|
||
settingsCustomCssPlaceholder: '/* 예: 직접 그린 타이틀 바의 셸을 위해 36px 확보 */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
|
||
settingsSaveFailed: '저장 실패',
|
||
settingsConflict: '설정이 다른 창에서 수정되었습니다. 다시 시도하세요',
|
||
binaryNoPreview: '이 파일 형식은 미리보기를 지원하지 않습니다',
|
||
downloadToView: '다운로드하여 보기',
|
||
settingsSubagentTitle: '서브 에이전트를 감지하면 작업 관리 페이지 자동 활성화',
|
||
settingsSubagentDesc: '현재 대화에 새 서브 에이전트가 생기면 작업 관리 페이지를 활성화합니다. 넓은 화면에서는 사이드 카드도 펼치지만, 좁은 화면에서는 전체 화면 드로어를 강제로 열지 않습니다. 끄면 수동으로 열어야 합니다',
|
||
settingsJobsTitle: '새 백그라운드 작업이 생기면 작업 관리 페이지 자동 활성화',
|
||
settingsJobsDesc: '현재 대화에 새 백그라운드 작업이 생길 때마다 작업 관리 페이지를 활성화합니다(새 작업마다 트리거됨). 넓은 화면에서는 사이드 카드도 펼치지만, 좁은 화면에서는 전체 화면 드로어를 강제로 열지 않습니다. 끄면 수동으로 열어야 합니다',
|
||
settingsToolsTitle: '모델에 터미널 도구 주입',
|
||
settingsToolsDesc: '켜면 모델이 terminal_create 등 8개 도구로 사이드바 터미널을 만들고 조작할 수 있습니다(기본 꺼짐)',
|
||
settingsFenceTitle: '워크스페이스 경로 검사',
|
||
settingsFenceDesc: '켜면 사이드바의 파일 기능이 세션 워크스페이스 내 경로만 접근합니다(기본값). 끄면 호스트의 모든 파일에 접근할 수 있으며, 꺼져 있는 동안 페이지 내 스크립트도 동일한 권한을 얻습니다',
|
||
fenceErrorReason: '이 경로는 세션 워크스페이스 밖에 있어 검사에 의해 차단되었습니다',
|
||
fenceDisableAction: '워크스페이스 검사 끄기',
|
||
settingsBottomTerminalTitle: '하단 패널을 처음 펼칠 때 터미널 자동 열기',
|
||
settingsBottomTerminalDesc: '세션에서 하단 패널을 처음 펼칠 때 하단 패널에 새 터미널 탭을 자동으로 열려고 시도합니다(터미널 개수 상한은 여전히 적용됩니다. 기본 켜짐)',
|
||
settingsFontFamilyTitle: '터미널 글꼴',
|
||
settingsFontFamilyDesc: '터미널 글꼴 모음을 지정합니다(CSS font-family, 예: "JetBrains Mono", monospace. 비워두면 테마의 고정폭 글꼴을 따릅니다)',
|
||
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
|
||
settingsFontSizeTitle: '터미널 글꼴 크기',
|
||
settingsFontSizeDesc: '터미널 글꼴 크기(9–32, 기본 13)',
|
||
settingsFontSizeSuffix: 'px',
|
||
settingsShellTitle: 'Shell 경로',
|
||
settingsShellDesc: 'UI와 모델 터미널이 시작하는 shell(절대 경로 또는 실행 파일 이름). 비워두면 기존 순서로 해석합니다: yaml의 config.shell → $SHELL / 로그인 shell / Windows의 powershell.exe. 이후에 여는 터미널부터 적용됩니다',
|
||
settingsShellPlaceholder: '예: /bin/zsh (비워두면 자동 해석)',
|
||
settingsShellArgsTitle: 'Shell 인수',
|
||
settingsShellArgsDesc: '명시적 shell 시작 인수, 공백으로 구분. 비어 있지 않으면 기본 인수를 완전히 대체합니다(yaml의 shellArgs 계약과 동일)',
|
||
settingsShellArgsPlaceholder: '예: -l (비워두면 기본 인수 사용)',
|
||
settingsTabsTitle: '사이드바 콘텐츠',
|
||
settingsViewersTitle: '파일 미리보기',
|
||
settingsGeneralTitle: '일반',
|
||
settingsPopup: '기능 설정',
|
||
settingsViewerCatchAll: '폴백: 모든 파일',
|
||
viewerImage: '이미지',
|
||
viewerPdf: 'PDF',
|
||
viewerMarkdown: 'Markdown',
|
||
viewerCode: '코드',
|
||
viewerBinary: '이진 다운로드',
|
||
viewerHtml: 'HTML',
|
||
browser: '브라우저',
|
||
browserPlaceholder: 'URL 입력, 예: example.com',
|
||
browserGo: '이동',
|
||
browserBack: '뒤로',
|
||
browserForward: '앞으로',
|
||
browserStart: 'URL을 입력하여 탐색 시작(샌드박스 모드)',
|
||
browserBlockedScheme: '차단됨: http/https 링크만 지원합니다',
|
||
browserBlockedLoopback: '차단됨: 브라우저에서 로컬 또는 내부 주소에 접근할 수 없습니다',
|
||
browserInvalid: '잘못된 URL',
|
||
browserNoSandboxWarning: '샌드박스가 꺼짐: 현재 페이지가 인터페이스와 동일 출처로 전체 세션 권한을 가집니다(설정에서 복원 가능)',
|
||
htmlNoSandboxWarning: '샌드박스가 꺼짐: 이 HTML이 인터페이스와 동일 출처로 세션 파일과 내부 인터페이스를 읽을 수 있습니다(설정에서 복원 가능)',
|
||
sandboxStatusOn: '샌드박스 모드: 사용 중 · 페이지가 인터페이스 데이터와 로컬 파일에 접근할 수 없으며, 로그인 상태와 타사 Cookie는 동작하지 않을 수 있습니다',
|
||
sandboxUnlock: '임시 해제(안전하지 않음)',
|
||
sandboxRestore: '샌드박스 복원',
|
||
settingsHtmlDefaultUnsafeTitle: 'HTML 미리보기를 기본적으로 샌드박스 없이 열기(안전하지 않음)',
|
||
settingsHtmlDefaultUnsafeDesc: '켜면 HTML 파일을 열 때마다 미리보기가 기본적으로 샌드박스 없이 열립니다(인터페이스와 동일 출처로 세션 파일과 내부 인터페이스를 읽을 수 있음). 상태 표시줄에서 임시로 샌드박스를 복원할 수 있습니다',
|
||
settingsHtmlSandboxTitle: 'HTML 미리보기 샌드박스 끄기(안전하지 않음)',
|
||
settingsHtmlSandboxDesc: '끄면 미리보기 HTML이 인터페이스와 동일 출처로 실행되어 세션 파일, 로컬 저장소를 읽고 내부 인터페이스를 호출할 수 있습니다. 완전히 신뢰하는 파일에서만 켜세요',
|
||
settingsBrowserSandboxTitle: '브라우저 샌드박스 끄기(안전하지 않음)',
|
||
settingsBrowserSandboxDesc: '끄면 방문하는 모든 사이트가 인터페이스와 동일 출처로 실행되어 세션 데이터를 읽고 사용자의 로그인 상태를 가장할 수 있습니다. 완전히 신뢰하는 사이트에서만 켜세요',
|
||
settingsBrowserLinksTitle: '채팅 영역 외부 링크를 사이드바에서 열기',
|
||
settingsBrowserLinksDesc: '켜면 채팅이나 인터페이스에서 외부 링크를 클릭할 때 새 창 대신 사이드바에서 엽니다. HTTP와 HTTPS는 아래 스위치로 각각 제어할 수 있습니다. Ctrl/Cmd 클릭으로 임시 허용할 수 있습니다',
|
||
settingsBrowserHttpTitle: 'HTTP 페이지를 사이드바에서 열기',
|
||
settingsBrowserHttpDesc: '켜면 채팅이나 인터페이스에서 HTTP 외부 링크를 클릭할 때 사이드바에서 엽니다(urlTarget을 선언한 플러그인 페이지가 우선). Ctrl/Cmd 클릭으로 임시 허용할 수 있습니다',
|
||
settingsBrowserHttpsTitle: 'HTTPS 페이지를 사이드바에서 열기',
|
||
settingsBrowserHttpsDesc: '켜면 채팅이나 인터페이스에서 HTTPS 외부 링크를 클릭할 때 사이드바에서 엽니다. 기본 꺼짐: 대부분의 HTTPS 사이트가 임베드를 거부하므로 시스템 브라우저가 더 원활합니다',
|
||
settingsBrowserLoopbackTitle: '허용된 로컬 주소',
|
||
settingsBrowserLoopbackDesc: '사이드바 브라우저가 방문할 수 있는 루프백 주소의 쉼표로 구분된 허용 목록(예: localhost:5174 또는 127.0.0.1:8080). 비어 있으면 기본적으로 모든 로컬 주소를 차단합니다. 샌드박스는 계속 적용되며, 페이지는 GUI 데이터를 읽을 수 없습니다',
|
||
settingsBrowserLoopbackPlaceholder: '예: localhost:5174, 127.0.0.1:8080',
|
||
browserOpenExternal: '브라우저에서 열기',
|
||
browserEmbedBlocked: '{host} 가(이) 임베드 요청을 거부했습니다',
|
||
browserEmbedBlockedDesc: '이 사이트는 X-Frame-Options / frame-ancestors로 다른 페이지에 표시되는 것을 금지하여 사이드바에서 로드할 수 없습니다. 브라우저에서 직접 열 수 있습니다',
|
||
browserEmbedAnyway: '그래도 로드',
|
||
subagent: '작업 관리',
|
||
openSubagent: '작업 관리',
|
||
subagentMainAgent: '주 에이전트',
|
||
subagentEmpty: '서브 에이전트 없음',
|
||
subagentEmptyDesc: '현재 주 에이전트에서 파생된 서브 에이전트가 여기에 표시됩니다',
|
||
subagentRunning: '실행 중',
|
||
subagentInactive: '대기 중',
|
||
subagentModeOneShot: '일회성',
|
||
subagentModeContinuable: '이어서 가능',
|
||
subagentCount: '서브 에이전트 {count}개',
|
||
subagentCountRunning: '서브 에이전트 {count}개 · {running} 실행 중',
|
||
subagentDiagCorrupt: '기록 손상',
|
||
subagentDiagUnsupported: '지원되지 않는 항목',
|
||
subagentDiagUnavailable: '사용할 수 없음',
|
||
subagentThinking: '생각하는 중…',
|
||
sideChat: '사이드 채팅(beta)',
|
||
sideChatNew: '새 대화',
|
||
sideChatUntitled: '새 대화',
|
||
sideChatEmpty: '사이드 대화 없음',
|
||
sideChatEmptyDesc: '각 사이드 대화는 탭 바의 독립된 Tab입니다. 현재 세션의 컨텍스트를 상속받아 실행되며, 주 대화에 들어가지 않습니다',
|
||
sideChatCreating: '사이드 대화를 만드는 중…',
|
||
sideChatRetry: '다시 시도',
|
||
sideChatThreads: '스레드 전환 / 새로 만들기',
|
||
sideChatSave: '새 세션으로 저장',
|
||
sideChatSaveTitle: '이 스레드를 최상위 세션으로 승격하여 주 세션 목록에 표시합니다',
|
||
sideChatSaved: '새 세션으로 저장됨',
|
||
sideChatNoTurn: '최소 한 턴의 대화를 완료해야 저장할 수 있습니다',
|
||
sideChatPendingDrop: '마지막으로 완료되지 않은 후속 질문은 새 세션에 포함되지 않습니다',
|
||
sideChatFirstPlaceholder: '첫 번째 질문 입력, 현재 세션 컨텍스트가 상속됨…',
|
||
sideChatComposerPlaceholder: '후속 질문…',
|
||
sideChatThinking: '더 파고드는 중…',
|
||
sideChatThink: '생각 과정',
|
||
sideChatInjection: '컨텍스트 주입됨',
|
||
sideChatSend: '보내기',
|
||
sideChatCancel: '중지',
|
||
sideChatCancelTitle: '현재 턴 중단(대기열 유지)',
|
||
sideChatClose: '스레드 닫기',
|
||
sideChatCloseTitle: '스레드의 agent를 해제합니다(기록은 유지)',
|
||
sideChatError: '사이드 대화 오류: {message}',
|
||
sideChatTurnUsage: '입력 {input} tok · 출력 {output} tok',
|
||
sideChatBlockCollapse: '접기',
|
||
sideChatBlockCollapseAria: '접기',
|
||
sideChatBlockExpand: '{hidden}줄 펼치기',
|
||
sideChatBlockExpandAria: '나머지 {hidden}줄 펼치기',
|
||
sideChatBlockSignal: '시그널로 종료됨: {signal}',
|
||
sideChatBlockExitCode: '종료 코드 {code}',
|
||
sideChatBlockRunning: '실행 중',
|
||
sideChatBlockFailed: '실패',
|
||
sideChatBlockDone: '완료',
|
||
sideChatBlockNoOutput: '(출력 없음)',
|
||
sideChatBlockFiles: '파일 {count}개',
|
||
sideChatBlockWindow: '전체 {total}줄 중 {shown}줄 표시',
|
||
sideChatConnDisconnected: '연결이 끊겼습니다',
|
||
sideChatConnReconnect: '다시 연결',
|
||
sideChatConnConnecting: '다시 연결 중…',
|
||
sideChatConnRecovered: '연결이 복원되었습니다',
|
||
sideChatConnReconnectAction: '지금 다시 연결',
|
||
sideChatConnRestartAction: '연결 다시 시작',
|
||
jobs: '백그라운드 작업',
|
||
jobsCount: '백그라운드 작업 {count}개',
|
||
jobsCountRunning: '백그라운드 작업 {count}개 · {running} 실행 중',
|
||
jobStatusRunning: '실행 중',
|
||
jobStatusStopping: '종료 중',
|
||
jobStatusCompleted: '완료됨',
|
||
jobStatusKilled: '종료됨',
|
||
jobStatusFailed: '실패',
|
||
jobDurationSeconds: '{seconds}초',
|
||
jobDurationMinutes: '{minutes}분 {seconds}초',
|
||
jobDurationHours: '{hours}시간 {minutes}분',
|
||
jobViewOutput: '출력 보기',
|
||
jobHideOutput: '출력 접기',
|
||
jobNoOutput: '출력 없음',
|
||
jobNotReadYet: '모델이 이 작업의 출력을 읽기를 기다리는 중입니다(모델이 job_output을 실행하면 출력이 여기에 표시됩니다)',
|
||
jobOutputTruncated: '출력이 너무 길어 잘라서 표시합니다',
|
||
jobOutputError: '출력 읽기 실패',
|
||
jobKill: '종료',
|
||
jobKillConfirm: '다시 클릭하여 종료 확인',
|
||
jobKillError: '종료 실패',
|
||
addPluginsTabCard: 'Tab 플러그인 추가',
|
||
addPluginsTabCardDesc: '새 사이드바 페이지 등록',
|
||
addPluginsViewerCard: '미리보기 플러그인 추가',
|
||
addPluginsViewerCardDesc: '새 파일 형식 미리보기 등록',
|
||
addPluginsTabDesc: '사이드바 페이지(Tab)는 플러그인으로 확장할 수 있습니다. 플러그인은 ctx.betterSidebar 서비스를 통해 등록합니다. "설치"를 클릭하면 설치 명령이 복사되며, DSH가 설치된 환경의 터미널에 붙여넣어 실행하세요.',
|
||
addPluginsViewerDesc: '파일 미리보기는 플러그인으로 확장할 수 있습니다. 플러그인은 ctx.betterSidebar 서비스를 통해 등록합니다. "설치"를 클릭하면 설치 명령이 복사되며, DSH가 설치된 환경의 터미널에 붙여넣어 실행하세요.',
|
||
addPluginsBrowseMore: 'GitHub에서 더 많은 플러그인 보기(topic: dsh-better-sidebar)',
|
||
addPluginsSearch: '플러그인 이름 / 설명 검색…',
|
||
addPluginsNoMatch: '일치하는 플러그인 없음',
|
||
addPluginsRecommended: '추천 플러그인',
|
||
addPluginsEmpty: '아직 플러그인이 등록되지 않았습니다. GitHub topic 아래에 플러그인을 공개해 주세요',
|
||
openPlugin: '이동',
|
||
copyInstall: '설치 명령 복사',
|
||
pluginOfficeDesc: 'better-sidebar 편집기에 Office 3종 미리보기(.docx / .xlsx / .pptx)를 제공하며, 무거운 Office 렌더링 라이브러리를 메인 패키지에서 분리하여 필요할 때 설치합니다',
|
||
pluginFlowglassDesc: '실시간 세션 흐름도: 사용자, 어시스턴트, 도구 호출을 3열 레인으로 표시하며, 병렬 그룹, 서브 에이전트 지선, 단계별 드릴다운과 실시간 상태를 지원합니다. better-sidebar 설치 시 기본 "흐름 거울(流镜)" Tab을 등록하고, 미설치 시 독립 서랍을 유지합니다',
|
||
pluginGitForgeDesc: 'better-sidebar "Git 자격 증명" Tab: GitHub/Gitea 등 Forge 계정 라이브러리 + 프로젝트별 권한 + push 정책 하드 차단. 토큰은 로컬 secrets에만 저장되고 모델 컨텍스트에 들어가지 않습니다. 읽기 전용 GitForge 도구와 agent HTTPS credential helper를 제공합니다',
|
||
pluginGithubWorkbenchDesc: 'better-sidebar "GitHub Workbench" Tab: 원격 저장소 트리 + Issues / Pull requests / Actions 탭. 읽기 외에 Issue·PR 생성, 댓글, 편집, 닫기/다시 열기, squash·merge·rebase 병합(강한 확인), CI 재실행/취소를 지원합니다. 저장소 전환 팝업은 접근 가능한 저장소를 자동으로 가져오고 공개 저장소 검색도 지원합니다. better-sidebar 미설치 시 독립 우측 패널로 자동 폴백합니다',
|
||
pluginMdExportDesc: 'better-sidebar의 Markdown 툴바에 "내보내기" 버튼을 추가: 클릭 한 번으로 현재 .md를 독립 실행형 HTML(표/코드 블록/Mermaid 다이어그램 인라인, 레이아웃은 미리보기 테마 따름)로 렌더링해 같은 폴더에 저장하거나, 인쇄 대화상자로 PDF를 내보냅니다',
|
||
pluginCodeNavDesc: '코드 미리보기 내비게이션: 파일 형식으로 언어를 자동 인식해 구문 강조, 심볼 아웃라인(클래스/메서드/변수 필터 + 원클릭 이동), 파일 내 검색(모든 일치 강조, 이전/다음, 대소문자 구분) — better-sidebar 편집기의 코드 파일 미리보기를 대신 맡습니다',
|
||
pluginSuhuangScrollDesc: '로컬 Suhuang Scroll Runtime을 DSH 설정과 better-sidebar에 연결하여 모델 구성, 연결 테스트, 연속 채점 제어를 제공합니다. Suhuang Scroll Runtime과 dsh-better-sidebar가 필요합니다',
|
||
pluginBetterOverleafDesc: 'better-sidebar의 Overleaf 탭: CDP 브라우저 직접 로그인(서드파티 Chromium 지원), 프로젝트 목록/전환, <workspace>/overleaf/ 로컬 git 미러, 읽기 전용 API 폴백이 있는 양방향 git 동기화, 파일 미리보기는 사이드바 워크벤치 사용',
|
||
pluginGitRemotesDesc: 'better-sidebar Git 원격 Tab: 브랜치/업스트림/ahead-behind 확인, fetch(prune 가능), ff-only pull, 확인 후에만 push. 내장 Git의 스테이징/커밋을 대체하지 않으며, force-push나 모델 자동 push도 제공하지 않습니다',
|
||
pluginSentinelDesc: '조건 기반 agent 웨이크업 시스템: 파일/프로세스/포트/HTTP/명령/webhook 센서가 조건을 충족하면 휴면 세션을 자동으로 깨웁니다. "센티널(哨兵)" Tab을 등록하여 서버 전역 모니터링 표를 보여줍니다',
|
||
pluginServerDeckDesc: '서버 카드 대시보드: 호스트마다 한 장의 카드로 온라인 상태, OS, 업타임, CPU/메모리/디스크 사용률과 지연 시간을 표시합니다. 카드를 클릭하면 xterm.js 대화형 터미널이 열리고, ~/.ssh/config를 원클릭으로 가져옵니다(Git 호스팅 별칭은 자동 제외). better-sidebar 설치 시 네이티브 「서버」 탭을 등록하고, 미설치 시 독립 드로어를 유지합니다',
|
||
pluginSidebarQaDesc: 'better-sidebar 기반 드래그 선택 질문 탭: 대화 드래그 선택 → 오른쪽 패널 질문 → 같은 작업 공간의 독립 후속 질문 세션(❓후속 질문·주제). 빠른 무사고 모델이 주 대화 컨텍스트를 압축한 후 인용과 함께 주입하며, 주 대화를 방해하지 않습니다. 후속 질문은 중첩, 계속, 보관이 가능합니다',
|
||
pluginSidenoteDesc: 'Codex 스타일 사이드 챗 + 선택 주석: 현재 세션을 fork해 독립 사이드 세션으로 분기(세션 목록에서는 보관되어 숨겨짐, 다중 인스턴스, /side 명령, 새로고침/재시작 후에도 복원됨, 모델은 주 세션을 따름); assistant 메시지 선택 → 번호 배지 + 주석 편집기 → "N개 주석" 칩이 다음 메시지에 함께 전송되며, 사이드 챗에서 바로 질문할 수도 있습니다',
|
||
pluginSshTunnelDesc: 'better-sidebar "SSH 터널" Tab: 다중 호스트 목록 + 프로젝트별 권한 + 키 로컬 보관. 모델 도구 SSHManager(exec/SFTP/세션 전략). 중앙 대화형 터미널과 이중 창 SFTP',
|
||
pluginTurnReviewDesc: '방금 끝난 턴의 diff에 대해 Approve / Request changes를 하는 사람 게이트: 지난 턴만 검토하며 세션을 fork하지 않습니다. 파일을 주 세션/서브 에이전트/미귀속으로 그룹화하고, 파일별로 선택하여 반려 + 선택적 코멘트. 파일을 클릭하면 턴 시작 스냅샷 vs 현재 diff를 먼저 봅니다. /rewind가 아닙니다',
|
||
pluginVideoPreviewDesc: 'better-sidebar 편집기에서 비디오 파일(.mp4/.webm/.mov/.mkv/.avi 등)을 인라인 미리보기합니다. HTTP Range(206)를 지원하는 /video 호스트 라우트를 내장하며, 진행 바를 드래그할 수 있고 20MB mediaLimit 제한을 받지 않습니다',
|
||
pluginDocsPanelDesc: 'DSH 사이드바의 "전역 문서": 전역 Markdown 메모로, 어떤 작업 공간에서든 언제든 읽을 수 있습니다. 목록을 클릭해 읽기, 마우스를 올리면 개요로 이동, Chrome / VS Code에서 외부 열기, 코드 복사. 디렉터리를 설정할 수 있습니다(기본 ~/.dsh/docs)',
|
||
pluginEgoBrowserDesc: 'DeepSeek Harness용 에이전트 브라우저: 32개의 ego_* 도구가 실제 Chromium을 구동하며, 사이드바의 네이티브 «ego 브라우저» 탭에서 에이전트가 방문하는 모든 페이지를 실시간으로 볼 수 있습니다 — 클릭, 드래그, 타이핑으로 직접 조작할 수 있습니다. better-sidebar가 있으면 탭을 자동 등록하고, 없으면 플로팅 버블로 대체합니다',
|
||
pluginBilingualReaderDesc: 'DSH 사이드바에서 PDF 읽기: 네이티브 PDF 표시, 텍스트를 선택해 LLM으로 번역, 컨텍스트 사용 및 메인 대화와 완전 격리',
|
||
changesRedactOn: "마스킹 켜짐: 민감 값이 [REDACTED]로 표시됩니다. 클릭하면 꺼집니다(책임 본인)",
|
||
changesRedactOff: "마스킹 꺼짐: 내용이 그대로 표시됩니다. 클릭하면 켜집니다",
|
||
changesRedactOnLabel: "마스킹 중",
|
||
changesRedactOffLabel: "마스킹 해제",
|
||
changesRedactBanner: "마스킹됨",
|
||
pluginSentinelName: 'dsh-sentinel 웨이크업 시스템',
|
||
pluginEgoBrowserName: 'ego-browser 에이전트 브라우저',
|
||
pluginBetterOverleafName: 'dsh-better-overleaf Overleaf 탭',
|
||
pluginDocsPanelName: 'dsh-docs-panel 전역 문서',
|
||
pluginFlowglassName: 'dsh-flowglass Flowglass',
|
||
pluginGitForgeName: 'dsh-git-forge Git 자격 증명',
|
||
pluginGitRemotesName: 'dsh-git-remotes Git 리모트',
|
||
pluginGithubWorkbenchName: 'dsh-github-workbench GitHub 워크벤치',
|
||
pluginSidebarQaName: 'dsh-sidebar-qa 선택 후 질문',
|
||
pluginSidenoteName: 'dsh-sidenote 사이드 채팅',
|
||
pluginServerDeckName: 'dsh-server-deck 서버 데크',
|
||
pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll',
|
||
pluginSshTunnelName: 'dsh-ssh-tunnel SSH 터널',
|
||
pluginTurnReviewName: 'dsh-turn-review 턴 리뷰',
|
||
pluginBilingualReaderName: 'dsh-bilingual-reader 이중언어 리더',
|
||
pluginOfficeName: 'Office 미리보기',
|
||
pluginMdExportName: 'Markdown 내보내기',
|
||
pluginCodeNavName: '코드 미리보기 내비게이터',
|
||
pluginVideoPreviewName: '동영상 미리보기',
|
||
presetDshDesktopDesc: 'Electron 고급 모드(테두리 없음): macOS는 상단에 20px, Windows는 WCO가 없을 때 타이틀 바에 32px를 확보',
|
||
}
|