{{label}} 인가요?",
- "ask_an": "이 것은 {{label}} 인가요?",
- "ask_full": "이 것은 {{untranslatedLabel}} ({{translatedLabel}}) 인가요?"
+ "label": "Frigate+용 레이블 확인",
+ "ask_a": "이 객체가 {{label}} 맞습니까?",
+ "ask_an": "이 객체가 {{label}} 맞습니까?",
+ "ask_full": "이 객체가 {{untranslatedLabel}} ({{translatedLabel}}) 맞습니까?"
},
"state": {
"submitted": "제출됨"
+ },
+ "toast": {
+ "error": "Frigate+ 제출에 실패했습니다. 네트워크 연결을 확인하고 다시 시도하세요."
}
}
},
"video": {
- "viewInHistory": "히스토리 보기"
+ "viewInHistory": "기록에서 보기"
}
},
"export": {
"time": {
- "fromTimeline": "타임라인에서 선택하기",
- "lastHour_other": "지난 {{count}} 시간",
- "custom": "커스텀",
+ "fromTimeline": "타임라인에서 선택",
+ "lastHour_other": "지난 {{count}}시간",
+ "custom": "사용자 지정",
"start": {
"title": "시작 시간",
"label": "시작 시간 선택"
@@ -46,53 +49,105 @@
}
},
"name": {
- "placeholder": "내보내기 이름"
+ "placeholder": "내보내기 이름 지정"
},
"select": "선택",
"export": "내보내기",
"selectOrExport": "선택 또는 내보내기",
"toast": {
- "success": "내보내기가 성공적으로 시작되었습니다. 내보내기 페이지에서 파일을 보실 수 있습니다.",
+ "success": "내보내기가 성공적으로 시작되었습니다. 내보내기 페이지에서 파일을 확인하세요.",
"error": {
- "failed": "내보내기 시작 실패:{{error}}",
- "endTimeMustAfterStartTime": "종료 시간은 시작 시간보다 뒤에 있어야합니다",
- "noVaildTimeSelected": "유효한 시간 범위가 선택되지 않았습니다"
+ "failed": "내보내기 대기열 등록 실패: {{error}}",
+ "endTimeMustAfterStartTime": "종료 시간은 시작 시간 이후여야 합니다",
+ "noVaildTimeSelected": "유효한 시간 범위가 선택되지 않았습니다",
+ "noValidTimeSelected": "유효한 시간 범위가 선택되지 않았습니다"
},
- "view": "보기"
+ "view": "보기",
+ "queued": "내보내기가 대기열에 등록되었습니다. 진행 상황은 내보내기 페이지에서 확인하세요.",
+ "batchSuccess_other": "내보내기 {{count}}건을 시작했습니다. 케이스를 여는 중입니다.",
+ "batchPartial": "{{total}}건 중 {{successful}}건의 내보내기를 시작했습니다. 실패한 카메라: {{failedCameras}}",
+ "batchFailed": "{{total}}건의 내보내기 시작에 실패했습니다. 실패한 카메라: {{failedCameras}}",
+ "batchQueuedSuccess_other": "내보내기 {{count}}건을 대기열에 추가했습니다.",
+ "batchQueuedPartial": "{{total}}건 중 {{successful}}건의 내보내기를 대기열에 추가했습니다. 실패한 카메라: {{failedCameras}}",
+ "batchQueueFailed": "{{total}}건의 내보내기 대기열 등록에 실패했습니다. 실패한 카메라: {{failedCameras}}"
},
"fromTimeline": {
"saveExport": "내보내기 저장",
- "previewExport": "내보내기 미리보기"
+ "previewExport": "내보내기 미리보기",
+ "queueingExport": "내보내기 대기열 등록 중...",
+ "useThisRange": "이 범위 사용"
},
"case": {
- "label": "유형",
- "placeholder": "유형 선택"
+ "label": "케이스",
+ "placeholder": "케이스 선택",
+ "newCaseOption": "새 케이스 생성",
+ "newCaseNamePlaceholder": "새 케이스 이름",
+ "newCaseDescriptionPlaceholder": "케이스 설명",
+ "nonAdminHelp": "이 내보내기를 위한 새 케이스가 생성됩니다."
+ },
+ "queueing": "내보내기 대기열 추가 중...",
+ "tabs": {
+ "export": "단일 카메라",
+ "multiCamera": "다중 카메라"
+ },
+ "multiCamera": {
+ "timeRange": "시간 범위",
+ "selectFromTimeline": "타임라인에서 선택",
+ "cameraSelection": "카메라",
+ "cameraSelectionHelp": "해당 시간 범위에 추적된 객체가 있는 카메라가 기본 선택됩니다",
+ "searchOrSelectGroup": "검색 또는 카메라 그룹 선택...",
+ "selectAll": "모든 카메라 선택",
+ "clearSelection": "선택 해제",
+ "selectWithActivity": "추적된 객체가 있는 카메라",
+ "selectGroup": "그룹 선택",
+ "noMatchingCameras": "일치하는 카메라가 없습니다",
+ "selectedCount": "{{selected}} / {{total}}대 선택됨",
+ "checkingActivity": "카메라 활동 확인 중...",
+ "noCameras": "사용 가능한 카메라가 없습니다",
+ "detectionCount_other": "추적된 객체 {{count}}개",
+ "nameLabel": "내보내기 이름",
+ "namePlaceholder": "내보내기에 사용할 기본 이름 (선택 사항)",
+ "queueingButton": "내보내기 대기열 추가 중...",
+ "exportButton_other": "카메라 {{count}}대 내보내기"
+ },
+ "multi": {
+ "title_other": "다시보기 {{count}}건 내보내기",
+ "description": "선택한 각 다시보기를 내보냅니다. 모든 내보내기 항목은 단일 케이스로 묶입니다.",
+ "descriptionNoCase": "선택한 각 다시보기를 내보냅니다.",
+ "caseNamePlaceholder": "다시보기 내보내기 - {{date}}",
+ "exportButton_other": "다시보기 {{count}}건 내보내기",
+ "exportingButton": "내보내는 중...",
+ "toast": {
+ "started_other": "내보내기 {{count}}건을 시작했습니다.",
+ "partial": "{{total}}건 중 {{successful}}건의 내보내기를 시작했습니다. 실패 항목: {{failedItems}}",
+ "failed": "{{total}}건의 내보내기 시작에 실패했습니다. 실패 항목: {{failedItems}}"
+ }
}
},
"streaming": {
"label": "스트림",
"restreaming": {
- "disabled": "이 카메라는 재 스트리밍이 되지 않습니다.",
+ "disabled": "이 카메라는 재스트리밍이 활성화되어 있지 않습니다.",
"desc": {
- "title": "이 카메라를 위해 추가적인 라이브 뷰 옵션과 오디오를 go2rtc에서 설정하세요."
+ "title": "추가 라이브 뷰 옵션 및 오디오 기능을 사용하려면 go2rtc 설정을 진행하세요."
}
},
"showStats": {
- "label": "스트림 통계 보기",
- "desc": "이 옵션을 활성화하면 스트림 통계가 카메라 피드에 나타납니다."
+ "label": "스트림 통계 표시",
+ "desc": "카메라 피드 위에 실시간 스트림 통계 정보를 오버레이로 표시합니다."
},
"debugView": "디버그 뷰"
},
"search": {
"saveSearch": {
- "label": "검색 저장",
- "desc": "저장된 검색에 이름을 지정해주세요.",
- "placeholder": "검색에 이름 입력하기",
- "overwrite": "{{searchName}} (이/가) 이미 존재합니다. 값을 덮어 씌웁니다.",
- "success": "{{searchName}} 검색이 저장되었습니다.",
+ "label": "검색 조건 저장",
+ "desc": "저장할 검색 조건의 이름을 입력하세요.",
+ "placeholder": "검색 이름 입력",
+ "overwrite": "'{{searchName}}'이(가) 이미 존재합니다. 저장 시 기존 항목을 덮어씁니다.",
+ "success": "검색 조건({{searchName}})이 저장되었습니다.",
"button": {
"save": {
- "label": "이 검색 저장하기"
+ "label": "이 검색 조건 저장"
}
}
}
@@ -101,26 +156,34 @@
"confirmDelete": {
"title": "삭제 확인",
"desc": {
- "selected": "이 리뷰 항목과 관련된 모든 녹화된 영상을 삭제하시겠습니까?감지(detect) 스트림의 프레임을 얻지 못했습니다. 에러 로그를 확인하세요"
+ "desc": "{{cameraName}} 카메라의 detect 스트림에서 수신된 프레임이 없습니다. 오류 로그를 확인하세요"
},
"cameraDisabled": "카메라를 이용할 수 없습니다",
"toast": {
"success": {
- "submittedFrigatePlus": "Frigate+에 프레임이 성공적으로 제출됐습니다"
+ "submittedFrigatePlus": "Frigate+에 프레임을 성공적으로 제출했습니다"
},
"error": {
- "submitFrigatePlusFailed": "Frigate+에 프레임을 보내지 못했습니다"
+ "submitFrigatePlusFailed": "Frigate+에 프레임을 제출하지 못했습니다"
}
- }
+ },
+ "cameraOff": "카메라가 꺼져 있습니다"
}
diff --git a/web/public/locales/ko/config/cameras.json b/web/public/locales/ko/config/cameras.json
index 2e5d533706..2aea3053bc 100644
--- a/web/public/locales/ko/config/cameras.json
+++ b/web/public/locales/ko/config/cameras.json
@@ -10,10 +10,10 @@
},
"enabled": {
"label": "활성화됨",
- "description": "활성화됨"
+ "description": "활성화 여부"
},
"audio": {
- "label": "오디오 이벤트",
+ "label": "오디오 감지",
"description": "이 카메라의 오디오 기반 이벤트 감지 설정입니다.",
"enabled": {
"label": "오디오 감지 활성화",
@@ -25,39 +25,932 @@
},
"min_volume": {
"label": "최소 볼륨",
- "description": "오디오 감지를 실행하는 데 필요한 최소 RMS 볼륨 임계값으로, 낮을수록 민감도가 높아집니다(예: 200 높음, 500 보통, 1000 낮음)."
+ "description": "오디오 감지를 실행하는 데 필요한 최소 RMS 볼륨 임계값입니다. 낮을수록 민감도가 높아집니다 (예: 200 높음, 500 보통, 1000 낮음)."
},
"listen": {
- "label": "청취 유형",
- "description": "감지할 오디오 이벤트 유형 목록입니다(예: bark, fire_alarm, scream, speech, yell)."
+ "label": "감지 대상 소리",
+ "description": "감지할 오디오 이벤트 유형 목록입니다 (예: bark, fire_alarm, speech, yell)."
},
"filters": {
"label": "오디오 필터",
- "description": "오탐지를 줄이기 위해 사용되는 신뢰도 임계값과 같은 오디오 유형별 필터 설정입니다."
+ "description": "오감지를 줄이기 위한 신뢰도 임계값 등 오디오 유형별 필터 설정입니다.",
+ "threshold": {
+ "label": "최소 오디오 신뢰도",
+ "description": "오디오 이벤트로 카운트되기 위한 최소 신뢰도 임계값입니다."
+ }
},
"enabled_in_config": {
- "label": "원래 오디오 상태"
+ "label": "초기 오디오 상태",
+ "description": "정적 설정 파일에서 오디오 감지가 기본 활성화되어 있었는지 여부를 나타냅니다."
+ },
+ "num_threads": {
+ "label": "감지 스레드 수",
+ "description": "오디오 감지 처리에 사용할 스레드 수입니다."
}
},
"mqtt": {
- "label": "MQTT"
+ "label": "MQTT",
+ "description": "MQTT 이미지 발행 설정입니다.",
+ "enabled": {
+ "label": "이미지 전송",
+ "description": "이 카메라의 객체 이미지 스냅샷을 MQTT 토픽으로 발행하도록 활성화합니다."
+ },
+ "timestamp": {
+ "label": "타임스탬프 추가",
+ "description": "MQTT로 발행되는 이미지에 타임스탬프를 덧씌웁니다."
+ },
+ "bounding_box": {
+ "label": "바운딩 박스 추가",
+ "description": "MQTT로 발행되는 이미지에 바운딩 박스를 그립니다."
+ },
+ "crop": {
+ "label": "이미지 크롭",
+ "description": "MQTT로 발행되는 이미지를 감지된 객체의 바운딩 박스 크기로 잘라냅니다."
+ },
+ "height": {
+ "label": "이미지 높이",
+ "description": "MQTT로 발행되는 이미지를 리사이즈할 높이(픽셀)입니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "MQTT 이미지가 발행되기 위해 객체가 진입해야 하는 구역입니다."
+ },
+ "quality": {
+ "label": "JPEG 품질",
+ "description": "MQTT로 발행되는 이미지의 JPEG 압축 품질입니다 (0~100)."
+ }
},
"notifications": {
"label": "알림",
"enabled": {
- "label": "알림 활성화"
+ "label": "알림 활성화",
+ "description": "이 카메라의 알림 기능을 활성화하거나 비활성화합니다."
},
"email": {
- "label": "알림 이메일",
+ "label": "알림 수신 이메일",
"description": "푸시 알림에 사용되거나 특정 알림 제공업체에서 요구하는 이메일 주소입니다."
},
"cooldown": {
"label": "알림 재발송 대기 시간",
- "description": "수신자에게 스팸 메일을 보내는 것을 방지하기 위해 알림 재발송 대기시간(초)을 설정합니다."
+ "description": "수신자에게 알림이 연속 도배되는 것을 방지하기 위한 대기 시간(초)입니다."
},
"enabled_in_config": {
- "label": "초기 알림 활성 상태",
- "description": "초기 구성에서 알림이 활성화되었는지 여부를 나타냅니다."
+ "label": "초기 알림 상태",
+ "description": "초기 정적 구성에서 알림이 활성화되어 있었는지 여부를 나타냅니다."
+ },
+ "description": "이 카메라의 알림을 활성화하고 제어하기 위한 설정입니다."
+ },
+ "zones": {
+ "label": "구역 (Zones)",
+ "description": "프레임의 특정 영역을 정의하여 객체가 해당 영역 내에 있는지 여부를 판정할 수 있도록 합니다.",
+ "friendly_name": {
+ "label": "구역 별칭",
+ "description": "Frigate UI에 표시될 구역 이름입니다. 지정하지 않으면 구역 고유 식별자 이름이 사용됩니다."
+ },
+ "enabled": {
+ "label": "활성화됨",
+ "description": "이 구역을 활성화하거나 비활성화합니다. 비활성화된 구역은 런타임에 무시됩니다."
+ },
+ "enabled_in_config": {
+ "label": "구역의 초기 상태를 추적합니다."
+ },
+ "filters": {
+ "label": "구역 필터",
+ "description": "이 구역 내의 객체에 적용할 필터입니다. 오탐지를 줄이거나 구역 내 진입으로 인정할 객체 조건을 제한하는 데 사용됩니다.",
+ "min_area": {
+ "label": "최소 객체 면적",
+ "description": "이 객체 유형에 필요한 최소 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "max_area": {
+ "label": "최대 객체 면적",
+ "description": "이 객체 유형에 허용되는 최대 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "min_ratio": {
+ "label": "최소 가로세로 비율",
+ "description": "바운딩 박스에 요구되는 최소 너비/높이 비율입니다."
+ },
+ "max_ratio": {
+ "label": "최대 가로세로 비율",
+ "description": "바운딩 박스에 허용되는 최대 너비/높이 비율입니다."
+ },
+ "threshold": {
+ "label": "신뢰도 임계값",
+ "description": "객체를 실제 탐지로 인정하기 위해 요구되는 평균 감지 신뢰도 임계값입니다."
+ },
+ "min_score": {
+ "label": "최소 신뢰도",
+ "description": "객체로 카운트되기 위해 필요한 단일 프레임 최소 감지 신뢰도입니다."
+ },
+ "mask": {
+ "label": "필터 마스크",
+ "description": "프레임 내에서 이 필터가 적용될 다각형 좌표입니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ }
+ },
+ "coordinates": {
+ "label": "좌표",
+ "description": "구역 영역을 정의하는 다각형 좌표입니다. 쉼표로 구분된 문자열 또는 좌표 문자열 목록일 수 있습니다. 좌표는 상대값(0~1) 또는 절대값(레거시)이어야 합니다."
+ },
+ "distances": {
+ "label": "실제 거리",
+ "description": "속도 또는 거리 계산에 사용되는 구역 사각형 각 변의 실제 거리값(선택 사항)입니다. 설정할 경우 정확히 4개의 값이어야 합니다."
+ },
+ "inertia": {
+ "label": "관성 프레임",
+ "description": "구역 내에 있는 것으로 인정하기 위해 객체가 연속으로 감지되어야 하는 프레임 수입니다. 순간적인 일시적 오탐을 걸러내는 데 유용합니다."
+ },
+ "loitering_time": {
+ "label": "배회 감지 시간(초)",
+ "description": "객체가 구역 내에 머무르고 있는 것으로 간주할 시간(초)입니다. 배회 감지를 비활성화하려면 0으로 설정하세요."
+ },
+ "speed_threshold": {
+ "label": "최소 이동 속도",
+ "description": "구역 내에 존재하는 것으로 인정되기 위해 객체에 요구되는 최소 속도(거리 설정 시 실제 단위 기준)입니다. 속도 기반 구역 트리거에 사용됩니다."
+ },
+ "objects": {
+ "label": "트리거 대상 객체",
+ "description": "이 구역을 작동시킬 수 있는 객체 유형 목록(labelmap 기준)입니다. 비워 두면 모든 객체에 대해 작동합니다."
}
+ },
+ "audio_transcription": {
+ "label": "오디오 텍스트 변환 (STT)",
+ "description": "이벤트 및 실시간 자막 처리에 사용되는 실시간 음성 전사 설정입니다.",
+ "enabled": {
+ "label": "텍스트 변환 활성화",
+ "description": "수동으로 트리거된 오디오 이벤트의 텍스트 변환을 활성화하거나 비활성화합니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 텍스트 변환 상태"
+ },
+ "live_enabled": {
+ "label": "실시간 텍스트 변환",
+ "description": "수신되는 오디오에 대한 실시간 스트리밍 텍스트 변환을 활성화합니다."
+ }
+ },
+ "birdseye": {
+ "label": "버드아이 (Birdseye)",
+ "description": "여러 카메라 피드를 단일 레이아웃으로 합성하는 버드아이 뷰 설정입니다.",
+ "enabled": {
+ "label": "버드아이 활성화",
+ "description": "버드아이 뷰 기능을 활성화하거나 비활성화합니다."
+ },
+ "mode": {
+ "label": "추적 모드",
+ "description": "카메라를 버드아이에 포함하는 기준 모드: 'objects', 'motion', 또는 'continuous'."
+ },
+ "order": {
+ "label": "표시 순서",
+ "description": "버드아이 레이아웃 내에서 카메라 배치 순서를 제어하는 숫자입니다."
+ }
+ },
+ "detect": {
+ "label": "객체 감지",
+ "description": "객체 감지를 실행하고 트래커를 초기화하는 데 사용되는 detect 역할 설정입니다.",
+ "enabled": {
+ "label": "객체 감지 활성화",
+ "description": "이 카메라의 객체 감지를 활성화하거나 비활성화합니다."
+ },
+ "height": {
+ "label": "감지 높이",
+ "description": "감지 스트림에 사용할 프레임 높이(픽셀)입니다. 비워 두면 원본 스트림 해상도를 사용합니다."
+ },
+ "width": {
+ "label": "감지 너비",
+ "description": "감지 스트림에 사용할 프레임 너비(픽셀)입니다. 비워 두면 원본 스트림 해상도를 사용합니다."
+ },
+ "fps": {
+ "label": "감지 FPS",
+ "description": "감지를 실행할 목표 초당 프레임 수입니다. 낮을수록 CPU 사용량이 감소합니다 (권장값은 5이며, 매우 빠른 물체를 추적할 때만 최대 10까지 권장)."
+ },
+ "min_initialized": {
+ "label": "최소 초기화 프레임",
+ "description": "추적 객체를 생성하기 전 연속 감지되어야 하는 프레임 수입니다. 값을 높이면 오탐 초기화를 줄일 수 있습니다 (기본값: fps / 2)."
+ },
+ "max_disappeared": {
+ "label": "최대 사라짐 프레임",
+ "description": "추적 중인 객체가 시야에서 완전히 사라진 것으로 판단하기까지 감지되지 않는 프레임 수입니다."
+ },
+ "stationary": {
+ "label": "정지 객체 설정",
+ "description": "일정 시간 정지해 있는 객체를 감지하고 관리하기 위한 설정입니다.",
+ "interval": {
+ "label": "정지 확인 주기",
+ "description": "정지 객체임을 재확인하기 위해 감지 검사를 실행하는 간격(프레임 단위)입니다."
+ },
+ "threshold": {
+ "label": "정지 임계값",
+ "description": "객체를 정지 상태로 분류하기 위해 위치 이동이 없어야 하는 프레임 수입니다."
+ },
+ "max_frames": {
+ "label": "최대 추적 프레임",
+ "description": "정지 객체를 폐기하기 전까지 추적할 최대 프레임 한도입니다.",
+ "default": {
+ "label": "기본 최대 프레임",
+ "description": "추적을 중단하기 전 정지 객체를 추적할 기본 최대 프레임 수입니다."
+ },
+ "objects": {
+ "label": "객체별 최대 프레임",
+ "description": "정지 객체를 추적할 객체 유형별 최대 프레임 수 재정의 설정입니다."
+ }
+ },
+ "classifier": {
+ "label": "시각적 분류기 활성화",
+ "description": "바운딩 박스가 미세하게 흔들려도 시각적 분류기를 사용해 실제로 정지된 객체인지 확인합니다."
+ }
+ },
+ "annotation_offset": {
+ "label": "어노테이션 오프셋",
+ "description": "녹화 영상과 타임라인 바운딩 박스의 싱크를 맞추기 위해 감지 어노테이션을 전후로 이동할 밀리초(ms) 단위 시간입니다 (양수 또는 음수 가능)."
+ }
+ },
+ "face_recognition": {
+ "label": "얼굴 인식",
+ "description": "이 카메라의 얼굴 감지 및 인식 설정입니다.",
+ "enabled": {
+ "label": "얼굴 인식 활성화",
+ "description": "얼굴 인식을 활성화하거나 비활성화합니다."
+ },
+ "min_area": {
+ "label": "최소 얼굴 크기",
+ "description": "인식을 시도하기 위해 필요한 감지된 얼굴 박스의 최소 면적(픽셀)입니다."
+ }
+ },
+ "ffmpeg": {
+ "label": "스트림 (FFmpeg)",
+ "description": "카메라 스트림 입력 및 바이너리 경로, 인수, 하드웨어 가속, 역할별 출력 인수를 포함한 FFmpeg 설정입니다.",
+ "path": {
+ "label": "FFmpeg 경로",
+ "description": "사용할 FFmpeg 바이너리 경로 또는 버전 별칭(\"7.0\" 또는 \"8.0\")입니다."
+ },
+ "global_args": {
+ "label": "FFmpeg 글로벌 인수",
+ "description": "FFmpeg 프로세스 전역에 전달할 공통 인수입니다."
+ },
+ "hwaccel_args": {
+ "label": "하드웨어 가속 인수",
+ "description": "FFmpeg 하드웨어 가속 인수입니다. 하드웨어 환경에 맞는 프리셋 사용을 권장합니다."
+ },
+ "input_args": {
+ "label": "입력 인수",
+ "description": "FFmpeg 입력 스트림에 적용할 인수입니다."
+ },
+ "output_args": {
+ "label": "출력 인수",
+ "description": "detect, record 등 서로 다른 FFmpeg 역할에 사용할 기본 출력 인수입니다.",
+ "detect": {
+ "label": "감지(detect) 출력 인수",
+ "description": "detect 역할 스트림에 적용할 기본 출력 인수입니다."
+ },
+ "record": {
+ "label": "녹화(record) 출력 인수",
+ "description": "record 역할 스트림에 적용할 기본 출력 인수입니다."
+ }
+ },
+ "retry_interval": {
+ "label": "FFmpeg 재연결 대기 시간",
+ "description": "카메라 스트림 연결 실패 시 재연결을 시도하기까지 대기할 시간(초)입니다 (기본값: 10)."
+ },
+ "apple_compatibility": {
+ "label": "Apple 호환성",
+ "description": "H.265 녹화 시 Apple 기기 플레이어와의 호환성을 위해 HEVC 태깅을 활성화합니다."
+ },
+ "gpu": {
+ "label": "GPU 인덱스",
+ "description": "하드웨어 가속에 사용할 기본 GPU 번호(인덱스)입니다."
+ },
+ "inputs": {
+ "label": "카메라 입력 스트림",
+ "description": "이 카메라에 설정된 입력 스트림 정의(경로 및 역할) 목록입니다.",
+ "path": {
+ "label": "입력 경로",
+ "description": "카메라 입력 스트림 URL 또는 디바이스 경로입니다."
+ },
+ "roles": {
+ "label": "입력 역할",
+ "description": "이 입력 스트림에 할당할 역할입니다."
+ },
+ "global_args": {
+ "label": "FFmpeg 글로벌 인수",
+ "description": "이 입력 스트림에만 적용할 FFmpeg 글로벌 인수입니다."
+ },
+ "hwaccel_args": {
+ "label": "하드웨어 가속 인수",
+ "description": "이 입력 스트림에만 적용할 하드웨어 가속 인수입니다."
+ },
+ "input_args": {
+ "label": "입력 인수",
+ "description": "이 스트림에만 개별 적용할 입력 인수입니다."
+ }
+ }
+ },
+ "live": {
+ "label": "실시간 재생",
+ "description": "웹 UI에서 실시간 스트림 선택, 해상도 및 화질을 제어하기 위한 설정입니다.",
+ "streams": {
+ "label": "실시간 스트림 이름",
+ "description": "실시간 재생에 사용할 restream/go2rtc 이름과 설정된 스트림 이름의 매핑입니다."
+ },
+ "height": {
+ "label": "실시간 재생 높이",
+ "description": "웹 UI에서 jsmpeg 실시간 스트림을 렌더링할 높이(픽셀)입니다 (감지 스트림 높이 이하)."
+ },
+ "quality": {
+ "label": "실시간 품질",
+ "description": "jsmpeg 스트림의 인코딩 품질입니다 (1 최고 품질, 31 최저 품질)."
+ }
+ },
+ "lpr": {
+ "label": "차량 번호판 인식",
+ "description": "감지 임계값, 포맷, 등록된 번호판 등을 포함한 차량 번호판 인식 설정입니다.",
+ "enabled": {
+ "label": "LPR 활성화",
+ "description": "이 카메라에서 LPR 기능을 활성화하거나 비활성화합니다."
+ },
+ "expire_time": {
+ "label": "만료 시간(초)",
+ "description": "시야에서 사라진 번호판이 트래커에서 만료되기까지의 시간(초)입니다 (전용 LPR 카메라 전용)."
+ },
+ "min_area": {
+ "label": "최소 번호판 크기",
+ "description": "인식을 시도하기 위해 필요한 최소 번호판 면적(픽셀)입니다."
+ },
+ "enhancement": {
+ "label": "이미지 보정 레벨",
+ "description": "OCR 수행 전 번호판 크롭 이미지에 적용할 보정 강도(0~10)입니다 (값이 높다고 항상 인식률이 좋아지지는 않으며, 5 초과는 야간 전용이므로 주의해야 합니다)."
+ }
+ },
+ "motion": {
+ "label": "움직임 감지",
+ "description": "이 카메라의 기본 움직임 감지 설정입니다.",
+ "enabled": {
+ "label": "움직임 감지 활성화",
+ "description": "이 카메라의 움직임 감지를 활성화하거나 비활성화합니다."
+ },
+ "threshold": {
+ "label": "움직임 임계값",
+ "description": "움직임 감지기가 사용하는 픽셀 차이 임계값입니다. 값이 클수록 민감도가 낮아집니다 (범위: 1~255)."
+ },
+ "lightning_threshold": {
+ "label": "번개/빛 변화 임계값",
+ "description": "순간적인 조명 변화나 번개를 감지하여 무시하기 위한 임계값입니다 (낮을수록 민감하며 0.3~1.0 사이 값). 움직임 감지 자체를 완전히 끄는 것이 아니라 임계값을 초과할 때 추가 프레임 분석을 일시 중단하는 것이며, 이 동안에도 움직임 기반 녹화는 정상 생성됩니다."
+ },
+ "skip_motion_threshold": {
+ "label": "움직임 건너뛰기 임계값",
+ "description": "0.0~1.0 사이로 설정 시 단일 프레임에서 이 비율 이상의 화면이 바뀌면 움직임 박스를 생성하지 않고 즉시 재보정합니다. 폭풍이나 번개 시 CPU를 절약하고 오탐을 줄일 수 있지만, PTZ 카메라 자동 추적과 같은 실제 이벤트를 놓칠 수 있습니다. 사용하지 않으려면 설정하지 마세요(None)."
+ },
+ "improve_contrast": {
+ "label": "대비 향상",
+ "description": "움직임 분석 전 프레임 대비를 향상하여 감지 성능을 보조합니다."
+ },
+ "contour_area": {
+ "label": "윤곽선 면적",
+ "description": "움직임 윤곽선으로 인정되기 위한 최소 픽셀 면적입니다."
+ },
+ "delta_alpha": {
+ "label": "델타 알파",
+ "description": "움직임 계산 시 프레임 차분화에 사용할 알파 블렌딩 계수입니다."
+ },
+ "frame_alpha": {
+ "label": "프레임 알파",
+ "description": "움직임 전처리용 프레임 블렌딩에 사용할 알파 값입니다."
+ },
+ "frame_height": {
+ "label": "프레임 높이",
+ "description": "움직임 연산 시 프레임을 리사이즈할 높이(픽셀)입니다."
+ },
+ "mask": {
+ "label": "마스크 좌표",
+ "description": "움직임 감지 영역을 포함하거나 제외하기 위해 다각형을 정의하는 정렬된 x,y 좌표입니다."
+ },
+ "mqtt_off_delay": {
+ "label": "MQTT 꺼짐 지연",
+ "description": "마지막 움직임이 감지된 후 MQTT에 'off' 상태를 발행하기까지 대기할 시간(초)입니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 움직임 상태",
+ "description": "초기 정적 설정 파일에서 움직임 감지가 활성화되어 있었는지 여부를 나타냅니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ }
+ },
+ "objects": {
+ "label": "객체",
+ "description": "추적할 레이블 목록과 객체별 필터를 포함한 기본 객체 추적 설정입니다.",
+ "track": {
+ "label": "추적 대상 객체",
+ "description": "이 카메라에서 추적할 객체 레이블 목록입니다."
+ },
+ "filters": {
+ "label": "객체 필터",
+ "description": "오탐지를 줄이기 위해 감지된 객체에 적용할 필터 설정(면적, 비율, 신뢰도)입니다.",
+ "min_area": {
+ "label": "최소 객체 면적",
+ "description": "이 객체 유형에 필요한 최소 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "max_area": {
+ "label": "최대 객체 면적",
+ "description": "이 객체 유형에 허용되는 최대 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "min_ratio": {
+ "label": "최소 가로세로 비율",
+ "description": "바운딩 박스에 요구되는 최소 너비/높이 비율입니다."
+ },
+ "max_ratio": {
+ "label": "최대 가로세로 비율",
+ "description": "바운딩 박스에 허용되는 최대 너비/높이 비율입니다."
+ },
+ "threshold": {
+ "label": "신뢰도 임계값",
+ "description": "객체를 실제 탐지로 인정하기 위해 요구되는 평균 감지 신뢰도 임계값입니다."
+ },
+ "min_score": {
+ "label": "최소 신뢰도",
+ "description": "객체로 카운트되기 위해 필요한 단일 프레임 최소 감지 신뢰도입니다."
+ },
+ "mask": {
+ "label": "필터 마스크",
+ "description": "프레임 내에서 이 필터가 적용될 다각형 좌표입니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ }
+ },
+ "mask": {
+ "label": "객체 마스크",
+ "description": "지정된 영역에서 객체 감지를 방지하기 위한 마스크 다각형입니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ },
+ "genai": {
+ "label": "생성형 AI (GenAI) 객체 설정",
+ "description": "추적된 객체를 설명하고 분석용 프레임을 전송하기 위한 GenAI 옵션입니다.",
+ "enabled": {
+ "label": "GenAI 활성화",
+ "description": "기본적으로 추적된 객체에 대한 GenAI 설명 생성을 활성화합니다."
+ },
+ "use_snapshot": {
+ "label": "스냅샷 사용",
+ "description": "GenAI 설명 생성 시 썸네일 대신 객체 스냅샷을 사용합니다."
+ },
+ "prompt": {
+ "label": "캡션 프롬프트",
+ "description": "GenAI로 설명을 생성할 때 사용할 기본 프롬프트 템플릿입니다."
+ },
+ "object_prompts": {
+ "label": "객체별 프롬프트",
+ "description": "특정 레이블에 대한 GenAI 결과를 맞춤화하기 위한 객체별 개별 프롬프트입니다."
+ },
+ "objects": {
+ "label": "GenAI 대상 객체",
+ "description": "기본적으로 GenAI로 전송할 객체 레이블 목록입니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "GenAI 설명 생성 대상이 되기 위해 객체가 반드시 진입해야 하는 구역입니다."
+ },
+ "debug_save_thumbnails": {
+ "label": "썸네일 저장",
+ "description": "디버깅 및 검토를 위해 GenAI로 전송된 썸네일을 저장합니다."
+ },
+ "send_triggers": {
+ "label": "GenAI 전송 트리거",
+ "description": "프레임을 GenAI로 전송할 시점(추적 종료 시, 주요 업데이트 후 등)을 정의합니다.",
+ "tracked_object_end": {
+ "label": "종료 시 전송",
+ "description": "추적 객체의 동작이 종료되었을 때 GenAI에 요청을 보냅니다."
+ },
+ "after_significant_updates": {
+ "label": "조기 GenAI 트리거",
+ "description": "추적 객체에 지정된 횟수만큼 주요 변화가 발생한 후 조기에 GenAI 요청을 보냅니다."
+ }
+ },
+ "enabled_in_config": {
+ "label": "초기 GenAI 상태",
+ "description": "초기 정적 설정에서 GenAI가 활성화되었는지 여부를 나타냅니다."
+ }
+ }
+ },
+ "record": {
+ "label": "녹화",
+ "description": "이 카메라의 녹화 및 보관 주기 설정입니다.",
+ "enabled": {
+ "label": "녹화 활성화",
+ "description": "이 카메라의 녹화를 활성화하거나 비활성화합니다."
+ },
+ "expire_interval": {
+ "label": "녹화 파일 정리 주기",
+ "description": "만료된 녹화 세그먼트를 삭제하는 정리 작업 간격(분)입니다."
+ },
+ "continuous": {
+ "label": "상시 녹화 보관",
+ "description": "객체 추적이나 움직임 여부와 상관없이 녹화본을 보관할 일수입니다. 알림이나 감지 이벤트만 보관하려면 0으로 설정하세요.",
+ "days": {
+ "label": "보관 일수",
+ "description": "녹화본 보관 일수입니다."
+ }
+ },
+ "motion": {
+ "label": "움직임 녹화 보관",
+ "description": "추적 객체가 없더라도 움직임에 의해 트리거된 녹화본을 보관할 일수입니다. 알림이나 감지 이벤트만 보관하려면 0으로 설정하세요.",
+ "days": {
+ "label": "보관 일수",
+ "description": "녹화본 보관 일수입니다."
+ }
+ },
+ "detections": {
+ "label": "감지 녹화 보관",
+ "description": "이벤트 전/후 버퍼 캡처 시간을 포함한 감지 이벤트의 녹화 보관 설정입니다.",
+ "pre_capture": {
+ "label": "사전 캡처 시간",
+ "description": "감지 이벤트 시작 전 녹화에 포함할 시간(초)입니다."
+ },
+ "post_capture": {
+ "label": "사후 캡처 시간",
+ "description": "감지 이벤트 종료 후 녹화에 포함할 시간(초)입니다."
+ },
+ "retain": {
+ "label": "이벤트 보관",
+ "description": "감지 이벤트 녹화본의 보관 설정입니다.",
+ "days": {
+ "label": "보관 일수",
+ "description": "감지 이벤트 녹화본을 보관할 일수입니다."
+ },
+ "mode": {
+ "label": "보관 모드",
+ "description": "보관 모드: all(모든 구간 저장), motion(움직임이 있는 구간 저장), active_objects(활동 중인 객체가 있는 구간 저장)."
+ }
+ }
+ },
+ "alerts": {
+ "label": "알림 녹화 보관",
+ "description": "이벤트 전/후 버퍼 캡처 시간을 포함한 알림 이벤트의 녹화 보관 설정입니다.",
+ "pre_capture": {
+ "label": "사전 캡처 시간",
+ "description": "알림 이벤트 시작 전 녹화에 포함할 시간(초)입니다."
+ },
+ "post_capture": {
+ "label": "사후 캡처 시간",
+ "description": "알림 이벤트 종료 후 녹화에 포함할 시간(초)입니다."
+ },
+ "retain": {
+ "label": "이벤트 보관",
+ "description": "알림 이벤트 녹화본의 보관 설정입니다.",
+ "days": {
+ "label": "보관 일수",
+ "description": "알림 이벤트 녹화본을 보관할 일수입니다."
+ },
+ "mode": {
+ "label": "보관 모드",
+ "description": "보관 모드: all(모든 구간 저장), motion(움직임이 있는 구간 저장), active_objects(활동 중인 객체가 있는 구간 저장)."
+ }
+ }
+ },
+ "export": {
+ "label": "내보내기 설정",
+ "description": "타임랩스 및 하드웨어 가속 등 녹화본 내보내기 시 적용할 설정입니다.",
+ "hwaccel_args": {
+ "label": "내보내기 하드웨어 가속 인수",
+ "description": "내보내기 및 트랜스코딩 작업에 사용할 하드웨어 가속 인수입니다."
+ },
+ "max_concurrent": {
+ "label": "최대 동시 내보내기 수",
+ "description": "동시에 처리할 수 있는 최대 내보내기 작업 수입니다."
+ },
+ "chapters": {
+ "label": "내보낸 녹화 영상에 삽입할 챕터 메타데이터"
+ }
+ },
+ "preview": {
+ "label": "미리보기 설정",
+ "description": "UI에 표시되는 녹화 미리보기의 화질을 제어하는 설정입니다.",
+ "quality": {
+ "label": "미리보기 화질",
+ "description": "미리보기 화질 레벨 (very_low, low, medium, high, very_high)."
+ }
+ },
+ "enabled_in_config": {
+ "label": "초기 녹화 상태",
+ "description": "초기 정적 구성에서 녹화가 활성화되어 있었는지 여부를 나타냅니다."
+ }
+ },
+ "review": {
+ "label": "다시보기",
+ "description": "UI 및 저장소에서 사용하는 알림, 감지 및 GenAI 요약을 제어하는 설정입니다.",
+ "alerts": {
+ "label": "알림 설정",
+ "description": "어떤 추적 객체가 알림을 생성하고 알림을 어떻게 보관할지 결정하는 설정입니다.",
+ "enabled": {
+ "label": "알림 활성화",
+ "description": "이 카메라의 알림 생성을 활성화하거나 비활성화합니다."
+ },
+ "labels": {
+ "label": "알림 대상 레이블",
+ "description": "알림을 트리거할 객체 레이블 목록입니다 (예: car, person)."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "알림으로 분류되기 위해 객체가 진입해야 하는 구역입니다. 모든 구역을 허용하려면 비워 두세요."
+ },
+ "enabled_in_config": {
+ "label": "초기 알림 상태",
+ "description": "정적 설정에서 알림이 원래 활성화되어 있었는지 여부를 추적합니다."
+ },
+ "cutoff_time": {
+ "label": "알림 종료 대기 시간",
+ "description": "알림 유발 활동이 멈춘 후 알림을 공식 종료하기까지 대기할 시간(초)입니다."
+ }
+ },
+ "detections": {
+ "label": "감지 이벤트 설정",
+ "description": "어떤 추적 객체가 일반 감지(알림 제외) 이벤트를 생성하고 어떻게 보관할지 결정하는 설정입니다.",
+ "enabled": {
+ "label": "감지 이벤트 활성화",
+ "description": "이 카메라의 감지 이벤트를 활성화하거나 비활성화합니다."
+ },
+ "labels": {
+ "label": "감지 대상 레이블",
+ "description": "일반 감지 이벤트로 인정할 객체 레이블 목록입니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "감지 이벤트로 처리되기 위해 객체가 진입해야 하는 구역입니다. 모든 구역을 허용하려면 비워 두세요."
+ },
+ "cutoff_time": {
+ "label": "감지 종료 대기 시간",
+ "description": "감지 유발 활동이 멈춘 후 이벤트를 공식 종료하기까지 대기할 시간(초)입니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 감지 상태",
+ "description": "정적 설정에서 감지 이벤트가 원래 활성화되어 있었는지 여부를 추적합니다."
+ }
+ },
+ "genai": {
+ "label": "GenAI 다시보기 설정",
+ "description": "다시보기 항목의 설명과 요약을 생성하기 위한 생성형 AI 사용을 제어합니다.",
+ "enabled": {
+ "label": "GenAI 설명 활성화",
+ "description": "다시보기 항목에 대한 GenAI 기반 설명 및 요약 생성을 활성화하거나 비활성화합니다."
+ },
+ "alerts": {
+ "label": "알림에 GenAI 활성화",
+ "description": "알림 항목에 대해 GenAI로 설명을 생성합니다."
+ },
+ "detections": {
+ "label": "감지에 GenAI 활성화",
+ "description": "감지 항목에 대해 GenAI로 설명을 생성합니다."
+ },
+ "image_source": {
+ "label": "다시보기 이미지 소스",
+ "description": "GenAI로 전송할 이미지 소스 ('preview' 또는 'recordings'). 'recordings'는 화질이 더 높지만 토큰 사용량이 증가합니다."
+ },
+ "additional_concerns": {
+ "label": "추가 주의 사항",
+ "description": "이 카메라의 활동을 평가할 때 GenAI가 고려해야 할 추가 주의 사항이나 참고 사항 목록입니다."
+ },
+ "debug_save_thumbnails": {
+ "label": "썸네일 저장",
+ "description": "디버깅 및 검토를 위해 GenAI 제공업체로 전송된 썸네일을 저장합니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 GenAI 상태",
+ "description": "정적 설정에서 GenAI 다시보기가 원래 활성화되어 있었는지 여부를 추적합니다."
+ },
+ "preferred_language": {
+ "label": "선호 언어",
+ "description": "GenAI가 생성할 응답에 요청할 선호 언어입니다."
+ },
+ "activity_context_prompt": {
+ "label": "활동 맥락 프롬프트",
+ "description": "GenAI 요약에 맥락을 제공하기 위해 어떤 활동이 의심스럽거나 정상적인지 설명하는 커스텀 프롬프트입니다."
+ }
+ }
+ },
+ "semantic_search": {
+ "label": "시맨틱(의미 기반) 검색",
+ "description": "유사한 항목을 찾기 위해 객체 임베딩을 구축하고 쿼리하는 시맨틱 검색 설정입니다.",
+ "triggers": {
+ "label": "트리거",
+ "description": "카메라별 시맨틱 검색 트리거를 위한 동작 및 매칭 기준입니다.",
+ "friendly_name": {
+ "label": "트리거 별칭",
+ "description": "UI에 표시될 이 트리거의 친숙한 이름(선택 사항)입니다."
+ },
+ "enabled": {
+ "label": "트리거 활성화",
+ "description": "이 시맨틱 검색 트리거를 활성화하거나 비활성화합니다."
+ },
+ "type": {
+ "label": "트리거 유형",
+ "description": "트리거 유형: 'thumbnail'(이미지 비교) 또는 'description'(텍스트 비교)."
+ },
+ "data": {
+ "label": "트리거 내용",
+ "description": "추적 객체와 매칭할 텍스트 문구 또는 썸네일 ID입니다."
+ },
+ "threshold": {
+ "label": "트리거 임계값",
+ "description": "이 트리거를 작동시키기 위해 요구되는 최소 유사도 점수(0~1)입니다."
+ },
+ "actions": {
+ "label": "트리거 동작",
+ "description": "트리거가 매칭되었을 때 실행할 동작 목록입니다 (notification, sub_label, attribute)."
+ }
+ }
+ },
+ "snapshots": {
+ "label": "스냅샷",
+ "description": "이 카메라에서 API로 생성되는 추적 객체 스냅샷 설정입니다.",
+ "enabled": {
+ "label": "스냅샷 활성화",
+ "description": "이 카메라의 스냅샷 저장을 활성화하거나 비활성화합니다."
+ },
+ "timestamp": {
+ "label": "타임스탬프 오버레이",
+ "description": "API 스냅샷에 타임스탬프를 덧씌워 표시합니다."
+ },
+ "bounding_box": {
+ "label": "바운딩 박스 오버레이",
+ "description": "API 스냅샷에 추적 객체의 바운딩 박스를 그립니다."
+ },
+ "crop": {
+ "label": "스냅샷 크롭",
+ "description": "API 스냅샷을 감지된 객체의 바운딩 박스 크기로 잘라냅니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "스냅샷을 저장하기 위해 객체가 반드시 진입해야 하는 구역입니다."
+ },
+ "height": {
+ "label": "스냅샷 높이",
+ "description": "API 스냅샷을 리사이즈할 높이(픽셀)입니다. 비워 두면 원본 크기를 유지합니다."
+ },
+ "retain": {
+ "label": "스냅샷 보관",
+ "description": "기본 보관 일수 및 객체별 재정의를 포함한 스냅샷 보관 설정입니다.",
+ "default": {
+ "label": "기본 보관 일수",
+ "description": "스냅샷을 보관할 기본 일수입니다."
+ },
+ "objects": {
+ "label": "객체별 보관 일수",
+ "description": "스냅샷 보관 일수를 객체 유형별로 개별 재정의합니다."
+ }
+ },
+ "quality": {
+ "label": "스냅샷 화질",
+ "description": "저장할 스냅샷의 인코딩 품질입니다 (0~100)."
+ }
+ },
+ "timestamp_style": {
+ "label": "타임스탬프 스타일",
+ "description": "스냅샷 및 디버그 뷰에 적용되는 타임스탬프 텍스트 스타일 옵션입니다.",
+ "position": {
+ "label": "타임스탬프 위치",
+ "description": "이미지 내 타임스탬프 위치 (tl: 좌상단, tr: 우상단, bl: 좌하단, br: 우하단)."
+ },
+ "format": {
+ "label": "타임스탬프 형식",
+ "description": "타임스탬프 표시에 사용할 날짜/시간 형식 문자열입니다 (Python datetime 포맷 코드)."
+ },
+ "color": {
+ "label": "타임스탬프 색상",
+ "description": "타임스탬프 텍스트의 RGB 색상값입니다 (모든 값은 0~255).",
+ "red": {
+ "label": "빨강 (Red)",
+ "description": "타임스탬프 색상의 빨간색 성분 (0-255)."
+ },
+ "green": {
+ "label": "초록 (Green)",
+ "description": "타임스탬프 색상의 초록색 성분 (0-255)."
+ },
+ "blue": {
+ "label": "파랑 (Blue)",
+ "description": "타임스탬프 색상의 파란색 성분 (0-255)."
+ }
+ },
+ "thickness": {
+ "label": "타임스탬프 두께",
+ "description": "타임스탬프 글자의 선 두께입니다."
+ },
+ "effect": {
+ "label": "타임스탬프 효과",
+ "description": "타임스탬프 텍스트에 적용할 시각 효과입니다 (none, solid, shadow)."
+ }
+ },
+ "best_image_timeout": {
+ "label": "최적 이미지 대기 시간",
+ "description": "가장 높은 신뢰도 점수를 가진 최적 이미지를 선별하기 위해 대기할 시간입니다."
+ },
+ "onvif": {
+ "label": "ONVIF",
+ "description": "이 카메라의 ONVIF 연결 및 PTZ 자동 추적 설정입니다.",
+ "host": {
+ "label": "ONVIF 호스트",
+ "description": "이 카메라의 ONVIF 서비스 호스트 주소(및 선택적 프로토콜 스키마)입니다."
+ },
+ "port": {
+ "label": "ONVIF 포트",
+ "description": "ONVIF 서비스 포트 번호입니다."
+ },
+ "user": {
+ "label": "ONVIF 사용자 이름",
+ "description": "ONVIF 인증에 사용할 사용자 이름입니다 (일부 기기는 관리자 계정이 필요함)."
+ },
+ "password": {
+ "label": "ONVIF 비밀번호",
+ "description": "ONVIF 인증 비밀번호입니다."
+ },
+ "tls_insecure": {
+ "label": "TLS 검증 비활성화",
+ "description": "ONVIF 통신 시 TLS 인증서 검증을 건너뛰고 Digest 인증을 끕니다 (안전하지 않으므로 신뢰할 수 있는 네트워크에서만 사용하세요)."
+ },
+ "profile": {
+ "label": "ONVIF 프로필",
+ "description": "PTZ 제어에 사용할 특정 ONVIF 미디어 프로필의 토큰 또는 이름입니다. 지정하지 않으면 유효한 PTZ 구성이 있는 첫 번째 프로필이 자동 선택됩니다."
+ },
+ "autotracking": {
+ "label": "자동 추적 (Autotracking)",
+ "description": "PTZ 카메라를 움직여 움직이는 객체를 프레임 중앙에 자동으로 추적하고 유지합니다.",
+ "enabled": {
+ "label": "자동 추적 활성화",
+ "description": "감지된 객체에 대한 PTZ 카메라의 자동 추적을 활성화하거나 비활성화합니다."
+ },
+ "calibrate_on_startup": {
+ "label": "시작 시 모터 캘리브레이션",
+ "description": "추적 정확도를 향상하기 위해 부팅 시 PTZ 모터 속도를 측정합니다. 보정 완료 후 Frigate가 movement_weights 값을 자동으로 업데이트합니다."
+ },
+ "zooming": {
+ "label": "줌 모드",
+ "description": "줌 동작 제어: disabled(팬/틸트만 사용), absolute(가장 안정적인 호환성), relative(팬/틸트/줌 동시 작동)."
+ },
+ "zoom_factor": {
+ "label": "줌 배율",
+ "description": "추적 중인 객체의 확대 수준을 제어합니다. 값이 낮으면 주변 시야를 넓게 유지하고, 높으면 대상을 가깝게 확대하지만 추적을 놓칠 위험이 있습니다 (0.1~0.75 사이 값)."
+ },
+ "track": {
+ "label": "추적 대상 객체",
+ "description": "자동 추적을 작동시킬 객체 유형 목록입니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "자동 추적이 시작되기 위해 객체가 먼저 진입해야 하는 구역입니다."
+ },
+ "return_preset": {
+ "label": "복귀 프리셋",
+ "description": "추적이 끝난 후 카메라가 돌아갈 펌웨어상의 ONVIF 프리셋 이름입니다."
+ },
+ "timeout": {
+ "label": "복귀 대기 시간",
+ "description": "객체를 놓친 후 카메라가 프리셋 위치로 복귀하기까지 대기할 시간(초)입니다."
+ },
+ "movement_weights": {
+ "label": "이동 가중치",
+ "description": "카메라 캘리브레이션을 통해 자동 생성된 보정값입니다. 수동으로 수정하지 마세요."
+ },
+ "enabled_in_config": {
+ "label": "초기 자동 추적 상태",
+ "description": "설정에서 자동 추적이 활성화되어 있었는지 여부를 추적하는 내부 필드입니다."
+ }
+ },
+ "ignore_time_mismatch": {
+ "label": "시간 불일치 무시",
+ "description": "ONVIF 통신 시 카메라와 Frigate 서버 간의 시간 동기화 차이를 무시합니다."
+ }
+ },
+ "type": {
+ "label": "카메라 유형",
+ "description": "카메라 유형"
+ },
+ "ui": {
+ "label": "카메라 UI",
+ "description": "UI에서 이 카메라의 표시 순서와 가시성을 제어합니다. 순서는 기본 대시보드에 영향을 미칩니다. 더 세부적인 설정은 카메라 그룹을 사용하세요.",
+ "order": {
+ "label": "UI 순서",
+ "description": "기본 대시보드 및 목록에서 카메라를 정렬하는 데 사용되는 숫자 순서입니다 (큰 숫자일수록 뒤에 표시됨)."
+ },
+ "dashboard": {
+ "label": "실시간 대시보드에 표시",
+ "description": "기본 '모든 카메라' 실시간 대시보드에 이 카메라를 표시할지 여부를 전환합니다. 비활성화해도 카메라 그룹이나 설정 등 UI의 다른 곳에서는 계속 접근할 수 있습니다."
+ },
+ "review": {
+ "label": "다시보기에 표시",
+ "description": "다시보기 페이지(카메라 필터, 모션 검토 및 기록 뷰 포함)에서 이 카메라를 표시할지 여부를 전환합니다."
+ }
+ },
+ "webui_url": {
+ "label": "카메라 관리 URL",
+ "description": "시스템 페이지에서 카메라 웹 관리 페이지로 바로 연결되는 URL입니다"
+ },
+ "profiles": {
+ "label": "프로필",
+ "description": "런타임 중에 활성화할 수 있는 부분 재정의를 포함한 명명된 설정 프로필입니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 카메라 상태",
+ "description": "카메라의 원래 구성 상태를 추적합니다."
}
}
diff --git a/web/public/locales/ko/config/global.json b/web/public/locales/ko/config/global.json
index 95fa0b1a6d..58e5e5b412 100644
--- a/web/public/locales/ko/config/global.json
+++ b/web/public/locales/ko/config/global.json
@@ -1,32 +1,33 @@
{
"version": {
"label": "현재 설정 버전",
- "description": "마이그레이션 및 데이터 형식 변경 확인을 위한 현재 설정의 버전 정보(숫자 또는 문자열)입니다."
+ "description": "마이그레이션 또는 형식 변경을 감지하기 위한 현재 활성 설정의 버전(숫자 또는 문자열)입니다."
},
"safe_mode": {
"label": "안전 모드",
- "description": "활성화하면 문제 해결을 위해 기능이 제한된 안전 모드로 Frigate를 시작합니다."
+ "description": "활성화하면 문제 해결을 위해 기능을 축소한 안전 모드로 Frigate를 시작합니다."
},
"environment_vars": {
"label": "환경 변수",
- "description": "Home Assistant OS에서 Frigate 프로세스에 설정할 환경 변수의 키/값 쌍입니다. HAOS가 아닌 사용자는 대신 Docker 환경 변수 설정을 사용해야 합니다."
+ "description": "Home Assistant OS에서 Frigate 프로세스에 적용할 환경 변수의 키/값 쌍입니다. 비-HAOS 사용자는 Docker 환경 변수 설정을 사용해야 합니다."
},
"logger": {
"label": "로깅",
- "description": "기본 로그 상세 수준 및 구성 요소별 로그 수준 재정의를 제어합니다.",
+ "description": "기본 로그 상세도 및 구성 요소별 로그 수준 재정의를 제어합니다.",
"default": {
"label": "로그 수준",
- "description": "기본 전역 로그 상세 수준(debug, info, warning, error)입니다."
+ "description": "전역 기본 로그 수준(debug, info, warning, error)입니다."
},
"logs": {
"label": "프로세스별 로그 수준",
- "description": "특정 모듈의 상세 수준을 높이거나 낮추기 위한 구성 요소별 로그 수준 재정의입니다."
+ "description": "특정 모듈의 로그 상세도를 높이거나 낮추기 위한 구성 요소별 로그 수준 재정의입니다."
}
},
"audio": {
- "label": "오디오 이벤트",
+ "label": "오디오 감지",
"enabled": {
- "label": "오디오 감지 활성화"
+ "label": "오디오 감지 활성화",
+ "description": "모든 카메라의 오디오 이벤트 감지를 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
},
"max_not_heard": {
"label": "종료 타임아웃",
@@ -34,19 +35,29 @@
},
"min_volume": {
"label": "최소 볼륨",
- "description": "오디오 감지를 실행하는 데 필요한 최소 RMS 볼륨 임계값으로, 낮을수록 민감도가 높아집니다(예: 200 높음, 500 보통, 1000 낮음)."
+ "description": "오디오 감지를 실행하는 데 필요한 최소 RMS 볼륨 임계값입니다. 낮을수록 민감도가 높아집니다 (예: 200 높음, 500 보통, 1000 낮음)."
},
"listen": {
- "label": "청취 유형",
- "description": "감지할 오디오 이벤트 유형 목록입니다(예: bark, fire_alarm, scream, speech, yell)."
+ "label": "감지 대상 소리",
+ "description": "감지할 오디오 이벤트 유형 목록입니다 (예: bark, fire_alarm, speech, yell)."
},
"filters": {
"label": "오디오 필터",
- "description": "오탐지를 줄이기 위해 사용되는 신뢰도 임계값과 같은 오디오 유형별 필터 설정입니다."
+ "description": "오감지를 줄이기 위한 신뢰도 임계값 등 오디오 유형별 필터 설정입니다.",
+ "threshold": {
+ "label": "최소 오디오 신뢰도",
+ "description": "오디오 이벤트로 카운트되기 위한 최소 신뢰도 임계값입니다."
+ }
},
"enabled_in_config": {
- "label": "원래 오디오 상태"
- }
+ "label": "초기 오디오 상태",
+ "description": "정적 설정 파일에서 오디오 감지가 기본 활성화되어 있었는지 여부를 나타냅니다."
+ },
+ "num_threads": {
+ "label": "감지 스레드 수",
+ "description": "오디오 감지 처리에 사용할 스레드 수입니다."
+ },
+ "description": "모든 카메라에 대한 오디오 기반 이벤트 감지 설정입니다. 카메라별로 재정의할 수 있습니다."
},
"auth": {
"label": "인증",
@@ -56,7 +67,7 @@
"description": "Frigate UI에 대한 기본 인증을 활성화합니다."
},
"reset_admin_password": {
- "label": "관리자 비밀번호 재설정",
+ "label": "관리자 비밀번호 초기화",
"description": "true로 설정하면 시작 시 관리자 비밀번호를 재설정하고 새 비밀번호를 로그에 출력합니다."
},
"cookie_name": {
@@ -64,41 +75,41 @@
"description": "자체 인증용 JWT 토큰을 저장할 쿠키 이름입니다."
},
"cookie_secure": {
- "label": "보안 쿠키 설정",
- "description": "인증 쿠키에 보안 플래그를 설정합니다. TLS를 사용하는 경우 'True'로 설정해야 합니다."
+ "label": "보안 쿠키 플래그",
+ "description": "인증 쿠키에 보안 플래그를 설정합니다. TLS 사용 시 true여야 합니다."
},
"session_length": {
- "label": "세션 길이",
- "description": "JWT 기반 세션의 유지 시간(초)입니다."
+ "label": "세션 유지 시간",
+ "description": "JWT 기반 세션의 지속 시간(초)입니다."
},
"refresh_time": {
"label": "세션 갱신 주기",
- "description": "세션 만료까지 남은 시간이 몇 초 남지 않을 경우, 세션 시간을 다시 최대로 연장합니다."
+ "description": "세션 만료까지 남은 시간이 이 값(초) 이내일 때 세션을 전체 시간으로 다시 갱신합니다."
},
"failed_login_rate_limit": {
"label": "로그인 실패 제한",
- "description": "무차별 대입 공격을 줄이기 위해 로그인 시도 실패 횟수를 제한하는 규칙을 적용합니다."
+ "description": "무차별 대입 공격을 완화하기 위한 로그인 실패 속도 제한 규칙입니다."
},
"trusted_proxies": {
"label": "신뢰할 수 있는 프록시",
- "description": "속도 제한을 위해 클라이언트 IP를 결정할 때 사용되는 신뢰할 수 있는 프록시 IP 목록입니다."
+ "description": "속도 제한을 위해 클라이언트 IP를 결정할 때 참조하는 신뢰할 수 있는 프록시 IP 목록입니다."
},
"hash_iterations": {
"label": "해시 반복 횟수",
- "description": "사용자 암호를 해싱할 때 사용할 PBKDF2-SHA256 반복 횟수입니다."
+ "description": "사용자 비밀번호를 해싱할 때 사용할 PBKDF2-SHA256 반복 횟수입니다."
},
"roles": {
- "label": "역할 할당",
- "description": "역할별로 접근 가능한 카메라 목록을 매핑합니다. 목록이 비어 있으면 해당 역할에 모든 카메라 접근 권한을 부여합니다."
+ "label": "역할 매핑",
+ "description": "역할별로 접근 가능한 카메라 목록을 매핑합니다. 빈 목록은 해당 역할에 모든 카메라 접근을 허용함을 의미합니다."
},
"admin_first_time_login": {
- "label": "관리자 초기 로그인 설정",
- "description": "활성화 시, 관리자 비밀번호 초기화 후 로그인 방법 안내 링크가 로그인 페이지에 표시됩니다. "
+ "label": "관리자 초기 로그인 플래그",
+ "description": "true일 경우 관리자 비밀번호 재설정 후 로그인 페이지에 접속 안내 링크를 표시합니다. "
}
},
"database": {
"label": "데이터베이스",
- "description": "추적된 객체 및 녹화 메타데이터를 저장하는 SQLite 데이터베이스 설정입니다.",
+ "description": "추적 객체 및 녹화 메타데이터를 저장하는 Frigate의 SQLite 데이터베이스 설정입니다.",
"path": {
"label": "데이터베이스 경로",
"description": "Frigate SQLite 데이터베이스 파일이 저장될 파일 시스템 경로입니다."
@@ -106,14 +117,14 @@
},
"go2rtc": {
"label": "go2rtc",
- "description": "라이브 스트림 중계 및 번역에 사용되는 통합 go2rtc 리스트리밍 서비스 설정입니다."
+ "description": "실시간 스트림 중계 및 트랜스코딩에 사용되는 통합 go2rtc 재스트리밍 서비스 설정입니다."
},
"mqtt": {
"label": "MQTT",
- "description": "MQTT 브로커에 원격 측정 데이터, 스냅샷 및 이벤트 세부 정보를 연결하고 게시하기 위한 설정입니다.",
+ "description": "MQTT 브로커에 텔레메트리 데이터, 스냅샷 및 이벤트 세부 정보를 전송하기 위한 연결 설정입니다.",
"enabled": {
"label": "MQTT 활성화",
- "description": "상태, 이벤트 및 스냅샷에 대한 MQTT 통합을 활성화 또는 비활성화합니다."
+ "description": "상태, 이벤트 및 스냅샷에 대한 MQTT 통합을 활성화하거나 비활성화합니다."
},
"host": {
"label": "MQTT 호스트",
@@ -121,35 +132,35 @@
},
"port": {
"label": "MQTT 포트",
- "description": "MQTT 브로커의 포트 번호입니다 (일반적인 포트는 1883입니다)."
+ "description": "MQTT 브로커 포트 번호입니다 (일반 텍스트의 경우 기본값 1883)."
},
"topic_prefix": {
"label": "토픽 접두사",
- "description": "Frigate의 모든 MQTT 메시지에 사용할 접두사입니다. 여러 대의 Frigate를 실행하는 경우 각각 고유한 이름을 사용해야 합니다."
+ "description": "Frigate의 모든 토픽에 사용할 기본 접두사입니다. 다중 인스턴스 실행 시 고유해야 합니다."
},
"client_id": {
"label": "클라이언트 ID",
- "description": "MQTT 브로커 연결 시 사용하는 클라이언트 식별자입니다. 인스턴스마다 고유한 이름을 사용해야 합니다."
+ "description": "MQTT 브로커 연결 시 사용할 클라이언트 식별자입니다. 인스턴스별로 고유해야 합니다."
},
"stats_interval": {
- "label": "통계 간격",
- "description": "시스템 및 카메라 통계 정보를 MQTT로 전송하는 간격(초)입니다."
+ "label": "통계 전송 간격",
+ "description": "시스템 및 카메라 통계를 MQTT로 발행하는 주기(초)입니다."
},
"user": {
"label": "MQTT 사용자 이름",
- "description": "MQTT 사용자 이름(선택 사항)입니다. 환경 변수나 비밀 값(Secrets)을 통해 입력할 수 있습니다."
+ "description": "선택적 MQTT 사용자 이름입니다. 환경 변수나 Secret을 통해 전달할 수 있습니다."
},
"password": {
"label": "MQTT 비밀번호",
- "description": "MQTT 비밀번호(선택 사항)입니다. 환경 변수나 비밀 값(Secrets)을 통해 입력할 수 있습니다."
+ "description": "선택적 MQTT 비밀번호입니다. 환경 변수나 Secret을 통해 전달할 수 있습니다."
},
"tls_ca_certs": {
"label": "TLS CA 인증서",
- "description": "브로커와의 TLS 연결에 사용할 CA 인증서 경로(자체 서명 인증서의 경우)."
+ "description": "브로커와의 TLS 연결에 사용할 CA 인증서 경로(자체 서명 인증서 등)입니다."
},
"tls_client_cert": {
"label": "클라이언트 인증서",
- "description": "TLS 상호 인증을 위한 클라이언트 인증서 경로입니다. 클라이언트 인증서를 사용할 때는 사용자 이름/암호를 설정하지 마십시오."
+ "description": "TLS 상호 인증(mTLS)을 위한 클라이언트 인증서 경로입니다. 사용 시 사용자 이름/비밀번호를 설정하지 마세요."
},
"tls_client_key": {
"label": "클라이언트 키",
@@ -157,43 +168,1447 @@
},
"tls_insecure": {
"label": "TLS 비보안 모드",
- "description": "호스트 이름 확인을 건너뛰어 안전하지 않은 TLS 연결을 허용합니다(권장하지 않음)."
+ "description": "호스트 이름 확인을 건너뛰어 안전하지 않은 TLS 연결을 허용합니다 (권장되지 않음)."
},
"qos": {
"label": "MQTT QoS",
- "description": "MQTT 메시지 전송 및 구독에 대한 서비스 품질(QoS) 등급입니다 (0, 1, 2 중 선택)."
+ "description": "MQTT 발행/구독에 사용할 서비스 품질(QoS) 등급 (0, 1, 2)입니다."
}
},
"notifications": {
"label": "알림",
- "description": "모든 카메라에 대한 알림을 활성화하고 제어하는 설정입니다. 카메라별로 설정을 재정의할 수 있습니다.",
+ "description": "모든 카메라에 대한 알림을 활성화하고 제어하기 위한 설정입니다. 카메라별로 재정의할 수 있습니다.",
"enabled": {
"label": "알림 활성화",
- "description": "모든 카메라에 대한 알림을 활성화 또는 비활성화할 수 있으며, 카메라별로 설정을 재정의할 수 있습니다."
+ "description": "모든 카메라의 알림을 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
},
"email": {
- "label": "알림 이메일",
+ "label": "알림 수신 이메일",
"description": "푸시 알림에 사용되거나 특정 알림 제공업체에서 요구하는 이메일 주소입니다."
},
"cooldown": {
"label": "알림 재발송 대기 시간",
- "description": "수신자에게 스팸 메일을 보내는 것을 방지하기 위해 알림 재발송 대기시간(초)을 설정합니다."
+ "description": "수신자에게 알림이 연속 도배되는 것을 방지하기 위한 대기 시간(초)입니다."
},
"enabled_in_config": {
- "label": "초기 알림 활성 상태",
- "description": "초기 구성에서 알림이 활성화되었는지 여부를 나타냅니다."
+ "label": "초기 알림 상태",
+ "description": "초기 정적 구성에서 알림이 활성화되어 있었는지 여부를 나타냅니다."
}
},
"networking": {
"label": "네트워킹",
- "description": "Frigate 엔드포인트에 대한 IPv6 활성화와 같은 네트워크 관련 설정입니다.",
+ "description": "Frigate 엔드포인트의 IPv6 활성화 등 네트워크 관련 설정입니다.",
"ipv6": {
"label": "IPv6 구성",
- "description": "Frigate 네트워크 서비스에 대한 IPv6 관련 설정입니다.",
+ "description": "Frigate 네트워크 서비스의 IPv6 관련 설정입니다.",
"enabled": {
"label": "IPv6 활성화",
- "description": "Frigate 서비스(API 및 UI)에 IPv6 지원이 필요한 경우 활성화하십시오."
+ "description": "지원 가능한 Frigate 서비스(API 및 UI)에 IPv6 지원을 활성화합니다."
}
+ },
+ "listen": {
+ "label": "리스닝 포트 구성",
+ "description": "내부 및 외부 리스닝 포트 설정입니다. 고급 사용자용 기능이며, 일반적인 환경에서는 Docker Compose의 포트 설정을 변경하는 것을 권장합니다.",
+ "internal": {
+ "label": "내부 포트",
+ "description": "Frigate의 내부 리스닝 포트입니다 (기본값: 5000)."
+ },
+ "external": {
+ "label": "외부 포트",
+ "description": "Frigate의 외부 리스닝 포트입니다 (기본값: 8971)."
+ }
+ }
+ },
+ "audio_transcription": {
+ "label": "오디오 텍스트 변환 (STT)",
+ "description": "이벤트 및 실시간 자막 처리에 사용되는 실시간 음성 전사 설정입니다.",
+ "live_enabled": {
+ "label": "실시간 텍스트 변환",
+ "description": "수신되는 오디오에 대한 실시간 스트리밍 텍스트 변환을 활성화합니다."
+ },
+ "enabled": {
+ "label": "오디오 텍스트 변환 활성화",
+ "description": "모든 카메라의 자동 오디오 텍스트 변환을 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "language": {
+ "label": "변환 언어",
+ "description": "텍스트 변환/번역에 사용할 언어 코드입니다 (예: 한국어는 'ko', 영어는 'en')."
+ },
+ "device": {
+ "label": "변환 디바이스",
+ "description": "텍스트 변환 모델을 실행할 디바이스 키(CPU/GPU)입니다. 현재 NVIDIA CUDA GPU만 지원됩니다."
+ },
+ "model_size": {
+ "label": "모델 크기",
+ "description": "오프라인 오디오 이벤트 텍스트 변환에 사용할 모델 크기입니다."
+ }
+ },
+ "birdseye": {
+ "label": "버드아이 (Birdseye)",
+ "description": "여러 카메라 피드를 단일 레이아웃으로 합성하는 버드아이 뷰 설정입니다.",
+ "enabled": {
+ "label": "버드아이 활성화",
+ "description": "버드아이 뷰 기능을 활성화하거나 비활성화합니다."
+ },
+ "mode": {
+ "label": "추적 모드",
+ "description": "카메라를 버드아이에 포함하는 기준 모드: 'objects', 'motion', 또는 'continuous'."
+ },
+ "order": {
+ "label": "표시 순서",
+ "description": "버드아이 레이아웃 내에서 카메라 배치 순서를 제어하는 숫자입니다."
+ },
+ "restream": {
+ "label": "RTSP 재스트리밍",
+ "description": "버드아이 출력을 RTSP 피드로 재스트리밍합니다. 활성화하면 버드아이가 백그라운드에서 상시 실행됩니다."
+ },
+ "width": {
+ "label": "너비",
+ "description": "합성된 버드아이 프레임의 출력 너비(픽셀)입니다."
+ },
+ "height": {
+ "label": "높이",
+ "description": "합성된 버드아이 프레임의 출력 높이(픽셀)입니다."
+ },
+ "quality": {
+ "label": "인코딩 품질",
+ "description": "버드아이 mpeg1 피드의 인코딩 품질입니다 (1 최고 품질, 31 최저 품질)."
+ },
+ "inactivity_threshold": {
+ "label": "비활성 대기 시간",
+ "description": "카메라에 움직임이나 객체가 감지되지 않을 때 버드아이에서 숨기기까지 대기할 시간(초)입니다."
+ },
+ "layout": {
+ "label": "레이아웃",
+ "description": "버드아이 합성 화면의 레이아웃 옵션입니다.",
+ "scaling_factor": {
+ "label": "크기 조절 비율",
+ "description": "레이아웃 계산 시 사용하는 크기 조정 비율입니다 (범위: 1.0 ~ 5.0)."
+ },
+ "max_cameras": {
+ "label": "최대 카메라 수",
+ "description": "버드아이에 한 번에 표시할 최대 카메라 수입니다. 가장 최근 활동이 발생한 카메라를 우선 표시합니다."
+ }
+ },
+ "idle_heartbeat_fps": {
+ "label": "유휴 하트비트 FPS",
+ "description": "유휴 상태일 때 마지막으로 합성된 버드아이 프레임을 재전송할 초당 프레임 수입니다 (0은 비활성화)."
+ }
+ },
+ "detect": {
+ "label": "객체 감지",
+ "description": "객체 감지를 실행하고 트래커를 초기화하는 데 사용되는 detect 역할 설정입니다.",
+ "enabled": {
+ "label": "객체 감지 활성화",
+ "description": "모든 카메라의 객체 감지를 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "height": {
+ "label": "감지 높이",
+ "description": "감지 스트림에 사용할 프레임 높이(픽셀)입니다. 비워 두면 원본 스트림 해상도를 사용합니다."
+ },
+ "width": {
+ "label": "감지 너비",
+ "description": "감지 스트림에 사용할 프레임 너비(픽셀)입니다. 비워 두면 원본 스트림 해상도를 사용합니다."
+ },
+ "fps": {
+ "label": "감지 FPS",
+ "description": "감지를 실행할 목표 초당 프레임 수입니다. 낮을수록 CPU 사용량이 감소합니다 (권장값은 5이며, 매우 빠른 물체를 추적할 때만 최대 10까지 권장)."
+ },
+ "min_initialized": {
+ "label": "최소 초기화 프레임",
+ "description": "추적 객체를 생성하기 전 연속 감지되어야 하는 프레임 수입니다. 값을 높이면 오탐 초기화를 줄일 수 있습니다 (기본값: fps / 2)."
+ },
+ "max_disappeared": {
+ "label": "최대 사라짐 프레임",
+ "description": "추적 중인 객체가 시야에서 완전히 사라진 것으로 판단하기까지 감지되지 않는 프레임 수입니다."
+ },
+ "stationary": {
+ "label": "정지 객체 설정",
+ "description": "일정 시간 정지해 있는 객체를 감지하고 관리하기 위한 설정입니다.",
+ "interval": {
+ "label": "정지 확인 주기",
+ "description": "정지 객체임을 재확인하기 위해 감지 검사를 실행하는 간격(프레임 단위)입니다."
+ },
+ "threshold": {
+ "label": "정지 임계값",
+ "description": "객체를 정지 상태로 분류하기 위해 위치 이동이 없어야 하는 프레임 수입니다."
+ },
+ "max_frames": {
+ "label": "최대 추적 프레임",
+ "description": "정지 객체를 폐기하기 전까지 추적할 최대 프레임 한도입니다.",
+ "default": {
+ "label": "기본 최대 프레임",
+ "description": "추적을 중단하기 전 정지 객체를 추적할 기본 최대 프레임 수입니다."
+ },
+ "objects": {
+ "label": "객체별 최대 프레임",
+ "description": "정지 객체를 추적할 객체 유형별 최대 프레임 수 재정의 설정입니다."
+ }
+ },
+ "classifier": {
+ "label": "시각적 분류기 활성화",
+ "description": "바운딩 박스가 미세하게 흔들려도 시각적 분류기를 사용해 실제로 정지된 객체인지 확인합니다."
+ }
+ },
+ "annotation_offset": {
+ "label": "어노테이션 오프셋",
+ "description": "녹화 영상과 타임라인 바운딩 박스의 싱크를 맞추기 위해 감지 어노테이션을 전후로 이동할 밀리초(ms) 단위 시간입니다 (양수 또는 음수 가능)."
+ }
+ },
+ "face_recognition": {
+ "label": "얼굴 인식",
+ "enabled": {
+ "label": "얼굴 인식 활성화",
+ "description": "모든 카메라의 얼굴 인식을 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "min_area": {
+ "label": "최소 얼굴 크기",
+ "description": "인식을 시도하기 위해 필요한 감지된 얼굴 박스의 최소 면적(픽셀)입니다."
+ },
+ "description": "모든 카메라에 대한 얼굴 감지 및 인식 설정입니다. 카메라별로 재정의할 수 있습니다.",
+ "model_size": {
+ "label": "모델 크기",
+ "description": "얼굴 임베딩에 사용할 모델 크기(small/large)입니다. 큰 모델은 GPU가 필요할 수 있습니다."
+ },
+ "unknown_score": {
+ "label": "미확인 점수 임계값",
+ "description": "얼굴이 일치 후보로 인정받기 위한 거리 임계값입니다 (값이 클수록 엄격함)."
+ },
+ "detection_threshold": {
+ "label": "감지 임계값",
+ "description": "얼굴 감지가 유효하다고 판단하기 위한 최소 감지 신뢰도입니다."
+ },
+ "recognition_threshold": {
+ "label": "인식 임계값",
+ "description": "두 얼굴이 일치한다고 판단하기 위한 얼굴 임베딩 거리 임계값입니다."
+ },
+ "min_faces": {
+ "label": "최소 얼굴 수",
+ "description": "사람에게 인식된 하위 레이블을 부여하기 전 요구되는 최소 얼굴 인식 횟수입니다."
+ },
+ "save_attempts": {
+ "label": "시도 기록 저장 수",
+ "description": "최근 얼굴 인식 UI에 유지할 얼굴 인식 시도 횟수입니다."
+ },
+ "blur_confidence_filter": {
+ "label": "흐림 신뢰도 필터",
+ "description": "저품질 얼굴의 오탐을 줄이기 위해 이미지 흐림 정도에 따라 신뢰도 점수를 조정합니다."
+ },
+ "device": {
+ "label": "디바이스",
+ "description": "특정 디바이스를 지정하기 위한 재정의 옵션입니다. 자세한 내용은 https://onnxruntime.ai/docs/execution-providers/를 참고하세요"
+ }
+ },
+ "ffmpeg": {
+ "path": {
+ "label": "FFmpeg 경로",
+ "description": "사용할 FFmpeg 바이너리 경로 또는 버전 별칭(\"7.0\" 또는 \"8.0\")입니다."
+ },
+ "global_args": {
+ "label": "FFmpeg 글로벌 인수",
+ "description": "FFmpeg 프로세스 전역에 전달할 공통 인수입니다."
+ },
+ "hwaccel_args": {
+ "label": "하드웨어 가속 인수",
+ "description": "FFmpeg 하드웨어 가속 인수입니다. 하드웨어 환경에 맞는 프리셋 사용을 권장합니다."
+ },
+ "input_args": {
+ "label": "입력 인수",
+ "description": "FFmpeg 입력 스트림에 적용할 인수입니다."
+ },
+ "output_args": {
+ "label": "출력 인수",
+ "description": "detect, record 등 서로 다른 FFmpeg 역할에 사용할 기본 출력 인수입니다.",
+ "detect": {
+ "label": "감지(detect) 출력 인수",
+ "description": "detect 역할 스트림에 적용할 기본 출력 인수입니다."
+ },
+ "record": {
+ "label": "녹화(record) 출력 인수",
+ "description": "record 역할 스트림에 적용할 기본 출력 인수입니다."
+ }
+ },
+ "retry_interval": {
+ "label": "FFmpeg 재연결 대기 시간",
+ "description": "카메라 스트림 연결 실패 시 재연결을 시도하기까지 대기할 시간(초)입니다 (기본값: 10)."
+ },
+ "apple_compatibility": {
+ "label": "Apple 호환성",
+ "description": "H.265 녹화 시 Apple 기기 플레이어와의 호환성을 위해 HEVC 태깅을 활성화합니다."
+ },
+ "gpu": {
+ "label": "GPU 인덱스",
+ "description": "하드웨어 가속에 사용할 기본 GPU 번호(인덱스)입니다."
+ },
+ "inputs": {
+ "label": "카메라 입력 스트림",
+ "description": "이 카메라에 설정된 입력 스트림 정의(경로 및 역할) 목록입니다.",
+ "path": {
+ "label": "입력 경로",
+ "description": "카메라 입력 스트림 URL 또는 디바이스 경로입니다."
+ },
+ "roles": {
+ "label": "입력 역할",
+ "description": "이 입력 스트림에 할당할 역할입니다."
+ },
+ "global_args": {
+ "label": "FFmpeg 글로벌 인수",
+ "description": "이 입력 스트림에만 적용할 FFmpeg 글로벌 인수입니다."
+ },
+ "hwaccel_args": {
+ "label": "하드웨어 가속 인수",
+ "description": "이 입력 스트림에만 적용할 하드웨어 가속 인수입니다."
+ },
+ "input_args": {
+ "label": "입력 인수",
+ "description": "이 스트림에만 개별 적용할 입력 인수입니다."
+ }
+ },
+ "label": "FFmpeg",
+ "description": "바이너리 경로, 인수, 하드웨어 가속 옵션 및 역할별 출력 인수를 포함한 FFmpeg 설정입니다."
+ },
+ "live": {
+ "label": "실시간 재생",
+ "streams": {
+ "label": "실시간 스트림 이름",
+ "description": "실시간 재생에 사용할 restream/go2rtc 이름과 설정된 스트림 이름의 매핑입니다."
+ },
+ "height": {
+ "label": "실시간 재생 높이",
+ "description": "웹 UI에서 jsmpeg 실시간 스트림을 렌더링할 높이(픽셀)입니다 (감지 스트림 높이 이하)."
+ },
+ "quality": {
+ "label": "실시간 품질",
+ "description": "jsmpeg 스트림의 인코딩 품질입니다 (1 최고 품질, 31 최저 품질)."
+ },
+ "description": "jsmpeg 실시간 스트림의 해상도 및 품질을 제어하는 설정입니다. go2rtc를 사용하는 재스트리밍 카메라에는 영향을 미치지 않습니다."
+ },
+ "lpr": {
+ "label": "차량 번호판 인식",
+ "description": "감지 임계값, 포맷, 등록된 번호판 등을 포함한 차량 번호판 인식 설정입니다.",
+ "enabled": {
+ "label": "LPR 활성화",
+ "description": "모든 카메라의 번호판 인식을 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "expire_time": {
+ "label": "만료 시간(초)",
+ "description": "시야에서 사라진 번호판이 트래커에서 만료되기까지의 시간(초)입니다 (전용 LPR 카메라 전용)."
+ },
+ "min_area": {
+ "label": "최소 번호판 크기",
+ "description": "인식을 시도하기 위해 필요한 최소 번호판 면적(픽셀)입니다."
+ },
+ "enhancement": {
+ "label": "이미지 보정 레벨",
+ "description": "OCR 수행 전 번호판 크롭 이미지에 적용할 보정 강도(0~10)입니다 (값이 높다고 항상 인식률이 좋아지지는 않으며, 5 초과는 야간 전용이므로 주의해야 합니다)."
+ },
+ "model_size": {
+ "label": "모델 크기",
+ "description": "텍스트 감지/인식에 사용할 모델 크기입니다. 대부분 'small' 사용을 권장합니다."
+ },
+ "detection_threshold": {
+ "label": "감지 임계값",
+ "description": "번호판 의심 영역에 OCR을 시작하기 위한 감지 신뢰도 임계값입니다."
+ },
+ "recognition_threshold": {
+ "label": "인식 임계값",
+ "description": "인식된 번호판 텍스트를 하위 레이블로 등록하기 위해 요구되는 신뢰도 임계값입니다."
+ },
+ "min_plate_length": {
+ "label": "최소 번호판 길이",
+ "description": "인식된 번호판이 유효하다고 인정되기 위해 포함해야 하는 최소 문자 수입니다."
+ },
+ "format": {
+ "label": "번호판 정규식 포맷",
+ "description": "인식된 번호판 문자열을 예상 형식과 비교 검증하기 위한 선택적 정규표현식입니다."
+ },
+ "match_distance": {
+ "label": "일치 오차 허용치",
+ "description": "감지된 번호판과 등록된 번호판을 비교할 때 허용할 수 있는 불일치 문자 수입니다."
+ },
+ "known_plates": {
+ "label": "등록된 번호판",
+ "description": "특별히 추적하거나 알림을 보낼 번호판 문자열 또는 정규식 목록입니다."
+ },
+ "debug_save_plates": {
+ "label": "디버그 번호판 저장",
+ "description": "LPR 성능 디버깅을 위해 번호판 크롭 이미지를 저장합니다."
+ },
+ "device": {
+ "label": "디바이스",
+ "description": "특정 디바이스를 지정하기 위한 재정의 옵션입니다. 자세한 내용은 https://onnxruntime.ai/docs/execution-providers/를 참고하세요"
+ },
+ "replace_rules": {
+ "label": "치환 규칙",
+ "description": "매칭 전 감지된 번호판 문자열을 정규화하는 데 사용되는 정규식 치환 규칙입니다.",
+ "pattern": {
+ "label": "정규식 패턴"
+ },
+ "replacement": {
+ "label": "치환 문자열"
+ }
+ }
+ },
+ "motion": {
+ "label": "움직임 감지",
+ "enabled": {
+ "label": "움직임 감지 활성화",
+ "description": "모든 카메라의 움직임 감지를 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "threshold": {
+ "label": "움직임 임계값",
+ "description": "움직임 감지기가 사용하는 픽셀 차이 임계값입니다. 값이 클수록 민감도가 낮아집니다 (범위: 1~255)."
+ },
+ "lightning_threshold": {
+ "label": "번개/빛 변화 임계값",
+ "description": "순간적인 조명 변화나 번개를 감지하여 무시하기 위한 임계값입니다 (낮을수록 민감하며 0.3~1.0 사이 값). 움직임 감지 자체를 완전히 끄는 것이 아니라 임계값을 초과할 때 추가 프레임 분석을 일시 중단하는 것이며, 이 동안에도 움직임 기반 녹화는 정상 생성됩니다."
+ },
+ "skip_motion_threshold": {
+ "label": "움직임 건너뛰기 임계값",
+ "description": "0.0~1.0 사이로 설정 시 단일 프레임에서 이 비율 이상의 화면이 바뀌면 움직임 박스를 생성하지 않고 즉시 재보정합니다. 폭풍이나 번개 시 CPU를 절약하고 오탐을 줄일 수 있지만, PTZ 카메라 자동 추적과 같은 실제 이벤트를 놓칠 수 있습니다. 사용하지 않으려면 설정하지 마세요(None)."
+ },
+ "improve_contrast": {
+ "label": "대비 향상",
+ "description": "움직임 분석 전 프레임 대비를 향상하여 감지 성능을 보조합니다."
+ },
+ "contour_area": {
+ "label": "윤곽선 면적",
+ "description": "움직임 윤곽선으로 인정되기 위한 최소 픽셀 면적입니다."
+ },
+ "delta_alpha": {
+ "label": "델타 알파",
+ "description": "움직임 계산 시 프레임 차분화에 사용할 알파 블렌딩 계수입니다."
+ },
+ "frame_alpha": {
+ "label": "프레임 알파",
+ "description": "움직임 전처리용 프레임 블렌딩에 사용할 알파 값입니다."
+ },
+ "frame_height": {
+ "label": "프레임 높이",
+ "description": "움직임 연산 시 프레임을 리사이즈할 높이(픽셀)입니다."
+ },
+ "mask": {
+ "label": "마스크 좌표",
+ "description": "움직임 감지 영역을 포함하거나 제외하기 위해 다각형을 정의하는 정렬된 x,y 좌표입니다."
+ },
+ "mqtt_off_delay": {
+ "label": "MQTT 꺼짐 지연",
+ "description": "마지막 움직임이 감지된 후 MQTT에 'off' 상태를 발행하기까지 대기할 시간(초)입니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 움직임 상태",
+ "description": "초기 정적 설정 파일에서 움직임 감지가 활성화되어 있었는지 여부를 나타냅니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ },
+ "description": "카메라별로 재정의하지 않는 한 모든 카메라에 공통 적용되는 기본 움직임 감지 설정입니다."
+ },
+ "objects": {
+ "label": "객체",
+ "description": "추적할 레이블 목록과 객체별 필터를 포함한 기본 객체 추적 설정입니다.",
+ "track": {
+ "label": "추적 대상 객체",
+ "description": "모든 카메라에서 추적할 객체 레이블 목록입니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "filters": {
+ "label": "객체 필터",
+ "description": "오탐지를 줄이기 위해 감지된 객체에 적용할 필터 설정(면적, 비율, 신뢰도)입니다.",
+ "min_area": {
+ "label": "최소 객체 면적",
+ "description": "이 객체 유형에 필요한 최소 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "max_area": {
+ "label": "최대 객체 면적",
+ "description": "이 객체 유형에 허용되는 최대 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "min_ratio": {
+ "label": "최소 가로세로 비율",
+ "description": "바운딩 박스에 요구되는 최소 너비/높이 비율입니다."
+ },
+ "max_ratio": {
+ "label": "최대 가로세로 비율",
+ "description": "바운딩 박스에 허용되는 최대 너비/높이 비율입니다."
+ },
+ "threshold": {
+ "label": "신뢰도 임계값",
+ "description": "객체를 실제 탐지로 인정하기 위해 요구되는 평균 감지 신뢰도 임계값입니다."
+ },
+ "min_score": {
+ "label": "최소 신뢰도",
+ "description": "객체로 카운트되기 위해 필요한 단일 프레임 최소 감지 신뢰도입니다."
+ },
+ "mask": {
+ "label": "필터 마스크",
+ "description": "프레임 내에서 이 필터가 적용될 다각형 좌표입니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ }
+ },
+ "mask": {
+ "label": "객체 마스크",
+ "description": "지정된 영역에서 객체 감지를 방지하기 위한 마스크 다각형입니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ },
+ "genai": {
+ "label": "생성형 AI (GenAI) 객체 설정",
+ "description": "추적된 객체를 설명하고 분석용 프레임을 전송하기 위한 GenAI 옵션입니다.",
+ "enabled": {
+ "label": "GenAI 활성화",
+ "description": "기본적으로 추적된 객체에 대한 GenAI 설명 생성을 활성화합니다."
+ },
+ "use_snapshot": {
+ "label": "스냅샷 사용",
+ "description": "GenAI 설명 생성 시 썸네일 대신 객체 스냅샷을 사용합니다."
+ },
+ "prompt": {
+ "label": "캡션 프롬프트",
+ "description": "GenAI로 설명을 생성할 때 사용할 기본 프롬프트 템플릿입니다."
+ },
+ "object_prompts": {
+ "label": "객체별 프롬프트",
+ "description": "특정 레이블에 대한 GenAI 결과를 맞춤화하기 위한 객체별 개별 프롬프트입니다."
+ },
+ "objects": {
+ "label": "GenAI 대상 객체",
+ "description": "기본적으로 GenAI로 전송할 객체 레이블 목록입니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "GenAI 설명 생성 대상이 되기 위해 객체가 반드시 진입해야 하는 구역입니다."
+ },
+ "debug_save_thumbnails": {
+ "label": "썸네일 저장",
+ "description": "디버깅 및 검토를 위해 GenAI로 전송된 썸네일을 저장합니다."
+ },
+ "send_triggers": {
+ "label": "GenAI 전송 트리거",
+ "description": "프레임을 GenAI로 전송할 시점(추적 종료 시, 주요 업데이트 후 등)을 정의합니다.",
+ "tracked_object_end": {
+ "label": "종료 시 전송",
+ "description": "추적 객체의 동작이 종료되었을 때 GenAI에 요청을 보냅니다."
+ },
+ "after_significant_updates": {
+ "label": "조기 GenAI 트리거",
+ "description": "추적 객체에 지정된 횟수만큼 주요 변화가 발생한 후 조기에 GenAI 요청을 보냅니다."
+ }
+ },
+ "enabled_in_config": {
+ "label": "초기 GenAI 상태",
+ "description": "초기 정적 설정에서 GenAI가 활성화되었는지 여부를 나타냅니다."
+ }
+ },
+ "filters_attribute": {
+ "label": "속성 필터",
+ "description": "오탐지를 줄이기 위해 감지된 속성에 적용할 필터 설정(면적, 비율, 신뢰도)입니다.",
+ "min_area": {
+ "label": "최소 속성 면적",
+ "description": "이 속성에 필요한 최소 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "max_area": {
+ "label": "최대 속성 면적",
+ "description": "이 속성에 허용되는 최대 바운딩 박스 면적입니다. 픽셀 수(정수) 또는 비율(0.000001~0.99 사이의 실수)로 지정할 수 있습니다."
+ },
+ "min_ratio": {
+ "label": "최소 가로세로 비율",
+ "description": "바운딩 박스에 요구되는 최소 너비/높이 비율입니다."
+ },
+ "max_ratio": {
+ "label": "최대 가로세로 비율",
+ "description": "바운딩 박스에 허용되는 최대 너비/높이 비율입니다."
+ },
+ "threshold": {
+ "label": "신뢰도 임계값",
+ "description": "속성을 실제 탐지로 인정하기 위해 요구되는 평균 감지 신뢰도 임계값입니다."
+ },
+ "min_score": {
+ "label": "최소 신뢰도",
+ "description": "이 속성을 상위 객체와 연결하기 위해 필요한 단일 프레임 최소 감지 신뢰도입니다."
+ },
+ "mask": {
+ "label": "필터 마스크",
+ "description": "프레임 내에서 이 필터가 적용될 다각형 좌표입니다."
+ },
+ "raw_mask": {
+ "label": "원시 마스크"
+ }
+ }
+ },
+ "record": {
+ "label": "녹화",
+ "enabled": {
+ "label": "녹화 활성화",
+ "description": "모든 카메라의 녹화를 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "expire_interval": {
+ "label": "녹화 파일 정리 주기",
+ "description": "만료된 녹화 세그먼트를 삭제하는 정리 작업 간격(분)입니다."
+ },
+ "continuous": {
+ "label": "상시 녹화 보관",
+ "description": "객체 추적이나 움직임 여부와 상관없이 녹화본을 보관할 일수입니다. 알림이나 감지 이벤트만 보관하려면 0으로 설정하세요.",
+ "days": {
+ "label": "보관 일수",
+ "description": "녹화본 보관 일수입니다."
+ }
+ },
+ "motion": {
+ "label": "움직임 녹화 보관",
+ "description": "추적 객체가 없더라도 움직임에 의해 트리거된 녹화본을 보관할 일수입니다. 알림이나 감지 이벤트만 보관하려면 0으로 설정하세요.",
+ "days": {
+ "label": "보관 일수",
+ "description": "녹화본 보관 일수입니다."
+ }
+ },
+ "detections": {
+ "label": "감지 녹화 보관",
+ "description": "이벤트 전/후 버퍼 캡처 시간을 포함한 감지 이벤트의 녹화 보관 설정입니다.",
+ "pre_capture": {
+ "label": "사전 캡처 시간",
+ "description": "감지 이벤트 시작 전 녹화에 포함할 시간(초)입니다."
+ },
+ "post_capture": {
+ "label": "사후 캡처 시간",
+ "description": "감지 이벤트 종료 후 녹화에 포함할 시간(초)입니다."
+ },
+ "retain": {
+ "label": "이벤트 보관",
+ "description": "감지 이벤트 녹화본의 보관 설정입니다.",
+ "days": {
+ "label": "보관 일수",
+ "description": "감지 이벤트 녹화본을 보관할 일수입니다."
+ },
+ "mode": {
+ "label": "보관 모드",
+ "description": "보관 모드: all(모든 구간 저장), motion(움직임이 있는 구간 저장), active_objects(활동 중인 객체가 있는 구간 저장)."
+ }
+ }
+ },
+ "alerts": {
+ "label": "알림 녹화 보관",
+ "description": "이벤트 전/후 버퍼 캡처 시간을 포함한 알림 이벤트의 녹화 보관 설정입니다.",
+ "pre_capture": {
+ "label": "사전 캡처 시간",
+ "description": "알림 이벤트 시작 전 녹화에 포함할 시간(초)입니다."
+ },
+ "post_capture": {
+ "label": "사후 캡처 시간",
+ "description": "알림 이벤트 종료 후 녹화에 포함할 시간(초)입니다."
+ },
+ "retain": {
+ "label": "이벤트 보관",
+ "description": "알림 이벤트 녹화본의 보관 설정입니다.",
+ "days": {
+ "label": "보관 일수",
+ "description": "알림 이벤트 녹화본을 보관할 일수입니다."
+ },
+ "mode": {
+ "label": "보관 모드",
+ "description": "보관 모드: all(모든 구간 저장), motion(움직임이 있는 구간 저장), active_objects(활동 중인 객체가 있는 구간 저장)."
+ }
+ }
+ },
+ "export": {
+ "label": "내보내기 설정",
+ "description": "타임랩스 및 하드웨어 가속 등 녹화본 내보내기 시 적용할 설정입니다.",
+ "hwaccel_args": {
+ "label": "내보내기 하드웨어 가속 인수",
+ "description": "내보내기 및 트랜스코딩 작업에 사용할 하드웨어 가속 인수입니다."
+ },
+ "max_concurrent": {
+ "label": "최대 동시 내보내기 수",
+ "description": "동시에 처리할 수 있는 최대 내보내기 작업 수입니다."
+ },
+ "chapters": {
+ "label": "내보낸 녹화 영상에 삽입할 챕터 메타데이터"
+ }
+ },
+ "preview": {
+ "label": "미리보기 설정",
+ "description": "UI에 표시되는 녹화 미리보기의 화질을 제어하는 설정입니다.",
+ "quality": {
+ "label": "미리보기 화질",
+ "description": "미리보기 화질 레벨 (very_low, low, medium, high, very_high)."
+ }
+ },
+ "enabled_in_config": {
+ "label": "초기 녹화 상태",
+ "description": "초기 정적 구성에서 녹화가 활성화되어 있었는지 여부를 나타냅니다."
+ },
+ "description": "카메라별로 재정의하지 않는 한 모든 카메라에 적용되는 녹화 및 보관 설정입니다."
+ },
+ "review": {
+ "label": "다시보기",
+ "alerts": {
+ "label": "알림 설정",
+ "description": "어떤 추적 객체가 알림을 생성하고 알림을 어떻게 보관할지 결정하는 설정입니다.",
+ "enabled": {
+ "label": "알림 활성화",
+ "description": "모든 카메라의 알림 생성을 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "labels": {
+ "label": "알림 대상 레이블",
+ "description": "알림을 트리거할 객체 레이블 목록입니다 (예: car, person)."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "알림으로 분류되기 위해 객체가 진입해야 하는 구역입니다. 모든 구역을 허용하려면 비워 두세요."
+ },
+ "enabled_in_config": {
+ "label": "초기 알림 상태",
+ "description": "정적 설정에서 알림이 원래 활성화되어 있었는지 여부를 추적합니다."
+ },
+ "cutoff_time": {
+ "label": "알림 종료 대기 시간",
+ "description": "알림 유발 활동이 멈춘 후 알림을 공식 종료하기까지 대기할 시간(초)입니다."
+ }
+ },
+ "detections": {
+ "label": "감지 이벤트 설정",
+ "description": "어떤 추적 객체가 일반 감지(알림 제외) 이벤트를 생성하고 어떻게 보관할지 결정하는 설정입니다.",
+ "enabled": {
+ "label": "감지 이벤트 활성화",
+ "description": "모든 카메라의 감지 이벤트를 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "labels": {
+ "label": "감지 대상 레이블",
+ "description": "일반 감지 이벤트로 인정할 객체 레이블 목록입니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "감지 이벤트로 처리되기 위해 객체가 진입해야 하는 구역입니다. 모든 구역을 허용하려면 비워 두세요."
+ },
+ "cutoff_time": {
+ "label": "감지 종료 대기 시간",
+ "description": "감지 유발 활동이 멈춘 후 이벤트를 공식 종료하기까지 대기할 시간(초)입니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 감지 상태",
+ "description": "정적 설정에서 감지 이벤트가 원래 활성화되어 있었는지 여부를 추적합니다."
+ }
+ },
+ "genai": {
+ "label": "GenAI 다시보기 설정",
+ "description": "다시보기 항목의 설명과 요약을 생성하기 위한 생성형 AI 사용을 제어합니다.",
+ "enabled": {
+ "label": "GenAI 설명 활성화",
+ "description": "다시보기 항목에 대한 GenAI 기반 설명 및 요약 생성을 활성화하거나 비활성화합니다."
+ },
+ "alerts": {
+ "label": "알림에 GenAI 활성화",
+ "description": "알림 항목에 대해 GenAI로 설명을 생성합니다."
+ },
+ "detections": {
+ "label": "감지에 GenAI 활성화",
+ "description": "감지 항목에 대해 GenAI로 설명을 생성합니다."
+ },
+ "image_source": {
+ "label": "다시보기 이미지 소스",
+ "description": "GenAI로 전송할 이미지 소스 ('preview' 또는 'recordings'). 'recordings'는 화질이 더 높지만 토큰 사용량이 증가합니다."
+ },
+ "additional_concerns": {
+ "label": "추가 주의 사항",
+ "description": "이 카메라의 활동을 평가할 때 GenAI가 고려해야 할 추가 주의 사항이나 참고 사항 목록입니다."
+ },
+ "debug_save_thumbnails": {
+ "label": "썸네일 저장",
+ "description": "디버깅 및 검토를 위해 GenAI 제공업체로 전송된 썸네일을 저장합니다."
+ },
+ "enabled_in_config": {
+ "label": "초기 GenAI 상태",
+ "description": "정적 설정에서 GenAI 다시보기가 원래 활성화되어 있었는지 여부를 추적합니다."
+ },
+ "preferred_language": {
+ "label": "선호 언어",
+ "description": "GenAI가 생성할 응답에 요청할 선호 언어입니다."
+ },
+ "activity_context_prompt": {
+ "label": "활동 맥락 프롬프트",
+ "description": "GenAI 요약에 맥락을 제공하기 위해 어떤 활동이 의심스럽거나 정상적인지 설명하는 커스텀 프롬프트입니다."
+ }
+ },
+ "description": "UI 및 저장소에서 사용하는 알림, 감지 및 GenAI 요약을 제어하는 설정입니다."
+ },
+ "semantic_search": {
+ "label": "시맨틱(의미 기반) 검색",
+ "triggers": {
+ "label": "트리거",
+ "description": "카메라별 시맨틱 검색 트리거를 위한 동작 및 매칭 기준입니다.",
+ "friendly_name": {
+ "label": "트리거 별칭",
+ "description": "UI에 표시될 이 트리거의 친숙한 이름(선택 사항)입니다."
+ },
+ "enabled": {
+ "label": "트리거 활성화",
+ "description": "이 시맨틱 검색 트리거를 활성화하거나 비활성화합니다."
+ },
+ "type": {
+ "label": "트리거 유형",
+ "description": "트리거 유형: 'thumbnail'(이미지 비교) 또는 'description'(텍스트 비교)."
+ },
+ "data": {
+ "label": "트리거 내용",
+ "description": "추적 객체와 매칭할 텍스트 문구 또는 썸네일 ID입니다."
+ },
+ "threshold": {
+ "label": "트리거 임계값",
+ "description": "이 트리거를 작동시키기 위해 요구되는 최소 유사도 점수(0~1)입니다."
+ },
+ "actions": {
+ "label": "트리거 동작",
+ "description": "트리거가 매칭되었을 때 실행할 동작 목록입니다 (notification, sub_label, attribute)."
+ }
+ },
+ "description": "유사한 항목을 찾기 위해 객체 임베딩을 구축하고 쿼리하는 시맨틱 검색 설정입니다.",
+ "enabled": {
+ "label": "시맨틱 검색 활성화",
+ "description": "시맨틱 검색 기능을 활성화하거나 비활성화합니다."
+ },
+ "reindex": {
+ "label": "시작 시 재색인",
+ "description": "시작 시 과거 추적 객체 전체를 임베딩 데이터베이스로 다시 색인하도록 트리거합니다."
+ },
+ "model": {
+ "label": "시맨틱 검색 모델 또는 GenAI 제공업체 이름",
+ "description": "시맨틱 검색에 사용할 임베딩 모델(예: 'jinav1') 또는 embeddings 역할을 가진 GenAI 제공업체 이름입니다."
+ },
+ "model_size": {
+ "label": "모델 크기",
+ "description": "모델 크기 선택입니다 ('small'은 CPU에서 실행 가능하며, 'large'는 일반적으로 GPU가 필요함)."
+ },
+ "device": {
+ "label": "디바이스",
+ "description": "특정 디바이스를 지정하기 위한 재정의 옵션입니다. 자세한 내용은 https://onnxruntime.ai/docs/execution-providers/를 참고하세요"
+ }
+ },
+ "snapshots": {
+ "label": "스냅샷",
+ "enabled": {
+ "label": "스냅샷 활성화",
+ "description": "모든 카메라의 스냅샷 저장을 활성화하거나 비활성화합니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "timestamp": {
+ "label": "타임스탬프 오버레이",
+ "description": "API 스냅샷에 타임스탬프를 덧씌워 표시합니다."
+ },
+ "bounding_box": {
+ "label": "바운딩 박스 오버레이",
+ "description": "API 스냅샷에 추적 객체의 바운딩 박스를 그립니다."
+ },
+ "crop": {
+ "label": "스냅샷 크롭",
+ "description": "API 스냅샷을 감지된 객체의 바운딩 박스 크기로 잘라냅니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "스냅샷을 저장하기 위해 객체가 반드시 진입해야 하는 구역입니다."
+ },
+ "height": {
+ "label": "스냅샷 높이",
+ "description": "API 스냅샷을 리사이즈할 높이(픽셀)입니다. 비워 두면 원본 크기를 유지합니다."
+ },
+ "retain": {
+ "label": "스냅샷 보관",
+ "description": "기본 보관 일수 및 객체별 재정의를 포함한 스냅샷 보관 설정입니다.",
+ "default": {
+ "label": "기본 보관 일수",
+ "description": "스냅샷을 보관할 기본 일수입니다."
+ },
+ "objects": {
+ "label": "객체별 보관 일수",
+ "description": "스냅샷 보관 일수를 객체 유형별로 개별 재정의합니다."
+ }
+ },
+ "quality": {
+ "label": "스냅샷 화질",
+ "description": "저장할 스냅샷의 인코딩 품질입니다 (0~100)."
+ },
+ "description": "모든 카메라에서 API로 생성되는 추적 객체 스냅샷 설정입니다. 카메라별로 재정의할 수 있습니다."
+ },
+ "timestamp_style": {
+ "label": "타임스탬프 스타일",
+ "position": {
+ "label": "타임스탬프 위치",
+ "description": "이미지 내 타임스탬프 위치 (tl: 좌상단, tr: 우상단, bl: 좌하단, br: 우하단)."
+ },
+ "format": {
+ "label": "타임스탬프 형식",
+ "description": "타임스탬프 표시에 사용할 날짜/시간 형식 문자열입니다 (Python datetime 포맷 코드)."
+ },
+ "color": {
+ "label": "타임스탬프 색상",
+ "description": "타임스탬프 텍스트의 RGB 색상값입니다 (모든 값은 0~255).",
+ "red": {
+ "label": "빨강 (Red)",
+ "description": "타임스탬프 색상의 빨간색 성분 (0-255)."
+ },
+ "green": {
+ "label": "초록 (Green)",
+ "description": "타임스탬프 색상의 초록색 성분 (0-255)."
+ },
+ "blue": {
+ "label": "파랑 (Blue)",
+ "description": "타임스탬프 색상의 파란색 성분 (0-255)."
+ }
+ },
+ "thickness": {
+ "label": "타임스탬프 두께",
+ "description": "타임스탬프 글자의 선 두께입니다."
+ },
+ "effect": {
+ "label": "타임스탬프 효과",
+ "description": "타임스탬프 텍스트에 적용할 시각 효과입니다 (none, solid, shadow)."
+ },
+ "description": "디버그 뷰 및 스냅샷 피드에 적용되는 타임스탬프 텍스트 스타일 옵션입니다."
+ },
+ "onvif": {
+ "label": "ONVIF",
+ "description": "이 카메라의 ONVIF 연결 및 PTZ 자동 추적 설정입니다.",
+ "host": {
+ "label": "ONVIF 호스트",
+ "description": "이 카메라의 ONVIF 서비스 호스트 주소(및 선택적 프로토콜 스키마)입니다."
+ },
+ "port": {
+ "label": "ONVIF 포트",
+ "description": "ONVIF 서비스 포트 번호입니다."
+ },
+ "user": {
+ "label": "ONVIF 사용자 이름",
+ "description": "ONVIF 인증에 사용할 사용자 이름입니다 (일부 기기는 관리자 계정이 필요함)."
+ },
+ "password": {
+ "label": "ONVIF 비밀번호",
+ "description": "ONVIF 인증 비밀번호입니다."
+ },
+ "tls_insecure": {
+ "label": "TLS 검증 비활성화",
+ "description": "ONVIF 통신 시 TLS 인증서 검증을 건너뛰고 Digest 인증을 끕니다 (안전하지 않으므로 신뢰할 수 있는 네트워크에서만 사용하세요)."
+ },
+ "profile": {
+ "label": "ONVIF 프로필",
+ "description": "PTZ 제어에 사용할 특정 ONVIF 미디어 프로필의 토큰 또는 이름입니다. 지정하지 않으면 유효한 PTZ 구성이 있는 첫 번째 프로필이 자동 선택됩니다."
+ },
+ "autotracking": {
+ "label": "자동 추적 (Autotracking)",
+ "description": "PTZ 카메라를 움직여 움직이는 객체를 프레임 중앙에 자동으로 추적하고 유지합니다.",
+ "enabled": {
+ "label": "자동 추적 활성화",
+ "description": "감지된 객체에 대한 PTZ 카메라의 자동 추적을 활성화하거나 비활성화합니다."
+ },
+ "calibrate_on_startup": {
+ "label": "시작 시 모터 캘리브레이션",
+ "description": "추적 정확도를 향상하기 위해 부팅 시 PTZ 모터 속도를 측정합니다. 보정 완료 후 Frigate가 movement_weights 값을 자동으로 업데이트합니다."
+ },
+ "zooming": {
+ "label": "줌 모드",
+ "description": "줌 동작 제어: disabled(팬/틸트만 사용), absolute(가장 안정적인 호환성), relative(팬/틸트/줌 동시 작동)."
+ },
+ "zoom_factor": {
+ "label": "줌 배율",
+ "description": "추적 중인 객체의 확대 수준을 제어합니다. 값이 낮으면 주변 시야를 넓게 유지하고, 높으면 대상을 가깝게 확대하지만 추적을 놓칠 위험이 있습니다 (0.1~0.75 사이 값)."
+ },
+ "track": {
+ "label": "추적 대상 객체",
+ "description": "자동 추적을 작동시킬 객체 유형 목록입니다."
+ },
+ "required_zones": {
+ "label": "필수 구역",
+ "description": "자동 추적이 시작되기 위해 객체가 먼저 진입해야 하는 구역입니다."
+ },
+ "return_preset": {
+ "label": "복귀 프리셋",
+ "description": "추적이 끝난 후 카메라가 돌아갈 펌웨어상의 ONVIF 프리셋 이름입니다."
+ },
+ "timeout": {
+ "label": "복귀 대기 시간",
+ "description": "객체를 놓친 후 카메라가 프리셋 위치로 복귀하기까지 대기할 시간(초)입니다."
+ },
+ "movement_weights": {
+ "label": "이동 가중치",
+ "description": "카메라 캘리브레이션을 통해 자동 생성된 보정값입니다. 수동으로 수정하지 마세요."
+ },
+ "enabled_in_config": {
+ "label": "초기 자동 추적 상태",
+ "description": "설정에서 자동 추적이 활성화되어 있었는지 여부를 추적하는 내부 필드입니다."
+ }
+ },
+ "ignore_time_mismatch": {
+ "label": "시간 불일치 무시",
+ "description": "ONVIF 통신 시 카메라와 Frigate 서버 간의 시간 동기화 차이를 무시합니다."
+ }
+ },
+ "profiles": {
+ "label": "프로필",
+ "description": "친숙한 이름을 가진 프로필 정의입니다. 카메라 프로필은 여기에 정의된 이름을 참조해야 합니다.",
+ "friendly_name": {
+ "label": "별칭",
+ "description": "UI에 표시될 이 프로필의 표시 이름입니다."
+ }
+ },
+ "proxy": {
+ "label": "프록시",
+ "description": "인증된 사용자 헤더를 전달하는 역방향 프록시(Reverse Proxy) 뒤에 Frigate를 연동하기 위한 설정입니다.",
+ "header_map": {
+ "label": "헤더 매핑",
+ "description": "프록시 기반 인증을 위해 수신된 프록시 헤더를 Frigate의 사용자 및 역할 필드에 매핑합니다.",
+ "user": {
+ "label": "사용자 헤더",
+ "description": "업스트림 프록시가 제공하는 인증된 사용자 이름이 포함된 헤더입니다."
+ },
+ "role": {
+ "label": "역할 헤더",
+ "description": "업스트림 프록시가 제공하는 인증된 사용자의 역할 또는 그룹 정보가 포함된 헤더입니다."
+ },
+ "role_map": {
+ "label": "역할 매핑",
+ "description": "업스트림 그룹 값을 Frigate 역할에 매핑합니다 (예: 관리자 그룹을 admin 역할에 매핑)."
+ }
+ },
+ "logout_url": {
+ "label": "로그아웃 URL",
+ "description": "프록시를 통해 로그아웃할 때 사용자를 리다이렉트할 URL입니다."
+ },
+ "auth_secret": {
+ "label": "프록시 시크릿",
+ "description": "신뢰할 수 있는 프록시인지 검증하기 위해 X-Proxy-Secret 헤더와 비교할 선택적 Secret 값입니다."
+ },
+ "default_role": {
+ "label": "기본 역할",
+ "description": "일치하는 역할 매핑이 없을 때 프록시 인증 사용자에게 할당할 기본 역할입니다."
+ },
+ "separator": {
+ "label": "구분자 문자",
+ "description": "프록시 헤더에 제공된 다중 값을 분리하는 데 사용되는 구분 기호입니다."
+ }
+ },
+ "telemetry": {
+ "label": "원격 측정 (Telemetry)",
+ "description": "GPU 및 네트워크 대역폭 모니터링을 포함한 시스템 텔레메트리 및 통계 옵션입니다.",
+ "network_interfaces": {
+ "label": "네트워크 인터페이스",
+ "description": "대역폭 통계를 모니터링할 네트워크 인터페이스 이름 접두사 목록입니다."
+ },
+ "stats": {
+ "label": "시스템 통계",
+ "description": "다양한 시스템 및 GPU 통계 수집을 활성화하거나 비활성화하는 옵션입니다.",
+ "amd_gpu_stats": {
+ "label": "AMD GPU 통계",
+ "description": "AMD GPU가 장착된 경우 통계 수집을 활성화합니다."
+ },
+ "intel_gpu_stats": {
+ "label": "Intel GPU 통계",
+ "description": "Intel GPU가 장착된 경우 통계 수집을 활성화합니다."
+ },
+ "network_bandwidth": {
+ "label": "네트워크 대역폭",
+ "description": "카메라 FFmpeg 프로세스 및 감지기에 대한 프로세스별 네트워크 대역폭 모니터링을 활성화합니다 (권한 필요)."
+ },
+ "intel_gpu_device": {
+ "label": "Intel GPU 디바이스",
+ "description": "여러 대의 GPU가 있을 때 통계를 특정 장치에 고정하기 위한 PCI 버스 주소 또는 DRM 디바이스 경로(예: /dev/dri/card1)입니다."
+ }
+ },
+ "version_check": {
+ "label": "버전 확인",
+ "description": "최신 Frigate 버전이 출시되었는지 확인하는 아웃바운드 검사를 활성화합니다."
+ }
+ },
+ "tls": {
+ "label": "TLS",
+ "description": "Frigate 웹 엔드포인트(포트 8971)에 대한 TLS 보안 설정입니다.",
+ "enabled": {
+ "label": "TLS 활성화",
+ "description": "설정된 TLS 포트에서 Frigate 웹 UI 및 API에 대한 TLS 연결을 활성화합니다."
+ }
+ },
+ "ui": {
+ "label": "UI",
+ "description": "시간대, 시간/날짜 형식, 단위 등 사용자 인터페이스 기본 설정입니다.",
+ "timezone": {
+ "label": "시간대",
+ "description": "UI 전반에 표시할 시간대입니다 (설정하지 않으면 브라우저 로컬 시간 사용)."
+ },
+ "time_format": {
+ "label": "시간 표기 형식",
+ "description": "UI에서 사용할 시간 표기 형식입니다 (browser, 12hour, 또는 24hour)."
+ },
+ "unit_system": {
+ "label": "단위 체계",
+ "description": "UI 및 MQTT에 표시할 단위 체계입니다 (metric: 미터법, imperial: 야드파운드법)."
+ }
+ },
+ "detectors": {
+ "label": "감지기 하드웨어",
+ "description": "객체 감지기(CPU, GPU, ONNX 백엔드) 및 감지기별 모델 설정입니다.",
+ "type": {
+ "label": "유형"
+ },
+ "model": {
+ "label": "감지기 전용 모델 설정",
+ "description": "감지기별 모델 설정 옵션(경로, 입력 크기 등)입니다.",
+ "path": {
+ "label": "커스텀 감지 모델 경로",
+ "description": "사용자 지정 감지 모델 파일의 경로(또는 Frigate+ 모델용 plus://mode: {{effectiveRetainMode}}로 되어 있어, 이 수동 녹화는 {{effectiveRetainModeName}}이(가) 있는 구간만 저장됩니다."
},
"editLayout": {
"label": "레이아웃 편집",
"group": {
- "label": "카메라 그룹 편집"
+ "label": "카메라 그룹 수정"
},
"exitEdit": "편집 종료"
},
"noCameras": {
"title": "설정된 카메라 없음",
- "description": "카메라를 연결해 시작하세요.",
+ "description": "Frigate에 카메라를 연결하여 시작하세요.",
"buttonText": "카메라 추가",
"restricted": {
- "title": "연결된 카메라 없음",
- "description": "이 그룹의 카메라를 볼 권한이 없습니다."
+ "title": "사용 가능한 카메라 없음",
+ "description": "이 그룹의 카메라를 볼 수 있는 권한이 없습니다."
},
"default": {
"title": "설정된 카메라 없음",
- "description": "카메라를 연결하여 Frigate을 시작하세요.",
+ "description": "Frigate에 카메라를 연결하여 시작하세요.",
"buttonText": "카메라 추가"
},
"group": {
- "title": "그룹에 카메라 없음",
- "description": "이 그룹에 할당되거나 활성화된 카메라가 없습니다.",
+ "title": "그룹 내 카메라 없음",
+ "description": "이 카메라 그룹에 할당되거나 활성화된 카메라가 없습니다.",
"buttonText": "그룹 관리"
}
},
"snapshot": {
- "takeSnapshot": "인스턴트 스냅샷 다운로드",
- "noVideoSource": "스냅샷 찍을 비디오 소스가 없습니다.",
- "captureFailed": "스냅샷 캡쳐를 하지 못했습니다.",
- "downloadStarted": "스냅샷 다운로드가 시작됐습니다."
+ "takeSnapshot": "즉시 스냅샷 다운로드",
+ "noVideoSource": "스냅샷을 캡처할 비디오 소스가 없습니다.",
+ "captureFailed": "스냅샷 캡처에 실패했습니다.",
+ "downloadStarted": "스냅샷 다운로드가 시작되었습니다."
}
}
diff --git a/web/public/locales/ko/views/motionSearch.json b/web/public/locales/ko/views/motionSearch.json
index 0967ef424b..600525203a 100644
--- a/web/public/locales/ko/views/motionSearch.json
+++ b/web/public/locales/ko/views/motionSearch.json
@@ -1 +1,76 @@
-{}
+{
+ "documentTitle": "움직임 검색 - Frigate",
+ "title": "움직임 검색",
+ "description": "다각형을 그려 관심 영역(ROI)을 지정하고, 해당 영역 내에서 움직임 변화를 검색할 시간 범위를 지정하세요.",
+ "selectCamera": "움직임 검색을 불러오는 중입니다",
+ "startSearch": "검색 시작",
+ "searchStarted": "검색이 시작되었습니다",
+ "searchCancelled": "검색이 취소되었습니다",
+ "cancelSearch": "취소",
+ "searching": "검색 진행 중입니다.",
+ "scanning": "{{time}} 스캔 중",
+ "searchComplete": "검색 완료",
+ "noResultsYet": "선택한 영역의 움직임 변화를 찾으려면 검색을 실행하세요",
+ "noChangesFound": "선택한 영역에서 감지된 픽셀 변화가 없습니다",
+ "changesFound_other": "움직임 변화 {{count}}건 발견",
+ "framesProcessed": "{{count}}개 프레임 처리됨",
+ "jumpToTime": "이 시간대로 이동",
+ "results": "결과",
+ "showSegmentHeatmap": "히트맵",
+ "newSearch": "새 검색",
+ "clearResults": "결과 지우기",
+ "clearROI": "다각형 지우기",
+ "polygonControls": {
+ "points_other": "점 {{count}}개",
+ "undo": "마지막 점 취소",
+ "reset": "다각형 초기화",
+ "drawMode": "그리기",
+ "moveMode": "이동"
+ },
+ "motionHeatmapLabel": "움직임 히트맵",
+ "dialog": {
+ "title": "움직임 검색",
+ "cameraLabel": "카메라",
+ "previewAlt": "{{camera}} 카메라 미리보기"
+ },
+ "timeRange": {
+ "title": "검색 범위",
+ "start": "시작 시간",
+ "end": "종료 시간"
+ },
+ "settings": {
+ "title": "검색 설정",
+ "parallelMode": "병렬 모드",
+ "parallelModeDesc": "여러 녹화 구간을 동시에 스캔합니다 (더 빠르지만 디코딩 자원을 더 많이 소모함)",
+ "threshold": "민감도 임계값",
+ "thresholdDesc": "값이 낮을수록 더 미세한 변화를 감지합니다 (1-255)",
+ "minArea": "최소 변화 면적",
+ "minAreaDesc": "단일 움직임 영역의 최소 크기(관심 영역 대비 백분율)",
+ "maxResults": "최대 결과 수",
+ "maxResultsDesc": "일치하는 타임스탬프가 이 개수에 도달하면 검색을 중단합니다"
+ },
+ "errors": {
+ "noCamera": "카메라를 선택해 주세요",
+ "noROI": "관심 영역(ROI)을 그려 주세요",
+ "noTimeRange": "시간 범위를 선택해 주세요",
+ "invalidTimeRange": "종료 시간은 시작 시간 이후여야 합니다",
+ "searchFailed": "검색 실패: {{message}}",
+ "polygonTooSmall": "다각형은 최소 3개 이상의 점이 필요합니다",
+ "unknown": "알 수 없는 오류"
+ },
+ "changePercentage": "{{percentage}}% 변화됨",
+ "metrics": {
+ "title": "검색 지표",
+ "segmentsScanned": "스캔한 세그먼트",
+ "segmentsProcessed": "처리됨",
+ "segmentsSkippedInactive": "건너뜀 (활동 없음)",
+ "segmentsSkippedHeatmap": "건너뜀 (ROI 겹침 없음)",
+ "fallbackFullRange": "전체 범위 폴백 스캔",
+ "framesDecoded": "디코딩된 프레임",
+ "wallTime": "검색 소요 시간",
+ "segmentErrors": "세그먼트 오류",
+ "seconds": "{{seconds}}초",
+ "minutesSeconds": "{{minutes}}분 {{seconds}}초",
+ "scanSummary": "{{segments}}개 세그먼트 · {{time}}"
+ }
+}
diff --git a/web/public/locales/ko/views/recording.json b/web/public/locales/ko/views/recording.json
index 2aa9934de5..01b0f74d7a 100644
--- a/web/public/locales/ko/views/recording.json
+++ b/web/public/locales/ko/views/recording.json
@@ -1,12 +1,12 @@
{
"filter": "필터",
"export": "내보내기",
- "calendar": "날짜",
+ "calendar": "달력",
"filters": "필터",
"toast": {
"error": {
- "noValidTimeSelected": "올바른 시간 범위를 선택하세요",
- "endTimeMustAfterStartTime": "종료 시간은 시작 시간보다 뒤에 있어야합니다"
+ "noValidTimeSelected": "유효한 시간 범위가 선택되지 않았습니다",
+ "endTimeMustAfterStartTime": "종료 시간은 시작 시간 이후여야 합니다"
}
}
}
diff --git a/web/public/locales/ko/views/replay.json b/web/public/locales/ko/views/replay.json
index 0967ef424b..e19bb60b2e 100644
--- a/web/public/locales/ko/views/replay.json
+++ b/web/public/locales/ko/views/replay.json
@@ -1 +1,60 @@
-{}
+{
+ "title": "디버그 리플레이",
+ "description": "디버깅을 위해 카메라 녹화본을 다시 재생합니다. 객체 목록에는 감지된 객체의 시간 지연 요약이 표시되며, 메시지 탭에는 리플레이 영상에 대한 Frigate 내부 메시지 스트림이 표시됩니다.",
+ "websocket_messages": "메시지",
+ "dialog": {
+ "title": "디버그 리플레이 시작",
+ "description": "객체 감지 및 추적 문제 디버깅을 위해 지난 녹화본을 반복 재생하는 임시 리플레이 카메라를 생성합니다. 리플레이 카메라는 원본 카메라와 동일한 감지 설정을 가집니다. 시작할 시간 범위를 선택하세요.",
+ "camera": "원본 카메라",
+ "timeRange": "시간 범위",
+ "preset": {
+ "1m": "최근 1분",
+ "5m": "최근 5분",
+ "timeline": "타임라인에서 선택",
+ "custom": "사용자 정의"
+ },
+ "startButton": "리플레이 시작",
+ "selectFromTimeline": "선택",
+ "starting": "리플레이 시작 중...",
+ "startLabel": "시작",
+ "endLabel": "종료",
+ "toast": {
+ "error": "디버그 리플레이 시작 실패: {{error}}",
+ "alreadyActive": "이미 활성화된 리플레이 세션이 있습니다",
+ "noRecordings": "선택한 시간 범위에서 녹화본을 찾을 수 없습니다",
+ "stopError": "디버그 리플레이 중지 실패: {{error}}",
+ "goToReplay": "리플레이로 이동"
+ }
+ },
+ "page": {
+ "noSession": "활성화된 디버그 리플레이 세션 없음",
+ "noSessionDesc": "기록(History) 보기 툴바에서 작업(Actions) 버튼을 클릭하고 '디버그 리플레이'를 선택하여 시작하세요.",
+ "goToRecordings": "기록으로 이동",
+ "preparingClip": "클립 준비 중…",
+ "preparingClipDesc": "Frigate이 선택한 시간 범위의 녹화본을 이어 붙이는 중입니다. 긴 시간 범위의 경우 약 1분 정도 소요될 수 있습니다.",
+ "startingCamera": "디버그 리플레이 시작 중…",
+ "startError": {
+ "title": "디버그 리플레이 시작 실패",
+ "back": "기록으로 돌아가기"
+ },
+ "sourceCamera": "원본 카메라",
+ "replayCamera": "리플레이 카메라",
+ "initializingReplay": "디버그 리플레이 초기화 중...",
+ "stoppingReplay": "디버그 리플레이 중지 중...",
+ "stopReplay": "리플레이 중지",
+ "confirmStop": {
+ "title": "디버그 리플레이를 중지하시겠습니까?",
+ "description": "세션이 중지되고 모든 임시 데이터가 정리됩니다. 계속하시겠습니까?",
+ "confirm": "리플레이 중지",
+ "cancel": "취소"
+ },
+ "activity": "활동",
+ "objects": "객체 목록",
+ "audioDetections": "오디오 감지",
+ "noActivity": "감지된 활동 없음",
+ "activeTracking": "활성 추적 중",
+ "noActiveTracking": "활성 추적 없음",
+ "configuration": "설정",
+ "configurationDesc": "디버그 리플레이 카메라의 움직임 감지 및 객체 추적 설정을 미세 조정합니다. Frigate 설정 파일에는 변경 사항이 저장되지 않습니다."
+ }
+}
diff --git a/web/public/locales/ko/views/search.json b/web/public/locales/ko/views/search.json
index efb5c93870..71b3a750b4 100644
--- a/web/public/locales/ko/views/search.json
+++ b/web/public/locales/ko/views/search.json
@@ -1,14 +1,14 @@
{
"search": "검색",
- "savedSearches": "저장된 검색들",
+ "savedSearches": "저장된 검색 조건",
"button": {
- "clear": "검색 초기화",
- "save": "검색 저장",
+ "clear": "검색어 지우기",
+ "save": "검색 조건 저장",
"filterInformation": "필터 정보",
- "delete": "저장된 검색 삭제",
- "filterActive": "필터 활성화됨"
+ "delete": "저장된 검색 조건 삭제",
+ "filterActive": "필터 적용됨"
},
- "searchFor": "{{inputValue}} 검색",
+ "searchFor": "'{{inputValue}}' 검색",
"trackedObjectId": "추적 객체 ID",
"filter": {
"label": {
@@ -22,7 +22,52 @@
"before": "이전",
"after": "이후",
"min_score": "최소 점수",
- "max_score": "최대 점수"
+ "max_score": "최대 점수",
+ "min_speed": "최소 속도",
+ "max_speed": "최대 속도",
+ "recognized_license_plate": "인식된 차량 번호판",
+ "has_clip": "비디오 클립 있음",
+ "has_snapshot": "스냅샷 있음"
+ },
+ "searchType": {
+ "thumbnail": "썸네일",
+ "description": "설명"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "'이전(before)' 날짜는 '이후(after)' 날짜보다 뒤여야 합니다.",
+ "afterDatebeEarlierBefore": "'이후(after)' 날짜는 '이전(before)' 날짜보다 앞서야 합니다.",
+ "minScoreMustBeLessOrEqualMaxScore": "'최소 점수'는 '최대 점수'보다 작거나 같아야 합니다.",
+ "maxScoreMustBeGreaterOrEqualMinScore": "'최대 점수'는 '최소 점수'보다 크거나 같아야 합니다.",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "'최소 속도'는 '최대 속도'보다 작거나 같아야 합니다.",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "'최대 속도'는 '최소 속도'보다 크거나 같아야 합니다."
+ }
+ },
+ "tips": {
+ "title": "텍스트 필터 사용 방법",
+ "desc": {
+ "text": "필터를 사용하면 검색 결과를 좁힐 수 있습니다. 입력창에서 다음과 같이 사용하세요:",
+ "step1": "필터 키 이름 뒤에 콜론을 입력합니다 (예: \"cameras:\").",
+ "step2": "추천 목록에서 값을 선택하거나 직접 입력합니다.",
+ "step3": "필터 사이에 공백을 두어 여러 개의 필터를 연속으로 사용할 수 있습니다.",
+ "step4": "날짜 필터(before:, after:)는 {{DateFormat}} 형식을 사용합니다.",
+ "step5": "시간 범위 필터는 {{exampleTime}} 형식을 사용합니다.",
+ "step6": "필터 옆의 'x'를 클릭하여 필터를 제거합니다.",
+ "exampleLabel": "예시:"
+ }
+ },
+ "header": {
+ "currentFilterType": "필터 값",
+ "noFilters": "필터",
+ "activeFilters": "적용된 필터"
}
+ },
+ "similaritySearch": {
+ "title": "유사도 검색",
+ "active": "유사도 검색 활성 상태",
+ "clear": "유사도 검색 초기화"
+ },
+ "placeholder": {
+ "search": "검색…"
}
}
diff --git a/web/public/locales/ko/views/settings.json b/web/public/locales/ko/views/settings.json
index 220cceb8f2..05e2aa98c8 100644
--- a/web/public/locales/ko/views/settings.json
+++ b/web/public/locales/ko/views/settings.json
@@ -3,118 +3,330 @@
"dialog": {
"form": {
"threshold": {
- "title": "임계치"
+ "title": "임계값",
+ "desc": "이 트리거의 유사도 임계값을 설정합니다. 임계값이 높을수록 더 정확하게 일치해야 트리거가 작동합니다.",
+ "error": {
+ "min": "임계값은 최소 0 이상이어야 합니다",
+ "max": "임계값은 최대 1 이하여야 합니다"
+ }
},
"name": {
- "title": "이름"
+ "title": "이름",
+ "placeholder": "트리거 이름 지정",
+ "description": "이 트리거를 식별할 고유한 이름 또는 설명을 입력하세요",
+ "error": {
+ "minLength": "최소 2자 이상이어야 합니다.",
+ "invalidCharacters": "영문자, 숫자, 밑줄(_), 하이픈(-)만 포함할 수 있습니다.",
+ "alreadyExists": "이 카메라에 동일한 이름의 트리거가 이미 존재합니다."
+ }
},
"type": {
- "title": "종류",
- "placeholder": "트리거 종류 선택"
+ "title": "유형",
+ "placeholder": "트리거 유형 선택",
+ "description": "추적 객체의 설명이 유사할 때 트리거",
+ "thumbnail": "추적 객체의 썸네일이 유사할 때 트리거"
+ },
+ "enabled": {
+ "description": "이 트리거 활성화 또는 비활성화"
+ },
+ "content": {
+ "title": "내용",
+ "imagePlaceholder": "썸네일 선택",
+ "textPlaceholder": "텍스트 내용 입력",
+ "imageDesc": "최근 100개의 썸네일만 표시됩니다. 원하는 썸네일이 없는 경우 탐색 페이지에서 이전 객체를 찾아 해당 메뉴에서 트리거를 설정하세요.",
+ "textDesc": "유사한 추적 객체 설명이 감지될 때 동작을 실행할 텍스트를 입력하세요.",
+ "error": {
+ "required": "내용은 필수 입력 항목입니다."
+ }
+ },
+ "actions": {
+ "title": "동작",
+ "desc": "기본적으로 Frigate은 모든 트리거에 대해 MQTT 메시지를 발행합니다. 하위 레이블은 객체 레이블에 트리거 이름을 추가합니다. 속성은 추적 객체 메타데이터에 별도로 저장되는 검색 가능한 메타데이터입니다.",
+ "error": {
+ "min": "최소 하나 이상의 동작을 선택해야 합니다."
+ }
}
},
"createTrigger": {
- "title": "트리거 생성"
+ "title": "트리거 생성",
+ "desc": "{{camera}} 카메라를 위한 트리거 생성"
+ },
+ "editTrigger": {
+ "title": "트리거 수정",
+ "desc": "{{camera}} 카메라의 트리거 설정 수정"
+ },
+ "deleteTrigger": {
+ "title": "트리거 삭제",
+ "desc": "정말로 {{triggerName}} 트리거를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다."
}
},
"actions": {
- "notification": "알림 전송"
+ "notification": "알림 전송",
+ "sub_label": "하위 레이블 추가",
+ "attribute": "속성 추가"
+ },
+ "documentTitle": "트리거",
+ "semanticSearch": {
+ "title": "시맨틱 검색이 비활성화됨",
+ "desc": "트리거 기능을 사용하려면 시맨틱 검색이 활성화되어 있어야 합니다."
+ },
+ "management": {
+ "title": "트리거",
+ "desc": "{{camera}} 카메라의 트리거를 관리합니다. 선택한 추적 객체와 유사한 썸네일일 때 작동시키려면 '썸네일' 유형을, 입력한 텍스트와 유사한 설명일 때 작동시키려면 '설명' 유형을 사용하세요."
+ },
+ "addTrigger": "트리거 추가",
+ "table": {
+ "name": "이름",
+ "type": "유형",
+ "content": "내용",
+ "threshold": "임계값",
+ "actions": "동작",
+ "noTriggers": "이 카메라에 설정된 트리거가 없습니다.",
+ "edit": "수정",
+ "deleteTrigger": "트리거 삭제",
+ "lastTriggered": "마지막 트리거 시점"
+ },
+ "type": {
+ "thumbnail": "썸네일",
+ "description": "설명"
+ },
+ "wizard": {
+ "title": "트리거 생성",
+ "step1": {
+ "description": "트리거의 기본 설정을 구성합니다."
+ },
+ "step2": {
+ "description": "이 동작을 작동시킬 콘텐츠를 설정합니다."
+ },
+ "step3": {
+ "description": "이 트리거의 임계값 및 동작을 구성합니다."
+ },
+ "steps": {
+ "nameAndType": "이름 및 유형",
+ "configureData": "데이터 구성",
+ "thresholdAndActions": "임계값 및 동작"
+ }
+ },
+ "toast": {
+ "success": {
+ "createTrigger": "{{name}} 트리거가 성공적으로 생성되었습니다.",
+ "updateTrigger": "{{name}} 트리거가 성공적으로 업데이트되었습니다.",
+ "deleteTrigger": "{{name}} 트리거가 성공적으로 삭제되었습니다."
+ },
+ "error": {
+ "createTriggerFailed": "트리거 생성 실패: {{errorMessage}}",
+ "updateTriggerFailed": "트리거 업데이트 실패: {{errorMessage}}",
+ "deleteTriggerFailed": "트리거 삭제 실패: {{errorMessage}}"
+ }
}
},
"documentTitle": {
"default": "설정 - Frigate",
"authentication": "인증 설정 - Frigate",
"camera": "카메라 설정 - Frigate",
- "enrichments": "데이터 보강 설정 - Frigate",
- "masksAndZones": "마스크와 구역 편집기 - Frigate",
- "motionTuner": "움직임 감지 조정 - Frigate",
+ "enrichments": "확장 기능 설정 - Frigate",
+ "masksAndZones": "마스크 및 구역 편집기 - Frigate",
+ "motionTuner": "움직임 튜너 - Frigate",
"object": "디버그 - Frigate",
"general": "UI 설정 - Frigate",
"frigatePlus": "Frigate+ 설정 - Frigate",
"notifications": "알림 설정 - Frigate",
"cameraManagement": "카메라 관리 - Frigate",
"cameraReview": "카메라 다시보기 설정 - Frigate",
- "globalConfig": "전체 설정 - Frigate",
+ "globalConfig": "전역 설정 - Frigate",
"cameraConfig": "카메라 설정 - Frigate",
"maintenance": "유지 관리 - Frigate",
- "profiles": "프로필 - Frigate"
+ "profiles": "프로필 - Frigate",
+ "detectorsAndModel": "감지기 및 모델 - Frigate"
},
"users": {
"table": {
- "actions": "액션"
+ "actions": "작업",
+ "username": "사용자 이름",
+ "role": "역할",
+ "noUsers": "사용자를 찾을 수 없습니다.",
+ "changeRole": "사용자 역할 변경",
+ "password": "비밀번호 재설정",
+ "deleteUser": "사용자 삭제"
+ },
+ "title": "사용자",
+ "management": {
+ "title": "사용자 관리",
+ "desc": "이 Frigate 인스턴스의 사용자 계정을 관리합니다."
+ },
+ "addUser": "사용자 추가",
+ "updatePassword": "비밀번호 재설정",
+ "toast": {
+ "success": {
+ "createUser": "{{user}} 사용자가 성공적으로 생성되었습니다",
+ "deleteUser": "{{user}} 사용자가 성공적으로 삭제되었습니다",
+ "updatePassword": "비밀번호가 성공적으로 업데이트되었습니다.",
+ "roleUpdated": "{{user}}의 역할이 업데이트되었습니다"
+ },
+ "error": {
+ "setPasswordFailed": "비밀번호 저장 실패: {{errorMessage}}",
+ "createUserFailed": "사용자 생성 실패: {{errorMessage}}",
+ "deleteUserFailed": "사용자 삭제 실패: {{errorMessage}}",
+ "roleUpdateFailed": "역할 업데이트 실패: {{errorMessage}}"
+ }
+ },
+ "dialog": {
+ "form": {
+ "user": {
+ "title": "사용자 이름",
+ "desc": "영문자, 숫자, 마침표(.), 밑줄(_)만 허용됩니다.",
+ "placeholder": "사용자 이름 입력"
+ },
+ "password": {
+ "title": "비밀번호",
+ "placeholder": "비밀번호 입력",
+ "show": "비밀번호 보기",
+ "hide": "비밀번호 숨기기",
+ "confirm": {
+ "title": "비밀번호 확인",
+ "placeholder": "비밀번호 확인"
+ },
+ "strength": {
+ "title": "비밀번호 보안 수준: ",
+ "weak": "취약",
+ "medium": "보통",
+ "strong": "안전",
+ "veryStrong": "매우 안전"
+ },
+ "requirements": {
+ "title": "비밀번호 요구 조건:",
+ "length": "최소 12자 이상"
+ },
+ "match": "비밀번호가 일치합니다",
+ "notMatch": "비밀번호가 일치하지 않습니다"
+ },
+ "newPassword": {
+ "title": "새 비밀번호",
+ "placeholder": "새 비밀번호 입력",
+ "confirm": {
+ "placeholder": "새 비밀번호 재입력"
+ }
+ },
+ "currentPassword": {
+ "title": "현재 비밀번호",
+ "placeholder": "현재 비밀번호 입력"
+ },
+ "usernameIsRequired": "사용자 이름은 필수입니다",
+ "passwordIsRequired": "비밀번호는 필수입니다"
+ },
+ "createUser": {
+ "title": "새 사용자 생성",
+ "desc": "새 사용자 계정을 추가하고 Frigate UI 접근 권한을 위한 역할을 지정합니다.",
+ "usernameOnlyInclude": "사용자 이름은 영문자, 숫자, 마침표(.), 밑줄(_)만 포함할 수 있습니다",
+ "confirmPassword": "비밀번호를 확인해 주세요"
+ },
+ "deleteUser": {
+ "title": "사용자 삭제",
+ "desc": "이 작업은 되돌릴 수 없습니다. 사용자 계정과 관련된 모든 데이터가 영구적으로 삭제됩니다.",
+ "warn": "정말로 {{username}} 사용자를 삭제하시겠습니까?"
+ },
+ "passwordSetting": {
+ "cannotBeEmpty": "비밀번호는 비워 둘 수 없습니다",
+ "doNotMatch": "비밀번호가 일치하지 않습니다",
+ "currentPasswordRequired": "현재 비밀번호가 필요합니다",
+ "incorrectCurrentPassword": "현재 비밀번호가 올바르지 않습니다",
+ "passwordVerificationFailed": "비밀번호 검증에 실패했습니다",
+ "updatePassword": "{{username}}의 비밀번호 변경",
+ "setPassword": "비밀번호 설정",
+ "desc": "계정을 보호하기 위해 강력한 비밀번호를 생성하세요.",
+ "multiDeviceWarning": "로그인된 다른 모든 기기에서는 {{refresh_time}} 이내에 다시 로그인해야 합니다.",
+ "multiDeviceAdmin": "JWT Secret을 교체하여 모든 사용자가 즉시 다시 인증하도록 강제할 수도 있습니다."
+ },
+ "changeRole": {
+ "title": "사용자 역할 변경",
+ "select": "역할 선택",
+ "desc": "{{username}}의 권한 업데이트",
+ "roleInfo": {
+ "intro": "이 사용자에게 적절한 역할을 선택하세요:",
+ "admin": "관리자 (Admin)",
+ "adminDesc": "모든 기능에 대한 전체 접근 권한을 갖습니다.",
+ "viewer": "조회자 (Viewer)",
+ "viewerDesc": "실시간 대시보드, 다시보기, 탐색 및 내보내기로만 접근이 제한됩니다.",
+ "customDesc": "지정된 카메라에만 접근할 수 있는 사용자 지정 역할입니다."
+ }
+ }
}
},
"menu": {
"ui": "UI",
- "enrichments": "데이터 보강",
+ "enrichments": "확장 기능",
"cameras": "카메라 설정",
"masksAndZones": "마스크 / 구역",
- "motionTuner": "움직임 감지 조정",
+ "motionTuner": "움직임 튜너",
"triggers": "트리거",
"debug": "디버그",
"users": "사용자",
"roles": "역할",
"notifications": "알림",
"frigateplus": "Frigate+",
- "cameraManagement": "관리",
+ "cameraManagement": "카메라 관리",
"cameraReview": "다시보기",
"general": "일반",
- "globalConfig": "전체 설정",
+ "globalConfig": "전역 설정",
"system": "시스템",
- "integrations": "연동",
+ "integrations": "연동 기능",
"profileSettings": "프로필 설정",
"globalDetect": "객체 감지",
"globalRecording": "녹화",
"globalSnapshots": "스냅샷",
"globalFfmpeg": "FFmpeg",
- "globalMotion": "동적 감지",
+ "globalMotion": "움직임 감지",
"globalObjects": "객체",
- "globalReview": "리뷰",
- "globalAudioEvents": "오디오 이벤트",
+ "globalReview": "다시보기",
+ "globalAudioEvents": "오디오 감지",
"globalLivePlayback": "실시간 재생",
"globalTimestampStyle": "타임스탬프 스타일",
"systemDatabase": "데이터베이스",
"systemTls": "TLS",
"systemAuthentication": "인증",
- "systemNetworking": "네트워크",
+ "systemNetworking": "네트워킹",
"systemProxy": "프록시",
"systemUi": "UI",
- "systemLogging": "로그",
+ "systemLogging": "로깅",
"systemEnvironmentVariables": "환경 변수",
- "systemTelemetry": "시스템 통계",
- "systemBirdseye": "전체 상황 보기",
+ "systemTelemetry": "원격 측정",
+ "systemBirdseye": "버드아이",
"systemFfmpeg": "FFmpeg",
"systemDetectorHardware": "감지기 하드웨어",
"systemDetectionModel": "감지 모델",
"systemMqtt": "MQTT",
- "integrationSemanticSearch": "의미론적 검색",
+ "integrationSemanticSearch": "시맨틱 검색",
"integrationGenerativeAi": "생성형 AI",
"integrationFaceRecognition": "얼굴 인식",
- "integrationLpr": "번호판 인식",
+ "integrationLpr": "차량 번호판 인식",
"integrationObjectClassification": "객체 분류",
- "integrationAudioTranscription": "오디오 전사",
+ "integrationAudioTranscription": "오디오 텍스트 변환",
"cameraDetect": "객체 감지",
- "cameraFfmpeg": "FFmpeg",
+ "cameraFfmpeg": "스트림 (FFmpeg)",
"cameraRecording": "녹화",
"cameraSnapshots": "스냅샷",
- "cameraMotion": "동적 감지",
+ "cameraMotion": "움직임 감지",
"cameraObjects": "객체",
- "cameraConfigReview": "리뷰",
- "cameraAudioEvents": "오디오 이벤트",
- "cameraAudioTranscription": "오디오 전사",
+ "cameraConfigReview": "다시보기",
+ "cameraAudioEvents": "오디오 감지",
+ "cameraAudioTranscription": "오디오 텍스트 변환",
"cameraNotifications": "알림",
"cameraLivePlayback": "실시간 재생",
- "cameraBirdseye": "전체 상황",
+ "cameraBirdseye": "버드아이",
"cameraFaceRecognition": "얼굴 인식",
- "cameraLpr": "번호판 인식",
+ "cameraLpr": "차량 번호판 인식",
"cameraMqttConfig": "MQTT",
"cameraOnvif": "ONVIF",
"cameraUi": "카메라 UI",
"cameraTimestampStyle": "타임스탬프 스타일",
"cameraMqtt": "카메라 MQTT",
"mediaSync": "미디어 동기화",
- "regionGrid": "영역 격자",
- "profiles": "프로필"
+ "regionGrid": "영역 그리드",
+ "profiles": "프로필",
+ "uiSettings": "UI 설정",
+ "systemDetectorsAndModel": "감지기 및 모델",
+ "systemGo2rtcStreams": "go2rtc 스트림",
+ "maintenance": "유지 관리"
},
"dialog": {
"unsavedChanges": {
@@ -127,104 +339,1623 @@
"noCamera": "카메라 없음"
},
"general": {
- "title": "프로필 설정",
+ "title": "UI 설정",
"liveDashboard": {
"title": "실시간 대시보드",
"automaticLiveView": {
- "label": "실시간 화면 자동 전환",
- "desc": "활동이 감지되면 해당 카메라의 실시간 화면으로 자동 전환합니다. 이 옵션을 비활성화하면 실시간 대시보드의 정지된 카메라 이미지가 1분마다 한 번씩만 업데이트됩니다."
+ "label": "자동 실시간 보기",
+ "desc": "활동이 감지되면 해당 카메라의 실시간 보기로 자동 전환합니다. 이 옵션을 끄면 실시간 대시보드의 정적 카메라 이미지가 1분에 한 번만 업데이트됩니다."
},
"playAlertVideos": {
- "label": "알림 영상 재생",
- "desc": "기본적으로 실시간 대시보드의 최근 알림은 작은 반복 재생 영상으로 표시됩니다. 이 옵션을 비활성화하면 현재 기기나 브라우저에서 최근 알림을 정지된 이미지로만 보여줍니다."
+ "label": "알림 동영상 자동 재생",
+ "desc": "기본적으로 실시간 대시보드의 최근 알림은 작은 반복 동영상으로 재생됩니다. 이 기기/브라우저에서 최근 알림을 정적 이미지로만 보려면 이 옵션을 비활성화하세요."
},
"displayCameraNames": {
"label": "카메라 이름 항상 표시",
- "desc": "다중 카메라 실시간 대시보드에서 카메라 이름을 항상 칩 형태로 표시합니다."
+ "desc": "다중 카메라 실시간 뷰 대시보드에서 카메라 이름을 칩 형태로 항상 표시합니다."
},
"liveFallbackTimeout": {
- "label": "실시간 재생 대기 시간",
- "desc": "카메라의 고화질 실시간 스트리밍을 사용할 수 없을 때, 지정된 시간이 지나면 저대역폭 모드로 전환합니다. 기본값: 3초."
+ "label": "실시간 플레이어 폴백 제한 시간",
+ "desc": "카메라의 고화질 실시간 스트림을 사용할 수 없을 때, 저대역폭 모드로 전환하기까지 대기할 시간(초)입니다. 기본값: 3."
}
},
"storedLayouts": {
"title": "저장된 레이아웃",
- "desc": "카메라 그룹의 화면 배치는 드래그하거나 크기를 조정할 수 있습니다. 변경된 위치는 브라우저의 로컬 저장소에 저장됩니다.",
- "clearAll": "레이아웃 지우기"
+ "desc": "카메라 그룹 내 카메라 배치를 드래그하거나 크기를 조정할 수 있습니다. 배치 위치는 브라우저의 로컬 저장소에 저장됩니다.",
+ "clearAll": "모든 레이아웃 초기화"
},
"cameraGroupStreaming": {
"title": "카메라 그룹 스트리밍 설정",
- "desc": "각각의 카메라 그룹의 스트리밍 설정은 브라우저의 로컬 저장소에 저장됩니다.",
- "clearAll": "스트리밍 설정 모두 지우기"
+ "desc": "각 카메라 그룹의 스트리밍 설정은 브라우저의 로컬 저장소에 저장됩니다.",
+ "clearAll": "모든 스트리밍 설정 초기화"
},
"recordingsViewer": {
- "title": "녹화 영상 보기",
+ "title": "녹화 영상 뷰어",
"defaultPlaybackRate": {
- "label": "기본으로 설정된 다시보기 배속",
- "desc": "다시보기 영상 재생할 때 기본 배속을 설정합니다."
+ "label": "기본 재생 배속",
+ "desc": "녹화 영상 재생 시 적용할 기본 재생 속도입니다."
}
},
"calendar": {
- "title": "캘린더",
+ "title": "달력",
"firstWeekday": {
- "label": "주 첫째날",
- "desc": "다시보기 캘린더에서 주가 시작되는 첫째날을 설정합니다.",
+ "label": "한 주의 시작 요일",
+ "desc": "다시보기 달력에서 한 주를 시작할 요일을 지정합니다.",
"sunday": "일요일",
"monday": "월요일"
}
},
"toast": {
"success": {
- "clearStoredLayout": "{{cameraName}}의 레이아웃을 지웠습니다",
- "clearStreamingSettings": "모든 카메라 그룹 스트리밍 설정을 지웠습니다."
+ "clearStoredLayout": "{{cameraName}}의 저장된 레이아웃을 초기화했습니다",
+ "clearStreamingSettings": "모든 카메라 그룹의 스트리밍 설정을 초기화했습니다."
},
"error": {
- "clearStoredLayoutFailed": "레이아웃 지우기에 실패했습니다:{{errorMessage}}",
- "clearStreamingSettingsFailed": "카메라 스트리밍 설정 지우기에 실패했습니다:{{errorMessage}}"
+ "clearStoredLayoutFailed": "저장된 레이아웃 초기화 실패: {{errorMessage}}",
+ "clearStreamingSettingsFailed": "스트리밍 설정 초기화 실패: {{errorMessage}}"
}
}
},
"enrichments": {
- "title": "데이터 보강 설정",
- "unsavedChanges": "변경된 데이터 보강 설정을 저장하지 않았습니다",
+ "title": "확장 기능 설정",
+ "unsavedChanges": "저장되지 않은 확장 기능 설정 변경 사항",
"birdClassification": {
"title": "조류 분류",
- "desc": "조류 분류 기능은 양자화된 TensorFlow 모델을 사용하여 알려진 새를 식별합니다. 알려진 새가 인식되면 해당 새의 일반적인 이름이 하위 분류로 추가됩니다. 이 정보는 사용자 인터페이스, 필터 및 알림에 포함됩니다."
+ "desc": "조류 분류는 양자화된 TensorFlow 모델을 사용하여 알려진 조류를 식별합니다. 식별된 조류는 하위 레이블(sub_label)로 일반 이름이 추가되며, 이 정보는 UI, 필터 및 알림에 포함됩니다."
},
"semanticSearch": {
"reindexNow": {
- "label": "색인 재구성 시작",
- "desc": "색인을 재구성하면 모든 추적된 객체의 임베딩을 다시 생성합니다. 이 작업은 백그라운드에서 실행되며, 추적된 객체의 수에 따라 CPU 점유율이 최대치에 도달하거나 상당한 시간이 소요될 수 있습니다.",
- "confirmTitle": "색인 재구성 확인",
- "confirmDesc": "정말로 모든 추적된 객체의 임베딩 색인을 재구성하시겠습니까? 이 작업은 백그라운드에서 실행되지만, CPU 점유율이 최대치에 도달하거나 상당한 시간이 소요될 수 있습니다. 진행 상황은 '탐색' 페이지에서 확인하실 수 있습니다.",
- "confirmButton": "색인 재구성",
- "success": "색인 재구성이 정상적으로 시작되었습니다.",
- "alreadyInProgress": "색인 재구성이 이미 진행 중입니다.",
- "error": "색인 재구성을 시작하지 못했습니다: {{errorMessage}}"
+ "label": "지금 재색인",
+ "desc": "재색인을 실행하면 모든 추적 객체의 임베딩을 다시 생성합니다. 이 작업은 백그라운드에서 실행되며 추적 객체 수에 따라 CPU 사용량이 최대치에 도달하고 상당한 시간이 걸릴 수 있습니다.",
+ "confirmTitle": "재색인 확인",
+ "confirmDesc": "모든 추적 객체 임베딩을 다시 색인하시겠습니까? 백그라운드에서 실행되지만 CPU 점유율이 높아지고 많은 시간이 소요될 수 있습니다. 진행 상황은 '탐색' 페이지에서 확인할 수 있습니다.",
+ "confirmButton": "재색인",
+ "success": "재색인이 성공적으로 시작되었습니다.",
+ "alreadyInProgress": "이미 재색인이 진행 중입니다.",
+ "error": "재색인 시작 실패: {{errorMessage}}"
+ },
+ "title": "시맨틱 검색",
+ "desc": "Frigate의 시맨틱 검색을 사용하면 이미지 자체, 사용자 지정 텍스트 설명 또는 자동 생성된 설명을 활용하여 다시보기 항목 내의 추적 객체를 찾을 수 있습니다.",
+ "modelSize": {
+ "label": "모델 크기",
+ "desc": "시맨틱 검색 임베딩에 사용할 모델 크기입니다.",
+ "small": {
+ "title": "소형",
+ "desc": "small은 양자화된 모델을 사용하여 RAM을 적게 차지하고 CPU에서 더 빠르게 실행되며, 임베딩 품질 저하도 거의 없습니다."
+ },
+ "large": {
+ "title": "대형",
+ "desc": "large는 전체 Jina 모델을 사용하며 환경이 지원될 경우 GPU에서 자동으로 실행됩니다."
+ }
}
+ },
+ "faceRecognition": {
+ "title": "얼굴 인식",
+ "desc": "얼굴 인식을 통해 사람에게 이름을 지정할 수 있으며, 얼굴이 인식되면 Frigate가 해당 인물의 이름을 하위 레이블로 부여합니다. 이 정보는 UI, 필터 및 알림에 반영됩니다.",
+ "modelSize": {
+ "label": "모델 크기",
+ "desc": "얼굴 인식에 사용할 모델 크기입니다.",
+ "small": {
+ "title": "소형",
+ "desc": "small은 대부분의 CPU에서 효율적으로 구동되는 FaceNet 얼굴 임베딩 모델을 사용합니다."
+ },
+ "large": {
+ "title": "large",
+ "desc": "large는 ArcFace 얼굴 임베딩 모델을 사용하며 환경이 지원될 경우 GPU에서 자동으로 구동됩니다."
+ }
+ }
+ },
+ "licensePlateRecognition": {
+ "title": "차량 번호판 인식",
+ "desc": "Frigate은 차량 번호판을 인식하여 감지된 문자를 recognized_license_plate 필드에 자동 기록하거나, 'car' 유형의 객체에 등록된 이름을 하위 레이블로 추가할 수 있습니다. 진입로에 들어오거나 도로를 지나가는 차량의 번호판을 판독하는 데 유용합니다."
+ },
+ "restart_required": "재시작 필요 (확장 기능 설정 변경됨)",
+ "toast": {
+ "success": "확장 기능 설정이 저장되었습니다. 변경 사항을 적용하려면 Frigate를 재시작하세요.",
+ "error": "설정 변경 사항 저장 실패: {{errorMessage}}"
}
},
"saveAllPreview": {
"title": "저장할 변경 사항",
"triggerLabel": "대기 중인 변경 사항 검토",
- "empty": "대기 중인 변경 사항 없음.",
+ "empty": "대기 중인 변경 사항이 없습니다.",
"scope": {
"label": "적용 범위",
- "global": "전체",
+ "global": "전역",
"camera": "카메라: {{cameraName}}"
},
"field": {
- "label": "항목"
+ "label": "필드"
},
"value": {
"label": "새 값",
"reset": "초기화"
+ },
+ "profile": {
+ "label": "프로필"
}
},
"button": {
- "overriddenGlobal": "전역 재정의됨",
+ "overriddenGlobal": "재정의됨 (전역)",
"overriddenGlobalTooltip": "이 카메라는 이 섹션의 전역 설정을 재정의합니다",
- "overriddenBaseConfig": "기본 설정 재정의됨",
- "overriddenBaseConfigTooltip": "{{profile}} 프로필은 이 섹션의 구성 설정을 재정의합니다"
+ "overriddenBaseConfig": "재정의됨 (기본 설정)",
+ "overriddenBaseConfigTooltip": "{{profile}} 프로필이 이 섹션의 설정을 재정의합니다",
+ "overriddenGlobalHeading_other": "이 카메라는 전역 설정의 필드 {{count}}개를 재정의합니다:",
+ "overriddenGlobalNoDeltas": "이 카메라는 전역 설정을 재정의하도록 설정되었으나, 기본값과 다른 필드가 없습니다.",
+ "overriddenBaseConfigHeading_other": "{{profile}} 프로필이 기본 설정의 필드 {{count}}개를 재정의합니다:",
+ "overriddenBaseConfigNoDeltas": "{{profile}} 프로필이 이 섹션을 재정의하도록 설정되었으나, 기본 설정과 다른 필드가 없습니다.",
+ "overriddenInCameras": {
+ "label_other": "카메라 {{count}}대에서 재정의됨",
+ "tooltip_other": "카메라 {{count}}대가 이 섹션의 값을 재정의합니다. 세부 정보를 보려면 클릭하세요.",
+ "heading_other": "이 전역 섹션에는 카메라 {{count}}대에서 재정의된 필드가 포함되어 있습니다.",
+ "othersField_other": "기타 {{count}}개",
+ "profilePrefix": "{{profile}} 프로필: {{fields}}"
+ }
+ },
+ "menuDot": {
+ "overrideGlobal": "이 섹션은 전역 구성을 재정의합니다",
+ "overrideProfile": "이 섹션은 {{profile}} 프로필에 의해 재정의됩니다",
+ "unsaved": "이 섹션에 저장되지 않은 변경 사항이 있습니다"
+ },
+ "cameraWizard": {
+ "title": "카메라 추가",
+ "description": "아래 단계에 따라 Frigate에 새 카메라를 추가하세요.",
+ "steps": {
+ "nameAndConnection": "이름 및 연결",
+ "probeOrSnapshot": "탐색 또는 스냅샷",
+ "streamConfiguration": "스트림 구성",
+ "validationAndTesting": "검증 및 테스트"
+ },
+ "save": {
+ "success": "새 카메라 {{cameraName}}을(를) 성공적으로 저장했습니다.",
+ "failure": "{{cameraName}} 저장 중 오류가 발생했습니다."
+ },
+ "testResultLabels": {
+ "resolution": "해상도",
+ "video": "비디오",
+ "audio": "오디오",
+ "fps": "FPS"
+ },
+ "commonErrors": {
+ "noUrl": "올바른 스트림 URL을 입력해 주세요",
+ "testFailed": "스트림 테스트 실패: {{error}}"
+ },
+ "step1": {
+ "description": "카메라 정보를 입력하고 카메라를 자동 탐색하거나 제조사 브랜드를 수동으로 선택하세요.",
+ "cameraName": "카메라 이름",
+ "cameraNamePlaceholder": "예: front_door 또는 Back Yard Overview",
+ "host": "호스트/IP 주소",
+ "port": "포트",
+ "username": "사용자 이름",
+ "usernamePlaceholder": "선택 사항",
+ "password": "비밀번호",
+ "passwordPlaceholder": "선택 사항",
+ "selectTransport": "전송 프로토콜 선택",
+ "cameraBrand": "카메라 브랜드",
+ "selectBrand": "URL 템플릿에 적용할 카메라 브랜드 선택",
+ "customUrl": "사용자 지정 스트림 URL",
+ "brandInformation": "브랜드 정보",
+ "brandUrlFormat": "RTSP URL 형식이 다음과 같은 카메라용: {{exampleUrl}}",
+ "customUrlPlaceholder": "rtsp://username:password@host:port/path",
+ "connectionSettings": "연결 설정",
+ "detectionMethod": "스트림 탐색 방식",
+ "onvifPort": "ONVIF 포트",
+ "probeMode": "카메라 자동 탐색",
+ "manualMode": "수동 선택",
+ "detectionMethodDescription": "ONVIF를 지원하는 경우 카메라를 탐색하여 스트림 URL을 자동으로 찾거나, 카메라 브랜드를 수동 선택하여 사전 정의된 URL을 사용할 수 있습니다. 커스텀 RTSP URL을 입력하려면 수동 방식을 선택하고 '기타(Other)'를 선택하세요.",
+ "onvifPortDescription": "ONVIF를 지원하는 카메라의 경우 주로 80 또는 8080 포트를 사용합니다.",
+ "useDigestAuth": "다이제스트(Digest) 인증 사용",
+ "useDigestAuthDescription": "ONVIF에 HTTP 다이제스트 인증을 사용합니다. 일부 카메라는 표준 관리자 계정 대신 전용 ONVIF 사용자 이름/비밀번호가 필요할 수 있습니다.",
+ "errors": {
+ "brandOrCustomUrlRequired": "호스트/IP와 함께 카메라 브랜드를 선택하거나 '기타(Other)'를 선택하고 커스텀 URL을 입력하세요",
+ "nameRequired": "카메라 이름은 필수입니다",
+ "nameLength": "카메라 이름은 64자 이하여야 합니다",
+ "invalidCharacters": "카메라 이름에 유효하지 않은 문자가 포함되어 있습니다",
+ "nameExists": "이미 존재하는 카메라 이름입니다",
+ "customUrlRtspRequired": "사용자 지정 URL은 반드시 \"rtsp://\" 또는 \"rtsps://\"로 시작해야 합니다. RTSP가 아닌 카메라 스트림은 수동 구성이 필요합니다."
+ }
+ },
+ "step2": {
+ "description": "선택한 감지 방식에 따라 카메라에서 사용 가능한 스트림을 탐색하거나 수동 설정을 구성합니다.",
+ "testSuccess": "연결 테스트 성공!",
+ "testFailed": "연결 테스트에 실패했습니다. 입력값을 확인하고 다시 시도하세요.",
+ "testFailedTitle": "테스트 실패",
+ "streamDetails": "스트림 세부 정보",
+ "probing": "카메라 탐색 중...",
+ "retry": "재시도",
+ "testing": {
+ "probingMetadata": "카메라 메타데이터 탐색 중...",
+ "fetchingSnapshot": "카메라 스냅샷 가져오는 중..."
+ },
+ "probeFailed": "카메라 탐색 실패: {{error}}",
+ "probingDevice": "기기 탐색 중...",
+ "probeSuccessful": "탐색 성공",
+ "probeError": "탐색 오류",
+ "probeNoSuccess": "탐색 실패",
+ "deviceInfo": "기기 정보",
+ "manufacturer": "제조사",
+ "model": "모델",
+ "firmware": "펌웨어",
+ "profiles": "프로필",
+ "ptzSupport": "PTZ 지원",
+ "autotrackingSupport": "자동 추적 지원",
+ "presets": "프리셋",
+ "rtspCandidates": "RTSP 후보 목록",
+ "rtspCandidatesDescription": "카메라 탐색을 통해 발견된 RTSP URL 목록입니다. 연결을 테스트하여 스트림 메타데이터를 확인하세요.",
+ "noRtspCandidates": "카메라에서 RTSP URL을 찾을 수 없습니다. 자격 증명이 올바르지 않거나, 카메라가 ONVIF 또는 URL 추출 방식을 지원하지 않을 수 있습니다. 이전 단계로 돌아가 RTSP URL을 직접 수동 입력하세요.",
+ "candidateStreamTitle": "후보 스트림 {{number}}",
+ "useCandidate": "사용",
+ "uriCopy": "복사",
+ "uriCopied": "URI가 클립보드에 복사되었습니다",
+ "testConnection": "연결 테스트",
+ "toggleUriView": "클릭하여 전체 URI 보기 전환",
+ "connected": "연결됨",
+ "notConnected": "연결되지 않음",
+ "errors": {
+ "hostRequired": "호스트/IP 주소는 필수입니다"
+ }
+ },
+ "step3": {
+ "description": "스트림 역할을 구성하고 카메라에 추가 스트림을 연결합니다.",
+ "streamsTitle": "카메라 스트림",
+ "addStream": "스트림 추가",
+ "addAnotherStream": "다른 스트림 추가",
+ "streamTitle": "스트림 {{number}}",
+ "streamUrl": "스트림 URL",
+ "streamUrlPlaceholder": "rtsp://username:password@host:port/path",
+ "selectStream": "스트림 선택",
+ "searchCandidates": "후보 검색...",
+ "noStreamFound": "스트림을 찾을 수 없음",
+ "url": "URL",
+ "resolution": "해상도",
+ "selectResolution": "해상도 선택",
+ "quality": "화질",
+ "selectQuality": "화질 선택",
+ "roles": "역할",
+ "roleLabels": {
+ "detect": "객체 감지",
+ "record": "녹화",
+ "audio": "오디오"
+ },
+ "testStream": "연결 테스트",
+ "testSuccess": "스트림 테스트 성공!",
+ "testFailed": "스트림 테스트 실패",
+ "testFailedTitle": "테스트 실패",
+ "connected": "연결됨",
+ "notConnected": "연결되지 않음",
+ "featuresTitle": "기능",
+ "go2rtc": "카메라 연결 부하 감소",
+ "detectRoleWarning": "계속 진행하려면 최소 하나의 스트림에 \"detect\" 역할이 할당되어야 합니다.",
+ "rolesPopover": {
+ "title": "스트림 역할",
+ "detect": "객체 감지를 위한 메인 피드입니다.",
+ "record": "설정에 따라 영상 세그먼트를 저장합니다.",
+ "audio": "오디오 기반 감지를 위한 피드입니다."
+ },
+ "featuresPopover": {
+ "title": "스트림 기능",
+ "description": "go2rtc 재스트리밍을 사용하여 카메라에 가해지는 동시 연결 수를 줄입니다."
+ }
+ },
+ "step4": {
+ "description": "새 카메라를 저장하기 전 최종 유효성 검사 및 분석을 진행합니다. 저장하기 전에 각 스트림을 연결해 보세요.",
+ "validationTitle": "스트림 검증",
+ "connectAllStreams": "모든 스트림 연결",
+ "reconnectionSuccess": "재연결 성공.",
+ "reconnectionPartial": "일부 스트림 재연결에 실패했습니다.",
+ "streamUnavailable": "스트림 미리보기를 사용할 수 없음",
+ "reload": "새로고침",
+ "connecting": "연결 중...",
+ "streamTitle": "스트림 {{number}}",
+ "valid": "유효함",
+ "failed": "실패",
+ "notTested": "테스트되지 않음",
+ "connectStream": "연결",
+ "connectingStream": "연결 중",
+ "disconnectStream": "연결 해제",
+ "estimatedBandwidth": "예상 대역폭",
+ "roles": "역할",
+ "ffmpegModule": "스트림 호환성 모드 사용",
+ "ffmpegModuleDescription": "여러 번 시도해도 스트림이 로드되지 않는 경우 이 기능을 켜보세요. 활성화하면 Frigate가 go2rtc와 함께 FFmpeg 모듈을 사용하므로 일부 카메라 스트림과의 호환성이 향상될 수 있습니다.",
+ "none": "없음",
+ "error": "오류",
+ "streamValidated": "스트림 {{number}} 검증 성공",
+ "streamValidationFailed": "스트림 {{number}} 검증 실패",
+ "saveAndApply": "새 카메라 저장",
+ "saveError": "유효하지 않은 구성입니다. 설정을 확인해 주세요.",
+ "issues": {
+ "title": "스트림 검증",
+ "videoCodecGood": "비디오 코덱: {{codec}}.",
+ "audioCodecGood": "오디오 코덱: {{codec}}.",
+ "resolutionHigh": "{{resolution}} 해상도는 리소스 사용량을 증가시킬 수 있습니다.",
+ "resolutionLow": "{{resolution}} 해상도는 작은 객체를 안정적으로 감지하기에 너무 낮을 수 있습니다.",
+ "resolutionUnknown": "이 스트림의 해상도를 탐색할 수 없습니다. 설정 또는 구성 파일에서 감지 해상도를 직접 지정해야 합니다.",
+ "noAudioWarning": "이 스트림에서 오디오가 감지되지 않아 녹화 영상에 소리가 포함되지 않습니다.",
+ "audioCodecRecordError": "녹화 영상에 오디오를 포함하려면 AAC 오디오 코덱이 필요합니다.",
+ "audioCodecRequired": "오디오 감지를 지원하려면 오디오 스트림이 필요합니다.",
+ "restreamingWarning": "녹화 스트림에 대해 카메라 연결 부하 감소(재스트리밍)를 활성화하면 CPU 사용량이 약간 증가할 수 있습니다.",
+ "brands": {
+ "reolink-rtsp": "Reolink RTSP는 권장되지 않습니다. 카메라 펌웨어 설정에서 HTTP를 활성화하고 마법사를 다시 시작하세요.",
+ "reolink-http": "Reolink HTTP 스트림은 호환성을 위해 FFmpeg를 사용하는 것이 좋습니다. 이 스트림에 '스트림 호환성 모드 사용'을 활성화하세요."
+ },
+ "dahua": {
+ "substreamWarning": "보조 스트림(Substream 1)이 낮은 해상도로 고정되어 있습니다. 대다수의 Dahua / Amcrest / EmpireTech 카메라는 카메라 내부 설정에서 추가 서브스트림을 켤 수 있습니다. 가능한 경우 해당 스트림을 확인하고 활용하는 것을 권장합니다."
+ },
+ "hikvision": {
+ "substreamWarning": "보조 스트림(Substream 1)이 낮은 해상도로 고정되어 있습니다. 대다수의 Hikvision 카메라는 카메라 내부 설정에서 추가 서브스트림을 켤 수 있습니다. 가능한 경우 해당 스트림을 확인하고 활용하는 것을 권장합니다."
+ }
+ }
+ }
+ },
+ "cameraManagement": {
+ "title": "카메라 관리",
+ "description": "카메라를 추가, 수정, 삭제하고 각 카메라의 동작 상태를 제어하며, 프로필 및 카메라 유형별 재정의를 구성합니다. 스트림, 감지, 움직임 및 기타 세부 설정을 변경하려면 '카메라 설정' 아래의 해당 섹션을 선택하세요.",
+ "addCamera": "새 카메라 추가",
+ "deleteCamera": "카메라 삭제",
+ "deleteCameraDialog": {
+ "title": "카메라 삭제",
+ "description": "카메라를 삭제하면 해당 카메라의 모든 녹화 영상, 추적 객체 및 설정이 영구적으로 제거됩니다. 이 카메라와 연결된 go2rtc 스트림은 직접 수동 삭제해야 할 수 있습니다.",
+ "selectPlaceholder": "카메라 선택…",
+ "confirmTitle": "정말 삭제하시겠습니까?",
+ "confirmWarning": "{{cameraName}} 삭제 작업은 되돌릴 수 없습니다.",
+ "deleteExports": "이 카메라의 내보내기 파일도 함께 삭제",
+ "confirmButton": "영구 삭제",
+ "success": "{{cameraName}} 카메라가 성공적으로 삭제되었습니다",
+ "error": "{{cameraName}} 카메라 삭제 실패"
+ },
+ "editCamera": "카메라 수정:",
+ "selectCamera": "카메라 선택",
+ "backToSettings": "카메라 설정으로 돌아가기",
+ "streams": {
+ "title": "카메라 상태 및 세부 정보",
+ "label": "카메라 상태",
+ "description": "각 카메라의 동작 상태를 설정합니다.움직임 박스
현재 움직임이 감지되고 있는 화면 영역에 빨간색 박스가 오버레이됩니다
" + }, + "regions": { + "title": "영역 (Regions)", + "desc": "객체 감지기로 전송되는 관심 영역 박스를 표시합니다", + "tips": "영역 박스
객체 감지기로 전송 중인 프레임 내 관심 영역에 밝은 녹색 박스가 오버레이됩니다.
" + }, + "paths": { + "title": "이동 경로", + "desc": "추적 객체 경로의 주요 지점을 표시합니다", + "tips": "경로
선과 원은 추적 객체가 수명주기 동안 이동한 주요 지점을 나타냅니다.
" + }, + "objectShapeFilterDrawing": { + "title": "객체 형태 필터 그리기", + "desc": "이미지 위에 직사각형을 그려 면적과 비율 정보를 확인합니다", + "tips": "이 옵션을 활성화하고 카메라 이미지에 직사각형을 그리면 면적과 가로세로 비율이 표시됩니다. 이 수치를 설정 파일의 객체 형태 필터 매개변수로 활용할 수 있습니다.", + "score": "점수", + "ratio": "비율", + "area": "면적" + } + }, + "timestampPosition": { + "tl": "좌측 상단", + "tr": "우측 상단", + "bl": "좌측 하단", + "br": "우측 하단" + }, + "roles": { + "management": { + "title": "조회자(Viewer) 역할 관리", + "desc": "이 Frigate 인스턴스에 대한 사용자 정의 뷰어 역할과 카메라 접근 권한을 관리합니다." + }, + "addRole": "역할 추가", + "table": { + "role": "역할", + "cameras": "카메라", + "actions": "작업", + "noRoles": "사용자 정의 역할이 없습니다.", + "editCameras": "카메라 수정", + "deleteRole": "역할 삭제" + }, + "toast": { + "success": { + "createRole": "{{role}} 역할이 성공적으로 생성되었습니다", + "updateCameras": "{{role}} 역할의 카메라가 업데이트되었습니다", + "deleteRole": "{{role}} 역할이 성공적으로 삭제되었습니다", + "userRolesUpdated_other": "이 역할에 할당된 사용자 {{count}}명의 역할이 모든 카메라에 접근 가능한 'viewer'로 변경되었습니다." + }, + "error": { + "createRoleFailed": "역할 생성 실패: {{errorMessage}}", + "updateCamerasFailed": "카메라 업데이트 실패: {{errorMessage}}", + "deleteRoleFailed": "역할 삭제 실패: {{errorMessage}}", + "userUpdateFailed": "사용자 역할 업데이트 실패: {{errorMessage}}" + } + }, + "dialog": { + "createRole": { + "title": "새 역할 생성", + "desc": "새 역할을 추가하고 카메라 접근 권한을 지정합니다." + }, + "editCameras": { + "title": "역할 카메라 수정", + "desc": "{{role}} 역할의 카메라 접근 권한을 업데이트합니다." + }, + "deleteRole": { + "title": "역할 삭제", + "desc": "이 작업은 되돌릴 수 없습니다. 역할이 영구적으로 삭제되며, 이 역할을 가진 사용자는 모든 카메라에 접근 가능한 'viewer' 역할로 자동 전환됩니다.", + "warn": "정말로 {{role}} 역할을 삭제하시겠습니까?", + "deleting": "삭제 중..." + }, + "form": { + "role": { + "title": "역할 이름", + "placeholder": "역할 이름 입력", + "desc": "영문자, 숫자, 마침표(.), 밑줄(_)만 허용됩니다.", + "roleIsRequired": "역할 이름은 필수입니다", + "roleOnlyInclude": "역할 이름은 영문자, 숫자, 마침표(.), 밑줄(_)만 포함할 수 있습니다", + "roleExists": "동일한 이름의 역할이 이미 존재합니다." + }, + "cameras": { + "title": "카메라", + "desc": "이 역할이 접근할 수 있는 카메라를 선택하세요. 최소 하나 이상의 카메라를 선택해야 합니다.", + "required": "최소 하나 이상의 카메라를 선택해야 합니다." + } + } + } + }, + "notification": { + "title": "알림", + "notificationSettings": { + "title": "알림 설정", + "desc": "Frigate이 브라우저에서 실행 중이거나 PWA로 설치된 경우 기기로 푸시 알림을 기본 전송할 수 있습니다." + }, + "notificationUnavailable": { + "title": "알림을 사용할 수 없음", + "desc": "웹 푸시 알림을 사용하려면 보안 컨텍스트(https://…)가 필요합니다. 이는 브라우저 자체의 제한 사항입니다. 알림을 사용하려면 Frigate에 보안 연결로 접속하세요.",
+ "descPwa": "iOS의 경우 Frigate이 홈 화면에 추가되어 있어야만 웹 푸시 알림을 사용할 수 있습니다. 공유 메뉴를 열고 홈 화면에 추가를 선택한 다음, 새로 생성된 아이콘으로 Frigate을 실행하여 기기를 알림에 등록하세요."
+ },
+ "globalSettings": {
+ "title": "전역 설정",
+ "desc": "등록된 모든 기기에서 특정 카메라의 알림을 일시 중지합니다."
+ },
+ "email": {
+ "title": "이메일",
+ "placeholder": "예: example@email.com",
+ "desc": "유효한 이메일 입력이 필요하며, 푸시 서비스에 문제가 발생할 경우 알림을 보내는 데 사용됩니다."
+ },
+ "cameras": {
+ "title": "카메라",
+ "noCameras": "사용 가능한 카메라 없음",
+ "desc": "알림을 활성화할 카메라를 선택하세요."
+ },
+ "deviceSpecific": "기기별 설정",
+ "registerDevice": "현재 기기 등록",
+ "unregisterDevice": "현재 기기 등록 해제",
+ "sendTestNotification": "테스트 알림 전송",
+ "unsavedRegistrations": "저장되지 않은 알림 등록 정보",
+ "unsavedChanges": "저장되지 않은 알림 변경 사항",
+ "active": "알림 활성 상태",
+ "suspended": "{{time}} 동안 알림 일시 중지됨",
+ "suspendTime": {
+ "suspend": "일시 중지",
+ "5minutes": "5분간 일시 중지",
+ "10minutes": "10분간 일시 중지",
+ "30minutes": "30분간 일시 중지",
+ "1hour": "1시간 동안 일시 중지",
+ "12hours": "12시간 동안 일시 중지",
+ "24hours": "24시간 동안 일시 중지",
+ "untilRestart": "재시작 전까지 일시 중지"
+ },
+ "cancelSuspension": "일시 중지 해제",
+ "toast": {
+ "success": {
+ "registered": "알림 등록에 성공했습니다. 테스트 알림을 포함한 알림을 수신하려면 먼저 Frigate를 재시작해야 합니다.",
+ "settingSaved": "알림 설정이 저장되었습니다."
+ },
+ "error": {
+ "registerFailed": "알림 등록 저장 실패."
+ }
+ }
+ },
+ "frigatePlus": {
+ "title": "Frigate+ 설정",
+ "description": "Frigate+는 사용자의 데이터를 기반으로 학습된 맞춤형 객체 감지 모델을 비롯하여 Frigate 인스턴스를 위한 추가 기능과 역량을 제공하는 구독 서비스입니다. 여기에서 Frigate+ 모델 설정을 관리할 수 있습니다.",
+ "cardTitles": {
+ "api": "API",
+ "currentModel": "현재 모델",
+ "otherModels": "기타 모델",
+ "configuration": "구성"
+ },
+ "apiKey": {
+ "title": "Frigate+ API 키",
+ "validated": "Frigate+ API 키가 확인 및 검증되었습니다",
+ "notValidated": "Frigate+ API 키가 감지되지 않았거나 유효하지 않습니다",
+ "desc": "Frigate+ API 키를 통해 Frigate+ 서비스와의 연동을 활성화합니다.",
+ "plusLink": "Frigate+ 자세히 알아보기"
+ },
+ "snapshotConfig": {
+ "title": "스냅샷 구성",
+ "desc": "Frigate+에 데이터를 제출하려면 설정에서 스냅샷이 활성화되어 있어야 합니다.",
+ "cleanCopyWarning": "일부 카메라에서 스냅샷이 비활성화되어 있습니다",
+ "table": {
+ "camera": "카메라",
+ "snapshots": "스냅샷"
+ }
+ },
+ "modelInfo": {
+ "title": "모델 정보",
+ "modelType": "모델 유형",
+ "trainDate": "학습 날짜",
+ "baseModel": "기본 모델",
+ "plusModelType": {
+ "baseModel": "기본 모델",
+ "userModel": "파인 튜닝 모델"
+ },
+ "supportedDetectors": "지원되는 감지기",
+ "cameras": "카메라",
+ "loading": "모델 정보 불러오는 중…",
+ "error": "모델 정보를 불러오지 못했습니다",
+ "noModelLoaded": "현재 로드된 Frigate+ 모델이 없습니다.",
+ "availableModels": "사용 가능한 Frigate+ 모델",
+ "loadingAvailableModels": "사용 가능한 모델 불러오는 중…",
+ "selectModel": "모델 선택",
+ "noModelsAvailable": "사용 가능한 모델 없음",
+ "filter": {
+ "ariaLabel": "유형별 모델 필터링",
+ "baseModels": "기본 모델",
+ "fineTunedModels": "파인 튜닝 모델"
+ },
+ "modelSelect": "Frigate+에서 사용 가능한 모델을 여기에서 선택할 수 있습니다. 현재 감지기 구성과 호환되는 모델만 선택할 수 있습니다."
+ },
+ "changeInDetectorsAndModel": "모델 변경",
+ "unsavedChanges": "저장되지 않은 Frigate+ 설정 변경 사항",
+ "restart_required": "재시작 필요 (Frigate+ 모델 변경됨)",
+ "toast": {
+ "success": "Frigate+ 설정이 저장되었습니다. 변경 사항을 적용하려면 Frigate를 재시작하세요.",
+ "error": "설정 변경 사항 저장 실패: {{errorMessage}}"
+ }
+ },
+ "detectorsAndModel": {
+ "title": "감지기 및 모델",
+ "description": "객체 감지를 실행하는 감지기 백엔드와 감지기가 사용하는 모델을 구성합니다. 감지기와 모델이 항상 일치하도록 변경 사항은 함께 저장됩니다.",
+ "cardTitles": {
+ "detector": "감지기 하드웨어",
+ "model": "감지 모델"
+ },
+ "tabs": {
+ "plus": "Frigate+",
+ "custom": "커스텀 모델"
+ },
+ "mismatch": {
+ "warning": "현재 Frigate+ 모델 \"{{model}}\"은(는) {{required}} 감지기가 필요합니다. 저장하기 전에 아래에서 호환되는 모델을 선택하거나 커스텀 모델로 전환하세요."
+ },
+ "plusModel": {
+ "requiresDetector": "필요 감지기: {{detector}}",
+ "noModelSelected": "Frigate+ 모델 선택"
+ },
+ "toast": {
+ "saveSuccess": "감지기 및 모델 설정이 저장되었습니다. 변경 사항을 적용하려면 Frigate를 재시작하세요.",
+ "saveError": "감지기 및 모델 설정 저장 실패"
+ },
+ "unsavedChanges": "저장되지 않은 감지기 및 모델 변경 사항",
+ "restartRequired": "재시작 필요 (감지기 또는 모델 변경됨)"
+ },
+ "maintenance": {
+ "title": "유지 관리",
+ "sync": {
+ "title": "미디어 동기화",
+ "desc": "Frigate은 보관 구성 설정에 따라 정기적으로 미디어를 정리합니다. 시스템 동작 중 참조가 끊긴 고아 파일이 일부 발생하는 것은 정상입니다. 데이터베이스에서 더 이상 참조하지 않는 디스크 상의 고아 미디어 파일을 정리하려면 이 기능을 사용하세요.",
+ "started": "미디어 동기화가 시작되었습니다.",
+ "alreadyRunning": "동기화 작업이 이미 실행 중입니다",
+ "error": "동기화 시작 실패",
+ "currentStatus": "상태",
+ "jobId": "작업 ID",
+ "startTime": "시작 시간",
+ "endTime": "종료 시간",
+ "statusLabel": "상태",
+ "results": "결과",
+ "errorLabel": "오류",
+ "mediaTypes": "미디어 유형",
+ "allMedia": "모든 미디어",
+ "dryRun": "시뮬레이션 (Dry Run)",
+ "dryRunEnabled": "파일이 실제로 삭제되지 않습니다",
+ "dryRunDisabled": "파일이 실제로 삭제됩니다",
+ "force": "강제 실행",
+ "forceDesc": "안전 임계값을 무시하고 50% 이상의 파일이 삭제되더라도 동기화를 완료합니다.",
+ "verbose": "상세 로그 (Verbose)",
+ "verboseDesc": "검토를 위해 고아 파일 전체 목록을 디스크에 기록합니다.",
+ "running": "동기화 실행 중...",
+ "start": "동기화 시작",
+ "inProgress": "동기화가 진행 중입니다. 이 페이지는 비활성화됩니다.",
+ "status": {
+ "queued": "대기 중",
+ "running": "실행 중",
+ "completed": "완료됨",
+ "failed": "실패함",
+ "notRunning": "실행 중이 아님"
+ },
+ "resultsFields": {
+ "filesChecked": "확인된 파일",
+ "orphansFound": "발견된 고아 파일",
+ "orphansDeleted": "삭제된 고아 파일",
+ "aborted": "중단됨. 삭제량이 안전 임계값을 초과합니다.",
+ "error": "오류",
+ "totals": "합계"
+ },
+ "event_snapshots": "추적 객체 스냅샷",
+ "event_thumbnails": "추적 객체 썸네일",
+ "review_thumbnails": "다시보기 썸네일",
+ "previews": "미리보기",
+ "exports": "내보내기",
+ "recordings": "녹화 파일"
+ },
+ "regionGrid": {
+ "title": "영역 그리드",
+ "desc": "영역 그리드는 각 카메라의 화각에서 다양한 크기의 객체가 주로 나타나는 위치를 학습하는 최적화 기능입니다. Frigate은 이 데이터를 사용하여 감지 영역을 효율적으로 산출합니다. 그리드는 추적 객체 데이터를 기반으로 시간이 지남에 따라 자동 구축됩니다.",
+ "clear": "영역 그리드 초기화",
+ "clearConfirmTitle": "영역 그리드 초기화",
+ "clearConfirmDesc": "감지기 모델 크기를 변경했거나 카메라의 물리적 위치를 변경하여 객체 추적 문제가 발생하는 경우가 아니라면 영역 그리드 초기화는 권장되지 않습니다. 그리드는 객체가 추적되면서 점진적으로 자동 재구축됩니다. 변경 사항을 적용하려면 Frigate를 재시작해야 합니다.",
+ "clearSuccess": "영역 그리드가 성공적으로 초기화되었습니다",
+ "clearError": "영역 그리드 초기화 실패",
+ "restartRequired": "영역 그리드 변경 사항을 적용하려면 재시작이 필요합니다"
+ }
+ },
+ "configForm": {
+ "global": {
+ "title": "전역 설정",
+ "description": "카메라별 설정에서 재정의하지 않는 한 모든 카메라에 적용되는 설정입니다."
+ },
+ "camera": {
+ "title": "카메라 설정",
+ "description": "이 카메라에만 적용되며 전역 설정을 재정의하는 설정입니다.",
+ "noCameras": "사용 가능한 카메라 없음"
+ },
+ "advancedSettingsCount": "고급 설정 ({{count}})",
+ "advancedCount": "고급 ({{count}})",
+ "showAdvanced": "고급 설정 표시",
+ "tabs": {
+ "sharedDefaults": "공통 기본값",
+ "system": "시스템",
+ "integrations": "연동 기능"
+ },
+ "additionalProperties": {
+ "keyLabel": "키",
+ "valueLabel": "값",
+ "keyPlaceholder": "새 키",
+ "remove": "제거",
+ "providerNameLabel": "제공업체 이름",
+ "providerNamePlaceholder": "예: openai",
+ "variableNameLabel": "변수 이름",
+ "variableNamePlaceholder": "예: MY_VARIABLE",
+ "loggerNameLabel": "로거 이름",
+ "loggerNamePlaceholder": "예: frigate.record",
+ "keyPatternError": "영문자, 숫자, 하이픈(-), 밑줄(_)만 사용하세요 (공백 불가)"
+ },
+ "knownPlates": {
+ "namePlaceholder": "예: 아내 차량",
+ "platePlaceholder": "번호판 번호 또는 정규식"
+ },
+ "liveStreams": {
+ "streamNameLabel": "스트림 이름",
+ "streamNamePlaceholder": "예: 메인 HD 스트림",
+ "go2rtcStreamLabel": "go2rtc 스트림",
+ "go2rtcStreamPlaceholder": "go2rtc 스트림 선택",
+ "go2rtcStreamSearch": "스트림 이름 검색 또는 직접 입력…",
+ "noGo2rtcStreams": "설정된 go2rtc 스트림 없음",
+ "availableStreams": "사용 가능한 스트림",
+ "useCustom": "\"{{value}}\" 사용",
+ "addStream": "스트림 추가"
+ },
+ "timezone": {
+ "defaultOption": "브라우저 시간대 사용"
+ },
+ "roleMap": {
+ "empty": "역할 매핑 없음",
+ "roleLabel": "역할",
+ "groupsLabel": "그룹",
+ "addMapping": "역할 매핑 추가",
+ "remove": "제거"
+ },
+ "ffmpegArgs": {
+ "preset": "프리셋",
+ "manual": "수동 인수",
+ "inherit": "카메라 설정에서 상속",
+ "none": "없음",
+ "useGlobalSetting": "전역 설정에서 상속",
+ "selectPreset": "프리셋 선택",
+ "manualPlaceholder": "FFmpeg 인수 입력",
+ "presetLabels": {
+ "preset-rpi-64-h264": "Raspberry Pi (H.264)",
+ "preset-rpi-64-h265": "Raspberry Pi (H.265)",
+ "preset-vaapi": "VAAPI (Intel/AMD GPU)",
+ "preset-intel-qsv-h264": "Intel QuickSync (H.264)",
+ "preset-intel-qsv-h265": "Intel QuickSync (H.265)",
+ "preset-nvidia": "NVIDIA GPU",
+ "preset-jetson-h264": "NVIDIA Jetson (H.264)",
+ "preset-jetson-h265": "NVIDIA Jetson (H.265)",
+ "preset-rkmpp": "Rockchip RKMPP",
+ "preset-http-jpeg-generic": "HTTP JPEG (범용)",
+ "preset-http-mjpeg-generic": "HTTP MJPEG (범용)",
+ "preset-http-reolink": "HTTP - Reolink 카메라",
+ "preset-rtmp-generic": "RTMP (범용)",
+ "preset-rtsp-generic": "RTSP (범용)",
+ "preset-rtsp-restream": "RTSP - go2rtc 재스트리밍",
+ "preset-rtsp-restream-low-latency": "RTSP - go2rtc 재스트리밍 (저지연)",
+ "preset-rtsp-udp": "RTSP - UDP",
+ "preset-rtsp-blue-iris": "RTSP - Blue Iris",
+ "preset-record-generic": "녹화 (범용, 오디오 제외)",
+ "preset-record-generic-audio-copy": "녹화 (범용 + 오디오 원본 복사)",
+ "preset-record-generic-audio-aac": "녹화 (범용 + 오디오 AAC 변환)",
+ "preset-record-mjpeg": "녹화 - MJPEG 카메라",
+ "preset-record-jpeg": "녹화 - JPEG 카메라",
+ "preset-record-ubiquiti": "녹화 - Ubiquiti 카메라"
+ }
+ },
+ "cameraInputs": {
+ "itemTitle": "스트림 {{index}}",
+ "sourceMode": {
+ "restream": "재스트리밍 (go2rtc)",
+ "manual": "수동 입력 경로",
+ "go2rtcStreamLabel": "go2rtc 스트림",
+ "go2rtcStreamPlaceholder": "go2rtc 스트림 선택",
+ "noGo2rtcStreams": "설정된 go2rtc 스트림 없음",
+ "go2rtcStreamSearch": "스트림 검색...",
+ "availableStreams": "사용 가능한 스트림",
+ "noMatchingStreams": "일치하는 스트림 없음"
+ }
+ },
+ "restartRequiredField": "재시작 필요",
+ "restartRequiredFooter": "구성 변경됨 - 재시작 필요",
+ "sections": {
+ "detect": "감지",
+ "record": "녹화",
+ "snapshots": "스냅샷",
+ "motion": "움직임",
+ "objects": "객체",
+ "review": "다시보기",
+ "audio": "오디오",
+ "notifications": "알림",
+ "live": "실시간 뷰",
+ "timestamp_style": "타임스탬프",
+ "mqtt": "MQTT",
+ "database": "데이터베이스",
+ "telemetry": "원격 측정",
+ "auth": "인증",
+ "tls": "TLS",
+ "proxy": "프록시",
+ "go2rtc": "go2rtc",
+ "ffmpeg": "FFmpeg",
+ "detectors": "감지기",
+ "model": "모델",
+ "semantic_search": "시맨틱 검색",
+ "genai": "생성형 AI",
+ "face_recognition": "얼굴 인식",
+ "lpr": "차량 번호판 인식",
+ "birdseye": "버드아이",
+ "masksAndZones": "마스크 / 구역"
+ },
+ "detect": {
+ "title": "감지 설정"
+ },
+ "detectors": {
+ "title": "감지기 설정",
+ "singleType": "{{type}} 유형의 감지기는 하나만 허용됩니다.",
+ "keyRequired": "감지기 이름은 필수입니다.",
+ "keyDuplicate": "감지기 이름이 이미 존재합니다.",
+ "noSchema": "사용 가능한 감지기 스키마가 없습니다.",
+ "none": "구성된 감지기 인스턴스가 없습니다.",
+ "add": "감지기 추가",
+ "addCustomKey": "커스텀 키 추가"
+ },
+ "record": {
+ "title": "녹화 설정"
+ },
+ "snapshots": {
+ "title": "스냅샷 설정"
+ },
+ "motion": {
+ "title": "움직임 설정"
+ },
+ "objects": {
+ "title": "객체 설정"
+ },
+ "audioLabels": {
+ "summary": "선택된 오디오 레이블 {{count}}개",
+ "empty": "사용 가능한 오디오 레이블 없음"
+ },
+ "objectLabels": {
+ "summary": "선택된 객체 유형 {{count}}개",
+ "empty": "사용 가능한 객체 레이블 없음"
+ },
+ "reviewLabels": {
+ "summary": "선택된 레이블 {{count}}개",
+ "empty": "사용 가능한 레이블 없음"
+ },
+ "filters": {
+ "objectFieldLabel": "{{label}}의 {{field}}"
+ },
+ "zoneNames": {
+ "summary": "{{count}}개 선택됨",
+ "empty": "사용 가능한 구역 없음"
+ },
+ "inputRoles": {
+ "summary": "선택된 역할 {{count}}개",
+ "empty": "사용 가능한 역할 없음",
+ "options": {
+ "detect": "감지",
+ "record": "녹화",
+ "audio": "오디오"
+ }
+ },
+ "genaiRoles": {
+ "options": {
+ "embeddings": "임베딩",
+ "descriptions": "설명",
+ "chat": "채팅"
+ }
+ },
+ "semanticSearchModel": {
+ "placeholder": "모델 선택…",
+ "builtIn": "내장 모델",
+ "genaiProviders": "GenAI 제공업체"
+ },
+ "semanticSearchModelSize": {
+ "notApplicable": "GenAI 제공업체에는 적용되지 않음"
+ },
+ "review": {
+ "title": "다시보기 설정"
+ },
+ "audio": {
+ "title": "오디오 설정"
+ },
+ "notifications": {
+ "title": "알림 설정"
+ },
+ "live": {
+ "title": "실시간 뷰 설정"
+ },
+ "timestamp_style": {
+ "title": "타임스탬프 설정"
+ },
+ "searchPlaceholder": "검색...",
+ "addCustomLabel": "사용자 정의 레이블 추가...",
+ "genaiModel": {
+ "placeholder": "모델 선택 또는 직접 입력…",
+ "search": "모델 검색 또는 직접 입력…",
+ "noModels": "사용 가능한 모델 없음",
+ "available": "사용 가능한 모델",
+ "useCustom": "\"{{value}}\" 사용",
+ "refresh": "모델 새로고침",
+ "probeFailed": "모델 탐색 실패",
+ "fetchedModels": "모델 목록을 성공적으로 가져왔습니다"
+ },
+ "ptzPresets": {
+ "placeholder": "프리셋 선택 또는 직접 입력...",
+ "search": "프리셋 검색 또는 직접 입력...",
+ "noPresets": "사용 가능한 프리셋 없음",
+ "available": "카메라 프리셋",
+ "useCustom": "\"{{value}}\" 사용"
+ },
+ "defaultRole": {
+ "admin": "관리자",
+ "viewer": "조회자"
+ }
+ },
+ "globalConfig": {
+ "title": "전역 설정",
+ "description": "재정의하지 않는 한 모든 카메라에 공통으로 적용되는 전역 설정을 구성합니다.",
+ "toast": {
+ "success": "전역 설정을 성공적으로 저장했습니다",
+ "error": "전역 설정 저장 실패",
+ "validationError": "유효성 검사 실패"
+ }
+ },
+ "cameraConfig": {
+ "title": "카메라 설정",
+ "description": "개별 카메라의 설정을 구성합니다. 전역 기본값보다 우선 적용됩니다.",
+ "overriddenBadge": "재정의됨",
+ "resetToGlobal": "전역 기본값으로 초기화",
+ "toast": {
+ "success": "카메라 설정을 성공적으로 저장했습니다",
+ "error": "카메라 설정 저장 실패"
+ }
+ },
+ "toast": {
+ "success": "설정을 성공적으로 저장했습니다",
+ "applied": "설정이 성공적으로 적용되었습니다",
+ "successRestartRequired": "설정을 성공적으로 저장했습니다. 변경 사항을 적용하려면 Frigate를 재시작하세요.",
+ "error": "설정 저장 실패",
+ "validationError": "유효성 검사 실패: {{message}}",
+ "resetSuccess": "전역 기본값으로 초기화되었습니다",
+ "resetError": "설정 초기화 실패",
+ "saveAllSuccess_other": "모든 {{count}}개 섹션을 성공적으로 저장했습니다.",
+ "saveAllSuccessRestartRequired_other": "모든 {{count}}개 섹션을 성공적으로 저장했습니다. 변경 사항을 적용하려면 Frigate를 재시작하세요.",
+ "saveAllPartial_other": "총 {{totalCount}}개 중 {{successCount}}개 섹션 저장 완료. {{failCount}}개 실패.",
+ "saveAllFailure": "모든 섹션 저장 실패."
+ },
+ "profiles": {
+ "title": "프로필",
+ "activeProfile": "활성 프로필",
+ "noActiveProfile": "활성화된 프로필 없음",
+ "active": "활성",
+ "activated": "'{{profile}}' 프로필 활성화됨",
+ "activateFailed": "프로필 설정 실패",
+ "deactivated": "프로필 비활성화됨",
+ "noProfiles": "정의된 프로필이 없습니다.",
+ "noOverrides": "재정의 없음",
+ "cameraCount_other": "카메라 {{count}}대",
+ "columnCamera": "카메라",
+ "columnOverrides": "프로필 재정의",
+ "baseConfig": "기본 설정",
+ "addProfile": "프로필 추가",
+ "newProfile": "새 프로필",
+ "profileNamePlaceholder": "예: 재실 모드, 외출 모드, 야간 모드",
+ "friendlyNameLabel": "프로필 이름",
+ "profileIdLabel": "프로필 ID",
+ "profileIdDescription": "설정 파일 및 자동화에서 사용하는 내부 식별자",
+ "nameInvalid": "소문자, 숫자, 밑줄(_)만 허용됩니다",
+ "nameDuplicate": "동일한 이름의 프로필이 이미 존재합니다",
+ "error": {
+ "mustBeAtLeastTwoCharacters": "최소 2자 이상이어야 합니다",
+ "mustNotContainPeriod": "마침표를 포함할 수 없습니다",
+ "alreadyExists": "동일한 ID의 프로필이 이미 존재합니다"
+ },
+ "renameProfile": "프로필 이름 변경",
+ "renameSuccess": "프로필 이름을 '{{profile}}'(으)로 변경했습니다",
+ "deleteProfile": "프로필 삭제",
+ "deleteProfileConfirm": "모든 카메라에서 \"{{profile}}\" 프로필을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
+ "deleteSuccess": "'{{profile}}' 프로필 삭제됨",
+ "createSuccess": "'{{profile}}' 프로필 생성됨",
+ "removeOverride": "프로필 재정의 제거",
+ "deleteSection": "섹션 재정의 삭제",
+ "deleteSectionConfirm": "{{camera}}의 {{profile}} 프로필에 대한 {{section}} 재정의를 제거하시겠습니까?",
+ "deleteSectionSuccess": "{{profile}}의 {{section}} 재정의가 제거되었습니다",
+ "enableSwitch": "프로필 활성화",
+ "enabledDescription": "프로필이 활성화되었습니다. 아래에서 새 프로필을 생성하고, 카메라 설정 섹션으로 이동하여 설정을 수정한 후 저장하세요.",
+ "disabledDescription": "프로필을 사용하면 필요에 따라 활성화할 수 있는 명명된 카메라 설정 재정의 세트(예: 경비, 외출, 야간)를 정의할 수 있습니다."
+ },
+ "unsavedChanges": "저장되지 않은 변경 사항이 있습니다",
+ "confirmReset": "초기화 확인",
+ "resetToDefaultDescription": "이 섹션의 모든 설정을 기본값으로 초기화합니다. 이 작업은 되돌릴 수 없습니다.",
+ "resetToGlobalDescription": "이 섹션의 설정을 전역 기본값으로 되돌립니다. 이 작업은 되돌릴 수 없습니다.",
+ "go2rtcStreams": {
+ "title": "go2rtc 스트림",
+ "description": "카메라 재스트리밍을 위한 go2rtc 스트림 구성을 관리합니다. 각 스트림은 이름과 하나 이상의 소스 URL을 갖습니다.",
+ "addStream": "스트림 추가",
+ "addStreamDesc": "새 스트림의 이름을 입력하세요. 이 이름은 카메라 구성에서 스트림을 참조할 때 사용됩니다.",
+ "addUrl": "URL 추가",
+ "sourceNumber": "소스 {{index}}",
+ "streamName": "스트림 이름",
+ "streamNamePlaceholder": "예: front_door",
+ "streamUrlPlaceholder": "예: rtsp://user:pass@192.168.1.100/stream",
+ "deleteStream": "스트림 삭제",
+ "deleteStreamConfirm": "정말로 \"{{streamName}}\" 스트림을 삭제하시겠습니까? 이 스트림을 참조하는 카메라의 연결이 끊어질 수 있습니다.",
+ "noStreams": "설정된 go2rtc 스트림이 없습니다. 시작하려면 스트림을 추가하세요.",
+ "validation": {
+ "nameRequired": "스트림 이름은 필수입니다",
+ "nameDuplicate": "동일한 이름의 스트림이 이미 존재합니다",
+ "nameInvalid": "스트림 이름은 영문자, 숫자, 밑줄(_), 하이픈(-)만 포함할 수 있습니다",
+ "urlRequired": "최소 하나 이상의 URL이 필요합니다"
+ },
+ "renameStream": "스트림 이름 변경",
+ "renameStreamDesc": "이 스트림의 새 이름을 입력하세요. 스트림 이름을 변경하면 해당 이름을 참조하는 카메라나 다른 스트림의 동작이 중단될 수 있습니다.",
+ "newStreamName": "새 스트림 이름",
+ "ffmpeg": {
+ "useFfmpegModule": "호환 모드 사용 (FFmpeg)",
+ "video": "비디오",
+ "audio": "오디오",
+ "hardware": "하드웨어 가속",
+ "videoCopy": "복사",
+ "videoH264": "H.264로 트랜스코딩",
+ "videoH265": "H.265로 트랜스코딩",
+ "videoExclude": "제외",
+ "audioCopy": "복사",
+ "audioAac": "AAC로 트랜스코딩",
+ "audioOpus": "Opus로 트랜스코딩",
+ "audioPcmu": "PCM μ-law로 트랜스코딩",
+ "audioPcma": "PCM A-law로 트랜스코딩",
+ "audioPcm": "PCM으로 트랜스코딩",
+ "audioMp3": "MP3로 트랜스코딩",
+ "audioExclude": "제외",
+ "hardwareNone": "하드웨어 가속 없음",
+ "hardwareAuto": "자동 (권장)",
+ "hardwareVaapi": "VAAPI",
+ "hardwareCuda": "CUDA",
+ "hardwareV4l2m2m": "V4L2 M2M",
+ "hardwareDxva2": "DXVA2",
+ "hardwareVideotoolbox": "VideoToolbox",
+ "addVideoCodec": "비디오 코덱 추가",
+ "addAudioCodec": "오디오 코덱 추가",
+ "removeCodec": "코덱 제거"
+ }
+ },
+ "birdseye": {
+ "trackingMode": {
+ "objects": "객체",
+ "motion": "움직임",
+ "continuous": "상시"
+ },
+ "cameraOrder": {
+ "label": "카메라 순서",
+ "description": "카메라를 드래그하여 버드아이 레이아웃 내 표시 순서를 설정하세요.",
+ "reorderHandle": "드래그하여 순서 변경",
+ "saving": "저장 중…",
+ "saved": "저장됨"
+ }
+ },
+ "retainMode": {
+ "all": "전체",
+ "motion": "움직임",
+ "active_objects": "활동 중인 객체"
+ },
+ "previewQuality": {
+ "very_high": "매우 높음",
+ "high": "높음",
+ "medium": "보통",
+ "low": "낮음",
+ "very_low": "매우 낮음"
+ },
+ "ui": {
+ "timeFormat": {
+ "browser": "브라우저 설정",
+ "12hour": "12시간제",
+ "24hour": "24시간제"
+ },
+ "unitSystem": {
+ "metric": "미터법 (Metric)",
+ "imperial": "야드파운드법 (Imperial)"
+ }
+ },
+ "review": {
+ "imageSource": {
+ "recordings": "녹화 영상",
+ "previews": "미리보기"
+ }
+ },
+ "logger": {
+ "logLevel": {
+ "debug": "Debug",
+ "info": "Info",
+ "warning": "경고",
+ "error": "Error",
+ "critical": "심각"
+ }
+ },
+ "onvif": {
+ "profileAuto": "자동",
+ "profileLoading": "프로필 불러오는 중...",
+ "autotracking": {
+ "zooming": {
+ "disabled": "비활성화됨",
+ "absolute": "절대 좌표 (Absolute)",
+ "relative": "상대 좌표 (Relative)"
+ }
+ }
+ },
+ "modelSize": {
+ "small": "작음 (Small)",
+ "large": "큼 (Large)"
+ },
+ "configMessages": {
+ "review": {
+ "recordDisabled": "녹화가 비활성화되어 있어 다시보기 항목이 생성되지 않습니다.",
+ "detectDisabled": "객체 감지가 비활성화되어 있습니다. 다시보기 항목은 알림 및 감지를 분류하기 위해 감지된 객체가 필요합니다.",
+ "allNonAlertDetections": "알림이 아닌 모든 활동은 일반 감지 이벤트로 포함됩니다.",
+ "genaiImageSourceRecordingsRecordDisabled": "이미지 소스가 '녹화 영상(recordings)'으로 설정되어 있지만 녹화가 비활성화되어 있습니다. Frigate이 미리보기 이미지로 대체합니다."
+ },
+ "audio": {
+ "noAudioRole": "audio 역할이 정의된 스트림이 없습니다. 오디오 감지가 작동하려면 스트림에 audio 역할을 지정해야 합니다."
+ },
+ "audioTranscription": {
+ "audioDetectionDisabled": "이 카메라에 오디오 감지가 활성화되어 있지 않습니다. 오디오 텍스트 변환을 사용하려면 오디오 감지가 켜져 있어야 합니다."
+ },
+ "detect": {
+ "fpsGreaterThanFive": "감지 FPS를 5보다 높게 설정하는 것은 권장되지 않습니다. 높은 값은 성능 문제를 일으킬 수 있으며 감지 품질에 실질적인 이점이 없습니다.",
+ "disabled": "객체 감지가 비활성화되었습니다. 스냅샷, 다시보기 항목 및 얼굴 인식, 번호판 인식, 생성형 AI와 같은 확장 기능이 작동하지 않습니다.",
+ "resolutionShouldBeMultipleOfFour": "최상의 결과를 위해 감지 너비와 높이는 4의 배수여야 합니다. 4의 배수가 아닌 다른 짝수 값은 감지 스트림에 시각적 왜곡이나 아티팩트를 유발할 수 있습니다.",
+ "aspectRatioMismatch": "입력한 너비와 높이가 현재 감지 해상도의 가로세로 비율과 일치하지 않습니다. 이미지가 늘어나거나 왜곡될 수 있습니다.",
+ "maxFramesSet": "max_frames 값을 설정하면 기본 동작이 재정의되어 정지 객체 추적이 비활성화됩니다. 극히 드문 상황에서만 필요하므로 주의해서 사용하세요.",
+ "squareResolution": "정사각형 감지 해상도는 일반적이지 않습니다. 감지 너비와 높이는 객체 감지 모델의 크기가 아니라 카메라의 화면 비율(예: 16:9)과 일치해야 합니다. 가로세로 비율이 맞지 않으면 이미지가 왜곡되어 감지 정확도가 떨어질 수 있습니다.",
+ "resolutionHigh": "이 감지 해상도는 권장값보다 높아 감지 정확도 개선 없이 자원 소모만 크게 증가시킬 수 있습니다. 대부분의 카메라에는 1080p 이하의 감지 해상도를 권장합니다.",
+ "globalResolutionMultipleCameras": "여러 대의 카메라가 구성된 상태에서 전역 감지 해상도가 설정되어 있습니다. 모든 카메라의 해상도와 화면 비율이 동일하지 않다면, 각 카메라의 기본 화면 비율에 맞게 카메라별로 감지 너비와 높이를 지정해야 합니다."
+ },
+ "model": {
+ "optimizedFor320": "Frigate은 대부분의 환경에 가장 적합한 320x320 모델에 최적화되어 있습니다. 640x640 모델은 처리 속도가 느리며 특수한 시나리오에서만 유용합니다.",
+ "inputDimensionsNotDetectResolution": "모델 입력 너비와 높이는 카메라의 감지 해상도가 아니라 객체 감지 모델 자체의 입력 크기입니다. 사용 중인 모델의 크기(일반적으로 320x320 또는 640x640과 같은 정사각형 형태)와 일치해야 합니다."
+ },
+ "ffmpeg": {
+ "hwaccelManualNotRecommended": "수동 하드웨어 가속 인수는 권장되지 않습니다. 특수한 요구 사항이 없다면 하드웨어 환경에 맞는 프리셋을 선택하세요.",
+ "inputsMissingGo2rtcStream": "아래 입력 스트림 중 더 이상 존재하지 않는 go2rtc 재스트림을 가리키는 항목이 있습니다. 기존 재스트림을 선택하거나 카메라 URL을 직접 수동 입력하세요. 그렇지 않으면 카메라 연결에 실패합니다."
+ },
+ "objects": {
+ "genaiNoDescriptionsProvider": "설명을 생성하려면 'descriptions' 역할이 지정된 GenAI 제공업체를 구성해야 합니다."
+ },
+ "faceRecognition": {
+ "globalDisabled": "이 카메라에서 얼굴 인식 기능을 사용하려면 먼저 전역 확장 기능에서 얼굴 인식을 활성화해야 합니다.",
+ "personNotTracked": "얼굴 인식을 사용하려면 'person' 객체가 추적되어야 합니다. 이 카메라의 객체 설정에서 'person'을 활성화하세요.",
+ "modelSizeLarge": "'large' 모델은 원활한 동작을 위해 GPU 또는 NPU가 필요합니다. CPU 전용 시스템에서는 'small' 모델을 사용하세요."
+ },
+ "lpr": {
+ "globalDisabled": "이 카메라에서 차량 번호판 인식 기능을 사용하려면 먼저 전역 확장 기능에서 번호판 인식을 활성화해야 합니다.",
+ "vehicleNotTracked": "차량 번호판 인식을 사용하려면 차량 객체가 추적되어야 합니다. 이 카메라의 객체 설정에서 'car' 또는 다른 차량 유형을 활성화하세요.",
+ "modelSizeLarge": "'large' 모델은 여러 줄로 된 번호판 형식에 최적화되어 있습니다. 사용 지역에 여러 줄 번호판이 사용되지 않는 한, 'small' 모델이 'large'보다 성능이 훨씬 우수하므로 'small' 사용을 권장합니다."
+ },
+ "record": {
+ "noRecordRole": "record 역할이 지정된 스트림이 없습니다. 녹화 기능이 작동하지 않습니다."
+ },
+ "birdseye": {
+ "objectsModeDetectDisabled": "버드아이가 '객체(objects)' 모드로 설정되어 있지만 이 카메라에서 객체 감지가 비활성화되어 있습니다. 해당 카메라는 버드아이에 표시되지 않습니다."
+ },
+ "snapshots": {
+ "detectDisabled": "객체 감지가 비활성화되어 있습니다. 스냅샷은 추적된 객체로부터 생성되므로 스냅샷이 생성되지 않습니다."
+ },
+ "detectors": {
+ "mixedTypes": "모든 감지기는 동일한 유형이어야 합니다. 다른 유형을 사용하려면 기존 감지기를 삭제하세요.",
+ "mixedTypesSuggestion": "모든 감지기는 동일한 유형이어야 합니다. 기존 감지기를 제거하거나 {{type}}을(를) 선택하세요."
+ },
+ "semanticSearch": {
+ "jinav2SmallModelSize": "Jina V2 모델의 'small' 크기는 RAM 소모량과 추론 비용이 높습니다. 외장 GPU 환경에서 'large' 모델을 사용하는 것을 권장합니다."
+ },
+ "onvif": {
+ "autotrackingNoZones": "자동 추적에는 최소 하나 이상의 구역이 필요합니다. '마스크 / 구역'에서 이 카메라에 구역을 정의한 다음, 아래에서 필수 구역으로 지정하세요."
+ }
}
}
diff --git a/web/public/locales/ko/views/system.json b/web/public/locales/ko/views/system.json
index 0631370644..d895b76c10 100644
--- a/web/public/locales/ko/views/system.json
+++ b/web/public/locales/ko/views/system.json
@@ -1,198 +1,247 @@
{
"documentTitle": {
"cameras": "카메라 통계 - Frigate",
- "storage": "저장소 통계 - Frigate",
- "general": "기본 통계 - Frigate",
- "enrichments": "데이터 보강 통계 - Frigate",
+ "storage": "저장 공간 통계 - Frigate",
+ "general": "일반 통계 - Frigate",
+ "enrichments": "확장 기능 통계 - Frigate",
"logs": {
- "frigate": "Frigate 로그 -Frigate",
+ "frigate": "Frigate 로그 - Frigate",
"go2rtc": "Go2RTC 로그 - Frigate",
"nginx": "Nginx 로그 - Frigate",
- "websocket": "메세지 로그 - Frigate"
+ "websocket": "메시지 로그 - Frigate"
}
},
"title": "시스템",
- "metrics": "시스템 통계",
+ "metrics": "시스템 지표",
"logs": {
"download": {
- "label": "다운로드 로그"
+ "label": "로그 다운로드"
},
"copy": {
- "label": "클립보드에 복사하기",
- "success": "클립보드에 로그가 복사되었습니다",
- "error": "클립보드에 로그를 저장할 수 없습니다"
+ "label": "클립보드에 복사",
+ "success": "로그를 클립보드에 복사했습니다",
+ "error": "로그를 클립보드에 복사할 수 없습니다"
},
"type": {
- "label": "타입",
- "timestamp": "시간 기록",
+ "label": "유형",
+ "timestamp": "타임스탬프",
"tag": "태그",
"message": "메시지"
},
- "tips": "서버에서 로그 스트리밍 중",
+ "tips": "서버에서 로그가 실시간 스트리밍 중입니다",
"toast": {
"error": {
"fetchingLogsFailed": "로그 가져오기 오류: {{errorMessage}}",
- "whileStreamingLogs": "스크리밍 로그 중 오류: {{errorMessage}}"
+ "whileStreamingLogs": "로그 스트리밍 중 오류 발생: {{errorMessage}}"
}
},
"websocket": {
- "label": "메세지",
- "pause": "일시중지",
- "resume": "재개",
- "clear": "비우기",
+ "label": "메시지",
+ "pause": "일시 중지",
+ "resume": "다시 시작",
+ "clear": "지우기",
"filter": {
- "all": "전체 항목",
- "topics": "항목",
+ "all": "모든 토픽",
+ "topics": "토픽",
"events": "이벤트",
- "reviews": "리뷰",
+ "reviews": "다시보기",
"classification": "분류",
"face_recognition": "얼굴 인식",
- "lpr": "번호판 인식",
+ "lpr": "차량 번호판 인식 (LPR)",
"system": "시스템",
"camera": "카메라",
"all_cameras": "모든 카메라",
- "cameras_count_one": "{{count}} 카메라",
- "cameras_count_other": "{{count}} 카메라"
+ "cameras_count_one": "카메라 {{count}}대",
+ "cameras_count_other": "카메라 {{count}}대",
+ "camera_activity": "카메라 활동"
},
- "empty": "수신된 메시지 없음",
- "count_one": "{{count}} 메세지",
- "count_other": "{{count}} 메세지"
+ "empty": "수집된 메시지가 아직 없습니다",
+ "count_one": "메시지 {{count}}개",
+ "count_other": "메시지 {{count}}개",
+ "expanded": {
+ "payload": "페이로드"
+ }
}
},
"general": {
- "title": "기본",
+ "title": "일반",
"detector": {
"title": "감지기",
- "inferenceSpeed": "감지 추론 속도",
+ "inferenceSpeed": "감지기 추론 속도",
"temperature": "감지기 온도",
- "cpuUsage": "감지기 CPU 사용률",
- "memoryUsage": "감지기 메모리 사용률",
- "cpuUsageInformation": "감지 모델로 데이터를 입력/출력하기 위한 전처리 과정에서 사용되는 CPU 사용량입니다. GPU나 가속기를 사용하는 경우에도 추론 자체의 사용량은 포함되지 않습니다."
+ "cpuUsage": "감지기 CPU 사용량",
+ "memoryUsage": "감지기 메모리 사용량",
+ "cpuUsageInformation": "감지 모델과의 입출력 데이터를 준비하는 데 사용된 CPU 리소스입니다. GPU 또는 전용 가속기를 사용하더라도 추론 연산 자체의 사용량은 측정되지 않습니다."
},
"hardwareInfo": {
"title": "하드웨어 정보",
- "gpuUsage": "GPU 사용률",
+ "gpuUsage": "GPU 사용량",
"gpuMemory": "GPU 메모리",
"gpuEncoder": "GPU 인코더",
"gpuDecoder": "GPU 디코더",
"gpuInfo": {
"vainfoOutput": {
- "title": "Vainfo 출력",
+ "title": "Vainfo 출력 결과",
"processOutput": "프로세스 출력:",
"processError": "프로세스 오류:",
- "returnCode": "리턴 코드:{{code}}"
+ "returnCode": "반환 코드: {{code}}"
},
"nvidiaSMIOutput": {
- "title": "Nvidia SMI 출력",
- "name": "이름:{{name}}",
- "driver": "드라이버:{{driver}}",
- "cudaComputerCapability": "CUDA Compute Capability:{{cuda_compute}}",
- "vbios": "VBios Info: {{vbios}}"
+ "title": "Nvidia SMI 출력 결과",
+ "name": "이름: {{name}}",
+ "driver": "드라이버: {{driver}}",
+ "cudaComputerCapability": "CUDA 연산 능력: {{cuda_compute}}",
+ "vbios": "VBIOS 정보: {{vbios}}"
},
"copyInfo": {
"label": "GPU 정보 복사"
},
"toast": {
- "success": "GPU 정보가 클립보드에 복사되었습니다"
+ "success": "GPU 정보를 클립보드에 복사했습니다"
},
"closeInfo": {
"label": "GPU 정보 닫기"
}
},
- "npuUsage": "NPU 사용률",
- "npuMemory": "NPU 메모리"
+ "npuUsage": "NPU 사용량",
+ "npuMemory": "NPU 메모리",
+ "gpuCompute": "GPU 연산 / 인코딩",
+ "gpuTemperature": "GPU 온도",
+ "npuTemperature": "NPU 온도"
},
"otherProcesses": {
- "title": "다른 프로세스들",
- "processCpuUsage": "사용중인 CPU 사용률",
- "processMemoryUsage": "사용중인 메모리 사용률"
+ "title": "기타 프로세스",
+ "processCpuUsage": "프로세스 CPU 사용량",
+ "processMemoryUsage": "프로세스 메모리 사용량",
+ "series": {
+ "go2rtc": "go2rtc",
+ "recording": "녹화",
+ "review_segment": "다시보기 세그먼트",
+ "embeddings": "임베딩",
+ "audio_detector": "오디오 감지기"
+ }
}
},
"storage": {
- "title": "스토리지",
- "overview": "전체 현황",
+ "title": "저장 공간",
+ "overview": "개요",
"recordings": {
- "title": "녹화",
- "tips": "이 값은 Frigate 데이터베이스의 녹화 영상이 사용 중인 전체 저장 공간입니다. Frigate는 디스크 내 다른 파일들의 저장 공간은 추적하지 않습니다.",
- "earliestRecording": "가장 오래된 녹화 영상:"
+ "title": "녹화 파일",
+ "tips": "이 수치는 Frigate 데이터베이스에 기록된 녹화 파일이 사용하는 총 저장 공간을 나타냅니다. Frigate은 디스크 상의 모든 파일에 대한 사용량을 추적하지는 않습니다.",
+ "earliestRecording": "가장 오래된 녹화 시점:"
},
"cameraStorage": {
- "title": "카메라 저장소",
+ "title": "카메라별 저장 공간",
"camera": "카메라",
- "unusedStorageInformation": "미사용 저장소 정보",
- "storageUsed": "용량",
- "percentageOfTotalUsed": "전체 대비 비율",
+ "unusedStorageInformation": "여유 공간 정보",
+ "storageUsed": "저장 공간",
+ "percentageOfTotalUsed": "전체 대비 사용 비율",
"bandwidth": "대역폭",
"unused": {
- "title": "미사용",
- "tips": "드라이브에 Frigate 녹화 영상 외에 다른 파일이 저장되어 있는 경우, 이 값은 Frigate에서 실제 사용 가능한 여유 공간을 정확히 나타내지 않을 수 있습니다. Frigate는 녹화 영상 외의 저장 공간 사용량을 추적하지 않습니다."
+ "title": "여유 공간",
+ "tips": "드라이브에 Frigate 녹화본 외에 다른 파일이 저장되어 있는 경우 이 수치가 Frigate에서 사용 가능한 실제 여유 공간과 정확히 일치하지 않을 수 있습니다. Frigate은 자체 녹화본 외부의 저장 공간 사용량을 추적하지 않습니다."
}
},
"shm": {
- "title": "SHM (공유 메모리) 할당량",
- "warning": "현재 SHM 사이즈가 {{total}}MB로 너무 적습니다. 최소 {{min_shm}}MB 이상 올려주세요."
+ "title": "공유 메모리 (SHM) 할당",
+ "warning": "현재 공유 메모리 크기({{total}}MB)가 너무 작습니다. 최소 {{min_shm}}MB 이상으로 늘려주세요.",
+ "frameLifetime": {
+ "title": "프레임 유지 시간",
+ "description": "각 카메라는 공유 메모리에 {{frames}}개의 프레임 슬롯을 가집니다. 가장 빠른 카메라의 프레임 속도를 기준으로, 각 프레임은 덮어쓰기 전까지 약 {{lifetime}}초 동안 유지됩니다."
+ }
}
},
"cameras": {
"title": "카메라",
- "overview": "전체 현황",
+ "overview": "개요",
"info": {
- "aspectRatio": "종횡비",
- "fetching": "카메라 데이터 수집 중",
+ "aspectRatio": "화면비",
+ "fetching": "카메라 데이터 가져오는 중",
"stream": "스트림 {{idx}}",
- "streamDataFromFFPROBE": "스트림 데이터는 ffprobe에서 받습니다.",
+ "streamDataFromFFPROBE": "스트림 데이터는 ffprobe를 통해 가져옵니다.",
"video": "비디오:",
"codec": "코덱:",
"resolution": "해상도:",
"fps": "FPS:",
"unknown": "알 수 없음",
"audio": "오디오:",
- "error": "오류:{{error}}",
- "cameraProbeInfo": "{{camera}} 카메라 장치 정보",
+ "error": "오류: {{error}}",
+ "cameraProbeInfo": "{{camera}} 카메라 탐색 정보",
"tips": {
- "title": "카메라 장치 정보"
+ "title": "카메라 탐색 정보"
+ },
+ "keyframes": {
+ "title": "키프레임 분석",
+ "analyzing": "키프레임 분석 중... {{seconds}}초 남음",
+ "stillAnalyzing": "키프레임을 계속 분석하고 있습니다...",
+ "recordStream": "녹화 스트림:",
+ "keyframeCount": "감지된 키프레임 수:",
+ "observedDuration": "측정 기간:",
+ "gap": "키프레임 간격 (최소 / 평균 / 최대):",
+ "segmentLength": "녹화 세그먼트 길이:",
+ "ok": "키프레임이 약 {{seconds}}초마다 배치되어 녹화 및 재생에 적합합니다.",
+ "warning": "키프레임 간격이 불규칙하거나 멉니다(최대 간격 약 {{seconds}}초). 스마트 코덱(H.264+/H.265+)일 가능성이 높으며 권장되지 않습니다.",
+ "error": "키프레임 간격(약 {{seconds}}초)이 녹화 세그먼트 길이({{segmentTime}}초)를 초과합니다. 일부 세그먼트에 키프레임이 없어 재생에 문제가 발생할 수 있습니다. 카메라에서 스마트/+ 코덱을 끄거나 키프레임 간격을 줄이세요.",
+ "unknown": "키프레임 간격을 확인할 수 없습니다.",
+ "recordDisabled": "이 카메라의 녹화 기능이 비활성화되어 있습니다."
}
},
- "framesAndDetections": "프레임 / 감지 (Detections)",
+ "framesAndDetections": "프레임 / 감지",
"label": {
"camera": "카메라",
"detect": "감지",
"skipped": "건너뜀",
"ffmpeg": "FFmpeg",
- "capture": "캡쳐",
- "overallFramesPerSecond": "전체 초당 프레임",
- "overallDetectionsPerSecond": "전체 초당 감지",
- "overallSkippedDetectionsPerSecond": "전체 초당 건너뛴 감지",
+ "capture": "캡처",
+ "overallFramesPerSecond": "전체 초당 프레임 수",
+ "overallDetectionsPerSecond": "전체 초당 감지 수",
+ "overallSkippedDetectionsPerSecond": "전체 초당 건너뛴 감지 수",
"cameraFfmpeg": "{{camName}} FFmpeg",
- "cameraCapture": "{{camName}} 캡쳐",
+ "cameraCapture": "{{camName}} 캡처",
"cameraDetect": "{{camName}} 감지",
- "cameraFramesPerSecond": "{{camName}} 초당 프레임",
- "cameraDetectionsPerSecond": "{{camName}} 초당 감지",
- "cameraSkippedDetectionsPerSecond": "{{camName}} 초당 건너뛴 감지"
+ "cameraFramesPerSecond": "{{camName}} 초당 프레임 수",
+ "cameraDetectionsPerSecond": "{{camName}} 초당 감지 수",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} 초당 건너뛴 감지 수",
+ "cameraGpu": "{{camName}} GPU"
},
"toast": {
"success": {
- "copyToClipboard": "데이터 정보가 클립보드에 복사되었습니다."
+ "copyToClipboard": "탐색 데이터를 클립보드에 복사했습니다."
},
"error": {
- "unableToProbeCamera": "카메라 정보 알 수 없음: {{errorMessage}}"
+ "unableToProbeCamera": "카메라를 탐색할 수 없음: {{errorMessage}}"
}
+ },
+ "noCameras": {
+ "title": "발견된 카메라 없음"
+ },
+ "connectionQuality": {
+ "title": "연결 상태",
+ "excellent": "매우 좋음",
+ "fair": "보통",
+ "poor": "불안정",
+ "unusable": "사용 불가",
+ "fps": "FPS",
+ "expectedFps": "예상 FPS",
+ "reconnectsLastHour": "재연결 횟수 (최근 1시간)",
+ "stallsLastHour": "지연/끊김 횟수 (최근 1시간)"
}
},
- "lastRefreshed": "마지막 새로고침: ",
+ "lastRefreshed": "마지막 갱신: ",
"stats": {
- "ffmpegHighCpuUsage": "{{camera}} FFmpeg CPU 사용량이 높습니다 ({{ffmpegAvg}}%)",
- "detectHighCpuUsage": "{{camera}} 감지 CPU 사용량이 높습니다 ({{detectAvg}}%)",
- "healthy": "시스템 정상",
- "reindexingEmbeddings": "검색 데이터 재정리 중 ({{processed}}% 완료)",
- "cameraIsOffline": "{{camera}} 오프라인입니다",
- "detectIsSlow": "{{detect}} (이/가) 느립니다 ({{speed}} ms)",
- "detectIsVerySlow": "{{detect}} (이/가) 매우 느립니다 ({{speed}} ms)",
- "shmTooLow": "/dev/shm 할당량을 ({{total}} MB) 최소 {{min}} MB 이상 증가시켜야합니다."
+ "ffmpegHighCpuUsage": "{{camera}} 카메라의 FFmpeg CPU 사용량이 높습니다 ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} 카메라의 감지(detect) CPU 사용량이 높습니다 ({{detectAvg}}%)",
+ "healthy": "시스템 상태가 양호합니다",
+ "reindexingEmbeddings": "임베딩 재색인 중 ({{processed}}% 완료)",
+ "cameraIsOffline": "{{camera}} 카메라가 오프라인 상태입니다",
+ "detectIsSlow": "{{detect}} 처리가 느립니다 ({{speed}}ms)",
+ "detectIsVerySlow": "{{detect}} 처리가 매우 느립니다 ({{speed}}ms)",
+ "shmTooLow": "/dev/shm 할당량({{total}}MB)을 최소 {{min}}MB 이상으로 늘려야 합니다.",
+ "debugReplayActive": "디버그 리플레이 세션이 실행 중입니다"
},
"enrichments": {
- "title": "데이터 보강",
- "infPerSecond": "초당 추론 속도",
+ "title": "확장 기능",
+ "infPerSecond": "초당 추론 횟수",
"embeddings": {
"image_embedding": "이미지 임베딩",
"text_embedding": "텍스트 임베딩",
@@ -203,8 +252,18 @@
"face_recognition_speed": "얼굴 인식 속도",
"plate_recognition_speed": "번호판 인식 속도",
"text_embedding_speed": "텍스트 임베딩 속도",
- "yolov9_plate_detection_speed": "YOLOv9 플레이트 감지 속도",
- "yolov9_plate_detection": "YOLOv9 플레이트 감지"
- }
+ "yolov9_plate_detection_speed": "YOLOv9 번호판 감지 속도",
+ "yolov9_plate_detection": "YOLOv9 번호판 감지",
+ "review_description": "다시보기 설명",
+ "review_description_speed": "다시보기 설명 생성 속도",
+ "review_description_events_per_second": "다시보기 설명",
+ "object_description": "객체 설명",
+ "object_description_speed": "객체 설명 생성 속도",
+ "object_description_events_per_second": "객체 설명",
+ "classification": "{{name}} 분류",
+ "classification_speed": "{{name}} 분류 속도",
+ "classification_events_per_second": "{{name}} 초당 분류 이벤트 수"
+ },
+ "averageInf": "평균 추론 시간"
}
}