* i18n translated label fixes

* Fix frame cache race bug

Objects that were marked as false positives (that would later become true positives) would sometimes have their saved frame prematurely removed from the frame cache.
This commit is contained in:
Josh Hawkins 2025-06-26 09:25:47 -05:00 committed by GitHub
parent fd96cd5dae
commit 5593495abd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 12 additions and 21 deletions

View File

@ -426,7 +426,7 @@ class CameraState:
current_thumb_frames = {
obj.thumbnail_data["frame_time"]
for obj in tracked_objects.values()
if not obj.false_positive and obj.thumbnail_data is not None
if obj.thumbnail_data is not None
}
current_best_frames = {
obj.thumbnail_data["frame_time"] for obj in self.best_objects.values()

View File

@ -264,9 +264,7 @@ function GeneralFilterButton({
}
if (selectedLabels.length == 1) {
return t(selectedLabels[0], {
ns: "objects",
});
return getTranslatedLabel(selectedLabels[0]);
}
return t("labels.count", {

View File

@ -52,6 +52,7 @@ import useSWR from "swr";
import { FrigateConfig } from "@/types/frigateConfig";
import { MdImageSearch } from "react-icons/md";
import { useTranslation } from "react-i18next";
import { getTranslatedLabel } from "@/utils/i18n";
type InputWithTagsProps = {
inputFocused: boolean;
@ -419,9 +420,7 @@ export default function InputWithTags({
? t("button.yes", { ns: "common" })
: t("button.no", { ns: "common" });
} else if (filterType === "labels") {
return t(filterValues as string, {
ns: "objects",
});
return getTranslatedLabel(filterValues as string);
} else if (filterType === "search_type") {
return t("filter.searchType." + (filterValues as string));
} else {
@ -828,9 +827,7 @@ export default function InputWithTags({
>
{t("filter.label." + filterType)}:{" "}
{filterType === "labels"
? t(value, {
ns: "objects",
})
? getTranslatedLabel(value)
: value.replaceAll("_", " ")}
<button
onClick={() =>

View File

@ -42,6 +42,7 @@ import { TooltipPortal } from "@radix-ui/react-tooltip";
import { LuSearch } from "react-icons/lu";
import useKeyboardListener from "@/hooks/use-keyboard-listener";
import { Trans, useTranslation } from "react-i18next";
import { getTranslatedLabel } from "@/utils/i18n";
type ReviewDetailDialogProps = {
review?: ReviewSegment;
@ -328,11 +329,7 @@ export default function ReviewDetailDialog({
ns="views/explore"
values={{
objects: missingObjects
.map((x) =>
t(x, {
ns: "objects",
}),
)
.map((x) => getTranslatedLabel(x))
.join(", "),
}}
>

View File

@ -77,6 +77,7 @@ import { Trans, useTranslation } from "react-i18next";
import { TbFaceId } from "react-icons/tb";
import { useIsAdmin } from "@/hooks/use-is-admin";
import FaceSelectionDialog from "../FaceSelectionDialog";
import { getTranslatedLabel } from "@/utils/i18n";
const SEARCH_TABS = [
"details",
@ -717,9 +718,7 @@ function ObjectDetailsTab({
<div className="text-sm text-primary/40">{t("details.label")}</div>
<div className="flex flex-row items-center gap-2 text-sm smart-capitalize">
{getIconForLabel(search.label, "size-4 text-primary")}
{t(search.label, {
ns: "objects",
})}
{getTranslatedLabel(search.label)}
{search.sub_label && ` (${search.sub_label})`}
{isAdmin && search.end_time && (
<Tooltip>
@ -1167,9 +1166,9 @@ export function ObjectSnapshotTab({
ns="components/dialog"
values={{
untranslatedLabel: search?.label,
translatedLabel: t(search?.label, {
ns: "objects",
}),
translatedLabel: getTranslatedLabel(
search?.label,
),
}}
>
explore.plus.review.question.ask_full