mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-30 15:15:24 +00:00
* fix(sso): send the PKCE verifier for GitHub login (#1534) * fix(remote-desktop): clip cursor overflow without disabling zoom (#1535) * test(remote-desktop): preserve sessions beyond one hour (#1536) * fix(hosts): expose controls for overflowing editor tabs (#1537) * fix(hosts): expose controls for overflowing editor tabs * test(hosts): mock resize observation in admin panel tests * fix(status): skip TCP probes while host sessions are active (#1538) * fix(database): batch session activity persistence (#1539) * docs(api): describe cookie and API key authentication (#1540) * fix(snippets): repair missing note column on SQLite upgrades (#1541) * fix(docker): retain stored SSH credential association (#1543) * fix(file-manager): render transfer toasts without plugin hooks (#1546) * feat(hosts): keep compact row actions inline (#1547) * fix(auth): allow retrying unavailable second-factor interfaces (#1549) * fix(auth): reject unresolved legacy identity provisioning (#1550) * fix(desktop): ship the plugin SDK inside Mac App Store builds (#1551) * fix(tmux): pass full session info to the terminal's session picker (#1552) The tmux.sessions service reduced detected sessions to bare names, but the picker reads session.name, so every entry rendered blank and selecting one sent an empty name, which created a new session instead of attaching. * fix(ssh): read force keyboard-interactive as a boolean when resolving hosts (#1553) The column holds the text "true"/"false", and the resolver passed it through as-is. The string "false" is truthy, so the password provider treated every saved host as forced keyboard-interactive and left the password out. Jump hops are built straight from the resolved host, so a password hop whose server doesn't offer keyboard-interactive failed with "All configured authentication methods failed". * fix(database): batch database saves for bulk host writes (#1554) * fix(database): yield to the event loop between database saves Each SQLite save serializes and encrypts the whole database into new buffers, which V8 only releases once the event loop turns. Boot migrations and bulk host import write plugin settings per host and per key in an awaited loop, so hundreds of full copies piled up and the container ran out of memory. * fix(database): save once per bulk host write instead of once per row On SQLite every repository write force-saves the whole database. Boot plugin data migrations, host defaults materialization and the bulk host routes write one row per host per setting, so they serialized and encrypted the full database hundreds of times in a row. DatabaseSaveTrigger.batched wraps a function so force saves made while it runs collapse into a single save when it finishes. Nested scopes fold into the outer one, and work that outlives its scope saves normally. * feat(hosts): add instance-wide predefined tag suggestions (#1548) * feat(hosts): add shared predefined tag suggestions * style(hosts): format tag catalog routes * test(database): advance fake timers past the save yield (#1555) * fix(i18n): complete Simplified Chinese core and plugin translations (#1542) * fix(i18n): complete Chinese onboarding and navigation labels * fix(i18n): translate remaining Chinese core and plugin interfaces * fix(i18n): translate host editor tab overflow controls * fix(i18n): use consistent Chinese fleet terminology * fix(i18n): localize hardcoded controls and plugin views * fix(i18n): translate built-in homepage widget catalog * test(homepage): follow translated timezone placeholder * fix(i18n): translate plugin-provided homepage widgets * fix(i18n): localize feature settings section titles * fix: 2.8 oidc accounts unable to sign in after upgrading (#1381) * fix: plugins losing the saved ssh login when copying a host (#1391) * fix: fleets, proxmox and automations not getting the host sudo password * fix: host imports running a defaults pass and metrics restart per host (#1384) * fix: high cpu from status probes and full database saves on every sample (#1300) * fix: user data export freezing the server (#1393) * fix: op:// secret references rejected as ssh keys on credentials (#1394) * fix: slow file deletes from the trash lookups on every delete (#1390) * fix: add openapi docs and error handling to host tag routes * test: compare download stream buffers directly so it stops timing out * chore: drop em dash from host row comment * chore: update release notes for 2.9.1 * fix: restore space to add host tags and redesign predefined tags editor * fix: host key silently accepted when the host is missing from the database (#1397) * fix: clearer host login failed status label and fix its translations (#1396) * chore: add host key and status label fixes to release notes * fix: sso and ldap provider dialogs overflowing the screen and using mismatched toggles * chore: increment ver * fix(audit): store plugin entries with no acting user as a null user_id (#1556) Plugin audit entries written outside a request used the literal "system" as user_id. That column references users.id, so the insert was refused (Postgres logs it as an FK violation) and the entry was silently dropped. Write null instead and keep "system" / plugin:<id> in username. * chore: add sso/ldap dialog and audit log fixes to release notes * fix: tunnels and host settings missing from shared hosts on desktop * fix: remote desktop logins missing from shared hosts on desktop * fix: simplify host status to online/offline and keep it live without a refresh * chore: sync Crowdin translations for 2.9.1 --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
556 lines
31 KiB
JSON
556 lines
31 KiB
JSON
{
|
|
"nav": {
|
|
"files": "파일",
|
|
"sftp": "SFTP",
|
|
"openFileManager": "파일 관리자 열기"
|
|
},
|
|
"permissions": {
|
|
"use": {
|
|
"title": "파일 관리자를 사용하세요",
|
|
"description": "SFTP를 통해 파일을 검색, 편집 및 전송하세요."
|
|
}
|
|
},
|
|
"settings": {
|
|
"host": {
|
|
"enable": {
|
|
"label": "파일 관리자 활성화",
|
|
"description": "SFTP를 통해 이 호스트의 파일을 탐색하고 편집하세요."
|
|
},
|
|
"defaultPath": {
|
|
"label": "기본 경로"
|
|
},
|
|
"scpLegacy": {
|
|
"label": "SCP 레거시 모드"
|
|
}
|
|
},
|
|
"user": {
|
|
"transferConcurrency": {
|
|
"label": "동시 파일 전송",
|
|
"description": "로컬/원격 파일 관리자가 동시에 업로드 또는 다운로드할 수 있는 파일 수를 지정합니다. 서버에서 SFTP 채널 수를 제한하는 경우 이 값을 낮추십시오."
|
|
},
|
|
"confirmBeforeTrash": {
|
|
"label": "파일을 휴지통으로 이동하기 전에 확인하십시오.",
|
|
"description": "원격 파일을 휴지통으로 이동하기 전에 확인 메시지를 표시합니다. 영구 삭제 시에는 여전히 확인이 필요합니다."
|
|
}
|
|
}
|
|
},
|
|
"hostCapability": {
|
|
"label": "파일 관리자"
|
|
},
|
|
"fileManager": {
|
|
"noHostSelected": "선택된 호스트 없음",
|
|
"initializingEditor": "편집기 초기화 중...",
|
|
"file": "파일",
|
|
"folder": "폴더",
|
|
"uploadFile": "파일 업로드",
|
|
"downloadFile": "다운로드",
|
|
"extractArchive": "아카이브 추출",
|
|
"extractingArchive": "{{name}} 압축 해제 중...",
|
|
"archiveExtractedSuccessfully": "{{name}} 압축 해제 완료",
|
|
"extractFailed": "압축 해제 실패",
|
|
"compressFile": "파일 압축",
|
|
"compressFiles": "파일 압축",
|
|
"compressFilesDesc": "{{count}}개 항목을 아카이브로 압축",
|
|
"archiveName": "아카이브 이름",
|
|
"enterArchiveName": "아카이브 이름 입력...",
|
|
"compressionFormat": "압축 형식",
|
|
"selectedFiles": "선택한 파일",
|
|
"andMoreFiles": "그리고 {{count}}개 더...",
|
|
"compress": "압축",
|
|
"compressingFiles": "{{count}}개 항목을 {{name}}(으)로 압축 중...",
|
|
"filesCompressedSuccessfully": "{{name}} 생성 완료",
|
|
"compressFailed": "압축 실패",
|
|
"edit": "편집",
|
|
"preview": "미리보기",
|
|
"previous": "이전",
|
|
"next": "다음",
|
|
"pageXOfY": "{{total}}페이지 중 {{current}}페이지",
|
|
"zoomOut": "축소",
|
|
"zoomIn": "확대",
|
|
"newFile": "새 파일",
|
|
"newFolder": "새 폴더",
|
|
"rename": "이름 변경",
|
|
"uploading": "업로드 중...",
|
|
"uploadingFile": "{{name}} 업로드 중...",
|
|
"uploadingChunk": "{{name}}업로드 중 : {{percent}}% ( {{total}}의 {{chunk}} 부분)",
|
|
"fileName": "파일 이름",
|
|
"folderName": "폴더 이름",
|
|
"fileUploadedSuccessfully": "파일 \"{{name}}\" 업로드 완료",
|
|
"failedToUploadFile": "파일 업로드 실패",
|
|
"uploadingFolderFiles": "{{count}} 파일을 업로드하는 중...",
|
|
"uploadedFolderFiles": "{{count}} 파일을 성공적으로 업로드했습니다.",
|
|
"uploadedFolderPartial": "업로드된 파일 {{uploaded}} 개 중 {{failed}} 개에 실패했습니다.",
|
|
"fileDownloadedSuccessfully": "파일 \"{{name}}\" 다운로드 완료",
|
|
"failedToDownloadFile": "파일 다운로드 실패",
|
|
"fileCreatedSuccessfully": "파일 \"{{name}}\" 생성 완료",
|
|
"folderCreatedSuccessfully": "폴더 \"{{name}}\" 생성 완료",
|
|
"failedToCreateItem": "항목 생성 실패",
|
|
"operationFailed": "{{name}}의 {{operation}} 작업 실패: {{error}}",
|
|
"failedToResolveSymlink": "심볼릭 링크 해석 실패",
|
|
"itemsDeletedSuccessfully": "{{count}}개 항목이 성공적으로 삭제되었습니다",
|
|
"failedToDeleteItems": "항목 삭제 실패",
|
|
"sudoPasswordRequired": "관리자 비밀번호가 필요합니다",
|
|
"enterSudoPassword": "계속하려면 sudo 암호를 입력하세요",
|
|
"sudoPassword": "Sudo 암호",
|
|
"sudoOperationFailed": "Sudo 작업 실패",
|
|
"sudoAuthFailed": "Sudo 인증 실패",
|
|
"dragFilesToUpload": "업로드할 파일을 여기에 놓으세요",
|
|
"dropToUploadHere": "여기에 드롭하여 업로드하세요",
|
|
"dropToDownloadHere": "여기를 클릭하여 다운로드하세요",
|
|
"localFiles": "로컬",
|
|
"showLocalFiles": "로컬 파일 표시(분할 화면)",
|
|
"hideLocalFiles": "로컬 파일 숨기기",
|
|
"localHome": "홈 폴더",
|
|
"localPathPlaceholder": "로컬 폴더 경로",
|
|
"localShowHidden": "숨겨진 파일 표시",
|
|
"localHideHidden": "숨겨진 파일 숨기기",
|
|
"localRevealInFileManager": "시스템 파일 관리자에서 보기",
|
|
"localCannotOpenFolder": "폴더를 열 수 없습니다",
|
|
"localItemCount": "{{count}}개 항목",
|
|
"localSelectedCount": "{{count}}개 선택됨",
|
|
"back": "뒤로",
|
|
"forward": "앞으로",
|
|
"up": "위로",
|
|
"kind": "친절한",
|
|
"localUploadingProgress": "{{current}} 의 {{total}}를 업로드 중입니다.",
|
|
"localDownloadingProgress": "{{current}} 의 {{total}} 다운로드 중",
|
|
"localTransferInFlight": "{{count}} 즉시",
|
|
"localPreparingDownload": "다운로드 준비 중...",
|
|
"localTransferCancelled": "전송 취소됨",
|
|
"localNothingToTransfer": "이체할 내용이 없습니다",
|
|
"localUploadComplete": "{{count}} 개의 파일을 업로드했습니다.",
|
|
"localUploadFailed": "업로드 실패",
|
|
"localUploadPartial": "업로드된 파일 {{done}} 개 중 {{failed}} 개에 실패했습니다.",
|
|
"localDownloadComplete": "{{count}} 파일을 다운로드했습니다.",
|
|
"localDownloadFailed": "다운로드 실패",
|
|
"localDownloadPartial": "{{done}} 파일 다운로드 실패, {{failed}}",
|
|
"localReplaceExistingPrompt": "이 폴더에 {{count}} 항목이 이미 있습니다. 바꾸시겠습니까?",
|
|
"localReplace": "바꾸기",
|
|
"localSkipExisting": "건너뛰다",
|
|
"localSkippedExisting": "기존 항목 {{count}} 개를 건너뛰었습니다.",
|
|
"localUnsafeNamesSkipped": "이 컴퓨터에서 사용할 수 없는 이름을 가진 {{count}} 항목을 건너뛰었습니다.",
|
|
"localOpen": "열기",
|
|
"localOpenFolder": "폴더 열기",
|
|
"localUploadToRemote": "서버에 업로드",
|
|
"localUploadToRemoteMany": "{{count}} 아이템을 서버에 업로드하세요",
|
|
"localMoveToTrash": "쓰레기통으로 이동",
|
|
"localMoveToTrashMany": "{{count}} 항목을 휴지통으로 이동",
|
|
"localTrashConfirmSingle": "\"{{name}}\"를 휴지통으로 옮기시겠습니까?",
|
|
"localTrashConfirmFolder": "폴더 \"{{name}}\"와 그 안의 모든 내용을 휴지통으로 옮기시겠습니까?",
|
|
"localTrashConfirmMany": "{{count}} 항목을 휴지통으로 옮기시겠습니까?",
|
|
"localTrashed": "{{count}} 항목을 휴지통으로 이동했습니다.",
|
|
"localTrashFailed": "쓰레기통으로 옮길 수 없었습니다",
|
|
"localRenameFailed": "이름 변경 실패",
|
|
"localCreateFailed": "항목을 생성할 수 없습니다.",
|
|
"goToParentFolder": "상위 폴더로 이동",
|
|
"resizeSidebar": "드래그하여 사이드바 크기를 조절하세요 (더블 클릭하면 원래 크기로 돌아갑니다).",
|
|
"resizeLocalPane": "드래그하여 로컬 창의 크기를 조정하세요(두 번 클릭하면 원래 크기로 돌아갑니다).",
|
|
"columns": "열",
|
|
"columnsHint": "마우스 오른쪽 버튼을 클릭하여 열을 선택하세요.",
|
|
"emptyFolder": "이 폴더는 비어 있습니다",
|
|
"searchFiles": "파일 검색...",
|
|
"upload": "업로드",
|
|
"selectHostToStart": "파일 관리를 시작할 호스트를 선택하세요",
|
|
"sshRequiredForFileManager": "파일 관리자에는 SSH가 필요합니다. 이 호스트에는 SSH가 활성화되어 있지 않습니다.",
|
|
"failedToConnect": "SSH 연결 실패",
|
|
"failedToLoadDirectory": "디렉터리 로드 실패",
|
|
"noSSHConnection": "SSH 연결을 사용할 수 없음",
|
|
"copy": "복사",
|
|
"cut": "잘라내기",
|
|
"paste": "붙여넣기",
|
|
"copyPath": "경로 복사",
|
|
"copyPaths": "경로 복사",
|
|
"delete": "삭제",
|
|
"properties": "속성",
|
|
"refresh": "새로 고침",
|
|
"downloadFiles": "브라우저로 {{count}}개 파일 다운로드",
|
|
"copyFiles": "{{count}}개 항목 복사",
|
|
"cutFiles": "{{count}}개 항목 잘라내기",
|
|
"deleteFiles": "{{count}}개 항목 삭제",
|
|
"filesCopiedToClipboard": "{{count}}개 항목이 클립보드에 복사되었습니다",
|
|
"filesCutToClipboard": "{{count}}개 항목을 클립보드로 잘라냈습니다",
|
|
"pathCopiedToClipboard": "경로가 클립보드에 복사되었습니다",
|
|
"pathsCopiedToClipboard": "{{count}}개 경로가 클립보드에 복사되었습니다",
|
|
"failedToCopyPath": "클립보드에 경로를 복사하지 못했습니다",
|
|
"copyFolderLink": "폴더 링크 복사",
|
|
"copyCurrentFolderLink": "현재 폴더 링크 복사",
|
|
"folderLinkCopied": "폴더 링크가 클립보드에 복사되었습니다",
|
|
"failedToCopyFolderLink": "폴더 링크를 복사하지 못했습니다",
|
|
"movedItems": "{{count}}개 항목을 이동했습니다",
|
|
"failedToDeleteItem": "항목을 삭제하지 못했습니다",
|
|
"itemRenamedSuccessfully": "{{type}} 이름이 변경되었습니다",
|
|
"failedToRenameItem": "항목 이름을 변경하지 못했습니다",
|
|
"download": "다운로드",
|
|
"openExternalEditor": "외부 편집기로 열기",
|
|
"chooseExternalEditor": "외부 편집기 선택",
|
|
"externalEditorSelected": "외부 편집기가 선택되었습니다",
|
|
"externalEditorDesktopOnly": "외부 편집기는 데스크톱 앱에서만 사용할 수 있습니다",
|
|
"externalEditorOpened": "외부 편집기에서 열렸습니다. 저장하면 변경 사항이 서버에 업로드됩니다.",
|
|
"failedToOpenExternalEditor": "외부 편집기를 열지 못했습니다",
|
|
"failedToSelectExternalEditor": "외부 편집기를 선택하지 못했습니다",
|
|
"permissions": "권한",
|
|
"size": "크기",
|
|
"modified": "수정됨",
|
|
"path": "경로",
|
|
"confirmDelete": "{{name}}을(를) 삭제하시겠습니까?",
|
|
"permissionDenied": "권한이 거부되었습니다",
|
|
"serverError": "서버 오류",
|
|
"fileSavedSuccessfully": "파일이 저장되었습니다",
|
|
"failedToSaveFile": "파일을 저장하지 못했습니다",
|
|
"confirmDeleteSingleItem": "\"{{name}}\"을(를) 영구적으로 삭제하시겠습니까?",
|
|
"confirmDeleteMultipleItems": "{{count}}개 항목을 영구적으로 삭제하시겠습니까?",
|
|
"confirmDeleteMultipleItemsWithFolders": "{{count}}개 항목을 영구적으로 삭제하시겠습니까? 폴더 및 해당 내용이 포함됩니다.",
|
|
"confirmDeleteFolder": "\"{{name}}\" 폴더와 모든 내용을 영구적으로 삭제하시겠습니까?",
|
|
"permanentDeleteWarning": "이 작업은 되돌릴 수 없습니다. 항목이 서버에서 영구적으로 삭제됩니다.",
|
|
"moveToTrashWarning": "해당 항목은 Termix 휴지통으로 이동되며, 보존 기간이 만료되기 전에 복원할 수 있습니다.",
|
|
"itemsMovedToTrash": "{{count}} 항목이 휴지통으로 이동되었습니다.",
|
|
"trash": "쓰레기",
|
|
"trashDescription": "삭제된 항목은 이 호스트에 {{days}} 일 동안 보관됩니다.",
|
|
"trashLoadFailed": "휴지통을 불러오는 데 실패했습니다.",
|
|
"trashEmpty": "쓰레기통이 비어있습니다",
|
|
"trashRestore": "복원",
|
|
"trashRestored": "복원됨 {{name}}",
|
|
"trashRestoreFailed": "항목 복원에 실패했습니다. 원래 경로가 이미 존재할 수 있습니다.",
|
|
"trashDeletePermanently": "영구 삭제",
|
|
"trashDeleteConfirm": "{{name}}를 영구적으로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
|
|
"trashPermanentlyDeleted": "영구 삭제됨 {{name}}",
|
|
"trashDeleteFailed": "항목을 영구적으로 삭제하는 데 실패했습니다.",
|
|
"trashEmptyAction": "쓰레기통을 비우세요",
|
|
"trashEmptyConfirm": "휴지통에 있는 모든 항목을 영구적으로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
|
|
"trashEmptied": "쓰레기통이 비워졌습니다",
|
|
"trashRetention": "자동 정리 시간 (일)",
|
|
"trashRetentionSaved": "휴지통 보존 시간 업데이트됨",
|
|
"trashRetentionFailed": "휴지통 보존 기간 업데이트에 실패했습니다.",
|
|
"trashUnavailableConfirm": "이 항목은 다른 파일 시스템에 있거나 관리자 권한이 필요하기 때문에 휴지통으로 이동할 수 없습니다. 영구적으로 삭제하시겠습니까?",
|
|
"recent": "최근 항목",
|
|
"pinned": "고정됨",
|
|
"folderShortcuts": "폴더 바로 가기",
|
|
"failedToReconnectSSH": "SSH 세션 재연결에 실패했습니다",
|
|
"openTerminalHere": "여기서 터미널 열기",
|
|
"run": "실행",
|
|
"openTerminalInFolder": "이 폴더에서 터미널 열기",
|
|
"openTerminalInFileLocation": "파일 위치에서 터미널 열기",
|
|
"runningFile": "실행 중 - {{file}}",
|
|
"onlyRunExecutableFiles": "실행 파일만 실행할 수 있습니다",
|
|
"directories": "디렉터리",
|
|
"removedFromRecentFiles": "최근 파일에서 \"{{name}}\" 제거됨",
|
|
"removeFailed": "제거 실패",
|
|
"unpinnedSuccessfully": "\"{{name}}\" 고정 해제 완료",
|
|
"unpinFailed": "고정 해제 실패",
|
|
"removedShortcut": "바로 가기 \"{{name}}\" 제거됨",
|
|
"removeShortcutFailed": "바로 가기 제거 실패",
|
|
"clearedAllRecentFiles": "모든 최근 파일 지움",
|
|
"clearFailed": "지우기 실패",
|
|
"removeFromRecentFiles": "최근 파일에서 제거",
|
|
"clearAllRecentFiles": "모든 최근 파일 지우기",
|
|
"unpinFile": "파일 고정 해제",
|
|
"removeShortcut": "바로 가기 제거",
|
|
"pinFile": "파일 고정",
|
|
"addToShortcuts": "바로 가기에 추가",
|
|
"pasteFailed": "붙여넣기 실패",
|
|
"noUndoableActions": "실행 취소할 동작 없음",
|
|
"undoCopySuccess": "복사 작업 실행 취소: 복사된 파일 {{count}}개 삭제됨",
|
|
"undoCopyFailedDelete": "실행 취소 실패: 복사된 파일을 삭제할 수 없음",
|
|
"undoCopyFailedNoInfo": "실행 취소 실패: 복사된 파일 정보를 찾을 수 없음",
|
|
"undoMoveSuccess": "이동 작업 실행 취소: {{count}}개 파일을 원래 위치로 다시 이동했습니다",
|
|
"undoMoveFailedMove": "실행 취소 실패: 파일을 되돌릴 수 없음",
|
|
"undoMoveFailedNoInfo": "실행 취소 실패: 이동된 파일 정보를 찾을 수 없음",
|
|
"undoDeleteNotSupported": "삭제 작업은 실행 취소할 수 없습니다: 서버에서 파일이 영구 삭제됨",
|
|
"undoTypeNotSupported": "지원되지 않는 실행 취소 작업 유형",
|
|
"undoOperationFailed": "실행 취소 작업 실패",
|
|
"unknownError": "알 수 없는 오류",
|
|
"confirm": "확인",
|
|
"find": "찾기...",
|
|
"replace": "바꾸기",
|
|
"downloadInstead": "대신 다운로드",
|
|
"keyboardShortcuts": "키보드 단축키",
|
|
"searchAndReplace": "검색 및 바꾸기",
|
|
"editing": "편집",
|
|
"search": "검색",
|
|
"findNext": "다음 찾기",
|
|
"findPrevious": "이전 찾기",
|
|
"save": "저장",
|
|
"selectAll": "모두 선택",
|
|
"undo": "실행 취소",
|
|
"redo": "다시 실행",
|
|
"moveLineUp": "줄 위로 이동",
|
|
"moveLineDown": "줄 아래로 이동",
|
|
"toggleComment": "주석 토글",
|
|
"autoComplete": "자동 완성",
|
|
"imageLoadError": "이미지를 불러오지 못했습니다",
|
|
"startTyping": "입력하세요...",
|
|
"unknownSize": "알 수 없는 크기",
|
|
"fileIsEmpty": "파일이 비어 있습니다",
|
|
"largeFileWarning": "대용량 파일 경고",
|
|
"largeFileWarningDesc": "이 파일의 크기는 {{size}}이며, 텍스트로 열 경우 성능 문제가 발생할 수 있습니다.",
|
|
"fileNotFoundAndRemoved": "\"{{name}}\" 파일을 찾을 수 없어 최근/고정 파일에서 제거되었습니다.",
|
|
"failedToLoadFile": "파일을 불러오지 못했습니다: {{error}}",
|
|
"serverErrorOccurred": "서버 오류가 발생했습니다. 나중에 다시 시도하세요.",
|
|
"autoSaveFailed": "자동 저장 실패",
|
|
"fileAutoSaved": "파일 자동 저장됨",
|
|
"moveFileFailed": "{{name}} 이동 실패",
|
|
"moveOperationFailed": "이동 작업 실패",
|
|
"canOnlyCompareFiles": "파일 두 개만 비교할 수 있습니다.",
|
|
"comparingFiles": "파일 비교 중: {{file1}} 및 {{file2}}",
|
|
"dragFailed": "드래그 작업 실패",
|
|
"filePinnedSuccessfully": "\"{{name}}\" 파일이 고정되었습니다.",
|
|
"pinFileFailed": "파일 고정 실패",
|
|
"fileUnpinnedSuccessfully": "\"{{name}}\" 파일이 고정 해제되었습니다.",
|
|
"unpinFileFailed": "파일 고정 해제 실패",
|
|
"shortcutAddedSuccessfully": "폴더 바로가기 \"{{name}}\"이 추가되었습니다.",
|
|
"addShortcutFailed": "바로가기 추가 실패",
|
|
"operationCompletedSuccessfully": "{{count}}개 항목 {{operation}} 성공",
|
|
"operationCompleted": "{{count}}개 항목 {{operation}}",
|
|
"downloadFileSuccess": "파일 {{name}} 다운로드 성공",
|
|
"downloadFileFailed": "다운로드 실패",
|
|
"downloadingFile": "{{name}}… 다운로드 중",
|
|
"downloadProgressBytes": "{{transferred}} / {{total}}",
|
|
"moveTo": "{{name}}로 이동",
|
|
"diffCompareWith": "{{name}}와/과 Diff 비교",
|
|
"dragOutsideToDownload": "창 밖으로 드래그하여 다운로드 ({{count}}개 파일)",
|
|
"newFolderDefault": "새 폴더",
|
|
"newFileDefault": "새 파일.txt",
|
|
"successfullyMovedItems": "{{count}}개 항목을 {{target}}에 성공적으로 이동했습니다.",
|
|
"move": "이동",
|
|
"searchInFile": "파일에서 검색 (Ctrl+F)",
|
|
"showKeyboardShortcuts": "키보드 단축키 보기",
|
|
"decreaseFontSize": "글꼴 크기 줄이기",
|
|
"increaseFontSize": "글꼴 크기 늘리기",
|
|
"startWritingMarkdown": "마크다운 내용 작성을 시작하세요...",
|
|
"loadingFileComparison": "파일 비교 로딩 중...",
|
|
"reload": "새로 고침",
|
|
"compare": "비교",
|
|
"sideBySide": "나란히 보기",
|
|
"inline": "인라인",
|
|
"fileComparison": "파일 비교: {{file1}} vs {{file2}}",
|
|
"fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.",
|
|
"sshConnectionFailed": "SSH 연결 실패. {{name}}({{ip}}:{{port}})에 대한 연결을 확인하세요.",
|
|
"loadFileFailed": "파일 불러오기 실패: {{error}}",
|
|
"connecting": "연결 중...",
|
|
"connectedSuccessfully": "연결 성공",
|
|
"totpVerificationFailed": "TOTP 인증 실패",
|
|
"browserSignInFailed": "로그인에 실패했습니다. 다시 시도해 주세요.",
|
|
"authenticationFailed": "인증 실패",
|
|
"incorrectPassphrase": "잘못된 암호입니다. 다시 시도하세요.",
|
|
"verificationCodePrompt": "인증 코드:",
|
|
"changePermissions": "권한 변경",
|
|
"currentPermissions": "현재 권한",
|
|
"owner": "소유자",
|
|
"group": "그룹",
|
|
"others": "기타",
|
|
"read": "읽기",
|
|
"write": "쓰기",
|
|
"execute": "실행",
|
|
"permissionsChangedSuccessfully": "권한이 성공적으로 변경되었습니다",
|
|
"failedToChangePermissions": "권한 변경에 실패했습니다",
|
|
"name": "이름",
|
|
"sortByName": "이름",
|
|
"sortByDate": "수정일",
|
|
"sortBySize": "크기",
|
|
"ascending": "오름차순",
|
|
"descending": "내림차순",
|
|
"root": "루트",
|
|
"new": "새로 만들기",
|
|
"sortBy": "정렬 기준",
|
|
"items": "항목",
|
|
"selected": "선택됨",
|
|
"editor": "편집기",
|
|
"octal": "8진수",
|
|
"storage": "저장소",
|
|
"disk": "디스크",
|
|
"used": "사용",
|
|
"of": "중",
|
|
"toggleSidebar": "사이드바 표시/숨기기",
|
|
"compactLayout": "간결한 레이아웃을 사용하세요",
|
|
"comfortableLayout": "편안한 레이아웃을 사용하세요",
|
|
"cannotLoadPdf": "PDF를 로드할 수 없습니다",
|
|
"pdfLoadError": "이 PDF 파일을 로드하는 중 오류가 발생했습니다.",
|
|
"loadingPdf": "Loading PDF viewer...",
|
|
"loadingPage": "페이지 로드 중...",
|
|
"cancel": "취소",
|
|
"copiedItems_one": "복사됨 {{count}} 항목",
|
|
"copiedItems_other": "복사된 {{count}} 항목",
|
|
"deleteCopiedFileFailed": "{{name}}: {{error}}의 복사본을 삭제할 수 없습니다.",
|
|
"dragMovedItems_one": "{{count}} 항목을 {{target}}로 이동했습니다.",
|
|
"dragMovedItems_other": "{{count}} 항목을 {{target}}로 이동했습니다.",
|
|
"moveBackFileFailed": "{{name}} 뒤로 이동할 수 없습니다: {{error}}",
|
|
"terminal": "터미널: {{host}} ({{path}})",
|
|
"dragToDesktop": "{{name}} 를 바탕 화면으로 드래그",
|
|
"dragFilesToDesktop": "{{count}} 파일을 바탕화면으로 드래그하기",
|
|
"folderDragUnsupported": "폴더를 데스크톱으로 드래그하는 기능은 아직 지원되지 않습니다.",
|
|
"saveToDesktopFailed": "저장 실패: {{error}}",
|
|
"dragFailedDetail": "드래그 실패: {{error}}",
|
|
"videoUnsupported": "현재 사용 중인 브라우저는 이 비디오 형식을 재생할 수 없습니다.",
|
|
"downloadToPlay": "다운로드하여 다른 곳에서 재생하세요.",
|
|
"cannotPreviewType": "이 파일 형식을 미리 볼 수 없습니다.",
|
|
"cannotPreviewTypeHint": "이 파일 형식은 미리보기를 지원하지 않습니다. 다운로드하여 다른 앱에서 열어보세요.",
|
|
"loadingFile": "Loading file...",
|
|
"loadingImage": "Loading image...",
|
|
"loadingEditor": "Loading editor...",
|
|
"loadingPreview": "Loading preview...",
|
|
"loadingAudio": "Loading audio player...",
|
|
"emptyPreview": "Nothing to preview yet...",
|
|
"revert": "Revert",
|
|
"openAsText": "Open as Text",
|
|
"confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser."
|
|
},
|
|
"sftpTransfer": {
|
|
"title": "SFTP",
|
|
"description": "두 SSH 호스트 간에 파일을 전송합니다.",
|
|
"sourceServer": "소스 서버",
|
|
"destinationServer": "대상 서버",
|
|
"selectHost": "호스트를 선택하세요",
|
|
"noHostSelected": "선택된 호스트가 없습니다",
|
|
"move": "이동",
|
|
"copy": "복사",
|
|
"upload": "업로드",
|
|
"itemsSelected": "{{count}} 항목이 선택되었습니다",
|
|
"itemsSelected_other": "{{count}} 항목이 선택되었습니다",
|
|
"ready": "준비됨",
|
|
"loadingHosts": "호스트 로드 중...",
|
|
"name": "이름",
|
|
"modified": "수정됨",
|
|
"size": "크기",
|
|
"noFiles": "파일 없음",
|
|
"open": "열기",
|
|
"up": "위로",
|
|
"refresh": "새로 고침",
|
|
"copyToTarget": "대상 디렉터리로 복사",
|
|
"rename": "이름 바꾸기",
|
|
"delete": "삭제",
|
|
"editPermissions": "편집 권한",
|
|
"createNewFolder": "새 폴더 만들기",
|
|
"deleteSelectedItems": "선택한 항목 삭제",
|
|
"deleteConfirm": "선택한 항목 {{count}} 을 삭제하시겠습니까?",
|
|
"deleteConfirm_other": "선택한 항목 {{count}} 을 삭제하시겠습니까?",
|
|
"cancel": "취소",
|
|
"save": "저장",
|
|
"folderCreated": "폴더가 생성되었습니다",
|
|
"itemRenamed": "항목 이름이 변경됨",
|
|
"actionFailed": "작업 실패",
|
|
"itemsDeleted": "{{count}} 항목이 삭제되었습니다",
|
|
"itemsDeleted_other": "{{count}} 항목이 삭제되었습니다",
|
|
"deleteFailed": "삭제 실패",
|
|
"permissionsUpdated": "권한이 업데이트되었습니다",
|
|
"noRemoteSessionConnected": "원격 세션이 연결되지 않았습니다.",
|
|
"failedToListFiles": "파일 목록을 불러오는 데 실패했습니다.",
|
|
"failedToRefresh": "새로 고침에 실패했습니다",
|
|
"destinationInsideSource": "대상 경로는 선택한 소스 경로 내에 있을 수 없습니다.",
|
|
"sameHostNoOp": "원본 폴더와 대상 폴더가 동일합니다."
|
|
},
|
|
"hosts": {
|
|
"fileManager": "파일 관리자",
|
|
"fileManagerUrlCopied": "파일 관리자 URL 복사됨",
|
|
"copyFileManagerUrlAction": "파일 관리자 URL 복사",
|
|
"docsLink": "문서 보기",
|
|
"hostNotFound": "호스트를 찾을 수 없습니다",
|
|
"loadingHost": "호스트 로드 중..."
|
|
},
|
|
"onboarding": {
|
|
"feature_files": "파일 관리자",
|
|
"feature_files_desc": "앱을 종료하지 않고 SFTP를 통해 파일을 검색, 업로드, 다운로드 및 편집할 수 있습니다."
|
|
},
|
|
"terminal": {
|
|
"runTitle": "{{command}} 실행 중 - {{host}}",
|
|
"terminalTitle": "터미널 - {{host}}",
|
|
"terminalWithPath": "터미널 - {{host}}:{{path}}"
|
|
},
|
|
"transfer": {
|
|
"browseFolders": "대상 폴더 찾아보기",
|
|
"browsePathError": "대상 호스트에서 이 경로를 열 수 없습니다.",
|
|
"browsePathWillBeCreated": "이 폴더가 아직 존재하지 않습니다. 전송 시작 시 생성됩니다.",
|
|
"cancel": "취소",
|
|
"cleanupDestFiles": "대상 정리",
|
|
"cleanupDestFilesError": "정리 실패",
|
|
"cleanupDestFilesNothing": "대상에 정리할 항목이 없습니다.",
|
|
"cleanupDestFilesPartial": "일부 부분 파일을 제거할 수 없었습니다.",
|
|
"cleanupDestFilesSuccess": "대상에서 부분 파일을 제거했습니다.",
|
|
"confirmCopy": "복사",
|
|
"confirmMove": "이동",
|
|
"copyFolderToHost": "폴더를 호스트로 복사…",
|
|
"copyItemsToHost": "{{count}}개 항목을 호스트로 복사…",
|
|
"copyToHost": "호스트로 복사…",
|
|
"destinationPath": "대상 경로",
|
|
"destMustBeDirectory": "여러 항목 전송 시 대상은 디렉터리여야 합니다.",
|
|
"goUp": "위로",
|
|
"hostAuthRequired": "인증이 필요합니다. 먼저 이 호스트에서 파일 관리자를 여십시오.",
|
|
"hostConnecting": "연결 중…",
|
|
"hostConnectionFailed": "연결 실패",
|
|
"hostDisconnected": "연결되지 않음",
|
|
"hostReady": "준비됨",
|
|
"itemsSummary": "{{count}}개 항목",
|
|
"jumpHostLimitation": "두 호스트 모두 Termix 서버에서 접근 가능해야 합니다. 호스트 간 직접 라우팅은 지원되지 않습니다.",
|
|
"methodAuto": "자동",
|
|
"methodAutoHint": "파일 수, 크기 및 압축 가능성을 기준으로 tar 또는 파일별 SFTP를 선택합니다. 단일 파일은 항상 스트리밍 SFTP를 사용합니다.",
|
|
"methodItemSftp": "파일별 SFTP",
|
|
"methodItemSftpHint": "SFTP를 통해 각 파일을 개별적으로 전송합니다. Windows를 포함한 모든 호스트에서 작동합니다.",
|
|
"methodItemSftpLimitation": "각 파일은 단일 파일 복사와 동일한 SFTP 스트림을 순차적으로 사용합니다. 진행률이 모든 파일에 걸쳐 결합되므로 대용량 파일에서는 진행 막대가 느리게 움직입니다.",
|
|
"methodLabel": "전송 방법",
|
|
"methodPreviewError": "전송 방법을 미리 볼 수 없습니다. 시작 시 서버가 방법을 선택합니다.",
|
|
"methodPreviewLoading": "전송 방법 계산 중…",
|
|
"methodPreviewScanSummary": "{{fileCount}}개 파일, 총 {{totalSize}} (소스 호스트에서 스캔됨).",
|
|
"methodPreviewWillUseItemSftp": "사용 예정: 파일별 SFTP",
|
|
"methodPreviewWillUseTar": "사용 예정: Tar 아카이브",
|
|
"methodReason": {
|
|
"user_item_sftp": "파일별 SFTP를 선택하셨습니다.",
|
|
"user_tar": "tar 아카이브를 선택하셨습니다.",
|
|
"tar_unavailable": "두 호스트 중 하나 또는 둘 모두에서 Tar를 사용할 수 없으므로 파일별 SFTP 전송이 대신 사용됩니다.",
|
|
"windows_host": "Windows 호스트가 사용되므로 tar는 사용되지 않습니다.",
|
|
"auto_multi_large": "자동: 압축 가능한 데이터가 포함된 대용량 파일({{largestSize}})을 비롯한 여러 파일. Tar는 이 파일들을 하나의 전송으로 묶습니다.",
|
|
"auto_single_large_in_archive": "자동: 이 세트에는 하나의 큰 파일({{largestSize}})이 있으므로 파일별 SFTP입니다.",
|
|
"auto_many_incompressible": "자동: 대부분 압축 불가능한 데이터이므로 파일별 SFTP를 사용합니다.",
|
|
"auto_many_files": "자동: 파일이 많음({{fileCount}}), tar는 파일당 오버헤드를 줄입니다.",
|
|
"auto_default": "자동: 이 세트에 대해 파일별 SFTP."
|
|
},
|
|
"methodTar": "Tar 아카이브",
|
|
"methodTarHint": "소스에서 압축, 하나의 아카이브 전송, 목적지에서 추출. 두 Unix 호스트에 tar가 필요합니다.",
|
|
"metricsCompress": "소스에서 압축: {{duration}}",
|
|
"metricsExtract": "목적지에서 추출: {{duration}}",
|
|
"metricsPrepare": "대상 준비: {{duration}}",
|
|
"metricsRouteBenchmark": "경로 탐색: 직접 {{direct}}, 릴레이 {{relay}}",
|
|
"metricsSourceDelete": "소스에서 제거: {{duration}}",
|
|
"metricsTotal": "총 시간: {{duration}}",
|
|
"metricsTransfer": "엔드 투 엔드: {{throughput}} ({{duration}})",
|
|
"metricsVerify": "SHA-256 검증 완료: {{duration}}",
|
|
"moveFolderToHost": "폴더를 호스트로 이동…",
|
|
"moveItemsToHost": "{{count}}개 항목을 호스트로 이동…",
|
|
"moveToHost": "호스트로 이동…",
|
|
"noHostsConnected": "사용 가능한 다른 파일 관리자 호스트가 없습니다.",
|
|
"noHostsConnectedHint": "호스트 관리자에서 파일 관리자가 활성화된 다른 SSH 호스트를 추가하세요.",
|
|
"parallelSegmentsHint": "대용량 파일은 256 MB 청크로 분할됩니다. 여러 레인은 별도 연결을 사용하여 (여러 전송을 시작하는 것처럼) 총 처리량을 높입니다.",
|
|
"parallelSegmentsLabel": "병렬 전송 레인",
|
|
"parallelSegmentsOption": "{{count}}개 레인",
|
|
"progressBenchmarking": "가장 빠른 이동 경로 선택…",
|
|
"progressBytes": "{{transferred}} / {{total}}",
|
|
"progressCancel": "취소",
|
|
"progressCancelling": "취소 중…",
|
|
"progressCompressing": "소스 호스트에서 압축 중…",
|
|
"progressExtracting": "목적지에서 추출 중…",
|
|
"progressItems": "{{current}} / {{total}} 파일",
|
|
"progressReconnecting": "재연결 중…",
|
|
"progressStalled": "지연됨",
|
|
"progressTotalSpeed": "총 {{speed}} ({{lanes}}개 레인)",
|
|
"progressTransferring": "데이터 전송 중…",
|
|
"progressTransferringItems": "파일 전송 중 ({{current}}/{{total}})…",
|
|
"progressVerifying": "파일 무결성 확인 중…",
|
|
"recentDestinations": "최근 대상",
|
|
"resumedHint": "다른 창에서 시작된 활성 전송에 다시 연결되었습니다.",
|
|
"retryTransfer": "재시도",
|
|
"retryTransferError": "재시도 실패",
|
|
"selectDestinationHost": "대상 호스트 선택",
|
|
"transferCancelled": "전송 취소됨",
|
|
"transferCancelledCopyHint": "대상에 부분 파일이 남아 있을 수 있습니다.",
|
|
"transferCancelledMoveHint": "대상에 부분 파일이 남아 있을 수 있습니다. 원본 파일은 제거되지 않았습니다.",
|
|
"transferError": "전송 실패",
|
|
"transferFailedRetryHint": "대상에 부분 데이터가 유지되었습니다. 연결이 복구되면 다시 시도하면 이어서 전송됩니다.",
|
|
"transferPartialHint": "전송할 수 없습니다: {{paths}}",
|
|
"transferSuccess": "전송 완료",
|
|
"metricsHopSourceRead": "소스 → 서버: {{throughput}}",
|
|
"metricsHopDestSftpWrite": "서버 → 목적지 (SFTP): {{throughput}}",
|
|
"metricsHopDestLocalWrite": "서버 → 목적지 (로컬): {{throughput}}"
|
|
},
|
|
"plugin": {
|
|
"name": "File Manager"
|
|
}
|
|
}
|