Refactor and clean up i18n (#17198)

* clean up i18n

* fix key

* fix key
This commit is contained in:
Josh Hawkins
2025-03-17 06:26:01 -06:00
committed by GitHub
parent 6e3ae0afc2
commit 03da70cb81
74 changed files with 1243 additions and 799 deletions
+50 -24
View File
@@ -34,14 +34,22 @@
"minute": "{{time}}分钟",
"s": "{{time}}秒",
"second": "{{time}}秒",
"formattedTimestamp": "%m月%-d日 %I:%M:%S %p",
"formattedTimestamp.24hour": "%m月%-d日 %H:%M:%S",
"formattedTimestamp2": "%m/%d %I:%M:%S%P",
"formattedTimestamp2.24hour": "%d日%m月 %H:%M:%S",
"formattedTimestampExcludeSeconds": "%m月%-d日 %I:%M %p",
"formattedTimestampExcludeSeconds.24hour": "%m月%-d日 %H:%M",
"formattedTimestampWithYear": "%Y年%m月%-d日 %I:%M:%S %p",
"formattedTimestampWithYear.24hour": "%Y年%m月%-d日 %H:%M",
"formattedTimestamp": {
"12hour": "%m月%-d日 %I:%M:%S %p",
"24hour": "%m月%-d日 %H:%M:%S"
},
"formattedTimestamp2": {
"12hour": "%m/%d %I:%M:%S%P",
"24hour": "%d日%m月 %H:%M:%S"
},
"formattedTimestampExcludeSeconds": {
"12hour": "%m月%-d日 %I:%M %p",
"24hour": "%m月%-d日 %H:%M"
},
"formattedTimestampWithYear": {
"12hour": "%Y年%m月%-d日 %I:%M:%S %p",
"24hour": "%Y年%m月%-d日 %H:%M"
},
"formattedTimestampOnlyMonthAndDay": "%m月%-d日"
},
"unit": {
@@ -55,10 +63,14 @@
},
"pagination": {
"label": "分页",
"previous": "上一页",
"previous.label": "转到上一页",
"next": "一页",
"next.label": "转到下一页",
"previous": {
"title": "上一页",
"label": "转到上一页"
},
"next": {
"title": "下一页",
"label": "转到下一页"
},
"more": "更多页面"
},
"button": {
@@ -105,14 +117,18 @@
"language": {
"en": "English",
"zhCN": "简体中文",
"withSystem.label": "使用系统语言设置"
"withSystem": {
"label": "使用系统语言设置"
}
},
"appearance": "外观",
"darkMode": {
"label": "深色模式",
"light": "浅色",
"dark": "深色",
"withSystem.label": "使用系统深色模式设置"
"withSystem": {
"label": "使用系统深色模式设置"
}
},
"withSystem": "跟随系统",
"theme": {
@@ -125,13 +141,19 @@
"default": "默认"
},
"help": "帮助",
"documentation.label": "Frigate 的官方文档",
"documentation": "文档",
"live": "实时监控",
"live.allCameras": "所有摄像头",
"live.cameras": "摄像头",
"live.cameras.count_one": "{{count}} 个摄像头",
"live.cameras.count_other": "{{count}} 个摄像头",
"documentation": {
"title": "文档",
"label": "Frigate 的官方文档"
},
"live": {
"title": "实时监控",
"allCameras": "所有摄像头",
"cameras": {
"title": "摄像头",
"count_one": "{{count}} 个摄像头",
"count_other": "{{count}} 个摄像头"
}
},
"review": "回放",
"explore": "探测",
"export": "导出",
@@ -142,15 +164,19 @@
"current": "当前用户:{{user}}",
"anonymous": "匿名",
"logout": "登出",
"setPassword": "设置密码"
"setPassword": "设置密码",
"title": "用户"
},
"restart": "重启 Frigate"
},
"toast": {
"copyUrlToClipboard": "已复制链接到剪贴板。",
"save": {
"error": "保存配置信息失败: {{errorMessage}}",
"error.noMessage": "保存配置信息失败"
"title": "保存",
"error": {
"title": "保存配置信息失败: {{errorMessage}}",
"noMessage": "保存配置信息失败"
}
}
},
"role": {
@@ -5,13 +5,15 @@
"edit": "编辑摄像头组",
"delete": {
"label": "删除摄像头组",
"confirm": "确认删除",
"confirm.desc": "你确定要删除摄像头组 <em>{{name}}</em> 吗?"
"confirm": {
"title": "确认删除",
"desc": "你确定要删除摄像头组 <em>{{name}}</em> 吗?"
}
},
"name": {
"label": "名称",
"placeholder": "请输入名称",
"error": {
"errorMessage": {
"mustLeastCharacters": "摄像头组的名称必须至少有 2 个字符。",
"exists": "摄像头组名称已存在。",
"nameMustNotPeriod": "摄像头组名称不能包含英文句号(.)。",
@@ -32,8 +34,10 @@
"audioIsAvailable": "此视频流支持音频",
"audioIsUnavailable": "此视频流不支持音频",
"audio": {
"tips": "音频必须从您的摄像头输出并在 go2rtc 中配置此流。",
"tips.document": "阅读文档(英文) "
"tips": {
"title": "音频必须从您的摄像头输出并在 go2rtc 中配置此流。",
"document": "阅读文档(英文) "
}
},
"streamMethod": {
"label": "视频流方法",
@@ -48,8 +52,10 @@
},
"continuousStreaming": {
"label": "持续视频流",
"desc": "当摄像头画面在仪表板上可见时,始终为实时视频流,即使未检测到活动。",
"desc.warning": "持续视频流可能会导致高带宽使用和性能问题,请谨慎使用。"
"desc": {
"title": "当摄像头画面在仪表板上可见时,始终为实时视频流,即使未检测到活动。",
"warning": "持续视频流可能会导致高带宽使用和性能问题,请谨慎使用。"
}
}
}
},
+34 -17
View File
@@ -15,13 +15,19 @@
"desc": "您希望避开的地点中的物体不应被视为误报。若将其作为误报提交,可能会导致AI模型容易混淆相关物体的识别。"
},
"review": {
"true.label": "为 Frigate Plus 确认此标签",
"true_one": "这是 {{label}}",
"true_other": "这是 {{label}}",
"false.label": "不为 Frigate Plus 确认此标签",
"false_one": "这不是 {{label}}",
"false_other": "这不是 {{label}}",
"state.submitted": "已提交"
"true": {
"label": "为 Frigate Plus 确认此标签",
"true_one": "这是 {{label}}",
"true_other": "这是 {{label}}"
},
"false": {
"label": "不为 Frigate Plus 确认此标签",
"false_one": "这不是 {{label}}",
"false_other": "这不是 {{label}}"
},
"state": {
"submitted": "已提交"
}
}
},
"video": {
@@ -34,10 +40,14 @@
"lastHour_one": "最后1小时",
"lastHour_other": "最后 {{count}} 小时",
"custom": "自定义",
"start": "开始时间",
"start.label": "选择开始时间",
"end": "结束时间",
"end.label": "选择结束时间"
"start": {
"title": "开始时间",
"label": "选择开始时间"
},
"end": {
"title": "结束时间",
"label": "选择结束时间"
}
},
"name": {
"placeholder": "导出项目的名字"
@@ -61,9 +71,11 @@
"streaming": {
"label": "视频流",
"restreaming": {
"NotEnabled": "重新流式传输未启用。",
"desc": "为此摄像头设置 go2rtc,以获取额外的实时预览选项和音频支持。",
"desc.readTheDocumentation": "阅读文档(英文) "
"disabled": "重新流式传输未启用。",
"desc": {
"title": "为此摄像头设置 go2rtc,以获取额外的实时预览选项和音频支持。",
"readTheDocumentation": "阅读文档(英文) "
}
},
"showStats": {
"label": "显示视频流统计信息",
@@ -78,14 +90,19 @@
"placeholder": "请输入搜索名称",
"overwrite": "{{searchName}} 已存在。保存将覆盖现有值。",
"success": "搜索 ({{searchName}}) 已保存。",
"button.save.label": "保存此搜索"
"button": {
"save": {
"label": "保存此搜索"
}
}
}
},
"recording": {
"confirmDelete": {
"title": "确认删除",
"desc": "您确定要删除与此审核项相关的所有录制视频吗?<br /><br />提示:按住 <em>Shift</em> 键点击删除可跳过此对话框。",
"desc.selected": "您确定要删除与此审核项相关的所有录制视频吗?<br /><br />提示:按住 <em>Shift</em> 键点击删除可跳过此对话框。"
"desc": {
"selected": "您确定要删除与此审核项相关的所有录制视频吗?<br /><br />提示:按住 <em>Shift</em> 键点击删除可跳过此对话框。"
}
},
"button": {
"export": "导出",
+39 -23
View File
@@ -2,22 +2,30 @@
"filter": "过滤器",
"labels": {
"label": "标签",
"all": "所有标签",
"all.short": "标签",
"all": {
"title": "所有标签",
"short": "标签"
},
"count": "{{count}} 个标签"
},
"zones": {
"all": "所有区域",
"all.short": "区域"
"all": {
"title": "所有区域",
"short": "区域"
},
"label": "区域"
},
"dates": {
"all": "所有日期",
"all.short": "日期"
"all": {
"title": "所有日期",
"short": "日期"
}
},
"more": "更多筛选项",
"reset.label": "重置筛选器为默认值",
"reset": {
"label": "重置筛选器为默认值"
},
"timeRange": "时间范围",
"zones.label": "区域",
"subLabels": {
"label": "子标签",
"all": "所有子标签"
@@ -45,8 +53,10 @@
},
"cameras": {
"label": "摄像头筛选",
"all": "所有摄像头",
"all.short": "摄像头"
"all": {
"title": "所有摄像头",
"short": "摄像头"
}
},
"review": {
"showReviewed": "显示已查看的项目"
@@ -57,12 +67,16 @@
"explore": {
"settings": {
"title": "设置",
"defaultView": "默认视图",
"defaultView.desc": "当未选择任何过滤器时,显示每个标签最近跟踪对象的摘要,或显示未过滤的网格。",
"defaultView.summary": "摘要",
"defaultView.unfilteredGrid": "未过滤网格",
"gridColumns": "网格列数",
"gridColumns.desc": "选择网格视图中的列数。",
"defaultView": {
"title": "默认视图",
"desc": "当未选择任何过滤器时,显示每个标签最近跟踪对象的摘要,或显示未过滤的网格。",
"summary": "摘要",
"unfilteredGrid": "未过滤网格"
},
"gridColumns": {
"title": "网格列数",
"desc": "选择网格视图中的列数。"
},
"searchSource": {
"label": "搜索源",
"desc": "选择是搜索缩略图还是跟踪对象的描述。",
@@ -70,19 +84,21 @@
"thumbnailImage": "缩略图",
"description": "描述"
}
},
"date": {
"selectDateBy": {
"label": "选择日期进行筛选"
}
}
},
"date": {
"selectDateBy": {
"label": "选择日期进行筛选"
}
}
},
"logSettings": {
"label": "日志级别筛选",
"filterBySeverity": "按严重程度筛选日志",
"loading": "加载中",
"loading.desc": "当日志面板滚动到底部时,新的日志会自动流式加载",
"loading": {
"title": "加载",
"desc": "当日志面板滚动到底部时,新的日志会自动流式加载。"
},
"disableLogStreaming": "禁用日志流式加载",
"allLogs": "所有日志"
},
+23 -11
View File
@@ -13,18 +13,30 @@
},
"cameraDisabled": "摄像机已禁用",
"stats": {
"streamType": "流类型:",
"streamType.short": "类型",
"bandwidth": "带宽:",
"bandwidth.short": "带宽",
"latency": "延迟:",
"latency.short": "延迟",
"latency.value": "{{seconds}} 秒",
"latency.short.value": "{{seconds}} 秒",
"streamType": {
"title": "类型",
"short": "类型"
},
"bandwidth": {
"title": "带宽:",
"short": "带宽"
},
"latency": {
"title": "延迟:",
"value": "{{seconds}} 秒",
"short": {
"title": "延迟",
"value": "{{seconds}} 秒"
}
},
"totalFrames": "总帧数:",
"droppedFrames": "丢帧数:",
"droppedFrames.short": "丢帧",
"droppedFrames.short.value": "{{droppedFrames}} 帧",
"droppedFrames": {
"title": "丢帧数:",
"short": {
"title": "丢帧",
"value": "{{droppedFrames}} 帧"
}
},
"decodedFrames": "解码帧数:",
"droppedFrameRate": "丢帧率:"
},
+18 -10
View File
@@ -58,8 +58,10 @@
},
"annotationSettings": {
"title": "标注设置",
"showAllZones": "显示所有区域",
"showAllZones.desc": "在对象进入区域的帧上始终显示区域",
"showAllZones": {
"title": "显示所有区域",
"desc": "在对象进入区域的帧上始终显示区域。"
},
"offset": {
"label": "标注偏移",
"desc": "这些数据来自摄像头的检测源,但是叠加在录制源的图像上。这两个流不太可能完全同步。因此,边界框和录像不会完全对齐。但是,可以使用 <code>annotation_offset</code> 字段来调整这个问题。",
@@ -98,26 +100,32 @@
}
},
"label": "标签",
"editSubLable": "编辑子标签",
"editSubLable.desc": "为 {{label}} 输入新的子标签",
"editSubLable.desc.noLabel": "为此跟踪对象输入新的子标签",
"topScore": "最高得分",
"topScore.info": "最高分是跟踪对象的最高中位数得分,因此可能与搜索结果缩略图上显示的得分不同。",
"editSubLabel": {
"title": "编辑子标签",
"desc": "为 {{label}} 输入新的子标签",
"descNoLabel": "为此跟踪对象输入新的子标签"
},
"topScore": {
"label": "最高得分",
"info": "最高分是跟踪对象的最高中位数得分,因此可能与搜索结果缩略图上显示的得分不同。"
},
"estimatedSpeed": "预计速度",
"objects": "对象",
"camera": "摄像头",
"zones": "区域",
"timestamp": "时间",
"button": {
"findSimilar": "查找相似项"
"findSimilar": "查找相似项",
"regenerate": {
"title": "重新生成",
"label": "重新生成跟踪对象描述"
}
},
"description": {
"label": "描述",
"placeholder": "跟踪对象的描述",
"aiTips": "在跟踪对象的生命周期结束之前,Frigate 不会向您的生成式 AI 提供商请求描述。"
},
"button.regenerate": "重新生成",
"button.regenerate.label": "重新生成跟踪对象描述",
"expandRegenerationMenu": "展开重新生成菜单",
"regenerateFromSnapshot": "从快照重新生成",
"regenerateFromThumbnails": "从缩略图重新生成",
+37 -37
View File
@@ -1,41 +1,41 @@
{
"documentTitle": "人脸库 - Frigate",
"uploadFaceImage": {
"title": "上传人脸图片",
"desc": "上传图片以扫描人脸并包含在{{pageToggle}}中"
"documentTitle": "人脸库 - Frigate",
"uploadFaceImage": {
"title": "上传人脸图片",
"desc": "上传图片以扫描人脸并包含在{{pageToggle}}中"
},
"createFaceLibrary": {
"title": "创建人脸库",
"desc": "创建一个新的人脸库"
},
"train": {
"title": "训练",
"aria": "选择训练"
},
"selectItem": "选择{{item}}",
"button": {
"deleteFaceAttempts": "尝试删除人脸",
"addFace": "添加人脸",
"uploadImage": "上传图片",
"reprocessFace": "重新处理人脸"
},
"trainFaceAs": "将人脸训练为:",
"trainFaceAsPerson": "将人脸训练为人物",
"toast": {
"success": {
"uploadedImage": "图片上传成功。",
"addFaceLibrary": "人脸库添加成功。",
"deletedFace": "人脸删除成功。",
"trainedFace": "人脸训练成功。",
"updatedFaceScore": "人脸分数更新成功。"
},
"createFaceLibrary": {
"title": "创建人脸库",
"desc": "创建一个新的人脸库"
},
"train": {
"title": "训练",
"aria": "选择训练"
},
"selectItem": "选择{{item}}",
"button": {
"deleteFaceAttempts": "尝试删除人脸",
"addFace": "添加人脸",
"uploadImage": "上传图片",
"reprocessFace:": "重新处理人脸"
},
"trainFaceAs:": "将人脸训练为:",
"trainFaceAsPerson:": "将人脸训练为人物",
"toast": {
"success": {
"uploadedImage": "图片上传成功。",
"addFaceLibrary": "人脸库添加成功。",
"deletedFace": "人脸删除成功。",
"trainedFace": "人脸训练成功。",
"updatedFaceScore": "人脸分数更新成功。"
},
"error": {
"uploadingImageFailed": "图片上传失败:{{errorMessage}}",
"addFaceLibraryFailed": "设置人脸名称失败:{{errorMessage}}",
"deleteFaceFailed": "删除失败:{{errorMessage}}",
"trainFailed": "训练失败:{{errorMessage}}",
"updateFaceScoreFailed": "更新人脸分数失败:{{errorMessage}}"
}
"error": {
"uploadingImageFailed": "图片上传失败:{{errorMessage}}",
"addFaceLibraryFailed": "设置人脸名称失败:{{errorMessage}}",
"deleteFaceFailed": "删除失败:{{errorMessage}}",
"trainFailed": "训练失败:{{errorMessage}}",
"updateFaceScoreFailed": "更新人脸分数失败:{{errorMessage}}"
}
}
}
+8 -4
View File
@@ -106,8 +106,10 @@
"stream": {
"title": "视频流",
"audio": {
"tips": "音频必须从摄像机输出并在 go2rtc 中配置为此视频流使用。",
"tips.documentation": "阅读文档 ",
"tips": {
"title": "音频必须从摄像机输出并在 go2rtc 中配置为此视频流使用。",
"documentation": "阅读文档 "
},
"available": "此视频流支持音频",
"unavailable": "此视频流不支持音频"
},
@@ -148,7 +150,9 @@
},
"editLayout": {
"label": "编辑布局",
"group.label": "编辑摄像机分组",
"group": {
"label": "编辑摄像机分组"
},
"exitEdit": "退出编辑"
}
}
}
+61 -59
View File
@@ -1,65 +1,67 @@
{
"search": "搜索",
"savedSearches": "已保存的搜索",
"searchFor": "搜索 {{inputValue}}",
"button": {
"clear": "清除搜索",
"save": "保存搜索",
"delete": "删除已保存的搜索",
"filterInformation": "筛选信息",
"filterActive": "筛选器已激活"
"search": "搜索",
"savedSearches": "已保存的搜索",
"searchFor": "搜索 {{inputValue}}",
"button": {
"clear": "清除搜索",
"save": "保存搜索",
"delete": "删除已保存的搜索",
"filterInformation": "筛选信息",
"filterActive": "筛选器已激活"
},
"trackedObjectId": "跟踪对象 ID",
"filter": {
"label": {
"cameras": "摄像机",
"labels": "标签",
"zones": "区域",
"sub_labels": "子标签",
"search_type": "搜索类型",
"time_range": "时间范围",
"before": "之前",
"after": "之后",
"min_score": "最低分数",
"max_score": "最高分数",
"min_speed": "最低速度",
"max_speed": "最高速度",
"recognized_license_plate": "识别的车牌",
"has_clip": "包含片段",
"has_snapshot": "包含快照"
},
"trackedObjectId": "跟踪对象 ID",
"filter": {
"label": {
"cameras": "摄像机",
"labels": "标签",
"zones": "区域",
"sub_labels": "子标签",
"search_type": "搜索类型",
"time_range": "时间范围",
"before": "之前",
"after": "之后",
"min_score": "最低分数",
"max_score": "最高分数",
"min_speed": "最低速度",
"max_speed": "最高速度",
"recognized_license_plate": "识别的车牌",
"has_clip": "包含片段",
"has_snapshot": "包含快照"
},
"searchType": {
"thumbnail": "缩略图",
"description": "描述"
},
"toast": {
"error": {
"beforeDateBeLaterAfter": "“之前”日期必须晚于“之后”日期。",
"afterDatebeEarlierBefore": "“之后”日期必须早于“之前”日期。",
"minScoreMustBeLessOrEqualMaxScore": "最小分值 必须小于或等于 最大分值。",
"maxScoreMustBeGreaterOrEqualMinScore": "最大分值 必须大于或等于 最小分值",
"minSpeedMustBeLessOrEqualMaxSpeed": "最低速度 必须小于或等于 最高速度",
"maxSpeedMustBeGreaterOrEqualMinSpeed": "最高速度 必须大于或等于 最低速度"
}
},
"tips": {
"title": "如何使用文本筛选器(英文)",
"desc": "筛选器可帮助您缩小搜索范围。注意,目前还暂不支持中文搜索。以下是在输入字段中使用筛选器的方法:",
"desc.step": "<ul className=\"list-disc pl-5 text-sm text-primary-variant\"><li>输入筛选器名称后跟一个冒号(例如:“cameras:”)。</li><li>从建议中选择一个值或输入您自己的值。</li><li>使用多个筛选器时,可以在它们之间用空格分隔。</li><li>日期筛选器(before: 和 after:)使用 <em>{{DateFormat}}</em> 格式。</li><li>时间范围筛选器使用 <em>{{exampleTime}}</em> 格式。</li><li>点击筛选器旁边的“x”即可移除筛选条件。</li></ul>",
"desc.example": "示例:<code className=\"text-primary\">cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM</code>"
},
"header": {
"currentFilterType": "筛选值",
"noFilters": "筛选条件",
"activeFilters": "激活的筛选项"
}
"searchType": {
"thumbnail": "缩略图",
"description": "描述"
},
"similaritySearch": {
"title": "相似搜索",
"active": "相似搜索已激活",
"clear": "清除相似搜索"
"toast": {
"error": {
"beforeDateBeLaterAfter": "“之前”日期必须晚于“之后”日期。",
"afterDatebeEarlierBefore": "“之后”日期必须早于“之前”日期。",
"minScoreMustBeLessOrEqualMaxScore": "最小分值 必须小于或等于 最大分值。",
"maxScoreMustBeGreaterOrEqualMinScore": "最大分值 必须大于或等于 最小分值",
"minSpeedMustBeLessOrEqualMaxSpeed": "最低速度 必须小于或等于 最高速度",
"maxSpeedMustBeGreaterOrEqualMinSpeed": "最高速度 必须大于或等于 最低速度"
}
},
"placeholder": {
"search": "搜索..."
"tips": {
"title": "如何使用文本筛选器(英文)",
"desc": {
"text": "筛选器可帮助您缩小搜索范围。注意,目前还暂不支持中文搜索。以下是在输入字段中使用筛选器的方法:",
"step": "<ul className=\"list-disc pl-5 text-sm text-primary-variant\"><li>输入筛选器名称后跟一个冒号(例如:“cameras:”)。</li><li>从建议中选择一个值或输入您自己的值。</li><li>使用多个筛选器时,可以在它们之间用空格分隔。</li><li>日期筛选器(before: 和 after:)使用 <em>{{DateFormat}}</em> 格式。</li><li>时间范围筛选器使用 <em>{{exampleTime}}</em> 格式。</li><li>点击筛选器旁边的“x”即可移除筛选条件。</li></ul>",
"example": "示例:<code className=\"text-primary\">cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM</code>"
}
},
"header": {
"currentFilterType": "筛选值",
"noFilters": "筛选条件",
"activeFilters": "激活的筛选项"
}
},
"similaritySearch": {
"title": "相似搜索",
"active": "相似搜索已激活",
"clear": "清除相似搜索"
},
"placeholder": {
"search": "搜索..."
}
}
+167 -81
View File
@@ -88,10 +88,14 @@
"modelSize": {
"label": "模型大小",
"desc": "用于语义搜索的语言模型大小",
"small": "小",
"large": "",
"small.desc": "使用 <strong>小</strong>模型。该模型将使用较少的内存,在CPU上也能较快的运行。质量较好。",
"large.desc": "使用 <strong>大</strong>模型。该模型采用了完整的Jina模型,并在适用的情况下使用GPU。"
"small": {
"title": "",
"desc": "使用 <strong>小</strong>模型。该模型将使用较少的内存,在CPU上也能较快的运行。质量较好。"
},
"large": {
"title": "大",
"desc": "使用 <strong>大</strong>模型。该模型采用了完整的Jina模型,并在适用的情况下使用GPU。"
}
}
},
"faceRecognition": {
@@ -129,9 +133,11 @@
"objectAlertsTips": "所有的 {{alertsLabels}} 对象在 {{cameraName}} 都将显示为警告。",
"zoneObjectAlertsTips": "所有的 {{alertsLabels}} 对象在 {{cameraName}} 的 {{zone}} 区域都将显示为警告。",
"objectDetectionsTips": "所有未在 {{cameraName}} 归类的 {{detectionsLabels}} 对象,无论它位于哪个区域,都将显示为检测。",
"zoneObjectDetectionsTips": "所有未在 {{cameraName}} 上归类为 {{detectionsLabels}} 的对象在 {{zone}} 区域都将显示为检测。",
"zoneObjectDetectionsTips.notSelectDetections": "所有在 {{cameraName}} 的 {{zone}} 上检测到的未归类为警告的 {{detectionsLabels}} 对象,无论它位于哪个区域都将显示为检测。",
"zoneObjectDetectionsTips.regardlessOfZoneObjectDetectionsTips": "所有在 {{cameraName}} 归类的 {{detectionsLabels}} 对象,无论它位于哪个区域,都将显示为检测。",
"zoneObjectDetectionsTips": {
"text": "所有在 {{cameraName}} 上归类为 {{detectionsLabels}} 对象在 {{zone}} 区域都将显示为检测。",
"notSelectDetections": "所有在 {{cameraName}} 的 {{zone}} 上检测到的未归类为警告的 {{detectionsLabels}} 对象,无论它位于哪个区域,都将显示为检测。",
"regardlessOfZoneObjectDetectionsTips": "所有未在 {{cameraName}} 归类的 {{detectionsLabels}} 对象,无论它位于哪个区域,都将显示为检测。"
},
"selectAlertsZones": "选择要显示为警告的区域",
"selectDetectionsZones": "选择检测区域",
"limitDetections": "限制仅在特定区域内进行检测",
@@ -162,13 +168,27 @@
"hasIllegalCharacter": "区域名称包含非法字符。"
}
},
"distance.error": "距离必须大于或等于 0.1。",
"distance.error.mustBeFilled": "所有距离字段必须填写才能使用速度估算。",
"inertia.error.mustBeAboveZero": "惯性必须大于 0。",
"loiteringTime.error.mustBeGreaterOrEqualZero": "徘徊时间必须大于或等于 0。",
"distance": {
"error": {
"text": "距离必须大于或等于 0.1。",
"mustBeFilled": "所有距离字段必须填写才能使用速度估算。"
}
},
"inertia": {
"error": {
"mustBeAboveZero": "惯性必须大于 0。"
}
},
"loiteringTime": {
"error": {
"mustBeGreaterOrEqualZero": "徘徊时间必须大于或等于 0。"
}
},
"polygonDrawing": {
"removeLastPoint": "删除最后一个点",
"reset.label": "清除所有点",
"reset": {
"label": "清除所有点"
},
"snapPoints": {
"true": "启用点对齐",
"false": "禁用点对齐"
@@ -186,77 +206,123 @@
"zones": {
"label": "区域",
"documentTitle": "编辑区域 - Frigate",
"desc": "该功能允许你定义特定区域,以便你可以确定特定对象是否在该区域内。",
"desc.documentation": "文档(英文)",
"desc": {
"title": "该功能允许你定义特定区域,以便你可以确定特定对象是否在该区域内。",
"documentation": "文档(英文)"
},
"add": "添加区域",
"edit": "编辑区域",
"point_one": "{{count}} 点",
"point_other": "{{count}} 点",
"clickDrawPolygon": "在图像上点击添加点绘制多边形区域。",
"name": "区域名称",
"name.inputPlaceHolder": "请输入名称",
"name.tips": "名称至少包含两个字符,且不能和摄像头或其他区域同名。<br>当前仅支持英文与数字组合",
"inertia": "惯性",
"inertia.desc": "识别指定对象前该对象必须在这个区域内出现了多少帧。<em>默认值:3</em>",
"loiteringTime": "停留时间",
"loiteringTime.desc": "设置对象必须在区域中活动的最小时间(单位为秒)。<em>默认值:0</em>",
"objects": "对象",
"objects.desc": "将在此区域应用的对象列表。",
"name": {
"title": "区域名称",
"inputPlaceHolder": "请输入名称",
"tips": "名称至少包含两个字符,且不能和摄像头或其他区域同名。<br>当前仅支持英文与数字组合"
},
"inertia": {
"title": "惯性",
"desc": "识别指定对象前该对象必须在这个区域内出现了多少帧。<em>默认值:3</em>"
},
"loiteringTime": {
"title": "停留时间",
"desc": "设置对象必须在区域中活动的最小时间(单位为秒)。<em>默认值:0</em>"
},
"objects": {
"title": "对象",
"desc": "将在此区域应用的对象列表。"
},
"allObjects": "所有对象",
"speedEstimation": "速度估算",
"speedEstimation.desc": "启用此区域内物体的速度估算。该区域必须恰好包含 4 个点。",
"speedThreshold": "速度阈值 ({{unit}})",
"speedThreshold.desc": "指定物体在此区域内被视为有效的最低速度。",
"speedThreshold.toast.error.pointLengthError": "此区域的速度估算已禁用。启用速度估算的区域必须恰好包含 4 个点。",
"speedThreshold.toast.error.loiteringTimeError": "徘徊时间大于 0 的区域不应与速度估算一起使用。",
"toast.success": "区域 ({{zoneName}}) 已保存。请重启 Frigate 以应用更改。"
"speedEstimation": {
"title": "速度估算",
"desc": "启用此区域内物体的速度估算。该区域必须恰好包含 4 个点。"
},
"speedThreshold": {
"title": "速度阈值 ({{unit}})",
"desc": "指定物体在此区域内被视为有效的最低速度。",
"toast": {
"error": {
"pointLengthError": "此区域的速度估算已禁用。启用速度估算的区域必须恰好包含 4 个点。",
"loiteringTimeError": "徘徊时间大于 0 的区域不应与速度估算一起使用。"
}
}
},
"toast": {
"success": "区域 ({{zoneName}}) 已保存。请重启 Frigate 以应用更改。"
}
},
"motionMasks": {
"label": "运动遮罩",
"documentTitle": "编辑运动遮罩 - Frigate",
"desc": "运动遮罩用于防止触发不必要的运动类型。过度的设置遮罩将使对象更加难以被追踪",
"desc.documentation": "文档(英文)",
"desc": {
"title": "运动遮罩用于防止触发不必要的运动类型。过度的设置遮罩将使对象更加难以被追踪",
"documentation": "文档(英文)"
},
"add": "添加运动遮罩",
"edit": "编辑运动遮罩",
"context": "运动遮罩用于防止不需要的运动类型触发检测(例如:树枝、摄像头显示的时间等)。运动遮罩需要<strong>谨慎使用</strong>,过度的遮罩会导致追踪对象变得更加困难。",
"context.documentation": "阅读文档(英文)",
"context": {
"title": "运动遮罩用于防止不需要的运动类型触发检测(例如:树枝、摄像头显示的时间等)。运动遮罩需要<strong>谨慎使用</strong>,过度的遮罩会导致追踪对象变得更加困难。",
"documentation": "阅读文档(英文)"
},
"point_one": "{{count}} 点",
"point_other": "{{count}} 点",
"clickDrawPolygon": "在图像上点击添加点绘制多边形区域。",
"polygonAreaTooLarge": "运动遮罩的大小达到了摄像头画面的{{polygonArea}}%。不建议设置太大的运动遮罩。",
"polygonAreaTooLarge.tips": "运动遮罩不会阻止检测到对象,你应该使用区域来限制检测对象。",
"polygonAreaTooLarge.documentation": "阅读文档(英文)",
"toast.success": "{{polygonName}} 已保存。请重启 Frigate 以应用更改。",
"toast.success.noName": "运动遮罩已保存。请重启 Frigate 以应用更改。"
"polygonAreaTooLarge": {
"title": "运动遮罩的大小达到了摄像头画面的{{polygonArea}}%。不建议设置太大的运动遮罩。",
"tips": "运动遮罩不会阻止检测到对象,你应该使用区域来限制检测对象。",
"documentation": "阅读文档(英文)"
},
"toast": {
"success": {
"title": "{{polygonName}} 已保存。请重启 Frigate 以应用更改。",
"noName": "运动遮罩已保存。请重启 Frigate 以应用更改。"
}
}
},
"objectMasks": {
"label": "对象遮罩",
"documentTitle": "编辑对象遮罩 - Frigate",
"desc": "对象过滤器用于防止特定位置的指定对象被误报。",
"documentation": "文档(英文)",
"desc": {
"title": "对象过滤器用于防止特定位置的指定对象被误报。",
"documentation": "文档(英文)"
},
"add": "添加对象遮罩",
"edit": "编辑对象遮罩",
"context": "对象过滤器用于防止特定位置的指定对象被误报。",
"point_one": "{{count}} 点",
"point_other": "{{count}} 点",
"clickDrawPolygon": "在图像上点击添加点绘制多边形区域。",
"objects": "对象",
"objects.desc": "将应用于此对象遮罩的对象列表。",
"objects.allObjectTypes": "所有对象类型",
"toast.success": "{{polygonName}} 已保存。请重启 Frigate 以应用更改。",
"toast.success.noName": "对象遮罩已保存。请重启 Frigate 以应用更改。"
"objects": {
"title": "对象",
"desc": "将应用于此对象遮罩的对象列表。",
"allObjectTypes": "所有对象类型"
},
"toast": {
"success": {
"title": "{{polygonName}} 已保存。请重启 Frigate 以应用更改。",
"noName": "对象遮罩已保存。请重启 Frigate 以应用更改。"
}
}
}
},
"motionDetectionTuner": {
"title": "运动检测调整器",
"desc": "Frigate 将使用运动检测作为首个步骤,以确认一帧画面中是否有对象需要使用对象检测。",
"desc.documentation": "阅读有关运动检测的文档(英文)",
"Threshold": "阈值",
"Threshold.desc": "阈值决定像素亮度高于多少时会被认为是运动。<em>默认值:30</em>",
"contourArea": "轮廓面积",
"contourArea.desc": "轮廓面积决定哪些变化的像素组符合运动条件。<em>默认值:10</em>",
"improveContrast": "提高对比度",
"improveContrast.desc": "提高较暗场景的对比度。默认值:开启",
"desc": {
"title": "Frigate 将使用运动检测作为首个步骤,以确认一帧画面中是否有对象需要使用对象检测。",
"documentation": "阅读有关运动检测的文档(英文)"
},
"Threshold": {
"title": "阈值",
"desc": "阈值决定像素亮度高于多少时会被认为是运动。<em>默认值:30</em>"
},
"contourArea": {
"title": "轮廓面积",
"desc": "轮廓面积决定哪些变化的像素组符合运动条件。<em>默认值:10</em>"
},
"improveContrast": {
"title": "提高对比度",
"desc": "提高较暗场景的对比度。默认值:开启"
},
"toast": {
"success": "运动设置已保存。"
}
@@ -310,8 +376,10 @@
},
"users": {
"title": "用户",
"management": "用户管理",
"management.desc": "管理此 Frigate 实例的用户账户。",
"management": {
"title": "用户管理",
"desc": "管理此 Frigate 实例的用户账户。"
},
"addUser": "添加用户",
"updatePassword": "修改密码",
"toast": {
@@ -339,30 +407,40 @@
},
"dialog": {
"form": {
"user": "用户名",
"user.desc": "仅允许使用字母、数字、句点和下划线。",
"user.placeholder": "请输入用户名",
"password": "密码",
"password.placeholder": "请输入密码",
"password.confirm": "确认密码",
"password.confirm.placeholder": "请再次输入密码",
"password.strength": "密码强度:",
"password.strength.weak": "弱",
"password.strength.medium": "中等",
"password.strength.strong": "强",
"password.strength.veryStrong": "非常强",
"password.match": "密码匹配",
"password.notMatch": "密码不匹配",
"newPassword": "新密码",
"newPassword.placeholder": "请输入新密码",
"newPassword.confirm.placeholder": "请再次输入新密码",
"user": {
"title": "用户名",
"desc": "仅允许使用字母、数字、句点和下划线。",
"placeholder": "请输入用户名"
},
"password": {
"title": "密码",
"placeholder": "请输入密码",
"confirm": {
"title": "确认密码",
"placeholder": "请再次输入密码"
},
"strength": {
"title": "密码强度:",
"weak": "",
"medium": "中等",
"strong": "强",
"veryStrong": "非常强"
},
"match": "密码匹配",
"notMatch": "密码不匹配"
},
"newPassword": {
"title": "新密码",
"placeholder": "请输入新密码",
"confirm": {
"placeholder": "请再次输入新密码"
}
},
"usernameIsRequired": "用户名为必填项"
},
"createUser": {
"title": "创建新用户",
"desc": "创建一个新用户账户,并指定一个角色以控制访问 Frigate UI 的权限。",
"user": "用户",
"password": "密码",
"usernameOnlyInclude": "用户名只能包含字母、数字和 _"
},
"deleteUser": {
@@ -398,12 +476,16 @@
"desc": "网页推送通知需要安全连接(<code>https://...</code>)。这是浏览器的限制。请通过安全方式访问 Frigate 以使用通知功能。",
"documentation": "阅读文档(英文)"
},
"email": "电子邮箱",
"email.placeholder": "例如:example@email.com",
"email.desc": "需要输入有效的电子邮件,在推送服务出现问题时,将使用此电子邮件进行通知。",
"cameras": "摄像头",
"cameras.noCameras": "没有可用的摄像头",
"cameras.desc": "选择要启用通知的摄像头。",
"email": {
"title": "电子邮箱",
"placeholder": "例如:example@email.com",
"desc": "需要输入有效的电子邮件,在推送服务出现问题时,将使用此电子邮件进行通知。"
},
"cameras": {
"title": "摄像头",
"noCameras": "没有可用的摄像头",
"desc": "选择要启用通知的摄像头。"
},
"deviceSpecific": "设备专用设置",
"registerDevice": "注册该设备",
"unregisterDevice": "取消注册该设备",
@@ -429,5 +511,9 @@
"registerFailed": "通知注册失败。"
}
}
},
"cameraSetting": {
"camera": "相机",
"noCamera": "没有相机"
}
}
+10 -4
View File
@@ -63,8 +63,12 @@
"cudaComputerCapability": "CUDA计算能力:{{cuda_compute}}",
"vbios": "VBios信息:{{vbios}}"
},
"closeInfo.label": "关闭GPU信息",
"copyInfo.label": "复制GPU信息",
"closeInfo": {
"label": "关闭GPU信息"
},
"copyInfo": {
"label": "复制GPU信息"
},
"toast": {
"success": "已复制GPU信息到剪贴板"
}
@@ -87,12 +91,14 @@
"cameraStorage": {
"title": "摄像头存储",
"camera": "摄像头",
"unused": "未使用",
"unusedStorageInformation": "未使用存储信息",
"storageUsed": "存储使用",
"percentageOfTotalUsed": "总使用率",
"bandwidth": "带宽",
"unused.tips": "如果您的驱动器上存储了除 Frigate 录制内容之外的其他文件,该值可能无法准确反映 Frigate 可用的剩余空间。Frigate 不会追踪录制内容以外的存储使用情况。"
"unused": {
"title": "未使用",
"tips": "如果您的驱动器上存储了除 Frigate 录制内容之外的其他文件,该值可能无法准确反映 Frigate 可用的剩余空间。Frigate 不会追踪录制内容以外的存储使用情况。"
}
}
},
"cameras": {