i18n: translate the admin namespace for es/fr/it/pl

Translate the remaining admin.* real-sentence labels and prose that
still matched English across es/fr/it/pl, plus a handful of stragglers
outside admin (doctor-report hypertension grades in fr, the mind-and-body
workout label in pl). Brand names, units, single technical tokens, URLs,
and placeholder strings stay verbatim, mirroring the de reference.
This commit is contained in:
Marc-André Bombeck committed 2026-06-04 18:34:15 +02:00
1 parent 2a7195601b
commit 31301cc889
4 files changed
+1228 -1228

No files matched your search

+308 -308
View File
@@ -3708,113 +3708,113 @@
},
"admin": {
"title": "Administration",
"subtitle": "System status, users, and settings",
"settingsSaveError": "Failed to save settings",
"systemStatus": "System Status",
"database": "Database",
"databaseConnected": "Connected",
"subtitle": "Estado del sistema, usuarios y ajustes",
"settingsSaveError": "No se pudieron guardar los ajustes",
"systemStatus": "Estado del sistema",
"database": "Base de datos",
"databaseConnected": "Conectada",
"databaseError": "Error",
"startedAt": "Started",
"users": "Users",
"measurementsCount": "Measurements",
"activeTokens": "Active API Tokens",
"activeSessions": "Active Sessions",
"loadingStatus": "Loading status...",
"systemStatusLoadError": "Failed to load system status.",
"startedAt": "Iniciado",
"users": "Usuarios",
"measurementsCount": "Mediciones",
"activeTokens": "Tokens de API activos",
"activeSessions": "Sesiones activas",
"loadingStatus": "Cargando estado...",
"systemStatusLoadError": "No se pudo cargar el estado del sistema.",
"systemStatusRetry": "Reintentar",
"adminSettingsLoadError": "Failed to load admin settings. Toggles below may not reflect the live state — refresh the page.",
"adminSettingsLoadError": "No se pudieron cargar los ajustes de administración. Los interruptores de abajo pueden no reflejar el estado actual: recarga la página.",
"hostMetrics": {
"title": "Host load",
"load1": "Load (1m)",
"memUsedPercent": "Memory",
"title": "Carga del host",
"load1": "Carga (1m)",
"memUsedPercent": "Memoria",
"diskBusyPercent": "Disk I/O",
"last2hours": "Last 2 hours",
"empty": "Sampling started — data appears in 1–2 minutes.",
"loadError": "Failed to load host metrics. Try refreshing the page."
"last2hours": "Últimas 2 horas",
"empty": "Muestreo iniciado: los datos aparecen en 1–2 minutos.",
"loadError": "No se pudieron cargar las métricas del host. Prueba a recargar la página."
},
"aiQuality": {
"title": "Insights Quality",
"loading": "Loading feedback summary...",
"loadError": "Failed to load Insights quality summary. Try refreshing the page.",
"empty": "No feedback yet. The aggregator runs daily at 04:00 — once users start rating recommendations, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colSeverity": "Severity",
"colMetric": "Metric",
"colProvider": "Provider",
"title": "Calidad de los análisis",
"loading": "Cargando resumen de comentarios...",
"loadError": "No se pudo cargar el resumen de calidad de los análisis. Prueba a recargar la página.",
"empty": "Aún no hay comentarios. El agregador se ejecuta a diario a las 04:00; en cuanto los usuarios valoren las recomendaciones, aquí aparecerán las tasas de utilidad.",
"windowLabel": "Últimos {days} días",
"generatedAtLabel": "Generado",
"colSeverity": "Gravedad",
"colMetric": "Métrica",
"colProvider": "Proveedor",
"colPromptVersion": "Prompt",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"colHelpfulRate": "Helpful rate"
"colHelpful": "Útil",
"colNotHelpful": "No útil",
"colHelpfulRate": "Tasa de utilidad"
},
"coachFeedback": {
"title": "Coach Feedback",
"loading": "Loading Coach feedback summary...",
"loadError": "Failed to load Coach feedback summary. Try refreshing the page.",
"empty": "No Coach feedback yet. The aggregator runs daily at 04:00 — once users rate Coach replies, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colPromptVersion": "Prompt version",
"colTone": "Tone",
"colVerbosity": "Verbosity",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"title": "Comentarios del Coach",
"loading": "Cargando resumen de comentarios del Coach...",
"loadError": "No se pudo cargar el resumen de comentarios del Coach. Prueba a recargar la página.",
"empty": "Aún no hay comentarios del Coach. El agregador se ejecuta a diario a las 04:00; en cuanto los usuarios valoren las respuestas del Coach, aquí aparecerán las tasas de utilidad.",
"windowLabel": "Últimos {days} días",
"generatedAtLabel": "Generado",
"colPromptVersion": "Versión del prompt",
"colTone": "Tono",
"colVerbosity": "Nivel de detalle",
"colHelpful": "Útil",
"colNotHelpful": "No útil",
"colN": "n",
"colHelpfulRate": "Helpful rate"
"colHelpfulRate": "Tasa de utilidad"
},
"workerStatus": "Job Worker",
"workerRunning": "Running",
"workerStopped": "Stopped",
"lastReminderCheck": "Last Reminder Check",
"appSettings": "Application Settings",
"registrationEnabled": "Allow registration",
"registrationEnabledDescription": "When disabled, new users cannot register.",
"defaultLanguage": "Default language",
"defaultLanguageDescription": "Used for new users and as fallback.",
"defaultUserTimezone": "Default timezone for new accounts",
"defaultUserTimezoneDescription": "Used for new accounts that don't carry a browser-detected zone. Does not affect existing users.",
"defaultUserTimezoneFallback": "Europe/Berlin (default)",
"servicesGlobal": "Services (global)",
"servicesGlobalDescription": "Disabled services are not available to any user.",
"telegramGlobal": "Allow Telegram notifications.",
"ntfyGlobal": "Allow ntfy notifications.",
"webPushGlobal": "Allow browser push notifications.",
"moodLogGlobal": "Allow mood-log reminders.",
"workerStatus": "Worker de tareas",
"workerRunning": "En ejecución",
"workerStopped": "Detenido",
"lastReminderCheck": "Última comprobación de recordatorios",
"appSettings": "Ajustes de la aplicación",
"registrationEnabled": "Permitir el registro",
"registrationEnabledDescription": "Cuando está desactivado, los nuevos usuarios no pueden registrarse.",
"defaultLanguage": "Idioma predeterminado",
"defaultLanguageDescription": "Se usa para los nuevos usuarios y como reserva.",
"defaultUserTimezone": "Zona horaria predeterminada para cuentas nuevas",
"defaultUserTimezoneDescription": "Se usa para cuentas nuevas que no tienen una zona detectada por el navegador. No afecta a los usuarios existentes.",
"defaultUserTimezoneFallback": "Europe/Berlin (predeterminada)",
"servicesGlobal": "Servicios (global)",
"servicesGlobalDescription": "Los servicios desactivados no están disponibles para ningún usuario.",
"telegramGlobal": "Permitir notificaciones de Telegram.",
"ntfyGlobal": "Permitir notificaciones de ntfy.",
"webPushGlobal": "Permitir notificaciones push del navegador.",
"moodLogGlobal": "Permitir recordatorios del registro de ánimo.",
"integrationWebPush": "Web Push",
"integrationBugReport": "Bug Report",
"integrationBugReport": "Informe de errores",
"offlineGeoLabel": "Datos geográficos",
"offlineGeoEnabled": "Sin conexión (GeoLite2)",
"offlineGeoFallback": "Respaldo (ipwho.is) — configura MAXMIND_LICENSE_KEY en CI",
"apiGlobal": "Allow API endpoints and API tokens.",
"apiGlobal": "Permitir endpoints de API y tokens de API.",
"umamiTitle": "Umami",
"umamiDescription": "Web analytics with Umami",
"umamiDescription": "Analítica web con Umami",
"glitchtipTitle": "GlitchTip",
"glitchtipDescription": "Error tracking with GlitchTip",
"glitchtipDescription": "Seguimiento de errores con GlitchTip",
"webPushVapidTitle": "Web Push VAPID",
"umamiEnabled": "Enable Umami tracking.",
"umamiScriptUrl": "Umami script URL",
"umamiEnabled": "Activar el seguimiento de Umami.",
"umamiScriptUrl": "URL del script de Umami",
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
"umamiWebsiteId": "Umami website ID",
"umamiWebsiteId": "ID del sitio web de Umami",
"umamiWebsiteIdPlaceholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"glitchtipEnabled": "Enable GlitchTip error tracking.",
"glitchtipEnabled": "Activar el seguimiento de errores de GlitchTip.",
"glitchtipDsn": "GlitchTip DSN",
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
"glitchtipEnvironment": "GlitchTip environment",
"glitchtipEnvironment": "Entorno de GlitchTip",
"glitchtipEnvironmentPlaceholder": "production",
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
"webPushVapidPublicKey": "VAPID public key",
"webPushVapidDescription": "Configura aquí las claves VAPID y el subject para que el push del navegador funcione sin variables de entorno.",
"webPushVapidPublicKey": "Clave pública VAPID",
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
"webPushVapidPrivateKey": "VAPID private key",
"webPushVapidPrivateKeyPlaceholder": "Optional: enter a new private key",
"webPushVapidSubject": "VAPID subject",
"webPushVapidPrivateKey": "Clave privada VAPID",
"webPushVapidPrivateKeyPlaceholder": "Opcional: introduce una nueva clave privada",
"webPushVapidSubject": "Subject de VAPID",
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
"configured": "Configured",
"monitoringTestSuccess": "Test event sent",
"monitoringTestFailed": "Monitoring test failed",
"bugReportGithub": "Bug report (GitHub Issues)",
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
"bugReportEnabledLabel": "Bug reports enabled",
"bugReportEnabledDescription": "When off, the in-app report button hides — token and repository stay configured.",
"configured": "Configurado",
"monitoringTestSuccess": "Evento de prueba enviado",
"monitoringTestFailed": "La prueba de monitorización falló",
"bugReportGithub": "Informe de errores (GitHub Issues)",
"bugReportGithubDescription": "Configura el token de issues de GitHub y el repositorio para los informes de errores entrantes.",
"bugReportEnabledLabel": "Informes de errores activados",
"bugReportEnabledDescription": "Cuando está desactivado, el botón de informe en la app se oculta; el token y el repositorio permanecen configurados.",
"assistant": {
"title": "Superficies del asistente",
"description": "Cada conmutador oculta una superficie impulsada por el modelo en toda la aplicación sin retirar la configuración del proveedor. El interruptor maestro fuerza cada opción secundaria a off.",
@@ -3843,324 +3843,324 @@
"description": "El icono ? junto a la línea de delta del Health-Score. El dígito del delta permanece visible siempre."
}
},
"bugReportRepo": "Repository",
"bugReportRepo": "Repositorio",
"bugReportRepoPlaceholder": "owner/repo",
"bugReportToken": "Issue token",
"bugReportToken": "Token de issues",
"bugReportTokenPlaceholder": "ghp_...",
"userManagement": "User Management",
"userManagement": "Gestión de usuarios",
"userName": "Nombre",
"userEmail": "Correo electrónico",
"userRole": "Role",
"userRole": "Rol",
"userPasskeys": "Passkeys",
"userCreated": "Created",
"userCreated": "Creado",
"userActions": "Acciones",
"editUser": "Edit user",
"editUserTitle": "Edit user: {name}",
"demoteToUser": "Demote to user",
"promoteToAdmin": "Promote to admin",
"toUser": "Make user",
"toAdmin": "Make admin",
"ownRoleUnchangeable": "Cannot change own role",
"resetPassword": "Reset password",
"resetPasswordTitle": "Reset password: {name}",
"newPassword": "New password",
"newPasswordPlaceholder": "At least 12 characters",
"passwordReset": "Password has been reset",
"editUser": "Editar usuario",
"editUserTitle": "Editar usuario: {name}",
"demoteToUser": "Degradar a usuario",
"promoteToAdmin": "Promover a administrador",
"toUser": "Convertir en usuario",
"toAdmin": "Convertir en administrador",
"ownRoleUnchangeable": "No puedes cambiar tu propio rol",
"resetPassword": "Restablecer contraseña",
"resetPasswordTitle": "Restablecer contraseña: {name}",
"newPassword": "Nueva contraseña",
"newPasswordPlaceholder": "Al menos 12 caracteres",
"passwordReset": "La contraseña se ha restablecido",
"reset": "Restablecer",
"loadingUsers": "Loading users...",
"apiTokens": "API Tokens",
"tokenUser": "User",
"loadingUsers": "Cargando usuarios...",
"apiTokens": "Tokens de API",
"tokenUser": "Usuario",
"tokenName": "Nombre",
"tokenPermissions": "Permissions",
"tokenPermissions": "Permisos",
"tokenPermissionAll": "Todo",
"tokenPermissionAllTooltip": "Wildcard permission — this token can call every API route.",
"tokenPermissionAllTooltip": "Permiso comodín: este token puede llamar a cualquier ruta de la API.",
"tokenStatus": "Estado",
"tokenLastUsed": "Last used",
"tokenCreated": "Created",
"tokenNeverUsed": "Never",
"tokensEmptyTitle": "No API tokens yet",
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
"loginOverview": "Login Overview",
"allAuthEvents": "All auth events",
"failedOnly": "Failed only",
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
"loginEmptyFailedTitle": "No failed sign-in attempts",
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
"loginEmptyResetFilter": "Show all events",
"tokenLastUsed": "Último uso",
"tokenCreated": "Creado",
"tokenNeverUsed": "Nunca",
"tokensEmptyTitle": "Aún no hay tokens de API",
"tokensEmptyDescription": "Los tokens se emiten cuando un cliente nativo inicia sesión o desde Ajustes → Cuenta.",
"loginOverview": "Resumen de inicios de sesión",
"allAuthEvents": "Todos los eventos de autenticación",
"failedOnly": "Solo fallidos",
"loginEmptyDescription": "Aquí aparecerán los inicios de sesión, los cierres de sesión y los cambios de passkey.",
"loginEmptyFailedTitle": "Sin intentos de inicio de sesión fallidos",
"loginEmptyFailedDescription": "Ese es el estado seguro. Cambia a todos los eventos para ver los inicios de sesión correctos.",
"loginEmptyResetFilter": "Mostrar todos los eventos",
"showingEntries": "Mostrando {count} de {total} entradas de autenticación",
"status": "Estado",
"action": "Action",
"action": "Acción",
"ip": "IP",
"location": "Location",
"location": "Ubicación",
"timestamp": "Hora",
"provider": "Provider",
"provider": "Proveedor",
"providerPassword": "Contraseña",
"providerPasskey": "Passkey",
"providerApiToken": "API token",
"providerApiToken": "Token de API",
"providerWithings": "Withings",
"providerUnknown": "Desconocido",
"outcome": "Outcome",
"outcome": "Resultado",
"outcomeSuccess": "Éxito",
"outcomeFailed": "Failed",
"auditDetails": "Details",
"deleteAllData": "Delete all data globally",
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
"deleteAllConfirm": "Really delete all data?",
"deleteAllConfirmDescription": "This will permanently delete all measurements, medications, intake events, API tokens, Withings connections, open authentication challenges, notification channels (Telegram, ntfy, Web Push), push subscriptions, and queued Telegram message deletions for all users. User accounts, the audit log, and submitted feedback are preserved so the wipe itself remains traceable and bug reports stay triageable.",
"deleteButton": "Delete all data",
"finalDelete": "Delete permanently",
"outcomeFailed": "Fallido",
"auditDetails": "Detalles",
"deleteAllData": "Eliminar todos los datos globalmente",
"deleteAllDescription": "Elimina todos los datos de mediciones, medicación, integraciones y registros de todos los usuarios. Las cuentas de usuario se conservarán.",
"deleteAllConfirm": "¿Eliminar realmente todos los datos?",
"deleteAllConfirmDescription": "Esto eliminará permanentemente todas las mediciones, medicamentos, eventos de toma, tokens de API, conexiones de Withings, retos de autenticación abiertos, canales de notificación (Telegram, ntfy, Web Push), suscripciones push y eliminaciones de mensajes de Telegram en cola de todos los usuarios. Las cuentas de usuario, el registro de auditoría y los comentarios enviados se conservan para que el borrado siga siendo rastreable y los informes de errores se puedan seguir clasificando.",
"deleteButton": "Eliminar todos los datos",
"finalDelete": "Eliminar permanentemente",
"deletedResult": "Deleted: {measurements} measurements, {medications} Medicamentos,{intakeEvents} intakes, {apiTokens} API tokens, {withingsConnections} Withings connections, {authChallenges} auth challenges, {notificationChannels} notification channels, {pushSubscriptions} push subscriptions, {telegramScheduledDeletions} queued Telegram deletions. Feedback rows preserved.",
"authRegister": "Registration",
"authRegister": "Registro",
"authLogin": "Iniciar sesión",
"authLoginPasskey": "Passkey login",
"authLoginPassword": "Password login",
"authLoginFailed": "Failed",
"authLoginPasskey": "Inicio de sesión con passkey",
"authLoginPassword": "Inicio de sesión con contraseña",
"authLoginFailed": "Fallido",
"authLogout": "Cerrar sesión",
"authPasskeyRegister": "Passkey added",
"authPasskeyDelete": "Passkey deleted",
"authTokenAutoissueNative": "Native client token issued",
"authTokenRefresh": "Token refreshed",
"authTokenRevoke": "Token revoked",
"medicationReminders": "Medication Reminders",
"medicationRemindersDescription": "Thresholds for reminder badge color transitions on medication cards.",
"reminderLateMinutes": "Late threshold (minutes)",
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
"reminderMissedMinutes": "Missed threshold (minutes)",
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
"notificationTestSend": "Send test",
"notificationTestSuccess": "Test notification sent",
"notificationTestFailed": "Failed to send test notification",
"reminderCheckRun": "Run reminder check",
"reminderCheckSuccess": "Reminder check completed",
"reminderCheckFailed": "Failed to run reminder check",
"reminderCheckResults": "Results",
"reminderCheckNotifOn": "Notifications on",
"reminderCheckNotifOff": "Notifications off",
"reminderCheckEventsToday": "Events today",
"reminderCheckNotifSent": "Sent",
"authPasskeyRegister": "Passkey añadida",
"authPasskeyDelete": "Passkey eliminada",
"authTokenAutoissueNative": "Token de cliente nativo emitido",
"authTokenRefresh": "Token renovado",
"authTokenRevoke": "Token revocado",
"medicationReminders": "Recordatorios de medicación",
"medicationRemindersDescription": "Umbrales para los cambios de color de las insignias de recordatorio en las tarjetas de medicación.",
"reminderLateMinutes": "Umbral de retraso (minutos)",
"reminderLateMinutesDescription": "Minutos tras el fin de la ventana hasta que la insignia cambia de amarillo a naranja.",
"reminderMissedMinutes": "Umbral de omisión (minutos)",
"reminderMissedMinutesDescription": "Minutos tras el fin de la ventana hasta que la toma se considera omitida.",
"notificationTestSend": "Enviar prueba",
"notificationTestSuccess": "Notificación de prueba enviada",
"notificationTestFailed": "No se pudo enviar la notificación de prueba",
"reminderCheckRun": "Ejecutar comprobación de recordatorios",
"reminderCheckSuccess": "Comprobación de recordatorios completada",
"reminderCheckFailed": "No se pudo ejecutar la comprobación de recordatorios",
"reminderCheckResults": "Resultados",
"reminderCheckNotifOn": "Notificaciones activadas",
"reminderCheckNotifOff": "Notificaciones desactivadas",
"reminderCheckEventsToday": "Eventos de hoy",
"reminderCheckNotifSent": "Enviadas",
"feedback": {
"tabOpen": "Open",
"tabAcknowledged": "Acknowledged",
"tabResolved": "Resolved",
"tabArchived": "Archived",
"subject": "Subject",
"category": "Category",
"user": "User",
"createdAt": "Submitted",
"tabOpen": "Abierto",
"tabAcknowledged": "Confirmado",
"tabResolved": "Resuelto",
"tabArchived": "Archivado",
"subject": "Asunto",
"category": "Categoría",
"user": "Usuario",
"createdAt": "Enviado",
"actions": "Acciones",
"details": "Details",
"emptyTitle": "All caught up",
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
"loading": "Loading feedback...",
"anonymous": "anonymous",
"categoryBug": "Bug",
"categoryFeature": "Feature",
"categoryQuestion": "Question",
"categoryOther": "Other",
"metadataHeading": "Metadata",
"details": "Detalles",
"emptyTitle": "Todo al día",
"emptyDescription": "No hay comentarios de usuarios en este estado. Los errores, preguntas y solicitudes de funciones enviados aparecerán aquí.",
"loading": "Cargando comentarios...",
"anonymous": "anónimo",
"categoryBug": "Error",
"categoryFeature": "Función",
"categoryQuestion": "Pregunta",
"categoryOther": "Otro",
"metadataHeading": "Metadatos",
"metaUrl": "URL",
"metaLocale": "Locale",
"metaUserAgent": "User agent",
"metaAppVersion": "App version",
"metaLocale": "Idioma",
"metaUserAgent": "Agente de usuario",
"metaAppVersion": "Versión de la app",
"screenshotHeading": "Screenshot",
"adminNote": "Admin note",
"adminNotePlaceholder": "Internal note (not visible to user)",
"saveNote": "Save note",
"noteSaved": "Note saved",
"actionAcknowledge": "Acknowledge",
"actionResolve": "Resolve",
"actionArchive": "Archive",
"actionPublishGithub": "Publish to GitHub",
"publishedToGithub": "Published to GitHub",
"viewIssue": "View issue",
"publishSuccess": "Issue created",
"publishFailed": "GitHub publish failed",
"updateFailed": "Update failed",
"archiveConfirm": "Archive this feedback entry?",
"submittedBy": "Submitted by"
"adminNote": "Nota de administración",
"adminNotePlaceholder": "Nota interna (no visible para el usuario)",
"saveNote": "Guardar nota",
"noteSaved": "Nota guardada",
"actionAcknowledge": "Confirmar",
"actionResolve": "Resolver",
"actionArchive": "Archivar",
"actionPublishGithub": "Publicar en GitHub",
"publishedToGithub": "Publicado en GitHub",
"viewIssue": "Ver issue",
"publishSuccess": "Issue creada",
"publishFailed": "La publicación en GitHub falló",
"updateFailed": "La actualización falló",
"archiveConfirm": "¿Archivar esta entrada de comentarios?",
"submittedBy": "Enviado por"
},
"shell": {
"overview": "Resumen",
"sectionsNav": "Admin sections"
"sectionsNav": "Secciones de administración"
},
"overview": {
"welcomeTitle": "Bienvenido,{name}",
"welcomeSubtitle": "You are signed in as administrator. Pick a section to manage HealthLog.",
"snapshotTitle": "System snapshot",
"snapshotVersion": "Version",
"snapshotDatabase": "Database",
"welcomeSubtitle": "Has iniciado sesión como administrador. Elige una sección para gestionar HealthLog.",
"snapshotTitle": "Instantánea del sistema",
"snapshotVersion": "Versión",
"snapshotDatabase": "Base de datos",
"snapshotWorker": "Worker",
"snapshotStarted": "Started",
"snapshotStarted": "Iniciado",
"snapshotBuildSha": "Build SHA",
"snapshotBuiltAt": "Built at",
"snapshotBuiltAt": "Compilado el",
"snapshotOfflineGeo": "Datos geográficos",
"snapshotOfflineGeoOn": "Sin conexión (GeoLite2)",
"snapshotOfflineGeoOff": "Respaldo (ipwho.is)",
"snapshotLoadError": "Failed to load system snapshot.",
"snapshotLoading": "Loading snapshot...",
"auditTitle": "Recent activity",
"auditEmpty": "No recent audit entries.",
"auditLoadError": "Failed to load recent activity.",
"auditLoading": "Loading activity...",
"auditViewAll": "View all"
"snapshotLoadError": "No se pudo cargar la instantánea del sistema.",
"snapshotLoading": "Cargando instantánea...",
"auditTitle": "Actividad reciente",
"auditEmpty": "No hay entradas de auditoría recientes.",
"auditLoadError": "No se pudo cargar la actividad reciente.",
"auditLoading": "Cargando actividad...",
"auditViewAll": "Ver todo"
},
"section": {
"system-status": {
"title": "System Status",
"subtitle": "Worker, database, and integration health at a glance."
"title": "Estado del sistema",
"subtitle": "Estado del worker, la base de datos y las integraciones de un vistazo."
},
"general": {
"title": "General",
"subtitle": "Registration, default language, and other app-wide toggles."
"subtitle": "Registro, idioma predeterminado y otros interruptores de toda la aplicación."
},
"services": {
"title": "Services",
"subtitle": "Enable or disable notification channels and integrations system-wide."
"title": "Servicios",
"subtitle": "Activa o desactiva los canales de notificación y las integraciones en todo el sistema."
},
"integrations": {
"title": "Integraciones",
"subtitle": "Configure Umami, GlitchTip, Web Push, and bug reports."
"subtitle": "Configura Umami, GlitchTip, Web Push e informes de errores."
},
"ai-quality": {
"title": "Insights Quality",
"subtitle": "Helpfulness scores grouped by severity and provider, from the last 30 days of user feedback."
"title": "Calidad de los análisis",
"subtitle": "Puntuaciones de utilidad agrupadas por gravedad y proveedor, de los últimos 30 días de comentarios de usuarios."
},
"assistant": {
"title": "Superficies del asistente",
"subtitle": "Activa o desactiva cada superficie impulsada por el modelo sin retirar la configuración del proveedor."
},
"coach-feedback": {
"title": "Coach Feedback",
"subtitle": "Helpful-rate per Coach prompt version, tone, and verbosity from the last 30 days."
"title": "Comentarios del Coach",
"subtitle": "Tasa de utilidad por versión de prompt, tono y nivel de detalle del Coach de los últimos 30 días."
},
"feedback": {
"title": "Feedback",
"subtitle": "Triage user feedback, bug reports, and feature requests."
"title": "Comentarios",
"subtitle": "Clasifica los comentarios de usuarios, los informes de errores y las solicitudes de funciones."
},
"reminders": {
"title": "Reminders",
"subtitle": "Tune medication reminder thresholds and run a manual check."
"title": "Recordatorios",
"subtitle": "Ajusta los umbrales de los recordatorios de medicación y ejecuta una comprobación manual."
},
"users": {
"title": "Users",
"subtitle": "Manage user accounts, roles, and active sessions.",
"title": "Usuarios",
"subtitle": "Gestiona las cuentas de usuario, los roles y las sesiones activas.",
"filter": {
"all": "Todo",
"admin": "Admins",
"user": "Users"
"admin": "Administradores",
"user": "Usuarios"
},
"forceLogout": "Force logout",
"forceLogoutConfirmTitle": "Force logout {name}?",
"forceLogoutConfirmBody": "All active sessions for this user will be revoked. They will need to sign in again on every device.",
"forceLogoutSuccess": "Logged {name} out of {count} session(s)",
"forceLogoutFailed": "Failed to force logout",
"cannotLogoutSelf": "Cannot force-logout yourself",
"emptyTitle": "No users in this view",
"emptyDescription": "There are no users matching the current filter.",
"emptyResetFilter": "Show all users"
"forceLogout": "Forzar cierre de sesión",
"forceLogoutConfirmTitle": "¿Forzar el cierre de sesión de {name}?",
"forceLogoutConfirmBody": "Se revocarán todas las sesiones activas de este usuario. Tendrá que volver a iniciar sesión en todos los dispositivos.",
"forceLogoutSuccess": "Se cerró la sesión de {name} en {count} sesión(es)",
"forceLogoutFailed": "No se pudo forzar el cierre de sesión",
"cannotLogoutSelf": "No puedes forzar tu propio cierre de sesión",
"emptyTitle": "No hay usuarios en esta vista",
"emptyDescription": "No hay usuarios que coincidan con el filtro actual.",
"emptyResetFilter": "Mostrar todos los usuarios"
},
"api-tokens": {
"title": "API Tokens",
"subtitle": "Active bearer tokens issued to native clients and integrations."
"title": "Tokens de API",
"subtitle": "Tokens bearer activos emitidos a clientes nativos e integraciones."
},
"login-overview": {
"title": "Login Overview",
"subtitle": "Audit trail of authentication and admin events."
"title": "Resumen de inicios de sesión",
"subtitle": "Registro de auditoría de eventos de autenticación y de administración."
},
"auditLog": {
"filterActor": "Actor (user id or username)",
"filterAction": "Action",
"filterActionAll": "All actions",
"filterTarget": "Target (id or path)",
"filterDate": "Date range",
"range24h": "Last 24 hours",
"filterActor": "Actor (ID de usuario o nombre de usuario)",
"filterAction": "Acción",
"filterActionAll": "Todas las acciones",
"filterTarget": "Objetivo (ID o ruta)",
"filterDate": "Intervalo de fechas",
"range24h": "Últimas 24 horas",
"range7d": "Últimos 7 días",
"range30d": "Últimos 30 días",
"rangeAll": "Todo el tiempo",
"perPage": "Per page",
"prev": "Previous",
"perPage": "Por página",
"prev": "Anterior",
"next": "Siguiente",
"pageOf": "Página {page} de {total}",
"export": "Export CSV",
"empty": "No audit entries match the current filters."
"export": "Exportar CSV",
"empty": "Ninguna entrada de auditoría coincide con los filtros actuales."
},
"app-logs": {
"title": "App Logs",
"subtitle": "Tail the most recent structured wide-events emitted by this process.",
"processNote": "Showing app-process logs only — worker-process logs go to Loki when that integration is configured. Buffer is volatile and capped at 500 entries.",
"filterTraceId": "Trace ID",
"filterAction": "Action contains…",
"filterLevel": "Level",
"levelAll": "All levels",
"filterRange": "Time window",
"range15m": "Last 15 minutes",
"range1h": "Last hour",
"range6h": "Last 6 hours",
"rangeAll": "Whole buffer",
"colLevel": "Level",
"colTimestamp": "Timestamp",
"colAction": "Action",
"colDuration": "Duration",
"title": "Registros de la app",
"subtitle": "Muestra los wide-events estructurados más recientes emitidos por este proceso.",
"processNote": "Solo se muestran los registros del proceso de la app; los registros del proceso del worker van a Loki cuando esa integración está configurada. El búfer es volátil y está limitado a 500 entradas.",
"filterTraceId": "ID de traza",
"filterAction": "La acción contiene…",
"filterLevel": "Nivel",
"levelAll": "Todos los niveles",
"filterRange": "Ventana de tiempo",
"range15m": "Últimos 15 minutos",
"range1h": "Última hora",
"range6h": "Últimas 6 horas",
"rangeAll": "Búfer completo",
"colLevel": "Nivel",
"colTimestamp": "Marca de tiempo",
"colAction": "Acción",
"colDuration": "Duración",
"colTraceId": "Trace",
"showing": "Showing {count} of up to {bufferMax} buffered events",
"empty": "Buffer is empty",
"emptyDescription": "No events match the current filters yet. Hit refresh after triggering some traffic.",
"refresh": "Refresh",
"eventDetails": "Event details",
"closeDetails": "Close details"
"showing": "Mostrando {count} de hasta {bufferMax} eventos en búfer",
"empty": "El búfer está vacío",
"emptyDescription": "Aún no hay eventos que coincidan con los filtros actuales. Pulsa actualizar tras generar algo de tráfico.",
"refresh": "Actualizar",
"eventDetails": "Detalles del evento",
"closeDetails": "Cerrar detalles"
},
"backups": {
"title": "Backups",
"subtitle": "Weekly per-user data snapshots stored in PostgreSQL.",
"description": "Each user gets one rolling snapshot per backup type. Sizes show the encrypted blob — payloads are not downloadable from this page.",
"runNow": "Backup now",
"runEnqueued": "Backup job enqueued",
"runFailed": "Failed to enqueue backup",
"loading": "Loading backups...",
"loadError": "Failed to load backups.",
"emptyTitle": "No backups yet",
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
"colUser": "User",
"title": "Copias de seguridad",
"subtitle": "Instantáneas de datos semanales por usuario almacenadas en PostgreSQL.",
"description": "Cada usuario tiene una instantánea rotativa por tipo de copia. Los tamaños muestran el blob cifrado; los contenidos no se pueden descargar desde esta página.",
"runNow": "Hacer copia ahora",
"runEnqueued": "Tarea de copia de seguridad en cola",
"runFailed": "No se pudo poner en cola la copia de seguridad",
"loading": "Cargando copias de seguridad...",
"loadError": "No se pudieron cargar las copias de seguridad.",
"emptyTitle": "Aún no hay copias de seguridad",
"emptyDescription": "Las copias de seguridad se ejecutan automáticamente cada domingo a las 03:00, o inicia una ahora para crear la primera instantánea.",
"colUser": "Usuario",
"colType": "Tipo",
"typeWeeklyAuto": "Weekly (auto)",
"typeWeeklyAuto": "Semanal (auto)",
"typeManual": "Manual",
"colSize": "Size",
"colCreatedAt": "Last snapshot",
"colSize": "Tamaño",
"colCreatedAt": "Última instantánea",
"colActions": "Acciones",
"retentionLabel": "Retention: {days} days",
"download": "Download",
"downloadAria": "Download backup for {username}",
"downloadFailed": "Download failed",
"downloadStarted": "Download started",
"uploadTitle": "Upload backup",
"uploadDescription": "Validate a backup file and store it as a manual snapshot. Restoring is a separate step.",
"uploadButton": "Upload file",
"uploadHelp": "JSON file matching the current backup schema. Max 10 MB.",
"uploadSuccess": "Backup uploaded ({count} records)",
"uploadFailed": "Upload failed",
"restore": "Restore",
"restoreAria": "Restore from backup for {username}",
"restoreTitle": "Restore from backup",
"restoreDescription": "This will replace ALL current data for {username} with the snapshot from {when}. Existing measurements, medications, intake events, mood entries, notification channels, push subscriptions and queued Telegram deletions will be deleted.",
"restorePromptLabel": "Type RESTORE to continue",
"restoreConfirm": "Restore now",
"restoreInProgress": "Restoring...",
"restoreSuccess": "Restore complete",
"restoreFailed": "Restore failed",
"docsLink": "Documentation"
"retentionLabel": "Conservación: {days} días",
"download": "Descargar",
"downloadAria": "Descargar copia de seguridad de {username}",
"downloadFailed": "La descarga falló",
"downloadStarted": "Descarga iniciada",
"uploadTitle": "Subir copia de seguridad",
"uploadDescription": "Valida un archivo de copia de seguridad y guárdalo como instantánea manual. La restauración es un paso aparte.",
"uploadButton": "Subir archivo",
"uploadHelp": "Archivo JSON que coincida con el esquema de copia de seguridad actual. Máx. 10 MB.",
"uploadSuccess": "Copia de seguridad subida ({count} registros)",
"uploadFailed": "La subida falló",
"restore": "Restaurar",
"restoreAria": "Restaurar desde copia de seguridad de {username}",
"restoreTitle": "Restaurar desde copia de seguridad",
"restoreDescription": "Esto reemplazará TODOS los datos actuales de {username} con la instantánea del {when}. Se eliminarán las mediciones, los medicamentos, los eventos de toma, las entradas de ánimo, los canales de notificación, las suscripciones push y las eliminaciones de Telegram en cola existentes.",
"restorePromptLabel": "Escribe RESTORE para continuar",
"restoreConfirm": "Restaurar ahora",
"restoreInProgress": "Restaurando...",
"restoreSuccess": "Restauración completada",
"restoreFailed": "La restauración falló",
"docsLink": "Documentación"
},
"danger-zone": {
"title": "Danger Zone",
"subtitle": "Destructive system-wide operations."
"title": "Zona de peligro",
"subtitle": "Operaciones destructivas en todo el sistema."
},
"about": {
"title": "About",
"subtitle": "Version, license, source, and update check."
"title": "Acerca de",
"subtitle": "Versión, licencia, código fuente y comprobación de actualizaciones."
}
},
"carrier": "Operador",
"carrierUnknown": "Operador desconocido",
"carrierUnavailableGeoFallback": "{location} — carrier unavailable"
"carrierUnavailableGeoFallback": "{location} — operador no disponible"
},
"achievements": {
"title": "Logros",
+304 -304
View File
@@ -102,9 +102,9 @@
"bpOptimal": "Optimale",
"bpNormal": "Normale",
"bpHighNormal": "Normale haute",
"bpHypertensionGrade1": "Hypertension grade 1",
"bpHypertensionGrade2": "Hypertension grade 2",
"bpHypertensionGrade3": "Hypertension grade 3",
"bpHypertensionGrade1": "Hypertension de grade 1",
"bpHypertensionGrade2": "Hypertension de grade 2",
"bpHypertensionGrade3": "Hypertension de grade 3",
"moodAwful": "Très mauvaise",
"moodBad": "Mauvais",
"moodNeutral": "Neutre",
@@ -3708,113 +3708,113 @@
},
"admin": {
"title": "Administration",
"subtitle": "System status, users, and settings",
"settingsSaveError": "Failed to save settings",
"systemStatus": "System Status",
"database": "Database",
"databaseConnected": "Connected",
"subtitle": "État du système, utilisateurs et paramètres",
"settingsSaveError": "Échec de l'enregistrement des paramètres",
"systemStatus": "État du système",
"database": "Base de données",
"databaseConnected": "Connectée",
"databaseError": "Erreur",
"startedAt": "Started",
"users": "Users",
"measurementsCount": "Measurements",
"activeTokens": "Active API Tokens",
"activeSessions": "Active Sessions",
"loadingStatus": "Loading status...",
"systemStatusLoadError": "Failed to load system status.",
"startedAt": "Démarré",
"users": "Utilisateurs",
"measurementsCount": "Mesures",
"activeTokens": "Jetons d'API actifs",
"activeSessions": "Sessions actives",
"loadingStatus": "Chargement de l'état...",
"systemStatusLoadError": "Échec du chargement de l'état du système.",
"systemStatusRetry": "Réessayer",
"adminSettingsLoadError": "Failed to load admin settings. Toggles below may not reflect the live state — refresh the page.",
"adminSettingsLoadError": "Échec du chargement des paramètres d'administration. Les commutateurs ci-dessous peuvent ne pas refléter l'état actuel — actualisez la page.",
"hostMetrics": {
"title": "Host load",
"load1": "Load (1m)",
"memUsedPercent": "Memory",
"title": "Charge de l'hôte",
"load1": "Charge (1 min)",
"memUsedPercent": "Mémoire",
"diskBusyPercent": "Disk I/O",
"last2hours": "Last 2 hours",
"empty": "Sampling started — data appears in 1–2 minutes.",
"loadError": "Failed to load host metrics. Try refreshing the page."
"last2hours": "2 dernières heures",
"empty": "Échantillonnage démarré — les données apparaissent dans 1 à 2 minutes.",
"loadError": "Échec du chargement des métriques de l'hôte. Essayez d'actualiser la page."
},
"aiQuality": {
"title": "Insights Quality",
"loading": "Loading feedback summary...",
"loadError": "Failed to load Insights quality summary. Try refreshing the page.",
"empty": "No feedback yet. The aggregator runs daily at 04:00 — once users start rating recommendations, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colSeverity": "Severity",
"colMetric": "Metric",
"colProvider": "Provider",
"title": "Qualité des analyses",
"loading": "Chargement du résumé des retours...",
"loadError": "Échec du chargement du résumé de qualité des analyses. Essayez d'actualiser la page.",
"empty": "Aucun retour pour l'instant. L'agrégateur s'exécute chaque jour à 04:00 — dès que les utilisateurs évaluent les recommandations, les taux d'utilité apparaissent ici.",
"windowLabel": "{days} derniers jours",
"generatedAtLabel": "Généré",
"colSeverity": "Gravité",
"colMetric": "Métrique",
"colProvider": "Fournisseur",
"colPromptVersion": "Prompt",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"colHelpfulRate": "Helpful rate"
"colHelpful": "Utile",
"colNotHelpful": "Pas utile",
"colHelpfulRate": "Taux d'utilité"
},
"coachFeedback": {
"title": "Coach Feedback",
"loading": "Loading Coach feedback summary...",
"loadError": "Failed to load Coach feedback summary. Try refreshing the page.",
"empty": "No Coach feedback yet. The aggregator runs daily at 04:00 — once users rate Coach replies, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colPromptVersion": "Prompt version",
"colTone": "Tone",
"colVerbosity": "Verbosity",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"title": "Retours sur le Coach",
"loading": "Chargement du résumé des retours sur le Coach...",
"loadError": "Échec du chargement du résumé des retours sur le Coach. Essayez d'actualiser la page.",
"empty": "Aucun retour sur le Coach pour l'instant. L'agrégateur s'exécute chaque jour à 04:00 — dès que les utilisateurs évaluent les réponses du Coach, les taux d'utilité apparaissent ici.",
"windowLabel": "{days} derniers jours",
"generatedAtLabel": "Généré",
"colPromptVersion": "Version du prompt",
"colTone": "Ton",
"colVerbosity": "Niveau de détail",
"colHelpful": "Utile",
"colNotHelpful": "Pas utile",
"colN": "n",
"colHelpfulRate": "Helpful rate"
"colHelpfulRate": "Taux d'utilité"
},
"workerStatus": "Job Worker",
"workerRunning": "Running",
"workerStopped": "Stopped",
"lastReminderCheck": "Last Reminder Check",
"appSettings": "Application Settings",
"registrationEnabled": "Allow registration",
"registrationEnabledDescription": "When disabled, new users cannot register.",
"defaultLanguage": "Default language",
"defaultLanguageDescription": "Used for new users and as fallback.",
"defaultUserTimezone": "Default timezone for new accounts",
"defaultUserTimezoneDescription": "Used for new accounts that don't carry a browser-detected zone. Does not affect existing users.",
"defaultUserTimezoneFallback": "Europe/Berlin (default)",
"workerStatus": "Worker de tâches",
"workerRunning": "En cours",
"workerStopped": "Arrêté",
"lastReminderCheck": "Dernière vérification des rappels",
"appSettings": "Paramètres de l'application",
"registrationEnabled": "Autoriser l'inscription",
"registrationEnabledDescription": "Lorsque cette option est désactivée, les nouveaux utilisateurs ne peuvent pas s'inscrire.",
"defaultLanguage": "Langue par défaut",
"defaultLanguageDescription": "Utilisé pour les nouveaux utilisateurs et comme solution de repli.",
"defaultUserTimezone": "Fuseau horaire par défaut pour les nouveaux comptes",
"defaultUserTimezoneDescription": "Utilisé pour les nouveaux comptes sans fuseau détecté par le navigateur. N'affecte pas les utilisateurs existants.",
"defaultUserTimezoneFallback": "Europe/Berlin (par défaut)",
"servicesGlobal": "Services (global)",
"servicesGlobalDescription": "Disabled services are not available to any user.",
"telegramGlobal": "Allow Telegram notifications.",
"ntfyGlobal": "Allow ntfy notifications.",
"webPushGlobal": "Allow browser push notifications.",
"moodLogGlobal": "Allow mood-log reminders.",
"servicesGlobalDescription": "Les services désactivés ne sont disponibles pour aucun utilisateur.",
"telegramGlobal": "Autoriser les notifications Telegram.",
"ntfyGlobal": "Autoriser les notifications ntfy.",
"webPushGlobal": "Autoriser les notifications push du navigateur.",
"moodLogGlobal": "Autoriser les rappels du journal d'humeur.",
"integrationWebPush": "Web Push",
"integrationBugReport": "Bug Report",
"integrationBugReport": "Rapport de bug",
"offlineGeoLabel": "Données géographiques",
"offlineGeoEnabled": "Hors ligne (GeoLite2)",
"offlineGeoFallback": "Fallback (ipwho.is) — définissez MAXMIND_LICENSE_KEY dans la CI",
"apiGlobal": "Allow API endpoints and API tokens.",
"apiGlobal": "Autoriser les points de terminaison d'API et les jetons d'API.",
"umamiTitle": "Umami",
"umamiDescription": "Web analytics with Umami",
"umamiDescription": "Analyse web avec Umami",
"glitchtipTitle": "GlitchTip",
"glitchtipDescription": "Error tracking with GlitchTip",
"glitchtipDescription": "Suivi des erreurs avec GlitchTip",
"webPushVapidTitle": "Web Push VAPID",
"umamiEnabled": "Enable Umami tracking.",
"umamiScriptUrl": "Umami script URL",
"umamiEnabled": "Activer le suivi Umami.",
"umamiScriptUrl": "URL du script Umami",
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
"umamiWebsiteId": "Umami website ID",
"umamiWebsiteId": "ID du site web Umami",
"umamiWebsiteIdPlaceholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"glitchtipEnabled": "Enable GlitchTip error tracking.",
"glitchtipEnabled": "Activer le suivi des erreurs GlitchTip.",
"glitchtipDsn": "GlitchTip DSN",
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
"glitchtipEnvironment": "GlitchTip environment",
"glitchtipEnvironment": "Environnement GlitchTip",
"glitchtipEnvironmentPlaceholder": "production",
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
"webPushVapidPublicKey": "VAPID public key",
"webPushVapidDescription": "Configurez ici les clés VAPID et le subject pour que le push du navigateur fonctionne sans variables d'environnement.",
"webPushVapidPublicKey": "Clé publique VAPID",
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
"webPushVapidPrivateKey": "VAPID private key",
"webPushVapidPrivateKeyPlaceholder": "Optional: enter a new private key",
"webPushVapidSubject": "VAPID subject",
"webPushVapidPrivateKey": "Clé privée VAPID",
"webPushVapidPrivateKeyPlaceholder": "Facultatif : saisissez une nouvelle clé privée",
"webPushVapidSubject": "Subject VAPID",
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
"configured": "Configured",
"monitoringTestSuccess": "Test event sent",
"monitoringTestFailed": "Monitoring test failed",
"bugReportGithub": "Bug report (GitHub Issues)",
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
"bugReportEnabledLabel": "Bug reports enabled",
"bugReportEnabledDescription": "When off, the in-app report button hides — token and repository stay configured.",
"configured": "Configuré",
"monitoringTestSuccess": "Événement de test envoyé",
"monitoringTestFailed": "Échec du test de surveillance",
"bugReportGithub": "Rapport de bug (GitHub Issues)",
"bugReportGithubDescription": "Configurez le jeton d'issues GitHub et le dépôt pour les rapports de bug entrants.",
"bugReportEnabledLabel": "Rapports de bug activés",
"bugReportEnabledDescription": "Lorsque cette option est désactivée, le bouton de signalement dans l'app est masqué — le jeton et le dépôt restent configurés.",
"assistant": {
"title": "Surfaces d'assistance",
"description": "Chaque bascule masque une surface pilotée par le modèle dans toute l'application sans retirer la configuration du fournisseur. Le commutateur principal force chaque option secondaire à off.",
@@ -3843,324 +3843,324 @@
"description": "L'icône ? près de la ligne de delta du Health-Score. Le chiffre du delta reste visible quoi qu'il arrive."
}
},
"bugReportRepo": "Repository",
"bugReportRepo": "Dépôt",
"bugReportRepoPlaceholder": "owner/repo",
"bugReportToken": "Issue token",
"bugReportToken": "Jeton d'issue",
"bugReportTokenPlaceholder": "ghp_...",
"userManagement": "User Management",
"userManagement": "Gestion des utilisateurs",
"userName": "Nom",
"userEmail": "E-mail",
"userRole": "Role",
"userRole": "Rôle",
"userPasskeys": "Passkeys",
"userCreated": "Created",
"userCreated": "Créé",
"userActions": "Actions",
"editUser": "Edit user",
"editUserTitle": "Edit user: {name}",
"demoteToUser": "Demote to user",
"promoteToAdmin": "Promote to admin",
"toUser": "Make user",
"toAdmin": "Make admin",
"ownRoleUnchangeable": "Cannot change own role",
"resetPassword": "Reset password",
"resetPasswordTitle": "Reset password: {name}",
"newPassword": "New password",
"newPasswordPlaceholder": "At least 12 characters",
"passwordReset": "Password has been reset",
"editUser": "Modifier l'utilisateur",
"editUserTitle": "Modifier l'utilisateur : {name}",
"demoteToUser": "Rétrograder en utilisateur",
"promoteToAdmin": "Promouvoir administrateur",
"toUser": "Définir comme utilisateur",
"toAdmin": "Définir comme administrateur",
"ownRoleUnchangeable": "Impossible de modifier son propre rôle",
"resetPassword": "Réinitialiser le mot de passe",
"resetPasswordTitle": "Réinitialiser le mot de passe : {name}",
"newPassword": "Nouveau mot de passe",
"newPasswordPlaceholder": "Au moins 12 caractères",
"passwordReset": "Le mot de passe a été réinitialisé",
"reset": "Réinitialiser",
"loadingUsers": "Loading users...",
"apiTokens": "API Tokens",
"tokenUser": "User",
"loadingUsers": "Chargement des utilisateurs...",
"apiTokens": "Jetons d'API",
"tokenUser": "Utilisateur",
"tokenName": "Nom",
"tokenPermissions": "Permissions",
"tokenPermissions": "Autorisations",
"tokenPermissionAll": "Tout",
"tokenPermissionAllTooltip": "Wildcard permission — this token can call every API route.",
"tokenPermissionAllTooltip": "Autorisation joker — ce jeton peut appeler toutes les routes de l'API.",
"tokenStatus": "Statut",
"tokenLastUsed": "Last used",
"tokenCreated": "Created",
"tokenNeverUsed": "Never",
"tokensEmptyTitle": "No API tokens yet",
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
"loginOverview": "Login Overview",
"allAuthEvents": "All auth events",
"failedOnly": "Failed only",
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
"loginEmptyFailedTitle": "No failed sign-in attempts",
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
"loginEmptyResetFilter": "Show all events",
"tokenLastUsed": "Dernière utilisation",
"tokenCreated": "Créé",
"tokenNeverUsed": "Jamais",
"tokensEmptyTitle": "Aucun jeton d'API pour l'instant",
"tokensEmptyDescription": "Les jetons sont émis lorsqu'un client natif se connecte ou via Paramètres → Compte.",
"loginOverview": "Aperçu des connexions",
"allAuthEvents": "Tous les événements d'authentification",
"failedOnly": "Échecs uniquement",
"loginEmptyDescription": "Les connexions, déconnexions et modifications de passkey apparaîtront ici.",
"loginEmptyFailedTitle": "Aucune tentative de connexion échouée",
"loginEmptyFailedDescription": "C'est l'état sûr. Passez à tous les événements pour voir les connexions réussies.",
"loginEmptyResetFilter": "Afficher tous les événements",
"showingEntries": "Affichage de {count} sur {total} entrées d'authentification",
"status": "Statut",
"action": "Action",
"ip": "IP",
"location": "Location",
"location": "Emplacement",
"timestamp": "Heure",
"provider": "Provider",
"provider": "Fournisseur",
"providerPassword": "Mot de passe",
"providerPasskey": "Passkey",
"providerApiToken": "API token",
"providerApiToken": "Jeton d'API",
"providerWithings": "Withings",
"providerUnknown": "Inconnu",
"outcome": "Outcome",
"outcome": "Résultat",
"outcomeSuccess": "Succès",
"outcomeFailed": "Failed",
"auditDetails": "Details",
"deleteAllData": "Delete all data globally",
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
"deleteAllConfirm": "Really delete all data?",
"deleteAllConfirmDescription": "This will permanently delete all measurements, medications, intake events, API tokens, Withings connections, open authentication challenges, notification channels (Telegram, ntfy, Web Push), push subscriptions, and queued Telegram message deletions for all users. User accounts, the audit log, and submitted feedback are preserved so the wipe itself remains traceable and bug reports stay triageable.",
"deleteButton": "Delete all data",
"finalDelete": "Delete permanently",
"outcomeFailed": "Échec",
"auditDetails": "Détails",
"deleteAllData": "Supprimer toutes les données globalement",
"deleteAllDescription": "Supprime toutes les données de mesures, de médicaments, d'intégrations et de journaux pour tous les utilisateurs. Les comptes utilisateurs sont conservés.",
"deleteAllConfirm": "Vraiment supprimer toutes les données ?",
"deleteAllConfirmDescription": "Cette action supprimera définitivement toutes les mesures, médicaments, événements de prise, jetons d'API, connexions Withings, défis d'authentification ouverts, canaux de notification (Telegram, ntfy, Web Push), abonnements push et suppressions de messages Telegram en file d'attente pour tous les utilisateurs. Les comptes utilisateurs, le journal d'audit et les retours soumis sont conservés afin que l'effacement reste traçable et que les rapports de bug restent triables.",
"deleteButton": "Supprimer toutes les données",
"finalDelete": "Supprimer définitivement",
"deletedResult": "Deleted: {measurements} measurements, {medications} Médicaments,{intakeEvents} intakes, {apiTokens} API tokens, {withingsConnections} Withings connections, {authChallenges} auth challenges, {notificationChannels} notification channels, {pushSubscriptions} push subscriptions, {telegramScheduledDeletions} queued Telegram deletions. Feedback rows preserved.",
"authRegister": "Registration",
"authRegister": "Inscription",
"authLogin": "Connexion",
"authLoginPasskey": "Passkey login",
"authLoginPassword": "Password login",
"authLoginFailed": "Failed",
"authLoginPasskey": "Connexion par passkey",
"authLoginPassword": "Connexion par mot de passe",
"authLoginFailed": "Échec",
"authLogout": "Déconnexion",
"authPasskeyRegister": "Passkey added",
"authPasskeyDelete": "Passkey deleted",
"authTokenAutoissueNative": "Native client token issued",
"authTokenRefresh": "Token refreshed",
"authTokenRevoke": "Token revoked",
"medicationReminders": "Medication Reminders",
"medicationRemindersDescription": "Thresholds for reminder badge color transitions on medication cards.",
"reminderLateMinutes": "Late threshold (minutes)",
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
"reminderMissedMinutes": "Missed threshold (minutes)",
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
"notificationTestSend": "Send test",
"notificationTestSuccess": "Test notification sent",
"notificationTestFailed": "Failed to send test notification",
"reminderCheckRun": "Run reminder check",
"reminderCheckSuccess": "Reminder check completed",
"reminderCheckFailed": "Failed to run reminder check",
"reminderCheckResults": "Results",
"reminderCheckNotifOn": "Notifications on",
"reminderCheckNotifOff": "Notifications off",
"reminderCheckEventsToday": "Events today",
"reminderCheckNotifSent": "Sent",
"authPasskeyRegister": "Passkey ajoutée",
"authPasskeyDelete": "Passkey supprimée",
"authTokenAutoissueNative": "Jeton de client natif émis",
"authTokenRefresh": "Jeton renouvelé",
"authTokenRevoke": "Jeton révoqué",
"medicationReminders": "Rappels de médicaments",
"medicationRemindersDescription": "Seuils des transitions de couleur des badges de rappel sur les fiches de médicaments.",
"reminderLateMinutes": "Seuil de retard (minutes)",
"reminderLateMinutesDescription": "Minutes après la fin de la fenêtre avant que le badge passe du jaune à l'orange.",
"reminderMissedMinutes": "Seuil d'oubli (minutes)",
"reminderMissedMinutesDescription": "Minutes après la fin de la fenêtre avant que la prise soit considérée comme manquée.",
"notificationTestSend": "Envoyer un test",
"notificationTestSuccess": "Notification de test envoyée",
"notificationTestFailed": "Échec de l'envoi de la notification de test",
"reminderCheckRun": "Lancer la vérification des rappels",
"reminderCheckSuccess": "Vérification des rappels terminée",
"reminderCheckFailed": "Échec de la vérification des rappels",
"reminderCheckResults": "Résultats",
"reminderCheckNotifOn": "Notifications activées",
"reminderCheckNotifOff": "Notifications désactivées",
"reminderCheckEventsToday": "Événements aujourd'hui",
"reminderCheckNotifSent": "Envoyées",
"feedback": {
"tabOpen": "Open",
"tabAcknowledged": "Acknowledged",
"tabResolved": "Resolved",
"tabArchived": "Archived",
"subject": "Subject",
"category": "Category",
"user": "User",
"createdAt": "Submitted",
"tabOpen": "Ouvert",
"tabAcknowledged": "Pris en compte",
"tabResolved": "Résolu",
"tabArchived": "Archivé",
"subject": "Sujet",
"category": "Catégorie",
"user": "Utilisateur",
"createdAt": "Soumis",
"actions": "Actions",
"details": "Details",
"emptyTitle": "All caught up",
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
"loading": "Loading feedback...",
"anonymous": "anonymous",
"details": "Détails",
"emptyTitle": "Tout est à jour",
"emptyDescription": "Aucun retour utilisateur dans ce statut. Les bugs, questions et demandes de fonctionnalités soumis apparaîtront ici.",
"loading": "Chargement des retours...",
"anonymous": "anonyme",
"categoryBug": "Bug",
"categoryFeature": "Feature",
"categoryFeature": "Fonctionnalité",
"categoryQuestion": "Question",
"categoryOther": "Other",
"metadataHeading": "Metadata",
"categoryOther": "Autre",
"metadataHeading": "Métadonnées",
"metaUrl": "URL",
"metaLocale": "Locale",
"metaUserAgent": "User agent",
"metaAppVersion": "App version",
"metaLocale": "Langue",
"metaUserAgent": "Agent utilisateur",
"metaAppVersion": "Version de l'app",
"screenshotHeading": "Screenshot",
"adminNote": "Admin note",
"adminNotePlaceholder": "Internal note (not visible to user)",
"saveNote": "Save note",
"noteSaved": "Note saved",
"actionAcknowledge": "Acknowledge",
"actionResolve": "Resolve",
"actionArchive": "Archive",
"actionPublishGithub": "Publish to GitHub",
"publishedToGithub": "Published to GitHub",
"viewIssue": "View issue",
"publishSuccess": "Issue created",
"publishFailed": "GitHub publish failed",
"updateFailed": "Update failed",
"archiveConfirm": "Archive this feedback entry?",
"submittedBy": "Submitted by"
"adminNote": "Note d'administration",
"adminNotePlaceholder": "Note interne (non visible par l'utilisateur)",
"saveNote": "Enregistrer la note",
"noteSaved": "Note enregistrée",
"actionAcknowledge": "Prendre en compte",
"actionResolve": "Résoudre",
"actionArchive": "Archiver",
"actionPublishGithub": "Publier sur GitHub",
"publishedToGithub": "Publié sur GitHub",
"viewIssue": "Voir l'issue",
"publishSuccess": "Issue créée",
"publishFailed": "Échec de la publication sur GitHub",
"updateFailed": "Échec de la mise à jour",
"archiveConfirm": "Archiver cette entrée de retour ?",
"submittedBy": "Soumis par"
},
"shell": {
"overview": "Vue d'ensemble",
"sectionsNav": "Admin sections"
"sectionsNav": "Sections d'administration"
},
"overview": {
"welcomeTitle": "Bienvenue,{name}",
"welcomeSubtitle": "You are signed in as administrator. Pick a section to manage HealthLog.",
"snapshotTitle": "System snapshot",
"welcomeSubtitle": "Vous êtes connecté en tant qu'administrateur. Choisissez une section pour gérer HealthLog.",
"snapshotTitle": "Instantané du système",
"snapshotVersion": "Version",
"snapshotDatabase": "Database",
"snapshotDatabase": "Base de données",
"snapshotWorker": "Worker",
"snapshotStarted": "Started",
"snapshotStarted": "Démarré",
"snapshotBuildSha": "Build SHA",
"snapshotBuiltAt": "Built at",
"snapshotBuiltAt": "Compilé le",
"snapshotOfflineGeo": "Données géographiques",
"snapshotOfflineGeoOn": "Hors ligne (GeoLite2)",
"snapshotOfflineGeoOff": "Fallback (ipwho.is)",
"snapshotLoadError": "Failed to load system snapshot.",
"snapshotLoading": "Loading snapshot...",
"auditTitle": "Recent activity",
"auditEmpty": "No recent audit entries.",
"auditLoadError": "Failed to load recent activity.",
"auditLoading": "Loading activity...",
"auditViewAll": "View all"
"snapshotLoadError": "Échec du chargement de l'instantané du système.",
"snapshotLoading": "Chargement de l'instantané...",
"auditTitle": "Activité récente",
"auditEmpty": "Aucune entrée d'audit récente.",
"auditLoadError": "Échec du chargement de l'activité récente.",
"auditLoading": "Chargement de l'activité...",
"auditViewAll": "Tout afficher"
},
"section": {
"system-status": {
"title": "System Status",
"subtitle": "Worker, database, and integration health at a glance."
"title": "État du système",
"subtitle": "État du worker, de la base de données et des intégrations en un coup d'œil."
},
"general": {
"title": "General",
"subtitle": "Registration, default language, and other app-wide toggles."
"title": "Général",
"subtitle": "Inscription, langue par défaut et autres commutateurs applicables à toute l'application."
},
"services": {
"title": "Services",
"subtitle": "Enable or disable notification channels and integrations system-wide."
"subtitle": "Activez ou désactivez les canaux de notification et les intégrations à l'échelle du système."
},
"integrations": {
"title": "Intégrations",
"subtitle": "Configure Umami, GlitchTip, Web Push, and bug reports."
"subtitle": "Configurez Umami, GlitchTip, Web Push et les rapports de bug."
},
"ai-quality": {
"title": "Insights Quality",
"subtitle": "Helpfulness scores grouped by severity and provider, from the last 30 days of user feedback."
"title": "Qualité des analyses",
"subtitle": "Scores d'utilité regroupés par gravité et fournisseur, sur les 30 derniers jours de retours utilisateurs."
},
"assistant": {
"title": "Surfaces d'assistance",
"subtitle": "Activer ou désactiver chaque surface pilotée par le modèle sans supprimer la configuration du fournisseur."
},
"coach-feedback": {
"title": "Coach Feedback",
"subtitle": "Helpful-rate per Coach prompt version, tone, and verbosity from the last 30 days."
"title": "Retours sur le Coach",
"subtitle": "Taux d'utilité par version de prompt, ton et niveau de détail du Coach sur les 30 derniers jours."
},
"feedback": {
"title": "Feedback",
"subtitle": "Triage user feedback, bug reports, and feature requests."
"title": "Retours",
"subtitle": "Triez les retours utilisateurs, les rapports de bug et les demandes de fonctionnalités."
},
"reminders": {
"title": "Reminders",
"subtitle": "Tune medication reminder thresholds and run a manual check."
"title": "Rappels",
"subtitle": "Réglez les seuils des rappels de médicaments et lancez une vérification manuelle."
},
"users": {
"title": "Users",
"subtitle": "Manage user accounts, roles, and active sessions.",
"title": "Utilisateurs",
"subtitle": "Gérez les comptes utilisateurs, les rôles et les sessions actives.",
"filter": {
"all": "Tout",
"admin": "Admins",
"user": "Users"
"admin": "Administrateurs",
"user": "Utilisateurs"
},
"forceLogout": "Force logout",
"forceLogoutConfirmTitle": "Force logout {name}?",
"forceLogoutConfirmBody": "All active sessions for this user will be revoked. They will need to sign in again on every device.",
"forceLogoutSuccess": "Logged {name} out of {count} session(s)",
"forceLogoutFailed": "Failed to force logout",
"cannotLogoutSelf": "Cannot force-logout yourself",
"emptyTitle": "No users in this view",
"emptyDescription": "There are no users matching the current filter.",
"emptyResetFilter": "Show all users"
"forceLogout": "Forcer la déconnexion",
"forceLogoutConfirmTitle": "Forcer la déconnexion de {name} ?",
"forceLogoutConfirmBody": "Toutes les sessions actives de cet utilisateur seront révoquées. Il devra se reconnecter sur chaque appareil.",
"forceLogoutSuccess": "{name} déconnecté de {count} session(s)",
"forceLogoutFailed": "Échec de la déconnexion forcée",
"cannotLogoutSelf": "Impossible de forcer votre propre déconnexion",
"emptyTitle": "Aucun utilisateur dans cette vue",
"emptyDescription": "Aucun utilisateur ne correspond au filtre actuel.",
"emptyResetFilter": "Afficher tous les utilisateurs"
},
"api-tokens": {
"title": "API Tokens",
"subtitle": "Active bearer tokens issued to native clients and integrations."
"title": "Jetons d'API",
"subtitle": "Jetons bearer actifs émis aux clients natifs et aux intégrations."
},
"login-overview": {
"title": "Login Overview",
"subtitle": "Audit trail of authentication and admin events."
"title": "Aperçu des connexions",
"subtitle": "Journal d'audit des événements d'authentification et d'administration."
},
"auditLog": {
"filterActor": "Actor (user id or username)",
"filterActor": "Acteur (ID utilisateur ou nom d'utilisateur)",
"filterAction": "Action",
"filterActionAll": "All actions",
"filterTarget": "Target (id or path)",
"filterDate": "Date range",
"range24h": "Last 24 hours",
"filterActionAll": "Toutes les actions",
"filterTarget": "Cible (ID ou chemin)",
"filterDate": "Plage de dates",
"range24h": "Dernières 24 heures",
"range7d": "7 derniers jours",
"range30d": "30 derniers jours",
"rangeAll": "Toute la période",
"perPage": "Per page",
"prev": "Previous",
"perPage": "Par page",
"prev": "Précédent",
"next": "Suivant",
"pageOf": "Page {page} sur {total}",
"export": "Export CSV",
"empty": "No audit entries match the current filters."
"export": "Exporter en CSV",
"empty": "Aucune entrée d'audit ne correspond aux filtres actuels."
},
"app-logs": {
"title": "App Logs",
"subtitle": "Tail the most recent structured wide-events emitted by this process.",
"processNote": "Showing app-process logs only — worker-process logs go to Loki when that integration is configured. Buffer is volatile and capped at 500 entries.",
"filterTraceId": "Trace ID",
"filterAction": "Action contains…",
"filterLevel": "Level",
"levelAll": "All levels",
"filterRange": "Time window",
"range15m": "Last 15 minutes",
"range1h": "Last hour",
"range6h": "Last 6 hours",
"rangeAll": "Whole buffer",
"colLevel": "Level",
"colTimestamp": "Timestamp",
"title": "Journaux de l'app",
"subtitle": "Affichez les wide-events structurés les plus récents émis par ce processus.",
"processNote": "Seuls les journaux du processus de l'app sont affichés — ceux du processus worker vont vers Loki lorsque cette intégration est configurée. Le tampon est volatil et limité à 500 entrées.",
"filterTraceId": "ID de trace",
"filterAction": "L'action contient…",
"filterLevel": "Niveau",
"levelAll": "Tous les niveaux",
"filterRange": "Fenêtre temporelle",
"range15m": "15 dernières minutes",
"range1h": "Dernière heure",
"range6h": "6 dernières heures",
"rangeAll": "Tampon entier",
"colLevel": "Niveau",
"colTimestamp": "Horodatage",
"colAction": "Action",
"colDuration": "Duration",
"colDuration": "Durée",
"colTraceId": "Trace",
"showing": "Showing {count} of up to {bufferMax} buffered events",
"empty": "Buffer is empty",
"emptyDescription": "No events match the current filters yet. Hit refresh after triggering some traffic.",
"refresh": "Refresh",
"eventDetails": "Event details",
"closeDetails": "Close details"
"showing": "Affichage de {count} sur jusqu'à {bufferMax} événements en mémoire tampon",
"empty": "Le tampon est vide",
"emptyDescription": "Aucun événement ne correspond encore aux filtres actuels. Cliquez sur Actualiser après avoir généré du trafic.",
"refresh": "Actualiser",
"eventDetails": "Détails de l'événement",
"closeDetails": "Fermer les détails"
},
"backups": {
"title": "Backups",
"subtitle": "Weekly per-user data snapshots stored in PostgreSQL.",
"description": "Each user gets one rolling snapshot per backup type. Sizes show the encrypted blob — payloads are not downloadable from this page.",
"runNow": "Backup now",
"runEnqueued": "Backup job enqueued",
"runFailed": "Failed to enqueue backup",
"loading": "Loading backups...",
"loadError": "Failed to load backups.",
"emptyTitle": "No backups yet",
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
"colUser": "User",
"title": "Sauvegardes",
"subtitle": "Instantanés de données hebdomadaires par utilisateur stockés dans PostgreSQL.",
"description": "Chaque utilisateur dispose d'un instantané glissant par type de sauvegarde. Les tailles indiquent le blob chiffré — les contenus ne sont pas téléchargeables depuis cette page.",
"runNow": "Sauvegarder maintenant",
"runEnqueued": "Tâche de sauvegarde mise en file d'attente",
"runFailed": "Échec de la mise en file d'attente de la sauvegarde",
"loading": "Chargement des sauvegardes...",
"loadError": "Échec du chargement des sauvegardes.",
"emptyTitle": "Aucune sauvegarde pour l'instant",
"emptyDescription": "Les sauvegardes s'exécutent automatiquement chaque dimanche à 03:00 — ou lancez-en une maintenant pour créer le premier instantané.",
"colUser": "Utilisateur",
"colType": "Type",
"typeWeeklyAuto": "Weekly (auto)",
"typeManual": "Manual",
"colSize": "Size",
"colCreatedAt": "Last snapshot",
"typeWeeklyAuto": "Hebdomadaire (auto)",
"typeManual": "Manuelle",
"colSize": "Taille",
"colCreatedAt": "Dernier instantané",
"colActions": "Actions",
"retentionLabel": "Retention: {days} days",
"download": "Download",
"downloadAria": "Download backup for {username}",
"downloadFailed": "Download failed",
"downloadStarted": "Download started",
"uploadTitle": "Upload backup",
"uploadDescription": "Validate a backup file and store it as a manual snapshot. Restoring is a separate step.",
"uploadButton": "Upload file",
"uploadHelp": "JSON file matching the current backup schema. Max 10 MB.",
"uploadSuccess": "Backup uploaded ({count} records)",
"uploadFailed": "Upload failed",
"restore": "Restore",
"restoreAria": "Restore from backup for {username}",
"restoreTitle": "Restore from backup",
"restoreDescription": "This will replace ALL current data for {username} with the snapshot from {when}. Existing measurements, medications, intake events, mood entries, notification channels, push subscriptions and queued Telegram deletions will be deleted.",
"restorePromptLabel": "Type RESTORE to continue",
"restoreConfirm": "Restore now",
"restoreInProgress": "Restoring...",
"restoreSuccess": "Restore complete",
"restoreFailed": "Restore failed",
"retentionLabel": "Conservation : {days} jours",
"download": "Télécharger",
"downloadAria": "Télécharger la sauvegarde de {username}",
"downloadFailed": "Échec du téléchargement",
"downloadStarted": "Téléchargement démarré",
"uploadTitle": "Téléverser une sauvegarde",
"uploadDescription": "Validez un fichier de sauvegarde et stockez-le comme instantané manuel. La restauration est une étape distincte.",
"uploadButton": "Téléverser un fichier",
"uploadHelp": "Fichier JSON correspondant au schéma de sauvegarde actuel. Max 10 Mo.",
"uploadSuccess": "Sauvegarde téléversée ({count} enregistrements)",
"uploadFailed": "Échec du téléversement",
"restore": "Restaurer",
"restoreAria": "Restaurer à partir de la sauvegarde de {username}",
"restoreTitle": "Restaurer à partir d'une sauvegarde",
"restoreDescription": "Cette action remplacera TOUTES les données actuelles de {username} par l'instantané du {when}. Les mesures, médicaments, événements de prise, entrées d'humeur, canaux de notification, abonnements push et suppressions Telegram en file d'attente existants seront supprimés.",
"restorePromptLabel": "Tapez RESTORE pour continuer",
"restoreConfirm": "Restaurer maintenant",
"restoreInProgress": "Restauration en cours...",
"restoreSuccess": "Restauration terminée",
"restoreFailed": "Échec de la restauration",
"docsLink": "Documentation"
},
"danger-zone": {
"title": "Danger Zone",
"subtitle": "Destructive system-wide operations."
"title": "Zone de danger",
"subtitle": "Opérations destructrices à l'échelle du système."
},
"about": {
"title": "About",
"subtitle": "Version, license, source, and update check."
"title": "À propos",
"subtitle": "Version, licence, code source et vérification des mises à jour."
}
},
"carrier": "Opérateur",
"carrierUnknown": "Opérateur inconnu",
"carrierUnavailableGeoFallback": "{location} — carrier unavailable"
"carrierUnavailableGeoFallback": "{location} — opérateur indisponible"
},
"achievements": {
"title": "Réussites",
+302 -302
View File
@@ -3708,113 +3708,113 @@
},
"admin": {
"title": "Administration",
"subtitle": "System status, users, and settings",
"settingsSaveError": "Failed to save settings",
"systemStatus": "System Status",
"subtitle": "Stato del sistema, utenti e impostazioni",
"settingsSaveError": "Impossibile salvare le impostazioni",
"systemStatus": "Stato del sistema",
"database": "Database",
"databaseConnected": "Connected",
"databaseConnected": "Connesso",
"databaseError": "Errore",
"startedAt": "Started",
"users": "Users",
"measurementsCount": "Measurements",
"activeTokens": "Active API Tokens",
"activeSessions": "Active Sessions",
"loadingStatus": "Loading status...",
"systemStatusLoadError": "Failed to load system status.",
"startedAt": "Avviato",
"users": "Utenti",
"measurementsCount": "Misurazioni",
"activeTokens": "Token API attivi",
"activeSessions": "Sessioni attive",
"loadingStatus": "Caricamento stato...",
"systemStatusLoadError": "Impossibile caricare lo stato del sistema.",
"systemStatusRetry": "Riprova",
"adminSettingsLoadError": "Failed to load admin settings. Toggles below may not reflect the live state — refresh the page.",
"adminSettingsLoadError": "Impossibile caricare le impostazioni di amministrazione. Gli interruttori sottostanti potrebbero non riflettere lo stato attuale: ricarica la pagina.",
"hostMetrics": {
"title": "Host load",
"load1": "Load (1m)",
"memUsedPercent": "Memory",
"title": "Carico dell'host",
"load1": "Carico (1m)",
"memUsedPercent": "Memoria",
"diskBusyPercent": "Disk I/O",
"last2hours": "Last 2 hours",
"empty": "Sampling started — data appears in 1–2 minutes.",
"loadError": "Failed to load host metrics. Try refreshing the page."
"last2hours": "Ultime 2 ore",
"empty": "Campionamento avviato: i dati compaiono tra 1–2 minuti.",
"loadError": "Impossibile caricare le metriche dell'host. Prova a ricaricare la pagina."
},
"aiQuality": {
"title": "Insights Quality",
"loading": "Loading feedback summary...",
"loadError": "Failed to load Insights quality summary. Try refreshing the page.",
"empty": "No feedback yet. The aggregator runs daily at 04:00 — once users start rating recommendations, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colSeverity": "Severity",
"colMetric": "Metric",
"title": "Qualità delle analisi",
"loading": "Caricamento riepilogo feedback...",
"loadError": "Impossibile caricare il riepilogo sulla qualità delle analisi. Prova a ricaricare la pagina.",
"empty": "Ancora nessun feedback. L'aggregatore viene eseguito ogni giorno alle 04:00: non appena gli utenti valutano i consigli, qui compaiono i tassi di utilità.",
"windowLabel": "Ultimi {days} giorni",
"generatedAtLabel": "Generato",
"colSeverity": "Gravità",
"colMetric": "Metrica",
"colProvider": "Provider",
"colPromptVersion": "Prompt",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"colHelpfulRate": "Helpful rate"
"colHelpful": "Utile",
"colNotHelpful": "Non utile",
"colHelpfulRate": "Tasso di utilità"
},
"coachFeedback": {
"title": "Coach Feedback",
"loading": "Loading Coach feedback summary...",
"loadError": "Failed to load Coach feedback summary. Try refreshing the page.",
"empty": "No Coach feedback yet. The aggregator runs daily at 04:00 — once users rate Coach replies, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colPromptVersion": "Prompt version",
"colTone": "Tone",
"colVerbosity": "Verbosity",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"title": "Feedback del Coach",
"loading": "Caricamento riepilogo feedback del Coach...",
"loadError": "Impossibile caricare il riepilogo dei feedback del Coach. Prova a ricaricare la pagina.",
"empty": "Ancora nessun feedback sul Coach. L'aggregatore viene eseguito ogni giorno alle 04:00: non appena gli utenti valutano le risposte del Coach, qui compaiono i tassi di utilità.",
"windowLabel": "Ultimi {days} giorni",
"generatedAtLabel": "Generato",
"colPromptVersion": "Versione del prompt",
"colTone": "Tono",
"colVerbosity": "Livello di dettaglio",
"colHelpful": "Utile",
"colNotHelpful": "Non utile",
"colN": "n",
"colHelpfulRate": "Helpful rate"
"colHelpfulRate": "Tasso di utilità"
},
"workerStatus": "Job Worker",
"workerRunning": "Running",
"workerStopped": "Stopped",
"lastReminderCheck": "Last Reminder Check",
"appSettings": "Application Settings",
"registrationEnabled": "Allow registration",
"registrationEnabledDescription": "When disabled, new users cannot register.",
"defaultLanguage": "Default language",
"defaultLanguageDescription": "Used for new users and as fallback.",
"defaultUserTimezone": "Default timezone for new accounts",
"defaultUserTimezoneDescription": "Used for new accounts that don't carry a browser-detected zone. Does not affect existing users.",
"defaultUserTimezoneFallback": "Europe/Berlin (default)",
"servicesGlobal": "Services (global)",
"servicesGlobalDescription": "Disabled services are not available to any user.",
"telegramGlobal": "Allow Telegram notifications.",
"ntfyGlobal": "Allow ntfy notifications.",
"webPushGlobal": "Allow browser push notifications.",
"moodLogGlobal": "Allow mood-log reminders.",
"workerStatus": "Worker dei processi",
"workerRunning": "In esecuzione",
"workerStopped": "Arrestato",
"lastReminderCheck": "Ultimo controllo dei promemoria",
"appSettings": "Impostazioni dell'applicazione",
"registrationEnabled": "Consentire la registrazione",
"registrationEnabledDescription": "Se disattivato, i nuovi utenti non possono registrarsi.",
"defaultLanguage": "Lingua predefinita",
"defaultLanguageDescription": "Usata per i nuovi utenti e come ripiego.",
"defaultUserTimezone": "Fuso orario predefinito per i nuovi account",
"defaultUserTimezoneDescription": "Usato per i nuovi account privi di un fuso rilevato dal browser. Non influisce sugli utenti esistenti.",
"defaultUserTimezoneFallback": "Europe/Berlin (predefinito)",
"servicesGlobal": "Servizi (globale)",
"servicesGlobalDescription": "I servizi disattivati non sono disponibili per alcun utente.",
"telegramGlobal": "Consentire le notifiche Telegram.",
"ntfyGlobal": "Consentire le notifiche ntfy.",
"webPushGlobal": "Consentire le notifiche push del browser.",
"moodLogGlobal": "Consentire i promemoria del diario dell'umore.",
"integrationWebPush": "Web Push",
"integrationBugReport": "Bug Report",
"integrationBugReport": "Segnalazione di bug",
"offlineGeoLabel": "Dati geografici",
"offlineGeoEnabled": "Offline (GeoLite2)",
"offlineGeoFallback": "Fallback (ipwho.is) — imposta MAXMIND_LICENSE_KEY in CI",
"apiGlobal": "Allow API endpoints and API tokens.",
"apiGlobal": "Consentire endpoint API e token API.",
"umamiTitle": "Umami",
"umamiDescription": "Web analytics with Umami",
"umamiDescription": "Analisi web con Umami",
"glitchtipTitle": "GlitchTip",
"glitchtipDescription": "Error tracking with GlitchTip",
"glitchtipDescription": "Tracciamento degli errori con GlitchTip",
"webPushVapidTitle": "Web Push VAPID",
"umamiEnabled": "Enable Umami tracking.",
"umamiScriptUrl": "Umami script URL",
"umamiEnabled": "Abilitare il tracciamento Umami.",
"umamiScriptUrl": "URL dello script Umami",
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
"umamiWebsiteId": "Umami website ID",
"umamiWebsiteId": "ID del sito web Umami",
"umamiWebsiteIdPlaceholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"glitchtipEnabled": "Enable GlitchTip error tracking.",
"glitchtipEnabled": "Abilitare il tracciamento degli errori GlitchTip.",
"glitchtipDsn": "GlitchTip DSN",
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
"glitchtipEnvironment": "GlitchTip environment",
"glitchtipEnvironment": "Ambiente GlitchTip",
"glitchtipEnvironmentPlaceholder": "production",
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
"webPushVapidPublicKey": "VAPID public key",
"webPushVapidDescription": "Configura qui le chiavi VAPID e il subject affinché il push del browser funzioni senza variabili d'ambiente.",
"webPushVapidPublicKey": "Chiave pubblica VAPID",
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
"webPushVapidPrivateKey": "VAPID private key",
"webPushVapidPrivateKeyPlaceholder": "Optional: enter a new private key",
"webPushVapidSubject": "VAPID subject",
"webPushVapidPrivateKey": "Chiave privata VAPID",
"webPushVapidPrivateKeyPlaceholder": "Facoltativo: inserisci una nuova chiave privata",
"webPushVapidSubject": "Subject VAPID",
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
"configured": "Configured",
"monitoringTestSuccess": "Test event sent",
"monitoringTestFailed": "Monitoring test failed",
"bugReportGithub": "Bug report (GitHub Issues)",
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
"bugReportEnabledLabel": "Bug reports enabled",
"bugReportEnabledDescription": "When off, the in-app report button hides — token and repository stay configured.",
"configured": "Configurato",
"monitoringTestSuccess": "Evento di prova inviato",
"monitoringTestFailed": "Test di monitoraggio non riuscito",
"bugReportGithub": "Segnalazione di bug (GitHub Issues)",
"bugReportGithubDescription": "Configura il token delle issue di GitHub e il repository per le segnalazioni di bug in arrivo.",
"bugReportEnabledLabel": "Segnalazioni di bug attive",
"bugReportEnabledDescription": "Se disattivato, il pulsante di segnalazione nell'app viene nascosto: token e repository restano configurati.",
"assistant": {
"title": "Superfici dell'assistente",
"description": "Ogni interruttore nasconde una superficie guidata dal modello in tutta l'app senza rimuovere la configurazione del provider. Il master forza ogni opzione secondaria su off.",
@@ -3845,322 +3845,322 @@
},
"bugReportRepo": "Repository",
"bugReportRepoPlaceholder": "owner/repo",
"bugReportToken": "Issue token",
"bugReportToken": "Token delle issue",
"bugReportTokenPlaceholder": "ghp_...",
"userManagement": "User Management",
"userManagement": "Gestione utenti",
"userName": "Nome",
"userEmail": "E-mail",
"userRole": "Role",
"userRole": "Ruolo",
"userPasskeys": "Passkeys",
"userCreated": "Created",
"userCreated": "Creato",
"userActions": "Azioni",
"editUser": "Edit user",
"editUserTitle": "Edit user: {name}",
"demoteToUser": "Demote to user",
"promoteToAdmin": "Promote to admin",
"toUser": "Make user",
"toAdmin": "Make admin",
"ownRoleUnchangeable": "Cannot change own role",
"resetPassword": "Reset password",
"resetPasswordTitle": "Reset password: {name}",
"newPassword": "New password",
"newPasswordPlaceholder": "At least 12 characters",
"passwordReset": "Password has been reset",
"editUser": "Modifica utente",
"editUserTitle": "Modifica utente: {name}",
"demoteToUser": "Retrocedi a utente",
"promoteToAdmin": "Promuovi ad amministratore",
"toUser": "Imposta come utente",
"toAdmin": "Imposta come amministratore",
"ownRoleUnchangeable": "Impossibile cambiare il proprio ruolo",
"resetPassword": "Reimposta password",
"resetPasswordTitle": "Reimposta password: {name}",
"newPassword": "Nuova password",
"newPasswordPlaceholder": "Almeno 12 caratteri",
"passwordReset": "La password è stata reimpostata",
"reset": "Reimposta",
"loadingUsers": "Loading users...",
"apiTokens": "API Tokens",
"tokenUser": "User",
"loadingUsers": "Caricamento utenti...",
"apiTokens": "Token API",
"tokenUser": "Utente",
"tokenName": "Nome",
"tokenPermissions": "Permissions",
"tokenPermissions": "Autorizzazioni",
"tokenPermissionAll": "Tutto",
"tokenPermissionAllTooltip": "Wildcard permission — this token can call every API route.",
"tokenPermissionAllTooltip": "Autorizzazione jolly: questo token può chiamare qualsiasi route dell'API.",
"tokenStatus": "Stato",
"tokenLastUsed": "Last used",
"tokenCreated": "Created",
"tokenNeverUsed": "Never",
"tokensEmptyTitle": "No API tokens yet",
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
"loginOverview": "Login Overview",
"allAuthEvents": "All auth events",
"failedOnly": "Failed only",
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
"loginEmptyFailedTitle": "No failed sign-in attempts",
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
"loginEmptyResetFilter": "Show all events",
"tokenLastUsed": "Ultimo utilizzo",
"tokenCreated": "Creato",
"tokenNeverUsed": "Mai",
"tokensEmptyTitle": "Ancora nessun token API",
"tokensEmptyDescription": "I token vengono emessi quando un client nativo accede o tramite Impostazioni → Account.",
"loginOverview": "Panoramica degli accessi",
"allAuthEvents": "Tutti gli eventi di autenticazione",
"failedOnly": "Solo non riusciti",
"loginEmptyDescription": "Qui compariranno accessi, disconnessioni e modifiche delle passkey.",
"loginEmptyFailedTitle": "Nessun tentativo di accesso non riuscito",
"loginEmptyFailedDescription": "Questo è lo stato sicuro. Passa a tutti gli eventi per vedere gli accessi riusciti.",
"loginEmptyResetFilter": "Mostra tutti gli eventi",
"showingEntries": "Mostrando {count} di {total} voci di autenticazione",
"status": "Stato",
"action": "Action",
"action": "Azione",
"ip": "IP",
"location": "Location",
"location": "Posizione",
"timestamp": "Ora",
"provider": "Provider",
"providerPassword": "Password",
"providerPasskey": "Passkey",
"providerApiToken": "API token",
"providerApiToken": "Token API",
"providerWithings": "Withings",
"providerUnknown": "Sconosciuto",
"outcome": "Outcome",
"outcome": "Esito",
"outcomeSuccess": "Successo",
"outcomeFailed": "Failed",
"auditDetails": "Details",
"deleteAllData": "Delete all data globally",
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
"deleteAllConfirm": "Really delete all data?",
"deleteAllConfirmDescription": "This will permanently delete all measurements, medications, intake events, API tokens, Withings connections, open authentication challenges, notification channels (Telegram, ntfy, Web Push), push subscriptions, and queued Telegram message deletions for all users. User accounts, the audit log, and submitted feedback are preserved so the wipe itself remains traceable and bug reports stay triageable.",
"deleteButton": "Delete all data",
"finalDelete": "Delete permanently",
"outcomeFailed": "Non riuscito",
"auditDetails": "Dettagli",
"deleteAllData": "Elimina tutti i dati globalmente",
"deleteAllDescription": "Elimina tutti i dati di misurazioni, farmaci, integrazioni e log di tutti gli utenti. Gli account utente vengono conservati.",
"deleteAllConfirm": "Eliminare davvero tutti i dati?",
"deleteAllConfirmDescription": "Questa operazione eliminerà definitivamente tutte le misurazioni, i farmaci, gli eventi di assunzione, i token API, le connessioni Withings, le challenge di autenticazione aperte, i canali di notifica (Telegram, ntfy, Web Push), le sottoscrizioni push e le eliminazioni di messaggi Telegram in coda di tutti gli utenti. Gli account utente, il log di audit e i feedback inviati vengono conservati affinché la cancellazione resti tracciabile e le segnalazioni di bug restino gestibili.",
"deleteButton": "Elimina tutti i dati",
"finalDelete": "Elimina definitivamente",
"deletedResult": "Deleted: {measurements} measurements, {medications} Farmaci,{intakeEvents} intakes, {apiTokens} API tokens, {withingsConnections} Withings connections, {authChallenges} auth challenges, {notificationChannels} notification channels, {pushSubscriptions} push subscriptions, {telegramScheduledDeletions} queued Telegram deletions. Feedback rows preserved.",
"authRegister": "Registration",
"authRegister": "Registrazione",
"authLogin": "Accedi",
"authLoginPasskey": "Passkey login",
"authLoginPassword": "Password login",
"authLoginFailed": "Failed",
"authLoginPasskey": "Accesso con passkey",
"authLoginPassword": "Accesso con password",
"authLoginFailed": "Non riuscito",
"authLogout": "Disconnetti",
"authPasskeyRegister": "Passkey added",
"authPasskeyDelete": "Passkey deleted",
"authTokenAutoissueNative": "Native client token issued",
"authTokenRefresh": "Token refreshed",
"authTokenRevoke": "Token revoked",
"medicationReminders": "Medication Reminders",
"medicationRemindersDescription": "Thresholds for reminder badge color transitions on medication cards.",
"reminderLateMinutes": "Late threshold (minutes)",
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
"reminderMissedMinutes": "Missed threshold (minutes)",
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
"notificationTestSend": "Send test",
"notificationTestSuccess": "Test notification sent",
"notificationTestFailed": "Failed to send test notification",
"reminderCheckRun": "Run reminder check",
"reminderCheckSuccess": "Reminder check completed",
"reminderCheckFailed": "Failed to run reminder check",
"reminderCheckResults": "Results",
"reminderCheckNotifOn": "Notifications on",
"reminderCheckNotifOff": "Notifications off",
"reminderCheckEventsToday": "Events today",
"reminderCheckNotifSent": "Sent",
"authPasskeyRegister": "Passkey aggiunta",
"authPasskeyDelete": "Passkey eliminata",
"authTokenAutoissueNative": "Token client nativo emesso",
"authTokenRefresh": "Token rinnovato",
"authTokenRevoke": "Token revocato",
"medicationReminders": "Promemoria dei farmaci",
"medicationRemindersDescription": "Soglie per i cambi di colore dei badge di promemoria sulle schede dei farmaci.",
"reminderLateMinutes": "Soglia di ritardo (minuti)",
"reminderLateMinutesDescription": "Minuti dopo la fine della finestra prima che il badge passi da giallo ad arancione.",
"reminderMissedMinutes": "Soglia di mancata assunzione (minuti)",
"reminderMissedMinutesDescription": "Minuti dopo la fine della finestra prima che l'assunzione sia considerata mancata.",
"notificationTestSend": "Invia test",
"notificationTestSuccess": "Notifica di prova inviata",
"notificationTestFailed": "Impossibile inviare la notifica di prova",
"reminderCheckRun": "Esegui controllo dei promemoria",
"reminderCheckSuccess": "Controllo dei promemoria completato",
"reminderCheckFailed": "Impossibile eseguire il controllo dei promemoria",
"reminderCheckResults": "Risultati",
"reminderCheckNotifOn": "Notifiche attive",
"reminderCheckNotifOff": "Notifiche disattivate",
"reminderCheckEventsToday": "Eventi di oggi",
"reminderCheckNotifSent": "Inviate",
"feedback": {
"tabOpen": "Open",
"tabAcknowledged": "Acknowledged",
"tabResolved": "Resolved",
"tabArchived": "Archived",
"subject": "Subject",
"category": "Category",
"user": "User",
"createdAt": "Submitted",
"tabOpen": "Aperto",
"tabAcknowledged": "Preso in carico",
"tabResolved": "Risolto",
"tabArchived": "Archiviato",
"subject": "Oggetto",
"category": "Categoria",
"user": "Utente",
"createdAt": "Inviato",
"actions": "Azioni",
"details": "Details",
"emptyTitle": "All caught up",
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
"loading": "Loading feedback...",
"anonymous": "anonymous",
"details": "Dettagli",
"emptyTitle": "Tutto in ordine",
"emptyDescription": "Nessun feedback degli utenti in questo stato. Bug, domande e richieste di funzionalità inviati compariranno qui.",
"loading": "Caricamento feedback...",
"anonymous": "anonimo",
"categoryBug": "Bug",
"categoryFeature": "Feature",
"categoryQuestion": "Question",
"categoryOther": "Other",
"metadataHeading": "Metadata",
"categoryFeature": "Funzionalità",
"categoryQuestion": "Domanda",
"categoryOther": "Altro",
"metadataHeading": "Metadati",
"metaUrl": "URL",
"metaLocale": "Locale",
"metaLocale": "Lingua",
"metaUserAgent": "User agent",
"metaAppVersion": "App version",
"metaAppVersion": "Versione dell'app",
"screenshotHeading": "Screenshot",
"adminNote": "Admin note",
"adminNotePlaceholder": "Internal note (not visible to user)",
"saveNote": "Save note",
"noteSaved": "Note saved",
"actionAcknowledge": "Acknowledge",
"actionResolve": "Resolve",
"actionArchive": "Archive",
"actionPublishGithub": "Publish to GitHub",
"publishedToGithub": "Published to GitHub",
"viewIssue": "View issue",
"publishSuccess": "Issue created",
"publishFailed": "GitHub publish failed",
"updateFailed": "Update failed",
"archiveConfirm": "Archive this feedback entry?",
"submittedBy": "Submitted by"
"adminNote": "Nota amministrativa",
"adminNotePlaceholder": "Nota interna (non visibile all'utente)",
"saveNote": "Salva nota",
"noteSaved": "Nota salvata",
"actionAcknowledge": "Prendi in carico",
"actionResolve": "Risolvi",
"actionArchive": "Archivia",
"actionPublishGithub": "Pubblica su GitHub",
"publishedToGithub": "Pubblicato su GitHub",
"viewIssue": "Vedi issue",
"publishSuccess": "Issue creata",
"publishFailed": "Pubblicazione su GitHub non riuscita",
"updateFailed": "Aggiornamento non riuscito",
"archiveConfirm": "Archiviare questa voce di feedback?",
"submittedBy": "Inviato da"
},
"shell": {
"overview": "Panoramica",
"sectionsNav": "Admin sections"
"sectionsNav": "Sezioni di amministrazione"
},
"overview": {
"welcomeTitle": "Benvenuto,{name}",
"welcomeSubtitle": "You are signed in as administrator. Pick a section to manage HealthLog.",
"snapshotTitle": "System snapshot",
"snapshotVersion": "Version",
"welcomeSubtitle": "Hai effettuato l'accesso come amministratore. Scegli una sezione per gestire HealthLog.",
"snapshotTitle": "Istantanea del sistema",
"snapshotVersion": "Versione",
"snapshotDatabase": "Database",
"snapshotWorker": "Worker",
"snapshotStarted": "Started",
"snapshotStarted": "Avviato",
"snapshotBuildSha": "Build SHA",
"snapshotBuiltAt": "Built at",
"snapshotBuiltAt": "Compilato il",
"snapshotOfflineGeo": "Dati geografici",
"snapshotOfflineGeoOn": "Offline (GeoLite2)",
"snapshotOfflineGeoOff": "Fallback (ipwho.is)",
"snapshotLoadError": "Failed to load system snapshot.",
"snapshotLoading": "Loading snapshot...",
"auditTitle": "Recent activity",
"auditEmpty": "No recent audit entries.",
"auditLoadError": "Failed to load recent activity.",
"auditLoading": "Loading activity...",
"auditViewAll": "View all"
"snapshotLoadError": "Impossibile caricare l'istantanea del sistema.",
"snapshotLoading": "Caricamento istantanea...",
"auditTitle": "Attività recente",
"auditEmpty": "Nessuna voce di audit recente.",
"auditLoadError": "Impossibile caricare l'attività recente.",
"auditLoading": "Caricamento attività...",
"auditViewAll": "Mostra tutto"
},
"section": {
"system-status": {
"title": "System Status",
"subtitle": "Worker, database, and integration health at a glance."
"title": "Stato del sistema",
"subtitle": "Stato di worker, database e integrazioni a colpo d'occhio."
},
"general": {
"title": "General",
"subtitle": "Registration, default language, and other app-wide toggles."
"title": "Generale",
"subtitle": "Registrazione, lingua predefinita e altri interruttori validi per l'intera app."
},
"services": {
"title": "Services",
"subtitle": "Enable or disable notification channels and integrations system-wide."
"title": "Servizi",
"subtitle": "Abilita o disabilita i canali di notifica e le integrazioni a livello di sistema."
},
"integrations": {
"title": "Integrazioni",
"subtitle": "Configure Umami, GlitchTip, Web Push, and bug reports."
"subtitle": "Configura Umami, GlitchTip, Web Push e le segnalazioni di bug."
},
"ai-quality": {
"title": "Insights Quality",
"subtitle": "Helpfulness scores grouped by severity and provider, from the last 30 days of user feedback."
"title": "Qualità delle analisi",
"subtitle": "Punteggi di utilità raggruppati per gravità e provider, dagli ultimi 30 giorni di feedback degli utenti."
},
"assistant": {
"title": "Superfici dell'assistente",
"subtitle": "Attiva o disattiva ciascuna superficie guidata dal modello senza rimuovere la configurazione del provider."
},
"coach-feedback": {
"title": "Coach Feedback",
"subtitle": "Helpful-rate per Coach prompt version, tone, and verbosity from the last 30 days."
"title": "Feedback del Coach",
"subtitle": "Tasso di utilità per versione del prompt, tono e livello di dettaglio del Coach degli ultimi 30 giorni."
},
"feedback": {
"title": "Feedback",
"subtitle": "Triage user feedback, bug reports, and feature requests."
"subtitle": "Smista i feedback degli utenti, le segnalazioni di bug e le richieste di funzionalità."
},
"reminders": {
"title": "Reminders",
"subtitle": "Tune medication reminder thresholds and run a manual check."
"title": "Promemoria",
"subtitle": "Regola le soglie dei promemoria dei farmaci ed esegui un controllo manuale."
},
"users": {
"title": "Users",
"subtitle": "Manage user accounts, roles, and active sessions.",
"title": "Utenti",
"subtitle": "Gestisci gli account utente, i ruoli e le sessioni attive.",
"filter": {
"all": "Tutto",
"admin": "Admins",
"user": "Users"
"admin": "Amministratori",
"user": "Utenti"
},
"forceLogout": "Force logout",
"forceLogoutConfirmTitle": "Force logout {name}?",
"forceLogoutConfirmBody": "All active sessions for this user will be revoked. They will need to sign in again on every device.",
"forceLogoutSuccess": "Logged {name} out of {count} session(s)",
"forceLogoutFailed": "Failed to force logout",
"cannotLogoutSelf": "Cannot force-logout yourself",
"emptyTitle": "No users in this view",
"emptyDescription": "There are no users matching the current filter.",
"emptyResetFilter": "Show all users"
"forceLogout": "Forza la disconnessione",
"forceLogoutConfirmTitle": "Forzare la disconnessione di {name}?",
"forceLogoutConfirmBody": "Tutte le sessioni attive di questo utente verranno revocate. Dovrà accedere di nuovo su ogni dispositivo.",
"forceLogoutSuccess": "{name} disconnesso da {count} sessione/i",
"forceLogoutFailed": "Impossibile forzare la disconnessione",
"cannotLogoutSelf": "Non puoi forzare la tua disconnessione",
"emptyTitle": "Nessun utente in questa vista",
"emptyDescription": "Nessun utente corrisponde al filtro attuale.",
"emptyResetFilter": "Mostra tutti gli utenti"
},
"api-tokens": {
"title": "API Tokens",
"subtitle": "Active bearer tokens issued to native clients and integrations."
"title": "Token API",
"subtitle": "Token bearer attivi emessi a client nativi e integrazioni."
},
"login-overview": {
"title": "Login Overview",
"subtitle": "Audit trail of authentication and admin events."
"title": "Panoramica degli accessi",
"subtitle": "Traccia di audit degli eventi di autenticazione e di amministrazione."
},
"auditLog": {
"filterActor": "Actor (user id or username)",
"filterAction": "Action",
"filterActionAll": "All actions",
"filterTarget": "Target (id or path)",
"filterDate": "Date range",
"range24h": "Last 24 hours",
"filterActor": "Attore (ID utente o nome utente)",
"filterAction": "Azione",
"filterActionAll": "Tutte le azioni",
"filterTarget": "Destinazione (ID o percorso)",
"filterDate": "Intervallo di date",
"range24h": "Ultime 24 ore",
"range7d": "Ultimi 7 giorni",
"range30d": "Ultimi 30 giorni",
"rangeAll": "Tutto il tempo",
"perPage": "Per page",
"prev": "Previous",
"perPage": "Per pagina",
"prev": "Precedente",
"next": "Avanti",
"pageOf": "Pagina {page} di {total}",
"export": "Export CSV",
"empty": "No audit entries match the current filters."
"export": "Esporta CSV",
"empty": "Nessuna voce di audit corrisponde ai filtri attuali."
},
"app-logs": {
"title": "App Logs",
"subtitle": "Tail the most recent structured wide-events emitted by this process.",
"processNote": "Showing app-process logs only — worker-process logs go to Loki when that integration is configured. Buffer is volatile and capped at 500 entries.",
"filterTraceId": "Trace ID",
"filterAction": "Action contains…",
"filterLevel": "Level",
"levelAll": "All levels",
"filterRange": "Time window",
"range15m": "Last 15 minutes",
"range1h": "Last hour",
"range6h": "Last 6 hours",
"rangeAll": "Whole buffer",
"colLevel": "Level",
"colTimestamp": "Timestamp",
"colAction": "Action",
"colDuration": "Duration",
"title": "Log dell'app",
"subtitle": "Visualizza i wide-event strutturati più recenti emessi da questo processo.",
"processNote": "Vengono mostrati solo i log del processo dell'app: i log del processo worker vanno su Loki quando l'integrazione è configurata. Il buffer è volatile e limitato a 500 voci.",
"filterTraceId": "ID traccia",
"filterAction": "L'azione contiene…",
"filterLevel": "Livello",
"levelAll": "Tutti i livelli",
"filterRange": "Finestra temporale",
"range15m": "Ultimi 15 minuti",
"range1h": "Ultima ora",
"range6h": "Ultime 6 ore",
"rangeAll": "Intero buffer",
"colLevel": "Livello",
"colTimestamp": "Marca temporale",
"colAction": "Azione",
"colDuration": "Durata",
"colTraceId": "Trace",
"showing": "Showing {count} of up to {bufferMax} buffered events",
"empty": "Buffer is empty",
"emptyDescription": "No events match the current filters yet. Hit refresh after triggering some traffic.",
"refresh": "Refresh",
"eventDetails": "Event details",
"closeDetails": "Close details"
"showing": "Visualizzati {count} di un massimo di {bufferMax} eventi nel buffer",
"empty": "Il buffer è vuoto",
"emptyDescription": "Nessun evento corrisponde ancora ai filtri attuali. Premi Aggiorna dopo aver generato un po' di traffico.",
"refresh": "Aggiorna",
"eventDetails": "Dettagli dell'evento",
"closeDetails": "Chiudi dettagli"
},
"backups": {
"title": "Backups",
"subtitle": "Weekly per-user data snapshots stored in PostgreSQL.",
"description": "Each user gets one rolling snapshot per backup type. Sizes show the encrypted blob — payloads are not downloadable from this page.",
"runNow": "Backup now",
"runEnqueued": "Backup job enqueued",
"runFailed": "Failed to enqueue backup",
"loading": "Loading backups...",
"loadError": "Failed to load backups.",
"emptyTitle": "No backups yet",
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
"colUser": "User",
"title": "Backup",
"subtitle": "Istantanee settimanali dei dati per utente archiviate in PostgreSQL.",
"description": "Ogni utente ha un'istantanea a rotazione per tipo di backup. Le dimensioni mostrano il blob cifrato: i contenuti non sono scaricabili da questa pagina.",
"runNow": "Esegui backup ora",
"runEnqueued": "Processo di backup messo in coda",
"runFailed": "Impossibile mettere in coda il backup",
"loading": "Caricamento backup...",
"loadError": "Impossibile caricare i backup.",
"emptyTitle": "Ancora nessun backup",
"emptyDescription": "I backup vengono eseguiti automaticamente ogni domenica alle 03:00, oppure avviane uno ora per creare la prima istantanea.",
"colUser": "Utente",
"colType": "Tipo",
"typeWeeklyAuto": "Weekly (auto)",
"typeManual": "Manual",
"colSize": "Size",
"colCreatedAt": "Last snapshot",
"typeWeeklyAuto": "Settimanale (auto)",
"typeManual": "Manuale",
"colSize": "Dimensione",
"colCreatedAt": "Ultima istantanea",
"colActions": "Azioni",
"retentionLabel": "Retention: {days} days",
"download": "Download",
"downloadAria": "Download backup for {username}",
"downloadFailed": "Download failed",
"downloadStarted": "Download started",
"uploadTitle": "Upload backup",
"uploadDescription": "Validate a backup file and store it as a manual snapshot. Restoring is a separate step.",
"uploadButton": "Upload file",
"uploadHelp": "JSON file matching the current backup schema. Max 10 MB.",
"uploadSuccess": "Backup uploaded ({count} records)",
"uploadFailed": "Upload failed",
"restore": "Restore",
"restoreAria": "Restore from backup for {username}",
"restoreTitle": "Restore from backup",
"restoreDescription": "This will replace ALL current data for {username} with the snapshot from {when}. Existing measurements, medications, intake events, mood entries, notification channels, push subscriptions and queued Telegram deletions will be deleted.",
"restorePromptLabel": "Type RESTORE to continue",
"restoreConfirm": "Restore now",
"restoreInProgress": "Restoring...",
"restoreSuccess": "Restore complete",
"restoreFailed": "Restore failed",
"docsLink": "Documentation"
"retentionLabel": "Conservazione: {days} giorni",
"download": "Scarica",
"downloadAria": "Scarica il backup di {username}",
"downloadFailed": "Download non riuscito",
"downloadStarted": "Download avviato",
"uploadTitle": "Carica backup",
"uploadDescription": "Convalida un file di backup e archivialo come istantanea manuale. Il ripristino è un passaggio separato.",
"uploadButton": "Carica file",
"uploadHelp": "File JSON conforme allo schema di backup attuale. Max 10 MB.",
"uploadSuccess": "Backup caricato ({count} record)",
"uploadFailed": "Caricamento non riuscito",
"restore": "Ripristina",
"restoreAria": "Ripristina dal backup di {username}",
"restoreTitle": "Ripristina dal backup",
"restoreDescription": "Questa operazione sostituirà TUTTI i dati attuali di {username} con l'istantanea del {when}. Misurazioni, farmaci, eventi di assunzione, voci dell'umore, canali di notifica, sottoscrizioni push ed eliminazioni Telegram in coda esistenti verranno eliminati.",
"restorePromptLabel": "Digita RESTORE per continuare",
"restoreConfirm": "Ripristina ora",
"restoreInProgress": "Ripristino in corso...",
"restoreSuccess": "Ripristino completato",
"restoreFailed": "Ripristino non riuscito",
"docsLink": "Documentazione"
},
"danger-zone": {
"title": "Danger Zone",
"subtitle": "Destructive system-wide operations."
"title": "Zona pericolosa",
"subtitle": "Operazioni distruttive a livello di sistema."
},
"about": {
"title": "About",
"subtitle": "Version, license, source, and update check."
"title": "Informazioni",
"subtitle": "Versione, licenza, codice sorgente e verifica degli aggiornamenti."
}
},
"carrier": "Operatore",
"carrierUnknown": "Operatore sconosciuto",
"carrierUnavailableGeoFallback": "{location} — carrier unavailable"
"carrierUnavailableGeoFallback": "{location} — operatore non disponibile"
},
"achievements": {
"title": "Obiettivi",
+314 -314
View File
@@ -2213,7 +2213,7 @@
"elliptical": "Orbitrek",
"stairClimber": "Stepper",
"yoga": "Joga",
"mindAndBody": "Mind and body",
"mindAndBody": "Umysł i ciało",
"strength": "Siła",
"hiit": "HIIT",
"dance": "Taniec",
@@ -3707,114 +3707,114 @@
}
},
"admin": {
"title": "Administration",
"subtitle": "System status, users, and settings",
"settingsSaveError": "Failed to save settings",
"systemStatus": "System Status",
"database": "Database",
"databaseConnected": "Connected",
"title": "Administracja",
"subtitle": "Stan systemu, użytkownicy i ustawienia",
"settingsSaveError": "Nie udało się zapisać ustawień",
"systemStatus": "Stan systemu",
"database": "Baza danych",
"databaseConnected": "Połączona",
"databaseError": "Błąd",
"startedAt": "Started",
"users": "Users",
"measurementsCount": "Measurements",
"activeTokens": "Active API Tokens",
"activeSessions": "Active Sessions",
"loadingStatus": "Loading status...",
"systemStatusLoadError": "Failed to load system status.",
"startedAt": "Uruchomiono",
"users": "Użytkownicy",
"measurementsCount": "Pomiary",
"activeTokens": "Aktywne tokeny API",
"activeSessions": "Aktywne sesje",
"loadingStatus": "Ładowanie stanu...",
"systemStatusLoadError": "Nie udało się załadować stanu systemu.",
"systemStatusRetry": "Spróbuj ponownie",
"adminSettingsLoadError": "Failed to load admin settings. Toggles below may not reflect the live state — refresh the page.",
"adminSettingsLoadError": "Nie udało się załadować ustawień administracyjnych. Przełączniki poniżej mogą nie odzwierciedlać bieżącego stanu — odśwież stronę.",
"hostMetrics": {
"title": "Host load",
"load1": "Load (1m)",
"memUsedPercent": "Memory",
"title": "Obciążenie hosta",
"load1": "Obciążenie (1m)",
"memUsedPercent": "Pamięć",
"diskBusyPercent": "Disk I/O",
"last2hours": "Last 2 hours",
"empty": "Sampling started — data appears in 1–2 minutes.",
"loadError": "Failed to load host metrics. Try refreshing the page."
"last2hours": "Ostatnie 2 godziny",
"empty": "Rozpoczęto próbkowanie — dane pojawią się w ciągu 1–2 minut.",
"loadError": "Nie udało się załadować metryk hosta. Spróbuj odświeżyć stronę."
},
"aiQuality": {
"title": "Insights Quality",
"loading": "Loading feedback summary...",
"loadError": "Failed to load Insights quality summary. Try refreshing the page.",
"empty": "No feedback yet. The aggregator runs daily at 04:00 — once users start rating recommendations, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colSeverity": "Severity",
"colMetric": "Metric",
"colProvider": "Provider",
"title": "Jakość analiz",
"loading": "Ładowanie podsumowania opinii...",
"loadError": "Nie udało się załadować podsumowania jakości analiz. Spróbuj odświeżyć stronę.",
"empty": "Brak opinii. Agregator uruchamia się codziennie o 04:00 — gdy użytkownicy zaczną oceniać rekomendacje, tutaj pojawią się wskaźniki przydatności.",
"windowLabel": "Ostatnie {days} dni",
"generatedAtLabel": "Wygenerowano",
"colSeverity": "Ważność",
"colMetric": "Metryka",
"colProvider": "Dostawca",
"colPromptVersion": "Prompt",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"colHelpfulRate": "Helpful rate"
"colHelpful": "Pomocne",
"colNotHelpful": "Niepomocne",
"colHelpfulRate": "Wskaźnik przydatności"
},
"coachFeedback": {
"title": "Coach Feedback",
"loading": "Loading Coach feedback summary...",
"loadError": "Failed to load Coach feedback summary. Try refreshing the page.",
"empty": "No Coach feedback yet. The aggregator runs daily at 04:00 — once users rate Coach replies, helpful-rate bands appear here.",
"windowLabel": "Last {days} days",
"generatedAtLabel": "Generated",
"colPromptVersion": "Prompt version",
"colTone": "Tone",
"colVerbosity": "Verbosity",
"colHelpful": "Helpful",
"colNotHelpful": "Not helpful",
"title": "Opinie o Coachu",
"loading": "Ładowanie podsumowania opinii o Coachu...",
"loadError": "Nie udało się załadować podsumowania opinii o Coachu. Spróbuj odświeżyć stronę.",
"empty": "Brak opinii o Coachu. Agregator uruchamia się codziennie o 04:00 — gdy użytkownicy ocenią odpowiedzi Coacha, tutaj pojawią się wskaźniki przydatności.",
"windowLabel": "Ostatnie {days} dni",
"generatedAtLabel": "Wygenerowano",
"colPromptVersion": "Wersja promptu",
"colTone": "Ton",
"colVerbosity": "Szczegółowość",
"colHelpful": "Pomocne",
"colNotHelpful": "Niepomocne",
"colN": "n",
"colHelpfulRate": "Helpful rate"
"colHelpfulRate": "Wskaźnik przydatności"
},
"workerStatus": "Job Worker",
"workerRunning": "Running",
"workerStopped": "Stopped",
"lastReminderCheck": "Last Reminder Check",
"appSettings": "Application Settings",
"registrationEnabled": "Allow registration",
"registrationEnabledDescription": "When disabled, new users cannot register.",
"defaultLanguage": "Default language",
"defaultLanguageDescription": "Used for new users and as fallback.",
"defaultUserTimezone": "Default timezone for new accounts",
"defaultUserTimezoneDescription": "Used for new accounts that don't carry a browser-detected zone. Does not affect existing users.",
"defaultUserTimezoneFallback": "Europe/Berlin (default)",
"servicesGlobal": "Services (global)",
"servicesGlobalDescription": "Disabled services are not available to any user.",
"telegramGlobal": "Allow Telegram notifications.",
"ntfyGlobal": "Allow ntfy notifications.",
"webPushGlobal": "Allow browser push notifications.",
"moodLogGlobal": "Allow mood-log reminders.",
"workerStatus": "Worker zadań",
"workerRunning": "Działa",
"workerStopped": "Zatrzymano",
"lastReminderCheck": "Ostatnie sprawdzenie przypomnień",
"appSettings": "Ustawienia aplikacji",
"registrationEnabled": "Zezwól na rejestrację",
"registrationEnabledDescription": "Gdy wyłączone, nowi użytkownicy nie mogą się zarejestrować.",
"defaultLanguage": "Domyślny język",
"defaultLanguageDescription": "Używany dla nowych użytkowników i jako rozwiązanie zapasowe.",
"defaultUserTimezone": "Domyślna strefa czasowa dla nowych kont",
"defaultUserTimezoneDescription": "Używana dla nowych kont bez strefy wykrytej przez przeglądarkę. Nie wpływa na istniejących użytkowników.",
"defaultUserTimezoneFallback": "Europe/Berlin (domyślna)",
"servicesGlobal": "Usługi (globalne)",
"servicesGlobalDescription": "Wyłączone usługi nie są dostępne dla żadnego użytkownika.",
"telegramGlobal": "Zezwól na powiadomienia Telegram.",
"ntfyGlobal": "Zezwól na powiadomienia ntfy.",
"webPushGlobal": "Zezwól na powiadomienia push przeglądarki.",
"moodLogGlobal": "Zezwól na przypomnienia dziennika nastroju.",
"integrationWebPush": "Web Push",
"integrationBugReport": "Bug Report",
"integrationBugReport": "Zgłoszenie błędu",
"offlineGeoLabel": "Dane geograficzne",
"offlineGeoEnabled": "Offline (GeoLite2)",
"offlineGeoFallback": "Awaryjne (ipwho.is) — ustaw MAXMIND_LICENSE_KEY w CI",
"apiGlobal": "Allow API endpoints and API tokens.",
"apiGlobal": "Zezwól na punkty końcowe API i tokeny API.",
"umamiTitle": "Umami",
"umamiDescription": "Web analytics with Umami",
"umamiDescription": "Analityka internetowa z Umami",
"glitchtipTitle": "GlitchTip",
"glitchtipDescription": "Error tracking with GlitchTip",
"glitchtipDescription": "Śledzenie błędów z GlitchTip",
"webPushVapidTitle": "Web Push VAPID",
"umamiEnabled": "Enable Umami tracking.",
"umamiScriptUrl": "Umami script URL",
"umamiEnabled": "Włącz śledzenie Umami.",
"umamiScriptUrl": "Adres URL skryptu Umami",
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
"umamiWebsiteId": "Umami website ID",
"umamiWebsiteId": "Identyfikator witryny Umami",
"umamiWebsiteIdPlaceholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"glitchtipEnabled": "Enable GlitchTip error tracking.",
"glitchtipEnabled": "Włącz śledzenie błędów GlitchTip.",
"glitchtipDsn": "GlitchTip DSN",
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
"glitchtipEnvironment": "GlitchTip environment",
"glitchtipEnvironment": "Środowisko GlitchTip",
"glitchtipEnvironmentPlaceholder": "production",
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
"webPushVapidPublicKey": "VAPID public key",
"webPushVapidDescription": "Skonfiguruj tutaj klucze VAPID i subject, aby push przeglądarki działał bez zmiennych środowiskowych.",
"webPushVapidPublicKey": "Klucz publiczny VAPID",
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
"webPushVapidPrivateKey": "VAPID private key",
"webPushVapidPrivateKeyPlaceholder": "Optional: enter a new private key",
"webPushVapidSubject": "VAPID subject",
"webPushVapidPrivateKey": "Klucz prywatny VAPID",
"webPushVapidPrivateKeyPlaceholder": "Opcjonalnie: wprowadź nowy klucz prywatny",
"webPushVapidSubject": "Subject VAPID",
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
"configured": "Configured",
"monitoringTestSuccess": "Test event sent",
"monitoringTestFailed": "Monitoring test failed",
"bugReportGithub": "Bug report (GitHub Issues)",
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
"bugReportEnabledLabel": "Bug reports enabled",
"bugReportEnabledDescription": "When off, the in-app report button hides — token and repository stay configured.",
"configured": "Skonfigurowano",
"monitoringTestSuccess": "Wysłano zdarzenie testowe",
"monitoringTestFailed": "Test monitorowania nie powiódł się",
"bugReportGithub": "Zgłoszenie błędu (GitHub Issues)",
"bugReportGithubDescription": "Skonfiguruj token zgłoszeń GitHub i repozytorium dla przychodzących zgłoszeń błędów.",
"bugReportEnabledLabel": "Zgłaszanie błędów włączone",
"bugReportEnabledDescription": "Gdy wyłączone, przycisk zgłaszania w aplikacji jest ukryty — token i repozytorium pozostają skonfigurowane.",
"assistant": {
"title": "Powierzchnie asystenta",
"description": "Każdy przełącznik ukrywa powierzchnię opartą na modelu w całej aplikacji bez usuwania konfiguracji dostawcy. Główny wyłącznik wymusza wyłączenie każdej opcji podrzędnej.",
@@ -3843,324 +3843,324 @@
"description": "Ikona ? obok linii delty Health-Score. Cyfra delty pozostaje widoczna niezależnie."
}
},
"bugReportRepo": "Repository",
"bugReportRepo": "Repozytorium",
"bugReportRepoPlaceholder": "owner/repo",
"bugReportToken": "Issue token",
"bugReportToken": "Token zgłoszeń",
"bugReportTokenPlaceholder": "ghp_...",
"userManagement": "User Management",
"userManagement": "Zarządzanie użytkownikami",
"userName": "Nazwa",
"userEmail": "E-mail",
"userRole": "Role",
"userRole": "Rola",
"userPasskeys": "Passkeys",
"userCreated": "Created",
"userCreated": "Utworzono",
"userActions": "Akcje",
"editUser": "Edit user",
"editUserTitle": "Edit user: {name}",
"demoteToUser": "Demote to user",
"promoteToAdmin": "Promote to admin",
"toUser": "Make user",
"toAdmin": "Make admin",
"ownRoleUnchangeable": "Cannot change own role",
"resetPassword": "Reset password",
"resetPasswordTitle": "Reset password: {name}",
"newPassword": "New password",
"newPasswordPlaceholder": "At least 12 characters",
"passwordReset": "Password has been reset",
"editUser": "Edytuj użytkownika",
"editUserTitle": "Edytuj użytkownika: {name}",
"demoteToUser": "Obniż do użytkownika",
"promoteToAdmin": "Awansuj na administratora",
"toUser": "Ustaw jako użytkownika",
"toAdmin": "Ustaw jako administratora",
"ownRoleUnchangeable": "Nie można zmienić własnej roli",
"resetPassword": "Zresetuj hasło",
"resetPasswordTitle": "Zresetuj hasło: {name}",
"newPassword": "Nowe hasło",
"newPasswordPlaceholder": "Co najmniej 12 znaków",
"passwordReset": "Hasło zostało zresetowane",
"reset": "Resetuj",
"loadingUsers": "Loading users...",
"apiTokens": "API Tokens",
"tokenUser": "User",
"loadingUsers": "Ładowanie użytkowników...",
"apiTokens": "Tokeny API",
"tokenUser": "Użytkownik",
"tokenName": "Nazwa",
"tokenPermissions": "Permissions",
"tokenPermissions": "Uprawnienia",
"tokenPermissionAll": "Wszystko",
"tokenPermissionAllTooltip": "Wildcard permission — this token can call every API route.",
"tokenStatus": "Status",
"tokenLastUsed": "Last used",
"tokenCreated": "Created",
"tokenNeverUsed": "Never",
"tokensEmptyTitle": "No API tokens yet",
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
"loginOverview": "Login Overview",
"allAuthEvents": "All auth events",
"failedOnly": "Failed only",
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
"loginEmptyFailedTitle": "No failed sign-in attempts",
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
"loginEmptyResetFilter": "Show all events",
"tokenPermissionAllTooltip": "Uprawnienie wieloznaczne — ten token może wywołać każdą trasę API.",
"tokenStatus": "Stan",
"tokenLastUsed": "Ostatnio użyto",
"tokenCreated": "Utworzono",
"tokenNeverUsed": "Nigdy",
"tokensEmptyTitle": "Brak tokenów API",
"tokensEmptyDescription": "Tokeny są wydawane, gdy klient natywny się loguje, lub przez Ustawienia → Konto.",
"loginOverview": "Przegląd logowań",
"allAuthEvents": "Wszystkie zdarzenia uwierzytelniania",
"failedOnly": "Tylko nieudane",
"loginEmptyDescription": "Tutaj pojawią się logowania, wylogowania i zmiany kluczy passkey.",
"loginEmptyFailedTitle": "Brak nieudanych prób logowania",
"loginEmptyFailedDescription": "To bezpieczny stan. Przełącz na wszystkie zdarzenia, aby zobaczyć udane logowania.",
"loginEmptyResetFilter": "Pokaż wszystkie zdarzenia",
"showingEntries": "Wyświetlanie {count} z {total} wpisów uwierzytelniania",
"status": "Status",
"action": "Action",
"status": "Stan",
"action": "Akcja",
"ip": "IP",
"location": "Location",
"location": "Lokalizacja",
"timestamp": "Czas",
"provider": "Provider",
"provider": "Dostawca",
"providerPassword": "Hasło",
"providerPasskey": "Passkey",
"providerApiToken": "API token",
"providerApiToken": "Token API",
"providerWithings": "Withings",
"providerUnknown": "Nieznane",
"outcome": "Outcome",
"outcome": "Wynik",
"outcomeSuccess": "Sukces",
"outcomeFailed": "Failed",
"auditDetails": "Details",
"deleteAllData": "Delete all data globally",
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
"deleteAllConfirm": "Really delete all data?",
"deleteAllConfirmDescription": "This will permanently delete all measurements, medications, intake events, API tokens, Withings connections, open authentication challenges, notification channels (Telegram, ntfy, Web Push), push subscriptions, and queued Telegram message deletions for all users. User accounts, the audit log, and submitted feedback are preserved so the wipe itself remains traceable and bug reports stay triageable.",
"deleteButton": "Delete all data",
"finalDelete": "Delete permanently",
"outcomeFailed": "Nieudane",
"auditDetails": "Szczegóły",
"deleteAllData": "Usuń wszystkie dane globalnie",
"deleteAllDescription": "Usuwa wszystkie dane pomiarów, leków, integracji i logów wszystkich użytkowników. Konta użytkowników zostaną zachowane.",
"deleteAllConfirm": "Na pewno usunąć wszystkie dane?",
"deleteAllConfirmDescription": "Spowoduje to trwałe usunięcie wszystkich pomiarów, leków, zdarzeń przyjęcia, tokenów API, połączeń Withings, otwartych wyzwań uwierzytelniania, kanałów powiadomień (Telegram, ntfy, Web Push), subskrypcji push oraz zakolejkowanych usunięć wiadomości Telegram wszystkich użytkowników. Konta użytkowników, dziennik audytu i przesłane opinie zostają zachowane, aby samo usunięcie pozostało możliwe do prześledzenia, a zgłoszenia błędów — do obsłużenia.",
"deleteButton": "Usuń wszystkie dane",
"finalDelete": "Usuń trwale",
"deletedResult": "Deleted: {measurements} measurements, {medications} Leki,{intakeEvents} intakes, {apiTokens} API tokens, {withingsConnections} Withings connections, {authChallenges} auth challenges, {notificationChannels} notification channels, {pushSubscriptions} push subscriptions, {telegramScheduledDeletions} queued Telegram deletions. Feedback rows preserved.",
"authRegister": "Registration",
"authRegister": "Rejestracja",
"authLogin": "Zaloguj",
"authLoginPasskey": "Passkey login",
"authLoginPassword": "Password login",
"authLoginFailed": "Failed",
"authLoginPasskey": "Logowanie kluczem passkey",
"authLoginPassword": "Logowanie hasłem",
"authLoginFailed": "Nieudane",
"authLogout": "Wyloguj",
"authPasskeyRegister": "Passkey added",
"authPasskeyDelete": "Passkey deleted",
"authTokenAutoissueNative": "Native client token issued",
"authTokenRefresh": "Token refreshed",
"authTokenRevoke": "Token revoked",
"medicationReminders": "Medication Reminders",
"medicationRemindersDescription": "Thresholds for reminder badge color transitions on medication cards.",
"reminderLateMinutes": "Late threshold (minutes)",
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
"reminderMissedMinutes": "Missed threshold (minutes)",
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
"notificationTestSend": "Send test",
"notificationTestSuccess": "Test notification sent",
"notificationTestFailed": "Failed to send test notification",
"reminderCheckRun": "Run reminder check",
"reminderCheckSuccess": "Reminder check completed",
"reminderCheckFailed": "Failed to run reminder check",
"reminderCheckResults": "Results",
"reminderCheckNotifOn": "Notifications on",
"reminderCheckNotifOff": "Notifications off",
"reminderCheckEventsToday": "Events today",
"reminderCheckNotifSent": "Sent",
"authPasskeyRegister": "Dodano klucz passkey",
"authPasskeyDelete": "Usunięto klucz passkey",
"authTokenAutoissueNative": "Wydano token klienta natywnego",
"authTokenRefresh": "Token odświeżony",
"authTokenRevoke": "Token unieważniony",
"medicationReminders": "Przypomnienia o lekach",
"medicationRemindersDescription": "Progi zmian koloru oznaczeń przypomnień na kartach leków.",
"reminderLateMinutes": "Próg opóźnienia (minuty)",
"reminderLateMinutesDescription": "Minuty po końcu okna, zanim oznaczenie zmieni kolor z żółtego na pomarańczowy.",
"reminderMissedMinutes": "Próg pominięcia (minuty)",
"reminderMissedMinutesDescription": "Minuty po końcu okna, zanim przyjęcie zostanie uznane za pominięte.",
"notificationTestSend": "Wyślij test",
"notificationTestSuccess": "Wysłano powiadomienie testowe",
"notificationTestFailed": "Nie udało się wysłać powiadomienia testowego",
"reminderCheckRun": "Uruchom sprawdzenie przypomnień",
"reminderCheckSuccess": "Zakończono sprawdzanie przypomnień",
"reminderCheckFailed": "Nie udało się uruchomić sprawdzenia przypomnień",
"reminderCheckResults": "Wyniki",
"reminderCheckNotifOn": "Powiadomienia włączone",
"reminderCheckNotifOff": "Powiadomienia wyłączone",
"reminderCheckEventsToday": "Zdarzenia dzisiaj",
"reminderCheckNotifSent": "Wysłane",
"feedback": {
"tabOpen": "Open",
"tabAcknowledged": "Acknowledged",
"tabResolved": "Resolved",
"tabArchived": "Archived",
"subject": "Subject",
"category": "Category",
"user": "User",
"createdAt": "Submitted",
"tabOpen": "Otwarte",
"tabAcknowledged": "Potwierdzone",
"tabResolved": "Rozwiązane",
"tabArchived": "Zarchiwizowane",
"subject": "Temat",
"category": "Kategoria",
"user": "Użytkownik",
"createdAt": "Przesłano",
"actions": "Akcje",
"details": "Details",
"emptyTitle": "All caught up",
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
"loading": "Loading feedback...",
"anonymous": "anonymous",
"categoryBug": "Bug",
"categoryFeature": "Feature",
"categoryQuestion": "Question",
"categoryOther": "Other",
"metadataHeading": "Metadata",
"details": "Szczegóły",
"emptyTitle": "Wszystko na bieżąco",
"emptyDescription": "Brak opinii użytkowników w tym statusie. Przesłane błędy, pytania i prośby o funkcje pojawią się tutaj.",
"loading": "Ładowanie opinii...",
"anonymous": "anonimowy",
"categoryBug": "Błąd",
"categoryFeature": "Funkcja",
"categoryQuestion": "Pytanie",
"categoryOther": "Inne",
"metadataHeading": "Metadane",
"metaUrl": "URL",
"metaLocale": "Locale",
"metaUserAgent": "User agent",
"metaAppVersion": "App version",
"metaLocale": "Język",
"metaUserAgent": "Agent użytkownika",
"metaAppVersion": "Wersja aplikacji",
"screenshotHeading": "Screenshot",
"adminNote": "Admin note",
"adminNotePlaceholder": "Internal note (not visible to user)",
"saveNote": "Save note",
"noteSaved": "Note saved",
"actionAcknowledge": "Acknowledge",
"actionResolve": "Resolve",
"actionArchive": "Archive",
"actionPublishGithub": "Publish to GitHub",
"publishedToGithub": "Published to GitHub",
"viewIssue": "View issue",
"publishSuccess": "Issue created",
"publishFailed": "GitHub publish failed",
"updateFailed": "Update failed",
"archiveConfirm": "Archive this feedback entry?",
"submittedBy": "Submitted by"
"adminNote": "Notatka administratora",
"adminNotePlaceholder": "Notatka wewnętrzna (niewidoczna dla użytkownika)",
"saveNote": "Zapisz notatkę",
"noteSaved": "Notatka zapisana",
"actionAcknowledge": "Potwierdź",
"actionResolve": "Rozwiąż",
"actionArchive": "Archiwizuj",
"actionPublishGithub": "Opublikuj na GitHub",
"publishedToGithub": "Opublikowano na GitHub",
"viewIssue": "Zobacz zgłoszenie",
"publishSuccess": "Utworzono zgłoszenie",
"publishFailed": "Publikacja na GitHub nie powiodła się",
"updateFailed": "Aktualizacja nie powiodła się",
"archiveConfirm": "Zarchiwizować ten wpis opinii?",
"submittedBy": "Przesłane przez"
},
"shell": {
"overview": "Przegląd",
"sectionsNav": "Admin sections"
"sectionsNav": "Sekcje administracyjne"
},
"overview": {
"welcomeTitle": "Witamy,{name}",
"welcomeSubtitle": "You are signed in as administrator. Pick a section to manage HealthLog.",
"snapshotTitle": "System snapshot",
"snapshotVersion": "Version",
"snapshotDatabase": "Database",
"welcomeSubtitle": "Zalogowano jako administrator. Wybierz sekcję, aby zarządzać HealthLog.",
"snapshotTitle": "Migawka systemu",
"snapshotVersion": "Wersja",
"snapshotDatabase": "Baza danych",
"snapshotWorker": "Worker",
"snapshotStarted": "Started",
"snapshotStarted": "Uruchomiono",
"snapshotBuildSha": "Build SHA",
"snapshotBuiltAt": "Built at",
"snapshotBuiltAt": "Skompilowano",
"snapshotOfflineGeo": "Dane geograficzne",
"snapshotOfflineGeoOn": "Offline (GeoLite2)",
"snapshotOfflineGeoOff": "Awaryjne (ipwho.is)",
"snapshotLoadError": "Failed to load system snapshot.",
"snapshotLoading": "Loading snapshot...",
"auditTitle": "Recent activity",
"auditEmpty": "No recent audit entries.",
"auditLoadError": "Failed to load recent activity.",
"auditLoading": "Loading activity...",
"auditViewAll": "View all"
"snapshotLoadError": "Nie udało się załadować migawki systemu.",
"snapshotLoading": "Ładowanie migawki...",
"auditTitle": "Ostatnia aktywność",
"auditEmpty": "Brak ostatnich wpisów audytu.",
"auditLoadError": "Nie udało się załadować ostatniej aktywności.",
"auditLoading": "Ładowanie aktywności...",
"auditViewAll": "Pokaż wszystko"
},
"section": {
"system-status": {
"title": "System Status",
"subtitle": "Worker, database, and integration health at a glance."
"title": "Stan systemu",
"subtitle": "Stan workera, bazy danych i integracji w jednym miejscu."
},
"general": {
"title": "General",
"subtitle": "Registration, default language, and other app-wide toggles."
"title": "Ogólne",
"subtitle": "Rejestracja, domyślny język i inne przełączniki obejmujące całą aplikację."
},
"services": {
"title": "Services",
"subtitle": "Enable or disable notification channels and integrations system-wide."
"title": "Usługi",
"subtitle": "Włącz lub wyłącz kanały powiadomień i integracje w całym systemie."
},
"integrations": {
"title": "Integracje",
"subtitle": "Configure Umami, GlitchTip, Web Push, and bug reports."
"subtitle": "Skonfiguruj Umami, GlitchTip, Web Push i zgłoszenia błędów."
},
"ai-quality": {
"title": "Insights Quality",
"subtitle": "Helpfulness scores grouped by severity and provider, from the last 30 days of user feedback."
"title": "Jakość analiz",
"subtitle": "Oceny przydatności pogrupowane według ważności i dostawcy, z ostatnich 30 dni opinii użytkowników."
},
"assistant": {
"title": "Powierzchnie asystenta",
"subtitle": "Włącz lub wyłącz każdą powierzchnię opartą na modelu bez usuwania konfiguracji dostawcy."
},
"coach-feedback": {
"title": "Coach Feedback",
"subtitle": "Helpful-rate per Coach prompt version, tone, and verbosity from the last 30 days."
"title": "Opinie o Coachu",
"subtitle": "Wskaźnik przydatności według wersji promptu, tonu i szczegółowości Coacha z ostatnich 30 dni."
},
"feedback": {
"title": "Feedback",
"subtitle": "Triage user feedback, bug reports, and feature requests."
"title": "Opinie",
"subtitle": "Segreguj opinie użytkowników, zgłoszenia błędów i prośby o funkcje."
},
"reminders": {
"title": "Reminders",
"subtitle": "Tune medication reminder thresholds and run a manual check."
"title": "Przypomnienia",
"subtitle": "Dostrój progi przypomnień o lekach i uruchom ręczne sprawdzenie."
},
"users": {
"title": "Users",
"subtitle": "Manage user accounts, roles, and active sessions.",
"title": "Użytkownicy",
"subtitle": "Zarządzaj kontami użytkowników, rolami i aktywnymi sesjami.",
"filter": {
"all": "Wszystko",
"admin": "Admins",
"user": "Users"
"admin": "Administratorzy",
"user": "Użytkownicy"
},
"forceLogout": "Force logout",
"forceLogoutConfirmTitle": "Force logout {name}?",
"forceLogoutConfirmBody": "All active sessions for this user will be revoked. They will need to sign in again on every device.",
"forceLogoutSuccess": "Logged {name} out of {count} session(s)",
"forceLogoutFailed": "Failed to force logout",
"cannotLogoutSelf": "Cannot force-logout yourself",
"emptyTitle": "No users in this view",
"emptyDescription": "There are no users matching the current filter.",
"emptyResetFilter": "Show all users"
"forceLogout": "Wymuś wylogowanie",
"forceLogoutConfirmTitle": "Wymusić wylogowanie {name}?",
"forceLogoutConfirmBody": "Wszystkie aktywne sesje tego użytkownika zostaną unieważnione. Będzie musiał zalogować się ponownie na każdym urządzeniu.",
"forceLogoutSuccess": "Wylogowano {name} z {count} sesji",
"forceLogoutFailed": "Nie udało się wymusić wylogowania",
"cannotLogoutSelf": "Nie można wymusić wylogowania samego siebie",
"emptyTitle": "Brak użytkowników w tym widoku",
"emptyDescription": "Brak użytkowników pasujących do bieżącego filtra.",
"emptyResetFilter": "Pokaż wszystkich użytkowników"
},
"api-tokens": {
"title": "API Tokens",
"subtitle": "Active bearer tokens issued to native clients and integrations."
"title": "Tokeny API",
"subtitle": "Aktywne tokeny bearer wydane klientom natywnym i integracjom."
},
"login-overview": {
"title": "Login Overview",
"subtitle": "Audit trail of authentication and admin events."
"title": "Przegląd logowań",
"subtitle": "Ślad audytu zdarzeń uwierzytelniania i administracyjnych."
},
"auditLog": {
"filterActor": "Actor (user id or username)",
"filterAction": "Action",
"filterActionAll": "All actions",
"filterTarget": "Target (id or path)",
"filterDate": "Date range",
"range24h": "Last 24 hours",
"filterActor": "Podmiot (ID użytkownika lub nazwa użytkownika)",
"filterAction": "Akcja",
"filterActionAll": "Wszystkie akcje",
"filterTarget": "Cel (ID lub ścieżka)",
"filterDate": "Zakres dat",
"range24h": "Ostatnie 24 godziny",
"range7d": "Ostatnie 7 dni",
"range30d": "Ostatnie 30 dni",
"rangeAll": "Cały okres",
"perPage": "Per page",
"prev": "Previous",
"perPage": "Na stronę",
"prev": "Poprzednia",
"next": "Dalej",
"pageOf": "Strona {page} z {total}",
"export": "Export CSV",
"empty": "No audit entries match the current filters."
"export": "Eksportuj CSV",
"empty": "Żaden wpis audytu nie pasuje do bieżących filtrów."
},
"app-logs": {
"title": "App Logs",
"subtitle": "Tail the most recent structured wide-events emitted by this process.",
"processNote": "Showing app-process logs only — worker-process logs go to Loki when that integration is configured. Buffer is volatile and capped at 500 entries.",
"filterTraceId": "Trace ID",
"filterAction": "Action contains…",
"filterLevel": "Level",
"levelAll": "All levels",
"filterRange": "Time window",
"range15m": "Last 15 minutes",
"range1h": "Last hour",
"range6h": "Last 6 hours",
"rangeAll": "Whole buffer",
"colLevel": "Level",
"colTimestamp": "Timestamp",
"colAction": "Action",
"colDuration": "Duration",
"title": "Logi aplikacji",
"subtitle": "Wyświetl najnowsze ustrukturyzowane wide-events emitowane przez ten proces.",
"processNote": "Wyświetlane są tylko logi procesu aplikacji — logi procesu workera trafiają do Loki, gdy ta integracja jest skonfigurowana. Bufor jest ulotny i ograniczony do 500 wpisów.",
"filterTraceId": "Identyfikator śladu",
"filterAction": "Akcja zawiera…",
"filterLevel": "Poziom",
"levelAll": "Wszystkie poziomy",
"filterRange": "Okno czasowe",
"range15m": "Ostatnie 15 minut",
"range1h": "Ostatnia godzina",
"range6h": "Ostatnie 6 godzin",
"rangeAll": "Cały bufor",
"colLevel": "Poziom",
"colTimestamp": "Znacznik czasu",
"colAction": "Akcja",
"colDuration": "Czas trwania",
"colTraceId": "Trace",
"showing": "Showing {count} of up to {bufferMax} buffered events",
"empty": "Buffer is empty",
"emptyDescription": "No events match the current filters yet. Hit refresh after triggering some traffic.",
"refresh": "Refresh",
"eventDetails": "Event details",
"closeDetails": "Close details"
"showing": "Wyświetlono {count} z maksymalnie {bufferMax} buforowanych zdarzeń",
"empty": "Bufor jest pusty",
"emptyDescription": "Żadne zdarzenie nie pasuje jeszcze do bieżących filtrów. Kliknij Odśwież po wygenerowaniu ruchu.",
"refresh": "Odśwież",
"eventDetails": "Szczegóły zdarzenia",
"closeDetails": "Zamknij szczegóły"
},
"backups": {
"title": "Backups",
"subtitle": "Weekly per-user data snapshots stored in PostgreSQL.",
"description": "Each user gets one rolling snapshot per backup type. Sizes show the encrypted blob — payloads are not downloadable from this page.",
"runNow": "Backup now",
"runEnqueued": "Backup job enqueued",
"runFailed": "Failed to enqueue backup",
"loading": "Loading backups...",
"loadError": "Failed to load backups.",
"emptyTitle": "No backups yet",
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
"colUser": "User",
"title": "Kopie zapasowe",
"subtitle": "Cotygodniowe migawki danych dla każdego użytkownika przechowywane w PostgreSQL.",
"description": "Każdy użytkownik ma jedną przesuwaną migawkę na typ kopii. Rozmiary pokazują zaszyfrowany blob — zawartości nie można pobrać z tej strony.",
"runNow": "Utwórz kopię teraz",
"runEnqueued": "Zadanie kopii zapasowej dodano do kolejki",
"runFailed": "Nie udało się dodać kopii do kolejki",
"loading": "Ładowanie kopii zapasowych...",
"loadError": "Nie udało się załadować kopii zapasowych.",
"emptyTitle": "Brak kopii zapasowych",
"emptyDescription": "Kopie zapasowe wykonują się automatycznie w każdą niedzielę o 03:00 — lub uruchom jedną teraz, aby utworzyć pierwszą migawkę.",
"colUser": "Użytkownik",
"colType": "Typ",
"typeWeeklyAuto": "Weekly (auto)",
"typeManual": "Manual",
"colSize": "Size",
"colCreatedAt": "Last snapshot",
"typeWeeklyAuto": "Cotygodniowo (auto)",
"typeManual": "Ręcznie",
"colSize": "Rozmiar",
"colCreatedAt": "Ostatnia migawka",
"colActions": "Akcje",
"retentionLabel": "Retention: {days} days",
"download": "Download",
"downloadAria": "Download backup for {username}",
"downloadFailed": "Download failed",
"downloadStarted": "Download started",
"uploadTitle": "Upload backup",
"uploadDescription": "Validate a backup file and store it as a manual snapshot. Restoring is a separate step.",
"uploadButton": "Upload file",
"uploadHelp": "JSON file matching the current backup schema. Max 10 MB.",
"uploadSuccess": "Backup uploaded ({count} records)",
"uploadFailed": "Upload failed",
"restore": "Restore",
"restoreAria": "Restore from backup for {username}",
"restoreTitle": "Restore from backup",
"restoreDescription": "This will replace ALL current data for {username} with the snapshot from {when}. Existing measurements, medications, intake events, mood entries, notification channels, push subscriptions and queued Telegram deletions will be deleted.",
"restorePromptLabel": "Type RESTORE to continue",
"restoreConfirm": "Restore now",
"restoreInProgress": "Restoring...",
"restoreSuccess": "Restore complete",
"restoreFailed": "Restore failed",
"docsLink": "Documentation"
"retentionLabel": "Przechowywanie: {days} dni",
"download": "Pobierz",
"downloadAria": "Pobierz kopię zapasową dla {username}",
"downloadFailed": "Pobieranie nie powiodło się",
"downloadStarted": "Rozpoczęto pobieranie",
"uploadTitle": "Prześlij kopię zapasową",
"uploadDescription": "Sprawdź plik kopii zapasowej i zapisz go jako ręczną migawkę. Przywracanie to osobny krok.",
"uploadButton": "Prześlij plik",
"uploadHelp": "Plik JSON zgodny z bieżącym schematem kopii zapasowej. Maks. 10 MB.",
"uploadSuccess": "Przesłano kopię zapasową ({count} rekordów)",
"uploadFailed": "Przesyłanie nie powiodło się",
"restore": "Przywróć",
"restoreAria": "Przywróć z kopii zapasowej dla {username}",
"restoreTitle": "Przywróć z kopii zapasowej",
"restoreDescription": "Spowoduje to zastąpienie WSZYSTKICH bieżących danych {username} migawką z {when}. Istniejące pomiary, leki, zdarzenia przyjęcia, wpisy nastroju, kanały powiadomień, subskrypcje push i zakolejkowane usunięcia Telegram zostaną usunięte.",
"restorePromptLabel": "Wpisz RESTORE, aby kontynuować",
"restoreConfirm": "Przywróć teraz",
"restoreInProgress": "Przywracanie...",
"restoreSuccess": "Przywracanie zakończone",
"restoreFailed": "Przywracanie nie powiodło się",
"docsLink": "Dokumentacja"
},
"danger-zone": {
"title": "Danger Zone",
"subtitle": "Destructive system-wide operations."
"title": "Strefa zagrożenia",
"subtitle": "Destrukcyjne operacje obejmujące cały system."
},
"about": {
"title": "About",
"subtitle": "Version, license, source, and update check."
"title": "O programie",
"subtitle": "Wersja, licencja, kod źródłowy i sprawdzanie aktualizacji."
}
},
"carrier": "Operator",
"carrierUnknown": "Nieznany operator",
"carrierUnavailableGeoFallback": "{location} — carrier unavailable"
"carrierUnavailableGeoFallback": "{location} — operator niedostępny"
},
"achievements": {
"title": "Osiągnięcia",