mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 04:50:59 +00:00
Covers the data-visualisation surface: chart loading/empty states,
sample windows (7/30/90 pts), weekday and month abbreviations,
heatmap and adherence legends, personal-baseline deltas, chart-overlay
controls, target thresholds (metric labels, override warning, save
toasts), and the period-over-period comparison toggle. Placeholders
{delta}, {min}, {max}, {unit} preserved across all locales.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2992 lines
132 KiB
JSON
2992 lines
132 KiB
JSON
{
|
||
"common": {
|
||
"save": "Guardar",
|
||
"cancel": "Cancelar",
|
||
"delete": "Eliminar",
|
||
"edit": "Editar",
|
||
"moreOptions": "Más opciones",
|
||
"create": "Crear",
|
||
"close": "Cerrar",
|
||
"loading": "Cargando…...",
|
||
"error": "Error",
|
||
"saved": "Guardado",
|
||
"no": "No",
|
||
"noData": "Sin datos disponibles",
|
||
"optional": "Opcional",
|
||
"active": "Activo",
|
||
"inactive": "Inactivo",
|
||
"enabled": "Activado",
|
||
"disabled": "Desactivado",
|
||
"networkError": "Error de red",
|
||
"unknownError": "Error desconocido",
|
||
"copied": "¡Copiado!",
|
||
"or": "o",
|
||
"unknown": "Desconocido",
|
||
"add": "Añadir",
|
||
"import": "Importar",
|
||
"test": "Probar",
|
||
"reset": "Restablecer",
|
||
"copy": "Copiar",
|
||
"copyDetails": "Copiar detalles",
|
||
"retry": "Reintentar",
|
||
"reportIssue": "Reportar problema",
|
||
"showPassword": "Mostrar contraseña",
|
||
"hidePassword": "Ocultar contraseña"
|
||
},
|
||
"format": {
|
||
"dateShort": "{day}/{month}/{year}",
|
||
"timeShort": "{hour}:{minute}",
|
||
"dateTime": "{day}/{month}/{year} {hour}:{minute}"
|
||
},
|
||
"doctorReport": {
|
||
"title": "Informe de salud",
|
||
"subtitle": "HealthLog — Informe personal de salud",
|
||
"patient": "Paciente",
|
||
"dateOfBirth": "Fecha de nacimiento",
|
||
"gender": "Sexo",
|
||
"genderMale": "Hombre",
|
||
"genderFemale": "Mujer",
|
||
"genderOther": "No binario",
|
||
"height": "Altura",
|
||
"period": "Período del informe",
|
||
"createdOn": "Creado el",
|
||
"vitalsTitle": "Signos vitales — Resumen",
|
||
"colParameter": "Parameter",
|
||
"colCurrent": "Current",
|
||
"colAvgPeriod": "Avg. period",
|
||
"colMin": "Mín",
|
||
"colMax": "Máx",
|
||
"colN": "n",
|
||
"bpClassificationTitle": "Blood pressure — ESH classification (2023)",
|
||
"avgBp": "Average blood pressure",
|
||
"classification": "Classification",
|
||
"bmiTitle": "Body Mass Index (BMI)",
|
||
"bmiRow": "IMC:{bmi} kg/m² — Classification: {class} (WHO)",
|
||
"complianceTitle": "Medication compliance",
|
||
"glp1Title": "Terapia GLP-1",
|
||
"glp1WeightSummary": "Weight over report period: {start} kg → {end} kg ({delta} kg)",
|
||
"glp1CurrentDose": "Dosis actual:{value} {unit} (since {since})",
|
||
"glp1Compliance": "Cumplimiento:{taken} / {total} ({rate}%)",
|
||
"glp1SideEffectsTitle": "Side effects logged",
|
||
"colGlp1Date": "Fecha",
|
||
"colGlp1Dose": "Dosis",
|
||
"colGlp1Note": "Nota",
|
||
"colGlp1SideEffect": "Efecto secundario",
|
||
"colMedication": "Medicamento",
|
||
"colTaken": "Tomada",
|
||
"colSkipped": "Omitida",
|
||
"colMissed": "Perdida",
|
||
"colTotal": "Total",
|
||
"colComplianceRate": "Tasa de cumplimiento",
|
||
"moodTitle": "Mood trajectory",
|
||
"moodSummary": "Promedio:{avg} / 5.0 · Entries: {count} · Range: {min}–{max}",
|
||
"colMood": "Estado de ánimo",
|
||
"colCount": "Count",
|
||
"colShare": "Share",
|
||
"footerDisclaimer1": "Este informe se generó automáticamente a partir de datos autorregistrados y está destinado a apoyar",
|
||
"footerDisclaimer2": "la conversación entre médico y paciente. No sustituye un diagnóstico médico. Las correlaciones no implican causalidad.",
|
||
"footerSource": "Fuente: HealthLog | Zona horaria: Europe/Berlin | Creado: {timestamp}",
|
||
"typeWeight": "Body weight",
|
||
"typeBpSys": "Systolic blood pressure",
|
||
"typeBpDia": "Diastolic blood pressure",
|
||
"typePulse": "Resting pulse",
|
||
"typeBodyFat": "Grasa corporal",
|
||
"typeSleep": "Sleep duration",
|
||
"typeSteps": "Activity (steps)",
|
||
"typeTotalBodyWater": "Total body water",
|
||
"typeBoneMass": "Bone mass",
|
||
"typeOxygenSaturation": "Oxygen saturation",
|
||
"unitSteps": "Pasos",
|
||
"bmiUnderweight": "Underweight",
|
||
"bmiNormal": "Normal weight",
|
||
"bmiOverweight": "Overweight (pre-obese)",
|
||
"bmiObeseGrade1": "Obesity grade I",
|
||
"bmiObeseGrade2": "Obesity grade II",
|
||
"bmiObeseGrade3": "Obesity grade III",
|
||
"bpOptimal": "Optimal",
|
||
"bpNormal": "Normal",
|
||
"bpHighNormal": "High-normal",
|
||
"bpHypertensionGrade1": "Hypertension grade 1",
|
||
"bpHypertensionGrade2": "Hypertension grade 2",
|
||
"bpHypertensionGrade3": "Hypertension grade 3",
|
||
"moodAwful": "Very bad",
|
||
"moodBad": "Mal",
|
||
"moodNeutral": "Neutral",
|
||
"moodGood": "Bien",
|
||
"moodGreat": "Very good",
|
||
"typeGlucoseFasting": "Glucose (fasting)",
|
||
"typeGlucosePostprandial": "Glucose (postprandial)",
|
||
"typeGlucoseRandom": "Glucose (random)",
|
||
"typeGlucoseBedtime": "Glucose (bedtime)",
|
||
"glucoseClassificationTitle": "Blood glucose — reference ranges (ADA 2024 / DDG)",
|
||
"glucoseRow": "{label}: avg {avg} {unit} (target {rangeMin}–{rangeMax}) — {class}",
|
||
"glucoseInTarget": "in target",
|
||
"glucoseBelowTarget": "below target",
|
||
"glucoseAboveTarget": "above target",
|
||
"practiceLabel": "Practice",
|
||
"dialog": {
|
||
"title": "Doctor report (PDF)",
|
||
"description": "Pick the reporting period and (optionally) the practice name; both are printed on the cover.",
|
||
"startLabel": "Start date",
|
||
"endLabel": "End date",
|
||
"practiceLabel": "Practice / clinic name (optional)",
|
||
"practicePlaceholder": "e.g. Dr. Müller — Family practice",
|
||
"preset90d": "Últimos 90 días",
|
||
"preset180d": "Last 6 months",
|
||
"preset365d": "Last 12 months",
|
||
"submit": "Generate PDF",
|
||
"cancel": "Cancelar",
|
||
"errorEndBeforeStart": "End date must be on or after the start date.",
|
||
"errorRangeTooLong": "The reporting period cannot exceed 2 years.",
|
||
"errorInvalidDate": "Please select a valid start and end date."
|
||
},
|
||
"sections": {
|
||
"title": "Choose sections",
|
||
"bp": "Presión arterial",
|
||
"weight": "Peso",
|
||
"pulse": "Resting pulse",
|
||
"bmi": "Body Mass Index (BMI)",
|
||
"mood": "Estado de ánimo",
|
||
"moodSensitive": "Sensitive — off by default.",
|
||
"compliance": "Medication compliance",
|
||
"sleep": "Sleep duration",
|
||
"empty": "No data was recorded in this date range yet. The report will still include the cover page."
|
||
}
|
||
},
|
||
"errorBoundary": {
|
||
"title": "Algo ha salido mal",
|
||
"description": "An unexpected error occurred. You can retry, copy the technical details, or open a bug report."
|
||
},
|
||
"nav": {
|
||
"dashboard": "Panel",
|
||
"measurements": "Mediciones",
|
||
"medications": "Medicamentos",
|
||
"insights": "Insights",
|
||
"targets": "Objetivos",
|
||
"achievements": "Logros",
|
||
"settings": "Ajustes",
|
||
"bugreport": "Bug Report",
|
||
"admin": "Consola de administración",
|
||
"logout": "Cerrar sesión",
|
||
"login": "Iniciar sesión",
|
||
"about": "Acerca de HealthLog",
|
||
"notifications": "Centro de notificaciones",
|
||
"theme": "Apariencia",
|
||
"themeSystem": "Sistema",
|
||
"themeDark": "Oscuro",
|
||
"themeLight": "Claro",
|
||
"collapseSidebar": "Collapse",
|
||
"userMenu": "User menu",
|
||
"mood": "Estado de ánimo",
|
||
"skipToContent": "Skip to content",
|
||
"sidebar": "Sidebar",
|
||
"mainNavigation": "Main navigation",
|
||
"mobileNavigation": "Mobile navigation",
|
||
"breadcrumb": "Ruta de navegación",
|
||
"loadingScreen": "Loading…",
|
||
"more": "More",
|
||
"moreSheetTitle": "More",
|
||
"moreSheetDescription": "Pages that don't fit the bottom bar."
|
||
},
|
||
"auth": {
|
||
"login": "Iniciar sesión",
|
||
"register": "Registrarse",
|
||
"username": "Nombre de usuario",
|
||
"password": "Contraseña",
|
||
"email": "Correo electrónico",
|
||
"emailPlaceholder": "nombre@ejemplo.com",
|
||
"emailOrUsername": "Correo electrónico o nombre de usuario",
|
||
"emailOrUsernamePlaceholder": "nombre@ejemplo.com o nombredeusuario",
|
||
"loginWithPasskey": "Iniciar sesión con passkey",
|
||
"loginWithPassword": "Iniciar sesión con contraseña",
|
||
"noAccount": "¿Aún no tienes cuenta?",
|
||
"hasAccount": "¿Ya tienes cuenta?",
|
||
"loginFailed": "No se ha podido iniciar sesión",
|
||
"registerFailed": "No se ha podido completar el registro",
|
||
"createAccount": "Crear cuenta",
|
||
"newAccount": "Crear cuenta nueva",
|
||
"backToPasskey": "Volver a passkey",
|
||
"passkeySetupLater": "Puedes configurar passkeys más tarde en los ajustes.",
|
||
"passwordMinLength": "Mín. 12 caracteres",
|
||
"passwordTooShort": "La contraseña debe tener al menos {minLength} caracteres.",
|
||
"privacyPolicy": "Política de privacidad"
|
||
},
|
||
"dashboard": {
|
||
"title": "Panel",
|
||
"greeting": {
|
||
"morning": "Buenos días",
|
||
"day": "Hola",
|
||
"evening": "Buenas tardes"
|
||
},
|
||
"welcomeBack": "{greeting}, te damos la bienvenida de nuevo.",
|
||
"welcomeBackWithName": "{greeting} {name}, te damos la bienvenida de nuevo.",
|
||
"greetingSalutation": "Hola, {name}",
|
||
"streakLabel": "días seguidos",
|
||
"weight": "Peso",
|
||
"bloodPressure": "Presión arterial",
|
||
"pulse": "Pulso",
|
||
"bodyFat": "Grasa corporal",
|
||
"sleep": "Sueño",
|
||
"steps": "Pasos",
|
||
"vo2Max": "VO₂ máx",
|
||
"vo2MaxUnit": "mL/(kg·min)",
|
||
"bpInTarget": "TA en rango objetivo",
|
||
"weightShort": "Peso",
|
||
"bloodPressureSysShort": "PA (Sys)",
|
||
"bloodPressureDiaShort": "PA (Dia)",
|
||
"pulseShort": "Pulso",
|
||
"bodyFatShort": "GC",
|
||
"moodShort": "Humor",
|
||
"sleepShort": "Sueño",
|
||
"stepsShort": "Pasos",
|
||
"vo2MaxShort": "VO₂ máx",
|
||
"bpInTargetShort": "PA-objetivo",
|
||
"medications": "Medicamentos",
|
||
"quickAddMeasurement": "Registrar medición",
|
||
"quickAddMood": "Registrar estado de ánimo",
|
||
"quickAddMedicationIntake": "Registrar toma",
|
||
"medicationIntakeQuickAdd": {
|
||
"sheetTitle": "Registrar toma de medicación",
|
||
"sheetDescription": "Registra dosis, hora y medicamento en unos pocos toques.",
|
||
"medicationLabel": "Medicamento",
|
||
"medicationPlaceholder": "Selecciona un medicamento",
|
||
"doseLabel": "Dosis",
|
||
"dosePlaceholder": "p. ej. 5 mg",
|
||
"doseHint": "Por ahora se registra la dosis estándar. Las dosis variables llegarán en una próxima versión.",
|
||
"timeLabel": "Hora de la toma",
|
||
"saveError": "No se ha podido guardar la toma.",
|
||
"emptyTitle": "Aún no hay medicamentos",
|
||
"emptyDescription": "Crea primero un medicamento con horario, después vuelve aquí para registrar la toma.",
|
||
"emptyCta": "Añadir medicamento"
|
||
},
|
||
"compliance7d": "Cumplimiento (7 días)",
|
||
"mood": "Estado de ánimo",
|
||
"customizeTitle": "Diseño del panel",
|
||
"layoutReset": "Restablecer valores por defecto",
|
||
"layoutSaveSuccess": "Diseño del panel guardado",
|
||
"layoutSaveError": "No se ha podido guardar el diseño",
|
||
"layoutResetSuccess": "Restablecido al diseño por defecto",
|
||
"layoutUsingDefaults": "Diseño por defecto activo",
|
||
"layoutCustomized": "Diseño personalizado activo",
|
||
"moveUp": "Subir",
|
||
"moveDown": "Bajar",
|
||
"layoutTileColumn": "Tarjeta",
|
||
"layoutChartColumn": "Gráfico",
|
||
"emptyTitle": "Tu panel está vacío",
|
||
"emptyDescription": "Registra tu primera medición o estado de ánimo. Las tarjetas y gráficas aparecerán automáticamente en cuanto haya datos.",
|
||
"emptyAddMeasurement": "Registrar la primera medición",
|
||
"staleHint": "Último valor hace {count} d",
|
||
"staleHintWeeksOne": "Último valor hace 1 semana",
|
||
"staleHintWeeksOther": "Último valor hace {count} semanas",
|
||
"staleHintMonthsOne": "Último valor hace 1 mes",
|
||
"staleHintMonthsOther": "Último valor hace {count} meses",
|
||
"coachCta": "Pregunta al coach",
|
||
"recentWorkouts": {
|
||
"title": "Entrenamientos recientes",
|
||
"viewAll": "Ver todos",
|
||
"loading": "Cargando entrenamientos…",
|
||
"empty": {
|
||
"title": "Aún no hay entrenamientos",
|
||
"cta": "Abre la app Apple Salud en el iPhone para sincronizar los entrenamientos."
|
||
}
|
||
}
|
||
},
|
||
"measurements": {
|
||
"title": "Mediciones",
|
||
"subtitle": "Peso, tensión arterial, pulso y más",
|
||
"addMeasurement": "Añadir",
|
||
"editMeasurement": "Editar medición",
|
||
"type": "Tipo",
|
||
"value": "Valor",
|
||
"date": "Fecha",
|
||
"source": "Fuente",
|
||
"notes": "Notas",
|
||
"typeWeight": "Peso",
|
||
"typeBloodPressure": "Presión arterial",
|
||
"typeBpSys": "Sis",
|
||
"typeBpDia": "Dia",
|
||
"typePulse": "Pulso",
|
||
"typeBodyFat": "Grasa corporal",
|
||
"typeSleep": "Sueño",
|
||
"typeSteps": "Pasos",
|
||
"typeBloodGlucose": "Glucemia",
|
||
"typeTotalBodyWater": "Agua corporal total",
|
||
"typeBoneMass": "Masa ósea",
|
||
"typeOxygenSaturation": "Saturación de oxígeno",
|
||
"typeHeartRateVariability": "Variabilidad de la frecuencia cardiaca",
|
||
"typeRestingHeartRate": "Frecuencia cardíaca en reposo",
|
||
"typeActiveEnergyBurned": "Energía activa",
|
||
"typeFlightsClimbed": "Escaleras",
|
||
"typeWalkingRunningDistance": "Distancia a pie y corriendo",
|
||
"typeVo2Max": "VO₂ máx",
|
||
"typeBodyTemperature": "Temperatura corporal",
|
||
"typeFatFreeMass": "Masa libre de grasa",
|
||
"typeFatMass": "Masa grasa",
|
||
"typeMuscleMass": "Masa muscular",
|
||
"typeSkinTemperature": "Temperatura de la piel",
|
||
"typePulseWaveVelocity": "Velocidad de la onda de pulso",
|
||
"typeVascularAge": "Edad vascular",
|
||
"typeVisceralFat": "Grasa visceral",
|
||
"typeAudioExposureEnv": "Exposición al ruido (ambiente)",
|
||
"typeAudioExposureHeadphone": "Exposición al ruido (auriculares)",
|
||
"typeTimeInDaylight": "Tiempo a la luz del día",
|
||
"typeWalkingSteadiness": "Estabilidad al caminar",
|
||
"typeAudioExposureEvent": "Evento de escucha alta",
|
||
"glucoseContext": "Contexto",
|
||
"glucoseContextFasting": "En ayunas (≥8 h sin comer)",
|
||
"glucoseContextPostprandial": "Posprandial (2 h tras comer)",
|
||
"glucoseContextRandom": "Cualquiera / sin contexto",
|
||
"glucoseContextBedtime": "Antes de acostarse",
|
||
"unitHours": "Horas",
|
||
"unitSteps": "Pasos",
|
||
"sourceManual": "Manual",
|
||
"sourceWithings": "Withings",
|
||
"sourceImport": "Importar",
|
||
"sourceAppleHealth": "Apple Health",
|
||
"systolicLabel": "Sistólica (mmHg)",
|
||
"diastolicLabel": "Diastólica (mmHg)",
|
||
"pulseLabel": "Pulso (lpm)",
|
||
"valueWithUnit": "Valor ({unit})",
|
||
"timestamp": "Hora",
|
||
"notesPlaceholder": "p. ej. después de comer",
|
||
"formReset": "Restablecer formulario",
|
||
"saveError": "Error al guardar",
|
||
"duplicateTimestamp": "Ya existe una medición de este tipo en la marca de tiempo seleccionada.",
|
||
"deleteError": "Error al eliminar",
|
||
"invalidValue": "Introduce un valor válido.",
|
||
"invalidTimestamp": "Selecciona una fecha y hora válidas.",
|
||
"loginRequired": "Inicia sesión para ver las mediciones.",
|
||
"allTypes": "Todos los tipos",
|
||
"filterByType": "Filtrar por tipo",
|
||
"measurementCount": "{count} mediciones",
|
||
"emptyTitle": "Aún no hay mediciones",
|
||
"emptyDescription": "Registra peso, tensión arterial, pulso u otros valores para detectar tendencias.",
|
||
"emptyFilteredTitle": "Ninguna medición coincide con el filtro",
|
||
"emptyFilteredDescription": "Elige otro tipo o quita el filtro para ver todas las mediciones.",
|
||
"emptyAddFirst": "Registrar la primera medición",
|
||
"emptyResetFilter": "Mostrar todos los tipos",
|
||
"comment": "Comentario",
|
||
"actions": "Acciones",
|
||
"deleteConfirmTitle": "¿Eliminar medición?",
|
||
"deleteConfirmDescription": "Esta medición se eliminará de forma permanente.",
|
||
"pageInfo": "Página {page} de {total}",
|
||
"previousPage": "Página anterior",
|
||
"nextPage": "Página siguiente",
|
||
"dailyTotalCaption": "({count} muestras)",
|
||
"expandDay": "Mostrar las muestras de este día",
|
||
"collapseDay": "Ocultar las muestras de este día"
|
||
},
|
||
"mood": {
|
||
"title": "Estado de ánimo",
|
||
"subtitle": "Tendencia y registros de estado de ánimo",
|
||
"addEntry": "Añadir",
|
||
"editEntry": "Editar entrada",
|
||
"moodLevel": "Estado de ánimo",
|
||
"tags": "Etiquetas",
|
||
"tagsPlaceholder": "p. ej. deporte, trabajo, familia",
|
||
"tagsHelp": "Separa con comas",
|
||
"timestamp": "Hora",
|
||
"date": "Fecha",
|
||
"source": "Fuente",
|
||
"levelSuperGut": "Genial",
|
||
"levelGut": "Bien",
|
||
"levelOkay": "Bien",
|
||
"levelSchlecht": "Mal",
|
||
"levelLausig": "Pésimo",
|
||
"sourceMoodlog": "moodLog",
|
||
"allMoods": "Todos los estados",
|
||
"entryCount": "{count} entradas",
|
||
"emptyTitle": "Aún no hay entradas de estado de ánimo",
|
||
"emptyDescription": "Registra cómo te sientes hoy para descubrir patrones con el tiempo.",
|
||
"emptyFilteredTitle": "Ninguna entrada coincide con el filtro",
|
||
"emptyFilteredDescription": "Elige otro nivel o quita el filtro para ver todas las entradas.",
|
||
"emptyAddFirst": "Registrar primer estado",
|
||
"emptyResetFilter": "Mostrar todos los estados",
|
||
"actions": "Acciones",
|
||
"formReset": "Restablecer formulario",
|
||
"saveError": "Error al guardar",
|
||
"deleteError": "Error al eliminar",
|
||
"invalidTimestamp": "Selecciona una fecha y hora válidas.",
|
||
"deleteConfirmTitle": "¿Eliminar entrada?",
|
||
"deleteConfirmDescription": "Esta entrada de estado de ánimo se eliminará de forma permanente.",
|
||
"pageInfo": "Página {page} de {total}",
|
||
"loginRequired": "Inicia sesión para ver tus estados de ánimo."
|
||
},
|
||
"medications": {
|
||
"title": "Medicamentos",
|
||
"subtitle": "Medications, schedules & intake",
|
||
"loginRequired": "Please sign in to manage medications.",
|
||
"addMedication": "Añadir",
|
||
"editMedication": "Edit medication",
|
||
"newMedication": "New medication",
|
||
"firstMedication": "Add first medication",
|
||
"emptyTitle": "No medications yet",
|
||
"emptyDescription": "Add medications, dosages, and reminder windows to track compliance.",
|
||
"loadFailed": "Could not load medications",
|
||
"retryLoad": "Reintentar",
|
||
"name": "Nombre",
|
||
"dose": "Dosis",
|
||
"scheduleFrom": "Desde",
|
||
"scheduleTo": "Hasta",
|
||
"scheduleLabel": "Label",
|
||
"scheduleDays": "Days",
|
||
"scheduleDaily": "Daily",
|
||
"inactive": "Paused",
|
||
"intakeHistory": "Intake history",
|
||
"deleteConfirm": "Delete medication?",
|
||
"compliance": "Cumplimiento",
|
||
"importIntakes": "Import intakes",
|
||
"importDescription": "Paste a JSON array with intake data. Expected format:",
|
||
"importUploadFile": "Upload JSON file",
|
||
"importPaste": "Paste JSON here...",
|
||
"importSelected": "Selected: {name}",
|
||
"importFileLoaded": "File \"{name}\" loaded",
|
||
"importInvalidJson": "File does not contain valid JSON",
|
||
"importNoArray": "No array found",
|
||
"importResult": "{imported} intakes imported",
|
||
"importDuplicatesSkipped": "{count} duplicates skipped",
|
||
"importInvalidSkipped": "{count} invalid entries skipped",
|
||
"importFailed": "Import failed",
|
||
"importInvalidFormat": "Invalid JSON format",
|
||
"apiEndpointTitle": "API Endpoint: {name}",
|
||
"apiEndpointDescription": "Use this endpoint to record intakes via API (e.g., iPhone Shortcut or cron job).",
|
||
"apiEndpointActive": "API endpoint active",
|
||
"apiEndpointActivated": "API endpoint activated",
|
||
"apiEndpointDeactivated": "API endpoint deactivated",
|
||
"apiTokenCount": "Active ({count} tokens)",
|
||
"apiToken": "API Token",
|
||
"apiTokenActiveHint": "Endpoint is active. Existing tokens remain valid but cannot be shown in plain text again.",
|
||
"apiTokenActivateHint": "Activate the endpoint to create a new token.",
|
||
"apiTokenOnceHint": "The token is only shown in plain text once at creation.",
|
||
"requestExample": "Request example",
|
||
"statusLoadFailed": "Could not load status",
|
||
"changeFailed": "Change failed",
|
||
"categoryBloodPressure": "Presión arterial",
|
||
"categoryVitamin": "Vitamins",
|
||
"categoryThyroid": "Thyroid",
|
||
"categoryHormone": "Hormones",
|
||
"categorySupplement": "Supplement",
|
||
"categoryPainRelief": "Pain Relief",
|
||
"categoryAllergy": "Allergy",
|
||
"categoryDigestive": "Gastrointestinal",
|
||
"categorySkin": "Skincare",
|
||
"categorySleepAid": "Sleep Aid",
|
||
"categoryOther": "Other",
|
||
"daysSun": "Sun",
|
||
"daysMon": "Mon",
|
||
"daysTue": "Tue",
|
||
"daysWed": "Wed",
|
||
"daysThu": "Thu",
|
||
"daysFri": "Fri",
|
||
"daysSat": "Sat",
|
||
"back": "Atrás",
|
||
"today": "Hoy",
|
||
"yesterday": "Ayer",
|
||
"tomorrow": "Mañana",
|
||
"withoutNotification": "Without notification",
|
||
"pausedSince": "Paused since",
|
||
"takeNow": "Take now",
|
||
"overdue": "Overdue",
|
||
"veryOverdue": "Very overdue",
|
||
"compliance7d": "7-day compliance",
|
||
"compliance30d": "30-day compliance",
|
||
"lastIntake": "Last intake:",
|
||
"nextIntake": "Next intake:",
|
||
"dayStreak": "day streak",
|
||
"taken": "Tomada",
|
||
"skipped": "Omitida",
|
||
"weekdaySunday": "Sunday",
|
||
"weekdayMonday": "Monday",
|
||
"weekdayTuesday": "Tuesday",
|
||
"weekdayWednesday": "Wednesday",
|
||
"weekdayThursday": "Thursday",
|
||
"weekdayFriday": "Friday",
|
||
"weekdaySaturday": "Saturday",
|
||
"weekdaySundayPlural": "Sundays",
|
||
"weekdayMondayPlural": "Mondays",
|
||
"weekdayTuesdayPlural": "Tuesdays",
|
||
"weekdayWednesdayPlural": "Wednesdays",
|
||
"weekdayThursdayPlural": "Thursdays",
|
||
"weekdayFridayPlural": "Fridays",
|
||
"weekdaySaturdayPlural": "Saturdays",
|
||
"formType": "Tipo",
|
||
"formDose": "Dosis",
|
||
"formUnit": "Unit",
|
||
"formSchedule": "Schedule",
|
||
"formTreatmentClass": "Treatment class",
|
||
"formTreatmentClassHelp": "Pick \"GLP-1 injection\" for weekly injectables like Mounjaro, Ozempic, Wegovy, Zepbound. Unlocks the body-map picker and the GLP-1 logbook below.",
|
||
"treatmentClassGeneric": "Standard medication",
|
||
"treatmentClassGlp1": "GLP-1 injection",
|
||
"glp1WeeklyPresetTitle": "Once weekly on …",
|
||
"glp1WeeklyPresetHelp": "Most GLP-1 receptor agonists are once-weekly. Tap a day to set the cadence.",
|
||
"glp1WeeklyPresetSuggest": "Use my last weekday choice",
|
||
"glp1DosesPerUnit": "Doses per pen / vial",
|
||
"glp1DosesPerUnitPlaceholder": "e.g. 4 for a Mounjaro KwikPen",
|
||
"glp1DosesPerUnitHelp": "Optional — Mounjaro KwikPen = 4, Ozempic 0.25/0.5 mg = 4, Wegovy single-dose pen = 1. Leave blank if you don't track per-pen dosing.",
|
||
"glp1LastInjection": "Last: {label}",
|
||
"glp1LastInjectionWithSite": "Last: {label} · {site}",
|
||
"glp1NextInjectionDays": "Siguiente:{label} (in {days} days)",
|
||
"glp1NextInjectionToday": "Next: today",
|
||
"glp1NextInjectionTomorrow": "Next: tomorrow",
|
||
"glp1RotationLast": "Last site: {site}",
|
||
"glp1RotationSuggested": "Recommended next: {site}",
|
||
"glp1LogSideEffect": "Log side effect",
|
||
"sideEffects": {
|
||
"section": "Efectos secundarios",
|
||
"addCta": "Registrar",
|
||
"sheetTitle": "Registrar un efecto secundario",
|
||
"categoryLabel": "Categoría",
|
||
"entryLabel": "Síntoma",
|
||
"severityLabel": "Gravedad",
|
||
"severity": {
|
||
"mild": "Leve",
|
||
"moderate": "Moderado",
|
||
"significant": "Notable",
|
||
"severe": "Grave",
|
||
"verySevere": "Muy grave"
|
||
},
|
||
"notesLabel": "Notas (opcional)",
|
||
"notesPlaceholder": "Lo que merezca la pena anotar, máx. 280 caracteres",
|
||
"submitCta": "Guardar",
|
||
"cancelCta": "Cancelar",
|
||
"emptyState": "Aún no hay efectos secundarios registrados. Hacer seguimiento puede ayudar a tu médico y revelar patrones a lo largo del tiempo.",
|
||
"recentTitle": "Últimos 30 días",
|
||
"loading": "Cargando…",
|
||
"deleteCta": "Eliminar",
|
||
"deleteConfirm": "¿Eliminar esta entrada?",
|
||
"errorSeverity": "La gravedad debe estar entre 1 y 5",
|
||
"errorEntry": "Elige un síntoma",
|
||
"categories": {
|
||
"gi": "Gastrointestinal",
|
||
"metabolic": "Metabólico",
|
||
"injectionSite": "Zona de inyección",
|
||
"cognitive": "Cognitivo",
|
||
"glp1Specific": "Específico de GLP-1"
|
||
},
|
||
"entries": {
|
||
"nausea": "Náusea",
|
||
"vomiting": "Vómito",
|
||
"diarrhea": "Diarrea",
|
||
"constipation": "Estreñimiento",
|
||
"abdominalPain": "Dolor abdominal",
|
||
"hypoglycemiaSymptoms": "Síntomas de hipoglucemia",
|
||
"dehydration": "Deshidratación",
|
||
"anorexia": "Pérdida de apetito",
|
||
"electrolyteFatigue": "Fatiga por desequilibrio electrolítico",
|
||
"injectionRedness": "Enrojecimiento en la zona de inyección",
|
||
"injectionSwelling": "Hinchazón en la zona de inyección",
|
||
"injectionBruising": "Hematoma en la zona de inyección",
|
||
"injectionInduration": "Induración en la zona de inyección",
|
||
"brainFog": "Niebla mental",
|
||
"dizziness": "Mareo",
|
||
"lowMood": "Estado de ánimo bajo",
|
||
"lowEnergy": "Falta de energía",
|
||
"earlySatiety": "Saciedad precoz",
|
||
"gastroparesisLike": "Vaciado gástrico lento",
|
||
"dysgeusia": "Alteración del gusto",
|
||
"gallbladderDiscomfort": "Molestia en la vesícula biliar"
|
||
}
|
||
},
|
||
"scheduling": {
|
||
"section": "Programa",
|
||
"loading": "Cargando datos del programa",
|
||
"loadFailed": "No se han podido cargar los datos del programa.",
|
||
"editCta": "Editar",
|
||
"reminders": {
|
||
"on": "Recordatorios activos",
|
||
"off": "Recordatorios desactivados"
|
||
},
|
||
"cadenceViz": {
|
||
"title": "Últimos 30 días",
|
||
"ariaTimeline": "Línea temporal de dosis de los últimos 30 días",
|
||
"emptyState": "No hay dosis programadas en este intervalo.",
|
||
"nextDoseLabel": "Próxima dosis:",
|
||
"noNextDose": "No hay ninguna dosis próxima programada.",
|
||
"status": {
|
||
"taken": "Tomada",
|
||
"skipped": "Omitida",
|
||
"missed": "Olvidada",
|
||
"upcoming": "Pendiente"
|
||
}
|
||
},
|
||
"compliance": {
|
||
"title": "Adherencia",
|
||
"noData": "Sin datos",
|
||
"adherenceRate": "Adherencia",
|
||
"currentStreak": "Racha actual",
|
||
"longestStreak": "Racha más larga",
|
||
"missedLast30": "Olvidadas (30 d.)",
|
||
"unit": {
|
||
"days": "d.",
|
||
"doses": "dosis"
|
||
},
|
||
"chips": {
|
||
"adherenceTooltip": "Proporción de dosis tomadas en los últimos 30 días (las dosis omitidas se excluyen del denominador).",
|
||
"streakTooltip": "Días consecutivos hasta hoy en los que se ha tomado o se ha omitido deliberadamente cada dosis programada.",
|
||
"longestTooltip": "Racha continua más larga dentro de la ventana de 30 días.",
|
||
"missedTooltip": "Número de dosis olvidadas en los últimos 30 días."
|
||
}
|
||
}
|
||
},
|
||
"titration": {
|
||
"section": "Escalado de titulación",
|
||
"loading": "Cargando datos de titulación",
|
||
"loadFailed": "No se pudieron cargar los datos de titulación.",
|
||
"drugLadderHeader": "Escalado estándar (referencia EMA)",
|
||
"typicalWeeksOnStep": "≥ {weeks} sem. típico",
|
||
"youAreHere": "Estás aquí",
|
||
"nextStepCaption": "Siguiente escalón (típico): {dose} mg tras ~{weeks} semanas en el escalón actual.",
|
||
"ceilingMessage": "Estás en el último escalón estándar.",
|
||
"escalationDueHint": "Llevas {weeks} semanas en este escalón; el esquema suele avanzar tras ~{typical} semanas.",
|
||
"currentStepDwell": "En este escalón desde hace {weeks} semanas",
|
||
"doseUnitMg": "mg",
|
||
"emptyState": "Aún no hay historial de dosis. Registra una dosis para ver tu posición en el escalado.",
|
||
"nonStandardDose": "La dosis actual está fuera de los escalones estándar.",
|
||
"disclaimer": "Valores de referencia EMA. Consulta a tu médico antes de cambiar la dosis.",
|
||
"emaSourceCta": "Fuente EMA",
|
||
"stepLabel": "Escalón {n}"
|
||
},
|
||
"injectionSiteBodyOutlineAriaLabel": "Silueta del cuerpo",
|
||
"injectionSitePickerAriaLabel": "Selector de sitio de inyección",
|
||
"siteAbdomenLeft": "Abdomen, lower left",
|
||
"siteAbdomenRight": "Abdomen, lower right",
|
||
"siteAbdomenUpperLeft": "Abdomen, upper left",
|
||
"siteAbdomenUpperRight": "Abdomen, upper right",
|
||
"siteThighLeft": "Left thigh",
|
||
"siteThighRight": "Right thigh",
|
||
"siteUpperArmLeft": "Left upper arm",
|
||
"siteUpperArmRight": "Right upper arm",
|
||
"sideEffectTagsHelp": "Tap a chip to add it to your mood-entry tags.",
|
||
"sideEffectTagNausea": "nausea",
|
||
"sideEffectTagConstipation": "constipation",
|
||
"sideEffectTagDiarrhea": "diarrhea",
|
||
"sideEffectTagFatigue": "fatigue",
|
||
"sideEffectTagAppetiteLoss": "appetite-loss",
|
||
"sideEffectTagHeartburn": "heartburn",
|
||
"sideEffectTagHeadache": "headache",
|
||
"newSchedule": "New schedule",
|
||
"removeSchedule": "Remove schedule",
|
||
"advancedEditing": "Advanced editing",
|
||
"advancedEditingHide": "Hide advanced editing",
|
||
"scheduleInterval": "Interval",
|
||
"scheduleEveryWeek": "every week",
|
||
"scheduleEveryNWeeks": "every {n} weeks",
|
||
"scheduleIntervalPrefix": "Interval:",
|
||
"nextSchedulePrefix": "Next schedule:",
|
||
"nextScheduleDaily": "daily",
|
||
"importIntakesAction": "Import intakes",
|
||
"apiEndpointAction": "API endpoint",
|
||
"pause": "Pause",
|
||
"activate": "Activate",
|
||
"disableNotifications": "Disable notifications",
|
||
"enableNotifications": "Enable notifications",
|
||
"purgeRecords": "Delete all records",
|
||
"formReset": "Reset form",
|
||
"createMedication": "Create medication",
|
||
"deleteConfirmDescription": "The medication and all intake history will be permanently deleted.",
|
||
"purgeConfirmTitle": "Delete all records?",
|
||
"purgeConfirmDescription": "All intake records for this medication will be permanently deleted. The medication itself will remain and start without history data.",
|
||
"saveError": "Error saving",
|
||
"deleteError": "Error deleting",
|
||
"purgeError": "Error deleting records",
|
||
"invalidTimestamp": "Please select a valid time.",
|
||
"noIntakesYet": "No intakes recorded yet",
|
||
"actions": "Acciones",
|
||
"pageInfo": "Página {page} de {total}",
|
||
"previousPage": "Previous page",
|
||
"nextPage": "Next page",
|
||
"loginRequiredIntakes": "Please sign in to view intakes.",
|
||
"phaseConfig": "Reminder phases",
|
||
"phaseConfigDescription": "Configure timing for reminders.",
|
||
"phaseGreen": "Green",
|
||
"phaseYellow": "Yellow",
|
||
"phaseOrange": "Orange",
|
||
"phaseRed": "Red",
|
||
"phaseMinutes": "Mín",
|
||
"phasePercent": "%",
|
||
"phaseBeforeEnd": "before end",
|
||
"phaseAfterEnd": "after end",
|
||
"phaseResetDefaults": "Reset to defaults",
|
||
"phaseSaved": "Reminder phases saved",
|
||
"phaseReset": "Reset to defaults",
|
||
"sourceWeb": "Website",
|
||
"sourceApi": "External API",
|
||
"sourceReminder": "Telegram / Reminder",
|
||
"sourceImport": "CSV Import",
|
||
"intakeHistoryEmptyTitle": "No intakes recorded yet",
|
||
"intakeHistoryEmptyDescription": "Log a dose on the daily intake page to start building the history.",
|
||
"intakeHistoryEmptyAction": "Open daily intake",
|
||
"intakeHistoryColTaken": "Taken",
|
||
"intakeHistoryColScheduled": "Scheduled",
|
||
"intakeHistoryColStatus": "Status",
|
||
"intakeHistoryColSource": "Source",
|
||
"intakeHistoryStatusTaken": "Taken",
|
||
"intakeHistoryStatusSkipped": "Skipped",
|
||
"intakeHistorySortByTaken": "Sort by taken time",
|
||
"intakeHistorySortByScheduled": "Sort by scheduled time",
|
||
"intakeHistoryPageInfo": "Page {page} of {total} · {count} entries",
|
||
"intakeHistoryPrev": "Previous",
|
||
"intakeHistoryNext": "Next",
|
||
"unitDrops": "Drops",
|
||
"unitTablets": "Tablet(s)",
|
||
"unitCapsules": "Capsule(s)",
|
||
"unitPieces": "Piece(s)",
|
||
"namePlaceholder": "e.g. Ibuprofen",
|
||
"dosePlaceholder": "e.g. 400",
|
||
"labelPlaceholder": "e.g. Morning",
|
||
"defaultDose": "Default",
|
||
"dayDeactivate": "Deactivate {day}",
|
||
"dayActivate": "Activate {day}",
|
||
"glp1": {
|
||
"drug": {
|
||
"tirzepatide": {
|
||
"name": "Tirzepatida"
|
||
},
|
||
"semaglutide": {
|
||
"name": "Semaglutida"
|
||
},
|
||
"liraglutide": {
|
||
"name": "Liraglutida"
|
||
},
|
||
"dulaglutide": {
|
||
"name": "Dulaglutida"
|
||
},
|
||
"exenatide": {
|
||
"name": "Exenatida"
|
||
}
|
||
}
|
||
},
|
||
"researchMode": {
|
||
"dialog": {
|
||
"title": "Activar el modo Investigación",
|
||
"intro": "El modo Investigación añade un gráfico estimado del nivel de fármaco a tu página de GLP-1. Lee el límite a continuación antes de activarlo: el gráfico es una ayuda de aprendizaje, nunca una medición, nunca un consejo médico.",
|
||
"whatItIsHeader": "Qué es esto",
|
||
"whatItIs": "Una curva en diente de sierra que simula la superposición de tus dosis registradas a lo largo del tiempo, usando el modelo de Bateman de un compartimento con los parámetros de absorción y semivida publicados en el EPAR de la EMA de cada agonista GLP-1 aprobado. El eje vertical es adimensional y sin etiquetas. La forma, no el número, es lo que muestra el gráfico.",
|
||
"whatItIsntHeader": "Qué no es",
|
||
"whatItIsnt": "No es un nivel en sangre. No es una medición. No es una predicción de cómo responde realmente tu cuerpo. No es base para ninguna decisión de dosis, tiempo o escalado. Para cualquier cosa que afecte cómo tomas tu medicación, habla con tu médico prescriptor.",
|
||
"whyEstimateHeader": "Por qué es una estimación",
|
||
"whyEstimate": "La farmacocinética poblacional describe al paciente típico. La variación individual es grande: el modelo Schneck/Urva 2024 de tirzepatida reporta aproximadamente un 22 % de variabilidad interindividual en la absorción y aproximadamente un 49 % en el volumen de distribución. Una curva de manual no puede capturar tu peso, tu función renal, tu técnica de inyección ni la precisión de tus horarios. Lee la curva como el ritmo de tu dosificación, no como tu nivel.",
|
||
"mdrBoundaryHeader": "Límite regulatorio",
|
||
"mdrBoundary": "HealthLog muestra datos regulatorios públicos y tus propios registros. La aplicación no predice, no diagnostica, no trata y no recomienda ninguna terapia. El Reglamento UE 2017/745 (Medical Device Regulation, MDR) y el documento de orientación MDCG 2021-24 trazan la línea con el software que interpreta datos con fines médicos: este gráfico se queda decididamente del lado educativo de esa línea. Si en algún momento sientes que te empuja hacia una decisión clínica, ciérralo.",
|
||
"citationsHeader": "Fuentes",
|
||
"citations": "European Public Assessment Reports de la EMA para Mounjaro, Ozempic, Wegovy, Saxenda, Trulicity, Byetta y Bydureon (Sección 5.2). Schneck K, Urva S. Population pharmacokinetics of the GIP/GLP receptor agonist tirzepatide. CPT Pharmacometrics Syst Pharmacol 2024;13(3):494-503 (DOI 10.1002/psp4.13099).",
|
||
"versionLine": "Versión del disclaimer: {version}",
|
||
"acknowledgeCta": "Entiendo — activar",
|
||
"cancelCta": "Cancelar",
|
||
"successToast": "Modo Investigación activado. La curva de nivel de fármaco es ahora visible en tu página de GLP-1.",
|
||
"errorToast": "No se pudo activar el modo Investigación. Inténtalo de nuevo.",
|
||
"staleVersionToast": "El disclaimer se actualizó desde que cargó esta página. Recarga para leer la versión actual."
|
||
},
|
||
"chart": {
|
||
"title": "Nivel de fármaco estimado",
|
||
"axisLabel": "Nivel estimado (relativo)",
|
||
"emptyState": "Sin tomas registradas todavía.",
|
||
"emptyStateCta": "Registra una dosis para ver la curva estimada cobrar forma.",
|
||
"estimateNote": "Estimación educativa a partir de la farmacocinética poblacional publicada por la EMA. No es una medición.",
|
||
"gatedTitle": "Modo Investigación desactivado",
|
||
"gatedBody": "Activa el modo Investigación en los ajustes para ver la curva estimada del nivel de fármaco. La curva es de inclusión voluntaria porque es una ayuda de aprendizaje, no una medición clínica.",
|
||
"gatedStaleTitle": "El disclaimer requiere reconfirmación",
|
||
"gatedStaleBody": "El disclaimer del modo Investigación se actualizó desde tu última confirmación. Relelo en los ajustes y confirma de nuevo para volver a ver la curva.",
|
||
"gatedCta": "Abrir el modo Investigación en los ajustes",
|
||
"unknownDrug": "{name} no está en el catálogo de GLP-1 aprobado por la EMA, por lo que HealthLog no puede trazar una curva de farmacocinética poblacional."
|
||
}
|
||
}
|
||
},
|
||
"charts": {
|
||
"loadingLabel": "Cargando la gráfica…",
|
||
"weight": "Peso",
|
||
"bloodPressure": "Tensión arterial",
|
||
"pulse": "Pulso",
|
||
"bodyFat": "Grasa corporal",
|
||
"sleep": "Sueño",
|
||
"steps": "Pasos",
|
||
"noData": "Sin datos en el periodo seleccionado",
|
||
"bucketWeekly": "Media semanal",
|
||
"bucketMonthly": "Media mensual",
|
||
"points7Label": "7 ptos",
|
||
"points7Title": "Últimos 7 puntos",
|
||
"points30Label": "30 ptos",
|
||
"points30Title": "Últimos 30 puntos",
|
||
"points90Label": "90 ptos",
|
||
"points90Title": "Últimos 90 puntos",
|
||
"pointsAllLabel": "Todos",
|
||
"pointsAllTitle": "Todos los puntos disponibles",
|
||
"systolic": "Sistólica",
|
||
"diastolic": "Diastólica",
|
||
"bodyWater": "Agua corporal",
|
||
"boneMass": "Masa ósea",
|
||
"spo2": "SpO₂",
|
||
"movingAverage7d": "Tendencia 7 días",
|
||
"avg7dShort": "7D",
|
||
"avg30dShort": "30D",
|
||
"trend7dShort": "Tendencia 7 días",
|
||
"trend": "Tendencia",
|
||
"perWeek": "/semana",
|
||
"totalDelta": "Total",
|
||
"colorGreen": "Verde:",
|
||
"colorOrange": "Naranja:",
|
||
"colorRed": "Rojo:",
|
||
"mood": "Estado de ánimo",
|
||
"moodScore": "Puntuación de ánimo",
|
||
"weekdays": {
|
||
"mon": "Lun",
|
||
"wed": "Mié",
|
||
"fri": "Vie",
|
||
"sun": "Dom"
|
||
},
|
||
"months": {
|
||
"jan": "Ene",
|
||
"feb": "Feb",
|
||
"mar": "Mar",
|
||
"apr": "Abr",
|
||
"may": "May",
|
||
"jun": "Jun",
|
||
"jul": "Jul",
|
||
"aug": "Ago",
|
||
"sep": "Sep",
|
||
"oct": "Oct",
|
||
"nov": "Nov",
|
||
"dec": "Dic"
|
||
},
|
||
"heatmapOnTime": "a tiempo",
|
||
"heatmapLate": "tarde",
|
||
"heatmapVeryLate": "muy tarde",
|
||
"legendOnTime": "A tiempo",
|
||
"legendLate": "Tarde",
|
||
"legendVeryLate": "Muy tarde",
|
||
"legendMissed": "Omitida",
|
||
"emptyStateTitle": "Registra más mediciones para ver tendencias",
|
||
"emptyStateDescription": "Registra al menos 3 entradas para desbloquear la línea de tendencia.",
|
||
"personalBaseline": "Tu media",
|
||
"deltaVsBaseline": "{delta} vs. tu media",
|
||
"deltaUnchanged": "coincide con tu media",
|
||
"deltaVsTarget": "{delta} vs. objetivo"
|
||
},
|
||
"chart": {
|
||
"overlay": {
|
||
"controls": {
|
||
"title": "Capas de la gráfica",
|
||
"trendIndicator": "Tendencia 7 días",
|
||
"trendArrow": "Flecha de tendencia",
|
||
"targetRange": "Rango objetivo",
|
||
"comparisonBaseline": "Comparación",
|
||
"comparisonUnavailable": "Sin periodo anterior disponible",
|
||
"tooltip": {
|
||
"openSettings": "Ajustes de capas de gráfica"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"comparison": {
|
||
"toggleLabel": "Comparar con",
|
||
"toggleHint": "Compara el periodo actual con el mismo periodo del año anterior.",
|
||
"baseline": {
|
||
"none": "Desactivado",
|
||
"lastMonth": "Mes anterior",
|
||
"lastYear": "Año anterior"
|
||
},
|
||
"captionLastMonth": "vs. mes anterior",
|
||
"captionLastYear": "vs. año anterior",
|
||
"deltaVs": {
|
||
"lastMonth": "{delta} vs. mes anterior",
|
||
"lastYear": "{delta} vs. año anterior"
|
||
},
|
||
"tooltipPrior": "Periodo anterior",
|
||
"unavailable": {
|
||
"lastMonth": "Comparación no disponible — sin datos del mes anterior",
|
||
"lastYear": "Comparación no disponible — sin datos del año anterior"
|
||
},
|
||
"notAvailableForCompliance": "Comparación no disponible para el cumplimiento"
|
||
},
|
||
"insights": {
|
||
"noAnalysisYet": "No analysis yet.",
|
||
"emptyTitle": "Not enough data yet",
|
||
"emptyDescription": "Insights light up once you've logged a handful of measurements. Start with weight or blood pressure.",
|
||
"emptyAddMeasurement": "Add a measurement",
|
||
"bmiEmptyTitle": "Set your height to see BMI",
|
||
"bmiEmptyDescription": "BMI needs your height. Add it under Settings → Account.",
|
||
"bmiEmptyAction": "Open account settings",
|
||
"noProviderConfigured": "Assessment unavailable.",
|
||
"startAnalysis": "Start analysis",
|
||
"refreshAnalysis": "Refresh analysis",
|
||
"keyTakeaway": "Key Takeaway",
|
||
"findingsTitle": "Findings",
|
||
"heroFindingPositive": "Top finding",
|
||
"heroFindingNeutral": "Top finding",
|
||
"heroFindingAttention": "Worth attention",
|
||
"heroFindingWarning": "Top alert",
|
||
"correlationsTitle": "Correlaciones",
|
||
"recommendationsTitle": "Recomendaciones",
|
||
"personalRecord": {
|
||
"badge": "PR",
|
||
"tooltip": "Récord personal: {value} {unit} el {date}"
|
||
},
|
||
"recommendation": {
|
||
"source": "Source",
|
||
"viewSource": "Open guideline in a new tab",
|
||
"rationale": "Why this recommendation",
|
||
"rationaleWindow": "Window",
|
||
"rationaleComparedTo": "Compared to",
|
||
"rationaleDeviation": "Deviation",
|
||
"rationaleExpand": "Show why",
|
||
"rationaleCollapse": "Hide why",
|
||
"legacyPayloadCta": "Insights updated — regenerate for new explainability features",
|
||
"feedbackHelpful": "Helpful",
|
||
"feedbackNotHelpful": "Not helpful",
|
||
"feedbackThanks": "Thanks for your feedback",
|
||
"feedbackConfirmed": "Feedback recorded",
|
||
"feedbackAlreadyRated": "Already rated",
|
||
"confidence": "Confidence",
|
||
"confidenceAria": "Confidence: {value} of 100",
|
||
"confidenceHigh": "High confidence",
|
||
"confidenceMedium": "Moderate confidence",
|
||
"confidenceLow": "Low confidence — based on limited data",
|
||
"confidenceDraft": "Draft"
|
||
},
|
||
"dataFoundation": "Data coverage",
|
||
"dataGaps": "Data gaps:",
|
||
"lastUpdated": "Last updated",
|
||
"confidenceHoch": "High",
|
||
"confidenceMittel": "Medium",
|
||
"confidenceGering": "Low",
|
||
"loadError": "Failed to load insights",
|
||
"heroGenerated": "Generated {time}",
|
||
"heroPersonalBaseline": "Based on your last 90 days",
|
||
"heroRegenerate": "Regenerate",
|
||
"heroRegenerating": "Regenerating",
|
||
"regenerateAnalysis": "Re-run analysis",
|
||
"regenerateSuccess": "Analysis refreshed",
|
||
"heroFallbackSubtitle": "A daily read of your trends, drawn straight from the numbers you've logged.",
|
||
"heroGreetingMorning": "Good morning",
|
||
"heroGreetingAfternoon": "Good afternoon",
|
||
"heroGreetingEvening": "Good evening",
|
||
"heroComingSoonTooltip": "Coming soon",
|
||
"heroActionAskCoach": "Ask the coach",
|
||
"healthScore": {
|
||
"label": "Health Score",
|
||
"progressAria": "Health Score progress",
|
||
"deltaVsLastWeek": "{delta} vs last week",
|
||
"deltaUnavailable": "No history yet — check back next week.",
|
||
"componentBp": "PA",
|
||
"componentWeight": "Peso",
|
||
"componentMood": "Estado de ánimo",
|
||
"componentCompliance": "Meds",
|
||
"disclaimer": "Indicative — not a clinical assessment.",
|
||
"deltaExplainer": {
|
||
"trigger": "¿Qué significa este cambio?",
|
||
"title": "Cómo se calcula el cambio",
|
||
"description": "Cambio respecto a la semana pasada: {delta}",
|
||
"body": "La puntuación combina PA, peso, ánimo y adherencia. Comparamos la puntuación de hoy con la del mismo momento de la semana anterior. Registra una medición nueva o una nota de ánimo para empujarla hacia arriba."
|
||
},
|
||
"provenance": {
|
||
"toggle": "Compuesto por",
|
||
"weightLabel": "peso",
|
||
"mixedBanner": "Algunos componentes combinan varias fuentes. El desglose muestra el valor más reciente por componente.",
|
||
"footnote": "Los pesos se reescalan según los datos realmente disponibles.",
|
||
"asOfLabel": "a fecha de {date}",
|
||
"provisional": "Provisional — sólo {count} de {total} entradas disponibles",
|
||
"provisionalBadge": "Provisional",
|
||
"sourceAria": "Fuente: {source}",
|
||
"sources": {
|
||
"manual": "Manual",
|
||
"withings": "Withings",
|
||
"appleHealth": "Apple Health",
|
||
"mixed": "Mixto",
|
||
"none": "Sin datos"
|
||
}
|
||
}
|
||
},
|
||
"suggestedPrompts": {
|
||
"label": "Try asking",
|
||
"whyMonday": "Why was BP higher on Monday?",
|
||
"weightVsPulse": "How did weight loss affect my pulse?",
|
||
"weekVsMonth": "Compare this week to last month",
|
||
"tellMyDoctor": "What should I tell my doctor?",
|
||
"medicationWorking": "Is my medication working?"
|
||
},
|
||
"dailyBriefing": {
|
||
"title": "Daily Briefing",
|
||
"keyFindingsTitle": "Key findings",
|
||
"emptyTitle": "No briefing yet",
|
||
"emptyDescription": "Generate today's briefing to get a narrative read of your trends.",
|
||
"emptyAction": "Generate briefing",
|
||
"loadingLabel": "Synthesising today's briefing"
|
||
},
|
||
"therapyTimeline": {
|
||
"title": "GLP-1 therapy timeline",
|
||
"description": "Chronological log of dose changes, injections, inventory events, and side-effect days.",
|
||
"empty": "No GLP-1 therapy events logged in the last 90 days.",
|
||
"doseTo": "dose set to",
|
||
"pens": "pens",
|
||
"sideEffects": "Side effects"
|
||
},
|
||
"trendsRow": {
|
||
"title": "Tendencias",
|
||
"subtitle": "Last 30 days at a glance"
|
||
},
|
||
"vo2Max": {
|
||
"statLatest": "Latest",
|
||
"statMin": "Min",
|
||
"statMax": "Max",
|
||
"empty": "No VO₂ max data yet — sync Apple Health to populate this view."
|
||
},
|
||
"trendAnnotation": {
|
||
"emptyBp": "Awaiting more data to annotate this trend.",
|
||
"emptyWeight": "Awaiting more data to annotate this trend.",
|
||
"emptyMood": "Awaiting more data to annotate this trend.",
|
||
"confidenceHigh": "High confidence",
|
||
"confidenceModerate": "Moderate confidence",
|
||
"confidenceLow": "Low confidence",
|
||
"pendingLabel": "Generating trend commentary"
|
||
},
|
||
"correlationRow": {
|
||
"title": "Relationships",
|
||
"subtitle": "Pre-defined hypotheses, gated on n ≥ 14 and p < 0.05",
|
||
"disclaimer": "Relationships are observational, not causal — talk to your doctor if BP runs high.",
|
||
"experimentCta": "Try a 7-day experiment",
|
||
"experimentTooltip": "Coming soon",
|
||
"emptyTitle": "Need more data to see this relationship",
|
||
"sourceChip": "based on {n} paired readings · {window}",
|
||
"sourceWindowLast30": "Últimos 30 días",
|
||
"confidenceHigh": "High confidence",
|
||
"confidenceModerate": "Moderate confidence",
|
||
"confidenceLow": "Low confidence",
|
||
"card": {
|
||
"bpComplianceTitle": "BP × medication compliance",
|
||
"bpComplianceSubtitle": "Daily systolic against compliance %",
|
||
"moodPulseTitle": "Mood × resting pulse",
|
||
"moodPulseSubtitle": "Same-day mood and resting pulse",
|
||
"weightWeekdayTitle": "Weight × weekday",
|
||
"weightWeekdaySubtitle": "Weight grouped by day of week"
|
||
}
|
||
},
|
||
"coach": {
|
||
"refusalOutOfScope": "I can only help with the health metrics in your log — measurements, medications, mood, trends. I cannot answer questions outside that scope.",
|
||
"refusalInjection": "I noticed wording that tries to override my instructions. I am the HealthLog Coach and only summarise your own health data — please rephrase your question in those terms.",
|
||
"errorBudget": "You've reached today's Coach usage limit. The budget refreshes at midnight UTC.",
|
||
"errorProvider": "The Coach could not reach an Insights provider just now. Please try again in a moment.",
|
||
"tagline": "Personal health coach, grounded in your data.",
|
||
"newChat": "New chat",
|
||
"send": "Send",
|
||
"thinking": "Thinking…",
|
||
"composerPlaceholder": "Ask anything about your data…",
|
||
"composerHint": "Press Enter to send, Shift+Enter for a new line.",
|
||
"composerDisclaimer": "Coach replies are generated. Clinical decisions belong with your doctor.",
|
||
"voiceComingSoon": "Voice input arrives with the iOS app in v1.5.",
|
||
"threadEmpty": "Ask anything about your trends, medications, or readings to start a conversation.",
|
||
"historyTitle": "Conversations",
|
||
"historySearchPlaceholder": "Search conversations…",
|
||
"historyEmpty": "Your conversations will appear here. Ask anything to start.",
|
||
"historyDeleteAria": "Delete conversation",
|
||
"historyDeleteConfirm": "Delete this conversation? This cannot be undone.",
|
||
"sourcesTitle": "What I can see",
|
||
"sourcesFresh": "Fresh",
|
||
"sourcesStale": "Stale",
|
||
"sourcesFooter": "The Coach reads only the data you've connected.",
|
||
"evidenceLabel": "What I'm looking at",
|
||
"metric": {
|
||
"bp": "Presión arterial",
|
||
"weight": "Peso",
|
||
"pulse": "Pulso",
|
||
"mood": "Estado de ánimo",
|
||
"compliance": "Cumplimiento",
|
||
"general": "General",
|
||
"hrv": "HRV",
|
||
"sleep": "Sueño",
|
||
"resting_hr": "Resting HR",
|
||
"steps": "Pasos",
|
||
"active_energy": "Active energy",
|
||
"flights": "Flights climbed",
|
||
"distance": "Distance",
|
||
"vo2_max": "VO₂ max",
|
||
"body_temp": "Body temperature",
|
||
"medications": "Medications",
|
||
"anthropometrics": "Profile (height, age, gender)"
|
||
},
|
||
"window": {
|
||
"last7days": "Últimos 7 días",
|
||
"last30days": "Últimos 30 días",
|
||
"last90days": "Últimos 90 días",
|
||
"lastYear": "lo que va de año",
|
||
"allTime": "Todo el tiempo"
|
||
},
|
||
"windowLabel": "Window",
|
||
"settingsAriaLabel": "Coach settings",
|
||
"settingsTitle": "Coach settings",
|
||
"settingsDescription": "Tune how the Coach talks with you.",
|
||
"settingsToneLabel": "Tone",
|
||
"settingsToneWarm": "Warm",
|
||
"settingsToneNeutral": "Neutral",
|
||
"settingsToneConcise": "Concise",
|
||
"settingsVerbosityLabel": "Reply length",
|
||
"settingsVerbosityBrief": "Brief",
|
||
"settingsVerbosityDefault": "Default",
|
||
"settingsVerbosityDetailed": "Detailed",
|
||
"settingsExcludeLabel": "Exclude metrics",
|
||
"settingsExcludeHint": "The Coach will not see data for selected metrics.",
|
||
"settingsEvidenceLabel": "Show evidence by default",
|
||
"settingsEvidenceHint": "Open the disclosure under every reply automatically.",
|
||
"settingsDefaultWindowLabel": "Default analysis window",
|
||
"settingsDefaultWindowHint": "The Coach reads this much history per chat unless you override it from the drawer header.",
|
||
"settingsSave": "Guardar",
|
||
"settingsSaved": "Guardado.",
|
||
"settingsCancel": "Cancelar",
|
||
"feedbackHelpful": "Helpful",
|
||
"feedbackUnhelpful": "Not quite",
|
||
"feedbackThanks": "Thanks for the signal.",
|
||
"dailyLimitTitle": "Daily limit reached",
|
||
"dailyLimitBody": "Daily limit reached; resets at 00:00 UTC.",
|
||
"providerRateLimitTitle": "Provider rate-limited",
|
||
"providerRateLimitBody": "Provider temporarily rate-limited; retry in ~5 min.",
|
||
"settingsContextLabel": "Include context",
|
||
"settingsContextHint": "Optional blocks the Coach can lean on. Switch one off and the block is dropped from every turn."
|
||
},
|
||
"relativeJustNow": "just now",
|
||
"relativeMinutesAgo": "{count} minutes ago",
|
||
"relativeHoursAgo": "{count} hours ago",
|
||
"relativeDaysAgo": "{count} days ago",
|
||
"navOverview": "Resumen",
|
||
"navBloodPressure": "Presión arterial",
|
||
"navWeight": "Peso",
|
||
"navPulse": "Pulso",
|
||
"navMood": "Estado de ánimo",
|
||
"navMedication": "Medicamento",
|
||
"navBmi": "IMC",
|
||
"navSleep": "Sueño",
|
||
"navHrv": "VFC",
|
||
"navRestingHr": "FC reposo",
|
||
"navOxygenSaturation": "Oxígeno",
|
||
"navBodyTemperature": "Temperatura",
|
||
"navActiveEnergy": "Energía activa",
|
||
"navAriaLabel": "Skip to section",
|
||
"tabStrip": {
|
||
"vitalsParent": {
|
||
"label": "Vitales",
|
||
"header": "Constantes vitales"
|
||
}
|
||
},
|
||
"hrv": {
|
||
"title": "VFC",
|
||
"description": "Variabilidad de la frecuencia cardíaca a lo largo del tiempo — señal de recuperación del sistema nervioso, captada por la noche por Apple Watch y otros wearables compatibles.",
|
||
"chartTitle": "Variabilidad de la frecuencia cardíaca",
|
||
"emptyState": {
|
||
"title": "Aún no hay valores de VFC",
|
||
"description": "Los valores de VFC aparecerán aquí en cuanto Apple Watch (o un dispositivo Withings compatible) sincronice las mediciones nocturnas."
|
||
}
|
||
},
|
||
"restingHr": {
|
||
"title": "FC en reposo",
|
||
"description": "El nivel basal diario del corazón — distinto del pulso puntual de la página de pulso. Apple Salud aporta un valor al día.",
|
||
"chartTitle": "Frecuencia cardíaca en reposo",
|
||
"emptyState": {
|
||
"title": "Aún no hay FC en reposo",
|
||
"description": "La FC en reposo aparece cuando Apple Watch o un Withings compatible ha llevado puesto un día tranquilo."
|
||
}
|
||
},
|
||
"oxygenSaturation": {
|
||
"title": "Saturación de oxígeno",
|
||
"description": "Oxígeno en sangre (SpO₂) — rango clínico normal 95–100 %, con zonas objetivo sombreadas en el gráfico.",
|
||
"chartTitle": "Saturación de oxígeno",
|
||
"emptyState": {
|
||
"title": "Aún no hay muestras de SpO₂",
|
||
"description": "Las muestras de SpO₂ llegan aquí en cuanto un wearable compatible (Apple Watch, Withings ScanWatch) capture una lectura."
|
||
}
|
||
},
|
||
"bodyTemperature": {
|
||
"title": "Temperatura corporal",
|
||
"description": "Tendencia de temperatura corporal central en grados Celsius. La temperatura cutánea de Withings vive en una métrica distinta.",
|
||
"chartTitle": "Temperatura corporal",
|
||
"emptyState": {
|
||
"title": "Aún no hay temperatura corporal",
|
||
"description": "Registra una lectura o deja que tu wearable sincronice una — la tendencia aparecerá aquí.",
|
||
"cta": "Registrar temperatura corporal"
|
||
}
|
||
},
|
||
"activeEnergy": {
|
||
"title": "Energía activa",
|
||
"description": "Total diario de energía activa en kilocalorías — una fila por día, desde Apple Salud o la actividad de Withings.",
|
||
"chartTitle": "Energía activa",
|
||
"emptyState": {
|
||
"title": "Aún no hay datos de energía activa",
|
||
"description": "Los totales de energía activa aparecerán aquí en cuanto Apple Salud o un dispositivo de actividad Withings sincronice un día completo."
|
||
}
|
||
},
|
||
"subPage": {
|
||
"blutdruckDescription": "Your systolic / diastolic trend with age-personalised target zones and a written assessment.",
|
||
"gewichtDescription": "Weight trend mapped against your height-derived healthy band, plus a written assessment.",
|
||
"pulsDescription": "Resting pulse vs. the personalised Karvonen target band, plus a written assessment.",
|
||
"stimmungDescription": "Daily mood scores over time with a written assessment.",
|
||
"stimmungEmptyTitle": "Log your first mood",
|
||
"stimmungEmptyDescription": "Mood insights light up once you've logged a few entries. Tap below to get started.",
|
||
"stimmungEmptyAction": "Open mood journal",
|
||
"medikamenteDescription": "Per-medication adherence calendars and a written assessment.",
|
||
"medikamenteEmptyTitle": "Add your first medication",
|
||
"medikamenteEmptyDescription": "Compliance insights need at least one tracked medication.",
|
||
"medikamenteEmptyAction": "Open medications",
|
||
"therapyTimelineDescription": "Chronological GLP-1 therapy log — dose changes, injections, inventory, side effects.",
|
||
"bmiDescription": "BMI derived from your weight and height, with a written assessment."
|
||
},
|
||
"sleep": {
|
||
"title": "Sueño",
|
||
"description": "Desglose por fases y duración nocturna, tomados de Apple Health.",
|
||
"headlineTitle": "Average per night",
|
||
"headlineCaption": "Averaged across {count} nights — {suffix}",
|
||
"headlineCaptionSuffix": "por noche",
|
||
"compositionTitle": "Stage composition",
|
||
"compositionSubtitle": "Last {nights} nights",
|
||
"compositionAriaLabel": "Sleep stage composition over {nights} nights",
|
||
"stages": {
|
||
"deep": "Deep",
|
||
"rem": "REM",
|
||
"core": "Core",
|
||
"asleep": "Asleep",
|
||
"awake": "Awake",
|
||
"inBed": "In bed",
|
||
"unavailable": "No stage data yet — Apple Health stage syncing arrives in v1.5."
|
||
},
|
||
"empty": {
|
||
"title": "No sleep data yet",
|
||
"description": "Apple Health sync arrives in v1.5 and will fill this in automatically.",
|
||
"action": "Manage devices"
|
||
}
|
||
},
|
||
"correlations": "Correlations",
|
||
"medicationCompliance": "Medication Compliance",
|
||
"dayStreak": "{count} day streak",
|
||
"compliance7d": "7-day compliance",
|
||
"compliance30d": "30-day compliance",
|
||
"taken": "Tomada",
|
||
"skipped": "Omitida",
|
||
"missed": "Perdida",
|
||
"generalStatusBadge": {
|
||
"good": "Bien",
|
||
"watch": "Watch",
|
||
"critical": "Critical"
|
||
},
|
||
"assessmentTitle": "Assessment",
|
||
"bloodPressureSectionTitle": "Presión arterial",
|
||
"weightSectionTitle": "Peso",
|
||
"pulseSectionTitle": "Pulso",
|
||
"bmiSectionTitle": "IMC",
|
||
"complianceNoData": "No compliance data available.",
|
||
"generate": "Generate new analysis",
|
||
"moodSectionTitle": "Estado de ánimo",
|
||
"confidence": "Confidence",
|
||
"cached": "Cached",
|
||
"emptyState": {
|
||
"bloodPressure": {
|
||
"title": "Aún no hay registros de presión arterial",
|
||
"description": "Registra una medición de presión y aquí aparecerán la tendencia, el porcentaje en rango y la clasificación de la OMS.",
|
||
"cta": "Registrar presión"
|
||
},
|
||
"weight": {
|
||
"title": "Aún no hay registros de peso",
|
||
"description": "Registra un peso y aparecerán automáticamente la tendencia, la media móvil y la zona objetivo.",
|
||
"cta": "Registrar peso"
|
||
},
|
||
"pulse": {
|
||
"title": "Aún no hay registros de pulso",
|
||
"description": "Registra un pulso y aquí aparecerán pulso en reposo, VFC y VO₂ máx.",
|
||
"cta": "Registrar pulso"
|
||
},
|
||
"bmi": {
|
||
"title": "IMC aún no calculado",
|
||
"description": "Cuando haya altura y al menos un registro de peso, aquí aparecerá la tendencia del IMC con las zonas de la OMS.",
|
||
"cta": "Registrar peso"
|
||
},
|
||
"mood": {
|
||
"title": "Aún no hay entradas de estado de ánimo",
|
||
"description": "Registra un estado de ánimo y aparecerán la tendencia, la banda de estabilidad y las correlaciones.",
|
||
"cta": "Registrar ánimo"
|
||
},
|
||
"medication": {
|
||
"title": "Aún no hay medicamentos configurados",
|
||
"description": "Configura un medicamento y aquí aparecerán la adherencia, el nivel plasmático y la titulación.",
|
||
"cta": "Añadir medicamento"
|
||
},
|
||
"sleep": {
|
||
"title": "Aún no hay registros de sueño",
|
||
"description": "Una vez disponibles los datos de sueño (manual o vía Withings / Apple Health), aquí aparecerá el desglose por fases.",
|
||
"cta": "Conectar Withings"
|
||
}
|
||
},
|
||
"navWorkouts": "Entrenamientos",
|
||
"workouts": {
|
||
"title": "Entrenamientos",
|
||
"description": "Carreras, salidas en bici, paseos y sesiones de fuerza recientes, deduplicados entre Apple Watch y Withings.",
|
||
"emptyState": {
|
||
"title": "Aún no hay entrenamientos",
|
||
"description": "Abre la app Apple Salud en el iPhone para sincronizar tus entrenamientos. La importación de actividad de Withings también incorpora caminatas y rutas en bici."
|
||
},
|
||
"row": {
|
||
"duration": "Duración",
|
||
"distance": "Distancia",
|
||
"energy": "Energía activa"
|
||
},
|
||
"detail": {
|
||
"backToList": "Volver a entrenamientos",
|
||
"statsTitle": "Estadísticas",
|
||
"statsDuration": "Duración",
|
||
"statsDistance": "Distancia",
|
||
"statsActiveEnergy": "Energía activa",
|
||
"statsAvgHr": "FC media",
|
||
"statsMaxHr": "FC máx.",
|
||
"statsMinHr": "FC mín.",
|
||
"statsStepCount": "Pasos",
|
||
"statsElevation": "Desnivel",
|
||
"statsPace": "Ritmo",
|
||
"statsSource": "Fuente",
|
||
"routeTitle": "Ruta",
|
||
"routeUnavailable": "No se registró una ruta GPS para este entrenamiento.",
|
||
"hrChartTitle": "Frecuencia cardíaca",
|
||
"hrChartUnavailable": "Las muestras de frecuencia cardíaca por segundo no se almacenan para este entrenamiento.",
|
||
"notFound": "Entrenamiento no encontrado.",
|
||
"loading": "Cargando entrenamiento…"
|
||
},
|
||
"sport": {
|
||
"walking": "Caminar",
|
||
"running": "Correr",
|
||
"cycling": "Bici",
|
||
"hiking": "Senderismo",
|
||
"swimming": "Natación",
|
||
"rowing": "Remo",
|
||
"elliptical": "Elíptica",
|
||
"stairClimber": "Escalera",
|
||
"yoga": "Yoga",
|
||
"mindAndBody": "Mente y cuerpo",
|
||
"strength": "Fuerza",
|
||
"hiit": "HIIT",
|
||
"dance": "Baile",
|
||
"golf": "Golf",
|
||
"tennis": "Tenis",
|
||
"basketball": "Baloncesto",
|
||
"soccer": "Fútbol",
|
||
"crossTraining": "Entreno cruzado",
|
||
"mixedCardio": "Cardio mixto",
|
||
"other": "Otro"
|
||
}
|
||
}
|
||
},
|
||
"thresholds": {
|
||
"defaultLabel": "Por defecto",
|
||
"autoModeLabel": "Auto",
|
||
"overrideModeLabel": "Personalizado",
|
||
"overrideToggleLabel": "Valores propios",
|
||
"resetAction": "Restablecer valor por defecto",
|
||
"resetAllAction": "Restablecer todos los valores",
|
||
"minLabel": "Mín",
|
||
"maxLabel": "Máx",
|
||
"unitSuffix": "({unit})",
|
||
"outOfBoundsHint": "Rango permitido: {min}–{max} {unit}",
|
||
"overrideWarning": "Los valores fuera de las guías clínicas pueden dar objetivos poco saludables. Personaliza solo tras consultar con tu médico.",
|
||
"saveSuccess": "Objetivos actualizados",
|
||
"saveError": "No se han podido guardar los objetivos",
|
||
"resetSuccess": "Restablecido al valor por defecto",
|
||
"sourceOverride": "Valor propio",
|
||
"metricWeight": "Peso",
|
||
"metricBpSys": "Tensión arterial (sistólica)",
|
||
"metricBpDia": "Tensión arterial (diastólica)",
|
||
"metricPulse": "Pulso en reposo",
|
||
"metricBodyFat": "Grasa corporal",
|
||
"metricSleep": "Duración del sueño",
|
||
"metricSteps": "Pasos/día",
|
||
"metricGlucoseFasting": "Glucemia — en ayunas",
|
||
"metricGlucosePostprandial": "Glucemia — posprandial",
|
||
"metricGlucoseRandom": "Glucemia — cualquiera",
|
||
"metricGlucoseBedtime": "Glucemia — antes de dormir",
|
||
"metricBodyWater": "Agua corporal",
|
||
"metricBoneMass": "Masa ósea",
|
||
"metricOxygenSaturation": "Saturación de oxígeno (SpO₂)",
|
||
"unsetExplanation": "Sin valor propio — se aplica el valor por defecto calculado."
|
||
},
|
||
"onboarding": {
|
||
"errorGeneric": "Something went wrong while finishing setup. Please try again.",
|
||
"tour": {
|
||
"stepOf": "Paso {current} de {total}",
|
||
"next": "Siguiente",
|
||
"back": "Atrás",
|
||
"skip": "Skip tour",
|
||
"done": "Got it",
|
||
"restart": "Restart onboarding tour",
|
||
"restartHint": "Replay the dashboard walkthrough from the start.",
|
||
"restartConfirmation": "Tour will restart on your next dashboard visit.",
|
||
"steps": {
|
||
"tileStrip": {
|
||
"title": "Your daily numbers",
|
||
"body": "The tile strip shows the latest reading and a 7-day trend for every metric you log — weight, blood pressure, pulse, mood. Hide what you don't need from Settings → Dashboard."
|
||
},
|
||
"quickAdd": {
|
||
"title": "Log anything in two taps",
|
||
"body": "Use the Add button to drop a measurement or mood entry without leaving the dashboard. The form remembers your last context and tags."
|
||
},
|
||
"insights": {
|
||
"title": "Automatic insights",
|
||
"body": "Insights turns your readings into a plain-English health summary, with classifications for blood pressure, weight trend and mood. Bring your own provider key or use the built-in default."
|
||
},
|
||
"integrations": {
|
||
"title": "Connect your devices",
|
||
"body": "Open Settings to link Withings (auto-sync weight, BP and pulse), moodLog, or your Insights provider. Everything stays optional and encrypted."
|
||
},
|
||
"achievements": {
|
||
"title": "Earn streaks and badges",
|
||
"body": "The Achievements page tracks daily logging streaks, blood-pressure milestones and consistency badges. A small nudge to keep going."
|
||
}
|
||
}
|
||
},
|
||
"shell": {
|
||
"back": "Atrás",
|
||
"skip": "Omitir",
|
||
"next": "Continuar",
|
||
"step1of4": "Paso 1 de 4",
|
||
"step2of4": "Paso 2 de 4",
|
||
"step3of4": "Paso 3 de 4",
|
||
"step4of4": "Paso 4 de 4"
|
||
},
|
||
"goals": {
|
||
"title": "¿Qué te gustaría registrar?",
|
||
"body": "Elige las áreas que te interesan. El panel y los recordatorios se ajustarán a tu elección.",
|
||
"helpHint": "Una a tres prioridades suelen funcionar mejor — siempre podrás añadir más más adelante.",
|
||
"options": {
|
||
"weightManagement": "Control del peso",
|
||
"bpTracking": "Presión arterial",
|
||
"glucoseTracking": "Glucosa",
|
||
"sleepImprovement": "Mejor sueño",
|
||
"medicationCompliance": "Medicamentos",
|
||
"generalWellness": "Bienestar general"
|
||
}
|
||
},
|
||
"source": {
|
||
"title": "Conectar una fuente",
|
||
"body": "Importa las mediciones automáticamente o sigue con la entrada manual, tú decides.",
|
||
"recommended": "Recomendado",
|
||
"manual": {
|
||
"title": "Entrada manual",
|
||
"body": "Registra tus mediciones tú mismo cuando te venga bien. Funciona en cualquier dispositivo, sin cuenta de terceros."
|
||
},
|
||
"withings": {
|
||
"title": "Withings",
|
||
"body": "Las básculas, los tensiómetros y los trackers de Withings se sincronizan automáticamente.",
|
||
"cta": "Conectar Withings"
|
||
},
|
||
"appleHealth": {
|
||
"title": "Apple Health",
|
||
"body": "Los datos del iPhone y el Apple Watch llegan a través de la app de HealthLog para iOS.",
|
||
"badge": "Con la v1.5 (iOS)",
|
||
"disabledHint": "Disponible cuando se publique la app de iOS."
|
||
}
|
||
},
|
||
"baseline": {
|
||
"title": "Cuéntanos sobre ti",
|
||
"body": "Cuatro campos opcionales afinan los valores objetivo, el IMC y los recordatorios. Podrás ajustarlo todo más tarde desde Ajustes.",
|
||
"displayNameLabel": "Nombre para mostrar",
|
||
"displayNamePlaceholder": "¿Cómo debería llamarte HealthLog?",
|
||
"displayNameHint": "Aparece en el saludo del panel y en los informes.",
|
||
"heightLabel": "Altura (cm)",
|
||
"genderLabel": "Sexo",
|
||
"genderNone": "Prefiero no decirlo",
|
||
"genderMale": "Hombre",
|
||
"genderFemale": "Mujer",
|
||
"dateOfBirthLabel": "Fecha de nacimiento",
|
||
"dateOfBirthHint": "Se utiliza solo para análisis sensibles a la edad.",
|
||
"saveCta": "Guardar y continuar"
|
||
},
|
||
"done": {
|
||
"title": "Todo listo",
|
||
"body": "Bienvenido a bordo. Tu panel ya está preparado.",
|
||
"returnCta": "Abrir el panel"
|
||
},
|
||
"welcomeBack": {
|
||
"title": "Bienvenido de nuevo",
|
||
"body": "Ya completaste la configuración inicial. Para cambiar algo, abre Ajustes — todo lo que configuraste se puede editar desde ahí.",
|
||
"cta": "Abrir el panel"
|
||
}
|
||
},
|
||
"gettingStarted": {
|
||
"title": "Getting started",
|
||
"subtitle": "Quick wins to get the most out of HealthLog.",
|
||
"progress": "{done} de {total} hecho",
|
||
"dismissAll": "Hide checklist",
|
||
"dismissTooltip": "Hide this item",
|
||
"items": {
|
||
"profileTitle": "Set your profile",
|
||
"profileDescription": "Height, date of birth and gender unlock personalised targets.",
|
||
"profileCta": "Open profile",
|
||
"measurementTitle": "Log your first measurement",
|
||
"measurementDescription": "One reading is enough to draw your first trend tile.",
|
||
"measurementCta": "Add measurement",
|
||
"medicationTitle": "Add a medication",
|
||
"medicationDescription": "Track compliance and get reminders right when you need them.",
|
||
"medicationCta": "Add medication",
|
||
"withingsTitle": "Connect Withings (optional)",
|
||
"withingsDescription": "Auto-sync weight, BP and pulse from your Withings devices.",
|
||
"withingsCta": "Connect",
|
||
"notificationsTitle": "Configure notifications",
|
||
"notificationsDescription": "Choose how HealthLog should remind you — Telegram, ntfy or Web Push.",
|
||
"notificationsCta": "Open notifications"
|
||
}
|
||
},
|
||
"trendHints": {
|
||
"title": "Primera tendencia tras 5 mediciones",
|
||
"remainingOne": "Falta 1 medición para la tendencia.",
|
||
"remainingMany": "Faltan {count} mediciones para la tendencia."
|
||
},
|
||
"settings": {
|
||
"researchMode": {
|
||
"sectionTitle": "Modo Investigación",
|
||
"subtitle": "Visualización opcional de una curva estimada del nivel de fármaco GLP-1, derivada de la farmacocinética poblacional publicada por la EMA. Solo lectura: nunca una medición ni un consejo médico.",
|
||
"toggleLabel": "Mostrar la curva estimada del nivel de fármaco",
|
||
"disabledStatus": "Desactivado. La curva está oculta.",
|
||
"enabledStaleStatus": "El disclaimer se actualizó. Reconfirma debajo para volver a mostrar la curva.",
|
||
"acknowledgedOn": "Confirmado el {date}.",
|
||
"rePromptTitle": "Disclaimer actualizado",
|
||
"rePromptBody": "El disclaimer del modo Investigación se actualizó desde tu última confirmación. Relelo y reconfirma para mantener la curva visible.",
|
||
"rePromptCta": "Reconfirmar disclaimer",
|
||
"disableError": "No se pudo desactivar el modo Investigación. Inténtalo de nuevo."
|
||
},
|
||
"shell": {
|
||
"sectionsNav": "Settings sections"
|
||
},
|
||
"sections": {
|
||
"account": {
|
||
"title": "Cuenta",
|
||
"description": "Profile, password, passkeys, and your onboarding tour."
|
||
},
|
||
"integrations": {
|
||
"title": "Integraciones",
|
||
"description": "Withings, moodLog, and other connected services."
|
||
},
|
||
"notifications": {
|
||
"title": "Canales de notificación",
|
||
"description": "Live overview of every configured channel."
|
||
},
|
||
"dashboard": {
|
||
"title": "Panel",
|
||
"description": "Tile layout and order."
|
||
},
|
||
"thresholds": {
|
||
"title": "Objetivos y fuentes",
|
||
"description": "Por métrica: tu propio rango objetivo y qué fuente prevalece cuando varias registran el mismo valor el mismo día."
|
||
},
|
||
"sources": {
|
||
"title": "Sources",
|
||
"description": "Pick which ingest source wins when more than one records the same metric for the same day.",
|
||
"redirectNotice": "Las fuentes ahora forman parte de «Objetivos y fuentes».",
|
||
"cardTitle": "Source priority by metric",
|
||
"help": "When more than one source delivers the same value on the same day (e.g. Withings and Apple Health both report 1,200 steps), the top source counts as the canonical reading. Other sources stay stored for the audit trail.",
|
||
"resetDefaults": "Reset to defaults",
|
||
"moveUp": "Move up",
|
||
"moveDown": "Move down",
|
||
"saveSuccess": "Source priority saved.",
|
||
"saveError": "Saving the source priority failed.",
|
||
"resetSuccess": "Source priority reset to defaults.",
|
||
"perMetricToggle": "Per-metric overrides ({count})",
|
||
"perMetricHelp": "Metrics you have customised away from the default ladder. Use this list to roll any single metric back to its constant default without touching the rest.",
|
||
"perMetricEmpty": "No per-metric overrides set — every metric uses the global ladder above.",
|
||
"resetMetric": "Restablecer",
|
||
"deviceTypeToggle": "Device-type priority ({count})",
|
||
"deviceTypeHelp": "Within a source, which device wins. When an Apple Watch and an iPhone both record steps, the higher-ranked device-type counts as the canonical reading.",
|
||
"deviceTypeDefault": "Default device-type ladder",
|
||
"resetDeviceTypes": "Reset device-types",
|
||
"metrics": {
|
||
"steps": "Pasos",
|
||
"activeEnergy": "Active energy",
|
||
"walkingRunningDistance": "Walking + running distance",
|
||
"flightsClimbed": "Flights climbed",
|
||
"sleep": "Sueño",
|
||
"weight": "Peso",
|
||
"bloodPressure": "Presión arterial",
|
||
"pulse": "Pulso",
|
||
"bodyFat": "Grasa corporal",
|
||
"bodyTemperature": "Body temperature",
|
||
"spo2": "Oxygen saturation",
|
||
"hrv": "Heart-rate variability",
|
||
"restingHeartRate": "Frecuencia cardíaca en reposo",
|
||
"vo2Max": "VO2 max"
|
||
},
|
||
"sourceLabels": {
|
||
"WITHINGS": "Withings",
|
||
"APPLE_HEALTH": "Apple Health",
|
||
"MANUAL": "Manual entry",
|
||
"IMPORT": "Importar"
|
||
},
|
||
"deviceLabels": {
|
||
"watch": "Watch",
|
||
"band": "Band",
|
||
"ring": "Ring",
|
||
"phone": "Phone",
|
||
"scale": "Scale",
|
||
"other": "Other",
|
||
"unknown": "Desconocido"
|
||
}
|
||
},
|
||
"ai": {
|
||
"title": "Insights",
|
||
"description": "Provider, model, key."
|
||
},
|
||
"api": {
|
||
"title": "API & Tokens",
|
||
"description": "Bearer tokens for your own scripts and apps — log measurements or medication intake from anywhere."
|
||
},
|
||
"advanced": {
|
||
"title": "Avanzado",
|
||
"description": "Activador opt-in del modo Investigación y zona de peligro para borrar irrevocablemente todos los registros de salud."
|
||
},
|
||
"export": {
|
||
"title": "Exportar",
|
||
"description": "Download your health data as PDF, CSV, or a full JSON backup.",
|
||
"otherOptionsHeading": "Otras opciones de exportación",
|
||
"hero": {
|
||
"eyebrow": "Cita médica",
|
||
"valueStatement": "Un informe PDF imprimible para tu cita médica — constantes, IMC, clasificación de la tensión, cumplimiento de la medicación y (opcionalmente) el estado de ánimo, en pocas páginas.",
|
||
"cta": "Configurar y generar informe",
|
||
"formatHint": "PDF · listo para imprimir"
|
||
},
|
||
"actions": {
|
||
"download": "Download"
|
||
},
|
||
"filters": {
|
||
"since": "Desde",
|
||
"until": "Until"
|
||
},
|
||
"cards": {
|
||
"doctorReport": {
|
||
"title": "Doctor Report",
|
||
"description": "Printable PDF for the doctor's appointment — vitals, BMI, BP classification, medication compliance, mood."
|
||
},
|
||
"measurementsCsv": {
|
||
"title": "Measurements",
|
||
"description": "Weight, blood pressure, pulse, glucose, and every other measurement as comma-separated values."
|
||
},
|
||
"medicationsCsv": {
|
||
"title": "Medicamentos",
|
||
"description": "Your medication list with dosage, schedules, and (optionally) the full intake history.",
|
||
"includeIntake": "Include intake history"
|
||
},
|
||
"moodCsv": {
|
||
"title": "Estado de ánimo",
|
||
"description": "Daily mood entries with score, tags, and timestamps."
|
||
},
|
||
"fullBackup": {
|
||
"title": "Full backup",
|
||
"description": "Single JSON file with everything — same shape as the weekly auto-backup. Useful for self-restore via admin upload."
|
||
}
|
||
}
|
||
},
|
||
"about": {
|
||
"title": "About",
|
||
"description": "Version, license, links."
|
||
}
|
||
},
|
||
"profile": "Perfil",
|
||
"language": "Idioma",
|
||
"languageDescription": "Choose the display language of the application.",
|
||
"username": "Nombre de usuario",
|
||
"height": "Height (cm)",
|
||
"dateOfBirth": "Fecha de nacimiento",
|
||
"dateOfBirthHint": "Used for automatic blood pressure target calculations.",
|
||
"gender": "Sexo",
|
||
"genderNone": "Not specified",
|
||
"genderMale": "Hombre",
|
||
"genderFemale": "Mujer",
|
||
"genderHint": "Used for gender-specific target values.",
|
||
"timezone": "Zona horaria",
|
||
"timezoneHint": "Used for chart axis labels, reminder times, export timestamps, and Coach context. Stored data is unchanged.",
|
||
"timezoneInvalid": "Not a valid IANA timezone.",
|
||
"profileSaved": "Profile saved",
|
||
"changePassword": "Change password",
|
||
"changePasswordDescription": "Replace your current password with a new one.",
|
||
"passwordReset": "Password reset",
|
||
"currentPassword": "Current password",
|
||
"newPassword": "New password",
|
||
"confirmNewPassword": "Confirm new password",
|
||
"passwordMismatch": "New passwords do not match",
|
||
"passwordUpdated": "Password updated successfully",
|
||
"passkeys": "Passkeys",
|
||
"registeredPasskeys": "Registered Passkeys",
|
||
"passkeysDescription": "Passkeys allow secure login without a password.",
|
||
"passkeyName": "Nombre",
|
||
"passkeyDevice": "Device",
|
||
"passkeyBackup": "Backup",
|
||
"passkeyCreated": "Created",
|
||
"passkeyActions": "Acciones",
|
||
"noPasskeys": "No passkeys registered.",
|
||
"addPasskey": "Add passkey",
|
||
"passkeyAdded": "Passkey added successfully!",
|
||
"passkeyOptionsError": "Could not load passkey options",
|
||
"passkeyRegistrationFailed": "Passkey registration failed",
|
||
"passkeyRegistrationCancelled": "Passkey registration cancelled",
|
||
"passkeyNotSupported": "Your browser or device doesn't support passkeys yet. Try a different browser or device.",
|
||
"passkeyAlreadyRegistered": "This device is already registered as a passkey for your account.",
|
||
"passkeySecurityBlocked": "Your browser blocked the passkey request for security reasons. Make sure you're on a trusted HTTPS origin and try again.",
|
||
"passkeyTimeout": "The passkey prompt timed out. Please try again.",
|
||
"passkeyUnknownError": "Passkey registration failed: {message}",
|
||
"deletePasskey": "Delete passkey?",
|
||
"deletePasskeyDescription": "The passkey will be permanently deleted.",
|
||
"singleDevice": "Single device",
|
||
"multiDevice": "Multi-device",
|
||
"backedUp": "backed up",
|
||
"telegram": "Telegram Notifications",
|
||
"telegramDescription": "Get reminders for missed medication intake via Telegram.",
|
||
"telegramSaved": "Telegram settings saved",
|
||
"botToken": "Bot Token",
|
||
"chatId": "Chat ID",
|
||
"enableNotifications": "Enable notifications",
|
||
"testMessage": "Test message",
|
||
"testSent": "Test message sent!",
|
||
"telegramStep1": "1. Create a bot via @BotFather in Telegram and copy the token.",
|
||
"telegramStep2": "2. Send /start to your bot to activate the chat.",
|
||
"telegramStep3": "3. Find your Chat ID via @userinfobot or the Bot API.",
|
||
"ntfy": "ntfy",
|
||
"ntfyDescription": "Notifications via ntfy (self-hosted or ntfy.sh).",
|
||
"ntfyEnable": "Enable ntfy",
|
||
"ntfyServer": "Server URL",
|
||
"ntfyTopic": "Topic",
|
||
"ntfyAuthToken": "Auth Token (optional)",
|
||
"ntfyAuthTokenHint": "Only needed for private topics with access control.",
|
||
"webPush": "Browser Push",
|
||
"webPushDescription": "Receive notifications directly in your browser, even when HealthLog is not open.",
|
||
"webPushNotSupported": "Your browser does not support push notifications.",
|
||
"webPushDenied": "Push notifications are blocked. Allow them in your browser settings.",
|
||
"webPushNotConfigured": "Web Push is not configured on the server.",
|
||
"webPushSubscribe": "Enable push",
|
||
"webPushUnsubscribe": "Disable push",
|
||
"webPushSubscribed": "Push notifications enabled!",
|
||
"webPushUnsubscribed": "Push notifications disabled.",
|
||
"webPushSubscribeFailed": "Activation failed",
|
||
"webPushActive": "Activo",
|
||
"kiInsightsDescription": "Optional: Save your OpenAI key for daily, automatic evaluations in Insights.",
|
||
"codexConnected": "ChatGPT connected successfully! Insights are now active.",
|
||
"codexDisconnected": "ChatGPT connection removed.",
|
||
"codexConnectionFailed": "ChatGPT connection failed. Please try again.",
|
||
"rawData": "Send raw data",
|
||
"rawDataOnDescription": "Aggregated metrics plus anonymized raw points from the last 30 days are sent. This includes per-metric measurements (for example weight, blood pressure, pulse) with time context so the provider can detect patterns, outliers, and correlations more reliably. Name, email, and direct account identifiers are not transmitted.",
|
||
"rawDataOffDescription": "Only summarized metrics are sent (for example averages, trends, minimum/maximum). No individual points and no exact time context. This is more privacy-preserving, but the provider can be less precise for short-term patterns and fluctuations.",
|
||
"rawDataWarning": "Raw mode enabled: the provider receives additional anonymized points from the last 30 days for higher analysis accuracy.",
|
||
"regenerateInsights": "Regenerate reports",
|
||
"regenerateSuccess": "Reports regenerated successfully",
|
||
"regenerateRateLimit": "Please wait — you've hit the hourly limit for analyses.",
|
||
"lastGeneratedAt": "Last generated",
|
||
"ai": {
|
||
"chatgptConnectedBadge": "ChatGPT connected",
|
||
"adminAiActiveBadge": "Admin provider active",
|
||
"connectionExpiredBadge": "Connection expired",
|
||
"connectedSince": "Connected since {when}.",
|
||
"deviceCodeHeading": "Finish connecting on chatgpt.com",
|
||
"deviceCodeStep1": "Open this link on any device:",
|
||
"deviceCodeStep2": "Enter this one-time code:",
|
||
"deviceCodeStep3": "Approve the connection — this page updates automatically.",
|
||
"deviceCodeCopy": "Copiar",
|
||
"deviceCodeWaiting": "Waiting for approval…",
|
||
"deviceCodeCancel": "Cancelar",
|
||
"oauthNotConfigured": "ChatGPT OAuth is not configured on this instance — use your own API key below instead.",
|
||
"modelLabel": "Model",
|
||
"modelOptionDefault": "— Default —",
|
||
"modelOptionCustom": "Custom…",
|
||
"customModelLabel": "Custom model name",
|
||
"anthropicKeyLabel": "Anthropic API key",
|
||
"baseUrlLabel": "Base URL",
|
||
"localKeyLabel": "API key (optional)",
|
||
"savedPreview": "(saved {preview})",
|
||
"savedShort": "(saved)",
|
||
"saveCta": "Guardar",
|
||
"saved": "Guardado",
|
||
"saveFailed": "Save failed",
|
||
"errorGeneric": "Error",
|
||
"providerChain": {
|
||
"types": {
|
||
"codex": "ChatGPT (Codex)",
|
||
"openai": "OpenAI (your key)",
|
||
"anthropic": "Anthropic (Claude)",
|
||
"local": "Local model",
|
||
"admin-openai": "Admin OpenAI"
|
||
},
|
||
"title": "Fallback chain",
|
||
"description": "If the primary provider fails, HealthLog walks the chain in order. Drag the rows to reorder, toggle the switch to disable a provider without removing it.",
|
||
"moveUp": "Move up",
|
||
"moveDown": "Move down",
|
||
"removeFromChain": "Remove from chain",
|
||
"addProvider": "Add provider",
|
||
"addNoneAvailable": "All providers already in chain",
|
||
"saveOrder": "Save chain order",
|
||
"saved": "Chain saved",
|
||
"saveFailed": "Saving the chain failed",
|
||
"resetDefaults": "Reset to defaults",
|
||
"resetConfirmTitle": "Reset chain to defaults?",
|
||
"resetConfirmBody": "The chain reverts to Codex → OpenAI → Anthropic → Local → Admin OpenAI. Your saved credentials are not touched."
|
||
},
|
||
"activeProviderHeading": "Active provider",
|
||
"activeProviderBody": "Pick the provider you want to use first. The form below configures only the selected provider; the fallback chain at the bottom decides what happens if it fails.",
|
||
"activeProviderLabel": "Primary provider",
|
||
"providerConfigTitle": "Provider configuration",
|
||
"providerSelect": {
|
||
"codex": "ChatGPT account (Codex)",
|
||
"openai": "OpenAI (your API key)",
|
||
"anthropic": "Anthropic (Claude)",
|
||
"local": "Local model (OpenAI-compatible)",
|
||
"admin-openai": "Admin-provided OpenAI"
|
||
},
|
||
"openai": {
|
||
"modelSelect": "Model",
|
||
"modelOptionCustom": "Custom slug…",
|
||
"modelCustomLabel": "Custom model slug",
|
||
"modelCustomPlaceholder": "gpt-5",
|
||
"baseUrlLabel": "Base URL (advanced)",
|
||
"baseUrlPlaceholder": "https://api.openai.com/v1",
|
||
"baseUrlHelp": "Override only when using an OpenAI-compatible gateway. Leave blank for OpenAI itself.",
|
||
"showAdvanced": "Show advanced",
|
||
"hideAdvanced": "Hide advanced",
|
||
"apiKey": "API key",
|
||
"apiKeyPlaceholder": "sk-…"
|
||
},
|
||
"codex": {
|
||
"statusConnected": "Connected",
|
||
"statusDisconnected": "Not connected",
|
||
"statusExpired": "Connection expired",
|
||
"connectButton": "Connect with ChatGPT",
|
||
"disconnectButton": "Disconnect",
|
||
"modelSlugLabel": "Model slug",
|
||
"modelSlugBody": "Codex uses the model your ChatGPT subscription routes to. The CODEX_MODEL environment variable lets ops override this on the instance.",
|
||
"lastInsight": "Last insight: {when}"
|
||
},
|
||
"adminOpenai": {
|
||
"title": "Admin OpenAI",
|
||
"body": "Operator-provided OpenAI key. Used as a last-ditch fallback when no personal provider is configured. There is nothing to configure on this row — visibility means the operator has set it up.",
|
||
"notConfigured": "The operator has not configured a shared OpenAI key on this instance."
|
||
},
|
||
"testProvider": "Test active provider",
|
||
"testSuccess": "OK — {provider} ({model})",
|
||
"testFailedShort": "Test failed: {message}"
|
||
},
|
||
"withings": "Withings",
|
||
"withingsDescription": "Connect your Withings scale and blood pressure monitors.",
|
||
"withingsCredentials": "API Credentials",
|
||
"withingsClientId": "Client ID",
|
||
"withingsClientSecret": "Client Secret",
|
||
"withingsCredentialsSaved": "Credentials saved",
|
||
"withingsCredentialsSavedPlaceholder": "Saved — enter new to replace",
|
||
"withingsCredentialsSavedPlaceholderSecret": "Saved — enter new to replace",
|
||
"withingsSaveCredentials": "Save credentials",
|
||
"configured": "Configured",
|
||
"withingsSync": "Sync now",
|
||
"withingsFullSync": "Sync all data",
|
||
"withingsFullSyncTitle": "Full synchronization?",
|
||
"withingsFullSyncDescription": "All available Withings data will be fully synchronized. This may take some time depending on your history.",
|
||
"withingsSyncResult": "{count} measurements synchronized",
|
||
"withingsFullSyncResult": "{count} measurements fully synchronized",
|
||
"withingsSyncFailed": "Sync failed",
|
||
"withingsSynchronize": "Synchronize",
|
||
"withingsDisconnect": "Disconnect",
|
||
"withingsDisconnectTitle": "Disconnect Withings?",
|
||
"withingsDisconnectDescription": "The connection to Withings will be disconnected. Previously synced data will be preserved.",
|
||
"withingsConnect": "Connect with Withings",
|
||
"withingsNoCredentials": "Please enter your API credentials above to connect Withings.",
|
||
"integrations": {
|
||
"withings": {
|
||
"reconnect": {
|
||
"banner": {
|
||
"title": "Activity sync available",
|
||
"body": "Your Withings connection was authorised before activity sync was added. Reconnect once to enable steps, active energy, walking + running distance, and floors-climbed ingest from your Withings devices.",
|
||
"action": "Reconnect Withings"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"integrationPill": {
|
||
"connected": "Connected",
|
||
"errorReconnect": "Error — reconnect",
|
||
"notConnected": "Not connected",
|
||
"justNow": "just now",
|
||
"minutesAgo": "{count} min ago",
|
||
"hoursAgo": "{count} h ago",
|
||
"daysAgo": "{count} d ago",
|
||
"ariaLabel": "Integration status"
|
||
},
|
||
"apiTokens": "API Tokens",
|
||
"apiTokensDescription": "Create API tokens for external medication intake (e.g., Shortcuts, automations).",
|
||
"tokenNamePlaceholder": "Token name (e.g., iPhone Shortcut)",
|
||
"tokenCreated": "Token created — copy it now! It won't be shown again.",
|
||
"tokenRevoke": "Revoke token?",
|
||
"tokenRevokeDescription": "The token will be permanently deactivated. Applications using it will lose access.",
|
||
"tokenRevoked": "Revoked",
|
||
"tokenExpired": "Expired",
|
||
"tokenActive": "Activo",
|
||
"activeTokensTitle": "Active tokens",
|
||
"revokedTokensTitle": "Revoked tokens ({count})",
|
||
"tokenTableName": "Nombre",
|
||
"tokenTablePermissions": "Permissions",
|
||
"tokenTableStatus": "Estado",
|
||
"tokenTableCreated": "Created",
|
||
"tokenTableLastUsed": "Last used",
|
||
"tokenTableActions": "Acciones",
|
||
"noActiveTokens": "No active tokens available.",
|
||
"tokenNeverUsed": "Never",
|
||
"apiEndpointsTitle": "API endpoints",
|
||
"apiEndpointsDescription": "Overview of currently available external endpoint(s) for token-based ingestion.",
|
||
"apiEndpointMethod": "Method",
|
||
"apiEndpointPath": "Path",
|
||
"apiEndpointAuth": "Authentication",
|
||
"apiEndpointExample": "Body example",
|
||
"collapse": "Collapse",
|
||
"expand": "Expand",
|
||
"dangerZone": "Delete All Data",
|
||
"dangerZoneDescription": "Deletes all your health data and integrations. Your user account will be preserved.",
|
||
"dangerZoneConfirm": "Delete all data?",
|
||
"dangerZoneConfirmDescription": "This will permanently delete all your health data and integrations. Your user account will be preserved.",
|
||
"dangerZoneSuccess": "All personal data has been deleted",
|
||
"dangerZoneDeleteFailed": "Deletion failed",
|
||
"finalDelete": "Delete permanently",
|
||
"saved": "Guardado",
|
||
"savingError": "Error saving",
|
||
"moodLogTitle": "moodLog",
|
||
"moodLogDescription": "Import mood data from moodLog",
|
||
"moodLogUrl": "moodLog URL",
|
||
"moodLogUrlPlaceholder": "https://mood.example.com",
|
||
"moodLogApiKey": "API Key",
|
||
"moodLogApiKeyPlaceholder": "ml_...",
|
||
"moodLogWebhookSecret": "Webhook Secret",
|
||
"moodLogWebhookSecretHelp": "Enter this secret in moodLog as webhook secret",
|
||
"moodLogSync": "Start sync",
|
||
"moodLogFullSync": "Full sync",
|
||
"moodLogFullSyncConfirm": "Synchronize fully",
|
||
"moodLogFullSyncTitle": "Full sync?",
|
||
"moodLogFullSyncDescription": "All available mood data will be fully synchronized.",
|
||
"moodLogDisconnect": "Disconnect",
|
||
"moodLogDisconnectTitle": "Disconnect moodLog?",
|
||
"moodLogDisconnectDescription": "The connection will be removed and all imported mood data will be deleted.",
|
||
"moodLogEntries": "Entries",
|
||
"moodLogSyncResult": "{count} entries synchronized",
|
||
"moodLogSyncFailed": "Sync failed",
|
||
"moodLogSaved": "moodLog connection saved",
|
||
"moodLogDisconnected": "moodLog disconnected",
|
||
"about": {
|
||
"version": "App version",
|
||
"gitSha": "Build",
|
||
"builtAt": "Built {time}",
|
||
"builtAtLabel": "Built",
|
||
"license": "License",
|
||
"repository": "Source code",
|
||
"changelog": "Changelog",
|
||
"docs": "Documentation",
|
||
"linksHeading": "Sources & docs",
|
||
"newerAvailable": "Newer version: {tag}"
|
||
},
|
||
"testConnection": {
|
||
"test": "Test connection",
|
||
"testing": "Testing…",
|
||
"ok": "Connected (latency {latency} ms)",
|
||
"errors": {
|
||
"credentials_rejected": "Credentials rejected — check your token",
|
||
"rate_limited": "Rate-limited by the upstream",
|
||
"timeout": "Request timed out",
|
||
"upstream_error": "Upstream returned an error",
|
||
"connection_failed": "Connection failed",
|
||
"not_configured": "Not configured",
|
||
"url_not_public": "URL is not a public endpoint",
|
||
"url_invalid": "URL is invalid",
|
||
"redirected": "Endpoint redirects — check the URL",
|
||
"endpoint_not_found": "Endpoint not found at the URL",
|
||
"credentials_unreadable": "Credentials cannot be decrypted",
|
||
"upstream_invalid_json": "Upstream sent invalid JSON",
|
||
"vapid_not_configured": "Web Push not configured (VAPID keys missing)",
|
||
"rate_limited_self": "Too many test requests",
|
||
"generic": "Test failed"
|
||
}
|
||
},
|
||
"notificationStatus": {
|
||
"title": "Channel reliability",
|
||
"description": "Live status of every notification channel — Auto-disabled means HealthLog stopped retrying after a permanent error.",
|
||
"emptyDescription": "No channels configured yet. Add a channel below to start tracking its delivery health.",
|
||
"stateActive": "Activo",
|
||
"stateAutoDisabled": "Auto-disabled",
|
||
"stateSendingPaused": "Sending paused",
|
||
"stateManuallyDisabled": "Desactivado",
|
||
"lastSuccess": "Last successful send",
|
||
"lastFailure": "Last failure",
|
||
"consecutiveFailures": "Consecutive failures",
|
||
"disabledReason": "Reason",
|
||
"nextRetry": "Next retry",
|
||
"reEnable": "Re-enable",
|
||
"sendTest": "Send test"
|
||
}
|
||
},
|
||
"admin": {
|
||
"title": "Administration",
|
||
"subtitle": "System status, users, and settings",
|
||
"settingsSaveError": "Failed to save settings",
|
||
"systemStatus": "System Status",
|
||
"database": "Database",
|
||
"databaseConnected": "Connected",
|
||
"databaseError": "Error",
|
||
"startedAt": "Started",
|
||
"users": "Users",
|
||
"measurementsCount": "Measurements",
|
||
"activeTokens": "Active API Tokens",
|
||
"activeSessions": "Active Sessions",
|
||
"loadingStatus": "Loading status...",
|
||
"systemStatusLoadError": "Failed to load system status.",
|
||
"systemStatusRetry": "Reintentar",
|
||
"adminSettingsLoadError": "Failed to load admin settings. Toggles below may not reflect the live state — refresh the page.",
|
||
"hostMetrics": {
|
||
"title": "Host load",
|
||
"load1": "Load (1m)",
|
||
"memUsedPercent": "Memory",
|
||
"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."
|
||
},
|
||
"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",
|
||
"colPromptVersion": "Prompt",
|
||
"colHelpful": "Helpful",
|
||
"colNotHelpful": "Not helpful",
|
||
"colHelpfulRate": "Helpful rate"
|
||
},
|
||
"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",
|
||
"colN": "n",
|
||
"colHelpfulRate": "Helpful rate"
|
||
},
|
||
"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.",
|
||
"integrationWebPush": "Web Push",
|
||
"integrationBugReport": "Bug Report",
|
||
"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.",
|
||
"umamiTitle": "Umami",
|
||
"umamiDescription": "Web analytics with Umami",
|
||
"glitchtipTitle": "GlitchTip",
|
||
"glitchtipDescription": "Error tracking with GlitchTip",
|
||
"webPushVapidTitle": "Web Push VAPID",
|
||
"umamiEnabled": "Enable Umami tracking.",
|
||
"umamiScriptUrl": "Umami script URL",
|
||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||
"umamiWebsiteId": "Umami website ID",
|
||
"umamiWebsiteIdPlaceholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
|
||
"glitchtipEnabled": "Enable GlitchTip error tracking.",
|
||
"glitchtipDsn": "GlitchTip DSN",
|
||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||
"glitchtipEnvironment": "GlitchTip environment",
|
||
"glitchtipEnvironmentPlaceholder": "production",
|
||
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
|
||
"webPushVapidPublicKey": "VAPID public key",
|
||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||
"webPushVapidPrivateKey": "VAPID private key",
|
||
"webPushVapidPrivateKeyPlaceholder": "Optional: enter a new private key",
|
||
"webPushVapidSubject": "VAPID subject",
|
||
"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.",
|
||
"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.",
|
||
"master": {
|
||
"title": "Asistente activado",
|
||
"description": "Interruptor maestro para cada superficie impulsada por el modelo. Cuando está desactivado, todas las opciones secundarias se fuerzan a off."
|
||
},
|
||
"coach": {
|
||
"title": "Coach",
|
||
"description": "Drawer de chat, botón de lanzamiento y FAB móvil en cada página de Insights."
|
||
},
|
||
"briefing": {
|
||
"title": "Briefing diario",
|
||
"description": "Tarjeta de briefing, narración del hero strip, cuadrícula de recomendaciones y la acción Regenerar."
|
||
},
|
||
"insightStatus": {
|
||
"title": "Tarjetas de estado",
|
||
"description": "Tarjetas de estado por métrica en cada sub-página /insights."
|
||
},
|
||
"correlations": {
|
||
"title": "Correlaciones",
|
||
"description": "Narración de la tarjeta de correlación en la vista general de Insights."
|
||
},
|
||
"healthScoreExplainer": {
|
||
"title": "Explicador de Health-Score",
|
||
"description": "El icono ? junto a la línea de delta del Health-Score. El dígito del delta permanece visible siempre."
|
||
}
|
||
},
|
||
"bugReportRepo": "Repository",
|
||
"bugReportRepoPlaceholder": "owner/repo",
|
||
"bugReportToken": "Issue token",
|
||
"bugReportTokenPlaceholder": "ghp_...",
|
||
"userManagement": "User Management",
|
||
"userName": "Nombre",
|
||
"userEmail": "Correo electrónico",
|
||
"userRole": "Role",
|
||
"userPasskeys": "Passkeys",
|
||
"userCreated": "Created",
|
||
"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",
|
||
"reset": "Restablecer",
|
||
"loadingUsers": "Loading users...",
|
||
"apiTokens": "API Tokens",
|
||
"tokenUser": "User",
|
||
"tokenName": "Nombre",
|
||
"tokenPermissions": "Permissions",
|
||
"tokenPermissionAll": "Todo",
|
||
"tokenPermissionAllTooltip": "Wildcard permission — this token can call every API route.",
|
||
"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",
|
||
"showingEntries": "Mostrando {count} de {total} entradas de autenticación",
|
||
"status": "Estado",
|
||
"action": "Action",
|
||
"ip": "IP",
|
||
"location": "Location",
|
||
"timestamp": "Hora",
|
||
"provider": "Provider",
|
||
"providerPassword": "Contraseña",
|
||
"providerPasskey": "Passkey",
|
||
"providerApiToken": "API token",
|
||
"providerWithings": "Withings",
|
||
"providerUnknown": "Desconocido",
|
||
"outcome": "Outcome",
|
||
"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",
|
||
"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",
|
||
"authLogin": "Iniciar sesión",
|
||
"authLoginPasskey": "Passkey login",
|
||
"authLoginPassword": "Password login",
|
||
"authLoginFailed": "Failed",
|
||
"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",
|
||
"feedback": {
|
||
"tabOpen": "Open",
|
||
"tabAcknowledged": "Acknowledged",
|
||
"tabResolved": "Resolved",
|
||
"tabArchived": "Archived",
|
||
"subject": "Subject",
|
||
"category": "Category",
|
||
"user": "User",
|
||
"createdAt": "Submitted",
|
||
"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",
|
||
"metaUrl": "URL",
|
||
"metaLocale": "Locale",
|
||
"metaUserAgent": "User agent",
|
||
"metaAppVersion": "App version",
|
||
"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"
|
||
},
|
||
"shell": {
|
||
"overview": "Resumen",
|
||
"sectionsNav": "Admin sections"
|
||
},
|
||
"overview": {
|
||
"welcomeTitle": "Bienvenido,{name}",
|
||
"welcomeSubtitle": "You are signed in as administrator. Pick a section to manage HealthLog.",
|
||
"snapshotTitle": "System snapshot",
|
||
"snapshotVersion": "Version",
|
||
"snapshotDatabase": "Database",
|
||
"snapshotWorker": "Worker",
|
||
"snapshotStarted": "Started",
|
||
"snapshotBuildSha": "Build SHA",
|
||
"snapshotBuiltAt": "Built at",
|
||
"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"
|
||
},
|
||
"section": {
|
||
"system-status": {
|
||
"title": "System Status",
|
||
"subtitle": "Worker, database, and integration health at a glance."
|
||
},
|
||
"general": {
|
||
"title": "General",
|
||
"subtitle": "Registration, default language, and other app-wide toggles."
|
||
},
|
||
"services": {
|
||
"title": "Services",
|
||
"subtitle": "Enable or disable notification channels and integrations system-wide."
|
||
},
|
||
"integrations": {
|
||
"title": "Integraciones",
|
||
"subtitle": "Configure Umami, GlitchTip, Web Push, and bug reports."
|
||
},
|
||
"ai-quality": {
|
||
"title": "Insights Quality",
|
||
"subtitle": "Helpfulness scores grouped by severity and provider, from the last 30 days of user feedback."
|
||
},
|
||
"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."
|
||
},
|
||
"feedback": {
|
||
"title": "Feedback",
|
||
"subtitle": "Triage user feedback, bug reports, and feature requests."
|
||
},
|
||
"reminders": {
|
||
"title": "Reminders",
|
||
"subtitle": "Tune medication reminder thresholds and run a manual check."
|
||
},
|
||
"users": {
|
||
"title": "Users",
|
||
"subtitle": "Manage user accounts, roles, and active sessions.",
|
||
"filter": {
|
||
"all": "Todo",
|
||
"admin": "Admins",
|
||
"user": "Users"
|
||
},
|
||
"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"
|
||
},
|
||
"api-tokens": {
|
||
"title": "API Tokens",
|
||
"subtitle": "Active bearer tokens issued to native clients and integrations."
|
||
},
|
||
"login-overview": {
|
||
"title": "Login Overview",
|
||
"subtitle": "Audit trail of authentication and admin events."
|
||
},
|
||
"auditLog": {
|
||
"filterActor": "Actor (user id or username)",
|
||
"filterAction": "Action",
|
||
"filterActionAll": "All actions",
|
||
"filterTarget": "Target (id or path)",
|
||
"filterDate": "Date range",
|
||
"range24h": "Last 24 hours",
|
||
"range7d": "Últimos 7 días",
|
||
"range30d": "Últimos 30 días",
|
||
"rangeAll": "Todo el tiempo",
|
||
"perPage": "Per page",
|
||
"prev": "Previous",
|
||
"next": "Siguiente",
|
||
"pageOf": "Página {page} de {total}",
|
||
"export": "Export CSV",
|
||
"empty": "No audit entries match the current filters."
|
||
},
|
||
"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",
|
||
"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"
|
||
},
|
||
"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",
|
||
"colType": "Tipo",
|
||
"typeWeeklyAuto": "Weekly (auto)",
|
||
"typeManual": "Manual",
|
||
"colSize": "Size",
|
||
"colCreatedAt": "Last snapshot",
|
||
"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"
|
||
},
|
||
"danger-zone": {
|
||
"title": "Danger Zone",
|
||
"subtitle": "Destructive system-wide operations."
|
||
},
|
||
"about": {
|
||
"title": "About",
|
||
"subtitle": "Version, license, source, and update check."
|
||
}
|
||
},
|
||
"carrier": "Operador",
|
||
"carrierUnknown": "Operador desconocido",
|
||
"carrierUnavailableGeoFallback": "{location} — carrier unavailable"
|
||
},
|
||
"achievements": {
|
||
"title": "Achievements",
|
||
"subtitle": "Earn achievements by tracking your health and taking your meds on time.",
|
||
"loginRequired": "Please sign in to view achievements.",
|
||
"points": "Points",
|
||
"unlocked": "Unlocked",
|
||
"nextGoal": "Next goal",
|
||
"allCompleted": "All achievements unlocked!",
|
||
"completed": "Completed",
|
||
"goalReached": "Goal reached",
|
||
"remainingUnlocks": "{count} still unlockable",
|
||
"noneUnlockedYet": "No achievements unlocked yet.",
|
||
"pointsValue": "{points} points",
|
||
"metricCount": "{count}",
|
||
"metricDays": "{count} days",
|
||
"metricPercent": "{count}%",
|
||
"badges": {
|
||
"intakeTotal1": {
|
||
"title": "First intake",
|
||
"description": "Record your first taken medication event."
|
||
},
|
||
"intakeTotal10": {
|
||
"title": "Intake starter",
|
||
"description": "Record 10 taken medication events."
|
||
},
|
||
"intakeTotal50": {
|
||
"title": "Intake routine",
|
||
"description": "Record 50 taken medication events."
|
||
},
|
||
"intakeTotal150": {
|
||
"title": "Intake expert",
|
||
"description": "Record 150 taken medication events."
|
||
},
|
||
"intakeTotal300": {
|
||
"title": "Intake legend",
|
||
"description": "Record 300 taken medication events."
|
||
},
|
||
"overIntake1": {
|
||
"title": "Double take",
|
||
"description": "Take medication at least once more than planned."
|
||
},
|
||
"skippedIntake1": {
|
||
"title": "Stepped back",
|
||
"description": "Skip at least one planned intake."
|
||
},
|
||
"passkeyCreated1": {
|
||
"title": "Passkey set up",
|
||
"description": "Create your first passkey."
|
||
},
|
||
"passkeyLogin1": {
|
||
"title": "Passkey login",
|
||
"description": "Sign in at least once with a passkey."
|
||
},
|
||
"passwordLogin1": {
|
||
"title": "Old school",
|
||
"description": "Sign in at least once with username and password."
|
||
},
|
||
"bugReport1": {
|
||
"title": "Bug hunter",
|
||
"description": "Submit a bug report."
|
||
},
|
||
"loginStreak7": {
|
||
"title": "Login streak 7d",
|
||
"description": "Sign in on 7 consecutive days."
|
||
},
|
||
"loginStreak30": {
|
||
"title": "Login streak 30d",
|
||
"description": "Sign in on 30 consecutive days."
|
||
},
|
||
"onTimePerfect1": {
|
||
"title": "On-time 1d",
|
||
"description": "Take all medications on time for 1 day."
|
||
},
|
||
"compliance801": {
|
||
"title": "80% adherence · 1d",
|
||
"description": "Reach at least 80% 30-day adherence for 1 day."
|
||
},
|
||
"bmiGreen1": {
|
||
"title": "BMI green · 1d",
|
||
"description": "Keep your BMI in the normal range for 1 day."
|
||
},
|
||
"bpGreen1": {
|
||
"title": "BP green · 1d",
|
||
"description": "Keep your blood pressure in the normal range for 1 day."
|
||
},
|
||
"pulseGreen1": {
|
||
"title": "Pulse green · 1d",
|
||
"description": "Keep your resting pulse in the normal range for 1 day."
|
||
},
|
||
"onTimePerfect7": {
|
||
"title": "On-time 7d",
|
||
"description": "Take all medications on time for 7 consecutive days."
|
||
},
|
||
"compliance807": {
|
||
"title": "80% adherence · 7d",
|
||
"description": "Reach at least 80% 30-day adherence for 7 consecutive days."
|
||
},
|
||
"bmiGreen7": {
|
||
"title": "BMI green · 7d",
|
||
"description": "Keep your BMI in the normal range for 7 consecutive days."
|
||
},
|
||
"bpGreen7": {
|
||
"title": "BP green · 7d",
|
||
"description": "Keep your blood pressure in the normal range for 7 consecutive days."
|
||
},
|
||
"pulseGreen7": {
|
||
"title": "Pulse green · 7d",
|
||
"description": "Keep your resting pulse in the normal range for 7 consecutive days."
|
||
},
|
||
"onTimePerfect30": {
|
||
"title": "On-time 30d",
|
||
"description": "Take all medications on time for 30 consecutive days."
|
||
},
|
||
"compliance8030": {
|
||
"title": "80% adherence · 30d",
|
||
"description": "Reach at least 80% 30-day adherence for 30 consecutive days."
|
||
},
|
||
"bmiGreen30": {
|
||
"title": "BMI green · 30d",
|
||
"description": "Keep your BMI in the normal range for 30 consecutive days."
|
||
},
|
||
"bpGreen30": {
|
||
"title": "BP green · 30d",
|
||
"description": "Keep your blood pressure in the normal range for 30 consecutive days."
|
||
},
|
||
"pulseGreen30": {
|
||
"title": "Pulse green · 30d",
|
||
"description": "Keep your resting pulse in the normal range for 30 consecutive days."
|
||
},
|
||
"onTimePerfect180": {
|
||
"title": "On-time 180d",
|
||
"description": "Take all medications on time for 180 consecutive days."
|
||
},
|
||
"compliance80180": {
|
||
"title": "80% adherence · 180d",
|
||
"description": "Reach at least 80% 30-day adherence for 180 consecutive days."
|
||
},
|
||
"bmiGreen180": {
|
||
"title": "BMI green · 180d",
|
||
"description": "Keep your BMI in the normal range for 180 consecutive days."
|
||
},
|
||
"bpGreen180": {
|
||
"title": "BP green · 180d",
|
||
"description": "Keep your blood pressure in the normal range for 180 consecutive days."
|
||
},
|
||
"pulseGreen180": {
|
||
"title": "Pulse green · 180d",
|
||
"description": "Keep your resting pulse in the normal range for 180 consecutive days."
|
||
},
|
||
"onTimePerfect360": {
|
||
"title": "On-time 360d",
|
||
"description": "Take all medications on time for 360 consecutive days."
|
||
},
|
||
"compliance80360": {
|
||
"title": "80% adherence · 360d",
|
||
"description": "Reach at least 80% 30-day adherence for 360 consecutive days."
|
||
},
|
||
"bmiGreen360": {
|
||
"title": "BMI green · 360d",
|
||
"description": "Keep your BMI in the normal range for 360 consecutive days."
|
||
},
|
||
"bpGreen360": {
|
||
"title": "BP green · 360d",
|
||
"description": "Keep your blood pressure in the normal range for 360 consecutive days."
|
||
},
|
||
"pulseGreen360": {
|
||
"title": "Pulse green · 360d",
|
||
"description": "Keep your resting pulse in the normal range for 360 consecutive days."
|
||
},
|
||
"moodFirst": {
|
||
"title": "First mood",
|
||
"description": "Log your first mood entry."
|
||
},
|
||
"moodStreak7": {
|
||
"title": "Mood diarist 7d",
|
||
"description": "Log a mood entry on 7 consecutive days."
|
||
},
|
||
"moodStreak30": {
|
||
"title": "Mood diarist 30d",
|
||
"description": "Log a mood entry on 30 consecutive days."
|
||
},
|
||
"moodUp7": {
|
||
"title": "Brighter week",
|
||
"description": "Your 7-day mood average improved by at least 1.0 point compared to the previous week."
|
||
},
|
||
"weightFirst": {
|
||
"title": "First weigh-in",
|
||
"description": "Record your first weight measurement."
|
||
},
|
||
"weight50": {
|
||
"title": "Fifty weigh-ins",
|
||
"description": "Record 50 weight measurements."
|
||
},
|
||
"weight200": {
|
||
"title": "200 weigh-ins",
|
||
"description": "Record 200 weight measurements."
|
||
},
|
||
"bpFirst": {
|
||
"title": "First reading",
|
||
"description": "Record your first blood-pressure measurement."
|
||
},
|
||
"bp50": {
|
||
"title": "Fifty BP readings",
|
||
"description": "Record 50 blood-pressure measurements."
|
||
},
|
||
"bp200": {
|
||
"title": "200 BP readings",
|
||
"description": "Record 200 blood-pressure measurements."
|
||
},
|
||
"pulseFirst": {
|
||
"title": "First pulse",
|
||
"description": "Record your first pulse measurement."
|
||
},
|
||
"consistentMonth": {
|
||
"title": "Consistent month",
|
||
"description": "Log entries on at least 25 distinct days within a single calendar month."
|
||
},
|
||
"entryStreak7": {
|
||
"title": "Tracker streak 7d",
|
||
"description": "Log at least one entry on 7 consecutive days."
|
||
},
|
||
"entryStreak30": {
|
||
"title": "Tracker streak 30d",
|
||
"description": "Log at least one entry on 30 consecutive days."
|
||
},
|
||
"weekendWarrior": {
|
||
"title": "Weekend tracker",
|
||
"description": "Log entries on 4 consecutive Saturday + Sunday weekend pairs."
|
||
},
|
||
"hiddenNightOwl": {
|
||
"title": "Night owl",
|
||
"description": "Logged an entry between 02:00 and 04:00 in the morning."
|
||
},
|
||
"hiddenEarlyBird": {
|
||
"title": "Early bird",
|
||
"description": "Logged an entry between 04:00 and 06:00 in the morning."
|
||
},
|
||
"hiddenLeapDay": {
|
||
"title": "Leap-day legend",
|
||
"description": "Logged an entry on February 29."
|
||
},
|
||
"hiddenDoctorPdf": {
|
||
"title": "House call",
|
||
"description": "Exported your first doctor-report PDF."
|
||
},
|
||
"hiddenLocaleFlip": {
|
||
"title": "Polyglot",
|
||
"description": "Switched the app language at least once."
|
||
},
|
||
"hiddenBugBuddy": {
|
||
"title": "Bug buddy",
|
||
"description": "Submitted at least 5 bug reports — the project loves you."
|
||
}
|
||
},
|
||
"nextProgressLabel": "Progress to unlock",
|
||
"completedOn": "Completed on {date}",
|
||
"locked": "Locked",
|
||
"criterionHint": "{current} / {target}",
|
||
"progressPercent": "{percent}%",
|
||
"categories": {
|
||
"medication": "Medicamento",
|
||
"vitals": "Vitals",
|
||
"mood": "Estado de ánimo",
|
||
"security": "Account & security",
|
||
"engagement": "Engagement",
|
||
"hidden": "Hidden"
|
||
},
|
||
"hiddenCard": {
|
||
"title": "Hidden achievement",
|
||
"description": "Keep tracking — you might just stumble across it.",
|
||
"ariaLabel": "Hidden locked achievement"
|
||
},
|
||
"hiddenUnlockToast": {
|
||
"title": "You unlocked a hidden achievement!"
|
||
},
|
||
"dashboardCard": {
|
||
"title": "Recent unlocks",
|
||
"viewAll": "View all",
|
||
"empty": "No achievements yet — keep logging to unlock your first."
|
||
}
|
||
},
|
||
"bugreport": {
|
||
"title": "Bug Report",
|
||
"subtitle": "Send a bug report, feature request, or question. The server administrator will see your submission.",
|
||
"loginRequired": "Please sign in to report a bug.",
|
||
"bugTitle": "Title",
|
||
"description": "Descripción",
|
||
"submit": "Send",
|
||
"success": "Thank you! Your bug report has been submitted successfully.",
|
||
"errorCreating": "Error creating report",
|
||
"category": "Tipo",
|
||
"categoryBug": "Bug report",
|
||
"categoryFeature": "Feature request",
|
||
"categoryQuestion": "Question",
|
||
"categoryOther": "Other feedback",
|
||
"bugTitlePlaceholder": "Short summary (optional)",
|
||
"githubEscalationNote": "Your feedback is stored locally. If the admin enables GitHub integration, it can be promoted to a public issue on request.",
|
||
"internalOnlyNote": "Your feedback is stored locally and only visible to the administrator of this server.",
|
||
"disabledTitle": "Bug reports are turned off",
|
||
"disabledBody": "The administrator has disabled bug reports on this server."
|
||
},
|
||
"notifications": {
|
||
"title": "Centro de notificaciones",
|
||
"breadcrumbInbox": "Centro de notificaciones",
|
||
"breadcrumbChannels": "Canales de notificación",
|
||
"breadcrumbSettings": "Ajustes",
|
||
"eventColumn": "Evento",
|
||
"subtitle": "Choose which notifications you want to receive through which channel.",
|
||
"loadError": "Notification preferences could not be loaded.",
|
||
"noChannels": "Configure a notification channel in Settings first.",
|
||
"goToSettings": "Go to channel settings",
|
||
"channelDisabled": "Desactivado",
|
||
"admin": {
|
||
"deployFailedTitle": "Despliegue fallido: {application}",
|
||
"deployFailedBody": "Se produjo un error al desplegar {application} (#{deployment}): {error}. Ver registros: {logsUrl}",
|
||
"testNotificationTitle": "HealthLog notificación de prueba",
|
||
"testNotificationBody": "Esta notificación de prueba se activó desde el panel de administración. Si la ves, el canal funciona.",
|
||
"reminderCheckMissedTitle": "Recordatorio perdido: {medication}",
|
||
"reminderCheckMissedBody": "{medication} ({dose}) no se registró en la ventana {window}.",
|
||
"reminderCheckOverdueTitle": "Dosis atrasada: {medication}",
|
||
"reminderCheckOverdueBody": "{medication} ({dose}) en la ventana {window} lleva {minutes} minutos de retraso.",
|
||
"offlineGeoUnavailableTitle": "Bases de datos de geolocalización sin conexión no cargadas",
|
||
"offlineGeoUnavailableBody": "HealthLog está resolviendo las ubicaciones de inicio de sesión mediante el respaldo en línea ipwho.is. Para habilitar las bases sin conexión GeoLite2-City y GeoLite2-ASN, configura MAXMIND_LICENSE_KEY en los secrets de GitHub Actions en {secretsUrl} y vuelve a desplegar. Hasta entonces, la columna de operador en el resumen de inicios de sesión permanece vacía."
|
||
},
|
||
"user": {
|
||
"telegramTestBody": "HealthLog: conexión correcta. Las notificaciones de Telegram están activas."
|
||
}
|
||
},
|
||
"i18n": {
|
||
"maintainershipBanner": {
|
||
"notice": "Este idioma está traducido automáticamente, incluidas las instrucciones críticas para la seguridad del Coach. Un control de deriva automático se ejecuta en CI; informe de cualquier regresión del Coach en GitHub.",
|
||
"cta": "Informar en GitHub",
|
||
"dismiss": "Cerrar"
|
||
}
|
||
},
|
||
"targets": {
|
||
"title": "Targets",
|
||
"introText": "Your current values compared to recommended target ranges. Guideline sources are linked on each card.",
|
||
"bmi": "IMC",
|
||
"average30d": "30-day average:",
|
||
"consistency": {
|
||
"ariaLabel": "Last 7 days, in-range status per day",
|
||
"daysInRange": "{count} de {total} en rango",
|
||
"daysLogged": "{count} de {total} registrados",
|
||
"dotInRange": "in range",
|
||
"dotNearRange": "near range",
|
||
"dotOutOfRange": "out of range",
|
||
"dotNotLogged": "not logged",
|
||
"insufficientData": "Not enough data yet — keep logging.",
|
||
"relativeDay": {
|
||
"today": "Hoy",
|
||
"yesterday": "Ayer",
|
||
"twoDaysAgo": "2 days ago",
|
||
"threeDaysAgo": "3 days ago",
|
||
"fourDaysAgo": "4 days ago",
|
||
"fiveDaysAgo": "5 days ago",
|
||
"sixDaysAgo": "6 days ago"
|
||
}
|
||
},
|
||
"card": {
|
||
"lastMet": "Last met goal: {when}",
|
||
"streak": "{count}-day streak"
|
||
},
|
||
"relativeDay": {
|
||
"today": "Hoy",
|
||
"yesterday": "Ayer",
|
||
"daysAgo": "{count} days ago"
|
||
},
|
||
"summary": {
|
||
"weekTitle": "{met} de {total} objetivos cumplidos esta semana",
|
||
"weekTitleAll": "Todo{total} targets met this week",
|
||
"streakHighlight": "{count}-day streak: {metric}"
|
||
},
|
||
"coach": {
|
||
"cta": "Ask Coach"
|
||
},
|
||
"edit": {
|
||
"openLabel": "Edit target range for {metric}",
|
||
"title": "Edit target range — {metric}",
|
||
"description": "Adjust the in-range band used across charts, insights and the doctor report. Values are in {unit}.",
|
||
"derivedHint": "This card is derived from other metrics. Edit the underlying targets (e.g. blood pressure or weight) instead.",
|
||
"minLabel": "Mín",
|
||
"maxLabel": "Máx",
|
||
"systolicMin": "Systolic min",
|
||
"systolicMax": "Systolic max",
|
||
"diastolicMin": "Diastolic min",
|
||
"diastolicMax": "Diastolic max",
|
||
"boundsHint": "Allowed range: {min}–{max} {unit}",
|
||
"resetToDefault": "Reset to default",
|
||
"saveSuccess": "Target range updated",
|
||
"saveError": "Could not save the target range",
|
||
"resetSuccess": "Target range reset to default"
|
||
},
|
||
"mood": {
|
||
"stability": {
|
||
"stable": "stable",
|
||
"variable": "variable",
|
||
"highlyVariable": "highly variable"
|
||
}
|
||
},
|
||
"currentValue": "Current: {value} {unit}",
|
||
"targetRangeValue": "Target: {min}–{max} {unit}",
|
||
"sourceLabel": "Source: {source}",
|
||
"inTarget": "Within target range",
|
||
"aboveTarget": "{delta} {unit} above target",
|
||
"belowTarget": "{delta} {unit} below target",
|
||
"diastolic": "Diastolic",
|
||
"noMeasurementYet": "No measurements yet",
|
||
"noMeasurementData": "No measurement data available. Add some measurements to see your targets.",
|
||
"profileIncomplete": "Profile incomplete",
|
||
"profileIncompleteHeight": "Add your height in profile settings to enable BMI targets.",
|
||
"profileIncompleteAge": "Add your date of birth in profile settings for age-specific targets.",
|
||
"profileIncompleteHeightAge": "Add your height and date of birth in profile settings for personalized targets.",
|
||
"compliancePerMedication": "Compliance per medication",
|
||
"glucoseFasting": "Glucose — fasting",
|
||
"glucosePostprandial": "Glucose — post-meal",
|
||
"glucoseRandom": "Glucose — random",
|
||
"glucoseBedtime": "Glucose — bedtime",
|
||
"loadError": "Failed to load targets",
|
||
"label": {
|
||
"WEIGHT": "Peso",
|
||
"BLOOD_PRESSURE": "Presión arterial",
|
||
"BLOOD_PRESSURE_IN_TARGET": "Blood pressure on target",
|
||
"PULSE": "Resting pulse",
|
||
"SLEEP_DURATION": "Sleep duration",
|
||
"BMI": "IMC",
|
||
"BODY_FAT": "Grasa corporal",
|
||
"ACTIVITY_STEPS": "Steps/day",
|
||
"MEDICATION_COMPLIANCE": "Medication compliance",
|
||
"MOOD_SCORE": "Estado de ánimo",
|
||
"MOOD_STABILITY": "Mood stability"
|
||
},
|
||
"status": {
|
||
"underweight": "Underweight",
|
||
"normal": "Normal",
|
||
"overweight": "Overweight",
|
||
"obesityGrade1": "Obesity Grade I",
|
||
"obesityGrade2": "Obesity Grade II",
|
||
"obesityGrade3": "Obesity Grade III",
|
||
"optimal": "Optimal",
|
||
"highNormal": "High-normal",
|
||
"hypertensionGrade1": "Hypertension Grade 1",
|
||
"hypertensionGrade2": "Hypertension Grade 2",
|
||
"hypertensionGrade3": "Hypertension Grade 3",
|
||
"bradycardia": "Bradycardia",
|
||
"elevated": "Elevated",
|
||
"tachycardia": "Tachycardia",
|
||
"significantlyLow": "Significantly low",
|
||
"slightlyLow": "Slightly low",
|
||
"onTarget": "On target",
|
||
"slightlyElevated": "Slightly elevated",
|
||
"significantlyElevated": "Significantly elevated",
|
||
"farTooShort": "Far too short",
|
||
"tooShort": "Too short",
|
||
"slightlyLong": "Slightly long",
|
||
"farTooLong": "Far too long",
|
||
"belowEssential": "Below essential",
|
||
"essential": "Essential",
|
||
"athletic": "Athletic",
|
||
"fitness": "Fitness",
|
||
"acceptable": "Acceptable",
|
||
"obese": "Obese",
|
||
"veryLow": "Very low",
|
||
"lowActive": "Low active",
|
||
"moderatelyActive": "Moderately active",
|
||
"active": "Activo",
|
||
"veryActive": "Very active",
|
||
"good": "Bien",
|
||
"moderate": "Moderate",
|
||
"low": "Low",
|
||
"high": "High",
|
||
"veryGood": "Very good",
|
||
"veryStable": "Very stable",
|
||
"stable": "Stable",
|
||
"fluctuating": "Fluctuating"
|
||
}
|
||
},
|
||
"passwordStrength": {
|
||
"veryWeak": "Muy débil",
|
||
"weak": "Débil",
|
||
"acceptable": "Aceptable",
|
||
"strong": "Fuerte",
|
||
"veryStrong": "Muy fuerte",
|
||
"tooShort": "Demasiado corta",
|
||
"characters": "caracteres",
|
||
"minLength": "Se requieren al menos {count} caracteres."
|
||
},
|
||
"telegram": {
|
||
"errorInvalidAction": "Invalid action.",
|
||
"errorMedicationNotFound": "Medication not found.",
|
||
"errorMedicationInactive": "Medication not found or inactive.",
|
||
"errorUnknownAction": "Unknown action.",
|
||
"snoozeOneHour": "1 hour",
|
||
"snoozeThreeHours": "3 hours",
|
||
"snoozedFor": "{name} snoozed for {duration}.",
|
||
"skipped": "{name} Omitida.",
|
||
"alreadyRecorded": "{name} was already recorded.",
|
||
"recordedAsTaken": "{name} recorded as taken.",
|
||
"confirmed": "{name} confirmed.",
|
||
"genericConfirmed": "Confirmed.",
|
||
"cancelled": "Cancelled.",
|
||
"noActiveMedications": "No active medications found.",
|
||
"whichMedication": "<b>Which medication did you take?</b>",
|
||
"cancelButton": "Cancelar",
|
||
"askMedicationName": "Please specify a medication, e.g. <b>taken Ramipril</b>.",
|
||
"medicationNotFoundExact": "Medication not found. Please send the name exactly as in HealthLog.",
|
||
"helpHeader": "<b>Available commands:</b>",
|
||
"helpBody": "/help — show this help\n/add — record an intake\n/start — start the bot\n\n<b>Text commands:</b>\ntaken <name> — confirm an intake\n\n<b>Buttons in reminders:</b>\n• Taken — confirm intake\n• 🕐 1h / 🕐 3h — postpone reminder\n• ⏭ Skip — skip intake\n• ✓ Confirm — confirm a missed intake"
|
||
},
|
||
"medicationReminders": {
|
||
"phaseGreenTitle": "🟢 Reminder: {medName}",
|
||
"phaseGreenMessage": "🟢 Reminder:\n<b>{medName}</b> ({doseInfo}, {timeWindow})\nWindow closes in {minutes} Mín.",
|
||
"phaseYellowTitle": "🟡 Due soon: {medName}",
|
||
"phaseYellowMessage": "🟡 Due soon:\n<b>{medName}</b> ({doseInfo}, {timeWindow})\n{minutes} min left.",
|
||
"phaseOrangeTitle": "🟠 Overdue: {medName}",
|
||
"phaseOrangeMessage": "🟠 Overdue:\n<b>{medName}</b> ({doseInfo}, {timeWindow})\nOverdue by {minutes} Mín.",
|
||
"phaseRedTitle": "🔴 Missed: {medName}",
|
||
"phaseRedMessage": "🔴 Missed:\n<b>{medName}</b> ({doseInfo}, {timeWindow})\nMarked as missed.",
|
||
"buttonTaken": "Tomada",
|
||
"buttonConfirm": "✓ Confirm",
|
||
"buttonSnoozeOneHour": "🕐 1h",
|
||
"buttonSnoozeThreeHours": "🕐 3h",
|
||
"buttonSkip": "⏭ Skip"
|
||
}
|
||
}
|