mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-10-12 17:52:48 +03:00
feat: add i18n (translation/localization) (#16877)
* Translation module init * Add more i18n keys * fix: fix string wrong * refactor: use namespace translation file * chore: add more translation key * fix: fix some page name error * refactor: change Trans tag for t function * chore: fix some key not work * chore: fix SearchFilterDialog i18n key error Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * chore: fix en i18n file filter missing some keys * chore: add some i18n keys * chore: add more i18n keys again * feat: add search page i18n * feat: add explore model i18n keys * Update web/src/components/menu/GeneralSettings.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/src/components/menu/GeneralSettings.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/src/components/menu/GeneralSettings.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * feat: add more live i18n keys * feat: add more search setting i18n keys * fix: remove some comment * fix: fix some setting page url error * Update web/src/views/settings/SearchSettingsView.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * fix: add system missing keys * fix: update password update i18n keys * chore: remove outdate translation.json file * fix: fix exploreSettings error * chore: add object setting i18n keys * Update web/src/views/recording/RecordingView.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/public/locales/en/components/filter.json Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/src/components/overlay/ExportDialog.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * feat: add more i18n keys * fix: fix motionDetectionTuner html node * feat: add more page i18n keys * fix: cameraStream i18n keys error * feat: add Player i18n keys * feat: add more toast i18n keys * feat: change explore setting name * feat: add more document title i18n keys * feat: add more search i18n keys * fix: fix accessDenied i18n keys error * chore: add objectType i18n * chore: add inputWithTags i18n * chore: add SearchFilterDialog i18n * Update web/src/views/settings/ObjectSettingsView.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/src/views/settings/ObjectSettingsView.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/src/views/settings/ObjectSettingsView.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/src/views/settings/ObjectSettingsView.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * Update web/src/views/settings/ObjectSettingsView.tsx Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> * chore: add some missing i18n keys * chore: remove most import { t } from "i18next"; --------- Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
This commit is contained in:
co-authored by
Josh Hawkins
parent
db541abed4
commit
d34533981f
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"form": {
|
||||
"user": "Username",
|
||||
"password": "Password",
|
||||
"login": "Login",
|
||||
"errors": {
|
||||
"usernameRequired": "Username is required",
|
||||
"passwordRequired": "Password is required",
|
||||
"rateLimit": "Exceeded rate limit. Try again later.",
|
||||
"loginFailed": "Login failed",
|
||||
"unknownError": "Unknown error. Check logs.",
|
||||
"webUnkownError": "Unknown error. Check console logs."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"group": {
|
||||
"label": "Camera Groups",
|
||||
"add": "Add camera groups",
|
||||
"edit": "Edit camera groups",
|
||||
"delete": {
|
||||
"label": "Delete Camera Group",
|
||||
"confirm": "Confirm Delete",
|
||||
"confirm.desc": "Are you sure you want to delete the camera group <em>{{name}}</em>?"
|
||||
},
|
||||
"name": {
|
||||
"label": "Name",
|
||||
"placeholder": "Enter a name...",
|
||||
"error": {
|
||||
"mustLeastCharacters": "Camera group name must be at least 2 characters.",
|
||||
"exists": "Camera group name already exists.",
|
||||
"nameMustNotPeriod": "Camera group name must not contain a period.",
|
||||
"invalid": "Invalid camera group name."
|
||||
}
|
||||
},
|
||||
"cameras": {
|
||||
"label": "Cameras",
|
||||
"desc": "Select cameras for this group."
|
||||
},
|
||||
"icon": "Icon",
|
||||
"success": "Camera group ({{name}}) has been saved.",
|
||||
"camera": {
|
||||
"setting": {
|
||||
"label": "Camera Streaming Settings",
|
||||
"title": "{{cameraName}} Streaming Settings",
|
||||
"desc": "Change the live streaming options for this camera group's dashboard. <em>These settings are device/browser-specific.</em>",
|
||||
"audioIsAvailable": "Audio is available for this stream",
|
||||
"audioIsUnavailable": "Audio is available for this stream",
|
||||
"audio": {
|
||||
"tips": "Audio must be output from your camera and configured in go2rtc for this stream.",
|
||||
"tips.document": "Read the documentation "
|
||||
},
|
||||
"streamMethod": {
|
||||
"label": "Streaming Method",
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "No Streaming",
|
||||
"desc": "Camera images will only update once per minute and no live streaming will occur."
|
||||
},
|
||||
"smartStreaming": {
|
||||
"label": "Smart Streaming (recommended)",
|
||||
"desc": "Smart streaming will update your camera image once per minute when no detectable activity is occurring to conserve bandwidth and resources. When activity is detected, the image seamlessly switches to a live stream."
|
||||
},
|
||||
"continuousStreaming": {
|
||||
"label": "Continuous Streaming",
|
||||
"desc": "Camera image will always be a live stream when visible on the dashboard, even if no activity is being detected.",
|
||||
"desc.warning": "Continuous streaming may cause high bandwidth usage and performance issues. Use with caution."
|
||||
}
|
||||
}
|
||||
},
|
||||
"compatibilityMode": {
|
||||
"label": "Compatibility mode",
|
||||
"desc": "Enable this option only if your camera's live stream is displaying color artifacts and has a diagonal line on the right side of the image."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
"label": "Settings",
|
||||
"title": "Options",
|
||||
"showOptions": "Show Options",
|
||||
"hideOptions": "Hide Options"
|
||||
},
|
||||
"boundingBox": "Bounding Box",
|
||||
"timestamp": "Timestamp",
|
||||
"zones": "Zones",
|
||||
"mask": "Mask",
|
||||
"motion": "Motion",
|
||||
"regions": "Regions"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"restart": {
|
||||
"title": "Are you sure you want to restart Frigate?",
|
||||
"button": "Restart",
|
||||
"restarting": {
|
||||
"title": "Frigate is Restarting",
|
||||
"content": "This page will reload in {{countdown}} seconds.",
|
||||
"button": "Force Reload Now"
|
||||
}
|
||||
},
|
||||
"explore": {
|
||||
"plus": {
|
||||
"submitToPlus": {
|
||||
"label": "Submit To Frigate+",
|
||||
"desc": "Objects in locations you want to avoid are not false positives. Submitting them as false positives will confuse the model."
|
||||
},
|
||||
"review": {
|
||||
"true.label": "Confirm this label for Frigate Plus",
|
||||
"true_one": "This is a {{label}}",
|
||||
"true_other": "This is an {{label}}",
|
||||
"false_one": "This is not a {{label}}",
|
||||
"false_other": "This is not an {{label}}",
|
||||
"false.label": "Do not confirm this label for Frigate Plus",
|
||||
"state.submitted": "Submitted"
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"viewInHistory": "View in History"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"time": {
|
||||
"fromTimeline": "Select from Timeline",
|
||||
"lastHour_one": "Last Hour",
|
||||
"lastHour_other": "Last {{count}} Hours",
|
||||
"custom": "Custom",
|
||||
"start": "Start Time",
|
||||
"start.label": "Select Start Time",
|
||||
"end": "End Time",
|
||||
"end.label": "Select End Time"
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Name the Export"
|
||||
},
|
||||
"select": "Select",
|
||||
"export": "Export",
|
||||
"selectOrExport": "Select or Export",
|
||||
"toast": {
|
||||
"success": "Successfully started export. View the file in the /exports folder.",
|
||||
"error": {
|
||||
"failed": "Failed to start export: {{error}}",
|
||||
"endTimeMustAfterStartTime": "End time must be after start time",
|
||||
"noVaildTimeSelected": "No valid time range selected"
|
||||
}
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Save Export",
|
||||
"previewExport": "Preview Export"
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
"label": "Stream",
|
||||
"restreaming": {
|
||||
"NotEnabled": "Restreaming is not enabled for this camera.",
|
||||
"desc": "Set up go2rtc for additional live view options and audio for this camera.",
|
||||
"desc.readTheDocumentation": "Read the documentation "
|
||||
},
|
||||
"showStats": {
|
||||
"label": "Show stream stats",
|
||||
"desc": "Enable this option to show stream statistics as an overlay on the camera feed."
|
||||
},
|
||||
"debugView": "Debug View"
|
||||
},
|
||||
"search": {
|
||||
"saveSearch": {
|
||||
"label": "Save Search",
|
||||
"desc": "Provide a name for this saved search.",
|
||||
"placeholder": "Enter a name for your search",
|
||||
"overwrite": "{{searchName}} already exists. Saving will overwrite the existing value.",
|
||||
"success": "Search ({{searchName}}) has been saved.",
|
||||
"button.save.label": "Save this search"
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"confirmDelete": {
|
||||
"title": "Confirm Delete",
|
||||
"desc": "Are you sure you want to delete all recorded video associated with this review item?<br /><br />Hold the <em>Shift</em> key to bypass this dialog in the future.",
|
||||
"desc.selected": "Are you sure you want to delete all recorded video associated with this review item?<br /><br />Hold the <em>Shift</em> key to bypass this dialog in the future."
|
||||
},
|
||||
"button": {
|
||||
"export": "Export",
|
||||
"markAsReviewed": "Mark as reviewed",
|
||||
"deleteNow": "Delete Now"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"filter": "Filter",
|
||||
"labels": {
|
||||
"label": "Labels",
|
||||
"all": "All Labels",
|
||||
"all.short": "Labels",
|
||||
"count": "{{count}} Labels"
|
||||
},
|
||||
"zones": {
|
||||
"all": "All Zones",
|
||||
"all.short": "Zones"
|
||||
},
|
||||
"dates": {
|
||||
"all": "All Dates",
|
||||
"all.short": "Dates"
|
||||
},
|
||||
"more": "More Filters",
|
||||
"reset.label": "Reset filters to default values",
|
||||
"timeRange": "Time Range",
|
||||
"zones.label": "Zones",
|
||||
"subLabels": {
|
||||
"label": "Sub Labels",
|
||||
"all": "All Sub Labels"
|
||||
},
|
||||
"score": "Score",
|
||||
"estimatedSpeed": "Estimated Speed ({{unit}})",
|
||||
"features": {
|
||||
"label": "Features",
|
||||
"hasSnapshot": "Has a snapshot",
|
||||
"hasVideoClip": "Has a video clip",
|
||||
"submittedToFrigatePlus": {
|
||||
"label": "Submitted to Frigate+",
|
||||
"tips": "You must first filter on tracked objects that have a snapshot.<br /><br />Tracked objects without a snapshot cannot be submitted to Frigate+."
|
||||
}
|
||||
},
|
||||
"sort": {
|
||||
"label": "Sort",
|
||||
"dateAsc": "Date (Ascending)",
|
||||
"dateDesc": "Date (Descending)",
|
||||
"scoreAsc": "Object Score (Ascending)",
|
||||
"scoreDesc": "Object Score (Descending)",
|
||||
"speedAsc": "Estimated Speed (Ascending)",
|
||||
"speedDesc": "Estimated Speed (Descending)",
|
||||
"relevance": "Relevance"
|
||||
},
|
||||
"cameras": {
|
||||
"label": "Cameras Filter",
|
||||
"all": "All Cameras",
|
||||
"all.short": "Cameras"
|
||||
},
|
||||
"review": {
|
||||
"showReviewed": "Show Reviewed"
|
||||
},
|
||||
"motion": {
|
||||
"showMotionOnly": "Show Motion Only"
|
||||
},
|
||||
"explore": {
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"defaultView": "Default View",
|
||||
"defaultView.desc": "When no filters are selected, display a summary of the most recent tracked objects per label, or display an unfiltered grid.",
|
||||
"defaultView.summary": "Summary",
|
||||
"defaultView.unfilteredGrid": "Unfiltered Grid",
|
||||
"gridColumns": "Grid Columns",
|
||||
"gridColumns.desc": "Select the number of columns in the grid view.",
|
||||
"searchSource": {
|
||||
"label": "Search Source",
|
||||
"desc": "Choose whether to search the thumbnails or descriptions of your tracked objects.",
|
||||
"options": {
|
||||
"thumbnailImage": "Thumbnail Image",
|
||||
"description": "Description"
|
||||
}
|
||||
}
|
||||
},
|
||||
"date": {
|
||||
"selectDateBy": {
|
||||
"label": "Select a date to filter by"
|
||||
}
|
||||
}
|
||||
},
|
||||
"logSettings": {
|
||||
"label": "Filter log level",
|
||||
"filterBySeverity": "Filter logs by severity",
|
||||
"loading": "Loading",
|
||||
"loading.desc": "When the log pane is scrolled to the bottom, new logs automatically stream as they are added.",
|
||||
"disableLogStreaming": "Disable log streaming",
|
||||
"allLogs": "All logs"
|
||||
},
|
||||
"trackedObjectDelete": {
|
||||
"title": "Confirm Delete",
|
||||
"desc": "Deleting these {{objectLength}} tracked objects removes the snapshot, any saved embeddings, and any associated object lifecycle entries. Recorded footage of these tracked objects in History view will <em>NOT</em> be deleted.<br /><br />Are you sure you want to proceed?<br /><br />Hold the <em>Shift</em> key to bypass this dialog in the future.",
|
||||
"toast": {
|
||||
"success": "Tracked objects deleted successfully.",
|
||||
"error": "Failed to delete tracked objects: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"zoneMask": {
|
||||
"filterBy": "Filter by zone mask"
|
||||
},
|
||||
"recognizedLicensePlates": {
|
||||
"title": "Recognized License Plates",
|
||||
"loadFailed": "Failed to load recognized license plates.",
|
||||
"loading": "Loading recognized license plates...",
|
||||
"placeholder": "Type to search license plates...",
|
||||
"noLicensePlatesFound": "No license plates found.",
|
||||
"selectPlatesFromList": "Select one or more plates from the list."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"iconPicker": {
|
||||
"selectIcon": "Select an icon",
|
||||
"search": {
|
||||
"placeholder": "Search for an icon..."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"button": {
|
||||
"downloadVideo": {
|
||||
"label": "Download Video",
|
||||
"toast": {
|
||||
"success": "Your review item video has started downloading."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"noRecordingsFoundForThisTime": "No recordings found for this time",
|
||||
"noPreviewFound": "No Preview Found",
|
||||
"noPreviewFoundFor": "No Preview Found for {{cameraName}}",
|
||||
"submitFrigatePlus": {
|
||||
"title": "Submit this frame to Frigate+?",
|
||||
"submit": "Submit"
|
||||
},
|
||||
"livePlayerRequiredIOSVersion": "iOS 17.1 or greater is required for this live stream type.",
|
||||
"streamOffline": {
|
||||
"title": "Stream Offline",
|
||||
"desc": "No frames have been received on the {{cameraName}} <code>detect</code> stream, check error logs"
|
||||
},
|
||||
"cameraDisabled": "Camera is disabled",
|
||||
"stats": {
|
||||
"streamType": "Stream Type:",
|
||||
"streamType.short": "Type",
|
||||
"bandwidth": "Bandwidth:",
|
||||
"bandwidth.short": "Bandwidth",
|
||||
"latency": "Latency:",
|
||||
"latency.short": "Latency",
|
||||
"latency.value": "{{secounds}} seconds",
|
||||
"latency.short.value": "{{secounds}} sec",
|
||||
"totalFrames": "Total Frames:",
|
||||
"droppedFrames": "Dropped Frames:",
|
||||
"droppedFrames.short": "Dropped",
|
||||
"droppedFrames.short.value": "{{droppedFrames}} frames",
|
||||
"decodedFrames": "Decoded Frames:",
|
||||
"droppedFrameRate": "Dropped Frame Rate:"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"submittedFrigatePlus": "Successfully submitted frame to Frigate+"
|
||||
},
|
||||
"error": {
|
||||
"submitFrigatePlusFailed": "Failed to submit frame to Frigate+"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user