diff --git a/web/public/locales/en/views/explore.json b/web/public/locales/en/views/explore.json index 29e0665dd..a5a78abd6 100644 --- a/web/public/locales/en/views/explore.json +++ b/web/public/locales/en/views/explore.json @@ -149,5 +149,15 @@ "desc": "Deleting this tracked object removes the snapshot, any saved embeddings, and any associated object lifecycle entries. Recorded footage of this tracked object in History view will NOT be deleted.

Are you sure you want to proceed?" } }, - "noTrackedObjects": "No Tracked Objects Found" + "noTrackedObjects": "No Tracked Objects Found", + "fetchingTrackedObjectsFailed": "Error fetching tracked objects: {{errorMessage}}", + "trackedObjectsCount": "{{count}} tracked objects ", + "searchResult": { + "deleteTrackedObject": { + "toast": { + "success": "Tracked object deleted successfully.", + "error": "Failed to delete tracked object: {{errorMessage}}" + } + } + } } diff --git a/web/public/locales/zh-CN/views/explore.json b/web/public/locales/zh-CN/views/explore.json index dcca305eb..e35656f24 100644 --- a/web/public/locales/zh-CN/views/explore.json +++ b/web/public/locales/zh-CN/views/explore.json @@ -149,5 +149,15 @@ "desc": "删除此跟踪对象将移除快照、所有已保存的嵌入数据以及任何关联的对象生命周期条目。但在历史视图中的录制视频不会被删除。

你确定要继续删除吗?" } }, - "noTrackedObjects": "找不到探测的对象" + "noTrackedObjects": "找不到探测的对象", + "fetchingTrackedObjectsFailed": "获取跟踪对象失败:{{errorMessage}}", + "trackedObjectsCount": "{{count}} 个跟踪对象", + "searchResult": { + "deleteTrackedObject": { + "toast": { + "success": "跟踪对象删除成功。", + "error": "删除跟踪对象失败:{{errorMessage}}" + } + } + } } diff --git a/web/src/components/menu/SearchResultActions.tsx b/web/src/components/menu/SearchResultActions.tsx index 9afd4b1cf..b6d664b39 100644 --- a/web/src/components/menu/SearchResultActions.tsx +++ b/web/src/components/menu/SearchResultActions.tsx @@ -72,7 +72,7 @@ export default function SearchResultActions({ .delete(`events/${searchResult.id}`) .then((resp) => { if (resp.status == 200) { - toast.success("Tracked object deleted successfully.", { + toast.success(t("searchResult.deleteTrackedObject.toast.success"), { position: "top-center", }); refreshResults(); @@ -83,9 +83,12 @@ export default function SearchResultActions({ error.response?.data?.message || error.response?.data?.detail || "Unknown error"; - toast.error(`Failed to delete tracked object: ${errorMessage}`, { - position: "top-center", - }); + toast.error( + t("searchResult.deleteTrackedObject.toast.error", { errorMessage }), + { + position: "top-center", + }, + ); }); }; diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index 630301c44..0e884f8f1 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -200,7 +200,9 @@ export default function Explore() { revalidateAll: false, onError: (error) => { toast.error( - `Error fetching tracked objects: ${error.response.data.message}`, + t("fetchingTrackedObjectsFailed", { + errorMessage: error.response.data.message, + }), { position: "top-center", }, diff --git a/web/src/views/explore/ExploreView.tsx b/web/src/views/explore/ExploreView.tsx index 119566172..3caf60781 100644 --- a/web/src/views/explore/ExploreView.tsx +++ b/web/src/views/explore/ExploreView.tsx @@ -21,6 +21,7 @@ import TimeAgo from "@/components/dynamic/TimeAgo"; import SearchResultActions from "@/components/menu/SearchResultActions"; import { SearchTab } from "@/components/overlay/detail/SearchDetailDialog"; import { FrigateConfig } from "@/types/frigateConfig"; +import { useTranslation } from "react-i18next"; type ExploreViewProps = { searchDetail: SearchResult | undefined; @@ -137,6 +138,7 @@ function ThumbnailRow({ setSimilaritySearch, onSelectSearch, }: ThumbnailRowType) { + const { t } = useTranslation(["views/explore"]); const navigate = useNavigate(); const handleSearch = (label: string) => { @@ -152,12 +154,10 @@ function ThumbnailRow({ {objectType.replaceAll("_", " ")} {searchResults && ( - ( - { + {t("trackedObjectsCount", { // @ts-expect-error we know this is correct - searchResults[0].event_count - }{" "} - tracked objects){" "} + count: searchResults[0].event_count, + })} )} {isValidating && }