diff --git a/web/public/locales/zh-CN/common.json b/web/public/locales/zh-CN/common.json
index 8fbe31c59..55632e768 100644
--- a/web/public/locales/zh-CN/common.json
+++ b/web/public/locales/zh-CN/common.json
@@ -96,7 +96,10 @@
}
},
"label": {
- "back": "返回"
+ "back": "返回",
+ "hide": "隐藏 {{item}}",
+ "show": "显示 {{item}}",
+ "ID": "ID"
},
"pagination": {
"label": "分页",
@@ -277,5 +280,13 @@
"readTheDocumentation": "阅读文档",
"information": {
"pixels": "{{area}} 像素"
+ },
+ "list": {
+ "two": "{{0}} 和 {{1}}",
+ "many": "{{items}} 以及 {{last}}"
+ },
+ "field": {
+ "optional": "可选",
+ "internalID": "Frigate 在配置与数据库中使用的内部 ID"
}
}
diff --git a/web/public/locales/zh-CN/components/auth.json b/web/public/locales/zh-CN/components/auth.json
index 015fa0ba8..dbfc34994 100644
--- a/web/public/locales/zh-CN/components/auth.json
+++ b/web/public/locales/zh-CN/components/auth.json
@@ -10,6 +10,7 @@
"loginFailed": "登录失败",
"unknownError": "未知错误,请检查日志。",
"webUnknownError": "未知错误,请检查控制台日志。"
- }
+ },
+ "firstTimeLogin": "首次尝试登录?请从 Frigate 日志中查找生成的登录密码等信息。"
}
}
diff --git a/web/public/locales/zh-CN/components/dialog.json b/web/public/locales/zh-CN/components/dialog.json
index bd690a7ab..db2af6069 100644
--- a/web/public/locales/zh-CN/components/dialog.json
+++ b/web/public/locales/zh-CN/components/dialog.json
@@ -59,7 +59,7 @@
"export": "导出",
"selectOrExport": "选择或导出",
"toast": {
- "success": "导出成功。进入 /exports 目录查看文件。",
+ "success": "导出成功。进入 导出 页面查看文件。",
"error": {
"failed": "导出失败:{{error}}",
"endTimeMustAfterStartTime": "结束时间必须在开始时间之后",
@@ -123,6 +123,7 @@
"search": {
"placeholder": "通过标签或子标签搜索……"
},
- "noImages": "未在此摄像头找到缩略图"
+ "noImages": "未在此摄像头找到缩略图",
+ "unknownLabel": "已保存触发的图片"
}
}
diff --git a/web/public/locales/zh-CN/views/events.json b/web/public/locales/zh-CN/views/events.json
index 89f1fade9..a598e68ba 100644
--- a/web/public/locales/zh-CN/views/events.json
+++ b/web/public/locales/zh-CN/views/events.json
@@ -41,9 +41,10 @@
"detail": {
"noDataFound": "没有可供核查的详细数据",
"aria": "切换详细视图",
- "trackedObject_one": "追踪目标",
- "trackedObject_other": "追踪目标",
- "noObjectDetailData": "没有目标详细信息。"
+ "trackedObject_one": "目标或物体",
+ "trackedObject_other": "目标或物体",
+ "noObjectDetailData": "没有目标详细信息。",
+ "label": "详细信息"
},
"objectTrack": {
"trackedPoint": "追踪点",
diff --git a/web/public/locales/zh-CN/views/explore.json b/web/public/locales/zh-CN/views/explore.json
index 7e2c46e4d..fac329f39 100644
--- a/web/public/locales/zh-CN/views/explore.json
+++ b/web/public/locales/zh-CN/views/explore.json
@@ -194,12 +194,22 @@
"audioTranscription": {
"label": "转录",
"aria": "请求音频转录"
+ },
+ "showObjectDetails": {
+ "label": "显示目标轨迹"
+ },
+ "hideObjectDetails": {
+ "label": "隐藏目标轨迹"
+ },
+ "viewTrackingDetails": {
+ "label": "查看追踪详情",
+ "aria": "显示追踪详情"
}
},
"dialog": {
"confirmDelete": {
"title": "确认删除",
- "desc": "删除此追踪目标后将移除快照、所有已保存的嵌入向量数据以及任何相关的目标全周期条目,但在 历史 页面中跟踪对象的录制视频片段不会被删除。
你确定要继续删除该追踪目标吗?"
+ "desc": "删除此追踪目标后将移除快照、所有已保存的嵌入向量数据以及任何相关的目标追踪详情条目,但在 历史 页面中跟踪对象的录制视频片段不会被删除。
你确定要继续删除该追踪目标吗?"
}
},
"noTrackedObjects": "未找到追踪目标",
@@ -220,5 +230,53 @@
},
"concerns": {
"label": "风险等级"
+ },
+ "trackingDetails": {
+ "title": "追踪细节",
+ "noImageFound": "在该时间内没找到图片。",
+ "createObjectMask": "创建目标遮罩",
+ "adjustAnnotationSettings": "调整注释设置",
+ "scrollViewTips": "滚动以查看该目标全周期中的关键时刻。",
+ "autoTrackingTips": "自动追踪摄像头的边框定位可能不准确。",
+ "count": "{{first}} / {{second}}",
+ "trackedPoint": "追踪点",
+ "lifecycleItemDesc": {
+ "visible": "已检测到 {{label}}",
+ "entered_zone": "{{label}} 进入 {{zones}}",
+ "active": "{{label}} 正在活动",
+ "stationary": "{{label}} 变为静止",
+ "attribute": {
+ "faceOrLicense_plate": "检测到 {{label}} 的 {{attribute}} 属性",
+ "other": "{{label}} 被识别为 {{attribute}}"
+ },
+ "gone": "{{label}} 离开",
+ "heard": "{{label}} 被听到",
+ "external": "已检测到 {{label}}",
+ "header": {
+ "zones": "区",
+ "ratio": "占比",
+ "area": "坐标区域"
+ }
+ },
+ "annotationSettings": {
+ "title": "标记设置",
+ "showAllZones": {
+ "title": "显示所有区",
+ "desc": "在目标进入区域的帧中始终显示区域框。"
+ },
+ "offset": {
+ "label": "标记偏移量",
+ "desc": "此数据来自摄像头的检测视频流,但叠加在录制视频流的图像上。由于两个视频流通常不会完全同步,因此边框与画面可能无法完全对齐。不过,可以使用 annotation_offset 字段进行调整。",
+ "millisecondsToOffset": "用于偏移检测标记的毫秒数。 默认值:0",
+ "tips": "提示:假设有一段人从左向右走的事件录制,如果事件时间轴中的边框始终在人的左侧(即后方),则应该减小偏移值;反之,如果边框始终领先于人物,则应增大偏移值。",
+ "toast": {
+ "success": "{{camera}} 的标记偏移量已保存。请重启 Frigate 以应用更改。"
+ }
+ }
+ },
+ "carousel": {
+ "previous": "上一张图",
+ "next": "下一张图"
+ }
}
}
diff --git a/web/public/locales/zh-CN/views/exports.json b/web/public/locales/zh-CN/views/exports.json
index b22d035f1..3270dc4e5 100644
--- a/web/public/locales/zh-CN/views/exports.json
+++ b/web/public/locales/zh-CN/views/exports.json
@@ -13,5 +13,11 @@
"error": {
"renameExportFailed": "重命名导出失败:{{errorMessage}}"
}
+ },
+ "tooltip": {
+ "shareExport": "分享导出",
+ "downloadVideo": "下载视频",
+ "editName": "编辑名称",
+ "deleteExport": "删除导出"
}
}
diff --git a/web/public/locales/zh-CN/views/faceLibrary.json b/web/public/locales/zh-CN/views/faceLibrary.json
index d2420ae25..d43b1c366 100644
--- a/web/public/locales/zh-CN/views/faceLibrary.json
+++ b/web/public/locales/zh-CN/views/faceLibrary.json
@@ -23,11 +23,11 @@
"title": "创建特征库",
"desc": "创建一个新的特征库",
"new": "新建人脸",
- "nextSteps": "建议按以下步骤建立可靠的特征库:
使用训练选项卡为每个检测到的人员选择并训练图像优先使用正脸图像以获得最佳效果,尽可能避免使用侧脸图像进行训练"
+ "nextSteps": "建议按以下步骤建立可靠的特征库:使用近期识别记录选项卡为每个检测到的人员选择并训练图像优先使用正脸图像以获得最佳效果,尽可能避免使用侧脸图像进行训练"
},
"train": {
- "title": "训练",
- "aria": "选择训练",
+ "title": "近期识别记录",
+ "aria": "选择近期识别记录",
"empty": "近期未检测到人脸识别操作"
},
"selectItem": "选择 {{item}}",
diff --git a/web/public/locales/zh-CN/views/settings.json b/web/public/locales/zh-CN/views/settings.json
index e8b496405..255587bfe 100644
--- a/web/public/locales/zh-CN/views/settings.json
+++ b/web/public/locales/zh-CN/views/settings.json
@@ -740,7 +740,7 @@
"triggers": {
"documentTitle": "触发器",
"management": {
- "title": "触发器管理",
+ "title": "触发器",
"desc": "管理 {{camera}} 的触发器。您可以使用“缩略图”类型,基于与所选追踪对象相似的缩略图来触发;也可以使用“描述”类型,基于与您指定的文本相似的描述来触发。"
},
"addTrigger": "添加触发器",
@@ -779,25 +779,28 @@
"form": {
"name": {
"title": "名称",
- "placeholder": "输入触发器名称",
+ "placeholder": "触发器名称",
"error": {
- "minLength": "名称至少要两个字符。",
- "invalidCharacters": "名称只能包含字母、数字、下划线和连字符。",
+ "minLength": "该字段至少需要两个字符。",
+ "invalidCharacters": "该字段只能包含字母、数字、下划线和连字符。",
"alreadyExists": "此摄像头已存在同名触发器。"
- }
+ },
+ "description": "请输入用于识别此触发器的唯一名称或描述"
},
"enabled": {
"description": "开启/关闭此触发器"
},
"type": {
"title": "类型",
- "placeholder": "选择触发类型"
+ "placeholder": "选择触发类型",
+ "description": "当检测到相似的追踪目标描述时触发",
+ "thumbnail": "当检测到相似的追踪目标缩略图时触发"
},
"content": {
"title": "内容",
"imagePlaceholder": "选择图片",
"textPlaceholder": "输入文字内容",
- "imageDesc": "选择一张图片,当检测到相似图片时触发此操作。",
+ "imageDesc": "仅显示最近的 100 张缩略图。如果找不到需要的图片,请前往“浏览”页面查看更早的目标,并从菜单中设置触发器。",
"textDesc": "输入文本,当检测到相似的追踪对象描述时触发此操作。",
"error": {
"required": "内容为必填项。"
@@ -808,7 +811,8 @@
"error": {
"min": "阈值必须大于 0",
"max": "阈值必须小于 1"
- }
+ },
+ "desc": "设置此触发器的相似度阈值。阈值越高,触发所需的匹配就越精确。"
},
"actions": {
"title": "动作",
@@ -839,6 +843,23 @@
"semanticSearch": {
"title": "语义搜索已关闭",
"desc": "必须启用语义搜索功能才能使用触发器。"
+ },
+ "wizard": {
+ "title": "创建触发器",
+ "step1": {
+ "description": "配置触发器的基础设置。"
+ },
+ "step2": {
+ "description": "设置触发此操作的内容。"
+ },
+ "step3": {
+ "description": "配置此触发器的相似度阈值与执行动作。"
+ },
+ "steps": {
+ "nameAndType": "名称与类型",
+ "configureData": "配置数据",
+ "thresholdAndActions": "阈值与动作"
+ }
}
},
"roles": {
@@ -954,11 +975,16 @@
"invalidCharacters": "摄像头名称内有不允许使用的字符",
"nameExists": "该摄像头名称已存在",
"brands": {
- "reolink-rtsp": "不建议使用萤石RTSP协议。建议在摄像头设置中启用HTTP协议,并重新执行摄像头向导。"
- }
+ "reolink-rtsp": "不建议使用萤石 RTSP 协议。建议在摄像头设置中启用 HTTP 协议,并重新运行摄像头添加向导。"
+ },
+ "customUrlRtspRequired": "自定义URL必须以“rtsp://”开头;对于非 RTSP 协议的摄像头流,需手动添加至配置文件。"
},
"docs": {
"reolink": "https://docs.frigate-cn.video/configuration/camera_specific.html#reolink-cameras"
+ },
+ "testing": {
+ "probingMetadata": "正在获取摄像头基本数据……",
+ "fetchingSnapshot": "正在获取摄像头快照……"
}
},
"step2": {
@@ -1037,7 +1063,9 @@
},
"hikvision": {
"substreamWarning": "子码流1被锁定为低分辨率。多数海康威视的摄像头支持额外的子码流,但需要在摄像头设置中手动开启。如果可以,建议检查并使用这些子码流。"
- }
+ },
+ "resolutionHigh": "使用 {{resolution}} 分辨率可能会导致占用更多的系统资源。",
+ "resolutionLow": "使用 {{resolution}} 分辨率可能过低,难以检测较小的物体。"
}
}
},
diff --git a/web/public/locales/zh-Hans/views/classificationModel.json b/web/public/locales/zh-Hans/views/classificationModel.json
new file mode 100644
index 000000000..1714168fc
--- /dev/null
+++ b/web/public/locales/zh-Hans/views/classificationModel.json
@@ -0,0 +1,135 @@
+{
+ "documentTitle": "分类模型",
+ "button": {
+ "deleteClassificationAttempts": "删除分类图片",
+ "renameCategory": "重命名类别",
+ "deleteCategory": "删除类别",
+ "deleteImages": "删除图片",
+ "trainModel": "训练模型"
+ },
+ "toast": {
+ "success": {
+ "deletedCategory": "删除类别",
+ "deletedImage": "删除图片",
+ "categorizedImage": "成功分类图片",
+ "trainedModel": "训练模型成功。",
+ "trainingModel": "已开始训练模型。"
+ },
+ "error": {
+ "deleteImageFailed": "删除失败:{{errorMessage}}",
+ "deleteCategoryFailed": "删除类别失败:{{errorMessage}}",
+ "categorizeFailed": "图片分类失败:{{errorMessage}}",
+ "trainingFailed": "开始训练模型失败:{{errorMessage}}"
+ }
+ },
+ "deleteCategory": {
+ "title": "删除类别",
+ "desc": "确定要删除类别 {{name}} 吗?此操作将永久删除所有关联的图片,并需要重新训练模型。"
+ },
+ "deleteDatasetImages": {
+ "title": "删除图片数据集",
+ "desc": "确定要从 {{dataset}} 中删除 {{count}} 张图片吗?此操作无法撤销,并将需要重新训练模型。"
+ },
+ "deleteTrainImages": {
+ "title": "删除训练的图片",
+ "desc": "确定要删除 {{count}} 张图片吗?此操作无法撤销。"
+ },
+ "renameCategory": {
+ "title": "重命名类别",
+ "desc": "请输入 {{name}} 的新名称。名称变更后需要重新训练模型。"
+ },
+ "description": {
+ "invalidName": "名称无效。名称只能包含字母、数字、空格、撇号、下划线和连字符。"
+ },
+ "train": {
+ "title": "最近分类记录",
+ "aria": "选择最近分类记录"
+ },
+ "categories": "类别",
+ "createCategory": {
+ "new": "创建新类别"
+ },
+ "categorizeImageAs": "图片分类为:",
+ "categorizeImage": "图片分类",
+ "noModels": {
+ "object": {
+ "title": "未创建目标/物体分类模型",
+ "description": "创建自定义模型以分类检测到的目标。",
+ "buttonText": "创建目标/物体模型"
+ },
+ "state": {
+ "title": "尚未创建状态分类模型",
+ "description": "创建自定义模型以监控并分类摄像头特定区域的状态变化。",
+ "buttonText": "创建状态模型"
+ }
+ },
+ "wizard": {
+ "title": "创建新分类",
+ "steps": {
+ "nameAndDefine": "名称与定义",
+ "stateArea": "状态区域",
+ "chooseExamples": "选择范例"
+ },
+ "step1": {
+ "description": "状态模型用于监控摄像头固定区域的状态变化(例如门是否开启或关闭)。目标/物体模型用于为检测到的目标添加分类标签(例如区分宠物、快递员等)。",
+ "name": "名称",
+ "namePlaceholder": "请输入模型名称……",
+ "type": "类型",
+ "typeState": "状态",
+ "typeObject": "目标/物体",
+ "objectLabel": "目标/物体标签",
+ "objectLabelPlaceholder": "请选择目标类型……",
+ "classificationType": "分类方式",
+ "classificationTypeTip": "了解分类方式",
+ "classificationTypeDesc": "子标签会为目标标签添加附加文本(例如:“人员:美团”)。属性是可搜索的元数据,独立存储在对象的元信息中。",
+ "classificationSubLabel": "子标签",
+ "classificationAttribute": "属性",
+ "classes": "类别",
+ "classesTip": "了解类别",
+ "classesStateDesc": "定义摄像头区域内可能出现的不同状态。例如:车库门的“开启”和“关闭”。",
+ "classesObjectDesc": "定义用于分类检测目标的不同类别。例如:人员分类中的“快递员”、“居民”、“陌生人”。",
+ "classPlaceholder": "请输入分类名称……",
+ "errors": {
+ "nameRequired": "模型名称为必填项",
+ "nameLength": "模型名称长度不能超过 64 个字符",
+ "nameOnlyNumbers": "模型名称不能仅包含数字",
+ "classRequired": "至少需要一个类别",
+ "classesUnique": "类别名称必须唯一",
+ "stateRequiresTwoClasses": "状态模型至少需要两个类别",
+ "objectLabelRequired": "请选择一个目标标签",
+ "objectTypeRequired": "请选择一个目标标签"
+ }
+ },
+ "step2": {
+ "description": "选择摄像头,并为摄像头定义要监控的区域。模型将对这些区域的状态进行分类。",
+ "cameras": "摄像头",
+ "selectCamera": "选择摄像头",
+ "noCameras": "点击 + 符号添加摄像头",
+ "selectCameraPrompt": "从列表中选择一个摄像头以定义其检测区域"
+ },
+ "step3": {
+ "selectImagesPrompt": "选择所有属于 {{className}} 的图片",
+ "selectImagesDescription": "点击图像进行选择,完成该类别后点击“继续”。",
+ "generating": {
+ "title": "正在生成样本图片",
+ "description": "Frigate 正在从录像中提取代表性图片。这可能需要一些时间……"
+ },
+ "training": {
+ "title": "正在训练模型",
+ "description": "系统正在后台训练模型。你可以关闭此对话框,训练完成后模型将自动开始运行。"
+ },
+ "retryGenerate": "重新生成",
+ "noImages": "未生成样本图像",
+ "classifying": "正在分类与训练……",
+ "trainingStarted": "已开始模型训练",
+ "errors": {
+ "noCameras": "未配置摄像头",
+ "noObjectLabel": "未选择目标标签",
+ "generateFailed": "示例生成失败:{{error}}",
+ "generationFailed": "生成失败,请重试。",
+ "classifyFailed": "图片分类失败:{{error}}"
+ },
+ "generateSuccess": "样本图片生成成功"
+ }
+ }
+}