2026-04-17 09:09:50 +08:00
export default {
// 로그인
login : {
title : 'Hermes Web UI' ,
2026-05-23 18:44:53 +08:00
description : '계속하려면 사용자 이름과 비밀번호를 입력하세요.' ,
2026-04-17 09:09:50 +08:00
placeholder : '액세스 토큰' ,
submit : '로그인' ,
tokenRequired : '액세스 토큰을 입력해 주세요' ,
invalidToken : '유효하지 않은 토큰입니다' ,
connectionFailed : '서버에 연결할 수 없습니다' ,
2026-04-22 20:27:33 +08:00
passwordLogin : '비밀번호' ,
tokenLogin : '토큰' ,
usernamePlaceholder : '사용자 이름' ,
passwordPlaceholder : '비밀번호' ,
2026-05-24 09:49:21 +08:00
defaultCredentialsHint : '기본 로그인 이름: admin, 기본 비밀번호: 123456' ,
2026-04-22 20:27:33 +08:00
credentialsRequired : '사용자 이름과 비밀번호를 입력해 주세요' ,
invalidCredentials : '사용자 이름 또는 비밀번호가 올바르지 않습니다' ,
2026-05-08 18:29:43 +08:00
tooManyAttempts : '로그인 시도 횟수가 너무 많습니다. 잠시 후 다시 시도해 주세요' ,
2026-05-24 22:36:21 +08:00
lockResetHint : '본인 서버라면 다음 명령으로 로그인 잠금을 해제할 수 있습니다:' ,
defaultLoginResetHint : '기본 admin 비밀번호를 재설정하려면 다음을 실행하세요:' ,
2026-05-23 18:44:53 +08:00
sessionExpired : '로그인이 만료되었습니다. 다시 로그인해 주세요.' ,
accessDenied : '이 리소스에 접근할 권한이 없습니다.' ,
2026-04-22 20:27:33 +08:00
passwordMismatch : '비밀번호가 일치하지 않습니다' ,
passwordTooShort : '비밀번호는 6자 이상이어야 합니다' ,
setupSuccess : '비밀번호 로그인이 설정되었습니다' ,
passwordChanged : '비밀번호가 변경되었습니다' ,
passwordRemoved : '비밀번호 로그인이 제거되었습니다' ,
setupPassword : '비밀번호 로그인 설정' ,
changePassword : '비밀번호 변경' ,
changeUsername : '사용자 이름 변경' ,
removePasswordLogin : '제거' ,
username : '사용자 이름' ,
currentPassword : '현재 비밀번호' ,
newPassword : '새 비밀번호' ,
confirmPassword : '비밀번호 확인' ,
newUsername : '새 사용자 이름' ,
usernameChanged : '사용자 이름이 변경되었습니다' ,
usernameTooShort : '사용자 이름은 2자 이상이어야 합니다' ,
2026-05-23 18:44:53 +08:00
setupDescription : '로그인에 사용할 사용자 이름과 비밀번호를 관리합니다.' ,
removeConfirm : '사용자 계정에는 비밀번호 로그인이 필요합니다.' ,
2026-04-22 20:27:33 +08:00
passwordLoginNotConfigured : '비밀번호 로그인 미설정' ,
2026-05-23 18:44:53 +08:00
passwordLoginConfigured : '현재 계정: {username}' ,
2026-05-24 09:49:21 +08:00
defaultCredentialTitle : '기본 계정과 비밀번호를 변경하세요' ,
defaultCredentialMessage : '현재 로그인 계정이 아직 기본 사용자 이름 또는 기본 비밀번호를 사용하고 있습니다. 무단 접근을 방지하려면 현재 계정에서 사용자 이름과 비밀번호를 가능한 한 빨리 변경하세요.' ,
defaultCredentialAction : '변경하기' ,
defaultCredentialLater : '나중에 알림' ,
2026-05-23 18:44:53 +08:00
} ,
users : {
title : '계정 관리' ,
2026-05-23 19:41:51 +08:00
description : '사용자를 만들고 역할을 할당하며 일반 관리자가 접근할 수 있는 프로필을 제어합니다.' ,
2026-05-23 18:44:53 +08:00
create : '사용자 만들기' ,
edit : '사용자 편집' ,
username : '사용자 이름' ,
role : '역할' ,
statusLabel : '상태' ,
2026-05-23 19:41:51 +08:00
profiles : '접근 가능한 프로필' ,
profilesPlaceholder : '접근 가능한 프로필 선택' ,
allProfiles : '모든 프로필' ,
noProfiles : '할당된 프로필 없음' ,
2026-05-23 18:44:53 +08:00
lastLogin : '마지막 로그인' ,
newPasswordOptional : '새 비밀번호 (비워두면 유지)' ,
loadFailed : '사용자 목록을 불러오지 못했습니다' ,
deleteConfirm : '이 사용자를 삭제하시겠습니까?' ,
enable : '활성화' ,
disable : '비활성화' ,
roles : {
superAdmin : '슈퍼 관리자' ,
admin : '관리자' ,
} ,
status : {
active : '활성' ,
disabled : '비활성' ,
} ,
2026-04-17 09:09:50 +08:00
} ,
// 공통
common : {
loading : '로딩 중...' ,
cancel : '취소' ,
2026-04-17 23:11:57 +08:00
retry : '재시도' ,
2026-04-17 09:09:50 +08:00
delete : '삭제' ,
edit : '편집' ,
save : '저장' ,
saved : '저장됨' ,
update : '업데이트' ,
create : '생성' ,
saveFailed : '저장 실패' ,
2026-04-24 20:41:14 +08:00
deleteFailed : '삭제 실패' ,
2026-04-17 09:09:50 +08:00
ok : '확인' ,
copied : '복사됨' ,
copy : '복사' ,
noData : '데이터 없음' ,
fetch : '가져오기' ,
add : '추가' ,
enable : '활성화' ,
disable : '비활성화' ,
configured : '구성됨' ,
notConfigured : '미구성' ,
confirm : '확인' ,
expand : '펼치기' ,
collapse : '접기' ,
2026-05-20 17:13:32 +08:00
stop : '중지' ,
start : '시작' ,
expired : '만료됨' ,
2026-04-17 09:09:50 +08:00
} ,
// 사이드바
2026-05-30 11:06:08 +08:00
// MCP 관리
mcp : {
title : 'MCP 서버' ,
loadFailed : 'MCP 서버를 불러오지 못했습니다' ,
reloadAll : '모두 다시 로드' ,
refresh : '새로고침' ,
total : '합계' ,
connected : '연결됨' ,
disconnected : '연결 끊김' ,
tools : '도구' ,
tool : '도구' ,
searchPlaceholder : '서버 검색...' ,
addServer : '+ 서버 추가' ,
zeroTools : '0개 도구' ,
loading : '로딩...' ,
empty : 'MCP 서버가 설정되지 않았습니다' ,
reloaded : '{server} 다시 로드됨' ,
reloadedAll : '모든 MCP 서버가 다시 로드되었습니다' ,
reloadFailed : '다시 로드 실패' ,
serverAdded : '서버 "{name}" 추가됨' ,
addFailed : '서버 추가 실패' ,
serverUpdated : '서버 "{name}" 업데이트됨' ,
updateFailed : '서버 업데이트 실패' ,
saveFailed : '저장 실패' ,
serverRemoved : '"{name}" 제거됨' ,
enabled : "{name} 활성화됨" ,
disabled : "{name} 비활성화됨" ,
connectedStatus : '연결됨' ,
disconnectedStatus : '연결 끊김' ,
disabledStatus : '비활성화됨' ,
toolList : '도구 목록' ,
count : ' ' ,
more : '개 더보기' ,
removeFailed : '서버 제거 실패' ,
testOk : '테스트 성공 — {count}개 도구 사용 가능' ,
testEmpty : '테스트에서 도구가 반환되지 않았습니다' ,
testFailed : '테스트 실패' ,
edit : '편집' ,
test : '테스트' ,
reload : '다시 로드' ,
remove : '제거' ,
confirmRemove : '서버 "{name}"을(를) 제거하시겠습니까?' ,
cancel : '취소' ,
add : '추가' ,
save : '저장' ,
addTitle : 'MCP 서버 추가' ,
editTitle : 'MCP 서버 편집' ,
invalidJson : 'JSON 형식 오류' ,
invalidYaml : 'YAML 형식이 올바르지 않습니다' ,
invalidConfig : '올바르지 않은 설정' ,
invalidServerConfig : '서버 설정이 올바르지 않습니다' ,
missingCommandOrUrl : 'command 또는 url이 필요합니다' ,
} ,
2026-04-17 09:09:50 +08:00
sidebar : {
chat : '채팅' ,
2026-05-01 11:27:43 +08:00
search : '검색' ,
2026-05-07 22:16:52 +08:00
apiRelay : 'API 릴레이' ,
2026-05-01 11:27:43 +08:00
history : '기록' ,
2026-04-17 09:09:50 +08:00
jobs : '예약 작업' ,
models : '모델' ,
profiles : '프로필' ,
2026-05-10 13:50:39 +02:00
plugins : '플러그인' ,
2026-05-30 11:06:08 +08:00
mcp : 'MCP' ,
2026-04-17 09:09:50 +08:00
skills : '스킬' ,
memory : '메모리' ,
logs : '로그' ,
usage : '사용량' ,
2026-05-23 09:05:03 +08:00
performance : '성능 모니터링' ,
2026-05-14 09:28:51 +08:00
skillsUsage : '스킬 사용량' ,
2026-04-17 09:09:50 +08:00
channels : '채널' ,
terminal : '터미널' ,
2026-04-23 14:10:14 +08:00
files : '파일' ,
2026-04-24 20:41:14 +08:00
groupChat : '그룹 채팅' ,
groupConversation : '대화' ,
2026-05-19 02:33:53 +02:00
groupConversationShort : '대화' ,
groupAgent : '에이전트' ,
groupAgentShort : '에전' ,
groupSystem : '시스템' ,
groupSystemShort : '시스템' ,
groupMonitoring : '모니터링' ,
groupMonitoringShort : '모니터' ,
2026-04-17 09:09:50 +08:00
settings : '설정' ,
connected : '연결됨' ,
disconnected : '연결 끊김' ,
updateTip : '터미널에서 "hermes-web-ui update"를 실행하여 업데이트하세요' ,
updateVersion : 'v{version}(으)로 업그레이드' ,
2026-05-12 03:03:07 +02:00
reloadClientVersion : 'v{version}(으)로 새로고침' ,
2026-04-17 09:09:50 +08:00
updating : '업데이트 중...' ,
2026-05-14 12:06:39 +08:00
updateSuccess : '업데이트가 완료되었습니다. 잠시 후 페이지를 새로고침하세요. 오랫동안 시작되지 않으면 수동으로 시작하세요.' ,
2026-04-17 09:09:50 +08:00
updateFailed : '업데이트 실패' ,
2026-04-22 20:27:33 +08:00
logout : '로그아웃' ,
2026-04-24 02:31:42 +02:00
nodeVersionWarning : 'Node.js v{version}이 감지되었습니다. 버전 23 이상으로 업그레이드하세요.' ,
2026-04-22 20:27:33 +08:00
changelog : '변경 이력' ,
noChangelog : '변경 이력이 없습니다' ,
2026-05-20 17:13:32 +08:00
kanban : '칸반' ,
groupTools : '도구' ,
2026-05-28 12:30:49 +08:00
groupToolsShort : "도구" ,
2026-05-29 21:07:00 +08:00
codingAgents : "코딩 에이전트" ,
2026-05-28 12:30:49 +08:00
versionPreview : "버전 미리보기" ,
2026-05-20 17:13:32 +08:00
groupPlatform : '플랫폼' ,
gateways : '게이트웨이' ,
expand : '메뉴 펼치기' ,
collapse : '메뉴 접기' ,
2026-04-17 09:09:50 +08:00
} ,
2026-05-23 09:05:03 +08:00
performance : {
title : '성능 모니터링' ,
subtitle : '시스템 리소스, Bridge Broker, Workers, 활성 세션 확인' ,
refresh : '새로고침' ,
autoRefreshOn : '자동 새로고침' ,
autoRefreshOff : '수동 새로고침' ,
loadFailed : '성능 데이터를 불러오지 못했습니다' ,
systemCpu : '시스템 CPU' ,
systemMemory : '시스템 메모리' ,
activeSessions : '활성 세션' ,
runningSessions : '실행 중 {count}' ,
workers : 'Workers' ,
totalWorkerMemory : 'Worker 총 메모리' ,
processes : '프로세스' ,
uptime : '실행 시간' ,
running : '실행 중' ,
stopped : '중지됨' ,
workerMemory : 'Worker 메모리' ,
lastUpdated : '업데이트 시간' ,
profile : 'Profile' ,
memory : '메모리' ,
sessions : '세션' ,
runningActiveSessions : '실행 중 / 활성' ,
lastUsed : '마지막 사용' ,
status : '상태' ,
noWorkers : 'Worker 없음' ,
sessionsByProfile : 'Profile별 세션' ,
noActiveSessions : '활성 세션 없음' ,
} ,
2026-05-03 22:10:40 +08:00
// 서랍
drawer : {
terminal : '터미널' ,
files : '작업 공간' ,
} ,
2026-04-17 09:09:50 +08:00
// 채팅
chat : {
2026-04-22 16:14:50 +08:00
contextRemaining : '남음' ,
2026-05-06 15:05:44 +08:00
contextClickToEdit : '클릭하여 컨텍스트 길이 편집' ,
contextEditTitle : '컨텍스트 길이 편집' ,
contextEditDesc : '현재 모델의 컨텍스트 길이 제한 설정 (토큰 수)' ,
contextEditPlaceholder : '컨텍스트 길이 입력' ,
2026-05-26 19:35:48 +08:00
contextEditHint : '일반적인 값: 256k (Hermes 기본값), 128k (GPT-4), 32k (GPT-3.5)' ,
2026-05-06 15:05:44 +08:00
contextEditSave : '저장' ,
contextEditCancel : '취소' ,
contextEditInvalid : '유효한 컨텍스트 길이를 입력하세요' ,
contextEditSuccess : '컨텍스트 길이가 업데이트되었습니다' ,
contextEditFailed : '업데이트 실패' ,
2026-04-17 09:09:50 +08:00
emptyState : 'Hermes Agent와 대화를 시작하세요' ,
2026-05-19 08:25:01 +08:00
outlineTitle : '대화 개요' ,
outlineEmpty : '대화 내용이 없습니다' ,
outlineUserQuestion : '사용자 질문' ,
2026-04-17 09:09:50 +08:00
inputPlaceholder : '메시지를 입력하세요... (Enter로 전송, Shift+Enter로 줄바꿈)' ,
2026-05-15 12:04:03 +08:00
slashCommandArgs : {
message : '<메시지>' ,
title : '<제목>' ,
text : '<텍스트>' ,
} ,
slashCommands : {
usage : '현재 세션 사용량 계산' ,
status : '세션 상태와 대기열 표시' ,
abort : '활성 Bridge 실행 중지' ,
queue : '활성 실행 뒤에 메시지 대기열 추가' ,
2026-05-25 15:48:17 +08:00
plan : 'Markdown 구현 계획 작성' ,
2026-05-25 19:26:23 +08:00
goal : 'Set a standing goal that continues across turns' ,
goalStatus : 'Show the active goal status' ,
goalPause : 'Pause the active goal loop' ,
goalResume : 'Resume the paused goal loop' ,
goalDone : 'Complete and clear the active goal' ,
goalClear : 'Clear the active goal' ,
subgoal : 'Add a criterion to the active goal' ,
2026-05-15 12:04:03 +08:00
clear : '현재 표시 내용 지우기' ,
clearHistory : '이 세션의 저장된 메시지 기록 삭제' ,
title : '이 세션 이름 변경' ,
compress : '유휴 상태에서 컨텍스트 압축 실행' ,
steer : '활성 Bridge 실행에 지시 텍스트 보내기' ,
destroy : '이 세션의 Bridge Agent 해제' ,
2026-05-30 11:06:08 +08:00
reloadMcp : 'MCP 서버 다시 로드' ,
2026-05-15 12:04:03 +08:00
} ,
2026-04-17 09:09:50 +08:00
attachFiles : '파일 첨부' ,
2026-05-17 09:01:59 +08:00
showToolCalls : '도구 호출 표시' ,
hideToolCalls : '도구 호출 숨기기' ,
2026-05-07 10:34:58 +08:00
messageQueue : '메시지 대기열' ,
removeQueuedMessage : '대기열 메시지 제거' ,
2026-04-17 09:09:50 +08:00
stop : '중지' ,
send : '전송' ,
contextUsed : '사용된 컨텍스트:' ,
sessions : '세션' ,
2026-05-06 16:15:42 +08:00
webUiSessions : '세션' ,
2026-05-19 16:09:59 +08:00
allProfiles : '모든 프로필' ,
2026-05-20 18:26:01 +08:00
profileMissingModelsTip : '이 세션의 프로필 "{profile}"에는 사용 가능한 공급자 또는 모델이 없습니다' ,
2026-05-02 03:00:47 +02:00
sessionScopeHint : '채팅에는 Web UI/API Server 세션만 표시됩니다. CLI, Telegram, Discord, Cron 등 채널 세션은 기록에서 읽기 전용으로 볼 수 있습니다.' ,
openHistory : '기록 열기' ,
hermesHistory : 'Hermes 기록' ,
2026-05-19 16:09:59 +08:00
historyScopeHint : '현재 profile의 Hermes 기록 세션을 소스별로 읽기 전용으로 봅니다.' ,
2026-04-17 09:09:50 +08:00
noSessions : '세션 없음' ,
newChat : '새 채팅' ,
2026-05-16 00:11:51 +08:00
approvalKicker : '터미널 권한' ,
approvalTitle : '실행 전에 명령 확인' ,
approvalAllowOnce : '한 번만 허용' ,
approvalAllowSession : '이 세션에서 허용' ,
approvalAlways : '항상 허용' ,
approvalDeny : '거부' ,
2026-05-24 18:09:39 +08:00
clarifyKicker : '에이전트 확인 필요' ,
clarifyTitle : '에이전트가 질문이 있습니다' ,
clarifyPlaceholder : '답변 입력...' ,
clarifySubmit : '답장' ,
clarifyDismiss : '무시' ,
2026-04-17 09:09:50 +08:00
deleteSession : '이 세션을 삭제하시겠습니까?' ,
2026-05-06 16:15:42 +08:00
toggleBatchMode : '일괄 선택' ,
selectAll : '모두 선택' ,
confirmBatchDelete : '선택한 {count}개의 세션을 삭제하시겠습니까?' ,
batchDeleteSuccess : '{count}개의 세션을 삭제했습니다' ,
batchDeletePartial : '{failed}개의 세션 삭제 실패' ,
batchDeleteFailed : '일괄 삭제 실패' ,
2026-05-27 10:05:52 +08:00
importToWebUi : 'Web UI로 가져오기' ,
importSessionSuccess : '세션을 Web UI로 가져왔습니다' ,
importSessionAlreadyExists : '세션이 이미 Web UI에 있습니다' ,
importSessionFailed : '세션 가져오기 실패' ,
2026-04-17 09:09:50 +08:00
sessionDeleted : '세션이 삭제되었습니다' ,
rename : '이름 변경' ,
2026-04-22 02:09:58 +02:00
pin : '고정' ,
unpin : '고정 해제' ,
pinned : '고정됨' ,
chatMode : '채팅' ,
liveMode : '라이브' ,
liveSessions : '라이브 세션' ,
recentBadge : '최근' ,
linkedSessions : '{count}개 연결됨' ,
noVisibleMessages : '사람이 볼 수 있는 메시지가 없습니다.' ,
monitorRoleUser : '사용자' ,
monitorRoleAssistant : '어시스턴트' ,
2026-05-24 10:55:55 +08:00
copySessionLink : '세션 링크 복사' ,
2026-05-24 19:30:32 +08:00
openSessionInNewTab : '새 탭에서 열기' ,
2026-05-24 14:13:42 +03:00
sessionLinkCopied : 'Session link copied' ,
2026-04-17 09:09:50 +08:00
copySessionId : '세션 ID 복사' ,
2026-05-07 13:49:57 +08:00
export : '내보내기' ,
exportFull : '전체 내보내기 (JSON)' ,
exportCompressed : '압축 내보내기 (TXT)' ,
exportCompressing : '컨텍스트 압축 중, 잠시 기다려주세요...' ,
exportSuccess : '세션을 내보냈습니다' ,
exportFailed : '내보내기 실패' ,
2026-04-17 09:09:50 +08:00
renamed : '이름이 변경되었습니다' ,
renameFailed : '이름 변경 실패' ,
renameSession : '세션 이름 변경' ,
2026-05-03 22:10:40 +08:00
sessionNotFound : '세션을 찾을 수 없습니다' ,
2026-04-17 09:09:50 +08:00
enterNewTitle : '새 제목을 입력하세요' ,
other : '기타' ,
runFailed : '실행 실패' ,
error : '오류' ,
tool : '도구' ,
arguments : '인수' ,
result : '결과' ,
truncated : '... (잘림)' ,
2026-05-20 17:13:32 +08:00
executionDuration : '실행 시간' , thinkingLabel : '사고 과정' ,
2026-04-25 08:46:50 +08:00
thinkingInProgress : '사고 중…' ,
thinkingShow : '사고 과정 펼치기' ,
thinkingHide : '사고 과정 접기' ,
thinkingDuration : '관측 {duration}' ,
thinkingChars : '{count}자' ,
2026-04-26 22:59:43 +08:00
copyBubble : '메시지 복사' ,
copiedBubble : '복사됨' ,
copyFailed : '복사 실패' ,
2026-05-02 13:26:57 +08:00
playSpeech : '음성 재생' ,
pauseSpeech : '일시정지' ,
resumeSpeech : '재개' ,
stopSpeech : '중지' ,
speechNotSupported : '이 브라우저는 음성 재생을 지원하지 않습니다' ,
2026-05-20 17:13:32 +08:00
searchEnterHint : 'Enter로 열기 · Esc로 닫기' ,
searchHint : 'Cmd/Ctrl+K' ,
searchScope : '검색 범위: Web UI 로컬 세션 DB만 포함하며 읽기 전용 Hermes 기록 세션은 포함하지 않습니다.' ,
searchFailed : '세션 검색 실패' ,
searchNoSnippet : '표시할 요약이 없습니다' ,
searchNoResults : '일치하는 세션이 없습니다' ,
searchRecent : '최근 세션' ,
searchEmpty : '최근 세션' ,
searchPlaceholder : '세션 검색...' ,
searchSubtitle : '제목 또는 메시지 내용으로 검색' ,
searchTitle : '세션 검색' ,
stopGateway : 'Gateway 중지' ,
start : '시작' ,
workspaceSetFailed : 'Workspace 설정 실패' ,
workspaceSet : 'Workspace가 설정되었습니다' ,
workspacePlaceholder : '프로젝트 경로 입력, 예: /home/user/project' ,
workspace : '작업 공간' ,
setWorkspaceTitle : '세션 Workspace 설정' ,
setWorkspace : 'Workspace 설정' ,
modelSetFailed : '모델 설정 실패' ,
modelSet : '모델이 설정되었습니다' ,
setModelTitle : '세션 모델 설정' ,
setModel : '모델 설정' ,
newCliChat : '새 CLI' ,
cliEmptyState : 'CLI 채팅 시작' ,
autoPlaySpeech : '음성 자동 재생' ,
2026-04-17 09:09:50 +08:00
} ,
// 예약 작업
jobs : {
title : '예약 작업' ,
createJob : '작업 생성' ,
editJob : '작업 편집' ,
noJobs : '예약된 작업이 없습니다. 새로 만들어 시작하세요.' ,
name : '이름' ,
namePlaceholder : '작업 이름' ,
schedule : '스케줄 (Cron 표현식)' ,
schedulePlaceholder : '예: 0 9 * * *' ,
quickPresets : '빠른 프리셋' ,
selectPreset : '프리셋 선택...' ,
presetEveryMinute : '매 분' ,
presetEvery5Min : '매 5분' ,
presetEveryHour : '매 시간' ,
presetEveryDay : '매일 00:00' ,
presetEveryDay9 : '매일 09:00' ,
presetEveryMonday : '매주 월요일 09:00' ,
presetEveryMonth : '매월 1일 09:00' ,
prompt : '프롬프트' ,
promptPlaceholder : '실행할 프롬프트' ,
deliverTarget : '전송 대상' ,
origin : '출처' ,
local : '로컬' ,
repeatCount : '반복 횟수 (선택)' ,
2026-05-20 17:13:32 +08:00
modelPlaceholder : '기본 모델' ,
2026-04-17 09:09:50 +08:00
repeatPlaceholder : '비워두면 무한 반복' ,
jobCreated : '작업이 생성되었습니다' ,
jobUpdated : '작업이 업데이트되었습니다' ,
nameRequired : '이름을 입력해 주세요' ,
scheduleRequired : '스케줄을 입력해 주세요' ,
loadFailed : '작업을 불러오지 못했습니다' ,
jobPaused : '작업이 일시 정지되었습니다' ,
jobResumed : '작업이 재개되었습니다' ,
jobTriggered : '작업이 실행되었습니다' ,
2026-05-20 17:13:32 +08:00
modelUpdated : '모델이 업데이트되었습니다' ,
2026-04-17 09:09:50 +08:00
jobDeleted : '작업이 삭제되었습니다' ,
status : {
running : '실행 중' ,
paused : '일시 정지' ,
disabled : '비활성화' ,
scheduled : '예약됨' ,
} ,
info : {
2026-05-20 17:13:32 +08:00
model : '모델' ,
schedule : '일정' ,
2026-04-17 09:09:50 +08:00
lastRun : '마지막 실행' ,
nextRun : '다음 실행' ,
deliver : '전송' ,
repeat : '반복' ,
} ,
action : {
pause : '일시 정지' ,
pauseJob : '작업 일시 정지' ,
resume : '재개' ,
resumeJob : '작업 재개' ,
runNow : '즉시 실행' ,
triggerImmediately : '즉시 실행' ,
} ,
2026-04-30 10:17:25 +10:00
runHistory : {
title : '실행 기록' ,
runs : '회 실행' ,
noRuns : '실행 기록이 없습니다.' ,
} ,
2026-04-17 09:09:50 +08:00
} ,
// 스킬
skills : {
title : '스킬' ,
searchPlaceholder : '스킬 검색...' ,
noMatch : '검색과 일치하는 스킬이 없습니다' ,
noSkills : '스킬을 찾을 수 없습니다' ,
backTo : '돌아가기' ,
attachedFiles : '첨부 파일' ,
loadFailed : '스킬을 불러오지 못했습니다' ,
fileLoadFailed : '파일을 불러오지 못했습니다' ,
2026-05-02 10:56:58 +10:00
modified : '사용자 수정됨' ,
archived : '보관됨' ,
pinned : '고정됨' ,
pin : '스킬 고정' ,
unpin : '고정 해제' ,
pinFailed : '고정 상태 변경 실패' ,
2026-04-17 09:09:50 +08:00
toggleFailed : '스킬 상태를 전환하지 못했습니다' ,
2026-05-02 10:56:58 +10:00
source : {
builtin : '내장' ,
hub : 'Hub' ,
local : '로컬' ,
2026-05-24 19:47:52 +08:00
external : '외부' ,
2026-05-02 10:56:58 +10:00
} ,
2026-04-17 09:09:50 +08:00
} ,
2026-05-10 13:50:39 +02:00
// 플러그인
plugins : {
title : '플러그인' ,
refresh : '새로고침' ,
notice : '탐색 가능한 Hermes 플러그인 manifest의 읽기 전용 인벤토리입니다. 탐색 메타데이터는 플러그인 코드를 로드하지 않고 읽습니다. v1의 관리 작업은 CLI에 유지되며, 변경 사항은 새 Hermes 세션에서 적용됩니다.' ,
loadFailed : '플러그인을 불러오지 못했습니다' ,
commandCopied : '명령을 복사했습니다' ,
searchPlaceholder : 'key, 이름, 설명, 경로 검색...' ,
source : '소스' ,
kind : '종류' ,
statusTitle : '상태' ,
configStatus : 'config: {status}' ,
notAvailable : 'n/a' ,
copyCommand : '명령 복사' ,
managedElsewhere : '다른 곳에서 관리됨' ,
noMatch : '현재 필터와 일치하는 플러그인이 없습니다' ,
enabled : '활성화됨' ,
disabled : '비활성화됨' ,
summary : {
total : '전체' ,
active : '활성 / 자동' ,
inactive : '비활성' ,
disabled : '비활성화됨' ,
providerManaged : 'Provider 관리' ,
} ,
status : {
enabled : '활성화됨' ,
'auto-active' : '자동 활성' ,
inactive : '비활성' ,
disabled : '비활성화됨' ,
'provider-managed' : 'Provider 관리' ,
} ,
statusLabel : {
enabled : '설정으로 활성화됨' ,
'auto-active' : '자동 활성' ,
inactive : '비활성' ,
disabled : '비활성화됨' ,
'provider-managed' : 'Provider 관리' ,
} ,
configStatuses : {
enabled : '활성화됨' ,
disabled : '비활성화됨' ,
'not-enabled' : '활성화되지 않음' ,
auto : '자동' ,
'provider-managed' : 'Provider 관리' ,
} ,
table : {
plugin : '플러그인' ,
status : '상태' ,
source : '소스' ,
kind : '종류' ,
capabilities : '기능' ,
path : '경로 / entrypoint' ,
cli : 'CLI' ,
} ,
capabilities : {
tools : '{count} tools' ,
hooks : '{count} hooks' ,
env : '{count} env' ,
} ,
metadata : {
2026-05-20 17:13:32 +08:00
agentRoot : '에이전트 루트' ,
2026-05-10 13:50:39 +02:00
python : 'Python' ,
2026-05-20 17:13:32 +08:00
scanCwd : 'cwd 스캔' ,
2026-05-10 13:50:39 +02:00
projectPlugins : '프로젝트 플러그인' ,
} ,
} ,
2026-04-17 09:09:50 +08:00
// 메모리
memory : {
title : '메모리' ,
refresh : '새로고침' ,
loadFailed : '메모리를 불러오지 못했습니다' ,
myNotes : '내 메모' ,
noNotes : '메모가 없습니다.' ,
notesPlaceholder : '메모를 작성하세요...' ,
userProfile : '사용자 프로필' ,
noProfile : '프로필이 없습니다.' ,
profilePlaceholder : '프로필을 작성하세요...' ,
soul : '소울' ,
noSoul : '소울 설정이 없습니다.' ,
soulPlaceholder : '소울 설정을 작성하세요...' ,
} ,
// 모델
models : {
title : '모델' ,
addProvider : 'Provider 추가' ,
providerType : 'Provider 유형' ,
preset : '프리셋' ,
custom : '사용자 지정' ,
selectProvider : 'Provider 선택' ,
chooseProvider : 'Provider를 선택하세요...' ,
name : '이름' ,
autoGeneratedName : 'Base URL에서 자동 생성' ,
baseUrl : 'Base URL' ,
2026-04-25 14:00:07 +08:00
region : '지역' ,
regionIntl : '국제판' ,
regionCn : '중국 본토' ,
2026-04-17 09:09:50 +08:00
baseUrlPlaceholder : '예: https://api.example.com/v1' ,
apiKey : 'API Key' ,
apiKeyPlaceholder : 'sk-...' ,
defaultModel : '기본 모델' ,
2026-04-17 22:05:06 +08:00
selectOrInput : '모델 선택 또는 직접 입력...' ,
2026-04-17 09:09:50 +08:00
selectModel : '모델 선택...' ,
providerAdded : 'Provider가 추가되었습니다' ,
providerDeleted : 'Provider가 삭제되었습니다' ,
deleteProvider : 'Provider 삭제' ,
deleteConfirm : '"{name}"을(를) 삭제하시겠습니까?' ,
2026-04-17 23:11:57 +08:00
codexLoginTitle : 'OpenAI Codex 로그인' ,
codexWaiting : '인증 페이지에서 아래 코드를 입력하여 로그인하세요:' ,
codexCopyCode : '코드가 복사되었습니다' ,
codexOpenLink : '인증 페이지 열기' ,
codexApproved : '로그인 성공' ,
codexExpired : '인증이 만료되었습니다. 다시 시도해주세요.' ,
2026-04-23 08:39:19 +08:00
nousLoginTitle : 'Nous Portal 로그인' ,
nousWaiting : '인증 페이지에서 이 코드를 입력하세요:' ,
nousCopyCode : '코드 복사됨' ,
nousOpenLink : '인증 페이지 열기' ,
nousApproved : '로그인 성공' ,
nousDenied : '인증이 거부되었습니다' ,
nousExpired : '인증이 만료되었습니다' ,
2026-04-26 22:51:35 +08:00
copilotLoginTitle : 'GitHub Copilot 로그인' ,
copilotWaiting : 'GitHub을 열고 아래의 디바이스 코드를 입력하여 인증하세요. 승인 후 창이 자동으로 닫힙니다.' ,
copilotCopyCode : '코드가 복사되었습니다' ,
copilotOpenLink : 'GitHub 인증 페이지 열기' ,
copilotApproved : '로그인 성공!' ,
copilotDenied : '인증이 거부되었습니다.' ,
copilotExpired : '인증 링크가 만료되었습니다. 다시 시도하세요.' ,
copilotAddDetectedTitle : 'GitHub Copilot 감지됨' ,
copilotAddDetected : '이 컴퓨터에서 GitHub Copilot OAuth 토큰이 감지되었습니다. 추가를 클릭하여 Hermes에서 Copilot을 활성화하세요.' ,
copilotAddSourceEnv : '출처: ~/.hermes/.env (COPILOT_GITHUB_TOKEN)' ,
copilotAddSourceGhCli : '출처: gh CLI (gh auth token)' ,
copilotAddSourceAppsJson : '출처: VS Code Copilot 확장 (apps.json)' ,
copilotDeleteHintEnv : '이 작업은 ~/.hermes/.env의 COPILOT_GITHUB_TOKEN을 지웁니다. 다른 도구에는 영향이 없습니다.' ,
copilotDeleteHintGhCli : 'Copilot이 Hermes에서 숨겨집니다. gh CLI 로그인에는 영향이 없으며 `gh auth status`는 여전히 로그인 상태를 표시합니다.' ,
copilotDeleteHintAppsJson : 'Copilot이 Hermes에서 숨겨집니다. VS Code Copilot 확장 로그인에는 영향이 없습니다.' ,
2026-04-24 08:49:45 +08:00
customBadge : '커스텀' ,
2026-04-26 22:51:35 +08:00
previewBadge : '프리뷰' ,
disabledBadge : '사용 불가' ,
disabledTooltip : "이 모델은 현재 계정에서 사용할 수 없습니다." ,
2026-05-11 16:18:13 +02:00
customModelPlaceholder : '목록에 없는 모델 ID' ,
customModelHint : '제공자는 지원하지만 API가 반환하지 않는 모델용입니다. 표시 이름 변경이 아닙니다. Enter로 불러옵니다.' ,
2026-04-17 09:09:50 +08:00
noProviders : 'Provider가 없습니다. 사용자 지정 Provider를 추가하여 시작하세요.' ,
2026-05-14 23:36:07 +08:00
clearVisibleModels : '선택 지우기' ,
2026-05-19 16:09:59 +08:00
currentDefault : '현재 기본값' ,
defaultShort : '기본값' ,
2026-04-17 09:09:50 +08:00
builtIn : '내장' ,
customType : '사용자 지정' ,
2026-05-20 17:13:32 +08:00
provider : '공급자' ,
2026-04-24 11:18:11 +08:00
contextLength : '컨텍스트 길이' ,
2026-05-26 19:35:48 +08:00
contextLengthPlaceholder : '예: 256000 (선택사항)' ,
2026-04-17 09:09:50 +08:00
local : '로컬 ({host})' ,
selectProviderRequired : 'Provider를 선택해 주세요' ,
baseUrlRequired : 'Base URL을 입력해 주세요' ,
apiKeyRequired : 'API Key를 입력해 주세요' ,
modelRequired : '기본 모델을 선택해 주세요' ,
enterBaseUrl : '먼저 Base URL을 입력해 주세요' ,
unexpectedFormat : '예상치 못한 응답 형식입니다' ,
foundModels : '{count}개의 모델을 찾았습니다' ,
fetchFailed : '모델을 가져오지 못했습니다' ,
2026-05-20 17:13:32 +08:00
xaiWaiting : '열린 xAI 페이지에서 인증을 완료하세요. 승인되면 창이 자동으로 닫힙니다.' ,
xaiOpenLink : 'xAI 인증 페이지 열기' ,
xaiLoginTitle : 'xAI Grok OAuth 로그인' ,
xaiExpired : '인증 링크가 만료되었습니다. 다시 시도하세요.' ,
xaiCopyLink : '인증 링크 복사' ,
xaiApproved : '로그인 성공!' ,
visibilitySelectOne : '최소 하나의 표시 모델을 유지하세요' ,
visibilitySaved : '표시 모델이 저장되었습니다' ,
visibilitySaveFailed : '표시 모델 저장 실패' ,
visibilityHint : 'Web UI의 모델 선택기와 모델 페이지 표시에만 영향을 줍니다. Hermes CLI의 provider/model 설정은 변경되지 않으며 실제 호출은 원본 모델 ID를 사용합니다.' ,
showAllModels : '모든 모델 표시' ,
searchPlaceholder : '모델 검색...' ,
removeCustomModel : '목록에 없는 이 모델 제거' ,
more : '개 더' ,
models : '모델 목록' ,
manageVisibleModelsFor : '{name} 표시 모델 관리' ,
manageVisibleModels : '표시 모델 관리' ,
getApiKey : 'API Key 가져오기' ,
count : '개 모델' ,
aliasUseOriginal : '원본 ID로 복원' ,
aliasTitleFor : '{model}의 표시 이름' ,
aliasTitle : '모델 표시 이름' ,
aliasSaveFailed : '표시 이름 저장 실패' ,
aliasPlaceholder : '비워두면 원본 모델 ID 사용' ,
aliasManageFor : '{provider}의 표시 이름' ,
aliasManage : '표시 이름' ,
aliasHint : 'Web UI 표시 이름만 변경합니다. Hermes에는 여전히 원본 모델 ID가 전달됩니다.' ,
aliasEdit : '이름 변경' ,
aliasCanonical : '원본 ID: {model}' ,
2026-04-17 09:09:50 +08:00
} ,
// 프로필
profiles : {
title : '프로필' ,
create : '프로필 생성' ,
import : '가져오기' ,
export : '내보내기' ,
rename : '이름 변경' ,
delete : '삭제' ,
2026-05-23 18:44:53 +08:00
switchTo : 'Hermes Profile 전환' ,
switchConfirm : '`hermes profile use {name}`를 실행하고 Hermes CLI active profile을 변경합니다. 계속하시겠습니까?' ,
switchSuccess : 'Hermes active profile이 "{name}"(으)로 전환되었습니다' ,
switchFailed : 'Hermes Profile 전환 실패. 게이트웨이를 수동으로 재시작해야 할 수 있습니다.' ,
2026-04-17 09:09:50 +08:00
createSuccess : '프로필 "{name}"이(가) 생성되었습니다' ,
createFailed : '프로필 생성 실패' ,
renameSuccess : '프로필 이름이 변경되었습니다' ,
renameFailed : '프로필 이름 변경 실패' ,
deleteConfirm : '프로필 "{name}"을(를) 삭제하시겠습니까?' ,
deleteSuccess : '프로필이 삭제되었습니다' ,
deleteFailed : '프로필 삭제 실패' ,
exportSuccess : '프로필이 내보내기되었습니다' ,
exportFailed : '프로필 내보내기 실패' ,
importSuccess : '프로필이 가져오기되었습니다' ,
importFailed : '프로필 가져오기 실패' ,
importSelectFile : '아카이브 파일 선택' ,
importInvalidFile : '유효한 아카이브 파일을 선택해 주세요 (.tar.gz, .tgz, .gz, .zip)' ,
name : '프로필 이름' ,
namePlaceholder : '영문, 숫자, 하이픈만 사용 가능' ,
2026-05-03 22:10:40 +08:00
nameValidation : '프로필 이름에는 소문자, 숫자, 밑줄, 하이픈만 사용할 수 있습니다' ,
2026-04-17 09:09:50 +08:00
newName : '새 이름' ,
newNamePlaceholder : '새 이름을 입력하세요' ,
cloneFromCurrent : '현재 프로필에서 복제' ,
2026-04-29 20:31:24 +08:00
cloneCleanupNotice : '복제 시 독점형 플랫폼 자격 증명(Weixin / Telegram / Slack 등)은 자동으로 건너뛰어 원본 프로필과의 충돌을 방지합니다' ,
cloneStrippedCredentials : '독점 자격 증명 {count}개 제거됨: {list}' ,
cloneDisabledPlatforms : '플랫폼 {count}개 비활성화됨: {list}' ,
cloneStrippedConfigCredentials : 'config.yaml에서 임베디드 자격 증명 {count}개 제거됨: {list}' ,
2026-04-17 09:09:50 +08:00
archivePath : '아카이브 경로' ,
archivePathPlaceholder : '아카이브 파일의 서버 경로' ,
importName : '프로필 이름 (선택)' ,
importNamePlaceholder : '비워두면 아카이브 이름을 사용합니다' ,
active : '활성' ,
model : '모델' ,
gateway : '게이트웨이' ,
alias : '별칭' ,
2026-05-20 17:13:32 +08:00
provider : '공급자' ,
2026-04-17 09:09:50 +08:00
path : '경로' ,
skills : '스킬' ,
hasEnv : '.env 있음' ,
hasSoulMd : 'soul.md 있음' ,
noProfiles : '프로필이 없습니다. 새로 만들어 시작하세요.' ,
2026-05-20 14:15:01 +08:00
avatar : {
2026-05-20 17:13:32 +08:00
title : '사용자 지정 아바타' ,
customize : '아바타' ,
upload : '이미지 업로드' ,
random : '무작위 생성' ,
reset : '기본값 복원' ,
hint : 'PNG, JPEG, WebP 지원, 최대 1MB' ,
invalidType : 'PNG, JPEG 또는 WebP 이미지를 선택하세요' ,
tooLarge : '아바타 이미지는 1MB를 초과할 수 없습니다' ,
saveSuccess : '아바타가 저장되었습니다' ,
saveFailed : '아바타 저장 실패' ,
resetSuccess : '기본 아바타로 복원되었습니다' ,
resetFailed : '기본 아바타 복원 실패' ,
} ,
runtime : {
activeProfile : '현재: {name}' ,
bridgeWorker : 'Bridge 상태' ,
gateway : '게이트웨이' ,
active : '활성' ,
activeTag : '현재' ,
idle : '대기 중' ,
2026-05-30 09:17:37 +08:00
checking : '확인 중' ,
2026-05-20 17:13:32 +08:00
running : '실행 중' ,
stopped : '중지됨' ,
restartGateway : 'Gateway 재시작' ,
restartProfile : '프로필 재시작' ,
2026-05-23 19:41:51 +08:00
switchProfile : '프론트엔드 프로필 전환' ,
2026-05-20 17:13:32 +08:00
gatewayRestarted : 'Gateway가 재시작되었습니다: {name}' ,
gatewayRestartFailed : 'Gateway 재시작 실패' ,
profileRestarted : '프로필이 재시작되었습니다: {name}' ,
profileRestartFailed : '프로필 재시작 실패' ,
2026-05-20 14:15:01 +08:00
} ,
2026-04-17 09:09:50 +08:00
} ,
// 로그
logs : {
title : '로그' ,
all : '전체' ,
searchPlaceholder : '검색...' ,
refresh : '새로고침' ,
noEntries : '로그 항목 없음' ,
} ,
// 설정
settings : {
title : '설정' ,
saved : '저장됨' ,
saveFailed : '저장 실패' ,
tabs : {
display : '표시' ,
2026-05-23 18:44:53 +08:00
account : '현재 계정' ,
users : '계정 관리' ,
2026-04-17 09:09:50 +08:00
agent : '에이전트' ,
memory : '메모리' ,
2026-05-19 17:58:39 +08:00
compression : '압축' ,
2026-04-17 09:09:50 +08:00
session : '세션' ,
privacy : '개인정보' ,
apiServer : 'API 서버' ,
2026-05-10 20:08:38 +08:00
models : '모델' ,
voice : '음성' ,
2026-04-17 09:09:50 +08:00
} ,
display : {
streaming : '스트리밍 응답' ,
streamingHint : 'AI 응답을 실시간으로 표시' ,
compact : '컴팩트 모드' ,
compactHint : '메시지 간격 줄이기' ,
showReasoning : '추론 과정 표시' ,
showReasoningHint : '모델의 생각 과정 표시' ,
showCost : '비용 표시' ,
showCostHint : '응답에 토큰 사용량 표시' ,
inlineDiffs : '인라인 변경사항' ,
inlineDiffsHint : '코드 변경사항을 인라인으로 표시' ,
bellOnComplete : '완료 알림음' ,
bellOnCompleteHint : 'AI 응답 완료 시 알림음 재생' ,
busyInputMode : '바쁨 입력 모드' ,
busyInputModeHint : 'AI 처리 중에도 입력 허용' ,
theme : '테마' ,
themeHint : '라이트, 다크 또는 시스템 설정 따르기' ,
themeLight : '라이트' ,
themeDark : '다크' ,
themeSystem : '시스템' ,
} ,
agent : {
maxTurns : '최대 턴 수' ,
maxTurnsHint : '대화당 최대 상호작용 라운드 수' ,
gatewayTimeout : '게이트웨이 시간초과' ,
gatewayTimeoutHint : '요청 시간초과 (초)' ,
restartDrainTimeout : '재시작 드레인 시간초과' ,
restartDrainTimeoutHint : '재시작 전 드레인 시간초과 (초)' ,
toolEnforcement : '도구 실행 정책' ,
toolEnforcementHint : '도구 호출 실행 모드 제어' ,
auto : '자동' ,
always : '항상' ,
never : '사용 안 함' ,
} ,
memory : {
enabled : '메모리 활성화' ,
enabledHint : 'AI가 대화 컨텍스트를 기억하도록 허용' ,
userProfile : '사용자 프로필' ,
userProfileHint : 'AI가 사용자 선호를 기억하도록 허용' ,
charLimit : '메모리 문자 제한' ,
charLimitHint : 'MEMORY.md 최대 문자 수' ,
userCharLimit : '사용자 프로필 문자 제한' ,
userCharLimitHint : 'USER.md 최대 문자 수' ,
} ,
2026-05-19 17:58:39 +08:00
compression : {
enabled : '압축 활성화' ,
enabledHint : '긴 채팅 기록이 모델 컨텍스트를 넘기 전에 자동 압축' ,
threshold : '압축 임계값' ,
thresholdHint : '추정 토큰이 이 컨텍스트 비율을 넘으면 압축 시작' ,
targetRatio : '목표 비율' ,
targetRatioHint : '압축 후 기록 크기를 컨텍스트 비율로 지정' ,
protectLastN : '최근 메시지 보호' ,
protectLastNHint : '이 수만큼 최신 메시지는 압축하지 않음' ,
protectFirstN : '처음 메시지 보호' ,
protectFirstNHint : '이 수만큼 처음 메시지는 압축하지 않음' ,
} ,
2026-04-17 09:09:50 +08:00
session : {
mode : '초기화 모드' ,
modeHint : '세션 초기화 트리거 조건' ,
modeBoth : '유휴 + 예약' ,
modeIdle : '유휴만' ,
2026-05-16 21:18:59 +08:00
modeDaily : '예약만' ,
modeNone : '안함 (수동만)' ,
2026-04-17 09:09:50 +08:00
idleMinutes : '유휴 시간초과' ,
idleMinutesHint : '자동 초기화 대기 시간 (분)' ,
atHour : '예약 초기화 시간' ,
2026-04-22 02:09:58 +02:00
humanOnly : '사람 세션만 표시' ,
humanOnlyHint : '하위 에이전트 및 세션 모니터 노이즈를 기본으로 숨깁니다' ,
liveMonitorHumanOnly : '라이브 모니터: 사람 세션만 표시' ,
liveMonitorHumanOnlyHint : '라이브 모니터에서 하위 에이전트 및 세션 모니터 노이즈를 기본으로 숨깁니다' ,
2026-04-17 09:09:50 +08:00
atHourHint : '매일 지정한 시간에 세션 초기화' ,
2026-05-04 21:29:39 +08:00
requireAuth : '세션 인증' ,
requireAuthHint : '세션 작업에 인증 필요' ,
2026-04-17 09:09:50 +08:00
} ,
privacy : {
redactPii : '개인정보 마스킹' ,
redactPiiHint : '민감 정보 자동 감지 및 숨김 (비밀번호, 키 등)' ,
} ,
apiServer : {
enable : '활성화' ,
enableHint : 'API 서버 활성화' ,
host : '호스트' ,
hostHint : '수신 주소' ,
port : '포트' ,
portHint : '수신 포트' ,
key : '키' ,
keyHint : 'API 접근 키' ,
cors : 'CORS 출처' ,
corsHint : '허용된 교차 출처' ,
} ,
2026-05-10 20:08:38 +08:00
voice : {
ttsProvider : 'TTS 제공자' ,
ttsProviderHint : '메시지 재생에 사용할 텍스트 음성 변환 엔진 선택' ,
providerWebSpeech : 'WebSpeech API (브라우저)' ,
providerOpenai : 'OpenAI TTS' ,
providerCustom : '사용자 정의 엔드포인트 (OpenAI 호환)' ,
providerEdge : 'Edge TTS (무료, API Key 불필요)' ,
// WebSpeech
webspeechVoice : '음성' ,
webspeechVoiceHint : '브라우저 또는 OS에서 음성 선택' ,
webspeechVoicePlaceholder : '자동 (기본 음성)' ,
// OpenAI
openaiKey : 'API 키' ,
openaiKeyHint : 'TTS 접근 권한이 있는 OpenAI API 키' ,
openaiUrl : 'API 기본 URL' ,
openaiUrlHint : '예: https://api.openai.com/v1/audio/speech' ,
openaiModel : '모델' ,
openaiModelHint : 'tts-1 (빠름) / tts-1-hd (고음질)' ,
openaiVoice : '음색' ,
openaiVoiceHint : '합성에 사용할 음색' ,
// Custom endpoint
customHint : '모든 OpenAI 호환 TTS API 사용 가능 — GPT-SoVITS, CosyVoice 등 지원' ,
customUrl : 'API URL' ,
customUrlHint : 'TTS 서비스의 기본 URL' ,
customUrlPlaceholder : '로컬 어댑터에 설정된 주소 (예: http://127.0.0.1:9880)' ,
customApiKey : 'API 키 (선택사항)' ,
customApiKeyHint : '일부 사용자 정의 엔드포인트는 인증 필요' ,
customApiKeyPlaceholder : '필요하지 않으면 비워둠' ,
// Edge TTS
edgeHint : 'Microsoft Edge TTS 기반 (node-edge-tts).' ,
edgeUrl : '어댑터 URL' ,
edgeUrlHint : 'Edge TTS 어댑터 주소 (예: http://127.0.0.1:9882)' ,
edgeUrlPlaceholder : 'http://127.0.0.1:9882' ,
edgeVoice : '음색' ,
edgeVoiceHint : '음성 합성에 사용할 음색 선택' ,
2026-05-11 21:56:11 +08:00
edgeRate : '속도' ,
edgeRateHint : '음성 속도 조절 (0.5~2.0배)' ,
edgePitch : '음높이' ,
edgePitchHint : '음성 음높이 조절 (-20~+20 Hz)' ,
2026-05-10 20:08:38 +08:00
// Test
testTitle : '음성 테스트' ,
testText : '테스트 텍스트' ,
testTextPlaceholder : '테스트할 텍스트 입력...' ,
testTextDefault : '안녕하세요, 음성 테스트입니다.' ,
testButton : '테스트' ,
testButtonPlaying : '재생 중...' ,
testFailed : '테스트 실패: {error}' ,
2026-05-16 08:55:23 +08:00
// MiMo TTS
providerMimo : 'MiMo TTS' ,
mimoHint : '샤오미 MiMo TTS — 프리셋 음성, 음성 디자인, 음성 클론 세 가지 모드 지원' ,
mimoApiKey : 'API Key' ,
mimoApiKeyHint : 'platform.xiaomimimo.com에서 발급' ,
mimoApiKeyPlaceholder : 'MiMo API Key' ,
mimoBaseUrl : 'Base URL' ,
mimoBaseUrlHint : 'MiMo API 엔드포인트 URL' ,
mimoModel : '모델' ,
mimoModelHint : '음성 합성 모델 선택' ,
mimoModelPreset : '프리셋 음성' ,
mimoModelVoiceDesign : '음성 디자인' ,
mimoModelVoiceClone : '음성 클론' ,
mimoVoice : '음성' ,
mimoVoiceHint : '프리셋 음성 선택' ,
mimoVoiceDesignPrompt : '음성 설명' ,
mimoVoiceDesignPromptHint : '원하는 음성 특징을 설명하세요' ,
mimoVoiceDesignPromptPlaceholder : '예: 따뜻한 젊은 여성 목소리, 약간 느린 속도, 마그네틱한 톤' ,
mimoCloneAudio : '오디오 업로드' ,
mimoCloneAudioHint : '음성 클론용 오디오 샘플 업로드 (mp3/wav, 최대 10MB)' ,
mimoCloneAudioUpload : '파일 선택' ,
mimoCloneAudioClear : '지우기' ,
mimoStylePrompt : '스타일 프롬프트' ,
mimoStylePromptHint : '선택사항 — 자연어로 말하기 스타일 설명' ,
mimoStylePromptPlaceholder : '예: 밝고 경쾌한 톤, 빠른 속도' ,
2026-05-10 20:08:38 +08:00
} ,
2026-05-08 18:29:43 +08:00
lockedIps : {
title : '잠긴 IP 관리' ,
count : '{count}개 잠김' ,
empty : '잠긴 IP 없음' ,
unlock : '잠금 해제' ,
unlockAll : '전체 해제' ,
unlockAllConfirm : '모든 잠긴 IP를 해제하시겠습니까?' ,
unlocked : 'IP 잠금 해제됨' ,
allUnlocked : '{count}개 IP 잠금 해제됨' ,
} ,
2026-05-20 17:13:32 +08:00
models : {
apiKey : 'API Key' ,
apiKeyPlaceholder : 'API Key 입력' ,
noProviders : '구성된 공급자가 없습니다' ,
save : '저장' ,
saveFailed : '저장 실패' ,
saved : '저장됨' ,
} ,
2026-04-17 09:09:50 +08:00
} ,
2026-05-28 12:30:49 +08:00
githubPreview : {
title : "버전 미리보기" ,
description : "선택한 GitHub tag 를 Web UI 미리보기 작업 디렉터리에 클론하고, 의존성을 설치한 뒤 개발 포트로 실행합니다." ,
refresh : "새로고침" ,
selectTag : "tag 선택" ,
prepare : "코드 준비" ,
install : "의존성 설치" ,
start : "미리보기 시작" ,
stop : "중지" ,
note : "미리보기 코드는 Web UI 데이터 홈 아래에 저장됩니다. 프로덕션은 8648을 유지하고, 미리보기 개발 환경은 프론트엔드 8651, 백엔드 8650에서 실행됩니다." ,
path : "미리보기 경로" ,
webuiHome : "미리보기 데이터 홈" ,
currentTag : "현재 Tag" ,
repoReady : "저장소 준비됨" ,
dependencies : "의존성 설치됨" ,
running : "실행 상태" ,
notRunning : "실행 중 아님" ,
open : "미리보기 열기" ,
log : "작업 로그 경로" ,
logOutput : "로그 출력" ,
actionLog : "작업 로그" ,
devLog : "개발 서버 로그" ,
yes : "예" ,
no : "아니요" ,
actionFailed : "작업 실패" ,
2026-05-30 20:19:01 +08:00
nodeEnvironmentMissing : "Node/npm 환경을 찾을 수 없습니다. Node.js를 설치한 뒤 다시 시도하세요." ,
2026-05-28 12:30:49 +08:00
prepareSuccess : "미리보기 코드가 준비되었습니다" ,
installSuccess : "의존성이 설치되었습니다" ,
startSuccess : "미리보기가 시작되었습니다" ,
stopSuccess : "미리보기가 중지되었습니다" ,
} ,
2026-04-17 09:09:50 +08:00
2026-05-29 21:07:00 +08:00
codingAgents : {
title : "코딩 에이전트" ,
notice : "모든 제공업체와 모델이 호환되는 것은 아닙니다." ,
claudeDescription : "print mode 단발 작업과 대화형 코딩 세션을 위한 Anthropic CLI입니다." ,
codexDescription : "저장소 작업을 위한 OpenAI CLI 및 Hermes openai-codex 제공업체 흐름입니다." ,
copyCommand : "복사" ,
commandCopied : "명령이 복사되었습니다" ,
commandCopyFailed : "복사 실패" ,
refresh : "새로고침" ,
checking : "확인 중" ,
installStatus : "설치 상태" ,
installed : "설치됨" ,
notInstalled : "설치되지 않음" ,
installNow : "설치" ,
installing : "설치 중" ,
installSuccess : "설치됨" ,
installFailed : "설치 실패" ,
2026-05-30 20:19:01 +08:00
nodeEnvironmentMissing : "Node/npm 환경을 찾을 수 없습니다. Node.js를 설치한 뒤 다시 시도하세요." ,
2026-05-29 21:07:00 +08:00
deleteNow : "삭제" ,
deleting : "삭제 중" ,
deleteSuccess : "삭제됨" ,
deleteFailed : "삭제 실패" ,
configFiles : "설정 파일" ,
profileScope : "프로필" ,
providerScope : "제공업체" ,
providerPlaceholder : "예: custom:glm" ,
modelScope : "모델" ,
modelPlaceholder : "모델 선택" ,
launchModeScope : "시작 모드" ,
launchModeGlobal : "전역 설정" ,
launchModeScoped : "제공업체와 모델" ,
protocolScope : "프로토콜" ,
protocolOpenAiChat : "OpenAI Chat Completions (/v1/chat/completions)" ,
protocolOpenAiResponses : "OpenAI Responses (/v1/responses)" ,
protocolAnthropicMessages : "Anthropic Messages (/v1/messages)" ,
reloadConfig : "설정 다시 읽기" ,
configFileNotCreated : "생성되지 않음" ,
configLoadFailed : "설정 파일을 읽지 못했습니다" ,
loadFailed : "코딩 에이전트를 확인하지 못했습니다" ,
launch : "시작" ,
launchTitle : "코딩 에이전트 시작" ,
nativeTerminal : "네이티브 터미널" ,
builtInTerminal : "내장 터미널" ,
launchPrepared : "시작 설정이 준비되었습니다" ,
launchPrepareFailed : "시작 설정 준비 실패" ,
nativeLaunchStarted : "네이티브 터미널을 열었습니다" ,
nativeLaunchFailed : "네이티브 터미널을 열지 못했습니다" ,
terminalTitle : "코딩 에이전트 터미널" ,
loadProvidersFailed : "현재 프로필의 제공업체를 불러오지 못했습니다" ,
selectProviderModel : "제공업체와 모델을 선택하세요" ,
launchConfigDir : "시작 설정 디렉터리" ,
launchCommand : "시작 명령" ,
table : {
tool : "도구" ,
kind : "단계" ,
command : "명령" ,
note : "설명" ,
action : "작업" ,
} ,
kinds : {
install : "설치" ,
auth : "인증" ,
health : "상태" ,
run : "실행" ,
} ,
notes : {
claudeInstall : "Claude Code CLI를 전역으로 설치합니다." ,
codexInstall : "Codex CLI를 전역으로 설치합니다." ,
claudeAuth : "Claude Code 로그인 상태를 확인합니다. 로그인이 없으면 claude를 한 번 실행하세요." ,
codexAuth : "Hermes가 관리하는 OpenAI Codex OAuth 자격 증명을 추가합니다." ,
claudeHealth : "업데이터와 로컬 CLI 상태를 확인합니다." ,
codexHealth : "Codex CLI가 PATH에서 사용 가능한지 확인합니다." ,
claudeRun : "API 기반 단발 작업에는 print mode가 가장 깔끔한 경로입니다." ,
codexRun : "Codex 단발 작업은 git 저장소 안에서 실행해야 합니다." ,
} ,
} ,
2026-04-17 09:09:50 +08:00
platform : {
requireMention : "{'@'}멘션 필요" ,
requireMentionGroup : "그룹에서 {'@'}멘션 시에만 응답" ,
requireMentionChannel : "채널에서 {'@'}멘션 시에만 응답" ,
requireMentionRoom : "방에서 {'@'}멘션 시에만 응답" ,
reactions : '반응' ,
reactionsHint : '메시지에 이모지 반응' ,
freeResponseChats : '자유 응답 채팅' ,
freeResponseChatsHint : "{'@'}멘션 없이 응답할 채팅 ID (쉼표로 구분)" ,
freeResponseChannels : '자유 응답 채널' ,
freeResponseChannelsHint : "{'@'}멘션 없이 응답할 채널 ID (쉼표로 구분)" ,
freeResponseRooms : '자유 응답 방' ,
freeResponseRoomsHint : "{'@'}멘션 없이 응답할 방 ID (쉼표로 구분)" ,
mentionPatterns : '사용자 지정 멘션 패턴' ,
mentionPatternsHint : '추가 트리거 패턴' ,
autoThread : '자동 스레드' ,
autoThreadHint : "{'@'}멘션 후 자동으로 스레드 생성" ,
autoThreadHintRoom : '방에서 자동으로 스레드 생성' ,
dmMentionThreads : 'DM 멘션 스레드' ,
dmMentionThreadsHint : 'DM에서 멘션 시 스레드로 응답' ,
allowBots : '봇 메시지 허용' ,
allowBotsHint : '다른 봇의 메시지에 응답' ,
allowedChannels : '허용된 채널' ,
allowedChannelsHint : '채널 ID 허용 목록 (쉼표로 구분)' ,
ignoredChannels : '무시할 채널' ,
ignoredChannelsHint : '봇이 응답하지 않는 채널 ID (쉼표로 구분)' ,
noThreadChannels : '스레드 없는 채널' ,
noThreadChannelsHint : '스레드 없이 응답할 채널 ID (쉼표로 구분)' ,
2026-04-29 20:31:24 +08:00
exclusiveTokenWarning : '이 플랫폼은 독점 토큰 잠금을 사용합니다. 각 프로필은 다른 프로필과 충돌하지 않도록 서로 다른 ID 토큰을 사용해야 합니다.' ,
2026-04-17 09:09:50 +08:00
botToken : 'Bot Token' ,
botTokenHint : '개발자 포털에서 발급받은 Bot Token' ,
accessToken : 'Access Token' ,
2026-05-20 17:13:32 +08:00
accessTokenHint : 'Matrix 액세스 토큰' ,
2026-04-17 09:09:50 +08:00
homeserver : 'Homeserver URL' ,
homeserverHint : 'Matrix 홈서버 URL' ,
appId : 'App ID' ,
appIdHint : 'Feishu App ID' ,
appSecret : 'App Secret' ,
appSecretHint : 'Feishu App Secret' ,
clientId : 'Client ID' ,
clientIdHint : 'DingTalk Client ID' ,
clientSecret : 'Client Secret' ,
clientSecretHint : 'DingTalk Client Secret' ,
2026-05-27 11:32:26 +08:00
cardTemplateId : 'AI 카드 템플릿 ID' ,
cardTemplateIdHint : 'DingTalk AI 카드 템플릿 ID; 비워 두면 AI 카드를 사용하지 않음' ,
2026-04-17 09:09:50 +08:00
botId : 'Bot ID' ,
botIdHint : 'WeCom Bot ID' ,
wecomSecretHint : 'WeCom Bot Secret' ,
waEnabled : 'WhatsApp 활성화' ,
waEnabledHint : 'QR 코드 페어링으로 WhatsApp 활성화' ,
weixinToken : 'Weixin Token' ,
weixinTokenHint : 'weixin CLI QR 로그인에서 가져오기 (hermes weixin)' ,
accountId : 'Account ID' ,
accountIdHint : 'Weixin Account ID' ,
qrLogin : 'QR 로그인' ,
qrRelogin : '다시 로그인' ,
qrFetching : 'QR 코드를 가져오는 중...' ,
qrScanHint : 'WeChat으로 QR 코드를 스캔하여 로그인' ,
qrScanedHint : '스캔됨, 휴대폰에서 확인해 주세요...' ,
2026-05-20 17:13:32 +08:00
qqSandboxHint : '샌드박스 환경 활성화(테스트용)' ,
qqSandbox : '샌드박스 모드' ,
qqQrScanHint : 'QQ로 위 QR 코드를 스캔하거나 휴대폰에서 링크를 열어 바인딩을 완료하세요' ,
qqMarkdownHint : 'Markdown 형식 메시지 활성화(일부 클라이언트는 지원하지 않을 수 있음)' ,
qqMarkdown : 'Markdown 지원' ,
qqAppSecretHint : 'QQ Open Platform Bot App Secret' ,
qqAppSecret : 'App Secret' ,
qqAppIdHint : 'QQ Open Platform Bot App ID' ,
qqAppId : 'App ID' ,
allowedUsersHint : '사용자 ID 또는 OpenID 허용 목록, 쉼표로 구분' ,
allowedUsers : '허용 사용자' ,
allowAllUsersHint : '모든 사용자의 메시지를 허용합니다. 끄면 허용 목록을 사용합니다' ,
allowAllUsers : '모든 사용자 허용' ,
2026-04-17 09:09:50 +08:00
} ,
// 언어
language : {
label : '언어' ,
zh : '中文' ,
en : 'English' ,
ko : '한국어' ,
} ,
// 터미널
terminal : {
sessions : '세션' ,
newTab : '새 터미널' ,
closeSession : '이 세션을 닫으시겠습니까?' ,
sessionExited : '종료됨' ,
processExited : '프로세스가 종료되었습니다 (코드 {code})' ,
2026-05-20 17:13:32 +08:00
noSessions : '터미널 세션이 없습니다' ,
connectionFailed : '터미널에 연결하지 못했습니다' ,
connectionError : '연결 오류' ,
connectionClosed : '연결이 닫혔습니다' ,
2026-04-17 09:09:50 +08:00
} ,
// 사용량
usage : {
title : '사용량 통계' ,
refresh : '새로고침' ,
totalTokens : '총 토큰 수' ,
inputTokens : '입력' ,
outputTokens : '출력' ,
totalSessions : '총 세션 수' ,
avgPerDay : '일평균 ~{n}' ,
estimatedCost : '예상 비용' ,
cacheHitRate : '캐시 적중률' ,
modelBreakdown : '모델별 분포' ,
2026-05-13 01:41:49 +02:00
dailyTrend : '일별 사용량' ,
2026-04-17 09:09:50 +08:00
date : '날짜' ,
tokens : '토큰' ,
cache : '캐시' ,
2026-05-02 10:36:33 +10:00
cacheRead : '캐시 읽기' ,
cacheWrite : '캐시 쓰기' ,
2026-04-17 09:09:50 +08:00
sessions : '세션' ,
cost : '비용' ,
noData : '사용량 데이터 없음' ,
} ,
2026-04-22 20:27:33 +08:00
2026-05-14 09:28:51 +08:00
skillsUsage : {
title : '스킬 사용량' ,
subtitle : 'Hermes 세션의 스킬 로드와 편집을 추적합니다' ,
refresh : '새로고침' ,
periodSelector : '스킬 사용량 기간' ,
periodLabel : '{days}일' ,
summary : '요약' ,
totalActions : '작업 수' ,
loads : '로드' ,
edits : '편집' ,
distinctSkills : '스킬 수' ,
topSkills : '상위' ,
dailyTrend : '일별' ,
periodSummary : '최근 {days}일' ,
skill : '스킬' ,
share : '비중' ,
lastUsed : '마지막' ,
noData : '스킬 사용량 데이터가 없습니다' ,
loadFailed : '스킬 사용량을 불러오지 못했습니다' ,
otherSkills : '기타' ,
} ,
2026-04-22 20:27:33 +08:00
// 변경 이력
changelog : {
2026-05-28 13:50:52 +08:00
new_0_6_4_1 : 'CI를 강화해 npm install 동작을 고정하고 PR Docker smoke 검사를 추가했습니다' ,
new_0_6_4_2 : '채팅에 가상 페이지네이션을 적용해 긴 대화의 스크롤과 로딩을 더 안정적으로 만들었습니다' ,
new_0_6_4_3 : 'Docker 이미지 배포는 일반 PR 검사 대신 release 에서만 실행됩니다' ,
new_0_6_4_4 : '슈퍼 관리자용 Version Preview 를 추가해 main/tag 선택, preview checkout, 의존성 설치, start/stop, 로그 확인을 지원합니다' ,
new_0_6_4_5 : 'Preview 인스턴스는 frontend/backend 포트, Web UI home, agent bridge endpoint 를 분리하고 오래된 tag 에 대해 포트, WebSocket, base URL, 중첩 preview 내비게이션 runtime patch 를 적용합니다' ,
new_0_6_4_6 : 'created_at 이 없는 legacy session_usage 테이블을 기본값으로 안전하게 마이그레이션합니다' ,
new_0_6_4_7 : 'Bridge profile worker endpoint 를 broker endpoint 별로 분리해 같은 Profile 의 운영/preview 가 worker socket 을 서로 빼앗아 unknown run 오류를 만드는 문제를 방지합니다' ,
2026-05-29 21:07:00 +08:00
new_0_6_5_1 : 'Coding Agents 에 Claude Code 와 Codex 전체 시작 워크플로를 추가하고 전역 설정, profile/provider 격리 작업공간, 내장/네이티브 터미널을 지원합니다' ,
new_0_6_5_2 : 'Codex 시작은 OpenAI Chat Completions, OpenAI Responses, Anthropic Messages 를 지원하고 로컬 proxy 로 여러 제공업체에 맞춥니다' ,
new_0_6_5_3 : 'Windows Coding Agents 는 .cmd/.bat shim 감지, 터미널 시작 수정, Claude Code custom model 로컬 검증 우회로 더 안정적입니다' ,
new_0_6_5_4 : '메시지 목록, History 페이징, TTS 인증, 그룹 채팅 agent mention, 업데이트 체크 비활성화, bridge worker transport 안정성을 개선했습니다' ,
2026-05-27 12:21:37 +08:00
new_0_6_3_1 : 'Bridge spinner 상태를 더 이상 모델 reasoning 으로 저장하지 않아 장식용 thinking 텍스트가 이후 컨텍스트를 오염시키지 않습니다' ,
new_0_6_3_2 : 'History 에 Hermes CLI 세션을 Web UI 로컬 기록으로 가져오는 컨트롤을 추가하고 메시지 구조를 더 안전하게 정규화합니다' ,
new_0_6_3_3 : 'Provider 설정에서 기본 base URL 편집을 지원하고 LM Studio 를 내장 Provider 로 추가했으며 LM Studio /models 실시간 검색을 지원합니다' ,
new_0_6_3_4 : 'Web UI bridge 를 통해 전송되는 OpenRouter 요청에 Hermes Web UI 앱 attribution headers 가 포함됩니다' ,
new_0_6_3_5 : '공개 auth status endpoint 가 인증되지 않은 요청에 첫 번째 사용자 이름을 더 이상 노출하지 않습니다' ,
new_0_6_3_6 : 'DingTalk 설정에 AI Card Template ID 필드를 추가하고 DINGTALK_CARD_TEMPLATE_ID 로 저장합니다' ,
new_0_6_3_7 : 'Bridge socket JSON 출력이 고립된 Unicode surrogate 문자를 정리하여 채팅 SSE 충돌을 방지합니다' ,
2026-05-26 19:35:48 +08:00
new_0_6_2_1 : 'Web Bridge가 /plan 명령을 지원하며 run 시작과 명령 상태 표시가 올바르게 동작합니다' ,
new_0_6_2_2 : '채팅 입력 명령 메뉴에 /goal 및 /subgoal이 추가되어 상태, 일시정지, 재개, 완료, 초기화 작업을 지원합니다' ,
new_0_6_2_3 : 'Goal 및 subgoal 워크플로가 채팅 세션에 통합되어 목표 이어가기와 상태 업데이트를 지원합니다' ,
new_0_6_2_4 : '작업 전달 대상 채널 옵션을 복원해 예약 작업이 의도한 대상을 선택할 수 있습니다' ,
new_0_6_2_5 : '재연결 후 컨텍스트 token 사용량이 snapshot 인식 계산으로 정확하게 복원됩니다' ,
new_0_6_2_6 : 'Codex 요약이 느릴 때도 컨텍스트 checkpoint 압축이 더 안정적입니다. Web UI는 5분 동안 대기하고 Python bridge broker는 2분 후 worker request를 끊지 않습니다' ,
new_0_6_2_7 : '채팅 큐 승격을 수정해 동기화된 창을 포함해 queued 메시지가 너무 일찍 메시지 목록에 들어가지 않습니다' ,
new_0_6_2_8 : 'Clarify 프롬프트는 Enter로 자유 입력 답변을 제출하지 않으며, 답변된 프롬프트는 세션 전환 후 다시 열리지 않습니다' ,
new_0_6_2_9 : 'Bridge terminal 환경 갱신과 stale pid 정리 범위를 더 정확히 제한해 UI의 오래된 runtime 상태를 줄입니다' ,
new_0_6_2_10 : '기본 컨텍스트 길이가 Hermes 표준에 맞춰 256,000 tokens로 변경되었습니다' ,
2026-05-23 10:41:24 +08:00
new_0_5_35_1 : 'Bridge 세션은 서로 다른 session 간 동시 실행을 지원하며, 같은 session 실행은 메시지 순서를 보존하도록 직렬화됩니다' ,
new_0_5_35_2 : 'Performance Monitor 페이지를 추가해 시스템 CPU/메모리, Web UI, Bridge Broker, Workers, 활성 세션 상태를 확인할 수 있습니다' ,
new_0_5_35_3 : 'Worker별 CPU, 메모리, Profile, 세션 수, 실행 상태를 보여주는 리소스 지표 추가' ,
new_0_5_35_4 : 'Bridge worker 수명 주기 정리를 개선해 Broker 종료나 부모 프로세스 종료 시 worker를 회수하고 남는 Python 프로세스를 줄입니다' ,
new_0_5_35_5 : 'macOS, Windows, Linux, Docker, Termux용 fallback으로 모니터링 리소스 수집의 크로스 플랫폼 호환성 강화' ,
new_0_5_35_6 : 'Agent 초기화 중 worker request로 Performance Monitor가 막히지 않도록 개선해 Windows의 request timed out 가능성을 낮춤' ,
new_0_5_35_7 : 'Chat Markdown에 텍스트 콘텐츠 인라인 미리보기를 추가하고, 다운로드 아이콘은 preview drawer 대신 파일을 직접 다운로드합니다' ,
new_0_5_35_8 : '콘텐츠 preview drawer 개선: 모바일 닫기 동작, 모바일 전체 너비, 데스크톱 800px 너비, 텍스트/Markdown 배경 통일' ,
2026-05-24 14:00:31 +08:00
new_0_6_0_1 : '계정별 및 Profile별 관리가 세션, 모델, 사용량, Kanban, 작업, 업로드, 미디어, 관련 Hermes API를 일관되게 보호합니다' ,
new_0_6_0_2 : '내장 미디어 Skills는 생성된 서버 토큰을 미디어 엔드포인트에만 사용하고 요청한 Profile에서 fun-codex/xAI 자격 증명을 확인합니다' ,
new_0_6_0_3 : '단일 채팅과 그룹 채팅이 현재 Hermes Profile을 run instructions에 주입해 Skills가 X-Hermes-Profile을 보낼 수 있습니다' ,
new_0_6_0_4 : 'delegate_task subagent 진행 상황이 시작, 도구, 진행, 완료 상태로 채팅 UI에 스트리밍됩니다' ,
new_0_6_0_5 : '실행 중지 또는 중단 시 임시 이벤트를 정리해 이전 abort 상태가 다음 채팅으로 넘어가지 않게 했습니다' ,
new_0_6_0_6 : '계정 관리, 기본 자격 증명, 계정/Profile 관리, 업로드/다운로드, 내장 미디어 Skills 문서와 웹사이트 문구를 업데이트했습니다' ,
new_0_6_0_7 : '로그인 IP 잠금을 지우고 기본 admin / 123456 로그인을 재설정하는 CLI 유지보수 명령을 추가했습니다' ,
new_0_6_0_8 : '0.6.0은 Web UI의 단일 사용자 버전과 다중 사용자 버전의 경계입니다. 다중 사용자 모드에 문제가 있으면 issue를 제출하고, 필요하면 0.5.35 단일 사용자 버전으로 되돌리세요' ,
2026-05-25 13:06:06 +08:00
new_0_6_1_1 : '세션 목록은 기본적으로 계정에서 사용할 수 있는 모든 Profile을 표시하고 명시적 Profile 필터가 있을 때만 제한하며, CLI start/stop/status는 더 이상 node:sqlite 실험 경고를 출력하지 않습니다' ,
new_0_6_1_2 : 'Clarify 및 확인 응답이 인증된 채팅 socket을 통해 Hermes bridge로 전달되며 응답 경로 테스트가 추가되었습니다' ,
new_0_6_1_3 : '내비게이션 항목과 채팅 세션 행이 네이티브 링크를 사용해 새 탭 열기, 링크 복사, 접힌 사이드바 상태 유지가 가능합니다' ,
new_0_6_1_4 : '세션 링크가 route Profile을 일반 세션 목록 필터로 누출하지 않으며 새 탭 열기 라벨이 지역화되었습니다' ,
new_0_6_1_5 : 'Skills는 활성 Profile config의 skills.external_dirs를 읽고 external source를 표시하며 로컬 우선순위와 외부 skill 파일 해석을 지원합니다' ,
new_0_6_1_6 : '로그인 IP 잠금 기준이 실패 10회로 올라가고, 잠긴 로그인 화면에 잠금 해제와 기본 로그인 재설정 복구 명령이 표시됩니다' ,
new_0_6_1_7 : '모바일 또는 백그라운드 채팅 연결 끊김은 일시적인 것으로 처리하고 재연결 후 서버에서 run 상태를 복원합니다' ,
new_0_6_1_8 : 'Bridge tool marker flush가 tool/run 경계에서 남은 tool-call prefix를 저장해 새로고침 후 내용 잘림을 방지합니다' ,
new_0_6_1_9 : 'Profile 인식 History 작업은 Profile이 포함된 대상으로 세션을 삭제하고 전역 Profile 변경 시 History를 새로고침합니다' ,
new_0_6_1_10 : '다중 사용자 권한 모델을 위해 기존 AUTH_DISABLED 우회를 제거했으며 AUTH_TOKEN은 계속 지원됩니다' ,
2026-04-22 20:27:33 +08:00
} ,
2026-04-23 14:10:14 +08:00
// 파일
files : {
title : '파일' ,
tree : '디렉터리 트리' ,
list : '파일 목록' ,
breadcrumbRoot : '홈' ,
newFile : '새 파일' ,
newFolder : '새 폴더' ,
upload : '업로드' ,
refresh : '새로고침' ,
open : '열기' ,
edit : '편집' ,
preview : '미리보기' ,
download : '다운로드' ,
copyPath : '경로 복사' ,
rename : '이름 변경' ,
delete : '삭제' ,
name : '이름' ,
size : '크기' ,
modified : '수정일' ,
actions : '작업' ,
emptyDir : '빈 디렉터리' ,
loading : '불러오는 중...' ,
confirmDelete : '"{name}"을(를) 삭제하시겠습니까?' ,
confirmDeleteDir : '디렉터리 "{name}"과 그 내부 항목을 모두 삭제하시겠습니까?' ,
deleteFailed : '삭제 실패' ,
deleted : '삭제됨' ,
renameTo : '새 이름' ,
newFileName : '파일 이름' ,
newFolderName : '폴더 이름' ,
created : '생성됨' ,
createFailed : '생성 실패' ,
renamed : '이름이 변경됨' ,
renameFailed : '이름 변경 실패' ,
uploadSuccess : '{count}개 파일이 업로드되었습니다' ,
uploadFailed : '업로드 실패' ,
saveFailed : '저장 실패' ,
saved : '저장됨' ,
unsavedChanges : '저장하지 않은 변경 사항이 있습니다. 취소하시겠습니까?' ,
pathCopied : '경로가 복사되었습니다' ,
fileTooLarge : '파일이 너무 큽니다 (최대 10MB)' ,
permissionDenied : '보호된 파일은 수정할 수 없습니다' ,
notFound : '파일 또는 디렉터리를 찾을 수 없습니다' ,
backendError : '파일 작업 실패' ,
dragDropHint : '여기로 파일을 드래그하여 업로드' ,
closeEditor : '편집기 닫기' ,
closePreview : '닫기' ,
saveFile : '저장' ,
2026-05-20 17:13:32 +08:00
fileTree : '파일 트리' ,
2026-04-23 14:10:14 +08:00
} ,
2026-04-24 20:41:14 +08:00
// 그룹 채팅
groupChat : {
title : '그룹 채팅' ,
createRoom : '방 만들기' ,
joinByCode : '코드로 참여' ,
roomName : '방 이름' ,
roomNamePlaceholder : '방 이름을 입력하세요' ,
inviteCode : '초대 코드' ,
autoGenerate : '자동 생성' ,
noRooms : '아직 방이 없습니다' ,
selectOrCreate : '방을 선택하거나 만들어 채팅을 시작하세요' ,
agents : '에이전트' ,
addAgent : '에이전트 추가' ,
selectProfile : '프로필 선택' ,
agentAdded : '에이전트가 추가되었습니다' ,
agentAlreadyInRoom : '해당 에이전트가 이미 방에 있습니다' ,
2026-05-21 14:54:41 +08:00
agentAddFailedCount : '{count}개의 에이전트를 추가하지 못했습니다: {details}' ,
2026-04-24 20:41:14 +08:00
noAgents : '이 방에 에이전트가 없습니다' ,
members : '멤버' ,
roomCreated : '방이 생성되었습니다' ,
roomDeleted : '방이 삭제되었습니다' ,
2026-05-15 15:52:16 +08:00
roomCloned : '방이 복제되었습니다' ,
cloneRoom : '방 복제' ,
2026-05-24 10:55:55 +08:00
copyRoomLink : '방 링크 복사' ,
2026-04-24 20:41:14 +08:00
deleteRoomConfirm : '이 방을 삭제하시겠습니까?' ,
2026-05-15 15:52:16 +08:00
clearContext : '컨텍스트 지우기' ,
clearContextConfirm : '이 방의 컨텍스트를 지우시겠습니까? 메시지와 압축 스냅샷은 삭제되고 에이전트와 멤버는 유지됩니다.' ,
contextCleared : '컨텍스트가 지워졌습니다' ,
2026-04-24 20:41:14 +08:00
you : '나' ,
joined : '방에 참여했습니다' ,
joinFailed : '방 참여에 실패했습니다' ,
inputPlaceholder : '메시지를 입력하세요... (Enter로 전송)' ,
enterCode : '초대 코드를 입력하세요' ,
yourName : '이름' ,
yourNamePlaceholder : '표시 이름을 입력하세요' ,
yourDescription : '설명 (선택)' ,
yourDescriptionPlaceholder : '자신을 소개해 주세요...' ,
agentName : '에이전트 이름' ,
agentNamePlaceholder : '사용자 지정 이름 (빈칸=프로필 이름)' ,
agentDesc : '에이전트 설명' ,
agentDescPlaceholder : '이 에이전트가 하는 일을 설명...' ,
agentReplying : '이(가) 응답 중...' ,
agentCompressing : '이(가) 컨텍스트 압축 중...' ,
compressionSettings : '압축 설정' ,
triggerTokens : '압축 트리거 토큰' ,
triggerTokensDesc : '이 토큰 수를 초과하면 컨텍스트 압축이 시작됩니다' ,
maxHistoryTokens : '최대 기록 토큰' ,
maxHistoryTokensDesc : '압축된 컨텍스트의 최대 토큰 수' ,
tailMessageCount : '최근 메시지 수' ,
tailMessageCountDesc : '압축 후 그대로 유지할 최근 메시지 수' ,
compressionConfig : '압축 설정' ,
compressNow : '지금 압축' ,
compressingInProgress : '압축 진행 중' ,
compressionSaved : '압축 설정이 저장되었습니다' ,
} ,
2026-04-23 14:10:14 +08:00
// 다운로드
download : {
downloading : '다운로드 중...' ,
downloadFailed : '다운로드 실패' ,
fileNotFound : '파일을 찾을 수 없거나 삭제되었습니다' ,
fileTooLarge : '파일이 너무 큽니다 (제한 초과)' ,
backendError : '파일 읽기에 실패했습니다. 원격 환경이 사용 불가능할 수 있습니다' ,
backendTimeout : '파일 읽기 시간 초과' ,
unsupportedBackend : '현재 터미널 백엔드는 파일 다운로드를 지원하지 않습니다' ,
invalidPath : '잘못된 파일 경로' ,
2026-05-22 19:04:15 +08:00
contentDisplay : '내용 표시' ,
2026-04-23 14:10:14 +08:00
download : '다운로드' ,
2026-04-24 02:31:42 +02:00
downloadFile : '파일 다운로드' ,
2026-04-23 14:10:14 +08:00
} ,
2026-05-20 17:13:32 +08:00
gateways : {
title : '게이트웨이' ,
running : '실행 중' ,
stopped : '중지됨' ,
started : '시작됨' ,
startFailed : 'Gateway 시작 실패' ,
stopFailed : 'Gateway 중지 실패' ,
} ,
kanban : {
title : 'Kanban 보드' ,
createTask : '새 작업' ,
noTasks : '작업 없음' ,
allStatuses : '모든 상태' ,
allAssignees : '모든 담당자' ,
columns : {
triage : '분류 대기' ,
todo : '할 일' ,
ready : '준비됨' ,
running : '진행 중' ,
blocked : '차단됨' ,
done : '완료됨' ,
archived : '보관됨' ,
} ,
card : {
assigneeTooltip : '담당자' ,
priority : {
low : '낮음' ,
medium : '보통' ,
high : '높음' ,
} ,
timeAgo : {
justNow : '방금' ,
minutes : '{count}분 전' ,
hours : '{count}시간 전' ,
days : '{count}일 전' ,
} ,
} ,
board : {
create : '새 보드' ,
archive : '보드 보관' ,
archiveConfirm : '현재 보드를 보관하시겠습니까?' ,
archived : '보드가 보관되었습니다' ,
created : '보드가 생성되었습니다' ,
slugPlaceholder : '보드 식별자, 예: project-a' ,
namePlaceholder : '표시 이름 (선택)' ,
slugRequired : '보드 식별자는 필수입니다' ,
} ,
form : {
title : '제목' ,
titlePlaceholder : '작업 제목' ,
titleRequired : '제목은 필수입니다' ,
body : '설명' ,
bodyPlaceholder : '작업 설명 (선택)' ,
assignee : '담당자' ,
selectAssignee : '담당자 선택...' ,
priority : '우선순위' ,
selectPriority : '우선순위 선택...' ,
} ,
detail : {
status : '상태' ,
priority : '우선순위' ,
assignee : '담당자' ,
tenant : '테넌트' ,
createdAt : '생성 시간' ,
startedAt : '시작 시간' ,
completedAt : '완료 시간' ,
comments : '댓글' ,
events : '이벤트' ,
runs : '실행 기록' ,
artifacts : '산출 파일' ,
result : '완료 결과' ,
highlights : '핵심 정보' ,
sources : '데이터 소스' ,
sessions : '관련 세션' ,
sessionMessages : '세션 기록' ,
noSessions : '관련 세션을 찾을 수 없습니다.' ,
} ,
action : {
title : '작업' ,
assign : '할당' ,
assignTo : '할당 대상...' ,
block : '차단' ,
blockReason : '차단 이유' ,
unblock : '차단 해제' ,
complete : '완료' ,
completeSummary : '완료 요약 (선택)' ,
} ,
message : {
loadFailed : '작업 로드 실패' ,
taskCreated : '작업이 생성되었습니다' ,
taskAssigned : '작업이 할당되었습니다' ,
taskBlocked : '작업이 차단되었습니다' ,
taskUnblocked : '작업 차단이 해제되었습니다' ,
taskCompleted : '작업이 완료되었습니다' ,
} ,
stats : {
total : '합계' ,
tasks : '작업 수' ,
} ,
} ,
2026-04-17 09:09:50 +08:00
}