Add missing keys

This commit is contained in:
Nicolas Mowen 2025-08-20 07:15:14 -06:00
parent a289ed1f90
commit 8c1ba16df2
4 changed files with 30 additions and 22 deletions

View File

@ -34,5 +34,7 @@
"selected_one": "{{count}} selected", "selected_one": "{{count}} selected",
"selected_other": "{{count}} selected", "selected_other": "{{count}} selected",
"camera": "Camera", "camera": "Camera",
"detected": "detected" "detected": "detected",
"suspiciousActivity": "Suspicious Activity",
"threateningActivity": "Threatening Activity"
} }

View File

@ -132,6 +132,9 @@
"label": "Top Score", "label": "Top Score",
"info": "The top score is the highest median score for the tracked object, so this may differ from the score shown on the search result thumbnail." "info": "The top score is the highest median score for the tracked object, so this may differ from the score shown on the search result thumbnail."
}, },
"score": {
"label": "Score"
},
"recognizedLicensePlate": "Recognized License Plate", "recognizedLicensePlate": "Recognized License Plate",
"estimatedSpeed": "Estimated Speed", "estimatedSpeed": "Estimated Speed",
"objects": "Objects", "objects": "Objects",
@ -213,5 +216,11 @@
"error": "Failed to delete tracked object: {{errorMessage}}" "error": "Failed to delete tracked object: {{errorMessage}}"
} }
} }
},
"aiAnalysis": {
"title": "AI Analysis"
},
"concerns": {
"label": "Concerns"
} }
} }

View File

@ -86,10 +86,10 @@ export default function ReviewDetailDialog({
let concerns = ""; let concerns = "";
switch (aiAnalysis.potential_threat_level) { switch (aiAnalysis.potential_threat_level) {
case ThreatLevel.SUSPICIOUS: case ThreatLevel.SUSPICIOUS:
concerns = "• Suspicious Activity\n"; concerns = `${t("suspiciousActivity", { ns: "views/events" })}\n`;
break; break;
case ThreatLevel.DANGER: case ThreatLevel.DANGER:
concerns = "• Danger\n"; concerns = `${t("threateningActivity", { ns: "views/events" })}\n`;
break; break;
} }
@ -98,7 +98,7 @@ export default function ReviewDetailDialog({
}); });
return concerns || "None"; return concerns || "None";
}, [aiAnalysis]); }, [aiAnalysis, t]);
const hasMismatch = useMemo(() => { const hasMismatch = useMemo(() => {
if (!review || !events) { if (!review || !events) {
@ -270,12 +270,18 @@ export default function ReviewDetailDialog({
isDesktop && "m-2 w-[90%]", isDesktop && "m-2 w-[90%]",
)} )}
> >
AI Analysis {t("aiAnalysis.title")}
<div className="text-sm text-primary/40">Description</div> <div className="text-sm text-primary/40">
{t("description.label")}
</div>
<div className="text-sm">{aiAnalysis.scene}</div> <div className="text-sm">{aiAnalysis.scene}</div>
<div className="text-sm text-primary/40">Score</div> <div className="text-sm text-primary/40">
{t("score.label")}
</div>
<div className="text-sm">{aiAnalysis.confidence * 100}%</div> <div className="text-sm">{aiAnalysis.confidence * 100}%</div>
<div className="text-sm text-primary/40">Concerns</div> <div className="text-sm text-primary/40">
{t("concerns.label")}
</div>
<div className="text-sm">{aiThreatLevel}</div> <div className="text-sm">{aiThreatLevel}</div>
</div> </div>
)} )}

View File

@ -317,20 +317,11 @@ export default function PreviewThumbnailPlayer({
</TooltipTrigger> </TooltipTrigger>
</div> </div>
<TooltipContent className="smart-capitalize"> <TooltipContent className="smart-capitalize">
{[ {review.data.metadata.potential_threat_level == 1 ? (
...new Set([ <>{t("suspiciousActivity", { ns: "views/events" })}</>
...(review.data.objects || []), ) : (
...(review.data.sub_labels || []), <>{t("threateningActivity", { ns: "views/events" })}</>
...(review.data.audio || []), )}
]),
]
.filter(
(item) => item !== undefined && !item.includes("-verified"),
)
.map((text) => capitalizeFirstLetter(text))
.sort()
.join(", ")
.replaceAll("-verified", "")}
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
)} )}