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",