From ed70462648cfdaae50b2a2841a81fe200ac63b31 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 13 Jan 2026 21:00:56 +0100 Subject: [PATCH] Translated using Weblate (Spanish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 98.5% (134 of 136 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (136 of 136 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (118 of 118 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (131 of 131 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (214 of 214 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (49 of 49 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (501 of 501 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (53 of 53 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (53 of 53 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (43 of 43 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (122 of 122 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (122 of 122 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (55 of 55 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (92 of 92 strings) Co-authored-by: Ancor Trujillo Co-authored-by: Hosted Weblate Co-authored-by: José María Díaz Co-authored-by: klakiti Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/es/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/es/ Translation: Frigate NVR/audio Translation: Frigate NVR/common Translation: Frigate NVR/components-dialog Translation: Frigate NVR/components-filter Translation: Frigate NVR/objects Translation: Frigate NVR/views-classificationmodel Translation: Frigate NVR/views-events Translation: Frigate NVR/views-explore Translation: Frigate NVR/views-facelibrary Translation: Frigate NVR/views-live Translation: Frigate NVR/views-search Translation: Frigate NVR/views-settings Translation: Frigate NVR/views-system --- web/public/locales/es/audio.json | 88 ++++- web/public/locales/es/common.json | 35 +- web/public/locales/es/components/dialog.json | 10 +- web/public/locales/es/components/filter.json | 4 + web/public/locales/es/objects.json | 2 +- .../locales/es/views/classificationModel.json | 147 ++++++- web/public/locales/es/views/events.json | 12 +- web/public/locales/es/views/explore.json | 74 +++- web/public/locales/es/views/faceLibrary.json | 13 +- web/public/locales/es/views/live.json | 16 +- web/public/locales/es/views/search.json | 3 +- web/public/locales/es/views/settings.json | 370 ++++++++++++++++-- web/public/locales/es/views/system.json | 28 +- 13 files changed, 731 insertions(+), 71 deletions(-) diff --git a/web/public/locales/es/audio.json b/web/public/locales/es/audio.json index 16288b261..2641cb561 100644 --- a/web/public/locales/es/audio.json +++ b/web/public/locales/es/audio.json @@ -31,7 +31,7 @@ "crying": "Llanto", "synthetic_singing": "Canto sintético", "rapping": "Rap", - "humming": "Tarareo", + "humming": "Zumbido leve", "groan": "Gemido", "grunt": "Gruñido", "whistling": "Silbido", @@ -129,7 +129,7 @@ "sitar": "Sitar", "mandolin": "Mandolina", "zither": "Cítara", - "ukulele": "Ukulele", + "ukulele": "Ukelele", "piano": "Piano", "organ": "Órgano", "electronic_organ": "Órgano electrónico", @@ -153,7 +153,7 @@ "mallet_percussion": "Percusión con mazas", "marimba": "Marimba", "glockenspiel": "Glockenspiel", - "steelpan": "Steelpan", + "steelpan": "SarténAcero", "orchestra": "Orquesta", "trumpet": "Trompeta", "string_section": "Sección de cuerdas", @@ -183,13 +183,13 @@ "psychedelic_rock": "Rock psicodélico", "rhythm_and_blues": "Rhythm and blues", "soul_music": "Música soul", - "country": "Country", + "country": "País", "swing_music": "Música swing", "disco": "Disco", "house_music": "Música House", "dubstep": "Dubstep", "drum_and_bass": "Drum and Bass", - "electronica": "Electronica", + "electronica": "Electrónica", "electronic_dance_music": "Música Dance Electronica", "music_of_latin_america": "Música de América Latina", "salsa_music": "Música Salsa", @@ -207,7 +207,7 @@ "song": "Canción", "background_music": "Música Background", "soundtrack_music": "Música de Pelicula", - "lullaby": "Lullaby", + "lullaby": "Cancion de cuna", "video_game_music": "Música de Videojuego", "christmas_music": "Música Navideña", "sad_music": "Música triste", @@ -425,5 +425,79 @@ "radio": "Radio", "gunshot": "Disparo", "fusillade": "Descarga de Fusilería", - "pink_noise": "Ruido Rosa" + "pink_noise": "Ruido Rosa", + "shofar": "Shofar", + "liquid": "Líquido", + "splash": "Chapoteo", + "slosh": "líquido_en_movimiento", + "squish": "Chapotear", + "drip": "Goteo", + "pour": "Derramar", + "trickle": "Chorrito", + "gush": "Chorro", + "fill": "Llenar", + "spray": "Pulverizar", + "pump": "Bombear", + "stir": "Remover", + "boiling": "Hirviendo", + "sonar": "Sonar", + "arrow": "Flecha", + "whoosh": "Zas", + "thump": "Golpear", + "thunk": "Golpe_sordo", + "electronic_tuner": "Afinador_electrónico", + "effects_unit": "Unidades de efecto", + "chorus_effect": "Efecto Coral", + "basketball_bounce": "Bote baloncesto", + "bang": "Bang", + "slap": "Bofeteada", + "whack": "Aporreo", + "smash": "Aplastar", + "breaking": "Romper", + "bouncing": "Botar", + "whip": "Latigazo", + "flap": "Aleteo", + "scratch": "Arañazo", + "scrape": "Arañar", + "rub": "Frotar", + "roll": "Roll", + "crushing": "aplastar", + "crumpling": "Arrugar", + "tearing": "Rasgar", + "beep": "Bip", + "ping": "Ping", + "ding": "Ding", + "clang": "Sonido metálico", + "squeal": "Chillido", + "creak": "Crujido", + "rustle": "Crujir", + "whir": "Zumbido de ventilador", + "clatter": "Estrépito", + "sizzle": "Chisporroteo", + "clicking": "Click", + "clickety_clack": "Clic-clac", + "rumble": "Retumbar", + "plop": "Plaf", + "hum": "Murmullo", + "zing": "silbido", + "boing": "Bote", + "crunch": "Crujido", + "sine_wave": "Onda Sinusoidal", + "harmonic": "Harmonica", + "chirp_tone": "Tono de chirrido", + "pulse": "Pulso", + "inside": "Dentro", + "outside": "Afuera", + "reverberation": "Reverberación", + "echo": "Eco", + "noise": "Ruido", + "mains_hum": "Zumbido de red", + "distortion": "Distorsión", + "sidetone": "Tono lateral", + "cacophony": "Cacofonía", + "throbbing": "Palpitación", + "vibration": "Vibración", + "sodeling": "Sodeling", + "chird": "Chird", + "change_ringing": "Cambio timbre" } diff --git a/web/public/locales/es/common.json b/web/public/locales/es/common.json index 9f35ee958..13d094ac2 100644 --- a/web/public/locales/es/common.json +++ b/web/public/locales/es/common.json @@ -87,7 +87,10 @@ "formattedTimestampMonthDayYear": { "12hour": "MMM d, yyyy", "24hour": "MMM d, yyyy" - } + }, + "inProgress": "En progreso", + "invalidStartTime": "Hora de inicio no válida", + "invalidEndTime": "Hora de finalización no válida" }, "menu": { "settings": "Ajustes", @@ -189,7 +192,8 @@ "review": "Revisar", "explore": "Explorar", "uiPlayground": "Zona de pruebas de la interfaz de usuario", - "faceLibrary": "Biblioteca de rostros" + "faceLibrary": "Biblioteca de rostros", + "classification": "Clasificación" }, "unit": { "speed": { @@ -199,6 +203,14 @@ "length": { "meters": "Metros", "feet": "Pies" + }, + "data": { + "kbps": "kB/s", + "mbps": "MB/s", + "gbps": "GB/s", + "kbph": "kB/hora", + "mbph": "MB/hora", + "gbph": "GB/hora" } }, "button": { @@ -236,7 +248,8 @@ "enabled": "Habilitado", "saving": "Guardando…", "exitFullscreen": "Salir de pantalla completa", - "on": "ENCENDIDO" + "on": "ENCENDIDO", + "continue": "Continuar" }, "toast": { "save": { @@ -249,7 +262,12 @@ "copyUrlToClipboard": "URL copiada al portapapeles." }, "label": { - "back": "Volver atrás" + "back": "Volver atrás", + "hide": "Ocultar {{item}}", + "show": "Mostrar {{item}}", + "ID": "ID", + "none": "Ninguno", + "all": "Todas" }, "role": { "title": "Rol", @@ -283,5 +301,14 @@ "readTheDocumentation": "Leer la documentación", "information": { "pixels": "{{area}}px" + }, + "list": { + "two": "{{0}} y {{1}}", + "many": "{{items}}, y {{last}}", + "separatorWithSpace": ", " + }, + "field": { + "optional": "Opcional", + "internalID": "La ID interna que usa Frigate en la configuración y en la base de datos" } } diff --git a/web/public/locales/es/components/dialog.json b/web/public/locales/es/components/dialog.json index e200c388d..98c96528f 100644 --- a/web/public/locales/es/components/dialog.json +++ b/web/public/locales/es/components/dialog.json @@ -66,10 +66,11 @@ "toast": { "error": { "failed": "No se pudo iniciar la exportación: {{error}}", - "noVaildTimeSelected": "No se seleccionó un rango de tiempo válido.", - "endTimeMustAfterStartTime": "La hora de finalización debe ser posterior a la hora de inicio." + "noVaildTimeSelected": "No se seleccionó un rango de tiempo válido", + "endTimeMustAfterStartTime": "La hora de finalización debe ser posterior a la hora de inicio" }, - "success": "Exportación iniciada con éxito. Ver el archivo en la página exportaciones." + "success": "Exportación iniciada con éxito. Ver el archivo en la página exportaciones.", + "view": "Ver" }, "fromTimeline": { "saveExport": "Guardar exportación", @@ -129,6 +130,7 @@ "search": { "placeholder": "Búsqueda por etiqueta o sub-etiqueta..." }, - "noImages": "No se encontraron miniaturas para esta cámara" + "noImages": "No se encontraron miniaturas para esta cámara", + "unknownLabel": "Imagen de activación guardada" } } diff --git a/web/public/locales/es/components/filter.json b/web/public/locales/es/components/filter.json index 3625030f9..d9d77d6f9 100644 --- a/web/public/locales/es/components/filter.json +++ b/web/public/locales/es/components/filter.json @@ -133,5 +133,9 @@ }, "count_one": "{{count}} Clase", "count_other": "{{count}} Clases" + }, + "attributes": { + "label": "Clasificación de Atributos", + "all": "Todos los Atributos" } } diff --git a/web/public/locales/es/objects.json b/web/public/locales/es/objects.json index 0e972102c..0fd02208a 100644 --- a/web/public/locales/es/objects.json +++ b/web/public/locales/es/objects.json @@ -102,7 +102,7 @@ "baseball_bat": "Bate de béisbol", "oven": "Horno", "waste_bin": "Papelera", - "snowboard": "Snowboard", + "snowboard": "Tabla de Snow", "sandwich": "Sandwich", "fox": "Zorro", "nzpost": "NZPost", diff --git a/web/public/locales/es/views/classificationModel.json b/web/public/locales/es/views/classificationModel.json index 4890ed058..8d6087a8d 100644 --- a/web/public/locales/es/views/classificationModel.json +++ b/web/public/locales/es/views/classificationModel.json @@ -1,7 +1,7 @@ { - "documentTitle": "Modelos de Clasificación", + "documentTitle": "Modelos de Clasificación - Frigate", "button": { - "deleteClassificationAttempts": "Borrar Imágenes de Clasificación.", + "deleteClassificationAttempts": "Borrar Imágenes de Clasificación", "renameCategory": "Renombrar Clase", "deleteCategory": "Borrar Clase", "deleteImages": "Borrar Imágenes", @@ -30,12 +30,15 @@ "categorizeFailed": "Fallo al categorizar imagen: {{errorMessage}}", "trainingFailed": "El entrenamiento del modelo ha fallado. Revisa los registros de Frigate para más detalles.", "updateModelFailed": "Fallo al actualizar modelo: {{errorMessage}}", - "trainingFailedToStart": "No se pudo iniciar el entrenamiento del modelo: {{errorMessage}}" + "trainingFailedToStart": "No se pudo iniciar el entrenamiento del modelo: {{errorMessage}}", + "renameCategoryFailed": "Falló el renombrado de la clase: {{errorMessage}}" } }, "deleteCategory": { "title": "Borrar Clase", - "desc": "¿Esta seguro de que quiere borrar la clase {{name}}? Esto borrará permanentemente todas las imágenes asociadas y requerirá reentrenar el modelo." + "desc": "¿Esta seguro de que quiere borrar la clase {{name}}? Esto borrará permanentemente todas las imágenes asociadas y requerirá reentrenar el modelo.", + "minClassesTitle": "No se puede Borrar la Clase", + "minClassesDesc": "Un modelo de clasificación debe tener al menos 2 clases. Añade otra clase antes de borrar esta." }, "deleteModel": { "title": "Borrar Modelo de Clasificación", @@ -45,15 +48,145 @@ "desc_other": "¿Estas seguro de que quiere borrar {{count}} modelos? Esto borrara permanentemente todos los datos asociados, incluyendo imágenes y datos de entrenamiento. Esta acción no puede ser desehecha." }, "edit": { - "title": "Editar modelo de clasificación" + "title": "Editar modelo de clasificación", + "descriptionState": "Edita las clases para este modelo de clasificación de estados. Los cambios requerirán un reentrenamiento de modelo.", + "descriptionObject": "Edita el tipo de objeto y el tipo de clasificación para este modelo de clasificación de objetos.", + "stateClassesInfo": "Nota: El cambio de las clases de estado requiere reentrenar el modelo con las clases actualizadas." }, "tooltip": { "noChanges": "No se han realizado cambios en el conjunto de datos desde el último entrenamiento.", "modelNotReady": "El modelo no está listo para el entrenamiento", - "trainingInProgress": "El modelo está entrenándose actualmente.", + "trainingInProgress": "El modelo está entrenándose actualmente", "noNewImages": "No hay imágenes nuevas para entrenar. Clasifica antes más imágenes del conjunto de datos." }, "details": { - "scoreInfo": "La puntuación representa la confianza media de clasificación en todas las detecciones de este objeto." + "scoreInfo": "La puntuación representa la confianza media de clasificación en todas las detecciones de este objeto.", + "unknown": "Desconocido", + "none": "Nada" + }, + "categorizeImage": "Clasificar Imagen", + "menu": { + "objects": "Objetos", + "states": "Estados" + }, + "wizard": { + "steps": { + "chooseExamples": "Seleccionar Ejemplos", + "nameAndDefine": "Nombrar y definir", + "stateArea": "Área de estado" + }, + "step1": { + "name": "Nombre", + "namePlaceholder": "Introducir nombre del modelo...", + "type": "Tipo", + "typeState": "Estado", + "typeObject": "Objeto", + "objectLabel": "Etiqueta de Objeto", + "objectLabelPlaceholder": "Seleccionar tipo de objeto...", + "classificationAttribute": "Atributo", + "classes": "Clases", + "states": "Estados", + "classPlaceholder": "Introducir nombre de la clase...", + "errors": { + "nameRequired": "Se requiere nombre del modelo", + "nameLength": "El nombre del modelo debe tener 64 caracteres o menos", + "nameOnlyNumbers": "El nombre del modelo no puede contener solo números", + "classRequired": "Al menos se requiere una clase", + "classesUnique": "Los nombres de clase deben ser únicos", + "noneNotAllowed": "La clase 'none' no esta permitida", + "stateRequiresTwoClasses": "Los modelos de estado requieren al menos 2 clases", + "objectLabelRequired": "Por favor seleccione una etiqueta de objeto", + "objectTypeRequired": "Por favor seleccione un tipo de clasificación" + }, + "description": "Los modelos de estado monitorean las áreas fijas de la cámara para detectar cambios (p. ej., puerta abierta/cerrada). Los modelos de objetos clasifican los objetos detectados (p. ej., animales conocidos, repartidores, etc.).", + "classificationType": "Tipo de clasificación", + "classificationTypeTip": "Conozca más sobre los tipos de clasificación", + "classificationTypeDesc": "Las subetiquetas añaden texto adicional a la etiqueta del objeto (p. ej., «Persona: UPS»). Los atributos son metadatos que permiten búsquedas y se almacenan por separado en los metadatos del objeto.", + "classificationSubLabel": "Sub etiqueta", + "classesTip": "Aprenda más sobre clases", + "classesStateDesc": "Define los diferentes estados en los que puede estar el área de tu cámara. Por ejemplo: \"abierta\" y \"cerrada\" para una puerta de garaje.", + "classesObjectDesc": "Define las diferentes categorías para clasificar los objetos detectados. Por ejemplo: \"persona de reparto\", \"residente\" y \"desconocido\" para la clasificación de personas." + }, + "step2": { + "description": "Seleccione las cámaras y defina el area a monitorizar por cada cámara. El modelo clasificará el estado de estas cámaras.", + "cameras": "Camaras", + "selectCamera": "Selecciones Cámara", + "noCameras": "Haga clic en + para añadir cámaras", + "selectCameraPrompt": "Seleccione una cámara de la lista para definir su área de monitorización" + }, + "step3": { + "selectImagesPrompt": "Seleccione todas las imágenes de: {{className}}", + "selectImagesDescription": "Haga clic en las imágenes para seleccionarlas. Haga clic en Continuar cuando esté listo para esta clase.", + "generating": { + "title": "Generando Imágenes de Ejemplo", + "description": "Frigate está seleccionando imágenes representativas de sus grabaciones. Esto puede llevar un tiempo..." + }, + "training": { + "title": "Modelo de Entrenamiento", + "description": "Tu modelo se está entrenando en segundo plano. Cierra este cuadro de diálogo y tu modelo comenzará a ejecutarse en cuanto finalice el entrenamiento." + }, + "retryGenerate": "Reintentar Generación", + "noImages": "No se han generado imágenes de ejemplo", + "classifying": "Clasificando y Entrenando...", + "trainingStarted": "Entrenamiento iniciado con éxito", + "modelCreated": "Modelo creado con éxito. Use la vista de Clasificaciones Recientes para añadir imágenes para los estados que falten, después entrene el modelo.", + "errors": { + "noCameras": "No hay cámaras configuradas", + "noObjectLabel": "No se ha seleccionado etiqueta de objeto", + "generateFailed": "Falló la generación de ejemplos: {{error}}", + "generationFailed": "Generación fallida. Por favor pruebe otra vez.", + "classifyFailed": "Falló la clasificación de imágenes: {{error}}" + }, + "generateSuccess": "Imágenes de ejemplo generadas correctamente", + "missingStatesWarning": { + "title": "Faltan Ejemplos de Estado", + "description": "Se recomienda seleccionar ejemplos para todos los estados para obtener mejores resultados. Puede continuar sin seleccionar todos los estados, pero el modelo no se entrenará hasta que todos los estados tengan imágenes. Después de continuar, use la vista \"Clasificaciones recientes\" para clasificar las imágenes de los estados faltantes y luego entrene el modelo." + }, + "allImagesRequired_one": "Por favor clasifique todas las imágenes. Queda {{count}} imagen.", + "allImagesRequired_many": "Por favor clasifique todas las imágenes. Quedan {{count}} imágenes.", + "allImagesRequired_other": "Por favor clasifique todas las imágenes. Quedan {{count}} imágenes." + }, + "title": "Crear nueva Clasificación" + }, + "deleteDatasetImages": { + "title": "Borrar Conjunto de Imágenes", + "desc_one": "¿Está seguro de que quiere eliminar {{count}} imagen de {{dataset}}? Esta acción no puede ser deshecha y requerirá reentrenar el modelo.", + "desc_many": "¿Está seguro de que quiere eliminar {{count}} imágenes de {{dataset}}? Esta acción no puede ser deshecha y requerirá reentrenar el modelo.", + "desc_other": "¿Está seguro de que quiere eliminar {{count}} imágenes de {{dataset}}? Esta acción no puede ser deshecha y requerirá reentrenar el modelo." + }, + "deleteTrainImages": { + "title": "Borrar Imágenes de Entrenamiento", + "desc_one": "¿Está seguro de que quiere eliminar {{count}} imagen? Esta acción no puede ser deshecha.", + "desc_many": "¿Está seguro de que quiere eliminar {{count}} imágenes? Esta acción no puede ser deshecha.", + "desc_other": "¿Está seguro de que quiere eliminar {{count}} imágenes? Esta acción no puede ser deshecha." + }, + "renameCategory": { + "title": "Renombrar Clase", + "desc": "Introduzca un nuevo nombre para {{name}}. Se requerirá que reentrene el modelo para que el cambio de nombre tenga efecto." + }, + "description": { + "invalidName": "Nombre incorrecto. Los nombres solo pueden incluir letras, números, espacios, apóstrofes, guiones bajos, y guiones." + }, + "train": { + "title": "Clasificaciones Recientes", + "titleShort": "Reciente", + "aria": "Seleccione Clasificaciones Recientes" + }, + "categories": "Clases", + "createCategory": { + "new": "Crear Nueva Clase" + }, + "categorizeImageAs": "Clasificar Imagen Como:", + "noModels": { + "object": { + "title": "No hay Modelos de Clasificación de Objetos", + "description": "Crear modelo a medida para clasificar los objetos detectados.", + "buttonText": "Crear Modelo de Objetos" + }, + "state": { + "title": "No hay Modelos de Clasificación de Estados", + "description": "Cree un modelo personalizado para monitorear y clasificar los cambios de estado en áreas específicas de la cámara.", + "buttonText": "Crear modelo de estado" + } } } diff --git a/web/public/locales/es/views/events.json b/web/public/locales/es/views/events.json index b2b4001ba..d13daff60 100644 --- a/web/public/locales/es/views/events.json +++ b/web/public/locales/es/views/events.json @@ -9,7 +9,11 @@ "empty": { "alert": "No hay alertas para revisar", "detection": "No hay detecciones para revisar", - "motion": "No se encontraron datos de movimiento" + "motion": "No se encontraron datos de movimiento", + "recordingsDisabled": { + "title": "Las grabaciones deben estar habilitadas", + "description": "Solo se pueden crear elementos de revisión para una cámara cuando las grabaciones están habilitadas para esa cámara." + } }, "timeline": "Línea de tiempo", "timeline.aria": "Seleccionar línea de tiempo", @@ -56,5 +60,9 @@ "objectTrack": { "clickToSeek": "Clic para ir a este momento", "trackedPoint": "Puntro trazado" - } + }, + "select_all": "Todas", + "normalActivity": "Normal", + "needsReview": "Necesita revisión", + "securityConcern": "Aviso de seguridad" } diff --git a/web/public/locales/es/views/explore.json b/web/public/locales/es/views/explore.json index 7fcd50fb0..f8f61ce83 100644 --- a/web/public/locales/es/views/explore.json +++ b/web/public/locales/es/views/explore.json @@ -42,13 +42,15 @@ "updatedSublabel": "Subetiqueta actualizada con éxito.", "regenerate": "Se ha solicitado una nueva descripción a {{provider}}. Dependiendo de la velocidad de tu proveedor, la nueva descripción puede tardar algún tiempo en regenerarse.", "updatedLPR": "Matrícula actualizada con éxito.", - "audioTranscription": "Transcripción de audio solicitada con éxito." + "audioTranscription": "Se solicitó correctamente la transcripción de audio. Dependiendo de la velocidad de su servidor Frigate, la transcripción puede tardar un tiempo.", + "updatedAttributes": "Atributos actualizados correctamente." }, "error": { "regenerate": "No se pudo llamar a {{provider}} para una nueva descripción: {{errorMessage}}", "updatedSublabelFailed": "No se pudo actualizar la subetiqueta: {{errorMessage}}", "updatedLPRFailed": "No se pudo actualizar la matrícula: {{errorMessage}}", - "audioTranscription": "Transcripción de audio solicitada falló: {{errorMessage}}" + "audioTranscription": "Transcripción de audio solicitada falló: {{errorMessage}}", + "updatedAttributesFailed": "No se pudieron actualizar los atributos: {{errorMessage}}" } }, "tips": { @@ -102,6 +104,14 @@ }, "score": { "label": "Puntuación" + }, + "editAttributes": { + "title": "Editar atributos", + "desc": "Seleccione atributos de clasificación para esta {{label}}" + }, + "attributes": "Atributos de clasificación", + "title": { + "label": "Título" } }, "documentTitle": "Explorar - Frigate", @@ -198,12 +208,26 @@ "addTrigger": { "label": "Añadir disparador", "aria": "Añadir disparador para el objeto seguido" + }, + "downloadCleanSnapshot": { + "label": "Descargue instantánea limpia", + "aria": "Descargue instantánea limpia" + }, + "viewTrackingDetails": { + "label": "Ver detalles de seguimiento", + "aria": "Ver detalles de seguimiento" + }, + "showObjectDetails": { + "label": "Mostrar la ruta del objeto" + }, + "hideObjectDetails": { + "label": "Ocultar la ruta del objeto" } }, "dialog": { "confirmDelete": { "title": "Confirmar eliminación", - "desc": "Eliminar este objeto rastreado elimina la captura de pantalla, cualquier incrustación guardada y cualquier entrada asociada al ciclo de vida del objeto. Las grabaciones de este objeto rastreado en la vista de Historial NO se eliminarán.

¿Estás seguro de que quieres proceder?" + "desc": "Al eliminar este objeto rastreado, se eliminan la instantánea, las incrustaciones guardadas y las entradas de detalles de seguimiento asociadas. Las grabaciones de este objeto rastreado en la vista Historial NO se eliminarán.

¿Seguro que desea continuar?" } }, "noTrackedObjects": "No se encontraron objetos rastreados", @@ -215,7 +239,9 @@ "error": "No se pudo eliminar el objeto rastreado: {{errorMessage}}" } }, - "tooltip": "Coincidencia con {{type}} al {{confidence}}%" + "tooltip": "Coincidencia con {{type}} al {{confidence}}%", + "previousTrackedObject": "Objeto rastreado previo", + "nextTrackedObject": "Objeto rastreado siguiente" }, "trackedObjectsCount_one": "{{count}} objeto rastreado ", "trackedObjectsCount_many": "{{count}} objetos rastreados ", @@ -235,7 +261,45 @@ "scrollViewTips": "Haz clic para ver los momentos relevantes del ciclo de vida de este objeto.", "count": "{{first}} de {{second}}", "lifecycleItemDesc": { - "visible": "{{label}} detectado" + "visible": "{{label}} detectado", + "active": "{{label}} ha sido activado/a", + "stationary": "{{label}} se volvió estacionaria", + "attribute": { + "faceOrLicense_plate": "{{attribute}} detectado para {{label}}", + "other": "{{label}} reconocido como {{attribute}}" + }, + "gone": "{{label}} ha salido", + "heard": "{{label}} escuchado/a", + "external": "{{label}} detectado", + "header": { + "zones": "Zonas", + "area": "Área", + "score": "Puntuación", + "ratio": "Ratio(proporción)" + }, + "entered_zone": "{{label}} ha entrado en {{zones}}" + }, + "trackedPoint": "Punto rastreado", + "annotationSettings": { + "title": "Configuración de anotaciones", + "showAllZones": { + "title": "Mostrar todas las Zonas", + "desc": "Mostrar siempre zonas en los marcos donde los objetos han entrado en una zona." + }, + "offset": { + "label": "Desplazamiento de anotación", + "desc": "Estos datos provienen de la señal de detección de la cámara, pero se superponen a las imágenes de la señal de grabación. Es poco probable que ambas transmisiones estén perfectamente sincronizadas. Por lo tanto, el cuadro delimitador y el metraje no se alinearán perfectamente. Puede usar esta configuración para desplazar las anotaciones hacia adelante o hacia atrás en el tiempo para que se alineen mejor con el metraje grabado.", + "millisecondsToOffset": "Milisegundos para compensar la detección de anotaciones. Predeterminado: 0", + "tips": "Disminuya el valor si la reproducción de vídeo se produce antes de los cuadros y los puntos de ruta, y auméntelo si se produce después de ellos. Este valor puede ser negativo.", + "toast": { + "success": "El desplazamiento de anotación para {{camera}} se ha guardado en el archivo de configuración." + } + } + }, + "autoTrackingTips": "Las posiciones del cuadro delimitador serán inexactas para las cámaras con seguimiento automático.", + "carousel": { + "previous": "Vista anterior", + "next": "Vista siguiente" } } } diff --git a/web/public/locales/es/views/faceLibrary.json b/web/public/locales/es/views/faceLibrary.json index 25fa983e7..44e1eba01 100644 --- a/web/public/locales/es/views/faceLibrary.json +++ b/web/public/locales/es/views/faceLibrary.json @@ -2,7 +2,7 @@ "description": { "addFace": "Agregar una nueva colección a la Biblioteca de Rostros subiendo tu primera imagen.", "placeholder": "Introduce un nombre para esta colección", - "invalidName": "Nombre inválido. Los nombres solo pueden incluir letras, números, espacios, apóstrofes, guiones bajos y guiones." + "invalidName": "Nombre incorrecto. Los nombres solo pueden incluir letras, números, espacios, apóstrofes, guiones bajos, y guiones." }, "details": { "person": "Persona", @@ -28,7 +28,8 @@ "train": { "title": "Reconocimientos Recientes", "aria": "Seleccionar reconocimientos recientes", - "empty": "No hay intentos recientes de reconocimiento facial" + "empty": "No hay intentos recientes de reconocimiento facial", + "titleShort": "Reciente" }, "selectItem": "Seleccionar {{item}}", "selectFace": "Seleccionar rostro", @@ -59,10 +60,10 @@ "deletedName_one": "{{count}} rostro ha sido eliminado con éxito.", "deletedName_many": "{{count}} rostros han sido eliminados con éxito.", "deletedName_other": "{{count}} rostros han sido eliminados con éxito.", - "updatedFaceScore": "Puntuación del rostro actualizada con éxito.", - "deletedFace_one": "{{count}} rostro eliminado con éxito", - "deletedFace_many": "{{count}} rostros eliminados con éxito", - "deletedFace_other": "{{count}} rostros eliminados con éxito", + "updatedFaceScore": "Puntuación del rostro actualizada con éxito a {{name}} ({{score}}).", + "deletedFace_one": "{{count}} rostro eliminado con éxito.", + "deletedFace_many": "{{count}} rostros eliminados con éxito.", + "deletedFace_other": "{{count}} rostros eliminados con éxito.", "uploadedImage": "Imagen subida con éxito.", "renamedFace": "Rostro renombrado con éxito a {{name}}" }, diff --git a/web/public/locales/es/views/live.json b/web/public/locales/es/views/live.json index 3d8c0b0be..664f7abec 100644 --- a/web/public/locales/es/views/live.json +++ b/web/public/locales/es/views/live.json @@ -86,7 +86,7 @@ }, "manualRecording": { "title": "Bajo demanda", - "tips": "Iniciar un evento manual basado en la configuración de retención de grabaciones de esta cámara.", + "tips": "Descargar una instantánea o Iniciar un evento manual basado en la configuración de retención de grabaciones de esta cámara.", "playInBackground": { "label": "Reproducir en segundo plano", "desc": "Habilitar esta opción para continuar transmitiendo cuando el reproductor esté oculto." @@ -173,7 +173,17 @@ }, "noCameras": { "title": "No hay cámaras configuradas", - "description": "Comienza conectando una cámara.", - "buttonText": "Añade Cámara" + "description": "Comienza conectando una cámara a Frigate.", + "buttonText": "Añade Cámara", + "restricted": { + "title": "No hay cámaras disponibles", + "description": "No tiene permiso para ver ninguna cámara en este grupo." + } + }, + "snapshot": { + "takeSnapshot": "Descarga captura instantánea", + "noVideoSource": "No hay ninguna fuente de video disponible para la instantánea.", + "captureFailed": "Fallo al capturar la instantánea.", + "downloadStarted": "La descarga de la instantánea ha comenzado." } } diff --git a/web/public/locales/es/views/search.json b/web/public/locales/es/views/search.json index 7458c491d..547b17f4e 100644 --- a/web/public/locales/es/views/search.json +++ b/web/public/locales/es/views/search.json @@ -26,7 +26,8 @@ "max_speed": "Velocidad Máxima", "recognized_license_plate": "Matrícula Reconocida", "has_clip": "Tiene Clip", - "has_snapshot": "Tiene Instantánea" + "has_snapshot": "Tiene Instantánea", + "attributes": "Atributos" }, "searchType": { "thumbnail": "Miniatura", diff --git a/web/public/locales/es/views/settings.json b/web/public/locales/es/views/settings.json index 7fe10b3ff..e9745c4f7 100644 --- a/web/public/locales/es/views/settings.json +++ b/web/public/locales/es/views/settings.json @@ -50,7 +50,15 @@ "label": "Reproducir vídeos de alertas", "desc": "De forma predeterminada, las alertas recientes en el panel en directo se reproducen como pequeños vídeos en bucle. Desactiva esta opción para mostrar solo una imagen estática de las alertas recientes en este dispositivo/navegador." }, - "title": "Panel en directo" + "title": "Panel en directo", + "displayCameraNames": { + "label": "Siempre mostrar nombres de las Camaras", + "desc": "Siempre mostrar nombres de cámaras en la vista en vivo multi-cámara." + }, + "liveFallbackTimeout": { + "label": "Tiempo de espera de respaldo del reproductor en vivo", + "desc": "Cuando la reproducción en vivo de alta calidad de la cámara no está disponible, se usará el modo de ancho de banda bajo después de este número de segundos. Por defecto: 3." + } }, "cameraGroupStreaming": { "desc": "La configuración de transmisión de cada grupo de cámaras se guarda en el almacenamiento local de tu navegador.", @@ -232,7 +240,8 @@ "mustNotBeSameWithCamera": "El nombre de la zona no debe ser el mismo que el nombre de la cámara.", "hasIllegalCharacter": "El nombre de la zona contiene caracteres no permitidos.", "mustBeAtLeastTwoCharacters": "El nombre de la zona debe tener al menos 2 caracteres.", - "mustNotContainPeriod": "El nombre de la zona no debe contener puntos." + "mustNotContainPeriod": "El nombre de la zona no debe contener puntos.", + "mustHaveAtLeastOneLetter": "El nombre de la Zona debe contener al menos una letra." } }, "distance": { @@ -298,7 +307,7 @@ "name": { "title": "Nombre", "inputPlaceHolder": "Introduce un nombre…", - "tips": "El nombre debe tener al menos 2 caracteres y no debe ser el nombre de una cámara ni de otra zona." + "tips": "El nombre debe tener al menos 2 caracteres, al menos 1 letra y no debe coincidir con el nombre de una cámara ni de otra zona." }, "documentTitle": "Editar Zona - Frigate", "clickDrawPolygon": "Haz clic para dibujar un polígono en la imagen.", @@ -326,7 +335,7 @@ "point_other": "{{count}} puntos", "allObjects": "Todos los objetos", "toast": { - "success": "La zona ({{zoneName}}) ha sido guardada. Reinicia Frigate para aplicar los cambios." + "success": "La zona ({{zoneName}}) ha sido guardada." } }, "toast": { @@ -360,8 +369,8 @@ }, "toast": { "success": { - "noName": "La máscara de movimiento ha sido guardada. Reinicia Frigate para aplicar los cambios.", - "title": "{{polygonName}} ha sido guardado. Reinicia Frigate para aplicar los cambios." + "noName": "La máscara de movimiento ha sido guardada.", + "title": "{{polygonName}} ha sido guardado." } }, "documentTitle": "Editar Máscara de Movimiento - Frigate", @@ -386,8 +395,8 @@ }, "toast": { "success": { - "noName": "La máscara de objetos ha sido guardada. Reinicia Frigate para aplicar los cambios.", - "title": "{{polygonName}} ha sido guardado. Reinicia Frigate para aplicar los cambios." + "noName": "La máscara de objetos ha sido guardada.", + "title": "{{polygonName}} ha sido guardado." } }, "point_one": "{{count}} punto", @@ -509,7 +518,7 @@ "role": "Rol", "noUsers": "No se encontraron usuarios.", "changeRole": "Cambiar el rol del usuario", - "password": "Contraseña", + "password": "Restablecer Contraseña", "deleteUser": "Eliminar usuario" }, "dialog": { @@ -534,7 +543,16 @@ "veryStrong": "Muy fuerte" }, "match": "Las contraseñas coinciden", - "notMatch": "Las contraseñas no coinciden" + "notMatch": "Las contraseñas no coinciden", + "show": "Mostrar contraseña", + "hide": "Ocultar contraseña", + "requirements": { + "title": "Requisitos de contraseña:", + "length": "Al menos 8 caracteres", + "uppercase": "Al menos una mayúscula", + "digit": "Al menos un número", + "special": "Al menos un caracter especial (!@#$%^&*(),.?\":{}|<>)" + } }, "newPassword": { "title": "Nueva contraseña", @@ -544,14 +562,23 @@ } }, "usernameIsRequired": "Se requiere el nombre de usuario", - "passwordIsRequired": "Se requiere contraseña" + "passwordIsRequired": "Se requiere contraseña", + "currentPassword": { + "title": "Contraseña actual", + "placeholder": "Introduzca su contraseña actual" + } }, "passwordSetting": { "updatePassword": "Actualizar contraseña para {{username}}", "setPassword": "Establecer contraseña", "desc": "Crear una contraseña fuerte para asegurar esta cuenta.", "cannotBeEmpty": "La contraseña no puede estar vacía", - "doNotMatch": "Las contraseñas no coinciden" + "doNotMatch": "Las contraseñas no coinciden", + "currentPasswordRequired": "Se requiere la contraseña actual", + "incorrectCurrentPassword": "La contraseña actual es incorrecta", + "passwordVerificationFailed": "Fallo al verificar la contraseña", + "multiDeviceWarning": "Cualquier otro dispositivo en el que haya iniciado sesión deberá iniciar sesión nuevamente con {{refresh_time}}.", + "multiDeviceAdmin": "También puede obligar a todos los usuarios a volver a autenticarse inmediatamente rotando su secreto JWT." }, "createUser": { "desc": "Añadir una nueva cuenta de usuario y especificar un rol para el acceso a áreas de la interfaz de usuario de Frigate.", @@ -578,7 +605,7 @@ "desc": "Esta acción no se puede deshacer. Esto eliminará permanentemente la cuenta de usuario y eliminará todos los datos asociados." } }, - "updatePassword": "Actualizar contraseña" + "updatePassword": "Restablecer contraseña" }, "notification": { "title": "Notificaciones", @@ -745,7 +772,7 @@ "triggers": { "documentTitle": "Disparadores", "management": { - "title": "Gestión de disparadores", + "title": "Disparadores", "desc": "Gestionar disparadores para {{camera}}. Usa el tipo de miniatura para activar en miniaturas similares al objeto rastreado seleccionado, y el tipo de descripción para activar en descripciones similares al texto que especifiques." }, "addTrigger": "Añadir Disparador", @@ -766,7 +793,9 @@ }, "actions": { "alert": "Marcar como Alerta", - "notification": "Enviar Notificación" + "notification": "Enviar Notificación", + "sub_label": "Añadir una subetiqueta", + "attribute": "Añadir atributo" }, "dialog": { "createTrigger": { @@ -784,19 +813,22 @@ "form": { "name": { "title": "Nombre", - "placeholder": "Entre nombre de disparador", + "placeholder": "Asigne nombre a este disparador", "error": { - "minLength": "El nombre debe tener al menos 2 caracteres.", - "invalidCharacters": "El nombre sólo puede contener letras, números, guiones bajos, y guiones.", + "minLength": "El campo debe tener al menos 2 caracteres.", + "invalidCharacters": "El campo sólo puede contener letras, números, guiones bajos, y guiones.", "alreadyExists": "Un disparador con este nombre ya existe para esta cámara." - } + }, + "description": "Ingrese un nombre o descripción únicos para identificar este disparador" }, "enabled": { "description": "Activa o desactiva este disparador" }, "type": { "title": "Tipo", - "placeholder": "Seleccione tipo de disparador" + "placeholder": "Seleccione tipo de disparador", + "description": "Se dispara cuando se detecta una descripción de objeto rastreado similar", + "thumbnail": "Se dispara cuando se detecta una miniatura de un objeto rastreado similar" }, "friendly_name": { "title": "Nombre amigable", @@ -805,12 +837,12 @@ }, "content": { "title": "Contenido", - "imagePlaceholder": "Seleccione una imágen", + "imagePlaceholder": "Seleccione una imagen", "textPlaceholder": "Entre contenido de texto", "error": { "required": "El contenido es requrido." }, - "imageDesc": "Seleccione una imágen para iniciar esta acción cuando una imágen similar es detectada.", + "imageDesc": "Solo se muestran las 100 miniaturas más recientes. Si no encuentra la miniatura que busca, revise los objetos anteriores en Explorar y configure un disparador desde el menú.", "textDesc": "Entre texto para iniciar esta acción cuando la descripción de un objecto seguido similar es detectado." }, "threshold": { @@ -818,14 +850,15 @@ "error": { "min": "El umbral debe ser al menos 0", "max": "El umbral debe ser al menos 1" - } + }, + "desc": "Establezca el umbral de similitud para este disparador. Un umbral más alto significa que se requiere una coincidencia más cercana para activar el disparador." }, "actions": { "title": "Acciones", "error": { "min": "Al menos una acción debe ser seleccionada." }, - "desc": "Por defecto, Frigate manda un mensaje MQTT por todos los disparadores. Seleccione una acción adicional que se realizará cuando este disparador se accione." + "desc": "Por defecto, Frigate manda un mensaje MQTT para todos los disparadores. Las subetiquetas añaden el nombre del disparador a la etiqueta del objeto. Los atributos son metadatos de búsqueda que se almacenan por separado en los metadatos del objeto rastreado." } } }, @@ -844,6 +877,23 @@ "updateTriggerFailed": "Fallo al actualizar el disparador: {{errorMessage}}", "deleteTriggerFailed": "Fallo al eliminar el disparador: {{errorMessage}}" } + }, + "wizard": { + "title": "Crear disparador", + "step1": { + "description": "Configure los ajustes básicos para su disparador." + }, + "step2": { + "description": "Configure el contenido que activará esta acción." + }, + "step3": { + "description": "Configure el umbral y las acciones para este disparador." + }, + "steps": { + "nameAndType": "Nombre y tipo", + "configureData": "Configurar datos", + "thresholdAndActions": "Umbral y acciones" + } } }, "roles": { @@ -865,9 +915,9 @@ "createRole": "Rol {{role}} creado exitosamente", "updateCameras": "Cámara actualizada para el rol {{role}}", "deleteRole": "Rol {{role}} eliminado exitosamente", - "userRolesUpdated_one": "{{count}} usuarios asignados a este rol han sido actualizados a 'visor', que tiene acceso a todas las cámaras.", - "userRolesUpdated_many": "", - "userRolesUpdated_other": "" + "userRolesUpdated_one": "{{count}} usuario asignado a este rol ha sido actualizado a 'revisor', que tiene acceso a todas las cámaras.", + "userRolesUpdated_many": "{{count}} usuarios asignados a este rol han sido actualizado a 'revisor', que tienen acceso a todas las cámaras.", + "userRolesUpdated_other": "{{count}} usuarios asignados a este rol han sido actualizado a 'revisor', que tienen acceso a todas las cámaras." }, "error": { "createRoleFailed": "Creación de rol fallida: {{errorMessage}}", @@ -907,5 +957,271 @@ } } } + }, + "cameraWizard": { + "step1": { + "errors": { + "nameRequired": "El nombre de la cámara es un campo obligatorio", + "nameLength": "El nombre de la cámara debe tener 64 caracteres o menos", + "invalidCharacters": "El nombre de la cámara contiene caracteres no válidos", + "nameExists": "El nombre de la cámara ya existe", + "customUrlRtspRequired": "Las URL personalizadas deben comenzar con \"rtsp://\". Se requiere configuración manual para transmisiones de cámara sin RTSP.", + "brandOrCustomUrlRequired": "Seleccione una marca de cámara con host/IP o elija \"Otro\" con una URL personalizada" + }, + "description": "Ingrese los detalles de su cámara y elija probar la cámara o seleccionar manualmente la marca.", + "cameraName": "Nombre de la Cámara", + "cameraNamePlaceholder": "Ejempo: puerta_principal o Vista del Patio trasero", + "host": "Nombre Host / Dirección IP", + "port": "Puerto", + "username": "Nombre de usuario", + "usernamePlaceholder": "Opcional", + "password": "Contraseña", + "passwordPlaceholder": "Opcional", + "selectTransport": "Seleccionar protocolo de transporte", + "cameraBrand": "Marca de la cámara", + "selectBrand": "Seleccione la marca de la cámara para la plantilla de URL", + "customUrl": "URL de transmisión personalizada", + "brandInformation": "Información de la Marca", + "brandUrlFormat": "Para cámaras con formato de URL RTSP como: {{exampleUrl}}", + "customUrlPlaceholder": "rtsp://usuario:contraseña@hostname:puerto/ruta", + "connectionSettings": "Ajustes de conexión", + "detectionMethod": "Método de detección de transmisión", + "onvifPort": "Puerto ONVIF", + "probeMode": "Cámara de sonda", + "manualMode": "Selección manual", + "detectionMethodDescription": "Pruebe la cámara con ONVIF (si es compatible) para encontrar las URL de transmisión o seleccione manualmente la marca de la cámara para usar las URL predefinidas. Para introducir una URL RTSP personalizada, elija el método manual y seleccione \"Otro\".", + "onvifPortDescription": "Para las cámaras compatibles con ONVIF, normalmente es 80 o 8080.", + "useDigestAuth": "Use autenticación digest", + "useDigestAuthDescription": "Utilice la autenticación HTTP digest para ONVIF. Algunas cámaras pueden requerir un nombre de usuario y contraseña ONVIF específicos en lugar del usuario administrador estándar." + }, + "step2": { + "description": "Pruebe la cámara para detectar transmisiones disponibles o configure ajustes manuales según el método de detección seleccionado.", + "testSuccess": "Test de conexión satisfactorio!", + "testFailed": "Test de conexión fallido. Revise la informacion proporcionada e inténtelo de nuevo.", + "testFailedTitle": "Test fallido", + "streamDetails": "Detalles de la transmisión", + "probing": "Probando la cámara...", + "retry": "Re-intentar", + "testing": { + "probingMetadata": "Probando metadatos de la cámara...", + "fetchingSnapshot": "Obteniendo una instantánea de la cámara..." + }, + "probeFailed": "No se pudo alcanzar la cámara: {{error}}", + "probingDevice": "Probando el dispositivo...", + "probeSuccessful": "Prueba satisfactoria", + "probeError": "Error durante la prueba", + "probeNoSuccess": "Prueba fallida", + "deviceInfo": "Información de Dispositivo", + "manufacturer": "Fabricante", + "model": "Modelo", + "firmware": "Firmware", + "profiles": "Perfiles", + "ptzSupport": "Soporte PTZ", + "autotrackingSupport": "Soporte auto-seguimiento", + "presets": "Preestablecidos", + "rtspCandidates": "Candidatos RTSP", + "rtspCandidatesDescription": "Se encontraron las siguientes URL RTSP durante el sondeo de la cámara. Pruebe la conexión para ver los metadatos de la transmisión.", + "noRtspCandidates": "No se encontraron URL RTSP de la cámara. Es posible que sus credenciales sean incorrectas o que la cámara no sea compatible con ONVIF o el método utilizado para obtener las URL RTSP. Vuelva atrás e introduzca la URL RTSP manualmente.", + "candidateStreamTitle": "Candidato {{number}}", + "useCandidate": "Uso", + "uriCopy": "Copiar", + "uriCopied": "URI copiada al portapapeles", + "testConnection": "Probar conexión", + "toggleUriView": "Haga clic para alternar la vista completa de URI", + "connected": "Conectada", + "notConnected": "No conectada", + "errors": { + "hostRequired": "nombre host/dirección IP requeridos" + } + }, + "step3": { + "description": "Configure los roles de transmisión y agregue transmisiones adicionales para su cámara.", + "streamsTitle": "Transmisiones de cámara", + "addStream": "Añadir ruta de transmisión", + "addAnotherStream": "Añadir otra ruta de transmisión", + "streamTitle": "Transmisión {{number}}", + "streamUrl": "URL de transmisión", + "streamUrlPlaceholder": "rtsp://usuario:contraseña@nombrehost:puerto/ruta", + "selectStream": "Seleccione una transmisión", + "searchCandidates": "Búsqueda de candidatos...", + "noStreamFound": "No se ha encontrado transmisión", + "url": "URL", + "resolution": "Resolución", + "selectResolution": "Seleccione resolución", + "quality": "Calidad", + "selectQuality": "Seleccione calidad", + "roles": "Roles", + "roleLabels": { + "detect": "Detección de objetos", + "record": "Grabando", + "audio": "Audio" + }, + "testStream": "Pruebe la conexión", + "testSuccess": "Test de transmisión satisfactorio!", + "testFailed": "Test de transmisión fallido", + "testFailedTitle": "Prueba falló", + "connected": "Conectado", + "notConnected": "No conectado", + "featuresTitle": "Características", + "go2rtc": "Reduzca conexiones hacia la cámara", + "detectRoleWarning": "al menos una transmisión debe tener el roll de detección para continuar.", + "rolesPopover": { + "title": "Roles de transmisión", + "record": "Guarda segmentos de la transmisión de video según la configuración.", + "detect": "Hilo principal para detección de objetos.", + "audio": "Hilo para detección basada en audio." + }, + "featuresPopover": { + "title": "Características de transmisión", + "description": "Utilice la retransmisión go2rtc para reducir las conexiones a su cámara." + } + }, + "step4": { + "description": "Validación y análisis finales antes de guardar la nueva cámara. Conecte cada transmisión antes de guardar.", + "validationTitle": "Validacion de transmisión", + "connectAllStreams": "Conectar todas las transmisiones", + "reconnectionSuccess": "Reconexión satisfactoria.", + "reconnectionPartial": "Algunas transmisiones no pudieron reconectarse.", + "streamUnavailable": "Vista previa de transmisión no disponible", + "reload": "Recargar", + "connecting": "Conectando...", + "streamTitle": "Transmisión {{number}}", + "valid": "Válido", + "failed": "Falló", + "notTested": "No probado", + "connectStream": "Conectar", + "connectingStream": "Conectando", + "disconnectStream": "Desconectar", + "estimatedBandwidth": "Ancho de banda estimado", + "roles": "Roles", + "ffmpegModule": "Utilice el modo de compatibilidad de transmisión", + "ffmpegModuleDescription": "Si la transmisión no carga después de varios intentos, intenta activar esta opción. Al activarla, Frigate usará el módulo ffmpeg con go2rtc. Esto puede mejorar la compatibilidad con algunas transmisiones de cámara.", + "none": "Ninguna", + "error": "Error", + "streamValidated": "Transmisión {{number}} validada correctamente", + "streamValidationFailed": "Stream {{number}} falló la validación", + "saveAndApply": "Guardar nueva cámara", + "saveError": "Configuración inválida. Revise la configuración.", + "issues": { + "title": "Validación de transmisión", + "videoCodecGood": "El codec de video es {{codec}}.", + "audioCodecGood": "El codec de audio es {{codec}}.", + "resolutionHigh": "Una resolución de {{resolution}} puede provocar un mayor uso de recursos.", + "resolutionLow": "Una resolución de {{resolution}} puede ser demasiado baja para una detección confiable de objetos pequeños.", + "noAudioWarning": "No se detectó audio para esta transmisión, las grabaciones no tendrán audio.", + "audioCodecRecordError": "El códec de audio AAC es necesario para admitir audio en grabaciones.", + "audioCodecRequired": "Se requiere una transmisión de audio para admitir la detección de audio.", + "restreamingWarning": "Reducir las conexiones a la cámara para la transmisión de grabación puede aumentar ligeramente el uso de la CPU.", + "brands": { + "reolink-rtsp": "No se recomienda usar Reolink RTSP. Active HTTP en la configuración del firmware de la cámara y reinicie el asistente.", + "reolink-http": "Las transmisiones HTTP de Reolink deberían usar FFmpeg para una mejor compatibilidad. Active \"Usar modo de compatibilidad de transmisiones\" para esta transmisión." + }, + "dahua": { + "substreamWarning": "La subtransmisión 1 está limitada a una resolución baja. Muchas cámaras Dahua/Amcrest/EmpireTech admiten subtransmisiones adicionales que deben habilitarse en la configuración de la cámara. Se recomienda comprobar y utilizar dichas transmisiones si están disponibles." + }, + "hikvision": { + "substreamWarning": "La subtransmisión 1 está limitada a una resolución baja. Muchas cámaras Hikvision admiten subtransmisiones adicionales que deben habilitarse en la configuración de la cámara. Se recomienda comprobar y utilizar dichas transmisiones si están disponibles." + } + } + }, + "title": "Añadir cámara", + "description": "Siga los siguientes pasos para agregar una nueva cámara a su instalación de Frigate.", + "steps": { + "nameAndConnection": "Nombre y conexión", + "probeOrSnapshot": "Sonda de prueba o hacer instantánea", + "streamConfiguration": "Configuración de transmisión", + "validationAndTesting": "Validación y pruebas" + }, + "save": { + "success": "La nueva cámara {{cameraName}} se guardó correctamente.", + "failure": "Error al guardar {{cameraName}}." + }, + "testResultLabels": { + "resolution": "Resolución", + "video": "Video", + "audio": "Audio", + "fps": "FPS" + }, + "commonErrors": { + "noUrl": "Proporcione una URL de transmisión válida", + "testFailed": "Prueba de transmisión fallida: {{error}}" + } + }, + "cameraManagement": { + "title": "Administrar cámaras", + "addCamera": "Añadir nueva cámara", + "editCamera": "Editar cámara:", + "selectCamera": "Seleccione una cámara", + "backToSettings": "Volver a configuración de la cámara", + "streams": { + "title": "Habilitar/deshabilitar cámaras", + "desc": "Desactiva temporalmente una cámara hasta que Frigate se reinicie. Desactivar una cámara detiene por completo el procesamiento de las transmisiones de Frigate. La detección, la grabación y la depuración no estarán disponibles.
Nota: Esto no desactiva las retransmisiones de go2rtc." + }, + "cameraConfig": { + "add": "Añadir cámara", + "edit": "Editar cámara", + "description": "Configure los ajustes de la cámara, incluidas las entradas de transmisión y los roles.", + "name": "Nombre de la cámara", + "nameRequired": "El nombre de la cámara es obligatorio", + "nameLength": "El nombre de la cámara debe ser inferior a 64 caracteres.", + "namePlaceholder": "Ejemplo: puerta_principal o Vista general de patio trasero", + "enabled": "Habilitada", + "ffmpeg": { + "inputs": "Transmisiones entrantes", + "path": "Ruta de transmisión", + "pathRequired": "La ruta de transmisión es requerida", + "pathPlaceholder": "rtsp://...", + "roles": "Roles", + "rolesRequired": "Al menos un rol es requerido", + "rolesUnique": "Cada rol (audio, detección, grabación) puede únicamente asignarse a una transmisión", + "addInput": "Añadir transmision entrante", + "removeInput": "Elimine transmisión entrante", + "inputsRequired": "Se requiere al menos una transmisión entrante" + }, + "go2rtcStreams": "Transmisiones go2rtc", + "streamUrls": "URLs de transmisión", + "addUrl": "Añadir URL", + "addGo2rtcStream": "Añadir transmisión go2rtc", + "toast": { + "success": "Cámara {{cameraName}} guardada correctamente" + } + } + }, + "cameraReview": { + "title": "Configuración de revisión de la cámara", + "object_descriptions": { + "title": "Descripciones de objetos de IA generativa", + "desc": "Habilite o deshabilite temporalmente las descripciones de objetos generadas por IA para esta cámara. Al deshabilitarlas, no se solicitarán descripciones generadas por IA para los objetos rastreados en esta cámara." + }, + "review_descriptions": { + "title": "Revisión de descripciones de IA generativa", + "desc": "Habilita o deshabilita temporalmente las revisión de descripciones generadas por IA para esta cámara. Al deshabilitarlas, no se solicitarán descripciones generadas por IA para los elementos de revisión de esta cámara." + }, + "review": { + "title": "Revisar", + "desc": "Habilite o deshabilite temporalmente las alertas y detecciones de esta cámara hasta que Frigate se reinicie. Al deshabilitarlas, no se generarán nuevas revisiones. ", + "alerts": "Alertas ", + "detections": "Detecciones " + }, + "reviewClassification": { + "title": "Clasificación de la revisión", + "desc": "Frigate clasifica los elementos de revisión como Alertas y Detecciones. De forma predeterminada, todos los objetos de persona y coche se consideran Alertas. Puede refinar la categorización de sus elementos de revisión configurando las zonas requeridas para ellos.", + "noDefinedZones": "No hay Zonas definidas para esta cámara.", + "objectAlertsTips": "Todos los objetos {{alertsLabels}} en {{cameraName}} se mostrarán como alertas.", + "zoneObjectAlertsTips": "Todos los objetos {{alertsLabels}} detectados en {{zone}} en {{cameraName}} se mostrarán como alertas.", + "objectDetectionsTips": "Todos los objetos {{detectionsLabels}} no categorizados en {{cameraName}} se mostrarán como Detecciones independientemente de la zona en la que se encuentren.", + "zoneObjectDetectionsTips": { + "text": "Todos los objetos {{detectionsLabels}} no categorizados en {{zone}} en {{cameraName}} se mostrarán como Detecciones.", + "notSelectDetections": "Todos los objetos {{detectionsLabels}} detectados en {{zone}} en {{cameraName}} que no estén categorizados como Alertas se mostrarán como Detecciones independientemente de la zona en la que se encuentren.", + "regardlessOfZoneObjectDetectionsTips": "Todos los objetos {{detectionsLabels}} no categorizados en {{cameraName}} se mostrarán como Detecciones independientemente de la zona en la que se encuentren." + }, + "unsavedChanges": "Configuración de clasificación de revisión no guardadas para {{camera}}", + "selectAlertsZones": "Seleccione Zonas para Alertas", + "selectDetectionsZones": "Seleccione Zonas para la Detección", + "limitDetections": "Limite la detección a zonas específicas", + "toast": { + "success": "Se ha guardado la configuración de la clasificación de revisión. Reinicie Frigate para aplicar los cambios." + } + } } } diff --git a/web/public/locales/es/views/system.json b/web/public/locales/es/views/system.json index e54a7802b..0b441592e 100644 --- a/web/public/locales/es/views/system.json +++ b/web/public/locales/es/views/system.json @@ -76,12 +76,22 @@ }, "gpuMemory": "Memoria de GPU", "npuMemory": "Memoria de NPU", - "npuUsage": "Uso de NPU" + "npuUsage": "Uso de NPU", + "intelGpuWarning": { + "title": "Aviso de estadísticas Intel GPU", + "message": "Estadísticas de GPU no disponibles", + "description": "Este es un error conocido en las herramientas de informes de estadísticas de GPU de Intel (intel_gpu_top). El error se produce y muestra repetidamente un uso de GPU del 0 %, incluso cuando la aceleración de hardware y la detección de objetos se ejecutan correctamente en la (i)GPU. No se trata de un error de Frigate. Puede reiniciar el host para solucionar el problema temporalmente y confirmar que la GPU funciona correctamente. Esto no afecta al rendimiento." + } }, "otherProcesses": { "title": "Otros Procesos", "processCpuUsage": "Uso de CPU del Proceso", - "processMemoryUsage": "Uso de Memoria del Proceso" + "processMemoryUsage": "Uso de Memoria del Proceso", + "series": { + "go2rtc": "go2rtc", + "recording": "grabación", + "review_segment": "revisar segmento" + } } }, "storage": { @@ -169,9 +179,19 @@ "plate_recognition": "Reconocimiento de Matrículas", "yolov9_plate_detection": "Detección de Matrículas YOLOv9", "image_embedding": "Incrustación de Imágenes", - "yolov9_plate_detection_speed": "Velocidad de Detección de Matrículas YOLOv9" + "yolov9_plate_detection_speed": "Velocidad de Detección de Matrículas YOLOv9", + "review_description": "Revisión de descripción", + "review_description_speed": "Velocidad de revisión de la descripción", + "review_description_events_per_second": "Revisión de la descripción", + "object_description": "Descripción de Objeto", + "object_description_speed": "Velocidad de descripción de objeto", + "object_description_events_per_second": "Descripción de objeto", + "classification": "Clasificación de {{name}}", + "classification_speed": "Velocidad de clasificación de {{name}}", + "classification_events_per_second": "Clasificacion de eventos por segundo de {{name}}" }, - "title": "Enriquecimientos" + "title": "Enriquecimientos", + "averageInf": "Tiempo promedio de inferencia" }, "stats": { "ffmpegHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por FFmpeg ({{ffmpegAvg}}%)",