Consolidate documentation i18n keys

This commit is contained in:
Josh Hawkins 2025-08-22 16:42:23 -05:00
parent a88760efa1
commit e480349a1c
23 changed files with 46 additions and 82 deletions

View File

@ -262,5 +262,6 @@
"title": "404",
"desc": "Page not found"
},
"selectItem": "Select {{item}}"
"selectItem": "Select {{item}}",
"readTheDocumentation": "Read the documentation"
}

View File

@ -35,8 +35,7 @@
"audioIsUnavailable": "Audio is unavailable for this stream",
"audio": {
"tips": {
"title": "Audio must be output from your camera and configured in go2rtc for this stream.",
"document": "Read the documentation "
"title": "Audio must be output from your camera and configured in go2rtc for this stream."
}
},
"stream": "Stream",

View File

@ -69,8 +69,7 @@
"restreaming": {
"disabled": "Restreaming is not enabled for this camera.",
"desc": {
"title": "Set up go2rtc for additional live view options and audio for this camera.",
"readTheDocumentation": "Read the documentation"
"title": "Set up go2rtc for additional live view options and audio for this camera."
}
},
"showStats": {

View File

@ -24,8 +24,7 @@
"textTokenizer": "Text tokenizer"
},
"tips": {
"context": "You may want to reindex the embeddings of your tracked objects once the models are downloaded.",
"documentation": "Read the documentation"
"context": "You may want to reindex the embeddings of your tracked objects once the models are downloaded."
},
"error": "An error has occurred. Check Frigate logs."
}
@ -73,7 +72,6 @@
"offset": {
"label": "Annotation Offset",
"desc": "This data comes from your camera's detect feed but is overlayed on images from the the record feed. It is unlikely that the two streams are perfectly in sync. As a result, the bounding box and the footage will not line up perfectly. However, the <code>annotation_offset</code> field can be used to adjust this.",
"documentation": "Read the documentation ",
"millisecondsToOffset": "Milliseconds to offset detect annotations by. <em>Default: 0</em>",
"tips": "TIP: Imagine there is an event clip with a person walking from left to right. If the event timeline bounding box is consistently to the left of the person then the value should be decreased. Similarly, if a person is walking from left to right and the bounding box is consistently ahead of the person then the value should be increased.",
"toast": {

View File

@ -71,7 +71,6 @@
},
"nofaces": "No faces available",
"pixels": "{{area}}px",
"readTheDocs": "Read the documentation",
"trainFaceAs": "Train Face as:",
"trainFace": "Train Face",
"toast": {

View File

@ -119,15 +119,13 @@
"title": "Stream",
"audio": {
"tips": {
"title": "Audio must be output from your camera and configured in go2rtc for this stream.",
"documentation": "Read the documentation "
"title": "Audio must be output from your camera and configured in go2rtc for this stream."
},
"available": "Audio is available for this stream",
"unavailable": "Audio is not available for this stream"
},
"twoWayTalk": {
"tips": "Your device must support the feature and WebRTC must be configured for two-way talk.",
"tips.documentation": "Read the documentation ",
"available": "Two-way talk is available for this stream",
"unavailable": "Two-way talk is unavailable for this stream"
},

View File

@ -92,7 +92,6 @@
"semanticSearch": {
"title": "Semantic Search",
"desc": "Semantic Search in Frigate allows you to find tracked objects within your review items using either the image itself, a user-defined text description, or an automatically generated one.",
"readTheDocumentation": "Read the Documentation",
"reindexNow": {
"label": "Reindex Now",
"desc": "Reindexing will regenerate embeddings for all tracked object. This process runs in the background and may max out your CPU and take a fair amount of time depending on the number of tracked objects you have.",
@ -119,7 +118,6 @@
"faceRecognition": {
"title": "Face Recognition",
"desc": "Face recognition allows people to be assigned names and when their face is recognized Frigate will assign the person's name as a sub label. This information is included in the UI, filters, as well as in notifications.",
"readTheDocumentation": "Read the Documentation",
"modelSize": {
"label": "Model Size",
"desc": "The size of the model used for face recognition.",
@ -135,8 +133,7 @@
},
"licensePlateRecognition": {
"title": "License Plate Recognition",
"desc": "Frigate can recognize license plates on vehicles and automatically add the detected characters to the recognized_license_plate field or a known name as a sub_label to objects that are of type car. A common use case may be to read the license plates of cars pulling into a driveway or cars passing by on a street.",
"readTheDocumentation": "Read the Documentation"
"desc": "Frigate can recognize license plates on vehicles and automatically add the detected characters to the recognized_license_plate field or a known name as a sub_label to objects that are of type car. A common use case may be to read the license plates of cars pulling into a driveway or cars passing by on a street."
},
"restart_required": "Restart required (Enrichments settings changed)",
"toast": {
@ -167,7 +164,7 @@
"reviewClassification": {
"title": "Review Classification",
"desc": "Frigate categorizes review items as Alerts and Detections. By default, all <em>person</em> and <em>car</em> objects are considered Alerts. You can refine categorization of your review items by configuring required zones for them.",
"readTheDocumentation": "Read the Documentation",
"noDefinedZones": "No zones are defined for this camera.",
"objectAlertsTips": "All {{alertsLabels}} objects on {{cameraName}} will be shown as Alerts.",
"zoneObjectAlertsTips": "All {{alertsLabels}} objects detected in {{zone}} on {{cameraName}} will be shown as Alerts.",
@ -313,7 +310,6 @@
"speedEstimation": {
"title": "Speed Estimation",
"desc": "Enable speed estimation for objects in this zone. The zone must have exactly 4 points.",
"docs": "Read the documentation",
"lineADistance": "Line A distance ({{unit}})",
"lineBDistance": "Line B distance ({{unit}})",
"lineCDistance": "Line C distance ({{unit}})",
@ -343,16 +339,14 @@
"add": "New Motion Mask",
"edit": "Edit Motion Mask",
"context": {
"title": "Motion masks are used to prevent unwanted types of motion from triggering detection (example: tree branches, camera timestamps). Motion masks should be used <em>very sparingly</em>, over-masking will make it more difficult for objects to be tracked.",
"documentation": "Read the documentation"
"title": "Motion masks are used to prevent unwanted types of motion from triggering detection (example: tree branches, camera timestamps). Motion masks should be used <em>very sparingly</em>, over-masking will make it more difficult for objects to be tracked."
},
"point_one": "{{count}} point",
"point_other": "{{count}} points",
"clickDrawPolygon": "Click to draw a polygon on the image.",
"polygonAreaTooLarge": {
"title": "The motion mask is covering {{polygonArea}}% of the camera frame. Large motion masks are not recommended.",
"tips": "Motion masks do not prevent objects from being detected. You should use a required zone instead.",
"documentation": "Read the documentation"
"tips": "Motion masks do not prevent objects from being detected. You should use a required zone instead."
},
"toast": {
"success": {
@ -456,7 +450,6 @@
"title": "Object Shape Filter Drawing",
"desc": "Draw a rectangle on the image to view area and ratio details",
"tips": "Enable this option to draw a rectangle on the camera image to show its area and ratio. These values can then be used to set object shape filter parameters in your config.",
"document": "Read the documentation ",
"score": "Score",
"ratio": "Ratio",
"area": "Area"
@ -563,13 +556,11 @@
"title": "Notifications",
"notificationSettings": {
"title": "Notification Settings",
"desc": "Frigate can natively send push notifications to your device when it is running in the browser or installed as a PWA.",
"documentation": "Read the Documentation"
"desc": "Frigate can natively send push notifications to your device when it is running in the browser or installed as a PWA."
},
"notificationUnavailable": {
"title": "Notifications Unavailable",
"desc": "Web push notifications require a secure context (<code>https://…</code>). This is a browser limitation. Access Frigate securely to use notifications.",
"documentation": "Read the Documentation"
"desc": "Web push notifications require a secure context (<code>https://…</code>). This is a browser limitation. Access Frigate securely to use notifications."
},
"globalSettings": {
"title": "Global Settings",
@ -626,7 +617,6 @@
"snapshotConfig": {
"title": "Snapshot Configuration",
"desc": "Submitting to Frigate+ requires both snapshots and <code>clean_copy</code> snapshots to be enabled in your config.",
"documentation": "Read the documentation",
"cleanCopyWarning": "Some cameras have snapshots enabled but have the clean copy disabled. You need to enable <code>clean_copy</code> in your snapshot config to be able to submit images from these cameras to Frigate+.",
"table": {
"camera": "Camera",

View File

@ -93,8 +93,7 @@
},
"shm": {
"title": "SHM (shared memory) allocation",
"warning": "The current SHM size of {{total}}MB is too small. Increase it to at least {{min_shm}}MB.",
"readTheDocumentation": "Read the documentation"
"warning": "The current SHM size of {{total}}MB is too small. Increase it to at least {{min_shm}}MB."
},
"cameraStorage": {
"title": "Camera Storage",

View File

@ -187,9 +187,7 @@ export function AnnotationSettingsPane({
rel="noopener noreferrer"
className="inline"
>
{t(
"objectLifecycle.annotationSettings.offset.documentation",
)}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -161,7 +161,7 @@ export default function CreateFaceWizardDialog({
rel="noopener noreferrer"
className="inline"
>
{t("readTheDocs")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -228,9 +228,7 @@ export function CameraStreamingDialog({
rel="noopener noreferrer"
className="inline"
>
{t("streaming.restreaming.desc.readTheDocumentation", {
ns: "components/dialog",
})}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -289,7 +287,7 @@ export function CameraStreamingDialog({
rel="noopener noreferrer"
className="inline"
>
{t("group.camera.setting.audio.tips.document")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -257,7 +257,7 @@ export default function MotionMaskEditPane({
rel="noopener noreferrer"
className="inline"
>
{t("masksAndZones.motionMasks.context.documentation")}{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -303,7 +303,7 @@ export default function MotionMaskEditPane({
rel="noopener noreferrer"
className="my-3 block"
>
{t("masksAndZones.motionMasks.polygonAreaTooLarge.documentation")}{" "}
{t("readTheDocumentation", { ns: "common" })}{" "}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -687,7 +687,7 @@ export default function ZoneEditPane({
rel="noopener noreferrer"
className="inline"
>
{t("masksAndZones.zones.speedEstimation.docs")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -482,9 +482,7 @@ export default function Explore() {
rel="noopener noreferrer"
className="inline"
>
{t(
"exploreIsUnavailable.downloadingModels.tips.documentation",
)}{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -1379,12 +1379,7 @@ function FrigateCameraFeatures({
rel="noopener noreferrer"
className="inline"
>
{t(
"streaming.restreaming.desc.readTheDocumentation",
{
ns: "components/dialog",
},
)}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -1457,7 +1452,9 @@ function FrigateCameraFeatures({
rel="noopener noreferrer"
className="inline"
>
{t("stream.audio.tips.documentation")}
{t("readTheDocumentation", {
ns: "common",
})}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -1500,9 +1497,9 @@ function FrigateCameraFeatures({
rel="noopener noreferrer"
className="inline"
>
{t(
"stream.twoWayTalk.tips.documentation",
)}
{t("readTheDocumentation", {
ns: "common",
})}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -1717,9 +1714,7 @@ function FrigateCameraFeatures({
rel="noopener noreferrer"
className="inline"
>
{t("streaming.restreaming.desc.readTheDocumentation", {
ns: "components/dialog",
})}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -1788,7 +1783,7 @@ function FrigateCameraFeatures({
rel="noopener noreferrer"
className="inline"
>
{t("stream.audio.tips.documentation")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -1831,7 +1826,7 @@ function FrigateCameraFeatures({
rel="noopener noreferrer"
className="inline"
>
{t("stream.twoWayTalk.tips.documentation")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -508,9 +508,7 @@ export default function CameraSettingsView({
rel="noopener noreferrer"
className="inline"
>
<Trans ns="views/settings">
camera.reviewClassification.readTheDocumentation
</Trans>{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -263,7 +263,7 @@ export default function EnrichmentsSettingsView({
rel="noopener noreferrer"
className="inline"
>
{t("enrichments.semanticSearch.readTheDocumentation")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -409,7 +409,7 @@ export default function EnrichmentsSettingsView({
rel="noopener noreferrer"
className="inline"
>
{t("enrichments.faceRecognition.readTheDocumentation")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -512,9 +512,7 @@ export default function EnrichmentsSettingsView({
rel="noopener noreferrer"
className="inline"
>
{t(
"enrichments.licensePlateRecognition.readTheDocumentation",
)}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -558,7 +556,7 @@ export default function EnrichmentsSettingsView({
rel="noopener noreferrer"
className="inline"
>
{t("enrichments.semanticSearch.readTheDocumentation")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -458,7 +458,7 @@ export default function FrigatePlusSettingsView({
rel="noopener noreferrer"
className="inline"
>
{t("frigatePlus.snapshotConfig.documentation")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -506,7 +506,7 @@ export default function MasksAndZonesView({
rel="noopener noreferrer"
className="inline"
>
{t("masksAndZones.zones.desc.documentation")}{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -574,9 +574,7 @@ export default function MasksAndZonesView({
rel="noopener noreferrer"
className="inline"
>
{t(
"masksAndZones.motionMasks.desc.documentation",
)}{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -646,9 +644,7 @@ export default function MasksAndZonesView({
rel="noopener noreferrer"
className="inline"
>
{t(
"masksAndZones.objectMasks.desc.documentation",
)}{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -205,7 +205,7 @@ export default function MotionTunerView({
rel="noopener noreferrer"
className="inline"
>
{t("motionDetectionTuner.desc.documentation")}{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -341,7 +341,7 @@ export default function NotificationView({
rel="noopener noreferrer"
className="inline"
>
{t("notification.notificationSettings.documentation")}{" "}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -363,7 +363,7 @@ export default function NotificationView({
rel="noopener noreferrer"
className="inline"
>
{t("notification.notificationUnavailable.documentation")}{" "}
{t("readTheDocumentation", { ns: "common" })}{" "}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
@ -396,7 +396,7 @@ export default function NotificationView({
rel="noopener noreferrer"
className="inline"
>
{t("notification.notificationSettings.documentation")}{" "}
{t("readTheDocumentation", { ns: "common" })}{" "}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -275,7 +275,7 @@ export default function ObjectSettingsView({
rel="noopener noreferrer"
className="inline"
>
{t("debug.objectShapeFilterDrawing.document")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>

View File

@ -178,7 +178,7 @@ export default function StorageMetrics({
rel="noopener noreferrer"
className="inline"
>
{t("storage.shm.readTheDocumentation")}
{t("readTheDocumentation", { ns: "common" })}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>