Miscellaneous fixes (#23177)

* add optional onClick to EmptyCard

* show EmptyCard in face rec when face library is empty

* add loading indicator

* add description to camera management pane

* Cleanup when use snapshot but can't load snapshot

* Migrate files

* fix birdseye color distortion when configured aspect ratio is unsupported

* Skip processing end for object descriptions

* don't crash if stats is null

* fix genai roles in migration

* frigate+ pane updates

- allow users to select a plus model from the select even when one was not previously loaded
- always show model summary card
- add model filter popover
- add restart button totast

* fix frigate+ pane layout and buttons to match other settings panes

* match button layout in go2rtc settings view

* make audio maintainer respond to dynamic config updates

* check correct zone name in publish state

* fix nested translation extraction for Optional dict and list fields

* mypy

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
This commit is contained in:
Josh Hawkins
2026-05-12 10:20:39 -06:00
committed by GitHub
co-authored by Nicolas Mowen
parent c67170aa20
commit 4e90d254ed
34 changed files with 568 additions and 356 deletions
+46
View File
@@ -0,0 +1,46 @@
{
"documentTitle": "聊天 - Frigate",
"title": "Frigate 聊天",
"subtitle": "你的摄像头管理与智能分析 AI 助手",
"placeholder": "尝试问我任何事儿…",
"error": "出现错误,请稍后重试。",
"processing": "进行中…",
"toolsUsed": "使用:{{tools}}",
"showTools": "显示工具({{count}}",
"hideTools": "隐藏工具",
"call": "调用",
"result": "结果",
"arguments": "参数:",
"response": "响应:",
"attachment_chip_label": "在 {{camera}} 的 {{label}}",
"attachment_chip_remove": "移除附件",
"open_in_explore": "从浏览中打开",
"attach_event_aria": "关联事件 {{eventId}}",
"attachment_picker_paste_label": "或粘贴事件 ID",
"attachment_picker_attach": "关联",
"attachment_picker_placeholder": "关联一个事件",
"quick_reply_find_similar": "查找相似抓拍事件",
"quick_reply_tell_me_more": "了解更多详情",
"quick_reply_when_else": "还在哪些时段出现过?",
"quick_reply_find_similar_text": "查找与此相似的抓拍记录。",
"quick_reply_tell_me_more_text": "了解此条更多详情。",
"starting_requests": {
"show_recent_events": "查看近期事件",
"show_camera_status": "显示摄像头状态",
"recap": "我不在的时候发生了什么?",
"watch_camera": "监控摄像头活动"
},
"quick_reply_when_else_text": "还在哪些时间出现过?",
"anchor": "来源",
"similarity_score": "相似度",
"no_similar_objects_found": "未找到相似目标。",
"semantic_search_required": "必须启用语义搜索才能查找相似目标。",
"send": "发送",
"suggested_requests": "尝试问问:",
"starting_requests_prompts": {
"show_recent_events": "显示最近一小时的事件",
"show_camera_status": "我的摄像头当前状态如何?",
"recap": "我不在的时候发生了什么事?",
"watch_camera": "监控前门,有人出现就通知我"
}
}
@@ -0,0 +1,73 @@
{
"documentTitle": "变动搜索 - Frigate",
"title": "画面变动搜索",
"description": "绘制一个多边形以划定感兴趣区域,并指定时间范围,检索该区域内的异动变化。",
"selectCamera": "画面变动搜索正在加载中",
"startSearch": "开始搜索",
"searchStarted": "搜索已开始",
"searchCancelled": "搜索已取消",
"cancelSearch": "取消",
"searching": "搜索进行中。",
"searchComplete": "搜索完成",
"noResultsYet": "在所选区域内执行搜索,查找异常变化",
"noChangesFound": "所选区域未检测到像素变化",
"changesFound_other": "检测到 {{count}} 处画面变化",
"framesProcessed": "已处理 {{count}} 帧画面",
"jumpToTime": "跳转到该时间",
"results": "结果",
"showSegmentHeatmap": "热力图",
"newSearch": "新的搜索",
"clearResults": "清除结果",
"clearROI": "清除多边形选区",
"polygonControls": {
"points_other": "{{count}} 个点位",
"undo": "撤销上一个点位",
"reset": "重置多边形"
},
"motionHeatmapLabel": "画面变动热力图",
"dialog": {
"title": "画面变动搜索",
"cameraLabel": "摄像头",
"previewAlt": "{{camera}} 摄像头实时预览"
},
"timeRange": {
"title": "搜索范围",
"start": "开始时间",
"end": "结束时间"
},
"settings": {
"title": "搜索设置",
"parallelMode": "并行模式",
"parallelModeDesc": "同时扫描多个录制片段(速度更快,但 CPU 占用会显著升高)",
"threshold": "灵敏度阈值",
"thresholdDesc": "数值越低,可检测到越小的变化(取值范围 1-255)",
"minArea": "最小变化区域",
"minAreaDesc": "最小感兴趣区域变化占比,达到该比例才会判定为有效变动",
"frameSkip": "帧跳过",
"frameSkipDesc": "每隔 N 帧进行一次处理。将该值设置为摄像头的帧率,即可实现每秒处理一帧画面(例如:5 帧 / 秒的摄像头设为 5,30 帧 / 秒的摄像头设为 30)。数值越高处理速度越快,但有可能遗漏短时移动侦测事件。",
"maxResults": "最大结果数",
"maxResultsDesc": "匹配到设定条数的录像事件后,就自动停止检索"
},
"errors": {
"noCamera": "请选择摄像头",
"noROI": "请绘制感兴趣的区域",
"noTimeRange": "请选择时间范围",
"invalidTimeRange": "结束时间必须在开始时间之后",
"searchFailed": "搜索失败:{{message}}",
"polygonTooSmall": "多边形至少需要 3 个顶点",
"unknown": "未知错误"
},
"changePercentage": "{{percentage}}% 已变化",
"metrics": {
"title": "搜索指标",
"segmentsScanned": "已扫描片段数",
"segmentsProcessed": "已处理",
"segmentsSkippedInactive": "已跳过(无活动)",
"segmentsSkippedHeatmap": "已跳过(不在感兴趣区域)",
"fallbackFullRange": "备用全范围扫描",
"framesDecoded": "画面已解码",
"wallTime": "搜索时间",
"segmentErrors": "片段异常",
"seconds": "{{seconds}} 秒"
}
}
@@ -0,0 +1,59 @@
{
"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": "已有回放会话正在运行",
"stopError": "调试回放停止失败:{{error}}",
"goToReplay": "进入回放"
}
},
"page": {
"noSession": "没有正在进行的调试回放会话",
"noSessionDesc": "从历史回放页面启动调试回放:点击工具栏中的操作按钮,选择调试回放即可。",
"goToRecordings": "查看历史记录",
"preparingClip": "正在准备片段…",
"preparingClipDesc": "Frigate 正在拼接所选时间范围的录像片段。时间跨度较大时,该过程可能需要一分钟左右。",
"startingCamera": "开始调试回放中…",
"startError": {
"title": "调试回放启动失败",
"back": "返回历史记录"
},
"sourceCamera": "源摄像头",
"replayCamera": "回放摄像头",
"initializingReplay": "初始化调试回放中…",
"stoppingReplay": "正在停止调试回放…",
"stopReplay": "停止回放",
"confirmStop": {
"title": "要停止调试回放吗?",
"description": "这将终止会话并清除所有临时数据。是否确定?",
"confirm": "停止回放",
"cancel": "取消"
},
"activity": "活动",
"objects": "目标列表",
"audioDetections": "音频检测",
"noActivity": "未检测到活动",
"activeTracking": "活动追踪中",
"noActiveTracking": "没有活动追踪",
"configuration": "配置",
"configurationDesc": "微调调试回放摄像头的移动侦测与目标追踪参数。本次调整不会保存到你的 Frigate 配置文件中。"
}
}