diff --git a/web/public/locales/en/components/dialog.json b/web/public/locales/en/components/dialog.json index 5d185d289..a18d20baf 100644 --- a/web/public/locales/en/components/dialog.json +++ b/web/public/locales/en/components/dialog.json @@ -15,15 +15,11 @@ "desc": "Objects in locations you want to avoid are not false positives. Submitting them as false positives will confuse the model." }, "review": { - "true": { + "question": { "label": "Confirm this label for Frigate Plus", - "true_one": "This is a {{label}}", - "true_other": "This is an {{label}}" - }, - "false": { - "label": "Do not confirm this label for Frigate Plus", - "false_one": "This is not a {{label}}", - "false_other": "This is not an {{label}}" + "ask_a": "Is this object a {{label}}?", + "ask_an": "Is this object an {{label}}?", + "ask_full": "Is this object a {{untranslatedLabel}} ({{translatedLabel}})?" }, "state": { "submitted": "Submitted" diff --git a/web/public/locales/en/views/search.json b/web/public/locales/en/views/search.json index 8d8e878a8..a085a2a14 100644 --- a/web/public/locales/en/views/search.json +++ b/web/public/locales/en/views/search.json @@ -46,8 +46,13 @@ "title": "How to use text filters", "desc": { "text": "Filters help you narrow down your search results. Here's how to use them in the input field:", - "step": "", - "example": "Example: cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM " + "step1": "Type a filter key name followed by a colon (e.g., \"cameras:\").", + "step2": "Select a value from the suggestions or type your own.", + "step3": "Use multiple filters by adding them one after another with a space in between.", + "step4": "Date filters (before: and after:) use {{DateFormat}} format.", + "step5": "Time range filter uses {{exampleTime}} format.", + "step6": "Remove filters by clicking the 'x' next to them.", + "exampleLabel": "Example:" } }, "header": { diff --git a/web/public/locales/en/views/settings.json b/web/public/locales/en/views/settings.json index 9f9ced4d8..a76c09254 100644 --- a/web/public/locales/en/views/settings.json +++ b/web/public/locales/en/views/settings.json @@ -385,12 +385,12 @@ "motion": { "title": "Motion boxes", "desc": "Show boxes around areas where motion is detected", - "tips": "

Motion Boxes


Red boxes will be overlaid on areas of the frame where motion is currently being detected

" + "tips": "

Motion Boxes


Red boxes will be overlaid on areas of the frame where motion is currently being detected

" }, "regions": { "title": "Regions", "desc": "Show a box of the region of interest sent to the object detector", - "tips": "

Region Boxes


Bright green boxes will be overlaid on areas of interest in the frame that are being sent to the object detector.

" + "tips": "

Region Boxes


Bright green boxes will be overlaid on areas of interest in the frame that are being sent to the object detector.

" }, "objectShapeFilterDrawing": { "title": "Object Shape Filter Drawing", @@ -474,7 +474,7 @@ "deleteUser": { "title": "Delete User", "desc": "This action cannot be undone. This will permanently delete the user account and remove all associated data.", - "warn": "Are you sure you want to delete {{username}}?" + "warn": "Are you sure you want to delete" }, "passwordSetting": { "updatePassword": "Update Password for {{username}}", @@ -483,8 +483,14 @@ }, "changeRole": { "title": "Change User Role", - "desc": "Update permissions for {{username}}", - "roleInfo": "

Select the appropriate role for this user:

" + "desc": "Update permissions for", + "roleInfo": { + "intro": "Select the appropriate role for this user:", + "admin": "Admin", + "adminDesc": "Full access to all features.", + "viewer": "Viewer", + "viewerDesc": "Limited to Live dashboards, Review, Explore, and Exports only." + } } } }, diff --git a/web/public/locales/nb_NO/audio.json b/web/public/locales/nb-NO/audio.json similarity index 100% rename from web/public/locales/nb_NO/audio.json rename to web/public/locales/nb-NO/audio.json diff --git a/web/public/locales/nb_NO/components/auth.json b/web/public/locales/nb-NO/components/auth.json similarity index 100% rename from web/public/locales/nb_NO/components/auth.json rename to web/public/locales/nb-NO/components/auth.json diff --git a/web/public/locales/nb_NO/components/icons.json b/web/public/locales/nb-NO/components/icons.json similarity index 100% rename from web/public/locales/nb_NO/components/icons.json rename to web/public/locales/nb-NO/components/icons.json diff --git a/web/public/locales/nb_NO/components/input.json b/web/public/locales/nb-NO/components/input.json similarity index 100% rename from web/public/locales/nb_NO/components/input.json rename to web/public/locales/nb-NO/components/input.json diff --git a/web/public/locales/nb_NO/objects.json b/web/public/locales/nb-NO/objects.json similarity index 100% rename from web/public/locales/nb_NO/objects.json rename to web/public/locales/nb-NO/objects.json diff --git a/web/public/locales/nb_NO/views/configEditor.json b/web/public/locales/nb-NO/views/configEditor.json similarity index 100% rename from web/public/locales/nb_NO/views/configEditor.json rename to web/public/locales/nb-NO/views/configEditor.json diff --git a/web/public/locales/nb_NO/views/events.json b/web/public/locales/nb-NO/views/events.json similarity index 100% rename from web/public/locales/nb_NO/views/events.json rename to web/public/locales/nb-NO/views/events.json diff --git a/web/public/locales/nb_NO/views/recording.json b/web/public/locales/nb-NO/views/recording.json similarity index 100% rename from web/public/locales/nb_NO/views/recording.json rename to web/public/locales/nb-NO/views/recording.json diff --git a/web/src/components/input/InputWithTags.tsx b/web/src/components/input/InputWithTags.tsx index 13977b8a7..4c5e9ab8b 100644 --- a/web/src/components/input/InputWithTags.tsx +++ b/web/src/components/input/InputWithTags.tsx @@ -51,7 +51,7 @@ import { toast } from "sonner"; import useSWR from "swr"; import { FrigateConfig } from "@/types/frigateConfig"; import { MdImageSearch } from "react-icons/md"; -import { Trans, useTranslation } from "react-i18next"; +import { useTranslation } from "react-i18next"; type InputWithTagsProps = { inputFocused: boolean; @@ -729,20 +729,31 @@ export default function InputWithTags({

{t("filter.tips.desc.text")}

- - filter.tips.desc.step - +

- filter.tips.desc.example + {t("filter.tips.desc.exampleLabel")}{" "} + + cameras:front_door label:person before:01012024 + time_range:3:00PM-4:00PM +

diff --git a/web/src/components/menu/GeneralSettings.tsx b/web/src/components/menu/GeneralSettings.tsx index c148127e3..11a3f2ed4 100644 --- a/web/src/components/menu/GeneralSettings.tsx +++ b/web/src/components/menu/GeneralSettings.tsx @@ -78,6 +78,7 @@ export default function GeneralSettings({ className }: GeneralSettingsProps) { const languages = [ { code: "en", label: t("menu.language.en") }, { code: "es", label: t("menu.language.es") }, + { code: "fr", label: t("menu.language.fr") }, { code: "zh-CN", label: t("menu.language.zhCN") }, { code: "tr", label: t("menu.language.tr") }, { code: "nl", label: t("menu.language.nl") }, diff --git a/web/src/components/overlay/DeleteUserDialog.tsx b/web/src/components/overlay/DeleteUserDialog.tsx index 1e91196b4..c29f85163 100644 --- a/web/src/components/overlay/DeleteUserDialog.tsx +++ b/web/src/components/overlay/DeleteUserDialog.tsx @@ -35,7 +35,8 @@ export default function DeleteUserDialog({

- {t("users.dialog.deleteUser.warn", { username })} + {t("users.dialog.deleteUser.warn")} + {username}?

diff --git a/web/src/components/overlay/RoleChangeDialog.tsx b/web/src/components/overlay/RoleChangeDialog.tsx index a242ffba3..f17930bea 100644 --- a/web/src/components/overlay/RoleChangeDialog.tsx +++ b/web/src/components/overlay/RoleChangeDialog.tsx @@ -1,4 +1,4 @@ -import { Trans, useTranslation } from "react-i18next"; +import { useTranslation } from "react-i18next"; import { Button } from "../ui/button"; import { Dialog, @@ -46,13 +46,28 @@ export default function RoleChangeDialog({ {t("users.dialog.changeRole.title")} - {t("users.dialog.changeRole.desc", { username })} + {t("users.dialog.changeRole.desc")} + {username} -
+
- users.dialog.changeRole.roleInfo +

{t("users.dialog.changeRole.roleInfo.intro")}

+
    +
  • + + {t("users.dialog.changeRole.roleInfo.admin")} + + : {t("users.dialog.changeRole.roleInfo.adminDesc")} +
  • +
  • + + {t("users.dialog.changeRole.roleInfo.viewer")} + + : {t("users.dialog.changeRole.roleInfo.viewerDesc")} +
  • +