diff --git a/web/public/locales/es/components/camera.json b/web/public/locales/es/components/camera.json
index 69605875e..05bca2742 100644
--- a/web/public/locales/es/components/camera.json
+++ b/web/public/locales/es/components/camera.json
@@ -82,6 +82,7 @@
"motion": "Movimiento",
"regions": "Regiones",
"boundingBox": "Caja delimitadora",
- "mask": "Máscara"
+ "mask": "Máscara",
+ "paths": "Trayectorias"
}
}
diff --git a/web/public/locales/es/config/cameras.json b/web/public/locales/es/config/cameras.json
index 39dff6712..aeb608371 100644
--- a/web/public/locales/es/config/cameras.json
+++ b/web/public/locales/es/config/cameras.json
@@ -19,12 +19,88 @@
"description": "Cantidad de segundos sin el tipo de audio configurado antes de que finalice el evento de audio."
},
"min_volume": {
- "label": "Volumen mínimo"
+ "label": "Volumen mínimo",
+ "description": "Umbral mínimo de volumen RMS requerido para ejecutar la detección de audio; los valores más bajos aumentan la sensibilidad (p. ej., 200 alta, 500 media, 1000 baja)."
+ },
+ "listen": {
+ "label": "Tipos de escucha",
+ "description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrido, alarma de incendios, grito, voz, alarido)."
+ },
+ "filters": {
+ "label": "Filtros de audio",
+ "description": "Ajustes de filtrado por tipo de audio, como umbrales de confianza utilizados para reducir los falsos positivos."
+ },
+ "enabled_in_config": {
+ "description": "Indica si la detección de audio estaba habilitada originalmente en el archivo de configuración estática.",
+ "label": "Estado original del audio"
+ },
+ "num_threads": {
+ "label": "Hilos de detección"
}
},
"friendly_name": {
"label": "Nombre descriptivo",
"description": "Nombre descriptivo de la cámara utilizado en la interfaz de usuario de Frigate"
},
- "label": "Configuración de Cámara"
+ "label": "Configuración de Cámara",
+ "onvif": {
+ "profile": {
+ "label": "Perfil ONVIF"
+ }
+ },
+ "zones": {
+ "distances": {
+ "label": "Distancias reales"
+ },
+ "coordinates": {
+ "description": "Coordenadas del polígono que definen el área de la zona. Puede ser una cadena separada por comas o una lista de cadenas de coordenadas. Las coordenadas deben ser relativas (0-1) o absolutas (heredadas).",
+ "label": "Coordenadas"
+ },
+ "filters": {
+ "raw_mask": {
+ "label": "Máscara en bruto"
+ },
+ "mask": {
+ "description": "Coordenadas del polígono que definen dónde se aplica este filtro dentro del fotograma.",
+ "label": "Máscara de filtro"
+ },
+ "min_score": {
+ "description": "Confianza mínima en un solo fotograma requerida para que el objeto sea contabilizado.",
+ "label": "Confianza mínima"
+ },
+ "threshold": {
+ "description": "Umbral de confianza promedio requerido para que el objeto sea considerado un positivo real.",
+ "label": "Umbral de confianza"
+ },
+ "max_ratio": {
+ "description": "Relación máxima de ancho/alto permitida para que el cuadro delimitador califique.",
+ "label": "Relación de aspecto máxima"
+ },
+ "min_ratio": {
+ "description": "Relación mínima de ancho/alto requerida para que el cuadro delimitador califique.",
+ "label": "Relación de aspecto mínima"
+ },
+ "max_area": {
+ "description": "Área máxima del cuadro delimitador (píxeles o porcentaje) permitida para este tipo de objeto. Puede expresarse en píxeles (entero) o como porcentaje (decimal entre 0,000001 y 0,99).",
+ "label": "Área máxima del objeto"
+ }
+ }
+ },
+ "objects": {
+ "raw_mask": {
+ "label": "Máscara en bruto"
+ },
+ "genai": {
+ "label": "Configuración de objetos GenAI",
+ "description": "Opciones de GenAI para describir objetos rastreados y enviar fotogramas para su generación.",
+ "enabled": {
+ "label": "Activar GenAI",
+ "description": "Activar por defecto la generación de descripciones de GenAI para los objetos rastreados."
+ },
+ "use_snapshot": {
+ "label": "Usar instantáneas",
+ "description": "Usar instantáneas de objetos en lugar de miniaturas para la generación de descripciones de GenAI."
+ }
+ }
+ }
}
diff --git a/web/public/locales/es/config/global.json b/web/public/locales/es/config/global.json
index c0940c717..53cdd0aa6 100644
--- a/web/public/locales/es/config/global.json
+++ b/web/public/locales/es/config/global.json
@@ -33,11 +33,80 @@
"description": "Cantidad de segundos sin el tipo de audio configurado antes de que finalice el evento de audio."
},
"min_volume": {
- "label": "Volumen mínimo"
+ "label": "Volumen mínimo",
+ "description": "Umbral mínimo de volumen RMS requerido para ejecutar la detección de audio; los valores más bajos aumentan la sensibilidad (p. ej., 200 alta, 500 media, 1000 baja)."
+ },
+ "listen": {
+ "label": "Tipos de escucha",
+ "description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrido, alarma de incendios, grito, voz, alarido)."
+ },
+ "filters": {
+ "label": "Filtros de audio",
+ "description": "Ajustes de filtrado por tipo de audio, como umbrales de confianza utilizados para reducir los falsos positivos."
+ },
+ "enabled_in_config": {
+ "description": "Indica si la detección de audio estaba habilitada originalmente en el archivo de configuración estática.",
+ "label": "Estado original del audio"
+ },
+ "num_threads": {
+ "label": "Hilos de detección"
}
},
"auth": {
"label": "Autenticación",
- "description": "Configuración relacionada con la autenticación y la sesión, incluidas las opciones de cookies y límite de peticiones."
+ "description": "Configuración relacionada con la autenticación y la sesión, incluidas las opciones de cookies y límite de peticiones.",
+ "enabled": {
+ "label": "Activar autenticación",
+ "description": "Activar la autenticación nativa para la interfaz de Frigate."
+ },
+ "reset_admin_password": {
+ "label": "Restablecer contraseña de administrador",
+ "description": "Si se activa, restablece la contraseña del administrador al iniciar y muestra la nueva contraseña en los registros."
+ },
+ "cookie_name": {
+ "description": "Nombre de la cookie utilizada para almacenar el token JWT para la autenticación nativa.",
+ "label": "Nombre de la cookie JWT"
+ },
+ "cookie_secure": {
+ "label": "Flag de cookie segura",
+ "description": "Establece el flag de seguridad en la cookie de autenticación; debe ser 'true' cuando se utilice TLS."
+ }
+ },
+ "onvif": {
+ "profile": {
+ "label": "Perfil ONVIF"
+ }
+ },
+ "objects": {
+ "raw_mask": {
+ "label": "Máscara en bruto"
+ },
+ "genai": {
+ "label": "Configuración de objetos GenAI",
+ "description": "Opciones de GenAI para describir objetos rastreados y enviar fotogramas para su generación.",
+ "enabled": {
+ "label": "Activar GenAI",
+ "description": "Activar por defecto la generación de descripciones de GenAI para los objetos rastreados."
+ },
+ "use_snapshot": {
+ "label": "Usar instantáneas",
+ "description": "Usar instantáneas de objetos en lugar de miniaturas para la generación de descripciones de GenAI."
+ }
+ }
+ },
+ "detectors": {
+ "deepstack": {
+ "description": "Detector DeepStack/CodeProject.AI que envía imágenes a una API HTTP remota de DeepStack para la inferencia. No recomendado.",
+ "api_url": {
+ "description": "La URL de la API de DeepStack."
+ },
+ "api_timeout": {
+ "label": "Tiempo de espera de la API de DeepStack (en segundos)",
+ "description": "Tiempo máximo permitido para una solicitud a la API de DeepStack."
+ },
+ "api_key": {
+ "label": "Clave de API de DeepStack (si es necesaria)"
+ }
+ }
}
}
diff --git a/web/public/locales/es/config/groups.json b/web/public/locales/es/config/groups.json
index 4e09f2a51..d6b2b9d81 100644
--- a/web/public/locales/es/config/groups.json
+++ b/web/public/locales/es/config/groups.json
@@ -39,6 +39,26 @@
"global": {
"resolution": "Resolución Global",
"tracking": "Seguimiento Global"
+ },
+ "cameras": {
+ "resolution": "Resolución",
+ "tracking": "Seguimiento"
+ }
+ },
+ "objects": {
+ "global": {
+ "tracking": "Seguimiento global",
+ "filtering": "Filtrado global"
+ },
+ "cameras": {
+ "filtering": "Filtrado",
+ "tracking": "Seguimiento"
+ }
+ },
+ "record": {
+ "global": {
+ "retention": "Retención global",
+ "events": "Eventos globales"
}
}
}
diff --git a/web/public/locales/es/config/validation.json b/web/public/locales/es/config/validation.json
index 3b595ea86..faf7032f8 100644
--- a/web/public/locales/es/config/validation.json
+++ b/web/public/locales/es/config/validation.json
@@ -12,5 +12,20 @@
"type": "Tipo de valor no válido",
"enum": "Debe ser uno de los valores permitidos",
"const": "El valor no coincide con la constante esperada",
- "uniqueItems": "Todos los objetos deben ser únicos"
+ "uniqueItems": "Todos los objetos deben ser únicos",
+ "format": "Formato no válido",
+ "additionalProperties": "No se permite una propiedad desconocida",
+ "oneOf": "Debe coincidir exactamente con uno de los esquemas permitidos",
+ "ffmpeg": {
+ "inputs": {
+ "rolesUnique": "Cada rol solo puede asignarse a un flujo de entrada.",
+ "detectRequired": "Al menos un flujo de entrada debe tener asignado el rol 'detect'."
+ }
+ },
+ "anyOf": "Debe coincidir con al menos uno de los esquemas permitidos",
+ "proxy": {
+ "header_map": {
+ "roleHeaderRequired": "Se requiere el encabezado de rol cuando hay mapeos de roles configurados."
+ }
+ }
}
diff --git a/web/public/locales/es/views/classificationModel.json b/web/public/locales/es/views/classificationModel.json
index f70c69bf1..ee6fc5ed1 100644
--- a/web/public/locales/es/views/classificationModel.json
+++ b/web/public/locales/es/views/classificationModel.json
@@ -12,8 +12,12 @@
},
"toast": {
"success": {
- "deletedCategory": "Clase Borrada",
- "deletedImage": "Imágenes Borradas",
+ "deletedCategory_one": "Clase Borrada",
+ "deletedCategory_many": "",
+ "deletedCategory_other": "",
+ "deletedImage_one": "Imágenes Borradas",
+ "deletedImage_many": "",
+ "deletedImage_other": "",
"deletedModel_one": "Borrado con éxito {{count}} modelo",
"deletedModel_many": "Borrados con éxito {{count}} modelos",
"deletedModel_other": "Borrados con éxito {{count}} modelos",
@@ -21,7 +25,8 @@
"trainedModel": "Modelo entrenado correctamente.",
"trainingModel": "Entrenamiento del modelo iniciado correctamente.",
"updatedModel": "Configuración del modelo actualizada correctamente",
- "renamedCategory": "Clase renombrada correctamente a {{name}}"
+ "renamedCategory": "Clase renombrada correctamente a {{name}}",
+ "reclassifiedImage": "Imagen reclasificada con éxito"
},
"error": {
"deleteImageFailed": "Fallo al borrar: {{errorMessage}}",
@@ -31,7 +36,8 @@
"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}}",
- "renameCategoryFailed": "Falló el renombrado de la clase: {{errorMessage}}"
+ "renameCategoryFailed": "Falló el renombrado de la clase: {{errorMessage}}",
+ "reclassifyFailed": "Error al reclasificar la imagen: {{errorMessage}}"
}
},
"deleteCategory": {
@@ -144,7 +150,12 @@
},
"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."
+ "allImagesRequired_other": "Por favor clasifique todas las imágenes. Quedan {{count}} imágenes.",
+ "refreshConfirm": {
+ "description": "Esta acción generará un nuevo conjunto de imágenes y eliminará todas las selecciones, incluidas las clases anteriores. Deberás volver a seleccionar ejemplos para todas las clases.",
+ "title": "¿Generar nuevos ejemplos?"
+ },
+ "refreshExamples": "Generar nuevos ejemplos"
},
"title": "Crear nueva Clasificación"
},
@@ -188,5 +199,7 @@
"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"
}
- }
+ },
+ "reclassifyImage": "Reclasificar imagen",
+ "reclassifyImageAs": "Reclasificar imagen como:"
}
diff --git a/web/public/locales/es/views/events.json b/web/public/locales/es/views/events.json
index d13daff60..f2bdab0e9 100644
--- a/web/public/locales/es/views/events.json
+++ b/web/public/locales/es/views/events.json
@@ -15,7 +15,9 @@
"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": {
+ "label": "Línea de tiempo"
+ },
"timeline.aria": "Seleccionar línea de tiempo",
"events": {
"label": "Eventos",
diff --git a/web/public/locales/es/views/explore.json b/web/public/locales/es/views/explore.json
index f8f61ce83..ded5ca91f 100644
--- a/web/public/locales/es/views/explore.json
+++ b/web/public/locales/es/views/explore.json
@@ -112,7 +112,8 @@
"attributes": "Atributos de clasificación",
"title": {
"label": "Título"
- }
+ },
+ "scoreInfo": "Información de confianza"
},
"documentTitle": "Explorar - Frigate",
"trackedObjectDetails": "Detalles del objeto rastreado",
@@ -222,12 +223,18 @@
},
"hideObjectDetails": {
"label": "Ocultar la ruta del objeto"
+ },
+ "more": {
+ "aria": "Más"
}
},
"dialog": {
"confirmDelete": {
"title": "Confirmar eliminación",
"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?"
+ },
+ "toast": {
+ "error": "Error al eliminar este objeto rastreado: {{errorMessage}}"
}
},
"noTrackedObjects": "No se encontraron objetos rastreados",
diff --git a/web/public/locales/es/views/exports.json b/web/public/locales/es/views/exports.json
index 15be4164d..1099d45c8 100644
--- a/web/public/locales/es/views/exports.json
+++ b/web/public/locales/es/views/exports.json
@@ -2,7 +2,9 @@
"search": "Búsqueda",
"documentTitle": "Exportar - Frigate",
"noExports": "No se encontraron exportaciones",
- "deleteExport": "Eliminar exportación",
+ "deleteExport": {
+ "label": "Eliminar exportación"
+ },
"editExport": {
"desc": "Introduce un nuevo nombre para esta exportación.",
"saveExport": "Guardar exportación",
@@ -25,5 +27,12 @@
"headings": {
"cases": "Casos",
"uncategorizedExports": "Exportaciones sin categorizar"
+ },
+ "caseDialog": {
+ "title": "Añadir al caso",
+ "newCaseOption": "Crear nuevo caso",
+ "nameLabel": "Nombre del caso",
+ "description": "Elige un caso existente o crea uno nuevo.",
+ "selectLabel": "Caso"
}
}
diff --git a/web/public/locales/es/views/faceLibrary.json b/web/public/locales/es/views/faceLibrary.json
index faca37408..f923082da 100644
--- a/web/public/locales/es/views/faceLibrary.json
+++ b/web/public/locales/es/views/faceLibrary.json
@@ -66,7 +66,8 @@
"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}}"
+ "renamedFace": "Rostro renombrado con éxito a {{name}}",
+ "reclassifiedFace": "Rostro reclasificado con éxito."
},
"error": {
"uploadingImageFailed": "No se pudo subir la imagen: {{errorMessage}}",
@@ -75,7 +76,8 @@
"deleteNameFailed": "No se pudo eliminar el nombre: {{errorMessage}}",
"trainFailed": "No se pudo entrenar: {{errorMessage}}",
"updateFaceScoreFailed": "No se pudo actualizar la puntuación del rostro: {{errorMessage}}",
- "renameFaceFailed": "No se pudo renombrar el rostro: {{errorMessage}}"
+ "renameFaceFailed": "No se pudo renombrar el rostro: {{errorMessage}}",
+ "reclassifyFailed": "Error al reclasificar el rostro: {{errorMessage}}"
}
},
"readTheDocs": "Leer la documentación",
@@ -101,5 +103,7 @@
},
"collections": "Colecciones",
"nofaces": "No hay rostros disponibles",
- "pixels": "{{area}}px"
+ "pixels": "{{area}}px",
+ "reclassifyFace": "Reclasificar rostro",
+ "reclassifyFaceAs": "Reclasificar rostro como:"
}
diff --git a/web/public/locales/es/views/live.json b/web/public/locales/es/views/live.json
index ce7c46ad5..fa473384a 100644
--- a/web/public/locales/es/views/live.json
+++ b/web/public/locales/es/views/live.json
@@ -1,5 +1,7 @@
{
- "documentTitle": "Directo - Frigate",
+ "documentTitle": {
+ "default": "En vivo - Frigate"
+ },
"documentTitle.withCamera": "{{camera}} - Directo - Frigate",
"twoWayTalk": {
"enable": "Habilitar conversación bidireccional",
@@ -14,7 +16,8 @@
"clickMove": {
"label": "Haz clic en el marco para centrar la cámara",
"enable": "Habilitar clic para mover",
- "disable": "Deshabilitar clic para mover"
+ "disable": "Deshabilitar clic para mover",
+ "enableWithZoom": "Activar clic para mover / arrastrar para hacer zoom"
},
"up": {
"label": "Mover la cámara PTZ hacia arriba"
diff --git a/web/public/locales/es/views/settings.json b/web/public/locales/es/views/settings.json
index 141abb957..c6157a750 100644
--- a/web/public/locales/es/views/settings.json
+++ b/web/public/locales/es/views/settings.json
@@ -7,7 +7,7 @@
"camera": "Configuración de cámara - Frigate",
"motionTuner": "Ajuste de movimiento - Frigate",
"classification": "Configuración de clasificación - Frigate",
- "general": "Configuración de Interfaz de Usuario - Frigate",
+ "general": "Configuración de la interfaz - Frigate",
"frigatePlus": "Configuración de Frigate+ - Frigate",
"notifications": "Configuración de Notificaciones - Frigate",
"enrichments": "Configuración de Análisis Avanzado - Frigate",
@@ -15,7 +15,8 @@
"cameraReview": "Revisar Configuración de Cámaras - Frigate",
"globalConfig": "Configuración Global - Frigate",
"cameraConfig": "Configuración de Cámara - Frigate",
- "maintenance": "Mantenimiento - Frigate"
+ "maintenance": "Mantenimiento - Frigate",
+ "profiles": "Perfiles - Frigate"
},
"menu": {
"cameras": "Configuración de Cámara",
@@ -293,6 +294,11 @@
"error": {
"mustBeGreaterOrEqualTo": "El umbral de velocidad debe ser mayor o igual a 0,1."
}
+ },
+ "name": {
+ "error": {
+ "mustNotBeEmpty": "El nombre no puede estar vacío."
+ }
}
},
"zones": {
@@ -1234,5 +1240,25 @@
"success": "Se ha guardado la configuración de la clasificación de revisión. Reinicie Frigate para aplicar los cambios."
}
}
+ },
+ "button": {
+ "overriddenGlobal": "Sobrescrito (Global)",
+ "overriddenBaseConfigTooltip": "El perfil {{profile}} sobrescribe los ajustes de configuración de esta sección",
+ "overriddenGlobalTooltip": "Esta cámara sobrescribe los ajustes de configuración global en esta sección",
+ "overriddenBaseConfig": "Sobrescrito (Configuración Base)"
+ },
+ "onvif": {
+ "profileLoading": "Cargando perfiles..."
+ },
+ "maintenance": {
+ "sync": {
+ "verboseDesc": "Escribe una lista completa de archivos huérfanos en el disco para su revisión.",
+ "verbose": "Detallado"
+ }
+ },
+ "configForm": {
+ "camera": {
+ "noCameras": "No hay cámaras disponibles"
+ }
}
}
diff --git a/web/public/locales/es/views/system.json b/web/public/locales/es/views/system.json
index c2c3e39e8..6c211a77c 100644
--- a/web/public/locales/es/views/system.json
+++ b/web/public/locales/es/views/system.json
@@ -37,7 +37,18 @@
"label": "Mensajes",
"pause": "Pausar",
"resume": "Continuar",
- "clear": "Limpiar"
+ "clear": "Limpiar",
+ "filter": {
+ "all": "Todos los temas",
+ "topics": "Temas",
+ "events": "Eventos",
+ "reviews": "Revisiones",
+ "face_recognition": "Reconocimiento facial",
+ "camera_activity": "Actividad de cámara",
+ "classification": "Clasificación"
+ },
+ "count_other": "{{count}} mensajes",
+ "count_one": "{{count}} mensaje"
}
},
"title": "Sistema",