mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 20:42:43 +00:00
When the logged symptom curve drives the recovery gap, the card names it
('you felt better N days before your logged symptoms eased') instead of
the vital-driven phrasing. Mirror the new gapDriverType and the return
track's adverse flag into the client DTO, and add the driver-aware copy
across all six locales.
6978 lines
365 KiB
JSON
6978 lines
365 KiB
JSON
{
|
||
"common": {
|
||
"save": "Enregistrer",
|
||
"cancel": "Annuler",
|
||
"delete": "Supprimer",
|
||
"undo": "Annuler",
|
||
"edit": "Modifier",
|
||
"moreOptions": "Plus d'options",
|
||
"create": "Créer",
|
||
"close": "Fermer",
|
||
"loading": "Chargement…...",
|
||
"loadFailed": "Impossible de charger",
|
||
"error": "Erreur",
|
||
"saved": "Enregistré",
|
||
"pullToRefresh": "Actualisation…",
|
||
"no": "Non",
|
||
"noData": "Aucune donnée disponible",
|
||
"optional": "Facultatif",
|
||
"active": "Actif",
|
||
"inactive": "Inactif",
|
||
"disabled": "Désactivé",
|
||
"networkError": "Erreur réseau",
|
||
"unknownError": "Erreur inconnue",
|
||
"copied": "Copié !",
|
||
"or": "ou",
|
||
"unknown": "Inconnu",
|
||
"add": "Ajouter",
|
||
"import": "Importer",
|
||
"test": "Tester",
|
||
"reset": "Réinitialiser",
|
||
"copy": "Copier",
|
||
"copyDetails": "Copier les détails",
|
||
"retry": "Réessayer",
|
||
"reportIssue": "Signaler un problème",
|
||
"showPassword": "Afficher le mot de passe",
|
||
"hidePassword": "Masquer le mot de passe"
|
||
},
|
||
"doctorReport": {
|
||
"title": "Rapport de santé",
|
||
"subtitle": "HealthLog — Rapport personnel de santé",
|
||
"patient": "Patient",
|
||
"dateOfBirth": "Date de naissance",
|
||
"gender": "Sexe",
|
||
"genderMale": "Homme",
|
||
"genderFemale": "Femme",
|
||
"genderOther": "Non-binaire",
|
||
"height": "Taille",
|
||
"period": "Période du rapport",
|
||
"createdOn": "Créé le",
|
||
"vitalsTitle": "Signes vitaux — Résumé",
|
||
"colParameter": "Paramètre",
|
||
"colCurrent": "Actuel",
|
||
"colAvgPeriod": "Moy. période",
|
||
"colMin": "Min",
|
||
"colMax": "Max",
|
||
"colN": "n",
|
||
"bpClassificationTitle": "Tension artérielle — Classification ESH (2023)",
|
||
"avgBp": "Tension artérielle moyenne",
|
||
"classification": "Classification",
|
||
"bmiTitle": "Indice de masse corporelle (IMC)",
|
||
"bmiRow": "IMC:{bmi} kg/m² — Classification: {class} (WHO)",
|
||
"complianceTitle": "Observance des médicaments",
|
||
"glp1Title": "Traitement GLP-1",
|
||
"glp1WeightSummary": "Poids sur la période du rapport : {start} kg → {end} kg ({delta} kg)",
|
||
"glp1CurrentDose": "Dose actuelle:{value} {unit} (since {since})",
|
||
"glp1Compliance": "Observance:{taken} / {total} ({rate}%)",
|
||
"glp1SideEffectsTitle": "Effets secondaires consignés",
|
||
"colGlp1Date": "Date",
|
||
"colGlp1Dose": "Dose",
|
||
"colGlp1Note": "Note",
|
||
"colGlp1SideEffect": "Effet secondaire",
|
||
"colMedication": "Médicament",
|
||
"colTaken": "Pris",
|
||
"colSkipped": "Sauté",
|
||
"colMissed": "Manqué",
|
||
"colExpected": "Attendues",
|
||
"colComplianceRate": "Taux d'observance",
|
||
"moodTitle": "Évolution de l’humeur",
|
||
"moodSummary": "Moyenne:{avg} / 5.0 · Entries: {count} · Range: {min}–{max}",
|
||
"colMood": "Humeur",
|
||
"colCount": "Nombre",
|
||
"colShare": "Part",
|
||
"footerDisclaimer1": "Ce rapport a été généré automatiquement à partir de données auto-déclarées et vise à soutenir",
|
||
"footerDisclaimer2": "la conversation médecin-patient. Il ne remplace pas un diagnostic médical. Les corrélations n'impliquent pas la causalité.",
|
||
"footerSource": "Source : HealthLog | Fuseau horaire : Europe/Berlin | Créé : {timestamp}",
|
||
"typeWeight": "Poids corporel",
|
||
"typeBpSys": "Tension artérielle systolique",
|
||
"typeBpDia": "Tension artérielle diastolique",
|
||
"typePulse": "Pouls au repos",
|
||
"typeBodyFat": "Masse grasse",
|
||
"typeSleep": "Durée du sommeil",
|
||
"typeSteps": "Activité (pas)",
|
||
"typeTotalBodyWater": "Eau corporelle totale",
|
||
"typeBoneMass": "Masse osseuse",
|
||
"typeOxygenSaturation": "Saturation en oxygène",
|
||
"unitSteps": "Pas",
|
||
"bmiUnderweight": "Insuffisance pondérale",
|
||
"bmiNormal": "Poids normal",
|
||
"bmiOverweight": "Surpoids (préobésité)",
|
||
"bmiObeseGrade1": "Obésité grade I",
|
||
"bmiObeseGrade2": "Obésité grade II",
|
||
"bmiObeseGrade3": "Obésité grade III",
|
||
"bpOptimal": "Optimale",
|
||
"bpNormal": "Normale",
|
||
"bpHighNormal": "Normale haute",
|
||
"bpHypertensionGrade1": "Hypertension de grade 1",
|
||
"bpHypertensionGrade2": "Hypertension de grade 2",
|
||
"bpHypertensionGrade3": "Hypertension de grade 3",
|
||
"moodAwful": "Très mauvaise",
|
||
"moodBad": "Mauvais",
|
||
"moodNeutral": "Neutre",
|
||
"moodGood": "Bien",
|
||
"moodGreat": "Très bonne",
|
||
"typeGlucoseFasting": "Glycémie (à jeun)",
|
||
"typeGlucosePostprandial": "Glycémie (postprandiale)",
|
||
"typeGlucoseRandom": "Glycémie (indifférente)",
|
||
"typeGlucoseBedtime": "Glycémie (avant le coucher)",
|
||
"glucoseClassificationTitle": "Glycémie — Plages de référence (ADA 2024 / DDG)",
|
||
"glucoseRow": "{label} : moy. {avg} {unit} (cible {rangeMin}–{rangeMax}) — {class}",
|
||
"glucoseInTarget": "dans la cible",
|
||
"glucoseBelowTarget": "sous la cible",
|
||
"glucoseAboveTarget": "au-dessus de la cible",
|
||
"practiceLabel": "Cabinet",
|
||
"insurer": "Assurance maladie",
|
||
"insuranceNumber": "N° d’assuré",
|
||
"summaryTitle": "Résumé clinique",
|
||
"summaryReadings": "Enregistré sur {days} jours : {count} mesures sur {params} paramètres.",
|
||
"summaryTrend": "{label} : dernier {latest} {arrow}",
|
||
"summaryAdherence": "Observance médicamenteuse : {rate}% (moyenne pondérée).",
|
||
"chartsTitle": "Graphiques de tendance",
|
||
"aiSummaryTitle": "Résumé IA — non validé cliniquement",
|
||
"aiSummaryDisclaimer": "Cette section a été générée automatiquement par un modèle d’IA et n’est pas validée cliniquement. Elle ne remplace pas une évaluation médicale.",
|
||
"packageReadme": "Dossier de santé HealthLog\n\nCe paquet contient :\n- report.pdf : le rapport de santé pour votre médecin.\n- bundle.json : les mêmes données sous forme de Bundle document HL7 FHIR R4, compatible ePA.\n\nGénéré avec HealthLog.",
|
||
"wellnessTitle": "Résumé de bien-être",
|
||
"wellnessDisclaimer": "Ce sont des scores de bien-être descriptifs calculés à partir de vos signaux suivis (0–100). Ce ne sont pas des évaluations cliniques ni des diagnostics.",
|
||
"wellnessRecovery": "Récupération",
|
||
"wellnessStress": "Stress",
|
||
"wellnessStrain": "Effort",
|
||
"cycleTitle": "Cycle menstruel",
|
||
"cycleLmp": "Dernières règles",
|
||
"cycleAvgLength": "Durée moyenne du cycle",
|
||
"cycleAvgPeriod": "Durée moyenne des règles",
|
||
"cyclePhase": "Phase actuelle",
|
||
"cycleDays": "jours",
|
||
"cycleColStart": "Début des règles",
|
||
"cycleColLength": "Durée du cycle (jours)",
|
||
"cycleColPeriod": "Durée des règles (jours)",
|
||
"cyclePhases": {
|
||
"MENSTRUAL": "Menstruelle",
|
||
"FOLLICULAR": "Folliculaire",
|
||
"OVULATORY": "Ovulatoire",
|
||
"LUTEAL": "Lutéale"
|
||
},
|
||
"labsTitle": "Résultats d'analyses",
|
||
"labsColAnalyte": "Biomarqueur",
|
||
"labsColValue": "Valeur",
|
||
"labsColReference": "Référence",
|
||
"labsColStatus": "Statut",
|
||
"labsColDate": "Date",
|
||
"glucoseClinical": {
|
||
"title": "Aperçu glycémique (clinique)",
|
||
"colMetric": "Indicateur",
|
||
"colValue": "Valeur",
|
||
"tirInRange": "Temps dans la cible (70–180 mg/dl)",
|
||
"tirLow": "Bas (< 70 mg/dl)",
|
||
"tirVeryLow": "Très bas (< 54 mg/dl)",
|
||
"tirHigh": "Élevé (> 180 mg/dl)",
|
||
"tirVeryHigh": "Très élevé (> 250 mg/dl)",
|
||
"mean": "Glycémie moyenne",
|
||
"gmi": "Indicateur de gestion du glucose (GMI)",
|
||
"eA1c": "HbA1c estimée",
|
||
"cv": "Variabilité (CV%)",
|
||
"spotCaveat": "Ce sont des estimations issues de mesures ponctuelles, et non un profil de capteur continu — à lire comme une tendance, pas comme un verdict clinique."
|
||
},
|
||
"illnessTitle": "Affections et maladies",
|
||
"illnessOngoing": "En cours",
|
||
"illnessColCondition": "Affection",
|
||
"illnessColType": "Type",
|
||
"illnessColLifecycle": "Évolution",
|
||
"illnessColOnset": "Début",
|
||
"illnessColResolved": "Résolue"
|
||
},
|
||
"errorBoundary": {
|
||
"title": "Une erreur est survenue",
|
||
"description": "Une erreur inattendue est survenue. Tu peux réessayer, copier les détails techniques ou ouvrir un rapport de bug."
|
||
},
|
||
"notFound": {
|
||
"title": "Cette page n'existe pas.",
|
||
"backToDashboard": "Retour au tableau de bord"
|
||
},
|
||
"offlineBanner": {
|
||
"message": "Pas de connexion — tes modifications seront enregistrées dès que tu seras de nouveau en ligne.",
|
||
"showingCached": "Affichage de tes dernières données synchronisées."
|
||
},
|
||
"demoBanner": {
|
||
"message": "Mode démo — les modifications ne sont pas enregistrées."
|
||
},
|
||
"nav": {
|
||
"dashboard": "Tableau de bord",
|
||
"measurements": "Mesures",
|
||
"medications": "Médicaments",
|
||
"insights": "Insights",
|
||
"achievements": "Succès",
|
||
"settings": "Paramètres",
|
||
"bugreport": "Rapport de bug",
|
||
"admin": "Console d’administration",
|
||
"logout": "Se déconnecter",
|
||
"login": "Se connecter",
|
||
"notifications": "Notifications",
|
||
"theme": "Apparence",
|
||
"themeSystem": "Système",
|
||
"themeDark": "Sombre",
|
||
"themeLight": "Clair",
|
||
"collapseSidebar": "Réduire",
|
||
"userMenu": "Menu utilisateur",
|
||
"accountSettings": "Paramètres du compte",
|
||
"mood": "Humeur",
|
||
"coach": "Coach",
|
||
"skipToContent": "Aller au contenu",
|
||
"sidebar": "Barre latérale",
|
||
"mainNavigation": "Navigation principale",
|
||
"mobileNavigation": "Navigation mobile",
|
||
"loadingScreen": "Chargement…",
|
||
"more": "Plus",
|
||
"moreSheetTitle": "Plus",
|
||
"moreSheetDescription": "Accédez au reste de HealthLog.",
|
||
"capture": {
|
||
"title": "Enregistrer",
|
||
"description": "Que souhaitez-vous enregistrer ?",
|
||
"measurement": "Mesure",
|
||
"measurementDescription": "Poids, tension artérielle, pouls et plus",
|
||
"medication": "Médicament",
|
||
"medicationDescription": "Marquer une dose comme prise",
|
||
"mood": "Humeur",
|
||
"moodDescription": "Enregistrer l'humeur et les tags"
|
||
},
|
||
"cycle": "Cycle",
|
||
"labs": "Analyses",
|
||
"vorsorge": "Prévention",
|
||
"illness": "Maladie"
|
||
},
|
||
"auth": {
|
||
"login": "Se connecter",
|
||
"register": "S'inscrire",
|
||
"username": "Nom d'utilisateur",
|
||
"password": "Mot de passe",
|
||
"email": "Adresse e-mail",
|
||
"emailPlaceholder": "nom@exemple.fr",
|
||
"emailOrUsername": "Adresse e-mail ou nom d’utilisateur",
|
||
"emailOrUsernamePlaceholder": "nom@exemple.fr ou nomdutilisateur",
|
||
"loginWithPasskey": "Se connecter avec une passkey",
|
||
"loginWithPassword": "Se connecter avec un mot de passe",
|
||
"noAccount": "Pas encore de compte ?",
|
||
"hasAccount": "Déjà un compte ?",
|
||
"loginFailed": "Échec de la connexion",
|
||
"registerFailed": "Échec de l’inscription",
|
||
"invitedBanner": "Vous avez été invité — créez votre compte même si les inscriptions sont fermées.",
|
||
"createAccount": "Créer un compte",
|
||
"newAccount": "Créer un nouveau compte",
|
||
"backToPasskey": "Revenir à la passkey",
|
||
"passkeySetupLater": "Tu peux configurer les passkeys plus tard dans les paramètres.",
|
||
"passwordMinLength": "Min. 12 caractères",
|
||
"passwordTooShort": "Le mot de passe doit comporter au moins {minLength} caractères.",
|
||
"privacyPolicy": "Politique de confidentialité"
|
||
},
|
||
"dashboard": {
|
||
"title": "Tableau de bord",
|
||
"greeting": {
|
||
"morning": "Bonjour",
|
||
"day": "Bonjour",
|
||
"evening": "Bonsoir"
|
||
},
|
||
"welcomeBack": "{greeting}, content de te revoir.",
|
||
"welcomeBackWithName": "{greeting} {name}, content de te revoir.",
|
||
"hero": {
|
||
"scoreLabel": "Health Score",
|
||
"scoreProvisional": "Pas encore assez de données",
|
||
"scoreComputing": "Calcul du score en cours …",
|
||
"doses": {
|
||
"summary": "{taken} dose(s) prise(s) sur {scheduled}",
|
||
"nextAt": "Prochaine à {time}",
|
||
"allDone": "Toutes les doses du jour sont prises",
|
||
"none": "Aucune dose prévue aujourd’hui"
|
||
},
|
||
"verdict": {
|
||
"doseOverdue": "Une dose de {name} est en retard.",
|
||
"doseOverdueNoName": "Une dose est en retard.",
|
||
"bpHigh": "Votre dernière tension était très élevée ({sys}/{dia}). Reprenez une mesure au calme.",
|
||
"doseUpcoming": "{name} est prévu à {time}.",
|
||
"doseUpcomingNoName": "Une dose est prévue à {time}.",
|
||
"weightDrift": "Votre poids s’éloigne de la plage cible cette semaine.",
|
||
"shortNights": "Vos nuits ont été courtes récemment — {hours} h en moyenne.",
|
||
"silence": "Aucune mesure depuis {days} jours. Une saisie rapide garde votre tableau à jour.",
|
||
"scoreDrop": "Votre score est {points} points sous la semaine dernière.",
|
||
"allQuiet": "Tout est calme — rien ne demande votre attention aujourd’hui."
|
||
},
|
||
"action": {
|
||
"takeDose": "Enregistrer maintenant",
|
||
"viewBp": "Voir la tension",
|
||
"viewWeight": "Voir le poids",
|
||
"viewSleep": "Voir le sommeil",
|
||
"logMeasurement": "Saisir une mesure",
|
||
"viewInsights": "Ouvrir Insights"
|
||
},
|
||
"briefing": {
|
||
"title": "Briefing du jour",
|
||
"viewAll": "Ouvrir Insights"
|
||
}
|
||
},
|
||
"greetingSalutation": "Bonjour, {name}",
|
||
"streakLabel": "jours d’affilée",
|
||
"weight": "Poids",
|
||
"bloodPressure": "Tension artérielle",
|
||
"pulse": "Pouls",
|
||
"bodyFat": "Masse grasse",
|
||
"sleep": "Sommeil",
|
||
"steps": "Pas",
|
||
"vo2Max": "VO₂ max",
|
||
"vo2MaxUnit": "mL/(kg·min)",
|
||
"bpInTarget": "TA dans la cible",
|
||
"weightShort": "Poids",
|
||
"bloodPressureSysShort": "TA (Sys)",
|
||
"bloodPressureDiaShort": "TA (Dia)",
|
||
"pulseShort": "Pouls",
|
||
"bodyFatShort": "TG",
|
||
"moodShort": "Humeur",
|
||
"sleepShort": "Sommeil",
|
||
"stepsShort": "Pas",
|
||
"vo2MaxShort": "VO₂ max",
|
||
"bpInTargetWindow90": "TA-cible · 90 j",
|
||
"bpInTargetWindowDynamic": "TA-cible · {days} j",
|
||
"bpInTargetCollecting": "collecte de données",
|
||
"medications": "Médicaments",
|
||
"quickAddMeasurement": "Saisir une mesure",
|
||
"quickAddMood": "Saisir une humeur",
|
||
"quickAddMedicationIntake": "Saisir une prise",
|
||
"customizeDashboard": "Personnaliser le tableau de bord",
|
||
"medicationIntakeQuickAdd": {
|
||
"sheetTitle": "Saisir une prise de médicament",
|
||
"sheetDescription": "Enregistre la dose, l’heure et le médicament en quelques touches.",
|
||
"medicationLabel": "Médicament",
|
||
"medicationPlaceholder": "Sélectionner un médicament",
|
||
"doseLabel": "Dose",
|
||
"dosePlaceholder": "p. ex. 5 mg",
|
||
"doseHint": "Prérempli avec la dose standard. Modifiez-la pour enregistrer une dose différente pour cette prise uniquement.",
|
||
"timeLabel": "Heure de la prise",
|
||
"saveError": "Impossible d’enregistrer la prise.",
|
||
"emptyTitle": "Aucun médicament pour l’instant",
|
||
"emptyDescription": "Crée d’abord un médicament avec un horaire, puis reviens ici pour saisir la prise.",
|
||
"emptyCta": "Ajouter un médicament"
|
||
},
|
||
"quickEntryDiscard": {
|
||
"title": "Abandonner cette saisie ?",
|
||
"description": "Vous avez des données non enregistrées. Fermer le formulaire et perdre ce que vous avez saisi ?",
|
||
"confirm": "Abandonner",
|
||
"cancel": "Continuer la saisie"
|
||
},
|
||
"compliance7d": "Observance (7 jours)",
|
||
"mood": "Humeur",
|
||
"customizeTitle": "Mise en page du tableau",
|
||
"heroToggleLabel": "Aperçu du jour",
|
||
"heroToggleDescription": "Affiche le message d’accueil, le score, le focus du jour et l’état des doses tout en haut du tableau de bord.",
|
||
"layoutReset": "Rétablir les valeurs par défaut",
|
||
"layoutSaveSuccess": "Mise en page enregistrée",
|
||
"layoutSaveError": "Impossible d’enregistrer la mise en page",
|
||
"layoutResetSuccess": "Mise en page par défaut restaurée",
|
||
"layoutUsingDefaults": "Mise en page par défaut active",
|
||
"layoutCustomized": "Mise en page personnalisée active",
|
||
"moveUp": "Monter",
|
||
"moveDown": "Descendre",
|
||
"layoutTileColumn": "Tuile",
|
||
"layoutChartColumn": "Graphique",
|
||
"dragHandle": "Glisser pour réordonner",
|
||
"dragHandleHint": "Glisse la poignée pour réordonner ce widget. Tu peux aussi utiliser les flèches Haut et Bas, ou cibler la poignée puis appuyer sur Espace plus les flèches.",
|
||
"emptyTitle": "Ton tableau de bord est vide",
|
||
"emptyDescription": "Saisis ta première mesure ou humeur. Les tuiles et graphiques apparaissent automatiquement dès qu’il y a des données.",
|
||
"emptyAddMeasurement": "Saisir la première mesure",
|
||
"staleHint": "Dernière valeur il y a {count} j",
|
||
"staleHintWeeksOne": "Dernière valeur il y a 1 semaine",
|
||
"staleHintWeeksOther": "Dernière valeur il y a {count} semaines",
|
||
"staleHintMonthsOne": "Dernière valeur il y a 1 mois",
|
||
"staleHintMonthsOther": "Dernière valeur il y a {count} mois",
|
||
"recentWorkouts": {
|
||
"title": "Entraînements récents",
|
||
"viewAll": "Tout voir",
|
||
"loading": "Chargement des entraînements…",
|
||
"empty": {
|
||
"title": "Aucun entraînement",
|
||
"cta": "Ouvre l'app Apple Santé sur ton iPhone pour synchroniser les entraînements."
|
||
}
|
||
},
|
||
"metric": {
|
||
"title": {
|
||
"weight": "Poids",
|
||
"bloodPressure": "Tension artérielle",
|
||
"pulse": "Pouls",
|
||
"bodyFat": "Masse grasse",
|
||
"glucose": "Glycémie",
|
||
"sleep": "Sommeil",
|
||
"steps": "Pas",
|
||
"totalBodyWater": "Eau corporelle totale",
|
||
"boneMass": "Masse osseuse",
|
||
"oxygenSaturation": "Saturation en oxygène"
|
||
},
|
||
"unit": {
|
||
"weight": "kg",
|
||
"bloodPressure": "mmHg",
|
||
"pulse": "bpm",
|
||
"bodyFat": "%",
|
||
"glucose": "mg/dL",
|
||
"sleep": "h",
|
||
"steps": "pas",
|
||
"totalBodyWater": "kg",
|
||
"boneMass": "kg",
|
||
"oxygenSaturation": "%"
|
||
}
|
||
}
|
||
},
|
||
"measurements": {
|
||
"title": "Mesures",
|
||
"subtitle": "Saisis tes mesures et consulte l'historique complet. Les tendances et analyses sont dans Analyses.",
|
||
"addMeasurement": "Ajouter",
|
||
"editMeasurement": "Modifier la mesure",
|
||
"type": "Type",
|
||
"value": "Valeur",
|
||
"date": "Date",
|
||
"source": "Source",
|
||
"notes": "Notes",
|
||
"typeWeight": "Poids",
|
||
"typeBloodPressure": "Tension artérielle",
|
||
"typeBpSys": "Sys",
|
||
"typeBpDia": "Dia",
|
||
"typePulse": "Pouls",
|
||
"typeBodyFat": "Masse grasse",
|
||
"typeSleep": "Sommeil",
|
||
"typeSteps": "Pas",
|
||
"typeBloodGlucose": "Glycémie",
|
||
"typeTotalBodyWater": "Eau corporelle totale",
|
||
"typeBoneMass": "Masse osseuse",
|
||
"typeOxygenSaturation": "Saturation en oxygène",
|
||
"typeHeartRateVariability": "Variabilité de la fréquence cardiaque",
|
||
"typeRestingHeartRate": "Fréquence cardiaque au repos",
|
||
"typeActiveEnergyBurned": "Énergie active",
|
||
"typeFlightsClimbed": "Étages",
|
||
"typeWalkingRunningDistance": "Distance à pied et en course",
|
||
"typeVo2Max": "VO₂ max",
|
||
"typeBodyTemperature": "Température corporelle",
|
||
"typeFatFreeMass": "Masse maigre",
|
||
"typeFatMass": "Masse grasse",
|
||
"typeMuscleMass": "Masse musculaire",
|
||
"typeSkinTemperature": "Température cutanée",
|
||
"typePulseWaveVelocity": "Vitesse de l’onde de pouls",
|
||
"typeVascularAge": "Âge vasculaire",
|
||
"typeVisceralFat": "Graisse viscérale",
|
||
"typeAudioExposureEnv": "Exposition au bruit (environnement)",
|
||
"typeAudioExposureHeadphone": "Exposition au bruit (écouteurs)",
|
||
"typeTimeInDaylight": "Temps à la lumière du jour",
|
||
"typeWalkingSteadiness": "Stabilité à la marche",
|
||
"typeAudioExposureEvent": "Événement d’écoute forte",
|
||
"typeRespiratoryRate": "Fréquence respiratoire",
|
||
"typeBodyMassIndex": "Indice de masse corporelle",
|
||
"typeLeanBodyMass": "Masse maigre",
|
||
"typeWalkingHeartRateAverage": "Fréquence cardiaque à la marche (moy.)",
|
||
"typeWalkingAsymmetry": "Asymétrie de la marche",
|
||
"typeWalkingDoubleSupport": "Double appui à la marche",
|
||
"typeWalkingStepLength": "Longueur du pas",
|
||
"typeWalkingSpeed": "Vitesse de marche",
|
||
"glucoseContext": "Contexte",
|
||
"glucoseContextFasting": "À jeun (≥8 h sans repas)",
|
||
"glucoseContextPostprandial": "Postprandial (2 h après le repas)",
|
||
"glucoseContextRandom": "Indifférent / sans contexte",
|
||
"glucoseContextBedtime": "Avant le coucher",
|
||
"unitHours": "Heures",
|
||
"unitSteps": "Pas",
|
||
"sourceManual": "Manuelle",
|
||
"sourceWithings": "Withings",
|
||
"sourceImport": "Importer",
|
||
"sourceAppleHealth": "Apple Health",
|
||
"systolicLabel": "Systolique (mmHg)",
|
||
"diastolicLabel": "Diastolique (mmHg)",
|
||
"pulseLabel": "Pouls (bpm)",
|
||
"valueWithUnit": "Valeur ({unit})",
|
||
"timestamp": "Heure",
|
||
"timestampBackdateHint": "Ajustez la date et l'heure pour enregistrer un relevé passé.",
|
||
"notesPlaceholder": "p. ex. après le repas",
|
||
"formReset": "Réinitialiser le formulaire",
|
||
"saveError": "Erreur lors de l’enregistrement",
|
||
"duplicateTimestamp": "Une mesure de ce type existe déjà à cet horodatage.",
|
||
"deleteError": "Erreur lors de la suppression",
|
||
"deletedToast": "Mesure supprimée",
|
||
"restoredToast": "Mesure restaurée",
|
||
"restoreError": "Échec de la restauration",
|
||
"invalidValue": "Saisis une valeur valide.",
|
||
"invalidTimestamp": "Choisis une date et une heure valides.",
|
||
"loginRequired": "Connecte-toi pour voir tes mesures.",
|
||
"allTypes": "Tous les types",
|
||
"measurementCount": "{count} mesures",
|
||
"emptyTitle": "Aucune mesure pour l’instant",
|
||
"emptyDescription": "Saisis du poids, de la tension, du pouls ou d’autres valeurs pour repérer les tendances.",
|
||
"emptyFilteredTitle": "Aucune mesure ne correspond au filtre",
|
||
"emptyFilteredDescription": "Choisis un autre type ou supprime le filtre pour voir toutes les mesures.",
|
||
"emptyAddFirst": "Saisir la première mesure",
|
||
"emptyResetFilter": "Afficher tous les types",
|
||
"comment": "Commentaire",
|
||
"actions": "Actions",
|
||
"deleteConfirmTitle": "Supprimer la mesure ?",
|
||
"deleteConfirmDescription": "Cette mesure sera supprimée. Vous pourrez annuler cette action pendant un court instant juste après.",
|
||
"pageInfo": "Page {page} sur {total}",
|
||
"previousPage": "Page précédente",
|
||
"nextPage": "Page suivante",
|
||
"dailyTotalCaption": "({count} échantillons)",
|
||
"sleepNapCaption": "+{count} sieste(s)",
|
||
"sleepAwakeningsCaption": "{count} réveil(s)",
|
||
"expandDay": "Afficher les échantillons de ce jour",
|
||
"collapseDay": "Masquer les échantillons de ce jour",
|
||
"loadError": "Impossible de charger les mesures.",
|
||
"typeCardioRecovery": "Récupération cardiaque",
|
||
"typeWristTemperature": "Température du poignet",
|
||
"typeFallCount": "Chutes",
|
||
"typeSixMinuteWalkDistance": "Distance de marche de 6 minutes",
|
||
"typeStairAscentSpeed": "Vitesse en montée d'escaliers",
|
||
"typeStairDescentSpeed": "Vitesse en descente d'escaliers",
|
||
"typeBreathingDisturbances": "Troubles respiratoires du sommeil",
|
||
"typeIrregularRhythmNotification": "Notification de rythme irrégulier",
|
||
"typeHighHeartRateEvent": "Notification de fréquence cardiaque élevée",
|
||
"typeLowHeartRateEvent": "Notification de fréquence cardiaque basse",
|
||
"typeWalkingSteadinessEvent": "Alerte de stabilité de la marche",
|
||
"typeBreathingDisturbanceEvent": "Trouble respiratoire",
|
||
"typeRecoveryScore": "Score de récupération",
|
||
"typeStressScore": "Score de stress",
|
||
"typeStrainScore": "Score d'effort",
|
||
"typeHrvRmssd": "VFC (RMSSD)",
|
||
"typeDayStrain": "Effort du jour",
|
||
"typeWorkoutStrain": "Effort de la séance",
|
||
"typeSleepPerformance": "Performance du sommeil",
|
||
"typeSleepEfficiency": "Efficacité du sommeil",
|
||
"typeSleepConsistency": "Régularité du sommeil",
|
||
"typeSleepNeed": "Besoin de sommeil",
|
||
"typeEnergyExpenditureKj": "Dépense énergétique",
|
||
"typeAverageHeartRate": "Fréquence cardiaque moyenne",
|
||
"typeMaxHeartRate": "Fréquence cardiaque maximale",
|
||
"typeSleepDisturbanceCount": "Perturbations du sommeil",
|
||
"typeAnsCharge": "Charge SNA",
|
||
"typeCardioLoad": "Charge cardio",
|
||
"typeSleepScore": "Score de sommeil",
|
||
"typeBodyTemperatureDeviation": "Écart de température corporelle",
|
||
"typeResilience": "Résilience",
|
||
"sourceComputed": "Calculé",
|
||
"sourceWhoop": "WHOOP",
|
||
"sourceFitbit": "Fitbit",
|
||
"bulkDeleteSuccess": "{count} mesures supprimées",
|
||
"bulkDeleteError": "Erreur lors de la suppression des mesures sélectionnées",
|
||
"bulkDeleteConfirmTitle": "Supprimer {count} mesures ?",
|
||
"bulkDeleteConfirmBody": "Les {count} mesures sélectionnées seront définitivement supprimées."
|
||
},
|
||
"mood": {
|
||
"title": "Humeur",
|
||
"subtitle": "Tendance et entrées d’humeur",
|
||
"addEntry": "Ajouter",
|
||
"editEntry": "Modifier l’entrée",
|
||
"moodLevel": "Humeur",
|
||
"heroQuestion": "Comment vas-tu ?",
|
||
"factorYes": "Oui",
|
||
"factorNo": "Non",
|
||
"factorRatingOption": "{label} : {value} sur {max}",
|
||
"tags": "Étiquettes",
|
||
"tagsPlaceholder": "p. ex. sport, travail, famille",
|
||
"tagsHelp": "Sépare par des virgules",
|
||
"timestamp": "Heure",
|
||
"date": "Date",
|
||
"source": "Source",
|
||
"levelSuperGut": "Excellent",
|
||
"levelGut": "Bien",
|
||
"levelOkay": "Correct",
|
||
"levelSchlecht": "Mauvais",
|
||
"levelLausig": "Pénible",
|
||
"sourceMoodlog": "moodLog",
|
||
"allMoods": "Toutes les humeurs",
|
||
"entryCount": "{count} entrées",
|
||
"emptyTitle": "Pas encore d’entrée d’humeur",
|
||
"emptyDescription": "Note comment tu te sens aujourd’hui pour repérer des tendances au fil du temps.",
|
||
"emptyFilteredTitle": "Aucune entrée ne correspond au filtre",
|
||
"emptyFilteredDescription": "Choisis un autre niveau ou supprime le filtre pour voir toutes les entrées.",
|
||
"emptyAddFirst": "Saisir la première humeur",
|
||
"emptyResetFilter": "Afficher toutes les humeurs",
|
||
"actions": "Actions",
|
||
"formReset": "Réinitialiser le formulaire",
|
||
"noteCharCount": "{count}/{max}",
|
||
"formResetConfirmTitle": "Réinitialiser ce formulaire ?",
|
||
"formResetConfirmBody": "Cela efface l’humeur, les tags et la note que vous avez saisis. Cette action est irréversible.",
|
||
"formResetConfirmAction": "Réinitialiser",
|
||
"saveError": "Erreur lors de l’enregistrement",
|
||
"deleteError": "Erreur lors de la suppression",
|
||
"deletedToast": "Entrée supprimée",
|
||
"restoredToast": "Entrée restaurée",
|
||
"restoreError": "Échec de la restauration",
|
||
"invalidTimestamp": "Choisis une date et une heure valides.",
|
||
"deleteConfirmTitle": "Supprimer l’entrée ?",
|
||
"deleteConfirmDescription": "Cette entrée d’humeur sera supprimée. Vous pourrez annuler cette action pendant un court instant juste après.",
|
||
"pageInfo": "Page {page} sur {total}",
|
||
"previousPage": "Page précédente",
|
||
"nextPage": "Page suivante",
|
||
"loginRequired": "Connecte-toi pour voir tes entrées d’humeur.",
|
||
"note": "Note",
|
||
"noteCollapse": "Réduire la note",
|
||
"noteExpand": "Afficher la note complète",
|
||
"notePlaceholder": "Ajoutez une note sur votre ressenti…",
|
||
"tagPicker": "Étiquettes",
|
||
"tagCategory": {
|
||
"feelings": "Émotions",
|
||
"sleep": "Sommeil",
|
||
"health": "Santé",
|
||
"social": "Social",
|
||
"work": "Travail",
|
||
"hobbies": "Loisirs",
|
||
"factors": "Facteurs",
|
||
"custom": "Personnalisées"
|
||
},
|
||
"tag": {
|
||
"happy": "heureux",
|
||
"excited": "enthousiaste",
|
||
"grateful": "reconnaissant",
|
||
"relaxed": "détendu",
|
||
"content": "satisfait",
|
||
"tired": "fatigué",
|
||
"unsure": "incertain",
|
||
"bored": "ennuyé",
|
||
"tense": "tendu",
|
||
"angry": "en colère",
|
||
"stressed": "stressé",
|
||
"sad": "triste",
|
||
"sleptWell": "bien dormi",
|
||
"sleptOk": "sommeil moyen",
|
||
"sleptPoorly": "mal dormi",
|
||
"earlyNight": "couché tôt",
|
||
"workedOut": "fait du sport",
|
||
"ateWell": "bien mangé",
|
||
"hydrated": "bu de l'eau",
|
||
"walked": "marché",
|
||
"alcohol": "alcool",
|
||
"family": "famille",
|
||
"friends": "amis",
|
||
"party": "fête",
|
||
"alone": "seul",
|
||
"productive": "productif",
|
||
"overtime": "heures sup",
|
||
"dayOff": "jour de repos",
|
||
"travel": "voyage",
|
||
"sickDay": "jour de maladie",
|
||
"movies": "films",
|
||
"reading": "lecture",
|
||
"gaming": "jeux vidéo",
|
||
"music": "musique",
|
||
"outdoors": "plein air",
|
||
"fastFood": "fast-food",
|
||
"noSweets": "sans sucreries",
|
||
"bigMeal": "gros repas",
|
||
"factorWork": "travail",
|
||
"factorSocial": "vie sociale",
|
||
"factorSleepQuality": "qualité du sommeil",
|
||
"factorStress": "stress",
|
||
"factorConflict": "conflit",
|
||
"factorFamily": "famille",
|
||
"factorSadness": "tristesse",
|
||
"praise": "compliment"
|
||
},
|
||
"sourceManual": "Manuel",
|
||
"sourceWeb": "Web",
|
||
"sourceTelegram": "Telegram",
|
||
"sourceDaylio": "Daylio",
|
||
"bulkDeleteSuccess": "{count} entrées supprimées",
|
||
"bulkDeleteError": "Erreur lors de la suppression des entrées sélectionnées",
|
||
"bulkDeleteConfirmTitle": "Supprimer {count} entrées ?",
|
||
"bulkDeleteConfirmBody": "Les {count} entrées d'humeur sélectionnées seront définitivement supprimées.",
|
||
"customize": "Personnaliser les étiquettes d’humeur",
|
||
"addTagInline": "Ajouter une étiquette",
|
||
"manage": {
|
||
"groupsTitle": "Groupes",
|
||
"groupsDescription": "Crée tes propres groupes et définis leur ordre dans le sélecteur.",
|
||
"newGroup": "Nouveau groupe",
|
||
"groupLabel": "Nom du groupe",
|
||
"groupIcon": "Icône",
|
||
"groupCreated": "Groupe créé",
|
||
"groupRenamed": "Groupe enregistré",
|
||
"groupDeleteTitle": "Supprimer le groupe ?",
|
||
"groupDeleteBody": "Les étiquettes de ce groupe reviennent dans leur groupe d’origine. Aucune saisie n’est supprimée.",
|
||
"groupDeleted": "Groupe supprimé",
|
||
"groupEmpty": "Pas encore de groupe personnel.",
|
||
"groupLimitReached": "Limite de groupes atteinte",
|
||
"tagsTitle": "Étiquettes",
|
||
"tagsDescription": "Masque, réordonne, déplace ou modifie les étiquettes du sélecteur.",
|
||
"newTag": "Nouvelle étiquette",
|
||
"tagLabel": "Nom de l’étiquette",
|
||
"tagIcon": "Icône",
|
||
"tagGroup": "Groupe",
|
||
"usageCount": "{count} saisies",
|
||
"hideTag": "Masquer l’étiquette",
|
||
"showTag": "Afficher l’étiquette",
|
||
"moveToGroup": "Déplacer vers un groupe",
|
||
"archive": "Archiver",
|
||
"restore": "Restaurer",
|
||
"archivedTitle": "Étiquettes archivées",
|
||
"archivedDescription": "Les étiquettes archivées restent dans tes saisies passées — elles disparaissent seulement du sélecteur.",
|
||
"archivedEmpty": "Rien d’archivé.",
|
||
"purgeTitle": "Supprimer l’étiquette définitivement ?",
|
||
"purgeBody": "L’étiquette sera retirée de {count} saisies passées. Cette action est irréversible.",
|
||
"purgeAction": "Supprimer définitivement",
|
||
"purged": "Étiquette supprimée",
|
||
"tagLimitReached": "Limite d’étiquettes atteinte",
|
||
"iconPickerTitle": "Choisir une icône",
|
||
"iconSearchPlaceholder": "Rechercher des icônes…",
|
||
"iconSearchEmpty": "Aucune icône ne correspond.",
|
||
"iconSearchClear": "Effacer la recherche",
|
||
"orderSave": "Enregistrer l’ordre",
|
||
"orderSaved": "Ordre enregistré",
|
||
"moveUp": "Monter",
|
||
"moveDown": "Descendre",
|
||
"iconGroupEmotions": "Émotions",
|
||
"iconGroupActivities": "Activités",
|
||
"iconGroupHealth": "Santé",
|
||
"iconGroupFood": "Nourriture et boissons",
|
||
"iconGroupWeather": "Météo",
|
||
"iconGroupPlaces": "Lieux",
|
||
"iconGroupMisc": "Autres"
|
||
},
|
||
"sectionMoreTags": "Plus de tags",
|
||
"sectionFactors": "Facteurs",
|
||
"sectionNoteDetails": "Note et détails",
|
||
"quickTagsHelp": "Vos tags fréquents — en un geste",
|
||
"quickTagsExpand": "Plus"
|
||
},
|
||
"medications": {
|
||
"title": "Médicaments",
|
||
"subtitle": "Médication, horaires et prises",
|
||
"loginRequired": "Connecte-toi pour gérer tes médicaments.",
|
||
"addMedication": "Ajouter",
|
||
"firstMedication": "Ajouter le premier médicament",
|
||
"addChoice": {
|
||
"logIntake": "Enregistrer une prise",
|
||
"newMedication": "Nouveau médicament"
|
||
},
|
||
"takeAllDue": {
|
||
"button": "Prendre toutes les doses dues",
|
||
"dialogTitle": "Prendre les médicaments dus",
|
||
"dialogDescription": "Ces médicaments sont à prendre maintenant. Confirmez pour les enregistrer tous comme pris.",
|
||
"confirm": "Tout prendre ({count})",
|
||
"successToast": "{count} prises enregistrées",
|
||
"partialToast": "{taken} enregistrées, {failed} échouées – veuillez réessayer",
|
||
"failedToast": "Aucune prise enregistrée – veuillez réessayer"
|
||
},
|
||
"logIntake": {
|
||
"dialogTitle": "Enregistrer une prise",
|
||
"dialogDescription": "Enregistrez une dose pour un médicament existant. Vous pouvez l’antidater à une date et une heure passées.",
|
||
"medicationLabel": "Médicament",
|
||
"slotLabel": "Créneau du planning",
|
||
"slotNone": "Aucun créneau précis",
|
||
"doseLabel": "Dose",
|
||
"doseHint": "Prérempli avec la dose du médicament ou du créneau. Modifiez-la pour enregistrer une dose différente pour cette prise uniquement.",
|
||
"takenAtLabel": "Date et heure",
|
||
"takenAtHint": "Par défaut maintenant ; choisissez une date et une heure antérieures pour enregistrer une dose passée.",
|
||
"skippedLabel": "Enregistrer comme ignorée",
|
||
"noMedications": "Ajoutez d’abord un médicament, puis vous pourrez enregistrer des prises pour celui-ci.",
|
||
"cancel": "Annuler",
|
||
"submit": "Enregistrer la prise",
|
||
"slotError": "Le créneau sélectionné n’a pas pu être associé à une heure. Choisissez un autre créneau ou « Aucun créneau précis »."
|
||
},
|
||
"emptyTitle": "Aucun médicament pour l’instant",
|
||
"emptyDescription": "Crée des médicaments, des doses et des fenêtres horaires pour suivre l’observance.",
|
||
"loadFailed": "Impossible de charger les médicaments",
|
||
"retryLoad": "Réessayer",
|
||
"name": "Nom",
|
||
"inactive": "En pause",
|
||
"intakeHistory": "Historique des prises",
|
||
"openDetailPage": "Ouvrir la page de détail du médicament",
|
||
"compliance": "Observance",
|
||
"importIntakes": "Importer les prises",
|
||
"importDescription": "Collez un tableau JSON contenant les données de prises. Format attendu :",
|
||
"importUploadFile": "Téléverser un fichier JSON",
|
||
"importPaste": "Collez le JSON ici...",
|
||
"importSelected": "Sélectionné : {name}",
|
||
"importFileLoaded": "Fichier « {name} » chargé",
|
||
"importInvalidJson": "Le fichier ne contient pas de JSON valide",
|
||
"importNoArray": "Aucun tableau trouvé",
|
||
"importResult": "{imported} prises importées",
|
||
"importDuplicatesSkipped": "{count} doublons ignorés",
|
||
"importInvalidSkipped": "{count} entrées non valides ignorées",
|
||
"importFailed": "Échec de l’importation",
|
||
"importInvalidFormat": "Format JSON non valide",
|
||
"requestExample": "Exemple de requête",
|
||
"categoryBloodPressure": "Tension artérielle",
|
||
"categoryVitamin": "Vitamines",
|
||
"categoryThyroid": "Thyroïde",
|
||
"categoryHormone": "Hormones",
|
||
"categorySupplement": "Complément",
|
||
"categoryPainRelief": "Antalgique",
|
||
"categoryAllergy": "Allergie",
|
||
"categoryDigestive": "Digestif",
|
||
"categorySkin": "Soin de la peau",
|
||
"categorySleepAid": "Aide au sommeil",
|
||
"categoryDiabetes": "Diabetes",
|
||
"categoryAntibiotic": "Antibiotique",
|
||
"categoryOther": "Autres",
|
||
"daysSun": "Dim",
|
||
"daysMon": "Lun",
|
||
"daysTue": "Mar",
|
||
"daysWed": "Mer",
|
||
"daysThu": "Jeu",
|
||
"daysFri": "Ven",
|
||
"daysSat": "Sam",
|
||
"back": "Retour",
|
||
"today": "Aujourd'hui",
|
||
"yesterday": "Hier",
|
||
"tomorrow": "Demain",
|
||
"asNeededMarker": "Au besoin",
|
||
"withoutNotification": "Sans notification",
|
||
"pausedSince": "En pause depuis",
|
||
"takeNow": "Prendre maintenant",
|
||
"lastDoseYesterday": "Dernière dose hier",
|
||
"lastDoseDaysAgo": "Dernière dose il y a {count} jours",
|
||
"overdue": "En retard",
|
||
"veryOverdue": "Très en retard",
|
||
"complianceWindow": "Observance {days} jours",
|
||
"complianceUnavailable": "Impossible de charger l'observance",
|
||
"complianceInfo": "Part des doses attendues que vous avez enregistrées. Les plans hebdomadaires comptent semaine par semaine.",
|
||
"complianceInfoLabel": "Que signifie l'observance ?",
|
||
"lastIntake": "Dernière prise :",
|
||
"nextIntake": "Prochaine prise :",
|
||
"nextIntakeOverdue": "En retard · {time} — encore rattrapable",
|
||
"dayStreak": "jours de série",
|
||
"dayStreakOne": "jour de série",
|
||
"cycleDueToday": "À prendre aujourd'hui",
|
||
"cycleOverdue": "En retard",
|
||
"cycleNoClosedCycles": "Aucun cycle de dose terminé pour l'instant",
|
||
"taken": "Pris",
|
||
"skipped": "Sauté",
|
||
"intakeToastTaken": "{name} enregistré comme pris",
|
||
"intakeToastSkipped": "{name} sauté",
|
||
"intakeToastFailed": "Impossible d'enregistrer {name} — réessayez",
|
||
"intakeUndo": "Annuler",
|
||
"intakeUndone": "Entrée annulée",
|
||
"intakeUndoFailed": "Annulation impossible — corrigez dans l'historique",
|
||
"glp1LastInjection": "{label}",
|
||
"glp1NextInjectionDays": "{label} (dans {days} jours)",
|
||
"glp1NextInjectionToday": "aujourd’hui",
|
||
"glp1NextInjectionTomorrow": "demain",
|
||
"glp1RotationSuggested": "Conseillé : {site}",
|
||
"glp1LogSideEffect": "Consigner un effet secondaire",
|
||
"sideEffects": {
|
||
"section": "Effets secondaires",
|
||
"addCta": "Consigner",
|
||
"sheetTitle": "Consigner un effet secondaire",
|
||
"categoryLabel": "Catégorie",
|
||
"entryLabel": "Symptôme",
|
||
"severityLabel": "Sévérité",
|
||
"severity": {
|
||
"mild": "Léger",
|
||
"moderate": "Modéré",
|
||
"significant": "Notable",
|
||
"severe": "Sévère",
|
||
"verySevere": "Très sévère"
|
||
},
|
||
"notesLabel": "Notes (facultatif)",
|
||
"notesPlaceholder": "Ce qui vaut la peine d'être noté, 280 caractères max.",
|
||
"submitCta": "Enregistrer",
|
||
"cancelCta": "Annuler",
|
||
"emptyState": "Aucun effet secondaire consigné. Le suivi peut aider votre médecin et révéler des tendances dans le temps.",
|
||
"recentTitle": "30 derniers jours",
|
||
"loading": "Chargement…",
|
||
"deleteCta": "Supprimer",
|
||
"deleteConfirm": "Supprimer cette entrée ?",
|
||
"deleteError": "Impossible de supprimer l'entrée",
|
||
"errorSeverity": "La sévérité doit être entre 1 et 5",
|
||
"errorEntry": "Choisissez un symptôme",
|
||
"categories": {
|
||
"gi": "Gastro-intestinal",
|
||
"metabolic": "Métabolique",
|
||
"injectionSite": "Site d'injection",
|
||
"cognitive": "Cognitif",
|
||
"glp1Specific": "Spécifique GLP-1"
|
||
},
|
||
"entries": {
|
||
"nausea": "Nausées",
|
||
"vomiting": "Vomissement",
|
||
"diarrhea": "Diarrhée",
|
||
"constipation": "Constipation",
|
||
"abdominalPain": "Douleur abdominale",
|
||
"hypoglycemiaSymptoms": "Symptômes d'hypoglycémie",
|
||
"dehydration": "Déshydratation",
|
||
"anorexia": "Perte d'appétit",
|
||
"electrolyteFatigue": "Fatigue électrolytique",
|
||
"injectionRedness": "Rougeur au site d'injection",
|
||
"injectionSwelling": "Gonflement au site d'injection",
|
||
"injectionBruising": "Ecchymose au site d'injection",
|
||
"injectionInduration": "Induration au site d'injection",
|
||
"brainFog": "Brouillard mental",
|
||
"dizziness": "Vertiges",
|
||
"lowMood": "Humeur basse",
|
||
"lowEnergy": "Faible énergie",
|
||
"earlySatiety": "Satiété précoce",
|
||
"gastroparesisLike": "Vidange gastrique lente",
|
||
"dysgeusia": "Altération du goût",
|
||
"gallbladderDiscomfort": "Inconfort de la vésicule biliaire"
|
||
}
|
||
},
|
||
"scheduling": {
|
||
"naturalLanguage": {
|
||
"title": "Décris ton médicament",
|
||
"description": "Décris le médicament avec tes propres mots et le formulaire sera pré-rempli pour toi.",
|
||
"placeholder": "p. ex. Mounjaro 5 mg par semaine le mercredi matin à partir de lundi prochain",
|
||
"submit": "Extraire",
|
||
"submitBusy": "Extraction…",
|
||
"cancel": "Annuler",
|
||
"examples": {
|
||
"label": "Essayer un de ces exemples",
|
||
"weekly": "Mounjaro 5 mg par semaine le mercredi matin",
|
||
"daily": "Ibuprofène 200 mg tous les jours, 3 fois par jour",
|
||
"rolling": "Méthotrexate 7,5 mg tous les 7 jours depuis la dernière injection"
|
||
},
|
||
"error": {
|
||
"empty": "Saisis d'abord une description.",
|
||
"tooLong": "Garde la description sous 2000 caractères.",
|
||
"rateLimit": "Trop de requêtes — attends un instant et réessaie.",
|
||
"noProvider": "Aucun fournisseur d'IA configuré — configure-le dans les Paramètres.",
|
||
"budget": "Budget IA quotidien atteint — réessaie demain.",
|
||
"network": "Impossible de joindre le fournisseur d'IA — réessaie."
|
||
}
|
||
},
|
||
"cadence": {
|
||
"section": "Cadence",
|
||
"label": "À quelle fréquence",
|
||
"kind": {
|
||
"daily": "Chaque jour",
|
||
"weekdays": "Certains jours de la semaine",
|
||
"everyNWeeks": "Toutes les N semaines certains jours",
|
||
"monthly": "Chaque mois un jour précis",
|
||
"everyNMonths": "Tous les N mois un jour précis",
|
||
"yearly": "Une fois par an",
|
||
"rolling": "Tous les N jours depuis la dernière prise (flexible)",
|
||
"rollingExplainer": "Compte à partir de votre dernière prise enregistrée — se met en pause si vous sautez une dose.",
|
||
"oneShot": "Dose unique"
|
||
},
|
||
"weekdays": {
|
||
"label": "Jours de la semaine",
|
||
"short": {
|
||
"mo": "Mo",
|
||
"tu": "Ma",
|
||
"we": "Me",
|
||
"th": "Je",
|
||
"fr": "Fr",
|
||
"sa": "Sa",
|
||
"su": "Di"
|
||
},
|
||
"long": {
|
||
"mo": "Lundi",
|
||
"tu": "Mardi",
|
||
"we": "Mercredi",
|
||
"th": "Jeudi",
|
||
"fr": "Vendredi",
|
||
"sa": "Samedi",
|
||
"su": "Dimanche"
|
||
}
|
||
},
|
||
"intervalWeeks": {
|
||
"suffix": "semaines"
|
||
},
|
||
"dayOfMonth": {
|
||
"label": "Jour"
|
||
},
|
||
"intervalMonths": {
|
||
"suffix": "mois",
|
||
"dayOnLabel": "le jour"
|
||
},
|
||
"yearly": {
|
||
"date": {
|
||
"label": "Date"
|
||
}
|
||
},
|
||
"rollingDays": {
|
||
"suffix": "jours"
|
||
}
|
||
},
|
||
"timesOfDay": {
|
||
"section": "Heures de la journée",
|
||
"label": "Heures de la journée",
|
||
"empty": {
|
||
"cta": "Ajoutez la première heure."
|
||
},
|
||
"add": "Ajouter une heure",
|
||
"remove": "Retirer",
|
||
"presets": {
|
||
"morning": "Matin",
|
||
"noon": "Midi",
|
||
"evening": "Soir",
|
||
"night": "Nuit"
|
||
},
|
||
"max": {
|
||
"reached": "Maximum atteint — retirez une heure avant d’en ajouter une autre."
|
||
}
|
||
},
|
||
"courseWindow": {
|
||
"section": "Période de traitement",
|
||
"startsOn": {
|
||
"label": "Commence le"
|
||
},
|
||
"endsOn": {
|
||
"label": "Se termine le"
|
||
},
|
||
"noEndDate": "Pas de date de fin",
|
||
"oneShotCaption": "(dose unique)",
|
||
"invalidRange": "La date de fin doit être égale ou postérieure à la date de début."
|
||
}
|
||
},
|
||
"wizard": {
|
||
"header": {
|
||
"stepOf": "Étape {current} sur {total}",
|
||
"createTitle": "Nouveau médicament",
|
||
"editTitle": "Modifier {name}"
|
||
},
|
||
"nav": {
|
||
"back": "Retour",
|
||
"next": "Suivant",
|
||
"save": "Enregistrer",
|
||
"saveEdit": "Enregistrer les modifications",
|
||
"nextHint": "Suivant : {step}",
|
||
"reviewHint": "Suivant : Enregistrer",
|
||
"jumpFirst": "Aller à la première étape",
|
||
"jumpLast": "Aller à la vérification et à l’enregistrement"
|
||
},
|
||
"nl": {
|
||
"button": "Décrire"
|
||
},
|
||
"steps": {
|
||
"step1": {
|
||
"title": "Comment s’appelle le médicament ?",
|
||
"subline": "Exactement comme indiqué sur la boîte.",
|
||
"label": "Name",
|
||
"placeholder": "par exemple Ramipril",
|
||
"short": "Nom"
|
||
},
|
||
"step2": {
|
||
"title": "De quel type de médicament s’agit-il ?",
|
||
"subline": "Nous l’utilisons pour les bons modèles et analyses.",
|
||
"short": "Type"
|
||
},
|
||
"step3": {
|
||
"title": "Quelle est la dose ?",
|
||
"subline": "Un comprimé, une bouffée, une goutte — selon la forme.",
|
||
"amountLabel": "Quantité",
|
||
"amountPlaceholder": "par exemple 5",
|
||
"unitLabel": "Unité",
|
||
"unit": {
|
||
"mg": "mg",
|
||
"ml": "ml",
|
||
"iu": "UI",
|
||
"mcg": "µg",
|
||
"g": "g",
|
||
"tablets": "comprimé(s)",
|
||
"capsules": "gélule(s)",
|
||
"drops": "gouttes",
|
||
"puffs": "bouffée",
|
||
"sprays": "pulvérisation",
|
||
"pieces": "pièces",
|
||
"other": "autre"
|
||
},
|
||
"deliveryFormLabel": "Voie",
|
||
"deliveryForm": {
|
||
"ORAL": "Orale",
|
||
"INJECTION": "Injection",
|
||
"OTHER": "Autre"
|
||
},
|
||
"dosesPerUnitLabel": "Doses par unité",
|
||
"dosesPerUnitPlaceholder": "p. ex. 4",
|
||
"dosesPerUnitHint": "Doses par stylo / flacon — laisser vide pour ne pas suivre le stock.",
|
||
"injectionSiteToggle": "Rotation des sites d'injection",
|
||
"injectionSiteHint": "Guide de rotation facultatif. Le site de chaque dose est enregistré lors de la saisie de la prise.",
|
||
"short": "Dose",
|
||
"unitsPerDoseLabel": "Unités par dose",
|
||
"unitsPerDoseHint": "p. ex. 2 comprimés de 2 mg pour une dose de 4 mg, ou ½ comprimé pour une dose fractionnée"
|
||
},
|
||
"step4": {
|
||
"title": "Sur quelle période le prenez-vous ?",
|
||
"subline": "Une date de début suffit pour aujourd’hui. Vous pourrez ajouter une date de fin plus tard.",
|
||
"short": "Quand"
|
||
},
|
||
"step5": {
|
||
"title": "À quelle fréquence le prenez-vous ?",
|
||
"subline": "Choisissez la cadence — les détails suivent à l’étape suivante.",
|
||
"short": "Fréquence"
|
||
},
|
||
"step6": {
|
||
"title": "À quoi cela ressemble-t-il en détail ?",
|
||
"subline": "Indiquez les jours de la semaine, les intervalles ou le jour du mois.",
|
||
"intervalWeeks": {
|
||
"label": "Toutes les",
|
||
"suffix": "semaines"
|
||
},
|
||
"dayOfMonth": {
|
||
"label": "Le",
|
||
"suffix": "jour du mois"
|
||
},
|
||
"rollingDays": {
|
||
"label": "Tous les",
|
||
"suffix": "jours depuis la dernière prise"
|
||
},
|
||
"short": "Détail"
|
||
},
|
||
"step7": {
|
||
"title": "Quand le prenez-vous ?",
|
||
"subline": "Une ou plusieurs heures de la journée — les rappels suivent cette liste.",
|
||
"presetsLabel": "Préréglages par moment de la journée",
|
||
"presets": {
|
||
"morning": "Matin",
|
||
"noon": "Midi",
|
||
"evening": "Soir",
|
||
"night": "Nuit"
|
||
},
|
||
"short": "Heures"
|
||
},
|
||
"step8": {
|
||
"title": "Terminé — HealthLog doit-il vous le rappeler ?",
|
||
"subline": "Vérifiez tout ci-dessous avant d’enregistrer.",
|
||
"remindersLabel": "Rappels activés",
|
||
"remindersDescription": "Push, Telegram ou ntfy — selon vos réglages.",
|
||
"noChannelHint": "Les rappels nécessitent un canal de notification — aucun n'est actif pour le moment.",
|
||
"noChannelHintLink": "Configurer les notifications",
|
||
"multiScheduleNote": "Ce médicament a plusieurs horaires. L’éditeur détaillé reviendra dans une version ultérieure.",
|
||
"short": "Fini"
|
||
}
|
||
},
|
||
"classRow": {
|
||
"bloodPressure": "Tension artérielle",
|
||
"diabetes": "Diabetes",
|
||
"hormone": "Hormones",
|
||
"glp1": "Injection de GLP-1",
|
||
"painRelief": "Douleur",
|
||
"allergy": "Allergie",
|
||
"vitamin": "Vitamines",
|
||
"supplement": "Complément",
|
||
"antibiotic": "Antibiotique",
|
||
"other": "Autre"
|
||
},
|
||
"cadence": {
|
||
"daily": {
|
||
"label": "Quotidien",
|
||
"description": "Chaque jour à la même heure."
|
||
},
|
||
"weekdays": {
|
||
"label": "Jours précis de la semaine",
|
||
"description": "Par exemple lundi, mercredi, vendredi."
|
||
},
|
||
"everyNWeeks": {
|
||
"label": "Toutes les quelques semaines",
|
||
"description": "Par exemple toutes les 2 semaines le jeudi (GLP-1, biologiques)."
|
||
},
|
||
"monthly": {
|
||
"label": "Mensuel",
|
||
"description": "Un jour fixe chaque mois (par exemple toujours le 1er)."
|
||
},
|
||
"rolling": {
|
||
"label": "Flexible depuis la dernière dose",
|
||
"description": "Laissez la prochaine dose ouverte. Quand vous appuyez sur « pris », le compteur repart à partir de ce moment."
|
||
},
|
||
"oneShot": {
|
||
"label": "Dose unique",
|
||
"description": "Une seule administration, par exemple un vaccin ou une cure d’antibiotique."
|
||
},
|
||
"asNeeded": {
|
||
"label": "Au besoin",
|
||
"description": "Pas de plan fixe — enregistrez une prise quand vous en avez besoin (p. ex. antidouleur)."
|
||
}
|
||
},
|
||
"summary": {
|
||
"title": "Résumé",
|
||
"cadence": {
|
||
"daily": "Chaque jour",
|
||
"weekdays": "Les jours de la semaine sélectionnés",
|
||
"biweekly": "Toutes les deux semaines",
|
||
"monthly": "Mensuel",
|
||
"quarterly": "Tous les trois mois",
|
||
"yearly": "Une fois par an",
|
||
"rolling": "Tous les {n} jours depuis votre dernière prise",
|
||
"oneShot": "Une dose unique",
|
||
"asNeeded": "Au besoin",
|
||
"everyNWeeks": "Toutes les {n} semaines",
|
||
"everyNMonths": "Tous les {n} mois"
|
||
},
|
||
"weekdaysDetail": ", le {days}",
|
||
"dayOfMonthDetail": ", le {day}.",
|
||
"times": "à {times}",
|
||
"startsOn": "Début : {date}",
|
||
"endsOn": "Fin : {date}",
|
||
"noEndDate": "Pas de date de fin"
|
||
},
|
||
"compose": {
|
||
"scheduleIndex": "Horaire {n} sur {total}",
|
||
"list": {
|
||
"add": "Ajouter un autre horaire",
|
||
"edit": "Modifier",
|
||
"remove": "Retirer",
|
||
"removeDisabled": "Au moins un horaire est requis."
|
||
}
|
||
},
|
||
"errors": {
|
||
"submitFailed": "Impossible d’enregistrer le médicament — veuillez réessayer."
|
||
}
|
||
},
|
||
"doseStrength": {
|
||
"title": "Dose au fil du temps",
|
||
"axisLabel": "Dose enregistrée ({unit})",
|
||
"tooltipLabel": "Dose",
|
||
"currentDose": "Dose actuelle : {dose} {unit}",
|
||
"noCurrentDose": "Aucune dose enregistrée pour l'instant.",
|
||
"empty": "Aucun historique de titration. Enregistrez un changement de dose pour voir la courbe de dose."
|
||
},
|
||
"titration": {
|
||
"title": "Plan de titration",
|
||
"empty": "Aucune étape d'escalade de dose enregistrée pour le moment. Ajoutez des changements de dose datés pour tracer le plan.",
|
||
"youAreHere": "Vous êtes ici",
|
||
"doseStep": "{dose} {unit}",
|
||
"plannedFor": "Prévu · {date}"
|
||
},
|
||
"injectionSiteBodyOutlineAriaLabel": "Silhouette du corps",
|
||
"injectionSitePickerAriaLabel": "Sélecteur de site d'injection",
|
||
"injectionSiteRecommendedAriaLabel": "{site} — prochain site recommandé",
|
||
"injectionSiteLegendAriaLabel": "Légende des repères",
|
||
"injectionSiteLegendRecommended": "Prochain site recommandé",
|
||
"injectionSiteLegendLastUsed": "Dernier site utilisé",
|
||
"siteAbdomenLeft": "Abdomen, en bas à gauche",
|
||
"siteAbdomenRight": "Abdomen, en bas à droite",
|
||
"siteAbdomenUpperLeft": "Abdomen, en haut à gauche",
|
||
"siteAbdomenUpperRight": "Abdomen, en haut à droite",
|
||
"siteThighLeft": "Cuisse gauche",
|
||
"siteThighRight": "Cuisse droite",
|
||
"siteUpperArmLeft": "Bras gauche",
|
||
"siteUpperArmRight": "Bras droit",
|
||
"sideEffectTagsHelp": "Touche un chip pour l’ajouter aux étiquettes d’humeur.",
|
||
"sideEffectTagNausea": "Nausées",
|
||
"sideEffectTagConstipation": "Constipation",
|
||
"sideEffectTagDiarrhea": "Diarrhée",
|
||
"sideEffectTagFatigue": "Fatigue",
|
||
"sideEffectTagAppetiteLoss": "Perte d’appétit",
|
||
"sideEffectTagHeartburn": "Brûlures d’estomac",
|
||
"sideEffectTagHeadache": "Maux de tête",
|
||
"phaseConfig": "Phases de rappel",
|
||
"phaseConfigDescription": "Configure les moments des rappels.",
|
||
"phaseGreen": "Vert",
|
||
"phaseYellow": "Jaune",
|
||
"phaseOrange": "Orange",
|
||
"phaseRed": "Rouge",
|
||
"phaseMinutes": "Min",
|
||
"phasePercent": "%",
|
||
"phaseResetDefaults": "Rétablir les valeurs par défaut",
|
||
"phaseSaved": "Phases de rappel enregistrées",
|
||
"sourceWeb": "Web",
|
||
"sourceApi": "App iOS",
|
||
"sourceReminder": "Rappel",
|
||
"sourceImport": "Import",
|
||
"intakeSourceVia": "via {origin}",
|
||
"intakeHistoryEmptyTitle": "Aucune prise pour l’instant",
|
||
"intakeHistoryEmptyDescription": "Dès que tu enregistreras une prise, elle apparaîtra ici avec l’heure et la source.",
|
||
"intakeHistoryEmptyAction": "Enregistrer une prise",
|
||
"intakeHistoryColTaken": "Prise",
|
||
"intakeHistoryColScheduled": "Programmée",
|
||
"intakeHistoryColStatus": "Statut",
|
||
"intakeHistoryColSource": "Source",
|
||
"intakeHistoryStatusTaken": "Prise",
|
||
"intakeHistoryStatusSkipped": "Ignorée",
|
||
"intakeHistorySortByTaken": "Trier par heure de prise",
|
||
"intakeHistorySortByScheduled": "Trier par heure programmée",
|
||
"intakeHistoryPageInfo": "Page {page} sur {total} · {count} entrées",
|
||
"intakeHistoryPrev": "Précédent",
|
||
"intakeHistoryNext": "Suivant",
|
||
"glp1": {
|
||
"drug": {
|
||
"tirzepatide": {
|
||
"name": "Tirzépatide"
|
||
},
|
||
"semaglutide": {
|
||
"name": "Sémaglutide"
|
||
},
|
||
"liraglutide": {
|
||
"name": "Liraglutide"
|
||
},
|
||
"dulaglutide": {
|
||
"name": "Dulaglutide"
|
||
},
|
||
"exenatide": {
|
||
"name": "Exénatide"
|
||
}
|
||
}
|
||
},
|
||
"researchMode": {
|
||
"dialog": {
|
||
"title": "Activer le mode Recherche",
|
||
"intro": "Le mode Recherche ajoute un graphique estimé du niveau de médicament à votre page GLP-1. Lisez la limite ci-dessous avant de l'activer — le graphique est un outil d'apprentissage, jamais une mesure, jamais un conseil médical.",
|
||
"whatItIsHeader": "Ce que c'est",
|
||
"whatItIs": "Une courbe en dents de scie qui simule la superposition de vos doses enregistrées dans le temps, à partir du modèle Bateman à un compartiment avec les paramètres d'absorption et de demi-vie publiés dans l'EPAR EMA de chaque agoniste GLP-1 approuvé. L'axe vertical est sans unité et non étiqueté. C'est la forme, pas la valeur, qui est l'information de la courbe.",
|
||
"whatItIsntHeader": "Ce que ce n'est pas",
|
||
"whatItIsnt": "Pas un taux sanguin. Pas une mesure. Pas une prévision de la réponse réelle de votre corps. Pas une base pour une décision de dose, de timing ou d'escalade. Pour tout ce qui touche à votre traitement, parlez-en à votre médecin prescripteur.",
|
||
"whyEstimateHeader": "Pourquoi c'est une estimation",
|
||
"whyEstimate": "La pharmacocinétique de population décrit le patient typique. La variabilité individuelle est grande — le modèle Schneck/Urva 2024 du tirzépatide rapporte environ 22 % de variabilité interindividuelle sur l'absorption et environ 49 % sur le volume de distribution. Une courbe de manuel ne peut capturer ni votre poids, ni votre fonction rénale, ni votre technique d'injection, ni la précision de vos horaires. Lisez la courbe comme le rythme de votre dosage, pas comme votre niveau.",
|
||
"mdrBoundaryHeader": "Limite réglementaire",
|
||
"mdrBoundary": "HealthLog affiche des données réglementaires publiques et vos propres enregistrements. L'application ne prédit, ne diagnostique, ne traite et ne recommande aucune thérapie. Le règlement UE 2017/745 (Medical Device Regulation, MDR) et le document de guidance MDCG 2021-24 tracent la limite à partir des logiciels qui interprètent des données à des fins médicales — cette courbe reste résolument du côté éducatif de cette limite. Si vous avez le sentiment qu'elle vous pousse vers une décision clinique, fermez-la.",
|
||
"citationsHeader": "Sources",
|
||
"citations": "Rapports européens publics d'évaluation (EPAR) de l'EMA pour Mounjaro, Ozempic, Wegovy, Saxenda, Trulicity, Byetta et Bydureon (section 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": "Version du disclaimer : {version}",
|
||
"acknowledgeCta": "J'ai compris — activer",
|
||
"cancelCta": "Annuler",
|
||
"successToast": "Mode Recherche activé. La courbe de niveau de médicament est maintenant visible sur votre page GLP-1.",
|
||
"errorToast": "Impossible d'activer le mode Recherche. Veuillez réessayer.",
|
||
"staleVersionToast": "Le disclaimer a été mis à jour depuis le chargement de cette page. Rechargez pour lire la version actuelle."
|
||
},
|
||
"chart": {
|
||
"title": "Niveau de médicament estimé",
|
||
"axisLabel": "Niveau estimé (relatif)",
|
||
"emptyState": "Aucune prise enregistrée.",
|
||
"emptyStateCta": "Enregistrez une dose pour voir la courbe estimée prendre forme.",
|
||
"estimateNote": "Estimation éducative à partir de la pharmacocinétique de population publiée par l'EMA. Pas une mesure.",
|
||
"unknownDrug": "{name} n'est pas dans le catalogue GLP-1 approuvé par l'EMA, donc HealthLog ne peut pas tracer de courbe de pharmacocinétique de population."
|
||
}
|
||
},
|
||
"detail": {
|
||
"status": {
|
||
"active": "Actif",
|
||
"paused": "En pause",
|
||
"ended": "Terminé"
|
||
},
|
||
"cadence": {
|
||
"oneShotOn": "Dose unique le {date}.",
|
||
"oneShotPending": "Dose unique en attente.",
|
||
"asNeeded": "Au besoin — pas de plan fixe."
|
||
},
|
||
"intake": {
|
||
"title": "Historique des prises",
|
||
"importButton": "Importer",
|
||
"rowActions": {
|
||
"openMenu": "Ouvrir les actions de la ligne",
|
||
"edit": "Modifier",
|
||
"delete": "Supprimer"
|
||
},
|
||
"selection": {
|
||
"rowToggleLabel": "Sélectionner la ligne"
|
||
},
|
||
"bulkDelete": {
|
||
"selectionCount": "{count} entrées sélectionnées",
|
||
"deleteButton": "Supprimer la sélection",
|
||
"cancelButton": "Annuler",
|
||
"confirmTitle": "Supprimer les entrées sélectionnées ?",
|
||
"confirmBody": "{count} entrées seront supprimées définitivement. Le médicament est conservé.",
|
||
"confirmAction": "Supprimer",
|
||
"toast": "Sélection supprimée",
|
||
"failed": "Impossible de supprimer la sélection."
|
||
},
|
||
"edit": {
|
||
"dialogTitle": "Modifier la prise",
|
||
"takenAtLabel": "Prise à",
|
||
"scheduledForHint": "Prévue : {dateTime}",
|
||
"farFromScheduledWarning": "Très éloignée de l’heure prévue — vérifiez la date.",
|
||
"skippedLabel": "Sautée",
|
||
"save": "Enregistrer",
|
||
"cancel": "Annuler",
|
||
"savedToast": "Prise mise à jour",
|
||
"failed": "Impossible de mettre à jour la prise."
|
||
},
|
||
"deleteRow": {
|
||
"confirmTitle": "Supprimer cette prise ?",
|
||
"confirmBody": "L’entrée est supprimée définitivement.",
|
||
"confirmAction": "Supprimer",
|
||
"toast": "Prise supprimée",
|
||
"failed": "Impossible de supprimer la prise."
|
||
}
|
||
},
|
||
"verlauf": {
|
||
"loading": "Chargement de l'historique …",
|
||
"loadError": "Impossible de charger l'historique.",
|
||
"empty": "Aucune prise sur cette période pour l'instant.",
|
||
"summaryEmpty": "Aucune dose à évaluer pour l'instant.",
|
||
"adherenceLabel": "Observance",
|
||
"adherenceBarLabel": "{onTime} à l'heure, {late} en retard, {missed} manquées",
|
||
"add": "Entrée",
|
||
"markTaken": "Prise",
|
||
"markSkipped": "Sautée",
|
||
"rowActionsLabel": "Actions pour {time}",
|
||
"markAsTaken": "Marquer comme prise",
|
||
"markAsSkipped": "Marquer comme sautée",
|
||
"adHocTag": "hors planning",
|
||
"takenDetail": "prévue {planned} · prise {taken}",
|
||
"doseTaken": "Dose : {dose}",
|
||
"status": {
|
||
"taken_on_time": "à l'heure",
|
||
"taken_late": "en retard",
|
||
"skipped": "sautée",
|
||
"missed": "manquée",
|
||
"upcoming": "à venir",
|
||
"ad_hoc": "hors planning"
|
||
},
|
||
"addDialog": {
|
||
"title": "Ajouter une prise",
|
||
"description": "Enregistrez une dose, même rétroactive ou hors planning.",
|
||
"takenAtLabel": "Prise à",
|
||
"skippedLabel": "Sautée",
|
||
"nudgeHint": "Proche du créneau {slot} — à l'enregistrement, nous demandons s'il faut l'y rattacher.",
|
||
"cancel": "Annuler",
|
||
"submit": "Enregistrer"
|
||
},
|
||
"nudge": {
|
||
"title": "Rattacher à ce créneau ?",
|
||
"body": "Cette prise se situe juste en dehors de la fenêtre de {slot}. La rattacher à ce créneau ou la conserver comme entrée hors planning ?",
|
||
"keepAdHoc": "Hors planning",
|
||
"pin": "Rattacher"
|
||
},
|
||
"pin": {
|
||
"action": "Rattacher au créneau de {time}",
|
||
"release": "Détacher du créneau",
|
||
"pinnedTag": "rattachée",
|
||
"pinnedToast": "Prise rattachée au créneau",
|
||
"unpinnedToast": "Prise détachée du créneau",
|
||
"dueContext": "prévue à {time} ({delta})",
|
||
"confirmTitle": "Rattacher au créneau de {time} ?",
|
||
"confirmBody": "La prise comptera comme prise en retard pour ce créneau – le taux n'est pas embelli. Le rattachement peut être retiré à tout moment.",
|
||
"confirmCancel": "Annuler",
|
||
"confirmAction": "Rattacher"
|
||
}
|
||
},
|
||
"notifications": {
|
||
"title": "Rappels",
|
||
"switchLabel": "Envoyer un rappel lorsque cette dose est due",
|
||
"helperOn": "Les rappels sont activés.",
|
||
"helperOff": "Les rappels sont désactivés.",
|
||
"enabledToast": "Rappels activés",
|
||
"disabledToast": "Rappels désactivés",
|
||
"toggleFailed": "Impossible de modifier le réglage des rappels.",
|
||
"clientManagedChip": "Votre iPhone gère les rappels de ce médicament."
|
||
},
|
||
"settings": {
|
||
"title": "Réglages",
|
||
"phases": {
|
||
"openButton": "Configurer les phases",
|
||
"requiresCourseWindow": "Les phases sont disponibles une fois une période de traitement définie."
|
||
},
|
||
"grace": {
|
||
"label": "Fenêtre de rappel",
|
||
"appliesToAllNote": "S’applique à tous les horaires de ce médicament.",
|
||
"unit": "minutes",
|
||
"saved": "Fenêtre de rappel enregistrée",
|
||
"failed": "Impossible d’enregistrer la fenêtre de rappel."
|
||
},
|
||
"codes": {
|
||
"label": "Codes cliniques (ATC / RxNorm)",
|
||
"note": "Facultatif. Utilisés lors de l'export FHIR du dossier de santé. Les codes sont repris tels qu'ils sont saisis — jamais devinés.",
|
||
"atcLabel": "ATC",
|
||
"rxNormLabel": "RxNorm",
|
||
"saved": "Codes cliniques enregistrés",
|
||
"failed": "Impossible d'enregistrer les codes cliniques."
|
||
}
|
||
},
|
||
"zone": {
|
||
"title": "Gestion et zone à risque",
|
||
"pause": {
|
||
"title": "Mettre en pause",
|
||
"helper": "Mettez les rappels en pause jusqu’à ce que vous les réactiviez. L’historique est conservé.",
|
||
"pausedToast": "Rappels mis en pause",
|
||
"resumedToast": "Rappels réactivés",
|
||
"failed": "Impossible de modifier l’état de pause."
|
||
},
|
||
"end": {
|
||
"title": "Terminer le médicament",
|
||
"helper": "Arrête les rappels et marque le médicament comme terminé. L’historique reste visible.",
|
||
"button": "Terminer",
|
||
"dialogTitle": "Terminer {name} — arrête les rappels, l’historique reste visible",
|
||
"dialogBody": "Plus de rappels. Les anciennes entrées restent dans la chronologie.",
|
||
"toast": "Médicament terminé",
|
||
"failed": "Impossible de terminer le médicament."
|
||
},
|
||
"purge": {
|
||
"title": "Supprimer l’historique",
|
||
"helper": "{count} prises sont enregistrées pour ce médicament.",
|
||
"button": "Supprimer l’historique",
|
||
"dialogTitle": "Supprimer vraiment l’historique ?",
|
||
"dialogBody": "Les {count} prises seront supprimées définitivement. Le médicament est conservé.",
|
||
"toast": "Historique supprimé",
|
||
"failed": "Impossible de supprimer l’historique."
|
||
},
|
||
"delete": {
|
||
"title": "Supprimer le médicament",
|
||
"helper": "Supprime le médicament et tous les enregistrements associés.",
|
||
"button": "Supprimer",
|
||
"dialogTitle": "Supprimer {name} ?",
|
||
"dialogBody": "Le médicament, ses horaires, l’historique des prises, les jetons API, la configuration des phases et les rappels seront supprimés définitivement.",
|
||
"toast": "Médicament supprimé",
|
||
"failed": "Impossible de supprimer le médicament."
|
||
}
|
||
},
|
||
"phases": {
|
||
"modeLabel": "Mode {phase}",
|
||
"saveFailed": "Impossible d’enregistrer les phases de rappel."
|
||
},
|
||
"api": {
|
||
"caption": "Point de terminaison pour « {name} »",
|
||
"copyUrl": "Copier l’URL",
|
||
"urlCopied": "URL copiée",
|
||
"mintToken": "Générer un jeton",
|
||
"mintAnotherToken": "Générer un autre jeton",
|
||
"mintFailed": "Impossible de générer un jeton.",
|
||
"copyFailed": "Impossible de copier.",
|
||
"tokenCopied": "Jeton copié",
|
||
"copyToken": "Copier le jeton",
|
||
"mintedHint": "Copiez ce jeton maintenant — il n’est affiché qu’une seule fois."
|
||
},
|
||
"advanced": {
|
||
"dataPortability": {
|
||
"import": {
|
||
"title": "Importer les prises",
|
||
"helper": "Chargez les prises passées depuis un fichier JSON ou du JSON collé.",
|
||
"button": "Importer JSON"
|
||
},
|
||
"export": {
|
||
"title": "Exporter le médicament",
|
||
"helper": "Téléchargez ce médicament au format CSV.",
|
||
"includeIntake": "Inclure l'historique des prises",
|
||
"button": "Exporter CSV"
|
||
}
|
||
}
|
||
},
|
||
"header": {
|
||
"historyLabel": "Voir l'historique des prises"
|
||
},
|
||
"history": {
|
||
"plannedSuffix": "prévu"
|
||
},
|
||
"tabs": {
|
||
"uebersicht": "Aperçu",
|
||
"zeitplan": "Horaire",
|
||
"bestand": "Stock",
|
||
"verlauf": "Historique",
|
||
"injektion": "Injection",
|
||
"api": "API",
|
||
"erweitert": "Avancé"
|
||
},
|
||
"shell": {
|
||
"loadFailed": "Ce médicament n'a pas pu être chargé.",
|
||
"tablistLabel": "Sections de détail du médicament"
|
||
},
|
||
"uebersicht": {
|
||
"statusTitle": "Statut",
|
||
"nextDoseLabel": "Prochaine dose",
|
||
"nextDoseNone": "Aucune dose à venir.",
|
||
"nextDoseAsNeeded": "Au besoin — aucune dose planifiée.",
|
||
"pausedHint": "En pause — aucun rappel.",
|
||
"reminderLabel": "Rappel",
|
||
"reminderOn": "Activé",
|
||
"reminderOff": "Désactivé",
|
||
"supplyLabel": "Stock",
|
||
"supplyRunway": "Couvre encore environ {days} jours",
|
||
"jumpToZeitplan": "Voir l'horaire",
|
||
"jumpToVerlauf": "Voir l'historique",
|
||
"jumpToBestand": "Voir le stock",
|
||
"complianceTitle": "Observance",
|
||
"complianceEmpty": "Aucune donnée d'observance pour l'instant."
|
||
},
|
||
"bestand": {
|
||
"title": "Stock",
|
||
"summary": "{remaining} doses restantes sur {total}",
|
||
"itemsTitle": "Boîtes et contenants",
|
||
"doses": "{remaining} / {total} doses",
|
||
"unknown": "Inconnu",
|
||
"state": {
|
||
"ACTIVE": "Non ouvert",
|
||
"IN_USE": "En cours",
|
||
"EXPIRED": "Expiré",
|
||
"USED_UP": "Épuisé"
|
||
},
|
||
"empty": "Aucun stock enregistré.",
|
||
"emptyHelper": "Enregistrez une boîte ou un contenant pour suivre le stock restant et l'autonomie.",
|
||
"emptyCta": "Enregistrer une boîte",
|
||
"addButton": "Enregistrer",
|
||
"lowStockLinkOn": "Alerte de stock bas : en dessous de {days} jours",
|
||
"lowStockLinkOff": "Alerte de stock bas : désactivée",
|
||
"addTitle": "Enregistrer une boîte ou un contenant",
|
||
"addDescription": "Enregistrez un nouveau stock avec son nombre d'unités ; la date de péremption est facultative.",
|
||
"addQuantityLabel": "Quantité (unités)",
|
||
"addQuantityHelper": "1–1000 unités par boîte ou contenant.",
|
||
"addExpiryLabel": "Date de péremption (facultatif)",
|
||
"addSubmit": "Enregistrer",
|
||
"addSuccess": "Stock enregistré.",
|
||
"addFailed": "Le stock n'a pas pu être enregistré.",
|
||
"adjustButton": "Ajuster",
|
||
"adjustTitle": "Corriger le stock",
|
||
"adjustDescription": "Définissez les unités restantes — pour une correction ou un prélèvement. 0 marque l'article comme épuisé.",
|
||
"adjustQuantityLabel": "Unités restantes",
|
||
"adjustHelper": "Capacité : {total} unités.",
|
||
"adjustSubmit": "Enregistrer",
|
||
"adjustSuccess": "Stock mis à jour.",
|
||
"adjustFailed": "Le stock n'a pas pu être mis à jour.",
|
||
"deleteTitle": "Supprimer le contenant ?",
|
||
"deleteDescription": "Supprime définitivement cette boîte ou ce contenant du stock. Les prises enregistrées restent inchangées.",
|
||
"deleteSuccess": "Entrée de stock supprimée.",
|
||
"deleteFailed": "L'entrée de stock n'a pas pu être supprimée.",
|
||
"containerTypeLabel": "Type de contenant",
|
||
"containerType": {
|
||
"PEN": "Stylo",
|
||
"AMPOULE": "Ampoule",
|
||
"BLISTER": "Plaquette de comprimés",
|
||
"INHALER": "Inhalateur",
|
||
"BOTTLE": "Flacon",
|
||
"OTHER": "Autre"
|
||
},
|
||
"unitsDetail": "{remaining} / {total} unités",
|
||
"quantityModeDoses": "Doses",
|
||
"quantityModeUnits": "Unités",
|
||
"quantityInUnits": "= {units} unités",
|
||
"quantityInDoses": "≈ {doses} doses",
|
||
"quantityUnderOneDose": "< 1 dose",
|
||
"expiredSuffix": "+ {units} unités périmées",
|
||
"packagingTitle": "Conditionnement et dose",
|
||
"packagingUnitsPerDose": "1 dose = {units} unités",
|
||
"packagingDefaultPack": "Taille de boîte par défaut : {units} unités",
|
||
"packagingNoDefaultPack": "Aucune taille de boîte par défaut",
|
||
"packagingEdit": "Modifier",
|
||
"packagingDescription": "Définis combien d’unités consomme une dose et la taille habituelle d’une nouvelle boîte — p. ex. après un changement de fabricant avec une autre taille de plaquette.",
|
||
"packagingUnitsPerDoseLabel": "Unités par dose",
|
||
"packagingUnitsPerDoseHelper": "P. ex. deux comprimés de 2 mg pour une dose de 4 mg (1–100). Les prises déjà enregistrées restent inchangées.",
|
||
"packagingDefaultPackLabel": "Taille de boîte par défaut (unités)",
|
||
"packagingDefaultPackHelper": "Préremplit la quantité lors de l’enregistrement de nouvelles boîtes (1–1000). Laisse vide si aucune ne s’applique.",
|
||
"packagingSuccess": "Conditionnement enregistré",
|
||
"packagingFailed": "Échec de l’enregistrement"
|
||
},
|
||
"erweitert": {
|
||
"group": {
|
||
"lifecycle": "Cycle de vie",
|
||
"externalApi": "API externe",
|
||
"data": "Données",
|
||
"danger": "Zone de danger"
|
||
},
|
||
"editor": {
|
||
"title": "Modifier le médicament dans l'éditeur",
|
||
"helper": "Modifiez le nom, la classe de traitement, la fréquence et les horaires dans l'éditeur pas à pas.",
|
||
"button": "Ouvrir l'éditeur"
|
||
}
|
||
},
|
||
"zeitplan": {
|
||
"title": "Horaire",
|
||
"timesTitle": "Heures de prise",
|
||
"timesNote": "Ajustez l'heure et la fenêtre à l'heure de chaque dose. La fréquence (quotidienne, hebdomadaire…) se modifie dans l'éditeur, sous Avancé.",
|
||
"scheduleLabel": "Horaire {index}",
|
||
"fullEditNote": "La fréquence, la classe de traitement et la fenêtre de cure se modifient dans l'éditeur, sous Avancé → Cycle de vie.",
|
||
"graceEcho": "Fenêtre de rappel : {minutes} minutes",
|
||
"reminderTitle": "Rappel",
|
||
"manageChannels": "Gérer les canaux de notification",
|
||
"history": {
|
||
"title": "Historique du plan",
|
||
"currentSince": "Plan actuel depuis {date}",
|
||
"noTimes": "Aucune heure fixe",
|
||
"manualChip": "Ajoutée manuellement",
|
||
"showErasOne": "Afficher 1 période antérieure",
|
||
"showErasOther": "Afficher {count} périodes antérieures",
|
||
"hideEras": "Masquer les périodes antérieures",
|
||
"addEra": "Ajouter une période antérieure",
|
||
"addEraTitle": "Ajouter une période antérieure",
|
||
"addEraDescription": "Notez à quelles heures ce médicament était pris auparavant — par exemple avant de l'ajuster ici.",
|
||
"editAria": "Modifier la période",
|
||
"editEraTitle": "Modifier la période",
|
||
"editEraDescription": "Ajustez les heures de prise et la plage de dates de cette période.",
|
||
"archivedEditHint": "Cette période a été enregistrée automatiquement — votre modification corrige l'historique enregistré ; l'original est conservé en interne comme trace.",
|
||
"updatedToast": "Période mise à jour",
|
||
"updateError": "Impossible de mettre à jour la période. Elle ne doit pas chevaucher d'autres périodes et doit se terminer avant le plan actuel.",
|
||
"timesLabel": "Heures de prise",
|
||
"fromLabel": "Du",
|
||
"untilLabel": "Jusqu'au",
|
||
"untilHint": "« Jusqu'au » est le jour où le plan suivant a pris effet (exclusif).",
|
||
"validationTimes": "Indiquez au moins une heure.",
|
||
"validationRangeMissing": "Indiquez les dates de début et de fin.",
|
||
"validationRangeOrder": "La date de début doit précéder la date de fin.",
|
||
"cancel": "Annuler",
|
||
"submit": "Enregistrer la période",
|
||
"createdToast": "Période antérieure enregistrée",
|
||
"createError": "Impossible d'enregistrer la période. Elle ne doit pas chevaucher des périodes existantes et doit se terminer avant le plan actuel.",
|
||
"deletedToast": "Période supprimée",
|
||
"deleteError": "Impossible de supprimer la période",
|
||
"deleteAria": "Supprimer la période",
|
||
"deleteConfirmTitle": "Supprimer la période ?",
|
||
"deleteConfirmBody": "L'historique et l'observance de cette période seront recalculés selon le plan actuel.",
|
||
"deleteConfirmAction": "Supprimer",
|
||
"loadError": "Impossible de charger l'historique du plan"
|
||
},
|
||
"save": "Enregistrer l'horaire",
|
||
"saved": "Horaire enregistré",
|
||
"failed": "Impossible d'enregistrer l'horaire",
|
||
"window": {
|
||
"intro": "Pour chaque dose, définissez quand une prise reste à l'heure : un horaire précis (±1 h) ou votre propre fenêtre comme 07:00–09:00.",
|
||
"explicitToggle": "Fenêtre personnalisée",
|
||
"startLabel": "Début de la fenêtre",
|
||
"endLabel": "Fin de la fenêtre",
|
||
"onTimeBand": "À l'heure : {start}–{end}",
|
||
"lateUntil": "en retard jusqu'à {time}",
|
||
"lateDays": "en retard jusqu'à {days} jours après",
|
||
"orderError": "Le début doit précéder la fin.",
|
||
"noTimes": "Aucune heure de prise définie pour l'instant."
|
||
}
|
||
}
|
||
},
|
||
"logInjectionSiteTitle": "Enregistrer le site d'injection",
|
||
"logInjectionSiteDescription": "Où avez-vous injecté {name} ? Facultatif — vous pouvez l'ignorer.",
|
||
"logInjectionSiteSkip": "Ignorer",
|
||
"logInjectionSiteConfirm": "Enregistrer le site",
|
||
"logInjectionSiteNoneAvailable": "Aucun site d'injection disponible — tous les sites sont exclus dans vos réglages.",
|
||
"logInjectionSiteSaveFailed": "Impossible d’enregistrer le site d’injection. Veuillez réessayer.",
|
||
"trackInjectionSitesToggle": "Suivre les sites d'injection",
|
||
"trackInjectionSitesHint": "Après la prise d'une dose, demander quel site a été utilisé et suggérer la prochaine rotation.",
|
||
"allowedSitesLabel": "Sites autorisés",
|
||
"allowedSitesHint": "Laissez tout sélectionné pour aucune restriction. Les sites exclus globalement ne sont jamais proposés.",
|
||
"viewToggleLabel": "Affichage",
|
||
"viewToggleHint": "Choisis si tes médicaments s'affichent sous forme de cartes ou de tableau.",
|
||
"viewCards": "Vue cartes",
|
||
"viewTable": "Vue tableau",
|
||
"viewSaveFailed": "L'affichage n'a pas pu être enregistré",
|
||
"tableCaption": "Médicaments sous forme de tableau avec statut, prochaine prise, observance et stock",
|
||
"tableColName": "Nom",
|
||
"tableColStatus": "Statut",
|
||
"tableColNextDose": "Prochaine prise",
|
||
"tableColCompliance": "Observance",
|
||
"tableColStock": "Stock",
|
||
"tableColActions": "Actions",
|
||
"tableSortBy": "Trier par {column}",
|
||
"tableComplianceDays": "{days} j",
|
||
"tableStockDoseOne": "1 dose",
|
||
"tableStockDoses": "{count} doses",
|
||
"tableStockRunway": "≈ {days} jours restants",
|
||
"cardLowStockRunway": "Réserve : ≈ {days} jours",
|
||
"takeActionFor": "Prendre – {name}",
|
||
"skipActionFor": "Passer – {name}",
|
||
"reorderTitle": "Modifier l'ordre",
|
||
"reorderDescription": "Définis l'ordre de tes médicaments – il s'applique à la vue cartes et à la vue tableau.",
|
||
"reorderSaved": "Ordre enregistré",
|
||
"reorderSaveFailed": "L'ordre n'a pas pu être enregistré",
|
||
"customize": "Personnaliser les médicaments"
|
||
},
|
||
"charts": {
|
||
"loadingLabel": "Chargement du graphique…",
|
||
"loadingSlowHint": "Calcul des analyses — cela peut prendre un instant.",
|
||
"weight": "Poids",
|
||
"bloodPressure": "Tension artérielle",
|
||
"pulse": "Pouls",
|
||
"bodyFat": "Masse grasse",
|
||
"sleep": "Sommeil",
|
||
"steps": "Pas",
|
||
"hrv": "VFC",
|
||
"restingHeartRate": "FC au repos",
|
||
"activeEnergy": "Énergie active",
|
||
"flights": "Étages gravis",
|
||
"distance": "Distance marche + course",
|
||
"vo2Max": "VO₂ max",
|
||
"bodyTemperature": "Température corporelle",
|
||
"noData": "Aucune donnée sur la période sélectionnée",
|
||
"bucketWeekly": "Moyenne hebdomadaire",
|
||
"bucketMonthly": "Moyenne mensuelle",
|
||
"points7Label": "7 pts",
|
||
"points7Title": "Derniers 7 points",
|
||
"points30Label": "30 pts",
|
||
"points30Title": "Derniers 30 points",
|
||
"points90Label": "90 pts",
|
||
"points90Title": "Derniers 90 points",
|
||
"pointsAllLabel": "Tous",
|
||
"pointsAllTitle": "Tous les points disponibles",
|
||
"systolic": "Systolique",
|
||
"diastolic": "Diastolique",
|
||
"bodyWater": "Eau corporelle",
|
||
"boneMass": "Masse osseuse",
|
||
"spo2": "SpO₂",
|
||
"movingAverage7d": "Tendance 7 jours",
|
||
"avg7dShort": "7J",
|
||
"avg30dShort": "30J",
|
||
"trend7dShort": "Tendance 7 jours",
|
||
"trend": "Tendance",
|
||
"perWeek": "/semaine",
|
||
"totalDelta": "Total",
|
||
"colorGreen": "Vert :",
|
||
"colorOrange": "Orange :",
|
||
"colorRed": "Rouge :",
|
||
"mood": "Humeur",
|
||
"moodScore": "Score d’humeur",
|
||
"weekdays": {
|
||
"mon": "Lun",
|
||
"wed": "Mer",
|
||
"fri": "Ven",
|
||
"sun": "Dim"
|
||
},
|
||
"months": {
|
||
"jan": "Jan",
|
||
"feb": "Fév",
|
||
"mar": "Mar",
|
||
"apr": "Avr",
|
||
"may": "Mai",
|
||
"jun": "Juin",
|
||
"jul": "Juil",
|
||
"aug": "Août",
|
||
"sep": "Sept",
|
||
"oct": "Oct",
|
||
"nov": "Nov",
|
||
"dec": "Déc"
|
||
},
|
||
"heatmapOnTime": "à l’heure",
|
||
"heatmapLate": "en retard",
|
||
"heatmapVeryLate": "très en retard",
|
||
"legendOnTime": "À l’heure",
|
||
"legendLate": "En retard",
|
||
"legendVeryLate": "Très en retard",
|
||
"legendMissed": "Manquée",
|
||
"emptyStateTitle": "Saisis plus de mesures pour voir les tendances",
|
||
"emptyStateDescription": "Saisis au moins 3 entrées pour débloquer la courbe de tendance.",
|
||
"needMoreDistinctDaysTitle": "Plus de jours distincts requis",
|
||
"needMoreDistinctDaysDescription": "Saisis sur plusieurs jours pour débloquer la courbe de tendance.",
|
||
"noDataInRangeTitle": "Aucune donnée sur cette période",
|
||
"noDataInRangeDescription": "Aucune mesure ne tombe dans la plage sélectionnée. Change de plage ou saisis une nouvelle mesure.",
|
||
"errorTitle": "Impossible de charger les données",
|
||
"loadErrorTitle": "Impossible de charger le graphique",
|
||
"loadErrorReload": "Recharger",
|
||
"sparseDataCaption": "Davantage de jours étofferont la tendance.",
|
||
"personalBaseline": "Ta moyenne",
|
||
"deltaVsBaseline": "{delta} vs. ta moyenne",
|
||
"deltaUnchanged": "correspond à ta moyenne",
|
||
"deltaVsTarget": "{delta} vs. cible",
|
||
"weekdaysFull": {
|
||
"mon": "Lundi",
|
||
"tue": "Mardi",
|
||
"wed": "Mercredi",
|
||
"thu": "Jeudi",
|
||
"fri": "Vendredi",
|
||
"sat": "Samedi",
|
||
"sun": "Dimanche"
|
||
},
|
||
"rangeBand": "Plage"
|
||
},
|
||
"chart": {
|
||
"overlay": {
|
||
"controls": {
|
||
"title": "Calques du graphique",
|
||
"trendIndicator": "Tendance 7 jours",
|
||
"trendArrow": "Flèche de tendance",
|
||
"targetRange": "Plage cible",
|
||
"comparisonBaseline": "Comparaison",
|
||
"comparisonUnavailable": "Aucune période antérieure disponible",
|
||
"tooltip": {
|
||
"openSettings": "Paramètres des calques de graphique"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"comparison": {
|
||
"toggleLabel": "Comparer avec",
|
||
"toggleHint": "Compare la période actuelle avec la même période de l’année précédente.",
|
||
"baseline": {
|
||
"none": "Désactivé",
|
||
"lastMonth": "Mois précédent",
|
||
"lastYear": "Année précédente"
|
||
},
|
||
"captionLastMonth": "vs. mois précédent",
|
||
"captionLastYear": "vs. année précédente",
|
||
"deltaVs": {
|
||
"lastMonth": "{delta} vs. mois précédent",
|
||
"lastYear": "{delta} vs. année précédente"
|
||
},
|
||
"tooltipPrior": "Période précédente",
|
||
"unavailable": {
|
||
"lastMonth": "Comparaison indisponible — pas de données du mois précédent",
|
||
"lastYear": "Comparaison indisponible — pas de données de l’année précédente"
|
||
},
|
||
"notAvailableForCompliance": "Comparaison indisponible pour l’observance"
|
||
},
|
||
"insights": {
|
||
"noAnalysisYet": "Pas encore d’évaluation.",
|
||
"assessmentPreparing": "Préparation de votre évaluation…",
|
||
"emptyTitle": "Pas encore assez de données",
|
||
"emptyDescription": "Les insights apparaissent dès que tu auras saisi quelques mesures. Commence par le poids ou la tension.",
|
||
"emptyAddMeasurement": "Saisir une mesure",
|
||
"editMode": {
|
||
"open": "Personnaliser",
|
||
"done": "Terminé",
|
||
"reset": "Réinitialiser",
|
||
"title": "Personnaliser l’aperçu",
|
||
"description": "Fais glisser pour réorganiser, touche l’œil pour afficher ou masquer.",
|
||
"dragHandle": "Fais glisser pour réorganiser",
|
||
"show": "Afficher",
|
||
"hide": "Masquer",
|
||
"manageInSettings": "Gérer les onglets et les pages de détail dans les réglages",
|
||
"groupSleep": "Sommeil",
|
||
"groupMood": "Humeur",
|
||
"groupEvents": "Événements",
|
||
"gatedHint": "Apparaît dès que des données ou la fonction sont disponibles",
|
||
"allHiddenHint": "Toutes les sections sont masquées. Affiches-en au moins une pour voir ton aperçu.",
|
||
"saveSuccess": "Aperçu enregistré",
|
||
"saveError": "Impossible d’enregistrer ton aperçu",
|
||
"resetSuccess": "Aperçu réinitialisé aux valeurs par défaut",
|
||
"emptyTitle": "Toutes les cartes sont masquées",
|
||
"emptyDescription": "Tu as masqué toutes les sections. Ouvre Personnaliser pour les réafficher."
|
||
},
|
||
"bmiEmptyTitle": "Ajoute ta taille pour l’IMC",
|
||
"bmiEmptyDescription": "L’IMC nécessite ta taille. Renseigne-la dans Paramètres → Compte.",
|
||
"bmiEmptyAction": "Ouvrir les paramètres du compte",
|
||
"noProviderConfigured": "Connecte un fournisseur d'IA pour voir ici une évaluation de tes mesures.",
|
||
"noProviderAction": "Ouvrir les réglages IA",
|
||
"startAnalysis": "Lancer l’évaluation",
|
||
"refreshAnalysis": "Actualiser l’évaluation",
|
||
"keyTakeaway": "L’essentiel",
|
||
"findingsTitle": "Constats",
|
||
"heroFindingPositive": "Constat principal",
|
||
"heroFindingNeutral": "Constat principal",
|
||
"heroFindingAttention": "À surveiller",
|
||
"heroFindingWarning": "Alerte principale",
|
||
"correlationsTitle": "Corrélations",
|
||
"recommendationsTitle": "Recommandations",
|
||
"personalRecord": {
|
||
"badge": "PR",
|
||
"tooltip": "Record personnel : {value} {unit} le {date}"
|
||
},
|
||
"recommendation": {
|
||
"source": "Source",
|
||
"viewSource": "Ouvrir la recommandation dans un nouvel onglet",
|
||
"rationale": "Pourquoi cette recommandation",
|
||
"rationaleWindow": "Fenêtre",
|
||
"rationaleComparedTo": "Comparé à",
|
||
"rationaleDeviation": "Écart",
|
||
"rationaleExpand": "Afficher la justification",
|
||
"rationaleCollapse": "Masquer la justification",
|
||
"legacyPayloadCta": "Insights mis à jour — regénère pour activer les nouvelles explications",
|
||
"feedbackHelpful": "Utile",
|
||
"feedbackNotHelpful": "Peu utile",
|
||
"feedbackThanks": "Merci pour ton retour",
|
||
"feedbackConfirmed": "Retour enregistré",
|
||
"feedbackAlreadyRated": "Déjà noté",
|
||
"feedbackError": "Impossible d’enregistrer votre retour. Réessayez.",
|
||
"confidence": "Confiance",
|
||
"confidenceAria": "Confiance : {value} sur 100",
|
||
"confidenceHigh": "Confiance élevée",
|
||
"confidenceMedium": "Confiance moyenne",
|
||
"confidenceLow": "Confiance faible — peu de points de données",
|
||
"confidenceDraft": "Brouillon"
|
||
},
|
||
"dataFoundation": "Base de données",
|
||
"dataGaps": "Lacunes :",
|
||
"lastUpdated": "Dernière mise à jour",
|
||
"confidenceHoch": "Élevée",
|
||
"confidenceMittel": "Moyenne",
|
||
"confidenceGering": "Faible",
|
||
"loadError": "Impossible de charger les analyses",
|
||
"heroGenerated": "Généré {time}",
|
||
"heroPersonalBaseline": "Basé sur tes 90 derniers jours",
|
||
"heroRegenerate": "Régénérer",
|
||
"heroRegenerating": "Génération en cours",
|
||
"regenerateAnalysis": "Relancer l’évaluation",
|
||
"regenerateSuccess": "Évaluation regénérée",
|
||
"warmStarted": "Les évaluations sont en cours de préparation en arrière-plan",
|
||
"narrativeTitle": "Rétrospective",
|
||
"narrativeWeek": "Cette semaine",
|
||
"narrativeMonth": "Ce mois-ci",
|
||
"narrativePreparing": "Préparation de votre résumé…",
|
||
"narrativeUpdating": "Mise à jour…",
|
||
"narrativeUpdated": "Mis à jour {time}",
|
||
"narrativeProvenanceLabel": "Comment cela a été établi",
|
||
"narrativeProvenanceMethod": "Un résumé de la période en langage clair, établi uniquement à partir de vos valeurs enregistrées et des associations ayant survécu au contrôle statistique des comparaisons multiples. Descriptif, jamais une cause.",
|
||
"narrativeProvenanceMetrics": "Basé sur : {metrics}",
|
||
"narrativeProvenanceWindow": "Fenêtre : du {from} au {to}",
|
||
"heroFallbackSubtitle": "Un coup d’œil quotidien sur tes tendances — directement issu des chiffres que tu saisis.",
|
||
"heroGreetingMorning": "Bonjour",
|
||
"heroGreetingAfternoon": "Bonjour",
|
||
"heroGreetingEvening": "Bonsoir",
|
||
"heroComingSoonTooltip": "Bientôt disponible",
|
||
"heroActionAskCoach": "Demander au coach",
|
||
"healthScore": {
|
||
"label": "Score de santé",
|
||
"progressAria": "Progression du score de santé",
|
||
"deltaVsLastWeek": "{delta} par rapport à la semaine précédente",
|
||
"deltaUnavailable": "Pas encore d’historique — reviens la semaine prochaine.",
|
||
"restModePaused": "En pause pendant la maladie — ton score n'est pas évalué aujourd'hui.",
|
||
"componentBp": "TA",
|
||
"componentWeight": "Poids",
|
||
"componentMood": "Humeur",
|
||
"componentCompliance": "Observance",
|
||
"deltaExplainer": {
|
||
"trigger": "Que signifie cet écart ?",
|
||
"title": "Comment l'écart est calculé",
|
||
"description": "Écart par rapport à la semaine dernière : {delta}",
|
||
"body": "Le score combine TA, poids, humeur et observance. Nous comparons le score d'aujourd'hui à celui de la semaine précédente à la même période. Enregistre une nouvelle mesure ou une note d'humeur pour le faire remonter."
|
||
},
|
||
"provenance": {
|
||
"toggle": "Composé de",
|
||
"weightLabel": "part",
|
||
"mixedBanner": "Certains composants combinent plusieurs sources. La ventilation affiche la valeur la plus récente par composant.",
|
||
"footnote": "Les pondérations sont recalibrées en fonction des données disponibles.",
|
||
"asOfLabel": "au {date}",
|
||
"provisional": "Provisoire — seulement {count} entrée(s) sur {total} disponible(s)",
|
||
"provisionalBadge": "Provisoire",
|
||
"sourceAria": "Source : {source}",
|
||
"sources": {
|
||
"manual": "Manuelle",
|
||
"withings": "Withings",
|
||
"appleHealth": "Apple Health",
|
||
"mixed": "Mixte",
|
||
"none": "Aucune donnée"
|
||
}
|
||
}
|
||
},
|
||
"suggestedPrompts": {
|
||
"label": "Demande-moi",
|
||
"tellMyDoctor": "Que devrais-je dire à mon médecin ?",
|
||
"medicationWorking": "Mon médicament fonctionne-t-il ?"
|
||
},
|
||
"dailyBriefing": {
|
||
"title": "Briefing du jour",
|
||
"keyFindingsTitle": "Constats clés",
|
||
"signalsTitle": "Signaux du jour",
|
||
"emptyTitle": "Pas encore de briefing",
|
||
"emptyDescription": "Génère le briefing du jour pour obtenir un récap de tes tendances.",
|
||
"emptyAction": "Générer le briefing",
|
||
"loadingLabel": "Préparation du briefing",
|
||
"noProviderTitle": "Aucun fournisseur d'IA connecté",
|
||
"noProviderDescription": "Le briefing quotidien résume tes mesures en langage clair. HealthLog a besoin d'un fournisseur d'IA pour cela : utilise ta propre clé (OpenAI, Anthropic) ou un modèle local. Tes données restent chez toi.",
|
||
"noProviderAction": "Ouvrir les réglages IA",
|
||
"staleNoProviderHint": "Ce briefing ne peut pas être actualisé — aucun fournisseur d'IA n'est connecté."
|
||
},
|
||
"trendsRow": {
|
||
"title": "Tendances",
|
||
"subtitle": "Les 30 derniers jours en un coup d’œil",
|
||
"caption": {
|
||
"bp": "Valeurs systoliques et diastoliques des 30 derniers jours.",
|
||
"weight": "Évolution du poids corporel sur les 30 derniers jours.",
|
||
"pulse": "Pouls au repos des 30 derniers jours.",
|
||
"mood": "Score d'humeur quotidien des 30 derniers jours.",
|
||
"sleep": "Durée du sommeil nocturne des 30 derniers jours.",
|
||
"steps": "Nombre de pas quotidiens des 30 derniers jours.",
|
||
"hrv": "Variabilité de la fréquence cardiaque des 30 derniers jours.",
|
||
"resting_hr": "Fréquence cardiaque au repos des 30 derniers jours.",
|
||
"active_energy": "Énergie active dépensée sur les 30 derniers jours.",
|
||
"flights": "Étages gravis sur les 30 derniers jours.",
|
||
"distance": "Distance de marche et de course des 30 derniers jours.",
|
||
"vo2_max": "VO₂ max des 30 derniers jours.",
|
||
"body_temp": "Température corporelle des 30 derniers jours."
|
||
},
|
||
"viewDetail": "Voir le détail de {metric}"
|
||
},
|
||
"vo2Max": {
|
||
"statLatest": "Actuel",
|
||
"statMin": "Min",
|
||
"statMax": "Max",
|
||
"empty": "Pas encore de données VO₂ max — synchronise Apple Health pour remplir cette vue.",
|
||
"cardioLinkTitle": "Condition cardio (VO₂ max)",
|
||
"cardioLinkBody": "Le VO₂ max est la mesure de référence de la condition aérobie. Le graphique complet et l’évaluation se trouvent sur leur propre page.",
|
||
"cardioLinkCta": "Ouvrir la condition cardio"
|
||
},
|
||
"trendAnnotation": {
|
||
"emptyBp": "Il faut plus de données pour commenter cette tendance.",
|
||
"emptyWeight": "Il faut plus de données pour commenter cette tendance.",
|
||
"emptyMood": "Il faut plus de données pour commenter cette tendance.",
|
||
"confidenceHigh": "Confiance élevée",
|
||
"confidenceModerate": "Confiance moyenne",
|
||
"confidenceLow": "Confiance faible",
|
||
"pendingLabel": "Commentaire de tendance en cours de génération"
|
||
},
|
||
"correlationRow": {
|
||
"title": "Corrélations",
|
||
"experimentCta": "Lancer une expérience de 7 jours",
|
||
"experimentTooltip": "Bientôt disponible",
|
||
"emptyTitle": "Il faut plus de données pour afficher cette corrélation",
|
||
"sourceChip": "sur la base de {n} mesures appariées · {window}",
|
||
"sourceWindowLast30": "30 derniers jours",
|
||
"confidenceHigh": "Confiance élevée",
|
||
"confidenceModerate": "Confiance moyenne",
|
||
"confidenceLow": "Confiance faible",
|
||
"card": {
|
||
"bpComplianceTitle": "TA × observance médicaments",
|
||
"bpComplianceSubtitle": "Systolique quotidienne face au % d’observance",
|
||
"moodPulseTitle": "Humeur × pouls au repos",
|
||
"moodPulseSubtitle": "Humeur et pouls au repos le même jour",
|
||
"weightWeekdayTitle": "Poids × jour de la semaine",
|
||
"weightWeekdaySubtitle": "Poids groupé par jour de la semaine"
|
||
}
|
||
},
|
||
"coach": {
|
||
"refusalOutOfScope": "Je ne peux aider que pour les données de santé de ton journal — mesures, médicaments, humeur, tendances. Les questions hors de ce périmètre ne sont pas traitées.",
|
||
"refusalInjection": "Ton message contient des instructions qui cherchent à remplacer mes consignes. Je suis le coach HealthLog et je ne résume que tes propres données de santé — reformule ta question dans ce cadre.",
|
||
"errorBudget": "Tu as atteint la limite quotidienne du coach. Le quota se réinitialise à minuit (UTC).",
|
||
"errorProvider": "Le coach n’a pas pu joindre un fournisseur d’analyse maintenant. Réessaie dans un instant.",
|
||
"errorNoProvider": "Le coach lit tes données de santé enregistrées et répond aux questions à leur sujet (pas un avis médical). HealthLog a besoin d'un fournisseur d'IA pour cela : connecte ta propre clé ou un modèle local.",
|
||
"errorNoProviderAction": "Connecter un fournisseur d'IA",
|
||
"errorNetwork": "Pas de connexion Internet — réessaie une fois reconnecté.",
|
||
"prefsSaveError": "Impossible d’enregistrer vos préférences du Coach. Réessayez.",
|
||
"errorCredentialExpired": "Ta connexion au fournisseur d'IA a expiré. Reconnecte-la dans les Réglages pour que le Coach continue de fonctionner.",
|
||
"tagline": "Coach personnel de santé, ancré sur tes données.",
|
||
"newChat": "Nouvelle conversation",
|
||
"actionsMenu": "Actions",
|
||
"maximizeAriaLabel": "Ouvrir en pleine page",
|
||
"minimizeAriaLabel": "Revenir au panneau",
|
||
"send": "Envoyer",
|
||
"stop": "Arrêter",
|
||
"thinking": "Réflexion en cours…",
|
||
"composerPlaceholder": "Pose-moi une question sur tes données…",
|
||
"nudgeBubbleLabel": "Nouveau message du coach — ouvrir le chat",
|
||
"fabLabel": "Ouvrir le coach",
|
||
"selfContextAdopt": {
|
||
"offer": "Ajouter cette réponse à vos informations personnelles ?",
|
||
"confirm": "Ajouter",
|
||
"dismiss": "Ignorer",
|
||
"done": "Ajouté à vos informations personnelles",
|
||
"duplicate": "Déjà présent dans vos informations personnelles",
|
||
"failed": "Échec de l’ajout. Veuillez réessayer."
|
||
},
|
||
"rememberMessage": {
|
||
"action": "Mémoriser",
|
||
"done": "Enregistré dans vos informations personnelles",
|
||
"duplicate": "Déjà présent dans vos informations personnelles",
|
||
"failed": "Échec de l’enregistrement. Veuillez réessayer."
|
||
},
|
||
"guided": {
|
||
"offerTitle": "Le Coach a {count} questions pour vous",
|
||
"offerTitleOne": "Le Coach a une question pour vous",
|
||
"offerBody": "De courtes réponses affinent vos informations personnelles — une question à la fois, ici dans le chat.",
|
||
"offerStart": "Répondre maintenant",
|
||
"offerLater": "Plus tard",
|
||
"offerDismiss": "Ne plus demander",
|
||
"dismissError": "Impossible d’écarter les questions. Veuillez réessayer.",
|
||
"progress": "Question {current} sur {total}",
|
||
"skip": "Passer",
|
||
"later": "Plus tard",
|
||
"dismissRemaining": "Ne plus demander",
|
||
"answerPlaceholder": "Votre réponse…",
|
||
"summaryTitle": "C’est fait — merci pour vos réponses !",
|
||
"summaryAnswered": "{answered} sur {total} répondues",
|
||
"summaryAdopted": "{adopted} ajoutées à vos informations personnelles",
|
||
"summaryAdoptedNone": "rien de nouveau ajouté à vos informations personnelles",
|
||
"summaryLink": "Voir vos informations personnelles"
|
||
},
|
||
"voiceComingSoon": "La saisie vocale arrive avec l’app iOS en v1.5.",
|
||
"threadEmpty": "Pose une question sur tes tendances, médicaments ou mesures pour démarrer.",
|
||
"historyTitle": "Conversations",
|
||
"historySearchPlaceholder": "Rechercher dans les conversations…",
|
||
"historyEmpty": "Tes conversations s’affichent ici. Lance une question pour commencer.",
|
||
"historyDeleteAria": "Supprimer la conversation",
|
||
"historyDeleteConfirm": "Supprimer cette conversation ? Action irréversible.",
|
||
"sourcesTitle": "Ce à quoi j’accède",
|
||
"sourcesFresh": "À jour",
|
||
"sourcesStale": "Obsolètes",
|
||
"sourcesFooter": "Le coach ne lit que les données que tu as connectées.",
|
||
"evidenceLabel": "Sur quoi est-ce fondé ?",
|
||
"metric": {
|
||
"bp": "Tension artérielle",
|
||
"weight": "Poids",
|
||
"pulse": "Pouls",
|
||
"mood": "Humeur",
|
||
"compliance": "Observance",
|
||
"general": "Général",
|
||
"hrv": "VFC",
|
||
"sleep": "Sommeil",
|
||
"resting_hr": "Pouls au repos",
|
||
"steps": "Pas",
|
||
"active_energy": "Énergie active",
|
||
"flights": "Étages",
|
||
"distance": "Distance",
|
||
"vo2_max": "VO₂ max",
|
||
"body_temp": "Température corporelle",
|
||
"medications": "Médicaments",
|
||
"anthropometrics": "Profil (taille, âge, sexe)",
|
||
"walking_hr": "Fréquence cardiaque à la marche",
|
||
"respiratory_rate": "Fréquence respiratoire",
|
||
"spo2": "Oxygène sanguin",
|
||
"pulse_wave_velocity": "Vitesse de l'onde de pouls",
|
||
"vascular_age": "Âge vasculaire",
|
||
"body_fat": "Masse grasse",
|
||
"fat_mass": "Masse grasse",
|
||
"fat_free_mass": "Masse sans graisse",
|
||
"muscle_mass": "Masse musculaire",
|
||
"lean_body_mass": "Masse maigre",
|
||
"bone_mass": "Masse osseuse",
|
||
"total_body_water": "Eau corporelle",
|
||
"bmi": "IMC",
|
||
"visceral_fat": "Graisse viscérale",
|
||
"glucose": "Glycémie",
|
||
"walking_steadiness": "Stabilité à la marche",
|
||
"walking_asymmetry": "Asymétrie de marche",
|
||
"walking_double_support": "Temps de double appui",
|
||
"walking_step_length": "Longueur de foulée",
|
||
"walking_speed": "Vitesse de marche",
|
||
"audio_env": "Son ambiant",
|
||
"audio_headphone": "Audio du casque",
|
||
"audio_event": "Événements sonores forts",
|
||
"daylight": "Temps à la lumière du jour",
|
||
"skin_temp": "Température cutanée",
|
||
"workouts": "Entraînements"
|
||
},
|
||
"window": {
|
||
"last7days": "7 derniers jours",
|
||
"last30days": "30 derniers jours",
|
||
"last90days": "90 derniers jours",
|
||
"lastYear": "depuis le début de l'année",
|
||
"allTime": "Toute la période"
|
||
},
|
||
"windowLabel": "Période",
|
||
"settingsAriaLabel": "Paramètres du coach",
|
||
"settingsTitle": "Paramètres du coach",
|
||
"settingsDescription": "Configure comment le coach te parle.",
|
||
"settingsToneLabel": "Ton",
|
||
"settingsToneWarm": "Chaleureux",
|
||
"settingsToneNeutral": "Neutre",
|
||
"settingsToneConcise": "Concis",
|
||
"settingsVerbosityLabel": "Longueur de réponse",
|
||
"settingsVerbosityBrief": "Bref",
|
||
"settingsVerbosityDefault": "Standard",
|
||
"settingsVerbosityDetailed": "Détaillé",
|
||
"settingsSourcesPointer": "Les groupes de données que le coach peut utiliser et la fenêtre d'analyse par défaut se gèrent directement dans le chat du coach (volet « Ce sur quoi je m'appuie »).",
|
||
"settingsSourcesPointerLink": "Ouvrir le coach",
|
||
"settingsExcludeLabel": "Exclure des métriques",
|
||
"settingsExcludeHint": "Le coach ne verra pas les données des métriques sélectionnées.",
|
||
"settingsEvidenceLabel": "Afficher les preuves par défaut",
|
||
"settingsEvidenceHint": "Ouvre automatiquement l’encadré preuves sous chaque réponse.",
|
||
"settingsDefaultWindowLabel": "Période d’analyse par défaut",
|
||
"settingsDefaultWindowHint": "Le coach lit cette période par chat, sauf si tu en choisis une autre dans l’en-tête du panneau.",
|
||
"settingsSave": "Enregistrer",
|
||
"settingsSaved": "Enregistré.",
|
||
"settingsCancel": "Annuler",
|
||
"feedbackHelpful": "Utile",
|
||
"feedbackUnhelpful": "Peu utile",
|
||
"feedbackThanks": "Merci pour l’indication.",
|
||
"feedbackError": "Impossible d'enregistrer le retour",
|
||
"dailyLimitTitle": "Limite quotidienne atteinte",
|
||
"dailyLimitBody": "Limite quotidienne atteinte ; réinitialisation à 00:00 UTC.",
|
||
"providerRateLimitTitle": "Fournisseur limité en débit",
|
||
"providerRateLimitBody": "Le fournisseur est temporairement saturé ; réinitialisation dans ~5 min.",
|
||
"settingsContextLabel": "Envoyer le contexte",
|
||
"settingsContextHint": "Blocs optionnels sur lesquels le coach peut s’appuyer. Si tu en désactives un, il sera omis dans chaque réponse.",
|
||
"cluster": {
|
||
"cardio": {
|
||
"label": "Cardiovasculaire",
|
||
"hint": "TA · pouls · VFC · FC repos & marche"
|
||
},
|
||
"body": {
|
||
"label": "Composition corporelle",
|
||
"hint": "Poids · masse grasse · muscle · IMC"
|
||
},
|
||
"activity": {
|
||
"label": "Activité",
|
||
"hint": "Pas · énergie · distance · VO₂ max"
|
||
},
|
||
"workouts": {
|
||
"label": "Entraînements",
|
||
"hint": "Courses · sorties · séances"
|
||
},
|
||
"sleep": {
|
||
"label": "Sommeil",
|
||
"hint": "Durée · phases"
|
||
},
|
||
"mood": {
|
||
"label": "Humeur",
|
||
"hint": "Entrées d'humeur quotidiennes"
|
||
},
|
||
"glucose": {
|
||
"label": "Glycémie",
|
||
"hint": "Mesures à jeun & postprandiales"
|
||
},
|
||
"medication": {
|
||
"label": "Médication",
|
||
"hint": "Observance · contexte GLP-1"
|
||
},
|
||
"mobility": {
|
||
"label": "Mobilité & démarche",
|
||
"hint": "Stabilité · asymétrie · démarche"
|
||
},
|
||
"environment": {
|
||
"label": "Environnement",
|
||
"hint": "Bruit · lumière · temp. cutanée"
|
||
}
|
||
},
|
||
"settingsClustersLabel": "Données vues par le Coach",
|
||
"settingsClustersHint": "Choisissez les groupes de données que le Coach peut lire. Plus de données, des réponses plus riches et un prompt plus grand.",
|
||
"settingsClusterNoData": "Pas encore de données",
|
||
"sourcesMemberCount": "{count} mesures",
|
||
"dictate": "Dicter",
|
||
"dictateStop": "Arrêter la dictée",
|
||
"voiceUnsupported": "La saisie vocale n'est pas prise en charge par ce navigateur",
|
||
"dictateError": "Impossible de démarrer la saisie vocale. Vérifiez l'autorisation du microphone et réessayez.",
|
||
"showConversations": "Afficher les conversations",
|
||
"hideConversations": "Masquer les conversations",
|
||
"heroGreeting": "Comment puis-je t'aider ?",
|
||
"heroSubline": "Pose une question sur tes tendances, médicaments ou mesures.",
|
||
"thinkingElapsed": "{seconds}s",
|
||
"thinkingDuration": "A réfléchi pendant {seconds}s",
|
||
"thinkingExpandAria": "Montrer ce que le Coach a pris en compte",
|
||
"thinkingDetail": "Réponse établie à partir de ton aperçu santé.",
|
||
"tokensUsed": "{count} jetons",
|
||
"tokensUsedWithModel": "{count} jetons · {model}"
|
||
},
|
||
"relativeJustNow": "à l’instant",
|
||
"relativeMinutesAgoOne": "il y a {count} minute",
|
||
"relativeMinutesAgoOther": "il y a {count} minutes",
|
||
"relativeHoursAgoOne": "il y a {count} heure",
|
||
"relativeHoursAgoOther": "il y a {count} heures",
|
||
"relativeDaysAgoOne": "il y a {count} jour",
|
||
"relativeDaysAgoOther": "il y a {count} jours",
|
||
"navOverview": "Vue d'ensemble",
|
||
"navBloodPressure": "Tension artérielle",
|
||
"navWeight": "Poids",
|
||
"navPulse": "Pouls",
|
||
"navMood": "Humeur",
|
||
"navMedication": "Médicament",
|
||
"navBmi": "IMC",
|
||
"navSleep": "Sommeil",
|
||
"navHrv": "VFC",
|
||
"navRestingHr": "FC repos",
|
||
"navOxygenSaturation": "Oxygène",
|
||
"navBodyTemperature": "Température",
|
||
"navSteps": "Pas",
|
||
"navActiveEnergy": "Énergie active",
|
||
"navAriaLabel": "Aller à la section",
|
||
"pillScrollLeft": "Faire défiler les onglets vers la gauche",
|
||
"pillScrollRight": "Faire défiler les onglets vers la droite",
|
||
"tabStrip": {
|
||
"vitalsParent": {
|
||
"label": "Constantes",
|
||
"header": "Constantes vitales"
|
||
},
|
||
"bodyParent": {
|
||
"label": "Corps",
|
||
"header": "Composition corporelle"
|
||
},
|
||
"activityParent": {
|
||
"label": "Activité",
|
||
"header": "Activité et mobilité"
|
||
},
|
||
"cardiovascularParent": {
|
||
"label": "Cardiovasculaire",
|
||
"header": "Marqueurs cardiovasculaires"
|
||
},
|
||
"hearingParent": {
|
||
"label": "Audition",
|
||
"header": "Audition et exposition sonore"
|
||
},
|
||
"environmentParent": {
|
||
"label": "Environnement",
|
||
"header": "Environnement"
|
||
},
|
||
"metabolicParent": {
|
||
"label": "Métabolique",
|
||
"header": "Métabolique"
|
||
}
|
||
},
|
||
"hrv": {
|
||
"title": "VFC",
|
||
"description": "Variabilité de la fréquence cardiaque dans le temps — signal de récupération du système nerveux, capté la nuit par l'Apple Watch et d'autres wearables compatibles.",
|
||
"chartTitle": "Variabilité de la fréquence cardiaque",
|
||
"emptyState": {
|
||
"title": "Aucune mesure de VFC",
|
||
"description": "Les mesures de VFC apparaîtront ici dès que l'Apple Watch (ou un appareil Withings compatible) synchronisera des relevés nocturnes."
|
||
}
|
||
},
|
||
"restingHr": {
|
||
"title": "FC au repos",
|
||
"description": "La fréquence cardiaque de base sur la journée — distincte des pointages ponctuels de la page Pulse. Apple Santé fournit une valeur par jour.",
|
||
"chartTitle": "Fréquence cardiaque au repos",
|
||
"emptyState": {
|
||
"title": "Aucune FC au repos",
|
||
"description": "La FC au repos arrive dès que l'Apple Watch ou un appareil Withings compatible a porté une journée calme."
|
||
}
|
||
},
|
||
"oxygenSaturation": {
|
||
"title": "Saturation en oxygène",
|
||
"description": "Oxygène sanguin (SpO₂) — plage clinique normale 95–100 %, avec zones cibles ombrées sur le graphique.",
|
||
"chartTitle": "Saturation en oxygène",
|
||
"emptyState": {
|
||
"title": "Aucune mesure SpO₂",
|
||
"description": "Les mesures SpO₂ apparaîtront dès qu'un wearable compatible (Apple Watch, Withings ScanWatch) en capturera une."
|
||
}
|
||
},
|
||
"bodyTemperature": {
|
||
"title": "Température corporelle",
|
||
"description": "Tendance de température corporelle centrale en Celsius. La température cutanée Withings vit sur une métrique distincte.",
|
||
"chartTitle": "Température corporelle",
|
||
"emptyState": {
|
||
"title": "Aucune température corporelle",
|
||
"description": "Enregistre une mesure ou laisse ton wearable en synchroniser une — la tendance apparaîtra ici.",
|
||
"cta": "Enregistrer la température"
|
||
}
|
||
},
|
||
"steps": {
|
||
"title": "Pas",
|
||
"description": "Nombre de pas quotidien — une ligne par jour, depuis Apple Santé ou un appareil d'activité connecté.",
|
||
"chartTitle": "Pas par jour",
|
||
"emptyState": {
|
||
"title": "Aucune donnée de pas",
|
||
"description": "Les totaux de pas quotidiens apparaîtront ici dès qu'Apple Santé ou un appareil d'activité synchronise une journée complète."
|
||
}
|
||
},
|
||
"activeEnergy": {
|
||
"title": "Énergie active",
|
||
"description": "Total quotidien d'énergie active en kilocalories — une ligne par jour, depuis Apple Santé ou Withings activité.",
|
||
"chartTitle": "Énergie active",
|
||
"emptyState": {
|
||
"title": "Aucune donnée d'énergie active",
|
||
"description": "Les totaux d'énergie active apparaîtront dès qu'Apple Santé ou un appareil Withings activité synchronise une journée complète."
|
||
}
|
||
},
|
||
"subPage": {
|
||
"loadError": "Impossible de charger cette mesure pour le moment.",
|
||
"blutdruckDescription": "Ton évolution systolique/diastolique avec des plages cibles adaptées à l’âge et une évaluation textuelle.",
|
||
"gewichtDescription": "Évolution du poids face à la bande saine dérivée de ta taille, avec évaluation.",
|
||
"pulsDescription": "Resting pulse vs. the personalised Karvonen target band, plus a written assessment.",
|
||
"stimmungDescription": "Valeurs d’humeur quotidiennes dans le temps, avec une évaluation textuelle.",
|
||
"stimmungEmptyTitle": "Saisir la première humeur",
|
||
"stimmungEmptyDescription": "Les insights d’humeur apparaissent dès que tu auras saisi quelques entrées. Appuie ci-dessous pour démarrer.",
|
||
"stimmungEmptyAction": "Ouvrir le journal d’humeur",
|
||
"medikamenteDescription": "Calendrier des prises par médicament, ainsi qu’une évaluation textuelle.",
|
||
"medikamenteEmptyTitle": "Ajouter le premier médicament",
|
||
"medikamenteEmptyDescription": "Les insights d’observance ont besoin d’au moins un médicament enregistré.",
|
||
"medikamenteEmptyAction": "Ouvrir les médicaments",
|
||
"bmiDescription": "IMC dérivé de ton poids et de ta taille, avec évaluation.",
|
||
"target": {
|
||
"adjustLink": "Ajuster la plage cible"
|
||
},
|
||
"explainer": {
|
||
"trigger": "Qu'est-ce que {title} ?",
|
||
"bloodPressureTitle": "Tension artérielle",
|
||
"bloodPressureBody": "La tension artérielle est la force exercée par le sang sur les parois des artères, exprimée en systolique sur diastolique (le pic lors d'un battement sur la valeur de repos entre les battements). Des valeurs durablement élevées sollicitent le cœur et les vaisseaux à la longue.",
|
||
"pulseTitle": "Pouls",
|
||
"pulseBody": "Le pouls correspond au nombre de battements du cœur par minute. Une mesure ponctuelle reflète ce que vous faisiez à l'instant : au repos, il est généralement de 60 à 100 battements par minute et augmente naturellement avec le mouvement, le stress ou la caféine.",
|
||
"weightTitle": "Poids",
|
||
"weightBody": "Le poids corporel est l'un des signaux les plus simples de l'équilibre énergétique à long terme et de la santé globale. La tendance sur plusieurs semaines compte bien plus qu'une mesure isolée, qui varie avec l'hydratation, l'alimentation et l'heure de la journée.",
|
||
"bmiTitle": "Indice de masse corporelle (IMC)",
|
||
"bmiBody": "L'IMC correspond à votre poids divisé par votre taille au carré, un seul chiffre qui vous situe dans une large catégorie de poids. C'est un dépistage de population, pas un diagnostic, et il ne distingue pas le muscle de la graisse.",
|
||
"sleepTitle": "Sommeil",
|
||
"sleepBody": "La durée du sommeil est le temps réellement dormi au cours de la nuit, réparti entre sommeil léger, profond et paradoxal. La plupart des adultes ont besoin d'environ sept à neuf heures ; une quantité et une qualité régulières soutiennent la récupération, l'humeur et le métabolisme.",
|
||
"moodTitle": "Humeur",
|
||
"moodBody": "Le suivi de l'humeur consigne ce que vous ressentez au fil du temps sur une échelle simple. Le noter régulièrement révèle des tendances — comment le sommeil, l'activité ou les médicaments s'alignent sur votre ressenti — qu'une seule journée ne montre jamais.",
|
||
"medicationsTitle": "Observance du traitement",
|
||
"medicationsBody": "L'observance mesure la fiabilité avec laquelle vous prenez votre traitement comme prescrit, ici sous forme de la part des doses attendues que vous avez enregistrées. Une prise régulière est souvent ce qui permet à un traitement d'agir comme prévu.",
|
||
"restingHrTitle": "Fréquence cardiaque au repos",
|
||
"restingHrBody": "La fréquence cardiaque au repos est votre rythme cardiaque lorsque vous êtes totalement au repos, généralement mesuré la nuit. Une fréquence plus basse indique souvent une meilleure forme cardiovasculaire, et une tendance à la hausse peut être un signe précoce de stress ou de maladie.",
|
||
"hrvTitle": "Variabilité de la fréquence cardiaque (VFC)",
|
||
"hrvBody": "La VFC est la petite variation du temps entre des battements consécutifs. Une variabilité plus élevée reflète généralement un système nerveux bien récupéré et adaptable, tandis qu'une baisse durable peut signaler de la fatigue, du stress ou une récupération insuffisante.",
|
||
"oxygenSaturationTitle": "Saturation en oxygène (SpO₂)",
|
||
"oxygenSaturationBody": "La SpO₂ est le pourcentage de globules rouges transportant de l'oxygène. Des valeurs de 95 à 100 % sont normales au repos ; des valeurs qui restent sous 90 % méritent attention, bien que de brèves baisses nocturnes soient fréquentes.",
|
||
"bodyTemperatureTitle": "Température corporelle",
|
||
"bodyTemperatureBody": "La température corporelle reflète votre état thermique central, normalement autour de 37 °C avec de petites variations quotidiennes. Une hausse durable peut indiquer une infection, tandis que les mesures nocturnes au poignet suivent surtout des variations relatives plutôt qu'une valeur clinique.",
|
||
"activeEnergyTitle": "Énergie active",
|
||
"activeEnergyBody": "L'énergie active correspond aux calories que vous brûlez par le mouvement, en plus de la dépense de base au repos. C'est une mesure directe du niveau d'activité physique de votre journée.",
|
||
"workoutsTitle": "Entraînements",
|
||
"workoutsBody": "Les entraînements sont les séances d'exercice structurées que vos appareils enregistrent, avec le type, la durée et l'énergie. Les suivre montre comment un entraînement régulier s'accumule au fil des semaines et comment il se relie à vos autres signaux de santé.",
|
||
"respiratoryRateTitle": "Fréquence respiratoire",
|
||
"respiratoryRateBody": "La fréquence respiratoire est le nombre de respirations que vous prenez par minute. Au repos, la plupart des adultes respirent environ douze à vingt fois par minute ; une hausse durable peut accompagner une maladie, un effort ou du stress.",
|
||
"bodyWaterTitle": "Eau corporelle totale",
|
||
"bodyWaterBody": "L'eau corporelle totale est la part de votre poids constituée de liquide, à l'intérieur et autour des cellules. Elle varie avec l'hydratation, l'alimentation et l'activité, si bien que la tendance sur plusieurs semaines en dit plus qu'une seule mesure.",
|
||
"boneMassTitle": "Masse osseuse",
|
||
"boneMassBody": "La masse osseuse est le poids estimé des minéraux de votre squelette. Les estimations sur balance sont approximatives, mais une tendance stable ou en hausse soutient la solidité osseuse à long terme.",
|
||
"fatFreeMassTitle": "Masse non grasse",
|
||
"fatFreeMassBody": "La masse non grasse est tout ce qui, dans votre corps, n'est pas de la graisse : muscle, os, organes et eau. La maintenir ou la développer tout en perdant du poids signale en général une composition corporelle plus saine.",
|
||
"fatMassTitle": "Masse grasse",
|
||
"fatMassBody": "La masse grasse est le poids total de la graisse de votre corps. Une part de graisse est indispensable aux hormones et au stockage d'énergie, mais un excès — surtout au niveau de l'abdomen — augmente le risque pour la santé à long terme.",
|
||
"muscleMassTitle": "Masse musculaire",
|
||
"muscleMassBody": "La masse musculaire est le poids estimé des muscles de votre corps. Plus de muscle soutient la force, le métabolisme et la mobilité, et demande généralement un effort actif pour être préservé avec l'âge.",
|
||
"visceralFatTitle": "Graisse viscérale",
|
||
"visceralFatBody": "La graisse viscérale est la graisse stockée au plus profond de l'abdomen, autour des organes. Contrairement à la graisse sous la peau, un niveau élevé est étroitement lié aux maladies cardiaques et au diabète de type 2 : plus elle est basse, mieux c'est.",
|
||
"leanBodyMassTitle": "Masse maigre",
|
||
"leanBodyMassBody": "La masse maigre est votre poids total moins la graisse corporelle : muscle, os, organes et eau réunis. La suivre en parallèle du poids montre si les variations viennent du muscle ou de la graisse.",
|
||
"flightsClimbedTitle": "Étages montés",
|
||
"flightsClimbedBody": "Les étages montés comptent les niveaux que vous gravissez chaque jour, un étage correspondant à environ trois mètres de dénivelé. C'est un indicateur simple de l'activité du quotidien et de l'effort des jambes.",
|
||
"walkingDistanceTitle": "Distance à pied et en course",
|
||
"walkingDistanceBody": "La distance à pied et en course est le trajet que vous parcourez à pied chaque jour. Elle complète le nombre de pas en reflétant la distance parcourue, pas seulement la fréquence des pas.",
|
||
"walkingSteadinessTitle": "Stabilité de la marche",
|
||
"walkingSteadinessBody": "La stabilité de la marche estime à quel point votre démarche est stable et équilibrée, classée d'acceptable à faible. Un niveau bas indique un risque de chute plus élevé et mérite d'être évoqué avec un professionnel de santé.",
|
||
"walkingHeartRateTitle": "Fréquence cardiaque à la marche",
|
||
"walkingHeartRateBody": "La fréquence cardiaque à la marche est votre pouls moyen lors d'une marche régulière. Une valeur plus basse au fil du temps reflète souvent une meilleure forme cardiovasculaire pour le même effort.",
|
||
"walkingAsymmetryTitle": "Asymétrie de la marche",
|
||
"walkingAsymmetryBody": "L'asymétrie de la marche est la part du temps où vos pas sont inégaux entre la jambe gauche et la droite. Un pourcentage plus élevé peut signaler une douleur, une blessure ou un trouble de la marche à examiner.",
|
||
"doubleSupportTimeTitle": "Temps de double appui",
|
||
"doubleSupportTimeBody": "Le temps de double appui est la part de chaque cycle de marche où les deux pieds touchent le sol en même temps. Un pourcentage plus élevé traduit en général une démarche plus prudente et moins stable.",
|
||
"stepLengthTitle": "Longueur de pas",
|
||
"stepLengthBody": "La longueur de pas est la distance moyenne d'une foulée à la suivante. Un pas plus court au fil du temps peut traduire de la fatigue, de la prudence ou un changement de mobilité.",
|
||
"walkingSpeedTitle": "Vitesse de marche",
|
||
"walkingSpeedBody": "La vitesse de marche est la rapidité de votre déplacement sur terrain plat. C'est un marqueur bien étudié de la santé générale et de la mobilité, et une allure stable ou en hausse est bon signe.",
|
||
"pulseWaveVelocityTitle": "Vitesse de l'onde de pouls",
|
||
"pulseWaveVelocityBody": "La vitesse de l'onde de pouls mesure la rapidité avec laquelle l'onde de pression de chaque battement parcourt vos artères. Une onde plus rapide indique des artères plus rigides, liées à un risque cardiovasculaire accru.",
|
||
"vascularAgeTitle": "Âge vasculaire",
|
||
"vascularAgeBody": "L'âge vasculaire estime, d'après la rigidité artérielle, l'âge apparent de vos artères par rapport à votre âge réel. Un âge vasculaire inférieur à votre âge réel suggère des vaisseaux sanguins en meilleure santé.",
|
||
"environmentalAudioTitle": "Niveaux sonores ambiants",
|
||
"environmentalAudioBody": "Les niveaux sonores ambiants suivent le volume de votre environnement en décibels. Une exposition prolongée au-delà d'environ 70 dB peut endommager l'audition avec le temps : des moyennes journalières plus basses sont plus sûres.",
|
||
"headphoneAudioTitle": "Niveaux audio au casque",
|
||
"headphoneAudioBody": "Les niveaux audio au casque suivent, en décibels, le volume auquel vous écoutez avec des écouteurs ou un casque. Baisser le volume et faire des pauses protège votre audition sur le long terme.",
|
||
"audioEventsTitle": "Événements sonores forts",
|
||
"audioEventsBody": "Les événements sonores forts signalent les moments où le bruit autour de vous a atteint un niveau pouvant nuire à l'audition en cas d'exposition suffisante. Des événements fréquents invitent à rechercher un environnement plus calme ou une protection auditive.",
|
||
"daylightTitle": "Temps à la lumière du jour",
|
||
"daylightBody": "Le temps à la lumière du jour correspond à la durée passée en lumière extérieure chaque jour. Une lumière naturelle régulière soutient un rythme veille-sommeil et une humeur sains, et le temps passé dehors est lié à la santé oculaire.",
|
||
"bloodGlucoseTitle": "Glycémie",
|
||
"bloodGlucoseBody": "La glycémie est la quantité de sucre dans votre sang, principale source d'énergie de l'organisme. Elle augmente après les repas et se stabilise entre eux ; des valeurs durablement élevées peuvent signaler un diabète ou un prédiabète.",
|
||
"skinTemperatureTitle": "Température cutanée",
|
||
"skinTemperatureBody": "La température cutanée correspond ici à la petite variation nocturne de la température de votre poignet par rapport à votre propre référence, et non à une mesure absolue de fièvre. Les variations peuvent suivre le sommeil, l'environnement, une maladie ou la phase du cycle menstruel.",
|
||
"cardioFitnessTitle": "Capacité cardio (VO₂ max)",
|
||
"cardioFitnessBody": "Le VO₂ max correspond à la quantité d'oxygène que votre corps peut utiliser à l'effort maximal — le meilleur indice de laboratoire de la forme aérobie, que les wearables estiment de façon indirecte. À titre indicatif, la condition physique est un prédicteur graduel de survie : chaque MET supplémentaire (environ 3,5 ml/kg/min) est associé à une mortalité inférieure d'environ 10 à 25 % (AHA, Circulation 2016). Une tendance plus élevée ou en hausse est un fort signe de santé cardiovasculaire.",
|
||
"cardioRecoveryTitle": "Récupération cardiaque",
|
||
"cardioRecoveryBody": "La récupération cardiaque correspond au nombre de battements par minute dont votre fréquence cardiaque diminue dans la première minute après l'arrêt d'un effort intense. Une baisse plus forte signifie que votre cœur se calme plus vite, signe d'une bonne condition physique.",
|
||
"wristTemperatureTitle": "Température du poignet",
|
||
"wristTemperatureBody": "La température du poignet est mesurée pendant votre sommeil et indiquée comme l'écart par rapport à votre valeur de référence, et non comme une valeur absolue. Une valeur stable est normale, tandis qu'une hausse durable peut signaler une maladie, un entraînement intense ou un changement de cycle.",
|
||
"fallsTitle": "Chutes",
|
||
"fallsBody": "Ceci compte les chutes lourdes détectées par votre wearable. L'objectif est zéro ; un nombre en hausse est un signal de risque de mobilité à évoquer avec un professionnel, surtout pour les personnes âgées.",
|
||
"sixMinuteWalkTitle": "Distance de marche de 6 minutes",
|
||
"sixMinuteWalkBody": "C'est une estimation de la distance que vous pourriez parcourir en six minutes, un test clinique classique de mobilité et d'endurance cardiopulmonaire. La valeur du wearable est une approximation, pas le test clinique encadré ; c'est la tendance stable ou en hausse qui compte.",
|
||
"stairAscentSpeedTitle": "Vitesse en montée d'escaliers",
|
||
"stairAscentSpeedBody": "C'est la vitesse à laquelle vous montez une volée de marches. C'est un marqueur sensible de la force des jambes et de la mobilité : un rythme stable ou en hausse est bon signe, un rythme en baisse mérite attention.",
|
||
"stairDescentSpeedTitle": "Vitesse en descente d'escaliers",
|
||
"stairDescentSpeedBody": "C'est la vitesse à laquelle vous descendez une volée de marches. Avec la vitesse de montée, elle reflète le contrôle des jambes et l'équilibre : un rythme stable est bon signe, un rythme en baisse mérite attention.",
|
||
"breathingDisturbancesTitle": "Troubles respiratoires du sommeil",
|
||
"breathingDisturbancesBody": "Un wearable peut estimer à quelle fréquence votre respiration a été interrompue pendant le sommeil. Un indice plus bas est préférable ; un niveau signalé comme élevé, surtout sur plusieurs nuits, mérite d'être évoqué avec un professionnel. C'est une approximation de dépistage, pas un diagnostic d'apnée du sommeil.",
|
||
"stepsTitle": "Pas",
|
||
"stepsBody": "Le nombre de pas correspond au total de pas que vous faites chaque jour. C'est la mesure la plus simple de l'activité quotidienne : un total journalier plus élevé reflète généralement un mode de vie plus actif, et une habitude régulière compte plus qu'une seule grosse journée.",
|
||
"readinessBody": "La forme du jour est une lecture quotidienne unique de la disposition de votre corps à affronter la journée, mêlant fréquence cardiaque au repos, variabilité de la fréquence cardiaque, sommeil et régularité de vos dernières nuits. Un score élevé signifie que votre organisme paraît récupéré et disponible ; un score plus bas est une invitation douce à lever le pied.",
|
||
"sleepScoreBody": "Votre score de sommeil résume toute une nuit en un seul chiffre — durée, efficacité, régularité des horaires et équilibre entre sommeil léger, profond et paradoxal. Observez la tendance sur plusieurs semaines plutôt que de courir après un score parfait sur une seule nuit.",
|
||
"recoveryBody": "La récupération reflète la qualité du rétablissement de votre corps, à partir de signaux nocturnes comme la variabilité de la fréquence cardiaque et la fréquence au repos. Un score élevé est un feu vert pour pousser ; un score plus bas suggère que votre organisme se reconstruit encore.",
|
||
"strainBody": "La charge mesure l'effort cardiovasculaire et physique que vous avez imposé à votre corps, des entraînements à une journée active debout. Dès qu'il y a assez d'historique, elle est évaluée par rapport à votre propre effort habituel, pas à un standard extérieur.",
|
||
"stressBody": "Le stress est ici une estimation de la charge physiologique sur votre système nerveux, lue surtout à partir des schémas de variabilité de la fréquence cardiaque et non de ce que vous ressentez consciemment. Un score plus bas indique un état calme et bien régulé ; un score plus élevé invite à prévoir de la récupération.",
|
||
"recoveryPageTitle": "Récupération",
|
||
"recoveryPageBody": "La récupération rassemble les signaux nocturnes enregistrés par votre wearable — recharge, effort, charge ainsi que vos totaux de fréquence cardiaque et d'énergie du jour — pour montrer à quel point votre corps a récupéré. Observez la tendance sur plusieurs jours plutôt qu'un seul chiffre ; une valeur plus faible invite à lever le pied, ce n'est pas une alarme.",
|
||
"pulsePressureTitle": "Pression pulsée",
|
||
"pulsePressureBody": "La pression pulsée est l'écart entre votre valeur systolique et diastolique (systolique moins diastolique). À titre indicatif général, environ 40 mmHg est typique au repos ; un écart large au-dessus d'environ 60 mmHg à l'âge moyen peut refléter des artères rigidifiées, tandis qu'un écart étroit en dessous d'environ 25 mmHg peut accompagner un faible volume d'éjection (StatPearls/NIH 2023). C'est un sujet de discussion, pas un diagnostic.",
|
||
"meanArterialPressureTitle": "Pression artérielle moyenne",
|
||
"meanArterialPressureBody": "La pression artérielle moyenne est la pression moyenne que voient vos organes sur un battement, soit grosso modo la diastolique plus un tiers de l'écart avec la systolique. À titre indicatif général, une valeur au repos se situe autour de 70–100 mmHg (StatPearls/NIH 2023). Le seuil de ~60 mmHg souvent cité est un concept de soins aigus, pas une alarme pour l'autosurveillance.",
|
||
"cycleEducationBody": "Votre cycle traverse quatre phases pilotées par les hormones, et sa durée et sa régularité sont une fenêtre accessible sur la santé globale. À titre indicatif général, les cycles chez l'adulte durent typiquement 21–35 jours (les références cliniques citent 24–38), avec des règles d'environ cinq jours (ACOG 2015). La phase lutéale est l'ancrage stable, donc l'ovulation s'estime au mieux en comptant à rebours depuis vos prochaines règles prévues, jamais à un « jour 14 » fixe. Une fenêtre fertile prédite est une estimation qui demande plusieurs cycles enregistrés et reste approximative, et la température basale confirme l'ovulation après coup plutôt qu'elle ne la prédit. Ce n'est pas une méthode de contraception.",
|
||
"sleepHygieneBody": "Quelques habitudes fondées sur les preuves favorisent le sommeil : des heures de coucher et de lever régulières, week-ends compris, une lumière vive le matin et des soirées tamisées, une chambre fraîche, sombre et calme, et éviter la caféine l'après-midi, l'alcool tardif et les repas copieux tard le soir (CDC 2024). La régularité prédit la santé au moins autant que la durée, et le temps de sommeil total d'un wearable est bien plus fiable que sa répartition entre sommeil profond, léger et paradoxal.",
|
||
"referenceGuidance": "Indication générale, pas un avis médical. Les plages de référence sont des repères de population qui évoluent avec votre âge, votre sexe et vos conditions de santé ; votre propre tendance dans le temps guide la lecture."
|
||
},
|
||
"bpDerived": {
|
||
"pulsePressure": "La pression pulsée (l'écart entre vos valeurs) est d'environ {value} mmHg ; environ 40 est typique au repos.",
|
||
"meanArterialPressure": "La pression artérielle moyenne (la moyenne que voient vos organes) est d'environ {value} mmHg, normalement autour de 70–100.",
|
||
"caveat": "Ces valeurs sont dérivées de votre dernière mesure à titre indicatif général, pas comme un diagnostic."
|
||
},
|
||
"stats": {
|
||
"label": "Statistiques récapitulatives",
|
||
"min": "Min",
|
||
"max": "Max",
|
||
"median": "Médiane",
|
||
"mean": "Moyenne"
|
||
},
|
||
"showAllValues": "Afficher toutes les mesures",
|
||
"valuesPageTitle": "{metric} — toutes les mesures",
|
||
"valuesPageDescription": "Chaque mesure derrière cette métrique. Modifiez ou supprimez une entrée directement.",
|
||
"diversity": {
|
||
"trigger": "Conseil de mesure",
|
||
"weekday": "La plupart de vos mesures de {metric} tombent le même jour de la semaine. Enregistrer d'autres jours donne une image plus complète.",
|
||
"timeOfDay": "La plupart de vos mesures de {metric} tombent à une heure similaire de la journée. Varier l'heure donne une image plus complète."
|
||
},
|
||
"valuesBack": "Retour aux Insights",
|
||
"valuesBackToMetric": "Retour à {metric}",
|
||
"scoresBack": "Retour aux Insights"
|
||
},
|
||
"sleep": {
|
||
"title": "Sommeil",
|
||
"description": "Répartition des phases et durée nocturne, issues d’Apple Health.",
|
||
"headlineTitle": "Moyenne par nuit",
|
||
"headlineCaption": "Moyenne sur {count} nuits — {suffix}",
|
||
"headlineCaptionSuffix": "par nuit",
|
||
"compositionTitle": "Répartition des phases",
|
||
"compositionSubtitle": "{nights} dernières nuits",
|
||
"compositionAriaLabel": "Répartition des phases de sommeil sur {nights} nuits",
|
||
"hypnogram": {
|
||
"title": "La nuit dernière",
|
||
"subtitle": "{asleep} de sommeil",
|
||
"ariaLabel": "Progression des phases de sommeil de la nuit dernière : {asleep} de sommeil, {awakenings} réveils",
|
||
"asleepTotal": "Sommeil {value}",
|
||
"inBedTotal": "Au lit {value}",
|
||
"awakenings": "{count} réveils",
|
||
"source": "Source : {source}",
|
||
"estimateNote": "Les durées des phases sont estimées : cette source indique des totaux par phase, pas une chronologie mesurée."
|
||
},
|
||
"stages": {
|
||
"deep": "Profond",
|
||
"rem": "REM",
|
||
"core": "Léger",
|
||
"asleep": "Endormi",
|
||
"awake": "Éveillé",
|
||
"inBed": "Au lit",
|
||
"unavailable": "Pas encore de données de phases — la synchro des phases via Apple Health arrive avec la v1.5."
|
||
},
|
||
"empty": {
|
||
"title": "Pas encore de données de sommeil",
|
||
"description": "La synchro Apple Health arrive avec la v1.5 et remplira automatiquement cette vue.",
|
||
"action": "Gérer les appareils"
|
||
},
|
||
"debt": {
|
||
"title": "Dette de sommeil",
|
||
"value": "{hours} h {minutes} min de déficit",
|
||
"caption": "Déficit cumulé sur les {nights} dernières nuits",
|
||
"clearValue": "À jour",
|
||
"clearCaption": "Aucun déficit cumulé sur les {nights} dernières nuits",
|
||
"learning": "Votre sommeil est encore en cours d'analyse — {counted} nuits jusqu'ici, encore {remaining} pour un bilan fiable."
|
||
},
|
||
"average": {
|
||
"title": "Moyenne par nuit",
|
||
"value": "{hours} h {minutes} min",
|
||
"caption": "Sommeil moyen sur les {nights} dernières nuits",
|
||
"learning": "Votre sommeil est encore en cours d'analyse — {counted} nuits jusqu'ici, encore {remaining} pour une moyenne fiable."
|
||
},
|
||
"chronotype": {
|
||
"title": "Chronotype",
|
||
"learning": "Votre rythme est encore en cours d'analyse — {counted} sur {total} nuits libres. Un chronotype a besoin de quelques matins sans réveil pour avoir du sens.",
|
||
"advancedToggle": "Avancé",
|
||
"socialJetlagValue": "{hours} h {minutes} min de jet lag social",
|
||
"socialJetlagCaption": "L'écart entre vos horaires de sommeil les jours travaillés et les jours libres — comme un petit décalage horaire hebdomadaire.",
|
||
"msfScValue": "Milieu de sommeil corrigé {clock}",
|
||
"msfScCaption": "Ajusté pour le sommeil rattrapé le week-end (MSFsc).",
|
||
"dayTypeNote": "Les jours libres sont supposés être les week-ends jusqu'à l'ajout du suivi du type de jour.",
|
||
"band": {
|
||
"extreme_early": "Type du matin marqué",
|
||
"early": "Type du matin",
|
||
"intermediate": "Type intermédiaire",
|
||
"late": "Type du soir",
|
||
"extreme_late": "Type du soir marqué"
|
||
},
|
||
"midpointHeadline": "Le milieu naturel de votre sommeil se situe vers {clock}."
|
||
},
|
||
"rhythm": {
|
||
"loadError": "Votre rythme de sommeil n'a pas pu se charger pour l'instant. Il réapparaîtra dès que la connexion sera rétablie."
|
||
}
|
||
},
|
||
"correlations": "Corrélations",
|
||
"medicationCompliance": "Observance des médicaments",
|
||
"dayStreak": "{count} jours de série",
|
||
"dayStreakOne": "{count} jour de série",
|
||
"compliance7d": "Observance 7 jours",
|
||
"compliance30d": "Observance 30 jours",
|
||
"taken": "Pris",
|
||
"skipped": "Sauté",
|
||
"missed": "Manqué",
|
||
"generalStatusBadge": {
|
||
"good": "Bien",
|
||
"watch": "Surveiller",
|
||
"critical": "Critique"
|
||
},
|
||
"assessmentTitle": "Évaluation",
|
||
"restMode": {
|
||
"title": "Mode repos",
|
||
"body": "Un épisode de maladie ou d'affection est en cours, ceci reflète donc une période de récupération. Votre score n'en est pas pénalisé.",
|
||
"bodySince": "Un épisode de maladie ou d'affection est en cours depuis le {since}, ceci reflète donc une période de récupération. Votre score n'en est pas pénalisé."
|
||
},
|
||
"assessmentShowMore": "Afficher plus",
|
||
"assessmentShowLess": "Afficher moins",
|
||
"bloodPressureSectionTitle": "Tension artérielle",
|
||
"weightSectionTitle": "Poids",
|
||
"pulseSectionTitle": "Pouls",
|
||
"bmiSectionTitle": "IMC",
|
||
"complianceNoData": "Aucune donnée d’observance disponible",
|
||
"generate": "Générer une nouvelle analyse",
|
||
"moodSectionTitle": "Humeur",
|
||
"confidence": "Confiance",
|
||
"cached": "En cache",
|
||
"emptyState": {
|
||
"bloodPressure": {
|
||
"title": "Aucune mesure de tension artérielle",
|
||
"description": "Enregistrez une mesure de tension : la tendance, la part dans la cible et la classification OMS s'afficheront ici.",
|
||
"cta": "Enregistrer une tension"
|
||
},
|
||
"weight": {
|
||
"title": "Aucune mesure de poids",
|
||
"description": "Enregistrez un poids : la tendance, la moyenne glissante et la zone cible apparaîtront automatiquement.",
|
||
"cta": "Enregistrer un poids"
|
||
},
|
||
"pulse": {
|
||
"title": "Aucune mesure de pouls",
|
||
"description": "Enregistrez un pouls : pouls au repos, VFC et VO₂ max apparaîtront dans cette vue.",
|
||
"cta": "Enregistrer un pouls"
|
||
},
|
||
"bmi": {
|
||
"title": "IMC pas encore calculé",
|
||
"description": "Dès qu'une taille et au moins un poids sont enregistrés, la tendance IMC avec les zones OMS s'affichera ici.",
|
||
"cta": "Enregistrer un poids"
|
||
},
|
||
"mood": {
|
||
"title": "Aucune entrée d'humeur",
|
||
"description": "Enregistrez une humeur : la tendance, la bande de stabilité et les corrélations s'afficheront.",
|
||
"cta": "Enregistrer une humeur"
|
||
},
|
||
"medication": {
|
||
"title": "Aucun médicament configuré",
|
||
"description": "Configurez un médicament : observance, taux plasmatique et titration apparaîtront ici.",
|
||
"cta": "Ajouter un médicament"
|
||
},
|
||
"sleep": {
|
||
"title": "Aucune donnée de sommeil",
|
||
"description": "Dès que des données de sommeil sont disponibles (manuel ou via Withings / Apple Health), la répartition par stade apparaîtra ici.",
|
||
"cta": "Connecter Withings"
|
||
}
|
||
},
|
||
"navWorkouts": "Entraînements",
|
||
"navRecovery": "Récupération",
|
||
"workouts": {
|
||
"title": "Entraînements",
|
||
"description": "Courses, sorties à vélo, marches et séances de musculation récentes, dédupliquées entre Apple Watch et Withings.",
|
||
"emptyState": {
|
||
"title": "Aucun entraînement",
|
||
"description": "Ouvre l'app Apple Santé sur ton iPhone pour synchroniser tes entraînements. L'import d'activité Withings alimente également la marche et le vélo."
|
||
},
|
||
"row": {
|
||
"duration": "Durée",
|
||
"distance": "Distance",
|
||
"energy": "Énergie active"
|
||
},
|
||
"detail": {
|
||
"backToList": "Retour aux entraînements",
|
||
"statsTitle": "Statistiques",
|
||
"statsDuration": "Durée",
|
||
"statsDistance": "Distance",
|
||
"statsActiveEnergy": "Énergie active",
|
||
"statsAvgHr": "FC moyenne",
|
||
"statsMaxHr": "FC max",
|
||
"statsMinHr": "FC min",
|
||
"statsStepCount": "Pas",
|
||
"statsElevation": "Dénivelé",
|
||
"statsPace": "Allure",
|
||
"statsSource": "Source",
|
||
"routeTitle": "Parcours",
|
||
"routeUnavailable": "Aucun parcours GPS enregistré pour cet entraînement.",
|
||
"hrChartTitle": "Fréquence cardiaque",
|
||
"hrChartUnavailable": "Les échantillons de fréquence cardiaque à la seconde ne sont pas stockés pour cet entraînement.",
|
||
"notFound": "Entraînement introuvable.",
|
||
"loading": "Chargement de l'entraînement…"
|
||
},
|
||
"sport": {
|
||
"walking": "Marche",
|
||
"running": "Course",
|
||
"cycling": "Vélo",
|
||
"hiking": "Randonnée",
|
||
"swimming": "Natation",
|
||
"rowing": "Aviron",
|
||
"elliptical": "Elliptique",
|
||
"stairClimber": "Stepper",
|
||
"yoga": "Yoga",
|
||
"mindAndBody": "Mind and Body",
|
||
"strength": "Musculation",
|
||
"hiit": "HIIT",
|
||
"dance": "Danse",
|
||
"golf": "Golf",
|
||
"tennis": "Tennis",
|
||
"basketball": "Basket",
|
||
"soccer": "Football",
|
||
"crossTraining": "Cross-training",
|
||
"mixedCardio": "Cardio mixte",
|
||
"other": "Autre"
|
||
}
|
||
},
|
||
"bloodGlucose": {
|
||
"title": "Glycémie",
|
||
"description": "Vos relevés de glycémie au fil du temps, en mg/dL.",
|
||
"chartTitle": "Glycémie",
|
||
"medianLabel": "Glycémie médiane",
|
||
"emptyState": {
|
||
"title": "Aucune donnée de glycémie",
|
||
"description": "Les relevés de glycémie apparaissent ici dès que vous en saisissez un ou qu’un appareil se synchronise."
|
||
},
|
||
"clinical": {
|
||
"title": "Aperçu du glucose",
|
||
"subtitle": "Un point sur vos {days} derniers jours, à partir de {count} mesures.",
|
||
"spotCaveat": "Ce sont des estimations issues de mesures ponctuelles, pas le profil d’un capteur continu : lisez-les comme une tendance, non comme un verdict clinique.",
|
||
"labsLink": "Résultats de laboratoire ? Saisis une HbA1c ou une glycémie à jeun issue d'une prise de sang dans Laboratoire.",
|
||
"learningTitle": "Votre glucose se découvre encore",
|
||
"learningBody": "Pour l’instant, cela fait {count} sur {days}. Avec un peu plus d’historique, le tableau se précise : continuez à enregistrer ou laissez un appareil connecté compléter.",
|
||
"learningBodyEmpty": "Dès que quelques mesures arrivent — saisies par vous ou synchronisées depuis un appareil — votre temps dans la cible, votre moyenne et votre variabilité prennent forme ici.",
|
||
"readingsCount": "{count} mesures",
|
||
"readingsCountOne": "1 mesure",
|
||
"daysCount": "{days} jours",
|
||
"daysCountOne": "1 jour",
|
||
"tir": {
|
||
"title": "Temps dans la cible",
|
||
"caption": "Part des mesures dans chaque plage (70–180 mg/dl est la cible).",
|
||
"veryLow": "Très bas",
|
||
"low": "Bas",
|
||
"inRange": "Dans la cible",
|
||
"high": "Élevé",
|
||
"veryHigh": "Très élevé",
|
||
"ariaLabel": "Temps dans la cible : {tir}% dans la cible, {below}% en dessous, {above}% au-dessus.",
|
||
"empty": "Pas encore de mesures à afficher."
|
||
},
|
||
"gmi": {
|
||
"label": "Indicateur de gestion du glucose",
|
||
"help": "Une estimation de type HbA1c dérivée de votre glucose moyen."
|
||
},
|
||
"eA1c": {
|
||
"label": "HbA1c estimée",
|
||
"help": "Une estimation d’HbA1c à partir de votre glucose moyen (ADAG)."
|
||
},
|
||
"mean": {
|
||
"label": "Glucose moyen"
|
||
},
|
||
"cv": {
|
||
"label": "Variabilité",
|
||
"steady": "Stable",
|
||
"unstable": "Instable",
|
||
"help": "Coefficient de variation. À partir de 36 %, le glucose est considéré comme instable ; plus bas est plus stable."
|
||
},
|
||
"advanced": {
|
||
"toggle": "Indices avancés",
|
||
"intro": "Des indicateurs de niveau recherche pour regarder de plus près. Chacun condense vos mesures en un seul chiffre pondéré par le risque.",
|
||
"jIndex": {
|
||
"label": "Indice J",
|
||
"help": "Un score unique mêlant votre moyenne et sa dispersion — plus il est bas, plus le contrôle est serré."
|
||
},
|
||
"lbgi": {
|
||
"label": "Risque d’hypoglycémie (LBGI)",
|
||
"help": "Indice de Kovatchev pondérant la fréquence et la profondeur des baisses."
|
||
},
|
||
"hbgi": {
|
||
"label": "Risque d’hyperglycémie (HBGI)",
|
||
"help": "Indice de Kovatchev pondérant la fréquence et la hauteur des hausses."
|
||
},
|
||
"byContext": {
|
||
"title": "Par contexte",
|
||
"fasting": "À jeun",
|
||
"postprandial": "Après les repas",
|
||
"random": "Aléatoire",
|
||
"bedtime": "Au coucher",
|
||
"readingsShort": "{count} mesures",
|
||
"readingsShortOne": "1 mesure"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"navBloodGlucose": "Glucose",
|
||
"totalBodyWater": {
|
||
"title": "Eau corporelle totale",
|
||
"description": "Votre eau corporelle totale au fil du temps, en kilogrammes.",
|
||
"chartTitle": "Eau corporelle totale",
|
||
"emptyState": {
|
||
"title": "Aucune donnée d’eau corporelle",
|
||
"description": "Les relevés d’eau corporelle apparaissent ici dès qu’une balance à impédance se synchronise."
|
||
}
|
||
},
|
||
"navTotalBodyWater": "Eau corporelle",
|
||
"boneMass": {
|
||
"title": "Masse osseuse",
|
||
"description": "Votre masse osseuse au fil du temps, en kilogrammes.",
|
||
"chartTitle": "Masse osseuse",
|
||
"emptyState": {
|
||
"title": "Aucune donnée de masse osseuse",
|
||
"description": "Les relevés de masse osseuse apparaissent ici dès qu’une balance à impédance se synchronise."
|
||
}
|
||
},
|
||
"navBoneMass": "Masse osseuse",
|
||
"flightsClimbed": {
|
||
"title": "Étages gravis",
|
||
"description": "Volées d’escaliers gravies chaque jour.",
|
||
"chartTitle": "Étages gravis par jour",
|
||
"emptyState": {
|
||
"title": "Aucune donnée d’étages",
|
||
"description": "Les totaux d’étages apparaissent ici dès qu’Apple Health synchronise une journée."
|
||
}
|
||
},
|
||
"navFlightsClimbed": "Étages",
|
||
"walkingRunningDistance": {
|
||
"title": "Distance marche + course",
|
||
"description": "Distance de marche et de course parcourue chaque jour, en kilomètres.",
|
||
"chartTitle": "Distance par jour",
|
||
"emptyState": {
|
||
"title": "Aucune donnée de distance",
|
||
"description": "La distance quotidienne apparaît ici dès qu’Apple Health synchronise une journée."
|
||
}
|
||
},
|
||
"navWalkingRunningDistance": "Distance",
|
||
"fatFreeMass": {
|
||
"title": "Masse sans graisse",
|
||
"description": "Votre masse sans graisse au fil du temps, en kilogrammes.",
|
||
"chartTitle": "Masse sans graisse",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’une balance à impédance se synchronise."
|
||
}
|
||
},
|
||
"navFatFreeMass": "Masse maigre",
|
||
"fatMass": {
|
||
"title": "Masse grasse",
|
||
"description": "Votre masse grasse au fil du temps, en kilogrammes.",
|
||
"chartTitle": "Masse grasse",
|
||
"emptyState": {
|
||
"title": "Aucune donnée de masse grasse",
|
||
"description": "Les relevés apparaissent ici dès qu’une balance à impédance se synchronise."
|
||
}
|
||
},
|
||
"navFatMass": "Masse grasse",
|
||
"muscleMass": {
|
||
"title": "Masse musculaire",
|
||
"description": "Votre masse musculaire au fil du temps, en kilogrammes.",
|
||
"chartTitle": "Masse musculaire",
|
||
"emptyState": {
|
||
"title": "Aucune donnée musculaire",
|
||
"description": "Les relevés apparaissent ici dès qu’une balance à impédance se synchronise."
|
||
}
|
||
},
|
||
"navMuscleMass": "Masse musculaire",
|
||
"skinTemperature": {
|
||
"title": "Température cutanée",
|
||
"description": "La température cutanée de votre poignet au fil du temps, en degrés Celsius.",
|
||
"chartTitle": "Température cutanée",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’un appareil synchronise la température nocturne."
|
||
}
|
||
},
|
||
"navSkinTemperature": "Temp. peau",
|
||
"pulseWaveVelocity": {
|
||
"title": "Vitesse de l’onde de pouls",
|
||
"description": "Votre vitesse d’onde de pouls artérielle au fil du temps, en m/s — des valeurs plus élevées suggèrent des artères plus rigides.",
|
||
"chartTitle": "Vitesse de l’onde de pouls",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’un appareil Withings compatible se synchronise."
|
||
}
|
||
},
|
||
"navPulseWaveVelocity": "Vitesse onde de pouls",
|
||
"vascularAge": {
|
||
"title": "Âge vasculaire",
|
||
"description": "Votre âge vasculaire estimé au fil du temps, en années.",
|
||
"chartTitle": "Âge vasculaire",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les estimations apparaissent ici dès qu’un appareil Withings compatible se synchronise."
|
||
}
|
||
},
|
||
"navVascularAge": "Âge vasculaire",
|
||
"visceralFat": {
|
||
"title": "Graisse viscérale",
|
||
"description": "Votre indice de graisse viscérale au fil du temps.",
|
||
"chartTitle": "Graisse viscérale",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les indices apparaissent ici dès qu’une balance à impédance compatible se synchronise."
|
||
}
|
||
},
|
||
"navVisceralFat": "Graisse viscérale",
|
||
"audioExposureEnv": {
|
||
"title": "Audio ambiant",
|
||
"description": "Votre exposition quotidienne moyenne au son ambiant, en dBA.",
|
||
"chartTitle": "Exposition au son ambiant",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les niveaux sonores apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navAudioExposureEnv": "Audio ambiant",
|
||
"audioExposureHeadphone": {
|
||
"title": "Audio du casque",
|
||
"description": "Votre exposition quotidienne moyenne au casque, en dBA.",
|
||
"chartTitle": "Exposition au casque",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les niveaux apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navAudioExposureHeadphone": "Audio casque",
|
||
"timeInDaylight": {
|
||
"title": "Temps à la lumière du jour",
|
||
"description": "Minutes passées à la lumière du jour chaque jour.",
|
||
"chartTitle": "Lumière du jour par jour",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les totaux apparaissent ici dès qu’Apple Health synchronise une journée."
|
||
}
|
||
},
|
||
"navTimeInDaylight": "Lumière du jour",
|
||
"walkingSteadiness": {
|
||
"title": "Stabilité de la marche",
|
||
"description": "Votre stabilité de marche au fil du temps, en pourcentage.",
|
||
"chartTitle": "Stabilité de la marche",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navWalkingSteadiness": "Stabilité de marche",
|
||
"audioExposureEvent": {
|
||
"title": "Événements sonores forts",
|
||
"description": "Jours avec un événement d’exposition sonore forte.",
|
||
"chartTitle": "Événements sonores par jour",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les événements apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navAudioExposureEvent": "Événements sonores",
|
||
"respiratoryRate": {
|
||
"title": "Fréquence respiratoire",
|
||
"description": "Votre fréquence respiratoire au fil du temps, en respirations par minute.",
|
||
"chartTitle": "Fréquence respiratoire",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’Apple Health synchronise la respiration du sommeil ou de l’entraînement."
|
||
}
|
||
},
|
||
"navRespiratoryRate": "Fréquence respiratoire",
|
||
"leanBodyMass": {
|
||
"title": "Masse maigre corporelle",
|
||
"description": "Votre masse maigre corporelle au fil du temps, en kilogrammes.",
|
||
"chartTitle": "Masse maigre corporelle",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’une balance à impédance se synchronise."
|
||
}
|
||
},
|
||
"navLeanBodyMass": "Masse maigre corporelle",
|
||
"walkingHeartRateAverage": {
|
||
"title": "Pouls en marchant",
|
||
"description": "Votre fréquence cardiaque moyenne en marchant, en bpm.",
|
||
"chartTitle": "Pouls moyen en marchant",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navWalkingHeartRateAverage": "Pouls en marchant",
|
||
"walkingAsymmetry": {
|
||
"title": "Asymétrie de la marche",
|
||
"description": "Votre asymétrie de marche au fil du temps, en pourcentage.",
|
||
"chartTitle": "Asymétrie de la marche",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navWalkingAsymmetry": "Asymétrie de marche",
|
||
"walkingDoubleSupport": {
|
||
"title": "Temps de double appui",
|
||
"description": "Le pourcentage de chaque foulée avec les deux pieds au sol.",
|
||
"chartTitle": "Temps de double appui",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navWalkingDoubleSupport": "Double appui",
|
||
"walkingStepLength": {
|
||
"title": "Longueur de pas",
|
||
"description": "Votre longueur de pas moyenne au fil du temps, en mètres.",
|
||
"chartTitle": "Longueur de pas",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navWalkingStepLength": "Longueur de pas",
|
||
"walkingSpeed": {
|
||
"title": "Vitesse de marche",
|
||
"description": "Votre vitesse de marche moyenne au fil du temps, en km/h.",
|
||
"chartTitle": "Vitesse de marche (km/h)",
|
||
"emptyState": {
|
||
"title": "Aucune donnée",
|
||
"description": "Les relevés apparaissent ici dès qu’Apple Health se synchronise."
|
||
}
|
||
},
|
||
"navWalkingSpeed": "Vitesse de marche",
|
||
"mood": {
|
||
"heatmapTitle": "Calendrier d'humeur",
|
||
"heatmapNoEntry": "Aucune entrée",
|
||
"legendGreat": "Excellent",
|
||
"legendGood": "Bien",
|
||
"legendOkay": "Correct",
|
||
"legendLow": "Bas",
|
||
"distributionTitle": "Répartition de l'humeur",
|
||
"distributionDaysUnit": "jours",
|
||
"weekdayTitle": "Moyenne par jour de la semaine",
|
||
"weekdayNoData": "Aucune donnée",
|
||
"weekdayBestWorst": "Meilleur jour : {best} · Jour le plus difficile : {worst}",
|
||
"tagsTitle": "Étiquettes et déclencheurs",
|
||
"tagAvgMood": "Humeur moyenne avec cette étiquette",
|
||
"correlationsTitle": "Humeur et autres mesures",
|
||
"correlationsDescription": "Comment votre humeur évolue avec le sommeil, l'activité et le pouls le même jour.",
|
||
"correlation": {
|
||
"sleepTitle": "Humeur vs. sommeil",
|
||
"stepsTitle": "Humeur vs. activité",
|
||
"pulseTitle": "Humeur vs. pouls",
|
||
"sleepAxis": "Sommeil (min)",
|
||
"stepsAxis": "Pas",
|
||
"pulseAxis": "Pouls (bpm)",
|
||
"strengthStrong": "Forte",
|
||
"strengthModerate": "Modérée",
|
||
"strengthWeak": "Faible",
|
||
"strengthNone": "Aucune",
|
||
"source": "{n} jours appariés · r = {r}",
|
||
"emptyTitle": "Pas encore assez de données appariées",
|
||
"emptyDescription": "Enregistrez l'humeur et cette mesure les mêmes jours pour voir une corrélation.",
|
||
"weightTitle": "Humeur vs. poids",
|
||
"bloodPressureTitle": "Humeur vs. tension artérielle",
|
||
"weightAxis": "Poids",
|
||
"bloodPressureAxis": "Systolique (mmHg)",
|
||
"sourceLabel": "Comment ceci est calculé"
|
||
},
|
||
"structuredTagsTitle": "Répartition des étiquettes",
|
||
"inTargetValue": "{pct} %",
|
||
"inTargetCaption": "des derniers jours dans votre plage de bonne humeur",
|
||
"narrative": {
|
||
"title": "Ce qui ressort",
|
||
"weekdayDip": "Votre humeur baisse surtout le {weekday} — {delta} sous votre semaine.",
|
||
"weekdayPeak": "Le {weekday} est toujours votre meilleur jour, avec une moyenne de {value}.",
|
||
"trendUp": "Votre humeur progresse sur les {days} derniers jours (+{delta} par rapport à la période précédente).",
|
||
"trendDown": "Votre humeur recule sur les {days} derniers jours (-{delta} par rapport à la période précédente).",
|
||
"weekendUp": "Vous vous sentez mieux le week-end (+{delta} par rapport à la semaine).",
|
||
"weekendDown": "Votre humeur est plus basse le week-end (-{delta} par rapport à la semaine).",
|
||
"tagLift": "Les jours marqués « {tag} » dépassent votre humeur générale de {delta} en moyenne.",
|
||
"tagDrop": "Les jours marqués « {tag} » sont {delta} sous votre moyenne.",
|
||
"inTarget": "Vous avez été dans votre plage de bonne humeur {pct} % des 30 derniers jours.",
|
||
"streak": "Vous avez noté votre humeur {days} jours d'affilée — continuez.",
|
||
"timeOfDay": "Vous vous sentez mieux le {bucket}, en moyenne {value}."
|
||
},
|
||
"timeOfDay": {
|
||
"title": "Humeur selon l'heure de la journée",
|
||
"morning": "Matin",
|
||
"afternoon": "Après-midi",
|
||
"evening": "Soir",
|
||
"night": "Nuit",
|
||
"bestCaption": "Vous vous sentez généralement mieux le {bucket}."
|
||
},
|
||
"stability": {
|
||
"value": "{score}/100",
|
||
"bandVerySteady": "Votre humeur a été très stable",
|
||
"bandSteady": "Votre humeur a été plutôt stable",
|
||
"bandVariable": "Votre humeur a été nettement variable",
|
||
"bandVeryVariable": "Votre humeur a beaucoup fluctué récemment",
|
||
"title": "Stabilité"
|
||
},
|
||
"influence": {
|
||
"title": "Influence sur l'humeur",
|
||
"detail": "Moyenne de {withAvg} les {withDays} jours où vous l'avez indiqué, contre {withoutAvg} sans.",
|
||
"confidenceLow": "Confiance faible",
|
||
"confidenceMedium": "Confiance moyenne",
|
||
"confidenceHigh": "Confiance élevée"
|
||
},
|
||
"betterDays": {
|
||
"title": "Ce qui accompagne vos meilleurs jours",
|
||
"description": "Les tags et mesures qui coïncident avec vos jours de meilleure et de moins bonne humeur, classés selon la force du lien."
|
||
},
|
||
"crosstab": {
|
||
"title": "Tags et vos métriques de santé",
|
||
"description": "Comment une métrique de santé diffère les jours où vous avez ajouté chaque tag, par rapport aux jours sans.",
|
||
"pairLabel": "{tag} · {metric}",
|
||
"metricActiveEnergy": "Énergie active",
|
||
"metricSleepDuration": "Sommeil",
|
||
"metricNextDayRecovery": "Récupération le lendemain",
|
||
"unitHours": "h",
|
||
"unitKcal": "kcal",
|
||
"unitScore": "pts",
|
||
"detailSameDay": "En moyenne {withAvg} {unit} les {withDays} jours avec ce tag contre {withoutAvg} {unit} sans.",
|
||
"detailNextDay": "En moyenne {withAvg} {unit} le lendemain des {withDays} jours avec ce tag contre {withoutAvg} {unit} sinon."
|
||
},
|
||
"factorCrosstab": {
|
||
"title": "Vos facteurs notés et vos constantes",
|
||
"description": "Comment une constante diffère les jours où vous avez noté un facteur bas par rapport aux jours où vous l'avez noté haut.",
|
||
"pairLabel": "{factor} · {metric}",
|
||
"metricSleepDuration": "Sommeil",
|
||
"metricSteps": "Pas",
|
||
"metricRestingHeartRate": "Fréquence cardiaque au repos",
|
||
"metricHrv": "Variabilité de la fréquence cardiaque",
|
||
"metricWeight": "Poids",
|
||
"metricBloodPressureSys": "Systolique",
|
||
"unitHours": "h",
|
||
"unitScore": "pts",
|
||
"unitSteps": "pas",
|
||
"unitBpm": "bpm",
|
||
"unitMs": "ms",
|
||
"unitKg": "kg",
|
||
"unitMmHg": "mmHg",
|
||
"detail": "En moyenne {lowAvg} {unit} les {lowDays} jours où vous avez noté {factor} bas contre {highAvg} {unit} les jours où vous l'avez noté haut.",
|
||
"detailInverse": "En moyenne {lowAvg} {unit} sur vos {lowDays} pires jours de {factor} contre {highAvg} {unit} sur les meilleurs."
|
||
},
|
||
"discovery": {
|
||
"title": "Ce qui ressort",
|
||
"subheading": "Relations découvertes",
|
||
"footer": "Issues de {tested} paires d'un jour à l'autre testées sur l'ensemble de vos mesures, après correction des fausses découvertes.",
|
||
"empty": "Aucune relation d'humeur n'a encore franchi le seuil statistique. Continuez à enregistrer.",
|
||
"disclaimer": "Filtré statistiquement, mais toujours observationnel : une tendance à surveiller, pas une cause.",
|
||
"moodUp": "Un {factor} plus élevé tend à coïncider avec une meilleure humeur le lendemain dans vos données.",
|
||
"moodDown": "Un {factor} plus élevé tend à coïncider avec une moins bonne humeur le lendemain dans vos données.",
|
||
"outcomeUp": "Une meilleure humeur tend à coïncider avec un {factor} plus élevé le lendemain dans vos données.",
|
||
"outcomeDown": "Une meilleure humeur tend à coïncider avec un {factor} plus bas le lendemain dans vos données.",
|
||
"stat": "{n} jours appariés · r = {r} · q = {q}",
|
||
"statLabel": "Comment ceci est calculé",
|
||
"explainerLabel": "Comment ceci est calculé"
|
||
},
|
||
"inTargetTitle": "Dans votre plage"
|
||
},
|
||
"derived": {
|
||
"coverage": {
|
||
"summary": "{present} entrées sur {required} · {percent}%",
|
||
"ratioLabel": "{present}/{required}",
|
||
"historyDays": "Basé sur {count} jours d'historique",
|
||
"missing": "Enregistre ceci pour affiner la valeur : {list}"
|
||
},
|
||
"scoreRing": {
|
||
"aria": "Score {score} sur 100, {band}",
|
||
"ariaProvisional": "Score pas encore disponible — données insuffisantes",
|
||
"provisionalCaption": "Données encore insuffisantes",
|
||
"band": {
|
||
"green": "bon",
|
||
"yellow": "moyen",
|
||
"red": "faible"
|
||
}
|
||
},
|
||
"provenance": {
|
||
"title": "Comment c'est calculé",
|
||
"trigger": "Comment c'est calculé",
|
||
"inputsLabel": "Entrées",
|
||
"noInputs": "Aucune entrée ne soutient encore cette valeur.",
|
||
"methodLabel": "Méthode",
|
||
"window": "Sur tes {days} derniers jours · données {source}",
|
||
"asOf": "au {date}",
|
||
"standardLink": "Norme : {name}"
|
||
},
|
||
"vitals": {
|
||
"sectionTitle": "Vos constantes",
|
||
"loadingLabel": "Chargement de vos constantes",
|
||
"loadError": "Impossible de charger vos constantes pour le moment.",
|
||
"building": "Construction de votre plage habituelle — {count} sur {target} jours",
|
||
"typicalRange": "Habituel pour vous : {low}–{high}",
|
||
"fitnessYounger": "Forme cardio d'une personne ~{years} ans plus jeune",
|
||
"fitnessOlder": "Forme cardio ~{years} ans au-dessus de votre âge",
|
||
"fitnessTypical": "Forme cardio typique pour votre âge",
|
||
"fitnessNoNorm": "Ajoutez votre âge et votre sexe pour situer cela",
|
||
"vascularBelow": "{years} ans en dessous de votre âge",
|
||
"vascularAbove": "{years} ans au-dessus de votre âge",
|
||
"vascularMatch": "En phase avec votre âge",
|
||
"vascularNoAge": "Ajoutez votre date de naissance pour situer cela",
|
||
"hrvBand": {
|
||
"balanced": "Équilibré pour vous",
|
||
"unbalanced": "Au-dessus de votre plage habituelle",
|
||
"low": "En dessous de votre plage habituelle"
|
||
},
|
||
"bmiCategory": {
|
||
"underweight": "Insuffisance pondérale (OMS)",
|
||
"normal": "Plage normale (OMS)",
|
||
"overweight": "Surpoids (OMS)",
|
||
"obese": "Obésité (OMS)"
|
||
},
|
||
"sixMinuteBand": {
|
||
"green": "{percent}% de la valeur prédite pour votre profil",
|
||
"yellow": "{percent}% de la valeur prédite pour votre profil",
|
||
"red": "{percent}% de la valeur prédite pour votre profil"
|
||
},
|
||
"sixMinuteNoBand": "Ajoutez votre âge, taille, poids et sexe pour cadrer ceci",
|
||
"mobilitySectionTitle": "Mobilité et corps"
|
||
},
|
||
"anatomy": {
|
||
"outOf": "/100",
|
||
"contributorsLabel": "Facteurs",
|
||
"contributorValue": "{value} · {weight}% du poids",
|
||
"contributorMissing": "aucune donnée",
|
||
"disclaimer": "Indicatif — pas une évaluation clinique.",
|
||
"insufficient": "Pas encore assez de données pour l’évaluer. Continuez à enregistrer et cela apparaîtra ici."
|
||
},
|
||
"composite": {
|
||
"SLEEP_SCORE": {
|
||
"title": "Score de sommeil",
|
||
"description": "Un score de qualité du sommeil transparent avec chaque sous-score affiché.",
|
||
"method": "Un mélange de 0–100 entre suffisance (sommeil vs votre besoin selon l’âge), efficacité (sommeil ÷ temps au lit), régularité (stabilité de votre milieu de sommeil), timing (vs votre milieu habituel) et composition (part de REM + sommeil profond). Les sous-scores sont repondérés autour de ceux que vos données ne peuvent pas étayer ; rien n’est inventé.",
|
||
"sub": {
|
||
"sufficiency": "Suffisance",
|
||
"efficiency": "Efficacité",
|
||
"consistency": "Régularité",
|
||
"timing": "Timing",
|
||
"composition": "Composition"
|
||
}
|
||
},
|
||
"READINESS": {
|
||
"title": "Disponibilité",
|
||
"description": "Un indicateur quotidien de bien-être selon la position de vos signaux par rapport à votre propre référence.",
|
||
"method": "Un mélange de 0–100 entre l’écart de la fréquence cardiaque au repos, l’écart de la VFC (SDNN), la qualité du sommeil, la stabilité de la fréquence respiratoire et la stabilité de l’humeur — chacun mesuré par rapport à votre référence personnelle. Les poids sont renormalisés sur les composantes que vos données étayent. Un indicateur de bien-être, pas un score de récupération ni clinique.",
|
||
"component": {
|
||
"rhr": "Fréquence cardiaque au repos",
|
||
"hrv": "VFC (SDNN)",
|
||
"sleep": "Sommeil",
|
||
"respiratory": "Fréquence respiratoire",
|
||
"mood": "Stabilité de l’humeur"
|
||
},
|
||
"caveat": "Un indicateur de bien-être, pas un score de récupération ni clinique."
|
||
},
|
||
"VITALS_BASELINE": {
|
||
"method": "Votre plage typique personnelle est la médiane de vos valeurs quotidiennes sur la période, ± une dispersion robuste (écart absolu médian, mis à l’échelle). Elle suit VOS mesures, pas une norme de population : une valeur dans la bande est donc typique pour vous."
|
||
},
|
||
"HRV_BALANCE": {
|
||
"method": "Votre moyenne récente de VFC (SDNN) comparée à votre propre référence glissante (médiane ± dispersion robuste). Équilibrée signifie qu’elle se situe dans votre plage personnelle ; la bande est construite à partir de vos données, jamais d’un seuil de population."
|
||
},
|
||
"BMI": {
|
||
"method": "Poids ÷ taille², classé selon les catégories adultes de l’OMS (maigreur / normal / surpoids / obésité). Un simple ratio de dépistage : il ne distingue pas le muscle de la graisse."
|
||
},
|
||
"FITNESS_AGE": {
|
||
"method": "Votre VO₂max situé par rapport aux percentiles de condition cardiorespiratoire selon l’âge et le sexe, exprimé comme un écart d’âge de forme. Le VO₂max est l’estimation de votre appareil, jamais recalculée ici."
|
||
},
|
||
"VASCULAR_AGE_DELTA": {
|
||
"method": "L’estimation d’âge vasculaire / vitesse de l’onde de pouls de votre appareil comparée à votre âge chronologique, exprimée comme un écart en années. L’estimation vient de l’appareil ; HealthLog ne fait que la reformuler.",
|
||
"caveat": "La propre estimation de votre appareil, simplement reformulée : descriptive, pas une évaluation vasculaire clinique.",
|
||
"description": "Comment l’estimation d’âge vasculaire de votre appareil se situe par rapport à votre âge chronologique."
|
||
},
|
||
"COINCIDENT_DEVIATION": {
|
||
"method": "Un indicateur qui se déclenche lorsque deux de vos constantes ou plus sortent de leur plage typique personnelle le même jour. Chaque bande est la médiane robuste ± k·MAD de votre propre historique : elle s’adapte à vous et non à un seuil de population.",
|
||
"caveat": "Un indicateur issu de vos propres références : descriptif, ni un diagnostic ni une alerte clinique."
|
||
},
|
||
"RECOVERY_SCORE": {
|
||
"method": "Un indice de récupération nocturne de 0 à 100 combinant votre VFC, votre fréquence cardiaque au repos et votre sommeil par rapport à votre référence. Plus élevé signifie mieux récupéré. Calculé une fois par nuit et seulement relu ici, jamais recalculé à la volée.",
|
||
"caveat": "Un indicateur de bien-être descriptif, pas une mesure de récupération clinique ou de niveau d’entraînement.",
|
||
"description": "Un indice de récupération nocturne à partir de votre VFC, fréquence au repos et sommeil."
|
||
},
|
||
"STRESS_SCORE": {
|
||
"method": "Un indice de stress nocturne de 0 à 100 à partir de la forme de votre VFC au cours de la journée par rapport à votre référence. Plus élevé signifie une charge physiologique plus forte.",
|
||
"caveat": "Un indicateur dérivé de la VFC, PAS une mesure de stress par EDA / activité électrodermale : votre montre n’a pas de capteur EDA. Descriptif, non clinique.",
|
||
"description": "Un indice de stress nocturne à partir de la forme de votre VFC sur la journée."
|
||
},
|
||
"STRAIN_SCORE": {
|
||
"method": "Un indice d’effort nocturne de 0 à 100 à partir de votre charge d’activité pondérée par la fréquence cardiaque (un modèle d’impulsion d’entraînement de type TRIMP). Plus élevé signifie une journée plus exigeante.",
|
||
"anchorPersonal": "Calé sur votre propre charge récente des jours d’entraînement — évalué par rapport à votre effort habituel, de sorte qu’une journée vraiment difficile pour vous ressort élevée.",
|
||
"anchorPopulation": "Évalué par rapport à une référence générale pendant que vous constituez votre historique d’entraînement ; dès que vous en avez assez, le calcul passe à votre propre effort habituel.",
|
||
"caveat": "Un indicateur descriptif de charge d’activité, pas une mesure de charge clinique ou de niveau d’entraînement.",
|
||
"description": "Un indice de charge d’activité nocturne à partir de votre effort pondéré par la fréquence cardiaque, relatif à votre effort habituel."
|
||
},
|
||
"WRIST_TEMPERATURE_BASELINE": {
|
||
"method": "Votre température nocturne typique au poignet est la médiane de vos relevés nocturnes sur la période, ± une dispersion robuste (écart absolu médian, mis à l’échelle). Elle suit VOS relevés — la nuit dernière est affichée comme un écart par rapport à votre propre référence, pas à une norme de population.",
|
||
"caveat": "Une simple bande d’écart personnel — descriptive, ni un signe de maladie, de fièvre ou de phase du cycle. À vous de l’interpréter."
|
||
},
|
||
"STAIR_ASCENT_SPEED_BASELINE": {
|
||
"method": "Votre allure typique en montant les escaliers est la médiane de vos valeurs quotidiennes sur la période, ± une dispersion robuste (écart absolu médian, mis à l’échelle). La bande est construite à partir de vos données — il n’existe pas de seuil de population pour l’allure dans les escaliers, car elle dépend de la géométrie des marches et de la longueur des jambes.",
|
||
"caveat": "Une bande personnelle de tendance de mobilité — descriptive, ni une évaluation de fragilité ni de risque de chute."
|
||
},
|
||
"STAIR_DESCENT_SPEED_BASELINE": {
|
||
"method": "Votre allure typique en descendant les escaliers est la médiane de vos valeurs quotidiennes sur la période, ± une dispersion robuste (écart absolu médian, mis à l’échelle). La bande est construite à partir de vos données — il n’existe pas de seuil de population pour l’allure dans les escaliers, car elle dépend de la géométrie des marches et de la longueur des jambes.",
|
||
"caveat": "Une bande personnelle de tendance de mobilité — descriptive, ni une évaluation de fragilité ni de risque de chute."
|
||
},
|
||
"SIX_MINUTE_WALK_BAND": {
|
||
"method": "La distance de marche de six minutes ESTIMÉE par votre appareil, située par rapport à la référence d’Enright et Sherrill pour votre âge, votre taille, votre poids et votre sexe, en pourcentage de la valeur prédite. La distance est l’estimation de l’appareil — jamais recalculée ici. Sans votre âge, taille, poids et sexe, le pourcentage est masqué et seules la distance et la tendance sont affichées.",
|
||
"caveat": "Une estimation reformulée par rapport à une référence publiée — un indicateur de capacité fonctionnelle, ni un test de marche de six minutes clinique ni un diagnostic. La référence a été établie pour les âges de 40 à 80 ans ; en dehors de cette plage, la valeur prédite est une extrapolation."
|
||
},
|
||
"TRAJECTORY": {
|
||
"method": "Une droite des moindres carrés ajustée à vos valeurs journalières récentes et projetée sur un court horizon, avec l’intervalle de prédiction classique qui s’élargit à mesure qu’il s’éloigne. Calculée uniquement lorsque la tendance récente est suffisamment marquée et que votre historique est assez long et récent ; sinon aucune ligne n’est tracée.",
|
||
"caveat": "Une projection de votre propre tendance récente — ni une prédiction, ni un objectif, ni un pronostic clinique. Elle ne tient que si le schéma récent se poursuit ; la bande ombrée montre la vitesse à laquelle cette certitude s’estompe."
|
||
}
|
||
},
|
||
"scores": {
|
||
"sectionTitle": "Tes indicateurs de santé",
|
||
"loadError": "Impossible de charger vos scores de bien-être pour le moment.",
|
||
"recovery": "Récupération",
|
||
"stress": "Stress",
|
||
"strain": "Effort"
|
||
},
|
||
"coincident": {
|
||
"label": "Plusieurs constantes hors référence",
|
||
"summary": "Aujourd’hui, {count} de vos constantes sont sorties de leur plage personnelle.",
|
||
"vitals": "Hors plage : {list}",
|
||
"cardTitle": "Signaux du jour",
|
||
"allClear": "Aujourd’hui, toutes vos constantes sont dans leur plage personnelle.",
|
||
"allClearMeta": "{count} de vos constantes vérifiées par rapport à votre propre plage habituelle.",
|
||
"watch": "Aujourd’hui, une constante est hors de sa plage habituelle.",
|
||
"watchVital": "Hors plage : {vital}. Souvent ponctuel — à surveiller ces prochains jours.",
|
||
"firedHeadline": "Aujourd’hui, {count} de vos constantes sont hors de leur plage personnelle.",
|
||
"factors": "Facteurs possibles — jamais une cause : un entraînement intense, un mauvais sommeil, l’alcool, l’altitude, le stress ou une maladie. C’est un repère issu de vos propres références, pas un diagnostic.",
|
||
"building": "Construction de vos références personnelles — enregistrez quelques jours de plus et cela apparaîtra.",
|
||
"illnessExplained": "Ces écarts reflètent probablement l’affection que vous avez consignée."
|
||
},
|
||
"trajectory": {
|
||
"cardTitle": "Projection à court terme",
|
||
"headline": "Si ce schéma se poursuit — les {days} prochains jours",
|
||
"range": "Projeté autour de {low}–{high} {unit} dans {days} jours.",
|
||
"caveat": "Une projection de votre propre tendance récente, pas une prédiction. La bande ombrée s’élargit pour montrer la vitesse à laquelle l’incertitude augmente.",
|
||
"insufficient": "Pas encore de tendance assez nette pour projeter — continuez à enregistrer et une projection apparaîtra dès que le schéma récent sera suffisamment marqué.",
|
||
"daysNeeded": "Encore environ {count} jours d’enregistrement nécessaires avant qu’une projection puisse apparaître."
|
||
}
|
||
},
|
||
"cardioFitness": {
|
||
"title": "Condition physique",
|
||
"description": "Votre VO₂ max au fil du temps — la principale mesure de la forme aérobie.",
|
||
"chartTitle": "VO₂ max (mL/(kg·min))",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de condition physique",
|
||
"description": "Les valeurs de VO₂ max apparaissent ici dès qu'Apple Santé les synchronise depuis vos entraînements."
|
||
}
|
||
},
|
||
"navCardioFitness": "Condition physique",
|
||
"cardioRecovery": {
|
||
"title": "Récupération cardiaque",
|
||
"description": "De combien votre fréquence cardiaque baisse une minute après l'effort maximal.",
|
||
"chartTitle": "Récupération cardiaque (bpm)",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de récupération cardiaque",
|
||
"description": "Les valeurs de récupération cardiaque apparaissent ici dès qu'Apple Santé les synchronise depuis un entraînement."
|
||
}
|
||
},
|
||
"navCardioRecovery": "Récupération cardiaque",
|
||
"wristTemperature": {
|
||
"title": "Température du poignet",
|
||
"description": "Votre température du poignet pendant la nuit, comparée à votre valeur de référence.",
|
||
"chartTitle": "Température du poignet (°C)",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de température du poignet",
|
||
"description": "Les valeurs apparaissent ici dès qu'Apple Santé synchronise le port nocturne."
|
||
}
|
||
},
|
||
"navWristTemperature": "Temp. poignet",
|
||
"falls": {
|
||
"title": "Chutes",
|
||
"description": "Chutes lourdes détectées par votre Apple Watch, comptées par jour.",
|
||
"chartTitle": "Chutes par jour",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de chutes",
|
||
"description": "Les chutes détectées apparaissent ici dès qu'Apple Santé se synchronise. L'objectif est zéro chute."
|
||
}
|
||
},
|
||
"navFalls": "Chutes",
|
||
"sixMinuteWalk": {
|
||
"title": "Marche de 6 minutes",
|
||
"description": "L'estimation d'Apple de la distance que vous pourriez parcourir en six minutes.",
|
||
"chartTitle": "Distance sur 6 minutes (m)",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de marche de 6 minutes",
|
||
"description": "Les estimations apparaissent ici dès qu'Apple Santé se synchronise."
|
||
}
|
||
},
|
||
"navSixMinuteWalk": "Marche 6 min",
|
||
"stairAscentSpeed": {
|
||
"title": "Vitesse en montée d'escaliers",
|
||
"description": "À quelle vitesse vous montez les escaliers, mesurée par votre iPhone ou Watch.",
|
||
"chartTitle": "Vitesse de montée (m/s)",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de montée d'escaliers",
|
||
"description": "Les valeurs apparaissent ici dès qu'Apple Santé se synchronise."
|
||
}
|
||
},
|
||
"navStairAscentSpeed": "Montée escaliers",
|
||
"stairDescentSpeed": {
|
||
"title": "Vitesse en descente d'escaliers",
|
||
"description": "À quelle vitesse vous descendez les escaliers, mesurée par votre iPhone ou Watch.",
|
||
"chartTitle": "Vitesse de descente (m/s)",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de descente d'escaliers",
|
||
"description": "Les valeurs apparaissent ici dès qu'Apple Santé se synchronise."
|
||
}
|
||
},
|
||
"navStairDescentSpeed": "Descente escaliers",
|
||
"breathingDisturbances": {
|
||
"title": "Troubles respiratoires",
|
||
"description": "À quelle fréquence votre respiration a été perturbée pendant le sommeil.",
|
||
"chartTitle": "Troubles respiratoires du sommeil",
|
||
"emptyState": {
|
||
"title": "Pas encore de données de troubles respiratoires",
|
||
"description": "Les valeurs apparaissent ici dès qu'Apple Santé les synchronise depuis une Apple Watch compatible."
|
||
}
|
||
},
|
||
"navBreathingDisturbances": "Respiration",
|
||
"rhythmEvents": {
|
||
"sectionTitle": "Notifications de santé de l’appareil",
|
||
"sectionIntro": "Notifications que votre montre a envoyées d’elle-même. HealthLog se contente de les afficher — il ne les détecte, ne les confirme ni ne les interprète.",
|
||
"loadError": "Impossible de charger les notifications de votre appareil.",
|
||
"disclaimer": "Ce sont des alertes que votre appareil a produites avec sa propre détection intégrée. Elles sont affichées ici uniquement à titre informatif. Il ne s’agit pas d’une évaluation médicale de HealthLog, et HealthLog ne pose aucun diagnostic. Si une notification vous inquiète, parlez-en à votre médecin.",
|
||
"event": {
|
||
"irregularRhythm": "Notification de rythme irrégulier",
|
||
"highHeartRate": "Notification de fréquence cardiaque élevée",
|
||
"lowHeartRate": "Notification de fréquence cardiaque basse",
|
||
"walkingSteadiness": "Alerte de stabilité à la marche",
|
||
"breathingDisturbance": "Trouble respiratoire pendant le sommeil"
|
||
},
|
||
"verdict": {
|
||
"irregular": "Votre appareil a détecté un possible rythme irrégulier.",
|
||
"notDetected": "Votre appareil n’a pas détecté de rythme irrégulier.",
|
||
"inconclusive": "Votre appareil n’a pas pu effectuer de mesure.",
|
||
"low": "Votre appareil a détecté une faible stabilité à la marche.",
|
||
"veryLow": "Votre appareil a détecté une très faible stabilité à la marche.",
|
||
"fired": "Votre appareil a signalé cet événement."
|
||
}
|
||
},
|
||
"trendDescriptor": {
|
||
"rising": "En hausse sur 30 jours ({delta}{unit}).",
|
||
"falling": "En baisse sur 30 jours ({delta}{unit}).",
|
||
"stable": "Stable sur les 30 derniers jours.",
|
||
"moodImproved": "Humeur en légère hausse sur 30 jours.",
|
||
"moodDeclined": "Humeur en légère baisse sur 30 jours.",
|
||
"moodStable": "Humeur stable sur les 30 derniers jours."
|
||
},
|
||
"target": {
|
||
"heading": "Objectif"
|
||
},
|
||
"settings": {
|
||
"overviewTitle": "Organiser la vue d'ensemble",
|
||
"overviewDescription": "Affichez ou masquez des sections et définissez leur ordre sur la vue d'ensemble des Analyses."
|
||
},
|
||
"pillOrder": {
|
||
"title": "Trier les onglets de navigation",
|
||
"description": "Faites glisser les onglets dans l'ordre souhaité et affichez-les ou masquez-les via l'icône en forme d'œil. Les pages de détail masquées disparaissent aussi de la navigation supérieure.",
|
||
"dragHandle": "Réorganiser",
|
||
"saveSuccess": "Ordre des onglets enregistré.",
|
||
"saveError": "L'enregistrement de l'ordre des onglets a échoué.",
|
||
"save": "Enregistrer",
|
||
"empty": "Aucun onglet de navigation disponible pour le moment."
|
||
},
|
||
"customize": "Personnaliser les Analyses",
|
||
"regenerateRateLimited": "Limite d'actualisation atteinte — réessayez plus tard.",
|
||
"regenerateUnavailable": "Aucune nouvelle analyse reçue — réessayez plus tard.",
|
||
"regenerateError": "Actualisation en cours — réessayez dans un instant.",
|
||
"deviceScore": {
|
||
"learning": "Nous apprenons encore votre référence : quelques nuits de plus compléteront la tendance.",
|
||
"average": "Moyenne sur 30 jours {value}",
|
||
"unitScore": "points",
|
||
"unitMinutes": "min",
|
||
"unitBpm": "bpm",
|
||
"unitKj": "kJ"
|
||
},
|
||
"sleepQuality": {
|
||
"title": "Qualité du sommeil",
|
||
"subtitle": "Scores nocturnes de votre wearable",
|
||
"assessment": {
|
||
"metric": {
|
||
"SLEEP_SCORE": "votre score de sommeil global",
|
||
"SLEEP_EFFICIENCY": "l’efficacité du sommeil",
|
||
"SLEEP_PERFORMANCE": "la performance de sommeil",
|
||
"SLEEP_CONSISTENCY": "la régularité du sommeil"
|
||
},
|
||
"grade": {
|
||
"excellent": "excellente",
|
||
"good": "solide",
|
||
"fair": "correcte",
|
||
"low": "plutôt faible"
|
||
},
|
||
"clause": "Sur les 30 dernières nuits, {metric} est {grade}, à {value}.",
|
||
"closing": {
|
||
"excellent": "Gardez la routine qui vous mène jusque-là.",
|
||
"good": "Des heures de coucher et de lever plus stables sont souvent le prochain gain.",
|
||
"fair": "Protéger une fenêtre de sommeil constante est ce qui fait le plus progresser ce point.",
|
||
"low": "Un rituel d’endormissement régulier et une heure de réveil fixe sont les premiers leviers."
|
||
}
|
||
}
|
||
},
|
||
"recovery": {
|
||
"title": "Récupération",
|
||
"description": "À quel point votre corps a récupéré : les signaux de récupération, de charge et d'effort que votre wearable enregistre la nuit.",
|
||
"emptyTitle": "Pas encore de données de récupération",
|
||
"empty": "Pas encore de données de récupération. Connectez un compte WHOOP, Polar ou Oura et ces scores se rempliront dès que votre appareil se synchronise.",
|
||
"block": {
|
||
"ansChargeExplainer": "À quel point votre système nerveux autonome est rechargé pour la journée — une mesure de recharge issue de vos signaux nocturnes de cœur et de respiration.",
|
||
"dayStrainExplainer": "La charge cardiovasculaire de la journée sur l'échelle d'effort de votre appareil. Lisez-la au regard de votre récupération, pas comme un objectif en soi.",
|
||
"workoutStrainExplainer": "À quel point une séance a été exigeante sur la même échelle d'effort — le coût cardiovasculaire de cette séance.",
|
||
"cardioLoadExplainer": "Une estimation de la charge d'entraînement qui suit la charge cardiovasculaire accumulée. Comparez-la à vos propres journées récentes.",
|
||
"averageHeartRateExplainer": "Votre fréquence cardiaque moyenne sur toute la journée ou le cycle, telle que rapportée par votre wearable.",
|
||
"maxHeartRateExplainer": "Votre fréquence cardiaque maximale sur toute la journée ou le cycle, telle que rapportée par votre wearable.",
|
||
"energyExpenditureKjExplainer": "L'énergie que votre corps a dépensée sur la journée, en kilojoules, telle que votre appareil la rapporte nativement."
|
||
}
|
||
},
|
||
"bodyTempDeviation": {
|
||
"title": "Écart de température corporelle",
|
||
"subtitle": "Écart nocturne par rapport à votre référence"
|
||
}
|
||
},
|
||
"thresholds": {
|
||
"defaultLabel": "Par défaut",
|
||
"overrideToggleLabel": "Valeurs personnelles",
|
||
"resetAction": "Restaurer la valeur par défaut",
|
||
"resetAllAction": "Tout restaurer aux valeurs par défaut",
|
||
"minLabel": "Min",
|
||
"maxLabel": "Max",
|
||
"unitSuffix": "({unit})",
|
||
"outOfBoundsHint": "Plage autorisée : {min}–{max} {unit}",
|
||
"overrideWarning": "Des valeurs en dehors des recommandations peuvent conduire à des objectifs malsains. Ne personnalise qu’après avis médical.",
|
||
"saveSuccess": "Objectifs mis à jour",
|
||
"saveError": "Impossible d’enregistrer les objectifs",
|
||
"resetSuccess": "Valeur par défaut restaurée",
|
||
"sourceOverride": "Valeur personnelle",
|
||
"metricWeight": "Poids",
|
||
"metricBpSys": "Tension artérielle (systolique)",
|
||
"metricBpDia": "Tension artérielle (diastolique)",
|
||
"metricPulse": "Pouls au repos",
|
||
"metricBodyFat": "Masse grasse",
|
||
"metricSleep": "Durée du sommeil",
|
||
"metricSteps": "Pas/jour",
|
||
"metricGlucoseFasting": "Glycémie — à jeun",
|
||
"metricGlucosePostprandial": "Glycémie — postprandiale",
|
||
"metricGlucoseRandom": "Glycémie — indifférente",
|
||
"metricGlucoseBedtime": "Glycémie — avant le coucher",
|
||
"metricBodyWater": "Eau corporelle",
|
||
"metricBoneMass": "Masse osseuse",
|
||
"metricOxygenSaturation": "Saturation en oxygène (SpO₂)",
|
||
"unsetExplanation": "Pas de valeur personnelle — la valeur par défaut calculée s’applique."
|
||
},
|
||
"onboarding": {
|
||
"errorGeneric": "Une erreur est survenue à la fin de la configuration. Réessaie.",
|
||
"tour": {
|
||
"stepOf": "Étape {current} sur {total}",
|
||
"next": "Suivant",
|
||
"back": "Précédent",
|
||
"skip": "Passer la visite",
|
||
"done": "Compris",
|
||
"steps": {
|
||
"dashboardOverview": {
|
||
"title": "Votre tableau de bord",
|
||
"body": "Le tableau de bord rassemble tous les modules d’un coup d’œil. Appuyez longuement sur une tuile pour la réorganiser ou la masquer (Réglages → Disposition du tableau de bord). Une tuile ne vaut que par les données derrière elle — les modules suivants les remplissent."
|
||
},
|
||
"quickAdd": {
|
||
"title": "Saisi en quelques secondes",
|
||
"body": "Avec « + Ajouter », saisissez n’importe quelle mesure en quelques secondes — poids, tension, pouls, glycémie. Atout caché : antidater les valeurs oubliées. Tout ce que vous saisissez ici alimente les tendances, le score santé et les analyses IA."
|
||
},
|
||
"measurements": {
|
||
"title": "Mesures et plages cibles",
|
||
"body": "Mesures affiche l’historique et la plage cible de chaque métrique. Astuce cachée : définir une plage par valeur pour que les écarts ressortent en couleur. Ces séries sont la base des corrélations du Coach et du rapport médical."
|
||
},
|
||
"medications": {
|
||
"title": "Médicaments et prises",
|
||
"body": "Médicaments gère plannings, prises, stock et titration. Caché : plans récurrents (RRULE/glissants) et alertes de stock bas. Votre taux de prise alimente le pilier d’observance du tableau de bord et le contexte de l’IA."
|
||
},
|
||
"labs": {
|
||
"title": "Valeurs de laboratoire",
|
||
"body": "Laboratoire recense les biomarqueurs avec plages de référence — hémogramme, cholestérol, HbA1c. Atout : import et export FHIR. Les valeurs hors plage réapparaissent comme preuves dans les analyses et le rapport médical."
|
||
},
|
||
"illness": {
|
||
"title": "Journal des maladies",
|
||
"body": "Le journal des maladies consigne les épisodes aigus et les diagnostics chroniques avec leurs poussées. Caché : corréler un épisode à vos mesures et le Mode repos qui suspend les rappels. Le Coach comprend ainsi pourquoi les valeurs dérivent un temps."
|
||
},
|
||
"vorsorge": {
|
||
"title": "Prévention",
|
||
"body": "Prévention vous rappelle examens et vaccins selon leur propre intervalle. Astuce : « Fait » peut créer directement une mesure ou un résultat de laboratoire. Les échéances apparaissent en rappels et dans le rapport médical."
|
||
},
|
||
"cycle": {
|
||
"title": "Cycle",
|
||
"body": "Le suivi du cycle consigne phases et symptômes. Caché : comparer les symptômes à l’humeur et au sommeil. Le cycle donne du contexte aux variations qui paraîtraient autrement inexpliquées."
|
||
},
|
||
"mood": {
|
||
"title": "Humeur",
|
||
"body": "Humeur saisit votre ressenti et des tags en deux secondes. Atout : vos propres tags. Les tendances d’humeur se corrèlent au sommeil, aux médicaments et au cycle — le Coach repère les schémas."
|
||
},
|
||
"insights": {
|
||
"title": "Analyses",
|
||
"body": "Analyses, c’est le cœur : une analyse dynamique et fondée sur des preuves plutôt que des conseils génériques — chaque affirmation pointe vos données réelles. Caché : la disposition est personnalisable. Analyses réunit tout ce que les modules ci-dessus fournissent."
|
||
},
|
||
"coach": {
|
||
"title": "Coach",
|
||
"body": "Le Coach répond à vos questions sur vos données en dialogue, en utilisant antécédents, médicaments et résultats comme contexte. Vous choisissez le fournisseur IA (votre clé ou local). Il ne recalcule rien — il lit les mêmes chiffres que le tableau de bord."
|
||
},
|
||
"integrations": {
|
||
"title": "Intégrations",
|
||
"body": "Les intégrations synchronisent Withings, WHOOP, Polar, Oura et Apple Santé automatiquement. Poids, sommeil et récupération se remplissent sans saisie, et alimentent à leur tour les analyses et le Coach."
|
||
},
|
||
"export": {
|
||
"title": "Rapport médical",
|
||
"body": "Le rapport médical regroupe mesures, médicaments, valeurs de laboratoire et prévention en PDF ou FHIR pour le rendez-vous. Tous les modules convergent ici — un rapport complet ne vient que de données bien tenues."
|
||
},
|
||
"achievements": {
|
||
"title": "Réussites",
|
||
"body": "Les réussites récompensent la régularité — séries et jalons. Une petite boucle de motivation qui aide à tenir bon."
|
||
},
|
||
"wrapUp": {
|
||
"title": "C’est la fin de la visite",
|
||
"body": "Vous pouvez revoir chaque module séparément à tout moment (« Afficher cette visite » sur chaque page) ou relancer la visite complète dans Réglages → Avancé."
|
||
}
|
||
}
|
||
},
|
||
"shell": {
|
||
"back": "Retour",
|
||
"skip": "Ignorer",
|
||
"next": "Continuer",
|
||
"step1of4": "Étape 1 sur 4",
|
||
"step2of4": "Étape 2 sur 4",
|
||
"step3of4": "Étape 3 sur 4",
|
||
"step4of4": "Étape 4 sur 4"
|
||
},
|
||
"goals": {
|
||
"title": "Que souhaitez-vous suivre ?",
|
||
"body": "Sélectionnez les domaines qui comptent pour vous : nous les afficherons en premier sur votre tableau de bord, et ils vous aident à décider quoi configurer ensuite.",
|
||
"helpHint": "Un à trois axes prioritaires fonctionnent généralement le mieux, mais vous pourrez en ajouter plus tard.",
|
||
"options": {
|
||
"weightManagement": "Gestion du poids",
|
||
"bpTracking": "Tension artérielle",
|
||
"glucoseTracking": "Glycémie",
|
||
"sleepImprovement": "Mieux dormir",
|
||
"medicationCompliance": "Médicaments",
|
||
"generalWellness": "Bien-être général"
|
||
}
|
||
},
|
||
"source": {
|
||
"title": "Connecter une source",
|
||
"body": "Importez les mesures automatiquement ou conservez la saisie manuelle. Rien n'est configuré à votre place : chaque carte indique simplement où la connecter.",
|
||
"recommended": "Recommandé",
|
||
"manual": {
|
||
"title": "Saisie manuelle",
|
||
"body": "Enregistrez vos mesures vous-même, quand cela vous convient. Fonctionne sur tout appareil, aucun compte tiers requis."
|
||
},
|
||
"withings": {
|
||
"title": "Withings",
|
||
"body": "Balances, tensiomètres et trackers Withings se synchronisent automatiquement.",
|
||
"cta": "Connecter Withings"
|
||
},
|
||
"more": {
|
||
"title": "Autres sources",
|
||
"body": "Connectez l'une d'elles dans les Réglages quand vous le souhaitez.",
|
||
"appleHealth": "Apple Health",
|
||
"whoop": "WHOOP",
|
||
"oura": "Oura",
|
||
"polar": "Polar",
|
||
"nightscout": "Nightscout",
|
||
"fitbit": "Fitbit"
|
||
},
|
||
"import": "Importer un historique existant"
|
||
},
|
||
"baseline": {
|
||
"title": "Quelques informations",
|
||
"body": "Quatre champs facultatifs affinent vos seuils cibles, l'IMC et les rappels. Tout reste modifiable plus tard dans les paramètres.",
|
||
"displayNameLabel": "Nom d'affichage",
|
||
"displayNamePlaceholder": "Comment HealthLog doit-il vous appeler ?",
|
||
"displayNameHint": "Apparaît dans le message d'accueil du tableau de bord et dans les rapports.",
|
||
"heightLabel": "Taille (cm)",
|
||
"genderLabel": "Genre",
|
||
"genderNone": "Préfère ne pas le préciser",
|
||
"genderMale": "Homme",
|
||
"genderFemale": "Femme",
|
||
"dateOfBirthLabel": "Date de naissance",
|
||
"dateOfBirthHint": "Utilisée uniquement pour les analyses qui tiennent compte de l'âge.",
|
||
"saveCta": "Enregistrer et continuer"
|
||
},
|
||
"done": {
|
||
"title": "Tout est prêt",
|
||
"body": "Bienvenue à bord. Votre tableau de bord vous attend.",
|
||
"returnCta": "Ouvrir le tableau de bord",
|
||
"learning": "Certaines analyses — glycémie, rythme de sommeil, tendances de tension, cycle — s'affinent au cours de la première semaine ou deux à mesure que vos données s'accumulent. Des tuiles vides signifient simplement que nous apprenons encore votre référence.",
|
||
"connectCta": "Connecter un appareil",
|
||
"logCta": "Enregistrez votre première mesure",
|
||
"importCta": "Importer un historique existant",
|
||
"aiTitle": "Activer les Insights IA (facultatif)",
|
||
"aiBody": "Le coach, le briefing quotidien et les évaluations traduisent tes mesures en langage clair. Pour cela, connecte ta propre clé IA (OpenAI, Anthropic) ou un modèle local — tes données restent chez toi.",
|
||
"aiCta": "Connecter un fournisseur d'IA"
|
||
},
|
||
"welcomeBack": {
|
||
"title": "Bon retour",
|
||
"body": "Vous avez déjà terminé la configuration. Pour modifier un élément, ouvrez les paramètres — tout reste éditable.",
|
||
"cta": "Ouvrir le tableau de bord"
|
||
},
|
||
"disclaimer": {
|
||
"acknowledge": "Je comprends : HealthLog est un outil de suivi privé, pas une évaluation clinique ni un diagnostic. En cas d'inquiétude, je consulte mon médecin, pas cette application.",
|
||
"learnMore": "En savoir plus"
|
||
},
|
||
"welcome": {
|
||
"title": "Bienvenue dans HealthLog",
|
||
"carouselLabel": "Carrousel de bienvenue",
|
||
"slideOf": "Diapositive {current} sur {total}",
|
||
"prevSlide": "Diapositive précédente",
|
||
"nextSlide": "Diapositive suivante",
|
||
"gotoSlide": "Aller à la diapositive {index}",
|
||
"cta": "Commencer",
|
||
"slide1": {
|
||
"title": "Notez chaque signal",
|
||
"body": "Poids, tension, glycémie, sommeil, humeur — un seul journal qui vous appartient."
|
||
},
|
||
"slide2": {
|
||
"title": "Connectez vos sources",
|
||
"body": "Synchronisez avec Apple Health et Withings, ou ajoutez vos mesures à la main. Vos données restent sur votre serveur."
|
||
},
|
||
"slide3": {
|
||
"title": "Repérez les tendances",
|
||
"body": "Résumés quotidiens, graphiques de tendances et un coach qui met en avant ce qui a changé — le tout sur votre appareil."
|
||
}
|
||
},
|
||
"anamnesis": {
|
||
"title": "À propos de votre santé (facultatif)",
|
||
"subtitle": "Un peu de contexte pour que HealthLog interprète vos valeurs plus justement.",
|
||
"intro": "Partagez autant ou aussi peu que vous le souhaitez : chaque champ est facultatif et modifiable à tout moment dans les Réglages.",
|
||
"conditionsLabel": "Affections en cours",
|
||
"conditionsPlaceholder": "p. ex. hypertension, diabète de type 2",
|
||
"conditionsHint": "Aide HealthLog à replacer vos mesures dans leur contexte plutôt que de signaler l'attendu.",
|
||
"allergiesLabel": "Allergies ou intolérances",
|
||
"allergiesPlaceholder": "p. ex. pénicilline, lactose",
|
||
"privacyNote": "Stocké chiffré et utilisé uniquement pour un meilleur contexte. Nous ne demandons pas vos médicaments ici — ajoutez-les quand vous voulez depuis la page Médicaments."
|
||
}
|
||
},
|
||
"gettingStarted": {
|
||
"title": "Premiers pas",
|
||
"subtitle": "Petites victoires pour tirer le meilleur de HealthLog.",
|
||
"progress": "{done} sur {total} faits",
|
||
"dismissAll": "Masquer la liste",
|
||
"dismissTooltip": "Masquer ce point",
|
||
"items": {
|
||
"profileTitle": "Configurer le profil",
|
||
"profileDescription": "Taille, date de naissance et sexe débloquent des objectifs personnalisés.",
|
||
"profileCta": "Ouvrir le profil",
|
||
"measurementTitle": "Saisir la première mesure",
|
||
"measurementDescription": "Une mesure suffit à activer la tuile — la tendance se dessine à partir de la 5ᵉ mesure.",
|
||
"measurementCta": "Ajouter une mesure",
|
||
"medicationTitle": "Ajouter un médicament",
|
||
"medicationDescription": "Suis l’observance et reçois des rappels au moment où tu en as besoin.",
|
||
"medicationCta": "Ajouter un médicament",
|
||
"dataSourceTitle": "Connecter une source de données (facultatif)",
|
||
"dataSourceDescription": "Synchronisez poids, tension, sommeil et plus depuis Withings, WHOOP, Oura, Polar, Nightscout, Fitbit ou Apple Health.",
|
||
"dataSourceCta": "Connecter",
|
||
"notificationsTitle": "Configurer les notifications",
|
||
"notificationsDescription": "Choisis comment HealthLog te prévient — Telegram, ntfy ou Web Push.",
|
||
"notificationsCta": "Ouvrir les notifications"
|
||
}
|
||
},
|
||
"trendHints": {
|
||
"title": "Première tendance après 5 mesures",
|
||
"remainingOne": "Encore 1 mesure avant la tendance.",
|
||
"remainingMany": "Encore {count} mesures avant la tendance."
|
||
},
|
||
"settings": {
|
||
"researchMode": {
|
||
"sectionTitle": "Mode Recherche",
|
||
"subtitle": "Affichage optionnel d'une courbe de niveau estimé de médicament GLP-1, dérivée de la pharmacocinétique de population publiée par l'EMA. Lecture seule — jamais une mesure ni un conseil médical.",
|
||
"toggleLabel": "Afficher la courbe estimée du niveau de médicament",
|
||
"disabledStatus": "Désactivé. La courbe est masquée.",
|
||
"enabledStaleStatus": "Le disclaimer a été mis à jour. Reconfirmez ci-dessous pour réafficher la courbe.",
|
||
"acknowledgedOn": "Confirmé le {date}.",
|
||
"rePromptTitle": "Disclaimer mis à jour",
|
||
"rePromptBody": "Le disclaimer du mode Recherche a été mis à jour depuis votre dernière confirmation. Relisez-le et reconfirmez pour garder la courbe visible.",
|
||
"rePromptCta": "Reconfirmer le disclaimer",
|
||
"disableError": "Impossible de désactiver le mode Recherche. Veuillez réessayer."
|
||
},
|
||
"shell": {
|
||
"sectionsNav": "Sections des réglages"
|
||
},
|
||
"sections": {
|
||
"account": {
|
||
"title": "Compte",
|
||
"description": "Profil, mot de passe, clés d’accès et votre visite guidée.",
|
||
"subtitle": "Votre profil, votre identité et vos identifiants."
|
||
},
|
||
"integrations": {
|
||
"title": "Intégrations",
|
||
"description": "Services connectés, canaux de diffusion et priorité des sources au même endroit.",
|
||
"subtitle": "Connectez et gérez vos sources de données et appareils."
|
||
},
|
||
"notifications": {
|
||
"title": "Notifications",
|
||
"description": "Tous les rappels au même endroit — quoi et quand. Les canaux de diffusion se trouvent dans Intégrations.",
|
||
"channelsHint": "Telegram, ntfy, Web Push, Webhook et e-mail se configurent désormais dans",
|
||
"channelsHintLink": "Intégrations → Canaux",
|
||
"inboxLink": "Ouvrir la boîte de réception",
|
||
"subtitle": "Choisissez les rappels que vous recevez."
|
||
},
|
||
"layout": {
|
||
"title": "Tableau de bord",
|
||
"description": "Organisez la disposition du tableau de bord et des analyses.",
|
||
"backToHub": "Retour à Disposition et personnalisation",
|
||
"dashboard": {
|
||
"title": "Tableau de bord",
|
||
"description": "Disposition et ordre des tuiles."
|
||
},
|
||
"insights": {
|
||
"title": "Analyses",
|
||
"description": "Ordre de la vue d'ensemble et des onglets de navigation."
|
||
},
|
||
"subtitle": "Personnalisez l'agencement de votre tableau de bord et de vos insights."
|
||
},
|
||
"dashboard": {
|
||
"title": "Tableau de bord",
|
||
"description": "Disposition et ordre des tuiles.",
|
||
"subtitle": "Organisez les tuiles de votre tableau de bord."
|
||
},
|
||
"thresholds": {
|
||
"title": "Objectifs",
|
||
"description": "Par métrique : votre propre plage cible pour des valeurs saines.",
|
||
"subtitle": "Définissez vos plages cibles personnelles par mesure."
|
||
},
|
||
"sources": {
|
||
"title": "Priorité des sources",
|
||
"description": "Choisissez quelle source prévaut quand plusieurs enregistrent la même métrique le même jour.",
|
||
"integrationsHint": "Connectez ou déconnectez des sources de données sur la page Intégrations.",
|
||
"integrationsHintLink": "Ouvrir les intégrations",
|
||
"cardTitle": "Priorité des sources par métrique",
|
||
"help": "Si plusieurs sources fournissent la même valeur le même jour, la source en tête compte comme canonique. Les autres restent enregistrées pour la piste d’audit.",
|
||
"resetDefaults": "Rétablir les valeurs par défaut",
|
||
"moveUp": "Monter",
|
||
"moveDown": "Descendre",
|
||
"saveSuccess": "Priorité des sources enregistrée.",
|
||
"saveError": "Échec de l’enregistrement de la priorité des sources.",
|
||
"resetSuccess": "Priorité des sources rétablie aux valeurs par défaut.",
|
||
"perMetricToggle": "Réglages par métrique ({count})",
|
||
"perMetricHelp": "Métriques que vous avez personnalisées par rapport à l’ordre par défaut. Utilisez cette liste pour rétablir une métrique donnée à sa valeur par défaut sans toucher aux autres.",
|
||
"perMetricEmpty": "Aucun réglage par métrique — chaque métrique utilise l’ordre global ci-dessus.",
|
||
"resetMetric": "Réinitialiser",
|
||
"deviceTypeToggle": "Priorité par type d’appareil ({count})",
|
||
"deviceTypeHelp": "Au sein d’une source, quel appareil l’emporte. Lorsqu’une Apple Watch et un iPhone enregistrent tous deux les pas, le type d’appareil le mieux classé compte comme la lecture canonique.",
|
||
"deviceTypeDefault": "Ordre par défaut des types d’appareil",
|
||
"resetDeviceTypes": "Réinitialiser les types d’appareil",
|
||
"metrics": {
|
||
"steps": "Pas",
|
||
"activeEnergy": "Énergie active",
|
||
"walkingRunningDistance": "Distance marche + course",
|
||
"flightsClimbed": "Étages gravis",
|
||
"sleep": "Sommeil",
|
||
"weight": "Poids",
|
||
"bloodPressure": "Tension artérielle",
|
||
"pulse": "Pouls",
|
||
"bodyFat": "Masse grasse",
|
||
"bodyTemperature": "Température corporelle",
|
||
"spo2": "Saturation en oxygène",
|
||
"hrv": "Variabilité de la fréquence cardiaque",
|
||
"restingHeartRate": "Fréquence cardiaque au repos",
|
||
"vo2Max": "VO2 max",
|
||
"skinTemperature": "Température cutanée",
|
||
"respiratoryRate": "Fréquence respiratoire",
|
||
"recovery": "Récupération",
|
||
"stress": "Stress"
|
||
},
|
||
"sourceLabels": {
|
||
"WITHINGS": "Withings",
|
||
"APPLE_HEALTH": "Apple Health",
|
||
"MANUAL": "Saisie manuelle",
|
||
"IMPORT": "Importer",
|
||
"WHOOP": "WHOOP",
|
||
"FITBIT": "Fitbit",
|
||
"COMPUTED": "Calculé"
|
||
},
|
||
"deviceLabels": {
|
||
"watch": "Montre",
|
||
"band": "Bracelet",
|
||
"ring": "Bague",
|
||
"phone": "Téléphone",
|
||
"scale": "Balance",
|
||
"other": "Autre",
|
||
"unknown": "Inconnu"
|
||
},
|
||
"subtitle": "Choisissez la source prioritaire en cas de doublon de mesure."
|
||
},
|
||
"ai": {
|
||
"title": "Fournisseur d'IA",
|
||
"description": "Fournisseur, modèle et clé API pour les analyses, ainsi que votre contexte « à propos de moi ».",
|
||
"subtitle": "Choisissez votre fournisseur d'IA et utilisez votre propre clé."
|
||
},
|
||
"api": {
|
||
"title": "API & Tokens",
|
||
"description": "Jetons Bearer pour vos propres scripts et applis — enregistrez des mesures ou des prises de médicaments depuis n’importe où.",
|
||
"subtitle": "Gérez les points d'accès API et les jetons d'accès."
|
||
},
|
||
"advanced": {
|
||
"title": "Avancé",
|
||
"description": "Bouton opt-in du mode Recherche et zone dangereuse pour effacer irrévocablement toutes les données de santé.",
|
||
"subtitle": "Mode recherche, réinitialisation des données et suppression du compte."
|
||
},
|
||
"export": {
|
||
"title": "Export et import",
|
||
"description": "Téléchargez vos données en CSV ou en sauvegarde JSON complète, ou importez depuis Apple Santé, JSON ou CSV. Le compte rendu médical se trouve désormais dans Dossier de santé.",
|
||
"otherOptionsHeading": "Autres options d'export",
|
||
"downloadFailed": "Échec du téléchargement de l'export. Veuillez réessayer.",
|
||
"actions": {
|
||
"download": "Télécharger"
|
||
},
|
||
"filters": {
|
||
"since": "De",
|
||
"until": "Jusqu’au"
|
||
},
|
||
"cards": {
|
||
"measurementsCsv": {
|
||
"title": "Mesures",
|
||
"description": "Poids, tension artérielle, pouls, glycémie et toutes les autres mesures en valeurs séparées par des virgules."
|
||
},
|
||
"medicationsCsv": {
|
||
"title": "Médicaments",
|
||
"description": "Votre liste de médicaments avec posologie, horaires et (en option) l’historique complet des prises.",
|
||
"includeIntake": "Inclure l’historique des prises"
|
||
},
|
||
"moodCsv": {
|
||
"title": "Humeur",
|
||
"description": "Entrées d’humeur quotidiennes avec score, étiquettes et horodatages."
|
||
},
|
||
"fullBackup": {
|
||
"title": "Sauvegarde complète",
|
||
"description": "Un seul fichier JSON contenant tout — même format que la sauvegarde automatique hebdomadaire. Utile pour une restauration personnelle via le téléversement administrateur."
|
||
},
|
||
"cycle": {
|
||
"title": "Cycle",
|
||
"description": "Données de cycle et de santé reproductive sous forme de document FHIR : dernières règles, durée moyenne du cycle et des règles, phase actuelle."
|
||
}
|
||
},
|
||
"import": {
|
||
"heading": "Import",
|
||
"description": "Importez des données dans HealthLog depuis un export Apple Santé ou un fichier JSON. L'import ignore les lignes déjà présentes : le relancer est sans risque.",
|
||
"charCount": "{used} / {max} caractères",
|
||
"appleHealth": {
|
||
"title": "Apple Santé",
|
||
"description": "Importez le fichier export.zip de l'app Santé sur iPhone (Profil → Exporter toutes les données de santé).",
|
||
"dropLabel": "Déposez export.zip ici",
|
||
"dropHint": "ou cliquez pour choisir un fichier",
|
||
"fileInputLabel": "Choisir un fichier export.zip d'Apple Santé",
|
||
"choose": "Choisir un fichier",
|
||
"idempotencyNote": "Réimporter la même archive fusionne les données ; aucun doublon n'est créé. Les grandes archives sont traitées en arrière-plan.",
|
||
"uploading": "Envoi…",
|
||
"uploadFailed": "Échec de l'envoi. Veuillez réessayer.",
|
||
"rateLimited": "Trop d'envois. Patientez un instant et réessayez.",
|
||
"tooLarge": "Ce fichier est trop volumineux (limite 1,5 Go).",
|
||
"failed": "L'import a échoué.",
|
||
"rowsImported": "{count} lignes importées jusqu'ici",
|
||
"doneSummary": "Terminé — {imported} enregistrements sur {read} importés, {skipped} enregistrements cliniques ignorés.",
|
||
"phase": {
|
||
"queued": "En file d'attente…",
|
||
"unpacking": "Décompression de l'archive…",
|
||
"parsing": "Lecture de l'export…",
|
||
"upserting": "Import des enregistrements…"
|
||
}
|
||
},
|
||
"json": {
|
||
"title": "Fichier JSON",
|
||
"description": "Collez du JSON ou importez un fichier .json contenant des mesures et des entrées d'humeur.",
|
||
"pasteLabel": "Coller du JSON",
|
||
"fileInputLabel": "Choisir un fichier JSON à importer",
|
||
"schemaHint": "Deux tableaux : measurements et moodEntries.",
|
||
"docsLink": "Voir le schéma et un exemple.",
|
||
"uploadFile": "Importer un fichier",
|
||
"downloadExample": "Télécharger l'exemple",
|
||
"import": "Importer",
|
||
"invalidJson": "Ce n'est pas du JSON valide. Vérifiez la syntaxe et réessayez.",
|
||
"invalidPayload": "Les données ne correspondent pas au schéma d'import.",
|
||
"rateLimited": "Trop d'imports cette heure-ci (limite 5). Réessayez plus tard.",
|
||
"failed": "L'import a échoué. Veuillez réessayer.",
|
||
"readFailed": "Impossible de lire ce fichier.",
|
||
"resultSummary": "{measurements} mesures et {moods} entrées d'humeur importées, {skipped} ignorées."
|
||
},
|
||
"csv": {
|
||
"title": "Fichier CSV",
|
||
"description": "Importez des mesures depuis un tableur ou l'export d'un appareil. Une ligne par relevé.",
|
||
"pasteLabel": "Coller le CSV",
|
||
"fileInputLabel": "Choisir un fichier CSV à importer",
|
||
"schemaHint": "Colonnes : type, value, unit, measuredAt (avec décalage horaire) et, en option, glucoseContext, notes, externalId.",
|
||
"docsLink": "Voir le schéma des colonnes et un exemple.",
|
||
"uploadFile": "Téléverser un fichier",
|
||
"downloadExample": "Télécharger un exemple",
|
||
"preview": "Aperçu",
|
||
"import": "Importer",
|
||
"empty": "Ajoutez au moins une ligne CSV avant d'importer.",
|
||
"rateLimited": "Trop d'imports cette heure (limite 5). Veuillez réessayer plus tard.",
|
||
"tooLarge": "Ce fichier est trop volumineux (limite 16 Mo).",
|
||
"invalidPayload": "Le CSV n'a pas pu être analysé. Vérifiez la ligne d'en-tête et réessayez.",
|
||
"failed": "L'import a échoué. Veuillez réessayer.",
|
||
"readFailed": "Impossible de lire ce fichier.",
|
||
"previewSummary": "Aperçu : {inserted} seraient importées, {skipped} ignorées.",
|
||
"resultSummary": "{inserted} nouvelles importées et {updated} mises à jour, {skipped} ignorées.",
|
||
"rowError": "Ligne {line} : {reason}"
|
||
}
|
||
},
|
||
"subtitle": "Exportez vos données ou importez depuis une sauvegarde."
|
||
},
|
||
"about": {
|
||
"title": "À propos de cette app",
|
||
"description": "Version, licence, liens.",
|
||
"subtitle": "Version, licence et liens du projet."
|
||
},
|
||
"sharing": {
|
||
"title": "Partage",
|
||
"description": "Créez un lien en lecture seule pour partager votre dossier de santé avec un professionnel de santé.",
|
||
"subtitle": "Partagez un accès en lecture seule à vos données."
|
||
},
|
||
"insights": {
|
||
"title": "Analyses",
|
||
"description": "Ordre de la vue d'ensemble et des onglets de navigation.",
|
||
"subtitle": "Organisez les sections d'aperçu et l'ordre des pastilles."
|
||
},
|
||
"medications": {
|
||
"title": "Médicaments",
|
||
"description": "Vue liste, ordre et sites d’injection de vos médicaments.",
|
||
"subtitle": "Gérez l'affichage et l'ordre de votre liste de médicaments."
|
||
},
|
||
"mood": {
|
||
"title": "Étiquettes d’humeur",
|
||
"description": "Groupes, étiquettes et étiquettes archivées du sélecteur d’humeur.",
|
||
"subtitle": "Organisez vos tags d'humeur, groupes et ordre du sélecteur."
|
||
},
|
||
"labs": {
|
||
"title": "Analyses",
|
||
"description": "Affichage, tri et biomarqueurs de vos analyses.",
|
||
"subtitle": "Gérez l’affichage, le tri et les biomarqueurs."
|
||
},
|
||
"illness": {
|
||
"title": "Journal de maladie",
|
||
"description": "Affichage et ordre de vos épisodes de maladie.",
|
||
"subtitle": "Gérez l’affichage et l’ordre des épisodes."
|
||
},
|
||
"vorsorge": {
|
||
"title": "Prévention",
|
||
"description": "Affichage, ordre et rappels de prévention individuels.",
|
||
"subtitle": "Gérez l’affichage, l’ordre et les rappels individuels."
|
||
},
|
||
"modules": {
|
||
"title": "Modules",
|
||
"saved": "Enregistré.",
|
||
"error": "Échec de l'enregistrement. Veuillez réessayer.",
|
||
"toggleable": {
|
||
"title": "Ce que vous suivez",
|
||
"description": "Domaines optionnels. Les modules désactivés disparaissent de la navigation, des tuiles et des analyses ; vos données sont conservées."
|
||
},
|
||
"manageIn": "Gérer dans {section}",
|
||
"operatorDisabled": "Désactivé sur tout le serveur",
|
||
"subtitle": "Choisissez les domaines de suivi affichés par HealthLog."
|
||
},
|
||
"gesundheitsakte": {
|
||
"title": "Dossier médical",
|
||
"description": "Exportez votre dossier médical complet au format PDF, FHIR R4 ou en paquet ZIP combiné.",
|
||
"subtitle": "Exportez un dossier de santé complet, prêt pour le médecin."
|
||
},
|
||
"coach": {
|
||
"title": "Coach",
|
||
"description": "Activez le Coach, le ton et la portée, les souvenirs enregistrés.",
|
||
"subtitle": "Réglez le Coach, ses suggestions proactives et sa mémoire."
|
||
},
|
||
"channels": {
|
||
"title": "Canaux",
|
||
"description": "Distribution via Telegram, ntfy, Web Push, Webhook et e-mail.",
|
||
"subtitle": "Où sont envoyés les rappels et alertes."
|
||
}
|
||
},
|
||
"profile": "Profil",
|
||
"language": "Langue",
|
||
"languageDescription": "Choisissez la langue d’affichage de l’application.",
|
||
"timeFormat": {
|
||
"title": "Format horaire",
|
||
"description": "Détermine si les heures s’affichent au format 24 heures ou 12 heures (AM/PM).",
|
||
"auto": "Automatique (langue)",
|
||
"h24": "24 heures",
|
||
"h12": "12 heures (AM/PM)",
|
||
"saved": "Format horaire enregistré.",
|
||
"saveError": "Échec de l’enregistrement du format horaire."
|
||
},
|
||
"username": "Nom d'utilisateur",
|
||
"height": "Taille (cm)",
|
||
"dateOfBirth": "Date de naissance",
|
||
"dateOfBirthHint": "Utilisé pour le calcul automatique des objectifs de tension artérielle.",
|
||
"gender": "Sexe",
|
||
"genderNone": "Non précisé",
|
||
"genderMale": "Homme",
|
||
"genderFemale": "Femme",
|
||
"genderHint": "Utilisé pour des valeurs cibles spécifiques au sexe.",
|
||
"timezone": "Fuseau horaire",
|
||
"timezoneHint": "Utilisé pour les libellés des axes des graphiques, les heures de rappel, les horodatages d’export et le contexte du Coach. Les données stockées restent inchangées.",
|
||
"timezoneInvalid": "Fuseau horaire IANA non valide.",
|
||
"profileSaved": "Profil enregistré",
|
||
"avatar": {
|
||
"title": "Photo de profil",
|
||
"description": "Téléverse une photo stockée sur ton propre serveur. Elle apparaît dans toute l'application à la place d'un service d'avatar externe.",
|
||
"upload": "Téléverser une photo",
|
||
"replace": "Remplacer la photo",
|
||
"remove": "Supprimer",
|
||
"hint": "JPEG, PNG ou WebP. Jusqu'à 2 Mo et 2048×2048 pixels.",
|
||
"uploaded": "Photo de profil mise à jour",
|
||
"removed": "Photo de profil supprimée",
|
||
"invalidType": "Type d'image non pris en charge. Utilise JPEG, PNG ou WebP.",
|
||
"tooLarge": "L'image dépasse la limite de 2 Mo.",
|
||
"error": "Impossible de mettre à jour la photo de profil. Réessaie."
|
||
},
|
||
"changePassword": "Changer le mot de passe",
|
||
"changePasswordDescription": "Remplacez votre mot de passe actuel par un nouveau.",
|
||
"passwordReset": "Réinitialisation du mot de passe",
|
||
"currentPassword": "Mot de passe actuel",
|
||
"newPassword": "Nouveau mot de passe",
|
||
"confirmNewPassword": "Confirmer le nouveau mot de passe",
|
||
"passwordMismatch": "Les nouveaux mots de passe ne correspondent pas",
|
||
"passwordUpdated": "Mot de passe mis à jour",
|
||
"passkeys": "Passkeys",
|
||
"registeredPasskeys": "Clés d’accès enregistrées",
|
||
"passkeysDescription": "Les clés d’accès permettent une connexion sécurisée sans mot de passe.",
|
||
"passkeyName": "Nom",
|
||
"passkeyDevice": "Appareil",
|
||
"passkeyBackup": "Backup",
|
||
"passkeyCreated": "Créée",
|
||
"passkeyActions": "Actions",
|
||
"noPasskeys": "Aucune clé d’accès enregistrée.",
|
||
"addPasskey": "Ajouter une clé d’accès",
|
||
"passkeyAdded": "Clé d’accès ajoutée !",
|
||
"passkeyOptionsError": "Impossible de charger les options de clé d’accès",
|
||
"passkeyRegistrationFailed": "Échec de l’enregistrement de la clé d’accès",
|
||
"passkeyRegistrationCancelled": "Enregistrement de la clé d’accès annulé",
|
||
"passkeyNotSupported": "Votre navigateur ou appareil ne prend pas encore en charge les clés d’accès. Essayez un autre navigateur ou appareil.",
|
||
"passkeyAlreadyRegistered": "Cet appareil est déjà enregistré comme clé d’accès de votre compte.",
|
||
"passkeySecurityBlocked": "Votre navigateur a bloqué la demande de clé d’accès pour des raisons de sécurité. Assurez-vous d’être sur une origine HTTPS de confiance et réessayez.",
|
||
"passkeyTimeout": "La demande de clé d’accès a expiré. Veuillez réessayer.",
|
||
"passkeyUnknownError": "Échec de l’enregistrement de la clé d’accès : {message}",
|
||
"deletePasskey": "Supprimer la clé d’accès ?",
|
||
"deletePasskeyDescription": "La clé d’accès sera définitivement supprimée.",
|
||
"singleDevice": "Appareil unique",
|
||
"multiDevice": "Multi-appareils",
|
||
"backedUp": "sauvegardée",
|
||
"telegram": "Telegram Notifications",
|
||
"telegramDescription": "Get reminders for missed medication intake via Telegram.",
|
||
"botToken": "Jeton du bot",
|
||
"chatId": "ID du chat",
|
||
"enableNotifications": "Activer les notifications",
|
||
"telegramStep1": "1. Créez un bot via @BotFather dans Telegram et copiez le jeton.",
|
||
"telegramStep2": "2. Envoyez /start à votre bot pour activer le chat.",
|
||
"telegramStep3": "3. Trouvez votre ID de chat via @userinfobot ou l’API du bot.",
|
||
"ntfy": "ntfy",
|
||
"ntfyDescription": "Notifications via ntfy (auto-hébergé ou ntfy.sh).",
|
||
"ntfyEnable": "Activer ntfy",
|
||
"ntfyServer": "URL du serveur",
|
||
"ntfyTopic": "Topic",
|
||
"ntfyAuthToken": "Jeton d’authentification (facultatif)",
|
||
"ntfyAuthTokenHint": "Nécessaire uniquement pour les sujets privés avec contrôle d’accès.",
|
||
"webhook": "Webhook",
|
||
"webhookDescription": "Envoyer les notifications par POST vers n’importe quelle URL — Gotify, Discord, Slack, Matrix ou Home Assistant.",
|
||
"webhookEnable": "Activer le webhook",
|
||
"webhookUrl": "URL du webhook",
|
||
"webhookUrlHint": "L’URL complète pour le POST. Doit être accessible publiquement.",
|
||
"webhookHeaderName": "Nom d’en-tête (facultatif)",
|
||
"webhookHeaderValue": "Valeur d’en-tête (facultatif)",
|
||
"email": "E-mail",
|
||
"emailDescription": "Recevoir les alertes et les rappels par e-mail.",
|
||
"emailEnable": "Activer l’e-mail",
|
||
"emailRecipient": "Adresse du destinataire",
|
||
"webPush": "Push navigateur",
|
||
"webPushDescription": "Recevez des notifications directement dans votre navigateur, même lorsque HealthLog n’est pas ouvert.",
|
||
"webPushNotSupported": "Votre navigateur ne prend pas en charge les notifications push.",
|
||
"webPushDenied": "Les notifications push sont bloquées. Autorisez-les dans les réglages de votre navigateur.",
|
||
"webPushNotConfigured": "Web Push n’est pas configuré sur le serveur.",
|
||
"webPushSubscribe": "Activer le push",
|
||
"webPushUnsubscribe": "Désactiver le push",
|
||
"webPushSubscribed": "Notifications push activées !",
|
||
"webPushUnsubscribed": "Notifications push désactivées.",
|
||
"webPushSubscribeFailed": "Échec de l’activation",
|
||
"webPushActive": "Actif",
|
||
"kiInsightsDescription": "Facultatif : enregistrez votre clé OpenAI pour des analyses quotidiennes et automatiques dans Insights.",
|
||
"codexConnected": "ChatGPT connecté ! Insights est maintenant actif.",
|
||
"codexDisconnected": "Connexion à ChatGPT supprimée.",
|
||
"codexConnectionFailed": "Échec de la connexion à ChatGPT. Veuillez réessayer.",
|
||
"rawData": "Envoyer les données brutes",
|
||
"rawDataOnDescription": "Des métriques agrégées et des points individuels anonymisés des 30 derniers jours avec contexte temporel sont envoyés — jamais le nom, l’e-mail ni les identifiants de compte directs.",
|
||
"rawDataOffDescription": "Seules des métriques résumées sont envoyées (par exemple moyennes, tendances, minimum/maximum) — aucun point individuel ni contexte temporel exact.",
|
||
"rawDataWarning": "Mode brut activé : le fournisseur reçoit des points anonymisés supplémentaires des 30 derniers jours pour une analyse plus précise.",
|
||
"regenerateInsights": "Régénérer les rapports",
|
||
"regenerateSuccess": "Rapports régénérés",
|
||
"regenerateRateLimit": "Veuillez patienter — vous avez atteint la limite horaire d’analyses.",
|
||
"lastGeneratedAt": "Dernière génération",
|
||
"ai": {
|
||
"chatgptConnectedBadge": "ChatGPT connecté",
|
||
"adminAiActiveBadge": "Fournisseur administrateur actif",
|
||
"connectionExpiredBadge": "Connexion expirée",
|
||
"connectedSince": "Connecté depuis {when}.",
|
||
"deviceCodeHeading": "Terminez la connexion sur chatgpt.com",
|
||
"deviceCodeStep1": "Ouvrez ce lien sur n’importe quel appareil :",
|
||
"deviceCodeStep2": "Saisissez ce code à usage unique :",
|
||
"deviceCodeStep3": "Approuvez la connexion — cette page se met à jour automatiquement.",
|
||
"deviceCodeCopy": "Copier",
|
||
"deviceCodeWaiting": "En attente d’approbation…",
|
||
"deviceCodeCancel": "Annuler",
|
||
"oauthNotConfigured": "L’OAuth ChatGPT n’est pas configuré sur cette instance — utilisez plutôt votre propre clé API ci-dessous.",
|
||
"modelLabel": "Modèle",
|
||
"modelOptionDefault": "— Par défaut —",
|
||
"modelOptionCustom": "Personnalisé…",
|
||
"customModelLabel": "Nom du modèle personnalisé",
|
||
"anthropicKeyLabel": "Clé API Anthropic",
|
||
"baseUrlLabel": "Base URL",
|
||
"localKeyLabel": "Clé API (facultative)",
|
||
"savedPreview": "(enregistrée {preview})",
|
||
"savedShort": "(enregistrée)",
|
||
"saveCta": "Enregistrer",
|
||
"saved": "Enregistré",
|
||
"saveFailed": "Échec de l’enregistrement",
|
||
"errorGeneric": "Erreur",
|
||
"providerChain": {
|
||
"types": {
|
||
"codex": "ChatGPT (Codex)",
|
||
"openai": "OpenAI (votre clé)",
|
||
"anthropic": "Anthropic (Claude)",
|
||
"local": "Modèle local",
|
||
"admin-openai": "OpenAI administrateur"
|
||
},
|
||
"title": "Chaîne de secours",
|
||
"description": "Si le fournisseur principal échoue, HealthLog parcourt la chaîne dans l’ordre. Faites glisser les lignes pour les réorganiser ; utilisez l’interrupteur pour désactiver un fournisseur sans le supprimer.",
|
||
"moveUp": "Monter",
|
||
"moveDown": "Descendre",
|
||
"removeFromChain": "Retirer de la chaîne",
|
||
"addProvider": "Ajouter un fournisseur",
|
||
"addNoneAvailable": "Tous les fournisseurs sont déjà dans la chaîne",
|
||
"saveOrder": "Enregistrer l’ordre de la chaîne",
|
||
"saved": "Chaîne enregistrée",
|
||
"saveFailed": "Échec de l’enregistrement de la chaîne",
|
||
"resetDefaults": "Réinitialiser",
|
||
"resetConfirmTitle": "Réinitialiser la chaîne aux valeurs par défaut ?",
|
||
"resetConfirmBody": "La chaîne revient à Codex → OpenAI → Anthropic → Local → OpenAI administrateur. Vos identifiants enregistrés ne sont pas affectés."
|
||
},
|
||
"providerCardTitle": "Fournisseur d'IA",
|
||
"activeProviderHeading": "Fournisseur actif",
|
||
"activeProviderBody": "Choisissez le fournisseur à utiliser en premier. Le formulaire ci-dessous configure uniquement le fournisseur sélectionné ; la chaîne de secours en bas détermine ce qui se passe en cas d’échec.",
|
||
"activeProviderLabel": "Fournisseur principal",
|
||
"providerConfigTitle": "Configuration du fournisseur",
|
||
"providerSelect": {
|
||
"codex": "Compte ChatGPT (Codex)",
|
||
"openai": "OpenAI (votre clé API)",
|
||
"anthropic": "Anthropic (Claude)",
|
||
"local": "Modèle local (compatible OpenAI)",
|
||
"admin-openai": "OpenAI fourni par l’administrateur"
|
||
},
|
||
"openai": {
|
||
"modelSelect": "Modèle",
|
||
"modelOptionCustom": "Slug personnalisé…",
|
||
"modelCustomLabel": "Slug du modèle personnalisé",
|
||
"modelCustomPlaceholder": "gpt-5",
|
||
"baseUrlLabel": "URL de base (avancé)",
|
||
"baseUrlPlaceholder": "https://api.openai.com/v1",
|
||
"baseUrlHelp": "À remplacer uniquement si vous utilisez une passerelle compatible OpenAI. Laissez vide pour OpenAI lui-même.",
|
||
"showAdvanced": "Afficher les options avancées",
|
||
"hideAdvanced": "Masquer les options avancées",
|
||
"apiKey": "Clé API",
|
||
"apiKeyPlaceholder": "sk-…"
|
||
},
|
||
"codex": {
|
||
"statusConnected": "Connecté",
|
||
"statusDisconnected": "Non connecté",
|
||
"statusExpired": "Connexion expirée",
|
||
"connectButton": "Se connecter avec ChatGPT",
|
||
"disconnectButton": "Déconnecter",
|
||
"modelSlugLabel": "Slug du modèle",
|
||
"modelSlugBody": "Codex utilise le modèle vers lequel votre abonnement ChatGPT route. La variable d’environnement CODEX_MODEL permet à l’opérateur de le remplacer sur l’instance.",
|
||
"lastInsight": "Dernière analyse : {when}"
|
||
},
|
||
"adminOpenai": {
|
||
"title": "OpenAI administrateur",
|
||
"body": "Clé OpenAI fournie par l’opérateur, utilisée en dernier recours sans fournisseur personnel. Rien à configurer ici.",
|
||
"notConfigured": "L’opérateur n’a pas configuré de clé OpenAI partagée sur cette instance."
|
||
},
|
||
"testProvider": "Tester le fournisseur actif",
|
||
"testSuccess": "OK — {provider} ({model})",
|
||
"testFailedShort": "Échec du test : {message}",
|
||
"testUnexpectedResponse": "Échec de la connexion au fournisseur d’IA — réponse inattendue du serveur.",
|
||
"testReasonCredentials": "Le fournisseur a rejeté les identifiants — réauthentifiez-vous dans les réglages IA.",
|
||
"testReasonRateLimited": "Le fournisseur a limité la requête — réessayez sous peu.",
|
||
"testReasonServerError": "Le fournisseur d’IA a renvoyé une erreur serveur.",
|
||
"testReasonUnreachable": "Impossible de joindre le fournisseur d’IA.",
|
||
"coachMemory": {
|
||
"title": "Ce dont le Coach se souvient",
|
||
"description": "Les informations durables que vous avez confiées au Coach. Il s'en sert pour garder ses réponses pertinentes. Supprimez tout ce qu'il vaut mieux qu'il oublie.",
|
||
"empty": "Le Coach n'a encore enregistré aucune information. Au fil de vos échanges, il retient les détails durables que vous partagez — vos objectifs, vos affections, vos préférences — et vous pouvez les effacer ici à tout moment.",
|
||
"learnedPrefix": "appris {when}",
|
||
"categoryPreference": "Préférences",
|
||
"categoryCondition": "Affections",
|
||
"categoryGoal": "Objectifs",
|
||
"categoryConstraint": "Contraintes",
|
||
"categoryContext": "Contexte",
|
||
"forget": "Oublier",
|
||
"forgetAria": "Oublier cette information",
|
||
"forgetAll": "Tout oublier",
|
||
"forgetAllConfirmTitle": "Oublier tout ce dont le Coach se souvient ?",
|
||
"forgetAllConfirmBody": "Cela supprime toutes les informations enregistrées. Le Coach repartira de zéro lors de votre prochaine conversation. Cette action est irréversible.",
|
||
"forgetAllConfirmAction": "Tout oublier",
|
||
"cancel": "Annuler",
|
||
"summaryNote": "Le Coach peut aussi conserver un bref résumé évolutif de chaque conversation. Il n'existe pas de commande individuelle pour cela — supprimer une conversation supprime son résumé.",
|
||
"loadError": "Impossible de charger ce dont le Coach se souvient.",
|
||
"forgotToast": "Information oubliée.",
|
||
"forgotError": "Impossible d'oublier cette information. Veuillez réessayer.",
|
||
"clearedToast": "{count} informations enregistrées oubliées.",
|
||
"clearError": "Impossible d'effacer les informations enregistrées. Veuillez réessayer."
|
||
},
|
||
"aboutMe": {
|
||
"title": "À propos de moi",
|
||
"description": "Contexte personnel que le Coach et le briefing quotidien lisent en plus de vos données.",
|
||
"placeholder": "Ex. travail posté, régime végétarien, blessure au genou, entraînement pour un semi-marathon…",
|
||
"charCount": "{used} / {max} caractères",
|
||
"clear": "Vider",
|
||
"save": "Enregistrer",
|
||
"savedToast": "Note « À propos de moi » enregistrée.",
|
||
"clearedToast": "Note « À propos de moi » supprimée.",
|
||
"saveError": "Impossible d'enregistrer. Veuillez réessayer.",
|
||
"loadError": "Impossible de charger la note.",
|
||
"hint": "Transmis au Coach et au briefing quotidien comme contexte supplémentaire. Laissez vide pour ne rien envoyer.",
|
||
"profileHint": "L'âge et le genre proviennent de votre profil et sont inclus automatiquement.",
|
||
"freeTextLabel": "À propos de moi (texte libre)",
|
||
"conditionsLabel": "Maladies chroniques",
|
||
"conditionsPlaceholder": "P. ex. hypertension, diabète de type 2…",
|
||
"allergiesLabel": "Allergies et intolérances",
|
||
"allergiesPlaceholder": "P. ex. intolérance au lactose, allergie à la pénicilline…",
|
||
"focusLabel": "À quoi le Coach doit-il veiller ?",
|
||
"focusPlaceholder": "P. ex. surveille ma tension, motive-moi à bouger davantage…",
|
||
"completeness": "{answered} sur {total} renseignés",
|
||
"questionsTitle": "Le Coach a des questions",
|
||
"questionsOpenCoach": "Y répondre dans le Coach"
|
||
}
|
||
},
|
||
"dashboard": {
|
||
"units": {
|
||
"title": "Unités",
|
||
"description": "Choisissez l'affichage des distances et des vitesses dans les graphiques et les tuiles.",
|
||
"metric": "Métrique",
|
||
"imperial": "Impérial",
|
||
"saved": "Préférence d'unités enregistrée.",
|
||
"saveError": "Impossible d'enregistrer votre préférence d'unités."
|
||
}
|
||
},
|
||
"withings": "Withings",
|
||
"withingsDescription": "Connecte ta balance et ton tensiomètre Withings pour synchroniser automatiquement poids, composition corporelle et tension.",
|
||
"withingsCredentials": "Identifiants API",
|
||
"withingsClientId": "ID client",
|
||
"withingsClientSecret": "Secret client",
|
||
"withingsCredentialsSaved": "Identifiants enregistrés",
|
||
"withingsCredentialsSavedPlaceholder": "Enregistré — saisissez-en un nouveau pour remplacer",
|
||
"withingsCredentialsSavedPlaceholderSecret": "Enregistré — saisissez-en un nouveau pour remplacer",
|
||
"withingsSaveCredentials": "Enregistrer",
|
||
"configured": "Configuré",
|
||
"withingsSync": "Synchroniser maintenant",
|
||
"withingsFullSync": "Synchroniser toutes les données",
|
||
"withingsFullSyncTitle": "Synchronisation complète ?",
|
||
"withingsFullSyncDescription": "Toutes les données Withings disponibles seront entièrement synchronisées. Cela peut prendre un certain temps selon votre historique.",
|
||
"withingsSyncResult": "{count} mesures synchronisées",
|
||
"withingsFullSyncResult": "{count} mesures entièrement synchronisées",
|
||
"withingsSyncFailed": "Échec de la synchronisation",
|
||
"withingsOauthConnected": "Withings connecté — la première synchronisation démarre en arrière-plan.",
|
||
"withingsOauthFailed": "Échec de la connexion Withings",
|
||
"withingsOauthError": {
|
||
"csrf1": "Le contrôle de sécurité a échoué car le cookie du navigateur manquait. Relancez la connexion dans le même navigateur.",
|
||
"replay": "Ce lien de confirmation a déjà été utilisé. Relancez la connexion.",
|
||
"state": "La réponse de Withings ne correspond à aucune demande de connexion en cours. Relancez la connexion.",
|
||
"expired": "La demande de connexion a expiré. Relancez la connexion et terminez l'autorisation en quelques minutes.",
|
||
"cross_user": "La réponse appartient à une demande d'un autre compte. Relancez la connexion depuis votre propre compte.",
|
||
"nocode": "Withings n'a renvoyé aucun code d'autorisation. Réessayez et autorisez l'accès dans la fenêtre Withings.",
|
||
"nocreds": "Aucun identifiant d'API Withings n'est enregistré. Enregistrez d'abord le Client ID et le Client Secret, puis reconnectez.",
|
||
"token": "L'échange de jetons avec Withings a échoué. Vérifiez le Client ID et le Client Secret, puis réessayez.",
|
||
"generic": "Erreur inconnue lors de la connexion. Relancez la connexion."
|
||
},
|
||
"integrationsSourcesHint": "Quand plusieurs sources fournissent la même métrique, la priorité des sources décide quelle valeur compte.",
|
||
"integrationsSourcesHintLink": "Ouvrir la priorité des sources",
|
||
"withingsSynchronize": "Synchroniser",
|
||
"withingsDisconnect": "Déconnecter",
|
||
"withingsDisconnectTitle": "Déconnecter Withings ?",
|
||
"withingsDisconnectDescription": "La connexion à Withings sera déconnectée. Les données déjà synchronisées seront conservées.",
|
||
"withingsConnect": "Se connecter avec Withings",
|
||
"withingsNoCredentials": "Saisissez d’abord vos identifiants API ci-dessus pour connecter Withings.",
|
||
"whoop": "WHOOP",
|
||
"whoopDescription": "Connecte ton bracelet WHOOP pour synchroniser récupération, sommeil, charge et entraînements directement dans HealthLog.",
|
||
"whoopCredentials": "Identifiants API",
|
||
"whoopClientId": "Client ID",
|
||
"whoopClientSecret": "Client Secret",
|
||
"whoopCredentialsSaved": "Identifiants enregistrés",
|
||
"whoopCredentialsSavedPlaceholder": "Enregistré — saisir de nouveaux pour remplacer",
|
||
"whoopCredentialsSavedPlaceholderSecret": "Enregistré — saisir de nouveaux pour remplacer",
|
||
"whoopSaveCredentials": "Enregistrer",
|
||
"whoopSync": "Synchroniser",
|
||
"whoopFullSync": "Synchroniser toutes les données",
|
||
"whoopFullSyncTitle": "Synchronisation complète ?",
|
||
"whoopFullSyncDescription": "Tout l'historique WHOOP disponible sera entièrement synchronisé. Cela peut prendre du temps selon votre historique.",
|
||
"whoopSyncResult": "{count} mesures synchronisées",
|
||
"whoopSyncFailed": "Échec de la synchronisation",
|
||
"whoopSynchronize": "Synchroniser",
|
||
"whoopDisconnect": "Déconnecter",
|
||
"whoopDisconnectTitle": "Déconnecter WHOOP ?",
|
||
"whoopDisconnectDescription": "La connexion à WHOOP sera déconnectée. Les données déjà synchronisées seront conservées.",
|
||
"whoopConnect": "Se connecter avec WHOOP",
|
||
"whoopNoCredentials": "Veuillez saisir vos identifiants API ci-dessus pour connecter WHOOP.",
|
||
"whoopBackfillInProgress": "Importation de votre historique WHOOP en arrière-plan…",
|
||
"whoopOauthConnected": "WHOOP connecté — la première synchronisation démarre en arrière-plan.",
|
||
"whoopOauthFailed": "Échec de la connexion à WHOOP",
|
||
"whoopOauthError": {
|
||
"csrf1": "La vérification de sécurité a échoué car le cookie du navigateur était absent. Veuillez relancer la connexion dans le même navigateur.",
|
||
"state": "La réponse de WHOOP ne correspondait à aucune demande de connexion en cours. Veuillez relancer la connexion.",
|
||
"expired": "La demande de connexion a expiré avant d'aboutir. Veuillez relancer la connexion.",
|
||
"cross_user": "La réponse appartient à une demande d'un autre compte. Veuillez relancer la connexion depuis votre propre compte.",
|
||
"nocode": "WHOOP n'a pas renvoyé de code d'autorisation. Réessayez et autorisez l'accès dans la fenêtre WHOOP.",
|
||
"nocreds": "WHOOP n'est pas configuré. Ajoutez vos identifiants OAuth WHOOP ci-dessus et réessayez.",
|
||
"token": "L'échange de jeton avec WHOOP a échoué. Veuillez relancer la connexion.",
|
||
"generic": "Erreur inconnue lors de la connexion. Veuillez relancer la connexion."
|
||
},
|
||
"fitbit": "Google Health",
|
||
"fitbitTag": "Fitbit et Pixel",
|
||
"fitbitDescription": "Connecte Google Health pour synchroniser tes données Fitbit et Pixel Watch — poids, fréquence cardiaque et plus.",
|
||
"fitbitExperimentalBadge": "Expérimental",
|
||
"fitbitCredentials": "Identifiants d'API",
|
||
"fitbitClientId": "Client ID",
|
||
"fitbitClientSecret": "Client Secret",
|
||
"fitbitCredentialsSaved": "Identifiants enregistrés",
|
||
"fitbitCredentialsSavedPlaceholder": "Enregistré — saisissez-en de nouveaux pour remplacer",
|
||
"fitbitCredentialsSavedPlaceholderSecret": "Enregistré — saisissez-en de nouveaux pour remplacer",
|
||
"fitbitSaveCredentials": "Enregistrer",
|
||
"fitbitSync": "Synchroniser maintenant",
|
||
"fitbitFullSync": "Tout synchroniser",
|
||
"fitbitFullSyncTitle": "Synchronisation complète ?",
|
||
"fitbitFullSyncDescription": "Tout l'historique Google Health disponible sera entièrement synchronisé. Cela peut prendre un certain temps selon votre historique.",
|
||
"fitbitSyncResult": "{count} mesures synchronisées",
|
||
"fitbitSyncFailed": "Échec de la synchronisation",
|
||
"fitbitSynchronize": "Synchroniser",
|
||
"fitbitDisconnect": "Déconnecter",
|
||
"fitbitDisconnectTitle": "Déconnecter Google Health ?",
|
||
"fitbitDisconnectDescription": "La connexion à Google Health sera déconnectée. Les données déjà synchronisées seront conservées.",
|
||
"fitbitConnect": "Se connecter à Google Health",
|
||
"fitbitNoCredentials": "Veuillez saisir vos identifiants d'API ci-dessus pour connecter Google Health.",
|
||
"fitbitBackfillInProgress": "Importation de votre historique Google Health en arrière-plan…",
|
||
"fitbitOauthConnected": "Google Health connecté — la première synchronisation démarre en arrière-plan.",
|
||
"fitbitOauthFailed": "Échec de la connexion à Google Health",
|
||
"fitbitOauthError": {
|
||
"csrf1": "La vérification de sécurité a échoué car le cookie du navigateur était absent. Veuillez relancer la connexion dans le même navigateur.",
|
||
"state": "La réponse de Google ne correspondait à aucune demande de connexion en cours. Veuillez relancer la connexion.",
|
||
"expired": "La demande de connexion a expiré avant d'aboutir. Veuillez relancer la connexion.",
|
||
"cross_user": "La réponse appartient à une demande d'un autre compte. Veuillez relancer la connexion depuis votre propre compte.",
|
||
"nocode": "Google n'a pas renvoyé de code d'autorisation. Réessayez et autorisez l'accès dans la fenêtre Google.",
|
||
"nocreds": "Google Health n'est pas configuré. Ajoutez vos identifiants OAuth Google ci-dessus et réessayez.",
|
||
"token": "L'échange de jeton avec Google a échoué. Veuillez relancer la connexion.",
|
||
"generic": "Erreur inconnue lors de la connexion. Veuillez relancer la connexion."
|
||
},
|
||
"integrations": {
|
||
"withings": {
|
||
"reconnect": {
|
||
"banner": {
|
||
"title": "Synchronisation d’activité disponible",
|
||
"body": "Votre connexion Withings a été autorisée avant l’ajout de la synchronisation d’activité. Reconnectez-vous une fois pour activer l’import des pas, de l’énergie active, de la distance à pied et en course, et des étages gravis depuis vos appareils Withings.",
|
||
"action": "Reconnecter Withings"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"integrationPill": {
|
||
"connected": "Connecté",
|
||
"errorReconnect": "Erreur — reconnecter",
|
||
"warningServerError": "Connecté, erreur serveur",
|
||
"parkedReconnect": "En pause — reconnecter manuellement",
|
||
"notConnected": "Non connecté",
|
||
"justNow": "à l’instant",
|
||
"minutesAgo": "il y a {count} min",
|
||
"hoursAgo": "il y a {count} h",
|
||
"daysAgo": "il y a {count} j",
|
||
"ariaLabel": "Statut de l’intégration",
|
||
"resumeCta": "Reconnecter",
|
||
"resumeSuccess": "Intégration reprise",
|
||
"resumeError": "Échec de la reconnexion"
|
||
},
|
||
"apiTokens": "Jetons API",
|
||
"apiTokensDescription": "Créez des jetons API pour enregistrer des prises de médicaments externes (par exemple Raccourcis, automatisations).",
|
||
"tokenNamePlaceholder": "Nom du jeton (par exemple Raccourci iPhone)",
|
||
"tokenCreated": "Jeton créé — copiez-le maintenant ! Il ne sera plus affiché.",
|
||
"tokenCopy": "Copier le jeton",
|
||
"tokenCopied": "Jeton copié dans le presse-papiers",
|
||
"tokenCopyFailed": "Impossible de copier le jeton",
|
||
"tokenRevokeFailed": "Impossible de révoquer le jeton. Veuillez réessayer.",
|
||
"tokenRevoke": "Révoquer le jeton ?",
|
||
"tokenRevokeAction": "Révoquer le jeton",
|
||
"tokenRevokeDescription": "Le jeton sera désactivé définitivement. Les applications qui l’utilisent perdront l’accès.",
|
||
"tokenRevoked": "Révoqué",
|
||
"tokenExpired": "Expiré",
|
||
"tokenActive": "Actif",
|
||
"activeTokensTitle": "Jetons actifs",
|
||
"revokedTokensTitle": "Jetons révoqués ({count})",
|
||
"tokenTableName": "Nom",
|
||
"tokenTablePermissions": "Autorisations",
|
||
"tokenTableStatus": "Statut",
|
||
"tokenTableCreated": "Créé",
|
||
"tokenTableLastUsed": "Dernière utilisation",
|
||
"tokenTableActions": "Actions",
|
||
"noActiveTokens": "Aucun jeton actif disponible.",
|
||
"tokenNeverUsed": "Jamais",
|
||
"apiEndpointsTitle": "Points de terminaison API",
|
||
"apiEndpointsDescription": "Aperçu des points de terminaison externes actuellement disponibles pour l’ingestion par jeton.",
|
||
"apiEndpointMethod": "Méthode",
|
||
"apiEndpointPath": "Chemin",
|
||
"apiEndpointAuth": "Authentification",
|
||
"apiEndpointExample": "Exemple de corps",
|
||
"collapse": "Réduire",
|
||
"expand": "Développer",
|
||
"dangerZone": "Supprimer toutes les données",
|
||
"dangerZoneTitle": "Zone à risque",
|
||
"dangerZoneDescription": "Supprime toutes vos données de santé et intégrations. Votre compte utilisateur sera conservé.",
|
||
"dangerZoneConfirm": "Supprimer toutes les données ?",
|
||
"dangerZoneConfirmDescription": "Cette action supprimera définitivement toutes vos données de santé et intégrations. Votre compte utilisateur sera conservé.",
|
||
"dangerZoneSuccess": "Toutes les données personnelles ont été supprimées",
|
||
"dangerZoneDeleteFailed": "Échec de la suppression",
|
||
"finalDelete": "Supprimer définitivement",
|
||
"deleteAccountCardTitle": "Supprimer entièrement le compte",
|
||
"deleteAccountCardDescription": "Supprime votre compte ainsi que les clés d’accès, le journal d’audit et les sessions. Cette action est irréversible.",
|
||
"deleteAccountCta": "Supprimer le compte",
|
||
"deleteAccountConfirmTitle": "Supprimer définitivement le compte ?",
|
||
"deleteAccountConfirmDescription": "Votre compte, toutes vos données de santé, vos clés d’accès, vos sessions et vos entrées d’audit seront définitivement supprimés. Vous serez déconnecté immédiatement après.",
|
||
"deleteAccountSuccess": "Compte supprimé — déconnexion en cours.",
|
||
"deleteAccountFailed": "Le compte n’a pas pu être supprimé",
|
||
"deleteAccountFinal": "Supprimer définitivement",
|
||
"saved": "Enregistré",
|
||
"savingError": "Erreur lors de l’enregistrement",
|
||
"moodLogTitle": "moodLog",
|
||
"moodLogDescription": "Import mood data from moodLog",
|
||
"moodLogDeprecated": "Obsolète : l’humeur est désormais suivie nativement dans HealthLog avec tags et facteurs. Cette intégration fonctionne encore mais sera supprimée dans une version future.",
|
||
"moodLogUrl": "moodLog URL",
|
||
"moodLogUrlPlaceholder": "https://mood.example.com",
|
||
"moodLogApiKey": "Clé API",
|
||
"moodLogApiKeyPlaceholder": "ml_...",
|
||
"moodLogWebhookSecret": "Secret du webhook",
|
||
"moodLogWebhookSecretHelp": "Saisissez ce secret dans moodLog comme secret de webhook",
|
||
"moodLogSync": "Synchroniser maintenant",
|
||
"moodLogFullSync": "Synchroniser toutes les données",
|
||
"moodLogFullSyncConfirm": "Synchroniser",
|
||
"moodLogFullSyncTitle": "Synchronisation complète ?",
|
||
"moodLogFullSyncDescription": "Toutes les données d’humeur disponibles seront entièrement synchronisées.",
|
||
"moodLogDisconnect": "Déconnecter",
|
||
"moodLogDisconnectTitle": "Déconnecter moodLog ?",
|
||
"moodLogDisconnectDescription": "La connexion sera supprimée et toutes les données d’humeur importées seront supprimées.",
|
||
"moodLogEntries": "Entrées",
|
||
"moodLogSyncResult": "{count} entrées synchronisées",
|
||
"moodLogSyncFailed": "Échec de la synchronisation",
|
||
"moodLogDisconnected": "moodLog déconnecté",
|
||
"about": {
|
||
"version": "Version de l’app",
|
||
"gitSha": "Build",
|
||
"builtAt": "Compilé {time}",
|
||
"builtAtLabel": "Compilé",
|
||
"license": "Licence",
|
||
"repository": "Code source",
|
||
"changelog": "Changelog",
|
||
"docs": "Documentation",
|
||
"linksHeading": "Sources et documentation",
|
||
"newerAvailable": "Nouvelle version : {tag}"
|
||
},
|
||
"testConnection": {
|
||
"test": "Tester la connexion",
|
||
"testing": "Test en cours…",
|
||
"ok": "Connecté (latence {latency} ms)",
|
||
"errors": {
|
||
"credentials_rejected": "Identifiants rejetés — vérifiez votre jeton",
|
||
"rate_limited": "Limité par le service en amont",
|
||
"timeout": "Délai de la requête dépassé",
|
||
"upstream_error": "Le service en amont a renvoyé une erreur",
|
||
"connection_failed": "Échec de la connexion",
|
||
"not_configured": "Non configuré",
|
||
"url_not_public": "L’URL n’est pas un point de terminaison public",
|
||
"url_invalid": "L’URL n’est pas valide",
|
||
"redirected": "Le point de terminaison redirige — vérifiez l’URL",
|
||
"endpoint_not_found": "Point de terminaison introuvable à l’URL",
|
||
"credentials_unreadable": "Les identifiants ne peuvent pas être déchiffrés",
|
||
"upstream_invalid_json": "Le service en amont a envoyé un JSON non valide",
|
||
"vapid_not_configured": "Web Push non configuré (clés VAPID manquantes)",
|
||
"rate_limited_self": "Trop de requêtes de test",
|
||
"generic": "Échec du test"
|
||
}
|
||
},
|
||
"notificationStatus": {
|
||
"title": "Channel reliability",
|
||
"description": "Live status of every notification channel — Auto-disabled means HealthLog stopped retrying after a permanent error.",
|
||
"emptyDescription": "Aucun canal configuré pour l’instant. Ajoutez un canal ci-dessous pour commencer à suivre l’état de sa livraison.",
|
||
"stateActive": "Actif",
|
||
"stateAutoDisabled": "Désactivé automatiquement",
|
||
"stateSendingPaused": "Envoi en pause",
|
||
"stateManuallyDisabled": "Désactivé",
|
||
"lastSuccess": "Dernier envoi réussi",
|
||
"lastFailure": "Dernier échec",
|
||
"consecutiveFailures": "Échecs consécutifs",
|
||
"disabledReason": "Raison",
|
||
"nextRetry": "Prochaine tentative",
|
||
"reEnable": "Réactiver",
|
||
"sendTest": "Envoyer un test"
|
||
},
|
||
"identity": {
|
||
"description": "Informations facultatives pour l’export du dossier de santé (couverture PDF + export FHIR). Tous les champs sont facultatifs.",
|
||
"fullName": "Nom complet",
|
||
"fullNamePlaceholder": "p. ex. Jeanne Dupont",
|
||
"insurer": "Assurance maladie",
|
||
"insurerPlaceholder": "p. ex. AOK Bayern",
|
||
"insuranceNumber": "Numéro d’assuré (KVNR)",
|
||
"insuranceNumberHint": "10 caractères : une lettre + neuf chiffres (p. ex. A123456780)."
|
||
},
|
||
"healthRecord": {
|
||
"title": "Exporter le dossier de santé",
|
||
"description": "Générez un dossier de santé complet pour votre médecin — en PDF, structuré (FHIR) ou en paquet combiné.",
|
||
"format": "Format",
|
||
"format_pdf": "PDF",
|
||
"format_fhir": "Structuré (FHIR)",
|
||
"format_package": "Paquet : PDF + FHIR",
|
||
"range": "Période",
|
||
"range90": "90 derniers jours",
|
||
"range180": "6 derniers mois",
|
||
"range365": "12 derniers mois",
|
||
"practiceName": "Cabinet (facultatif)",
|
||
"practiceNamePlaceholder": "p. ex. Dr Dupont",
|
||
"includedData": "Données incluses",
|
||
"groupVitals": "Signes vitaux",
|
||
"groupCardio": "Cœur & forme",
|
||
"groupActivity": "Activité & sommeil",
|
||
"weight": "Poids",
|
||
"bp": "Tension artérielle",
|
||
"pulse": "Pouls",
|
||
"oxygenSaturation": "Saturation en oxygène",
|
||
"bodyFat": "Masse grasse",
|
||
"bodyComposition": "Composition corporelle",
|
||
"restingHeartRate": "Pouls au repos",
|
||
"hrv": "Variabilité de la fréquence cardiaque",
|
||
"vo2max": "VO₂max",
|
||
"steps": "Pas",
|
||
"distance": "Distance",
|
||
"sleep": "Sommeil",
|
||
"glucose": "Glycémie",
|
||
"medications": "Médicaments & observance",
|
||
"mood": "Humeur (désactivé par défaut — données sensibles)",
|
||
"bmi": "IMC",
|
||
"includeCharts": "Intégrer les graphiques de tendance (PDF uniquement)",
|
||
"includeAiSummary": "Ajouter le résumé IA (non validé cliniquement)",
|
||
"fhirNote": "La sortie structurée suit la norme FHIR R4 (compatible ePA).",
|
||
"generate": "Générer",
|
||
"error": "Échec de l’export ({code}).",
|
||
"labs": "Résultats d'analyses"
|
||
},
|
||
"globalExcludedInjectionSitesLabel": "Sites d'injection exclus globalement",
|
||
"globalExcludedInjectionSitesHint": "Les sites listés ici ne sont proposés pour aucun médicament et sont refusés lors de l'enregistrement d'une dose, même si un médicament les privilégie.",
|
||
"sharing": {
|
||
"createTitle": "Nouveau lien de partage",
|
||
"createDescription": "Le lien est en lecture seule et limité dans le temps. Le jeton n'est affiché qu'une fois à la création — conservez-le alors ; il ne peut pas être récupéré.",
|
||
"label": "Libellé",
|
||
"labelPlaceholder": "ex. Dr Martin — bilan annuel",
|
||
"range": "Jours d'historique",
|
||
"rangeHint": "Jusqu'où remonte la fenêtre partagée.",
|
||
"expiry": "Expire dans (jours)",
|
||
"expiryHint": "Au plus {max} jours.",
|
||
"expiryInvalid": "L'expiration doit être comprise entre 1 et {max} jours.",
|
||
"fhirApi": "Autoriser l'API FHIR restreinte",
|
||
"fhirApiHint": "Laissez le lien servir un point d'accès FHIR en lecture seule en plus de la vue page.",
|
||
"resourceTypes": "Types de ressource FHIR",
|
||
"create": "Créer le lien",
|
||
"tokenCreated": "Lien de partage créé",
|
||
"tokenOnce": "Copiez ce lien maintenant — le jeton n'est affiché qu'une fois et ne peut pas être récupéré.",
|
||
"copy": "Copier le lien",
|
||
"copied": "Copié dans le presse-papiers.",
|
||
"activeTitle": "Liens actifs",
|
||
"noActive": "Aucun lien de partage actif.",
|
||
"created": "Créé",
|
||
"expires": "Expire",
|
||
"accessCount": "Vues",
|
||
"revoke": "Révoquer",
|
||
"revokeDescription": "Révoquez ce lien immédiatement. Quiconque le détient perd l'accès aussitôt. Action irréversible.",
|
||
"statusActive": "Actif",
|
||
"statusRevoked": "Révoqué",
|
||
"statusExpired": "Expiré",
|
||
"inactiveTitle": "Révoqués et expirés ({count})",
|
||
"shownOnce": "Affiché une seule fois. Enregistrez le code QR et la phrase secrète maintenant — ils ne pourront pas être récupérés ensuite.",
|
||
"qrLabel": "Code QR",
|
||
"qrAlt": "Code QR contenant le lien de partage et la phrase secrète",
|
||
"linkLabel": "Lien",
|
||
"passphraseLabel": "Phrase secrète",
|
||
"passphraseHint": "Le destinataire a besoin du lien et de cette phrase secrète. Le code QR contient les deux.",
|
||
"copyLink": "Copier le lien",
|
||
"copyPassphrase": "Copier la phrase secrète",
|
||
"protected": "Phrase secrète"
|
||
},
|
||
"genderOther": "Autre",
|
||
"cycleTracking": {
|
||
"title": "Suivi du cycle",
|
||
"description": "Suivez votre cycle menstruel, les prédictions, les symptômes et les analyses de phases. Activé par défaut pour les comptes définis comme féminins ; disponible pour tous.",
|
||
"disclaimer": "Les prévisions et les phases sont des estimations descriptives issues de tes données enregistrées : ce ne sont ni un avis médical ni une méthode de contraception. Elles n'indiquent jamais qu'un rapport non protégé est sans risque. La précision s'améliore à mesure que tu enregistres plus de cycles. Pour la contraception ou toute décision médicale, consulte un professionnel de santé.",
|
||
"enable": "Activer le suivi du cycle",
|
||
"manage": "Ouvrir le suivi du cycle",
|
||
"error": "Impossible de mettre à jour le suivi du cycle."
|
||
},
|
||
"nightscout": "Nightscout",
|
||
"nightscoutTag": "CGM",
|
||
"nightscoutDescription": "Connecte ton propre site Nightscout pour synchroniser les mesures de glucose en continu dans le panneau glucose.",
|
||
"nightscoutViewData": "Voir votre glycémie",
|
||
"nightscoutUrl": "URL Nightscout",
|
||
"nightscoutUrlSavedPlaceholder": "Enregistré — saisissez une nouvelle URL pour la remplacer",
|
||
"nightscoutToken": "Jeton d'API",
|
||
"nightscoutTokenOptional": "Facultatif pour un site public",
|
||
"nightscoutTokenSavedPlaceholder": "Enregistré — saisissez un nouveau jeton pour le remplacer",
|
||
"nightscoutTokenHelp": "Collez un jeton d'accès depuis les outils d'administration de Nightscout. Laissez vide si votre site est lisible publiquement.",
|
||
"nightscoutPrivateHost": "Ce site fonctionne sur un réseau privé",
|
||
"nightscoutPrivateHostHelp": "Activez uniquement si votre instance Nightscout est sur une adresse LAN, VPN ou Tailscale. Désactivé pour les sites publics.",
|
||
"nightscoutConnect": "Connecter",
|
||
"nightscoutUpdate": "Enregistrer les modifications",
|
||
"nightscoutConnected": "Nightscout connecté.",
|
||
"nightscoutConnectFailed": "Impossible de se connecter à Nightscout.",
|
||
"nightscoutDisconnect": "Déconnecter",
|
||
"nightscoutDisconnectTitle": "Déconnecter Nightscout ?",
|
||
"nightscoutDisconnectDescription": "Les synchronisations futures s'arrêtent. Les mesures de glycémie déjà importées restent dans votre historique.",
|
||
"polar": "Polar",
|
||
"polarDescription": "Connecte ton compte Polar pour synchroniser la récupération Nightly Recharge, les phases de sommeil et l'activité.",
|
||
"polarViewData": "Voir votre sommeil et récupération",
|
||
"polarHelp": "Connectez-vous à Polar pour accorder l'accès. Les données sont récupérées en arrière-plan une fois par heure.",
|
||
"polarCredentials": "Identifiants API",
|
||
"polarClientId": "Client ID",
|
||
"polarClientSecret": "Client Secret",
|
||
"polarCredentialsSaved": "Identifiants enregistrés",
|
||
"polarCredentialsSavedPlaceholder": "Enregistré — saisir de nouveaux pour remplacer",
|
||
"polarSaveCredentials": "Enregistrer",
|
||
"polarUnavailable": "Polar n'est pas configuré sur ce serveur. Ajoutez vos propres identifiants OAuth Polar ci-dessus, ou demandez à votre administrateur de configurer l'application partagée.",
|
||
"polarConnect": "Connecter Polar",
|
||
"polarDisconnect": "Déconnecter",
|
||
"polarDisconnectTitle": "Déconnecter Polar ?",
|
||
"polarDisconnectDescription": "Les synchronisations futures s'arrêtent. Les mesures déjà importées restent dans votre historique.",
|
||
"polarOauthConnected": "Polar connecté — la première synchronisation démarre en arrière-plan.",
|
||
"polarOauthFailed": "Échec de la connexion à Polar",
|
||
"polarOauthError": {
|
||
"csrf1": "La vérification de sécurité a échoué car le cookie du navigateur était absent. Veuillez relancer la connexion dans le même navigateur.",
|
||
"state": "La réponse de Polar ne correspondait à aucune demande de connexion en cours. Veuillez relancer la connexion.",
|
||
"cross_user": "La réponse appartient à une demande d'un autre compte. Veuillez relancer la connexion depuis votre propre compte.",
|
||
"nocode": "Polar n'a pas renvoyé de code d'autorisation. Réessayez et autorisez l'accès dans la fenêtre Polar.",
|
||
"nocreds": "Polar n'est pas configuré sur ce serveur. Demandez à votre administrateur d'ajouter les identifiants OAuth Polar.",
|
||
"token": "L'échange de jeton avec Polar a échoué. Veuillez relancer la connexion.",
|
||
"rate_limited": "Trop de tentatives de connexion. Patientez un instant et réessayez.",
|
||
"generic": "Erreur inconnue lors de la connexion. Veuillez relancer la connexion."
|
||
},
|
||
"oura": "Oura",
|
||
"ouraDescription": "Connecte ton compte Oura pour synchroniser readiness, phases de sommeil, variabilité cardiaque et activité quotidienne.",
|
||
"ouraViewData": "Voir votre sommeil et récupération",
|
||
"ouraHelp": "Connectez-vous à Oura pour accorder l'accès. Les données sont récupérées en arrière-plan une fois par heure.",
|
||
"ouraCredentials": "Identifiants API",
|
||
"ouraClientId": "Client ID",
|
||
"ouraClientSecret": "Client Secret",
|
||
"ouraCredentialsSaved": "Identifiants enregistrés",
|
||
"ouraCredentialsSavedPlaceholder": "Enregistré — saisir de nouveaux pour remplacer",
|
||
"ouraSaveCredentials": "Enregistrer",
|
||
"ouraUnavailable": "Oura n'est pas configuré sur ce serveur. Ajoutez vos propres identifiants OAuth Oura ci-dessus, ou demandez à votre administrateur de configurer l'application partagée.",
|
||
"ouraConnect": "Connecter Oura",
|
||
"ouraDisconnect": "Déconnecter",
|
||
"ouraDisconnectTitle": "Déconnecter Oura ?",
|
||
"ouraDisconnectDescription": "Les synchronisations futures s'arrêtent. Les mesures déjà importées restent dans votre historique.",
|
||
"ouraOauthConnected": "Oura connecté — la première synchronisation démarre en arrière-plan.",
|
||
"ouraOauthFailed": "Échec de la connexion à Oura",
|
||
"ouraOauthError": {
|
||
"csrf1": "La vérification de sécurité a échoué car le cookie du navigateur était absent. Veuillez relancer la connexion dans le même navigateur.",
|
||
"state": "La réponse d'Oura ne correspondait à aucune demande de connexion en cours. Veuillez relancer la connexion.",
|
||
"cross_user": "La réponse appartient à une demande d'un autre compte. Veuillez relancer la connexion depuis votre propre compte.",
|
||
"nocode": "Oura n'a pas renvoyé de code d'autorisation. Réessayez et autorisez l'accès dans la fenêtre Oura.",
|
||
"nocreds": "Oura n'est pas configuré sur ce serveur. Demandez à votre administrateur d'ajouter les identifiants OAuth Oura.",
|
||
"token": "L'échange de jeton avec Oura a échoué. Veuillez relancer la connexion.",
|
||
"rate_limited": "Trop de tentatives de connexion. Patientez un instant et réessayez.",
|
||
"generic": "Erreur inconnue lors de la connexion. Veuillez relancer la connexion."
|
||
},
|
||
"integrationSetupGuide": "Guide de configuration",
|
||
"coach": {
|
||
"activate": {
|
||
"title": "Activer le Coach",
|
||
"description": "Affiche le bouton et le panneau du Coach. Activé par défaut — désactivez-le pour masquer le Coach partout.",
|
||
"toggleAria": "Activer le bouton et le panneau du Coach",
|
||
"savedOn": "Coach activé.",
|
||
"savedOff": "Coach masqué.",
|
||
"saveError": "Impossible d enregistrer la modification. Veuillez réessayer."
|
||
}
|
||
},
|
||
"withingsDescriptionSecondary": "Les mesures arrivent dans ton tableau de bord en arrière-plan. Première fois ? Suis le",
|
||
"whoopDescriptionSecondary": "Les mesures arrivent dans ton tableau de bord en arrière-plan. Première fois ? Suis le",
|
||
"fitbitDescriptionSecondary": "Les mesures arrivent dans ton tableau de bord en arrière-plan. Première fois ? Suis le",
|
||
"polarDescriptionSecondary": "Les mesures arrivent dans ton tableau de bord en arrière-plan. Première fois ? Suis le",
|
||
"ouraDescriptionSecondary": "Les mesures arrivent dans ton tableau de bord en arrière-plan. Première fois ? Suis le",
|
||
"nightscoutDescriptionSecondary": "Les mesures arrivent dans ton tableau de bord en arrière-plan. Première fois ? Suis le",
|
||
"integrationCredentialsHint": "Où trouver ces identifiants et comment enregistrer ta propre application est expliqué dans le guide de configuration ci-dessus."
|
||
},
|
||
"admin": {
|
||
"title": "Administration",
|
||
"subtitle": "État du système, utilisateurs et paramètres",
|
||
"settingsSaveError": "Échec de l'enregistrement des paramètres",
|
||
"systemStatus": "État du système",
|
||
"systemStatusDescription": "État d’exécution de cette instance : base de données, worker et compteurs.",
|
||
"database": "Base de données",
|
||
"databaseConnected": "Connectée",
|
||
"databaseError": "Erreur",
|
||
"startedAt": "Démarré",
|
||
"users": "Utilisateurs",
|
||
"measurementsCount": "Mesures",
|
||
"activeTokens": "Jetons d'API actifs",
|
||
"activeSessions": "Sessions actives",
|
||
"loadingStatus": "Chargement de l'état...",
|
||
"systemStatusLoadError": "Échec du chargement de l'état du système.",
|
||
"systemStatusRetry": "Réessayer",
|
||
"adminSettingsLoadError": "Échec du chargement des paramètres d'administration. Les commutateurs ci-dessous peuvent ne pas refléter l'état actuel — actualisez la page.",
|
||
"hostMetrics": {
|
||
"title": "Charge de l'hôte",
|
||
"load1": "Charge (1 min)",
|
||
"memUsedPercent": "Mémoire",
|
||
"diskBusyPercent": "Disk I/O",
|
||
"last2hours": "2 dernières heures",
|
||
"empty": "Échantillonnage démarré — les données apparaissent dans 1 à 2 minutes.",
|
||
"loadError": "Échec du chargement des métriques de l'hôte. Essayez d'actualiser la page."
|
||
},
|
||
"aiServerKey": {
|
||
"title": "Clé IA du serveur",
|
||
"description": "Une clé de fournisseur à l'échelle de l'opérateur sur laquelle chaque compte peut se rabattre lorsqu'aucune clé personnelle n'est configurée.",
|
||
"byokHint": "La clé personnelle de l'utilisateur (BYOK, connexion ChatGPT ou fournisseur local) a toujours la priorité — la clé du serveur est la dernière étape de la chaîne de fournisseurs.",
|
||
"consentHint": "Les requêtes via la clé du serveur nécessitent le consentement IA actif de l'utilisateur ; sans justificatif de consentement, rien n'est envoyé.",
|
||
"statusConfigured": "Configurée",
|
||
"statusNotConfigured": "Non configurée",
|
||
"keyLabel": "Clé API",
|
||
"keyPlaceholder": "sk-...",
|
||
"keyPlaceholderSet": "Enregistrée ({preview}) — saisissez une nouvelle clé pour la remplacer",
|
||
"modelLabel": "Modèle",
|
||
"baseUrlLabel": "URL de base",
|
||
"save": "Enregistrer",
|
||
"remove": "Supprimer la clé",
|
||
"saved": "Paramètres de la clé IA du serveur enregistrés",
|
||
"error": "Échec de l'enregistrement de la clé IA du serveur"
|
||
},
|
||
"aiQuality": {
|
||
"title": "Qualité des analyses",
|
||
"loading": "Chargement du résumé des retours...",
|
||
"loadError": "Échec du chargement du résumé de qualité des analyses. Essayez d'actualiser la page.",
|
||
"empty": "Aucun retour pour l'instant. L'agrégateur s'exécute chaque jour à 04:00 — dès que les utilisateurs évaluent les recommandations, les taux d'utilité apparaissent ici.",
|
||
"windowLabel": "{days} derniers jours",
|
||
"generatedAtLabel": "Généré",
|
||
"colSeverity": "Gravité",
|
||
"colMetric": "Métrique",
|
||
"colProvider": "Fournisseur",
|
||
"colPromptVersion": "Prompt",
|
||
"colHelpful": "Utile",
|
||
"colNotHelpful": "Pas utile",
|
||
"colHelpfulRate": "Taux d'utilité"
|
||
},
|
||
"coachFeedback": {
|
||
"title": "Retours sur le Coach",
|
||
"loading": "Chargement du résumé des retours sur le Coach...",
|
||
"loadError": "Échec du chargement du résumé des retours sur le Coach. Essayez d'actualiser la page.",
|
||
"empty": "Aucun retour sur le Coach pour l'instant. L'agrégateur s'exécute chaque jour à 04:00 — dès que les utilisateurs évaluent les réponses du Coach, les taux d'utilité apparaissent ici.",
|
||
"windowLabel": "{days} derniers jours",
|
||
"generatedAtLabel": "Généré",
|
||
"colPromptVersion": "Version du prompt",
|
||
"colTone": "Ton",
|
||
"colVerbosity": "Niveau de détail",
|
||
"colHelpful": "Utile",
|
||
"colNotHelpful": "Pas utile",
|
||
"colN": "n",
|
||
"colHelpfulRate": "Taux d'utilité"
|
||
},
|
||
"workerStatus": "Worker de tâches",
|
||
"workerRunning": "En cours",
|
||
"workerStopped": "Arrêté",
|
||
"lastReminderCheck": "Dernière vérification des rappels",
|
||
"appSettings": "Paramètres de l'application",
|
||
"appSettingsDescription": "Valeurs globales par défaut pour l’inscription, la langue et le fuseau horaire des nouveaux comptes.",
|
||
"registrationEnabled": "Autoriser l'inscription",
|
||
"registrationEnabledDescription": "Lorsque cette option est désactivée, les nouveaux utilisateurs ne peuvent pas s'inscrire.",
|
||
"defaultLanguage": "Langue par défaut",
|
||
"defaultLanguageDescription": "Utilisé pour les nouveaux utilisateurs et comme solution de repli.",
|
||
"defaultUserTimezone": "Fuseau horaire par défaut pour les nouveaux comptes",
|
||
"defaultUserTimezoneDescription": "Utilisé pour les nouveaux comptes sans fuseau détecté par le navigateur. N'affecte pas les utilisateurs existants.",
|
||
"defaultUserTimezoneFallback": "Europe/Berlin (par défaut)",
|
||
"servicesGlobal": "Services (global)",
|
||
"servicesGlobalDescription": "Les services désactivés ne sont disponibles pour aucun utilisateur.",
|
||
"telegramGlobal": "Autoriser les notifications Telegram.",
|
||
"ntfyGlobal": "Autoriser les notifications ntfy.",
|
||
"webPushGlobal": "Autoriser les notifications push du navigateur.",
|
||
"moodLogGlobal": "Autoriser les rappels du journal d'humeur.",
|
||
"integrationWebPush": "Web Push",
|
||
"integrationBugReport": "Rapport de bug",
|
||
"offlineGeoLabel": "Données géographiques",
|
||
"offlineGeoEnabled": "Hors ligne (GeoLite2)",
|
||
"offlineGeoFallback": "Fallback (ipwho.is) — définissez MAXMIND_LICENSE_KEY dans la CI",
|
||
"apiGlobal": "Autoriser les points de terminaison d'API et les jetons d'API.",
|
||
"umamiTitle": "Umami",
|
||
"umamiDescription": "Analyse web avec Umami",
|
||
"glitchtipTitle": "GlitchTip",
|
||
"glitchtipDescription": "Suivi des erreurs avec GlitchTip",
|
||
"webPushVapidTitle": "Web Push VAPID",
|
||
"umamiEnabled": "Activer le suivi Umami.",
|
||
"umamiScriptUrl": "URL du script Umami",
|
||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||
"umamiWebsiteId": "ID du site web Umami",
|
||
"umamiWebsiteIdPlaceholder": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
|
||
"glitchtipEnabled": "Activer le suivi des erreurs GlitchTip.",
|
||
"glitchtipDsn": "GlitchTip DSN",
|
||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||
"glitchtipEnvironment": "Environnement GlitchTip",
|
||
"glitchtipEnvironmentPlaceholder": "production",
|
||
"webPushVapidDescription": "Configurez ici les clés VAPID et le subject pour que le push du navigateur fonctionne sans variables d'environnement.",
|
||
"webPushVapidPublicKey": "Clé publique VAPID",
|
||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||
"webPushVapidPrivateKey": "Clé privée VAPID",
|
||
"webPushVapidPrivateKeyPlaceholder": "Facultatif : saisissez une nouvelle clé privée",
|
||
"webPushVapidSubject": "Subject VAPID",
|
||
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
|
||
"webPushVapidGenerate": "Générer les clés",
|
||
"webPushVapidGenerating": "Génération…",
|
||
"webPushVapidGenerated": "Clés VAPID générées. Enregistrez le sujet pour terminer.",
|
||
"webPushVapidGenerateFailed": "Impossible de générer les clés VAPID.",
|
||
"webPushVapidGenerateConfirm": "Les clés VAPID sont déjà configurées. Générer une nouvelle paire invalide tous les abonnements push du navigateur — chaque appareil doit se réabonner. Continuer ?",
|
||
"webPushVapidGenerateConfirmTitle": "Régénérer les clés VAPID ?",
|
||
"webPushVapidRegenerate": "Régénérer",
|
||
"configured": "Configuré",
|
||
"monitoringTestSuccess": "Événement de test envoyé",
|
||
"monitoringTestFailed": "Échec du test de surveillance",
|
||
"bugReportGithub": "Rapport de bug (GitHub Issues)",
|
||
"bugReportGithubDescription": "Configurez le jeton d'issues GitHub et le dépôt pour les rapports de bug entrants.",
|
||
"bugReportEnabledLabel": "Rapports de bug activés",
|
||
"bugReportEnabledDescription": "Lorsque cette option est désactivée, le bouton de signalement dans l'app est masqué — le jeton et le dépôt restent configurés.",
|
||
"bugReportDeprecatedBadge": "Obsolète",
|
||
"bugReportDeprecatedNote": "Cette fonctionnalité est obsolète et sera supprimée dans une version future.",
|
||
"assistant": {
|
||
"title": "Surfaces d'assistance",
|
||
"description": "Chaque bascule masque une surface pilotée par le modèle dans toute l'application sans retirer la configuration du fournisseur. Le commutateur principal force chaque option secondaire à off.",
|
||
"master": {
|
||
"title": "Assistant activé",
|
||
"description": "Commutateur principal pour chaque surface pilotée par le modèle. Lorsqu'il est désactivé, toutes les options secondaires ci-dessous sont forcées à off."
|
||
},
|
||
"coach": {
|
||
"title": "Coach",
|
||
"description": "Drawer de chat, bouton de lancement, et la FAB mobile sur chaque page Insights."
|
||
},
|
||
"briefing": {
|
||
"title": "Briefing quotidien",
|
||
"description": "Carte de briefing, narration du hero strip, grille de recommandations, et l'action Régénérer."
|
||
},
|
||
"insightStatus": {
|
||
"title": "Cartes de statut",
|
||
"description": "Cartes de statut par métrique sur chaque sous-page /insights."
|
||
},
|
||
"correlations": {
|
||
"title": "Corrélations",
|
||
"description": "Narration de la tuile de corrélation sur la vue d'ensemble Insights."
|
||
},
|
||
"healthScoreExplainer": {
|
||
"title": "Explicateur de Health-Score",
|
||
"description": "L'icône ? près de la ligne de delta du Health-Score. Le chiffre du delta reste visible quoi qu'il arrive."
|
||
}
|
||
},
|
||
"modules": {
|
||
"title": "Disponibilité des modules",
|
||
"description": "Désactivez un module pour tout le serveur. Un module désactivé ici est coupé pour chaque compte, quelle que soit la préférence personnelle. Les domaines essentiels (poids, tension, pouls, médicaments) restent toujours actifs et ne peuvent pas être désactivés.",
|
||
"saveError": "Impossible de mettre à jour la disponibilité des modules."
|
||
},
|
||
"bugReportRepo": "Dépôt",
|
||
"bugReportRepoPlaceholder": "owner/repo",
|
||
"bugReportToken": "Jeton d'issue",
|
||
"bugReportTokenPlaceholder": "ghp_...",
|
||
"invites": {
|
||
"title": "Invitations",
|
||
"description": "Liens d'invitation pour l'inscription — ils fonctionnent même lorsque les inscriptions sont fermées. Le lien n'est affiché qu'une seule fois.",
|
||
"adminOnlyHint": "Seuls les administrateurs peuvent créer et révoquer des invitations.",
|
||
"create": "Créer une invitation",
|
||
"createTitle": "Créer une invitation",
|
||
"createDescription": "Le lien permet une inscription même lorsque les inscriptions sont fermées.",
|
||
"ttlLegend": "Valable pendant",
|
||
"createDays": "{days} jours",
|
||
"maxUsesLabel": "Utilisations maximales",
|
||
"maxUsesHint": "Nombre d'inscriptions que ce lien autorise (1–50).",
|
||
"createConfirm": "Créer l'invitation",
|
||
"createdToast": "Invitation créée.",
|
||
"createError": "Impossible de créer l'invitation.",
|
||
"tokenTitle": "Lien d'invitation",
|
||
"tokenOnceHint": "Copiable uniquement maintenant — copiez le lien ou faites scanner le code QR.",
|
||
"hashExplainer": "Seul un hachage du lien est stocké : il ne pourra plus être affiché. En cas de perte, révoquez l'invitation et créez-en une nouvelle.",
|
||
"copyLink": "Copier le lien",
|
||
"copiedToast": "Lien copié.",
|
||
"copyError": "Échec de la copie.",
|
||
"qrAlt": "Code QR du lien d'invitation",
|
||
"loadError": "Impossible de charger les invitations.",
|
||
"emptyTitle": "Aucune invitation pour l'instant",
|
||
"emptyDescription": "Créez un lien d'invitation pour admettre quelqu'un malgré des inscriptions fermées.",
|
||
"colStatus": "Statut",
|
||
"colCreated": "Créée",
|
||
"colExpires": "Expire",
|
||
"colUses": "Utilisations",
|
||
"colRedeemedBy": "Utilisée par",
|
||
"colActions": "Actions",
|
||
"byCreator": "par {by}",
|
||
"expiresInDaysOne": "dans 1 jour",
|
||
"expiresInDaysOther": "dans {count} jours",
|
||
"statusActive": "Active",
|
||
"statusExpired": "Expirée",
|
||
"statusExhausted": "Épuisée",
|
||
"statusRevoked": "Révoquée",
|
||
"redeemerDeleted": "compte supprimé",
|
||
"redeemedByMore": "{username} + {count} autres",
|
||
"redemptionsTitle": "{count} utilisations",
|
||
"revoke": "Révoquer",
|
||
"revokeAria": "Révoquer l'invitation",
|
||
"revokeConfirmTitle": "Révoquer cette invitation ?",
|
||
"revokeConfirmBody": "Le lien d'invitation devient immédiatement invalide. Les comptes déjà créés avec ce lien sont conservés et l'historique des utilisations reste visible.",
|
||
"revokeConfirmAction": "Révoquer",
|
||
"cancel": "Annuler",
|
||
"revokedToast": "Invitation révoquée.",
|
||
"revokeError": "Impossible de révoquer l'invitation."
|
||
},
|
||
"userManagement": "Gestion des utilisateurs",
|
||
"userManagementDescription": "Gérez les comptes : rôles, réinitialisations de mot de passe et déconnexions forcées.",
|
||
"userName": "Nom",
|
||
"userEmail": "E-mail",
|
||
"userRole": "Rôle",
|
||
"userPasskeys": "Passkeys",
|
||
"userCreated": "Créé",
|
||
"userActions": "Actions",
|
||
"editUser": "Modifier l'utilisateur",
|
||
"editUserTitle": "Modifier l'utilisateur : {name}",
|
||
"demoteToUser": "Rétrograder en utilisateur",
|
||
"promoteToAdmin": "Promouvoir administrateur",
|
||
"toUser": "Définir comme utilisateur",
|
||
"toAdmin": "Définir comme administrateur",
|
||
"ownRoleUnchangeable": "Impossible de modifier son propre rôle",
|
||
"resetPassword": "Réinitialiser le mot de passe",
|
||
"resetPasswordTitle": "Réinitialiser le mot de passe : {name}",
|
||
"newPassword": "Nouveau mot de passe",
|
||
"newPasswordPlaceholder": "Au moins 12 caractères",
|
||
"passwordReset": "Le mot de passe a été réinitialisé",
|
||
"reset": "Réinitialiser",
|
||
"loadingUsers": "Chargement des utilisateurs...",
|
||
"apiTokens": "Jetons d'API",
|
||
"apiTokensDescription": "Tous les jetons d’API actifs et révoqués de l’ensemble des comptes.",
|
||
"tokenUser": "Utilisateur",
|
||
"tokenName": "Nom",
|
||
"tokenPermissions": "Autorisations",
|
||
"tokenPermissionAll": "Tout",
|
||
"tokenPermissionAllTooltip": "Autorisation joker — ce jeton peut appeler toutes les routes de l'API.",
|
||
"tokenStatus": "Statut",
|
||
"tokenLastUsed": "Dernière utilisation",
|
||
"tokenCreated": "Créé",
|
||
"tokenNeverUsed": "Jamais",
|
||
"tokensEmptyTitle": "Aucun jeton d'API pour l'instant",
|
||
"tokensEmptyDescription": "Les jetons sont émis lorsqu'un client natif se connecte ou via Paramètres → Compte.",
|
||
"loginOverview": "Aperçu des connexions",
|
||
"loginOverviewDescription": "Événements de connexion et d’authentification de tous les comptes, filtrables et exportables en CSV.",
|
||
"allAuthEvents": "Tous les événements d'authentification",
|
||
"failedOnly": "Échecs uniquement",
|
||
"loginEmptyDescription": "Les connexions, déconnexions et modifications de passkey apparaîtront ici.",
|
||
"loginEmptyFailedTitle": "Aucune tentative de connexion échouée",
|
||
"loginEmptyFailedDescription": "C'est l'état sûr. Passez à tous les événements pour voir les connexions réussies.",
|
||
"loginEmptyResetFilter": "Afficher tous les événements",
|
||
"showingEntries": "Affichage de {count} sur {total} entrées d'authentification",
|
||
"status": "Statut",
|
||
"action": "Action",
|
||
"ip": "IP",
|
||
"location": "Emplacement",
|
||
"timestamp": "Heure",
|
||
"provider": "Fournisseur",
|
||
"providerPassword": "Mot de passe",
|
||
"providerPasskey": "Passkey",
|
||
"providerApiToken": "Jeton d'API",
|
||
"providerWithings": "Withings",
|
||
"providerUnknown": "Inconnu",
|
||
"outcome": "Résultat",
|
||
"outcomeSuccess": "Succès",
|
||
"outcomeFailed": "Échec",
|
||
"auditDetails": "Détails",
|
||
"deleteAllData": "Supprimer toutes les données globalement",
|
||
"deleteAllDescription": "Supprime toutes les données de mesures, de médicaments, d'intégrations et de journaux pour tous les utilisateurs. Les comptes utilisateurs sont conservés.",
|
||
"deleteAllConfirm": "Vraiment supprimer toutes les données ?",
|
||
"deleteAllConfirmDescription": "Cette action supprimera définitivement toutes les mesures, médicaments, événements de prise, jetons d'API, connexions Withings, défis d'authentification ouverts, canaux de notification (Telegram, ntfy, Web Push), abonnements push et suppressions de messages Telegram en file d'attente pour tous les utilisateurs. Les comptes utilisateurs, le journal d'audit et les retours soumis sont conservés afin que l'effacement reste traçable et que les rapports de bug restent triables.",
|
||
"deleteButton": "Supprimer toutes les données",
|
||
"deleteAllPromptLabel": "Tapez {token} pour continuer",
|
||
"finalDelete": "Supprimer définitivement",
|
||
"deletedResult": "Deleted: {measurements} measurements, {medications} Médicaments,{intakeEvents} intakes, {apiTokens} API tokens, {withingsConnections} Withings connections, {authChallenges} auth challenges, {notificationChannels} notification channels, {pushSubscriptions} push subscriptions, {telegramScheduledDeletions} queued Telegram deletions. Feedback rows preserved.",
|
||
"authRegister": "Inscription",
|
||
"authLogin": "Connexion",
|
||
"authLoginPasskey": "Connexion par passkey",
|
||
"authLoginPassword": "Connexion par mot de passe",
|
||
"authLoginFailed": "Échec",
|
||
"authLogout": "Déconnexion",
|
||
"authPasskeyRegister": "Passkey ajoutée",
|
||
"authPasskeyDelete": "Passkey supprimée",
|
||
"authTokenAutoissueNative": "Jeton de client natif émis",
|
||
"authTokenRefresh": "Jeton renouvelé",
|
||
"authTokenRevoke": "Jeton révoqué",
|
||
"medicationReminders": "Rappels de médicaments",
|
||
"medicationRemindersDescription": "Seuils des transitions de couleur des badges de rappel sur les fiches de médicaments.",
|
||
"notificationHealth": {
|
||
"title": "État de distribution",
|
||
"description": "Résultats de distribution de tous les utilisateurs sur les dernières 24 heures.",
|
||
"empty": "Aucune notification envoyée sur cette période.",
|
||
"ok": "OK",
|
||
"error": "Échecs",
|
||
"skipped": "Ignorées",
|
||
"autoDisabled": "Canaux désactivés automatiquement"
|
||
},
|
||
"reminderLateMinutes": "Seuil de retard (minutes)",
|
||
"reminderLateMinutesDescription": "Minutes après la fin de la fenêtre avant que le badge passe du jaune à l'orange.",
|
||
"reminderMissedMinutes": "Seuil d'oubli (minutes)",
|
||
"reminderMissedMinutesDescription": "Minutes après la fin de la fenêtre avant que la prise soit considérée comme manquée.",
|
||
"notificationTestSend": "Envoyer un test",
|
||
"notificationTestSuccess": "Notification de test envoyée",
|
||
"notificationTestFailed": "Échec de l'envoi de la notification de test",
|
||
"reminderCheckRun": "Lancer la vérification des rappels",
|
||
"reminderCheckSuccess": "Vérification des rappels terminée",
|
||
"reminderCheckFailed": "Échec de la vérification des rappels",
|
||
"reminderCheckResults": "Résultats",
|
||
"reminderCheckNotifOn": "Notifications activées",
|
||
"reminderCheckNotifOff": "Notifications désactivées",
|
||
"reminderCheckEventsToday": "Événements aujourd'hui",
|
||
"reminderCheckNotifSent": "Envoyées",
|
||
"feedback": {
|
||
"tabOpen": "Ouvert",
|
||
"tabAcknowledged": "Pris en compte",
|
||
"tabResolved": "Résolu",
|
||
"tabArchived": "Archivé",
|
||
"subject": "Sujet",
|
||
"category": "Catégorie",
|
||
"user": "Utilisateur",
|
||
"createdAt": "Soumis",
|
||
"actions": "Actions",
|
||
"details": "Détails",
|
||
"emptyTitle": "Tout est à jour",
|
||
"emptyDescription": "Aucun retour utilisateur dans ce statut. Les bugs, questions et demandes de fonctionnalités soumis apparaîtront ici.",
|
||
"loading": "Chargement des retours...",
|
||
"anonymous": "anonyme",
|
||
"categoryBug": "Bug",
|
||
"categoryFeature": "Fonctionnalité",
|
||
"categoryQuestion": "Question",
|
||
"categoryOther": "Autre",
|
||
"metadataHeading": "Métadonnées",
|
||
"metaUrl": "URL",
|
||
"metaLocale": "Langue",
|
||
"metaUserAgent": "Agent utilisateur",
|
||
"metaAppVersion": "Version de l'app",
|
||
"screenshotHeading": "Screenshot",
|
||
"adminNote": "Note d'administration",
|
||
"adminNotePlaceholder": "Note interne (non visible par l'utilisateur)",
|
||
"saveNote": "Enregistrer la note",
|
||
"noteSaved": "Note enregistrée",
|
||
"actionAcknowledge": "Prendre en compte",
|
||
"actionResolve": "Résoudre",
|
||
"actionArchive": "Archiver",
|
||
"actionPublishGithub": "Publier sur GitHub",
|
||
"publishedToGithub": "Publié sur GitHub",
|
||
"viewIssue": "Voir l'issue",
|
||
"publishSuccess": "Issue créée",
|
||
"publishFailed": "Échec de la publication sur GitHub",
|
||
"updateFailed": "Échec de la mise à jour",
|
||
"archiveConfirm": "Archiver cette entrée de retour ?",
|
||
"submittedBy": "Soumis par"
|
||
},
|
||
"shell": {
|
||
"overview": "Vue d'ensemble",
|
||
"sectionsNav": "Sections d'administration"
|
||
},
|
||
"overview": {
|
||
"welcomeTitle": "Bienvenue,{name}",
|
||
"welcomeSubtitle": "Vous êtes connecté en tant qu'administrateur. Choisissez une section pour gérer HealthLog.",
|
||
"snapshotTitle": "Instantané du système",
|
||
"snapshotVersion": "Version",
|
||
"snapshotDatabase": "Base de données",
|
||
"snapshotWorker": "Worker",
|
||
"snapshotStarted": "Démarré",
|
||
"snapshotBuildSha": "Build SHA",
|
||
"snapshotBuiltAt": "Compilé le",
|
||
"snapshotOfflineGeo": "Données géographiques",
|
||
"snapshotOfflineGeoOn": "Hors ligne (GeoLite2)",
|
||
"snapshotOfflineGeoOff": "Fallback (ipwho.is)",
|
||
"versionTileTitle": "Version",
|
||
"versionTileVersion": "Version en cours",
|
||
"versionTileBuildSha": "SHA de build",
|
||
"versionTileBuiltAt": "Compilé le",
|
||
"versionTileUpdateAvailable": "Mise à jour disponible : {tag}",
|
||
"versionTileUpToDate": "À jour",
|
||
"snapshotLoadError": "Échec du chargement de l'instantané du système.",
|
||
"snapshotLoading": "Chargement de l'instantané...",
|
||
"auditTitle": "Activité récente",
|
||
"auditEmpty": "Aucune entrée d'audit récente.",
|
||
"auditLoadError": "Échec du chargement de l'activité récente.",
|
||
"auditLoading": "Chargement de l'activité...",
|
||
"auditViewAll": "Tout afficher"
|
||
},
|
||
"section": {
|
||
"system-status": {
|
||
"title": "État du système",
|
||
"subtitle": "État du worker, de la base de données et des intégrations en un coup d'œil."
|
||
},
|
||
"general": {
|
||
"title": "Général",
|
||
"subtitle": "Inscription, langue par défaut et autres commutateurs applicables à toute l'application."
|
||
},
|
||
"services": {
|
||
"title": "Services",
|
||
"subtitle": "Activez ou désactivez les canaux de notification et les intégrations à l'échelle du système."
|
||
},
|
||
"integrations": {
|
||
"title": "Intégrations",
|
||
"subtitle": "Configurez Umami, GlitchTip, Web Push et les rapports de bug."
|
||
},
|
||
"coach": {
|
||
"title": "Coach",
|
||
"subtitle": "Surfaces d'assistance, clé du serveur et les tableaux de qualité des retours du Coach et des analyses, au même endroit."
|
||
},
|
||
"feedback": {
|
||
"title": "Retours",
|
||
"subtitle": "Triez les retours utilisateurs, les rapports de bug et les demandes de fonctionnalités."
|
||
},
|
||
"reminders": {
|
||
"title": "Rappels",
|
||
"subtitle": "Réglez les seuils des rappels de médicaments et lancez une vérification manuelle."
|
||
},
|
||
"users": {
|
||
"title": "Utilisateurs",
|
||
"subtitle": "Gérez les comptes utilisateurs, les rôles et les sessions actives.",
|
||
"filter": {
|
||
"all": "Tout",
|
||
"admin": "Administrateurs",
|
||
"user": "Utilisateurs"
|
||
},
|
||
"forceLogout": "Forcer la déconnexion",
|
||
"forceLogoutConfirmTitle": "Forcer la déconnexion de {name} ?",
|
||
"forceLogoutConfirmBody": "Toutes les sessions actives de cet utilisateur seront révoquées. Il devra se reconnecter sur chaque appareil.",
|
||
"forceLogoutSuccess": "{name} déconnecté de {count} session(s)",
|
||
"forceLogoutFailed": "Échec de la déconnexion forcée",
|
||
"cannotLogoutSelf": "Impossible de forcer votre propre déconnexion",
|
||
"emptyTitle": "Aucun utilisateur dans cette vue",
|
||
"emptyDescription": "Aucun utilisateur ne correspond au filtre actuel.",
|
||
"emptyResetFilter": "Afficher tous les utilisateurs"
|
||
},
|
||
"invites": {
|
||
"title": "Invitations",
|
||
"subtitle": "Créer, suivre et révoquer les liens d'invitation."
|
||
},
|
||
"api-tokens": {
|
||
"title": "Jetons d'API",
|
||
"subtitle": "Jetons bearer actifs émis aux clients natifs et aux intégrations."
|
||
},
|
||
"login-overview": {
|
||
"title": "Aperçu des connexions",
|
||
"subtitle": "Journal d'audit des événements d'authentification et d'administration."
|
||
},
|
||
"auditLog": {
|
||
"filterActor": "Acteur (ID utilisateur ou nom d'utilisateur)",
|
||
"filterAction": "Action",
|
||
"filterActionAll": "Toutes les actions",
|
||
"filterTarget": "Cible (ID ou chemin)",
|
||
"filterDate": "Plage de dates",
|
||
"range24h": "Dernières 24 heures",
|
||
"range7d": "7 derniers jours",
|
||
"range30d": "30 derniers jours",
|
||
"rangeAll": "Toute la période",
|
||
"perPage": "Par page",
|
||
"prev": "Précédent",
|
||
"next": "Suivant",
|
||
"pageOf": "Page {page} sur {total}",
|
||
"export": "Exporter en CSV",
|
||
"empty": "Aucune entrée d'audit ne correspond aux filtres actuels."
|
||
},
|
||
"app-logs": {
|
||
"title": "Journaux de l'app",
|
||
"subtitle": "Affichez les wide-events structurés les plus récents émis par ce processus.",
|
||
"processNote": "Seuls les journaux du processus de l'app sont affichés — ceux du processus worker vont vers Loki lorsque cette intégration est configurée. Le tampon est volatil et limité à 500 entrées.",
|
||
"filterTraceId": "ID de trace",
|
||
"filterAction": "L'action contient…",
|
||
"filterLevel": "Niveau",
|
||
"levelAll": "Tous les niveaux",
|
||
"filterRange": "Fenêtre temporelle",
|
||
"range15m": "15 dernières minutes",
|
||
"range1h": "Dernière heure",
|
||
"range6h": "6 dernières heures",
|
||
"rangeAll": "Tampon entier",
|
||
"colLevel": "Niveau",
|
||
"colTimestamp": "Horodatage",
|
||
"colAction": "Action",
|
||
"colDuration": "Durée",
|
||
"colTraceId": "Trace",
|
||
"showing": "Affichage de {count} sur jusqu'à {bufferMax} événements en mémoire tampon",
|
||
"empty": "Le tampon est vide",
|
||
"emptyDescription": "Aucun événement ne correspond encore aux filtres actuels. Cliquez sur Actualiser après avoir généré du trafic.",
|
||
"refresh": "Actualiser",
|
||
"eventDetails": "Détails de l'événement",
|
||
"closeDetails": "Fermer les détails"
|
||
},
|
||
"backups": {
|
||
"title": "Sauvegardes",
|
||
"subtitle": "Instantanés de données hebdomadaires par utilisateur stockés dans PostgreSQL.",
|
||
"description": "Chaque utilisateur dispose d'un instantané glissant par type de sauvegarde. Les tailles indiquent le blob chiffré — les contenus ne sont pas téléchargeables depuis cette page.",
|
||
"runNow": "Sauvegarder maintenant",
|
||
"runEnqueued": "Tâche de sauvegarde mise en file d'attente",
|
||
"runFailed": "Échec de la mise en file d'attente de la sauvegarde",
|
||
"loading": "Chargement des sauvegardes...",
|
||
"loadError": "Échec du chargement des sauvegardes.",
|
||
"emptyTitle": "Aucune sauvegarde pour l'instant",
|
||
"emptyDescription": "Les sauvegardes s'exécutent automatiquement chaque dimanche à 03:00 — ou lancez-en une maintenant pour créer le premier instantané.",
|
||
"colUser": "Utilisateur",
|
||
"colType": "Type",
|
||
"typeWeeklyAuto": "Hebdomadaire (auto)",
|
||
"typeManual": "Manuelle",
|
||
"colSize": "Taille",
|
||
"colCreatedAt": "Dernier instantané",
|
||
"colActions": "Actions",
|
||
"retentionLabel": "Conservation : {days} jours",
|
||
"download": "Télécharger",
|
||
"downloadAria": "Télécharger la sauvegarde de {username}",
|
||
"downloadFailed": "Échec du téléchargement",
|
||
"downloadStarted": "Téléchargement démarré",
|
||
"uploadTitle": "Téléverser une sauvegarde",
|
||
"uploadDescription": "Validez un fichier de sauvegarde et stockez-le comme instantané manuel. La restauration est une étape distincte.",
|
||
"uploadButton": "Téléverser un fichier",
|
||
"uploadHelp": "Fichier JSON correspondant au schéma de sauvegarde actuel. Max 10 Mo.",
|
||
"uploadSuccess": "Sauvegarde téléversée ({count} enregistrements)",
|
||
"uploadFailed": "Échec du téléversement",
|
||
"restore": "Restaurer",
|
||
"restoreAria": "Restaurer à partir de la sauvegarde de {username}",
|
||
"restoreTitle": "Restaurer à partir d'une sauvegarde",
|
||
"restoreDescription": "Cette action remplacera TOUTES les données actuelles de {username} par l'instantané du {when}. Les mesures, médicaments, événements de prise, entrées d'humeur, canaux de notification, abonnements push et suppressions Telegram en file d'attente existants seront supprimés.",
|
||
"restorePromptLabel": "Tapez RESTORE pour continuer",
|
||
"restoreConfirm": "Restaurer maintenant",
|
||
"restoreInProgress": "Restauration en cours...",
|
||
"restoreSuccess": "Restauration terminée",
|
||
"restoreFailed": "Échec de la restauration",
|
||
"docsLink": "Documentation"
|
||
},
|
||
"danger-zone": {
|
||
"title": "Zone de danger",
|
||
"subtitle": "Opérations destructrices à l'échelle du système."
|
||
},
|
||
"about": {
|
||
"title": "À propos",
|
||
"subtitle": "Version, licence et état des mises à jour."
|
||
},
|
||
"module-availability": {
|
||
"title": "Disponibilité des modules",
|
||
"subtitle": "Activez ou désactivez les modules pour tous les comptes de ce serveur."
|
||
}
|
||
},
|
||
"carrier": "Opérateur",
|
||
"carrierUnavailableGeoFallback": "{location} — opérateur indisponible"
|
||
},
|
||
"achievements": {
|
||
"title": "Réussites",
|
||
"subtitle": "Débloquez des réussites en suivant votre santé et en prenant vos médicaments à temps.",
|
||
"loginRequired": "Connectez-vous pour voir les réussites.",
|
||
"points": "Points",
|
||
"unlocked": "Débloqué",
|
||
"nextGoal": "Prochain objectif",
|
||
"allCompleted": "Toutes les réussites débloquées !",
|
||
"completed": "Terminé",
|
||
"goalReached": "Objectif atteint",
|
||
"remainingUnlocks": "{count} encore à débloquer",
|
||
"noneUnlockedYet": "Aucune réussite débloquée pour l’instant.",
|
||
"pointsValue": "{points} points",
|
||
"metricCount": "{count}",
|
||
"metricDays": "{count} jours",
|
||
"metricPercent": "{count}%",
|
||
"badges": {
|
||
"intakeTotal1": {
|
||
"title": "Première prise",
|
||
"description": "Enregistrez votre première prise de médicament."
|
||
},
|
||
"intakeTotal10": {
|
||
"title": "Débutant des prises",
|
||
"description": "Enregistrez 10 prises de médicaments."
|
||
},
|
||
"intakeTotal50": {
|
||
"title": "Routine des prises",
|
||
"description": "Enregistrez 50 prises de médicaments."
|
||
},
|
||
"intakeTotal150": {
|
||
"title": "Expert des prises",
|
||
"description": "Enregistrez 150 prises de médicaments."
|
||
},
|
||
"intakeTotal300": {
|
||
"title": "Légende des prises",
|
||
"description": "Enregistrez 300 prises de médicaments."
|
||
},
|
||
"overIntake1": {
|
||
"title": "Double dose",
|
||
"description": "Prenez votre médicament au moins une fois de plus que prévu."
|
||
},
|
||
"skippedIntake1": {
|
||
"title": "Pause prise",
|
||
"description": "Sautez au moins une prise prévue."
|
||
},
|
||
"passkeyCreated1": {
|
||
"title": "Clé d’accès configurée",
|
||
"description": "Créez votre première clé d’accès."
|
||
},
|
||
"passkeyLogin1": {
|
||
"title": "Connexion par clé d’accès",
|
||
"description": "Connectez-vous au moins une fois avec une clé d’accès."
|
||
},
|
||
"passwordLogin1": {
|
||
"title": "À l’ancienne",
|
||
"description": "Connectez-vous au moins une fois avec un identifiant et un mot de passe."
|
||
},
|
||
"bugReport1": {
|
||
"title": "Chasseur de bugs",
|
||
"description": "Soumettez un rapport de bug."
|
||
},
|
||
"loginStreak7": {
|
||
"title": "Série de connexions 7j",
|
||
"description": "Connectez-vous 7 jours d’affilée."
|
||
},
|
||
"loginStreak30": {
|
||
"title": "Série de connexions 30j",
|
||
"description": "Connectez-vous 30 jours d’affilée."
|
||
},
|
||
"onTimePerfect1": {
|
||
"title": "À l’heure 1j",
|
||
"description": "Prenez tous vos médicaments à l’heure pendant 1 jour."
|
||
},
|
||
"compliance801": {
|
||
"title": "Observance 80% · 1j",
|
||
"description": "Atteignez au moins 80% d’observance sur 30 jours pendant 1 jour."
|
||
},
|
||
"bmiGreen1": {
|
||
"title": "IMC au vert · 1j",
|
||
"description": "Maintenez votre IMC dans la plage normale pendant 1 jour."
|
||
},
|
||
"bpGreen1": {
|
||
"title": "Tension au vert · 1j",
|
||
"description": "Maintenez votre tension dans la plage normale pendant 1 jour."
|
||
},
|
||
"pulseGreen1": {
|
||
"title": "Pouls au vert · 1j",
|
||
"description": "Maintenez votre pouls au repos dans la plage normale pendant 1 jour."
|
||
},
|
||
"onTimePerfect7": {
|
||
"title": "À l’heure 7j",
|
||
"description": "Prenez tous vos médicaments à l’heure pendant 7 jours d’affilée."
|
||
},
|
||
"compliance807": {
|
||
"title": "Observance 80% · 7j",
|
||
"description": "Atteignez au moins 80% d’observance sur 30 jours pendant 7 jours d’affilée."
|
||
},
|
||
"bmiGreen7": {
|
||
"title": "IMC au vert · 7j",
|
||
"description": "Maintenez votre IMC dans la plage normale pendant 7 jours d’affilée."
|
||
},
|
||
"bpGreen7": {
|
||
"title": "Tension au vert · 7j",
|
||
"description": "Maintenez votre tension dans la plage normale pendant 7 jours d’affilée."
|
||
},
|
||
"pulseGreen7": {
|
||
"title": "Pouls au vert · 7j",
|
||
"description": "Maintenez votre pouls au repos dans la plage normale pendant 7 jours d’affilée."
|
||
},
|
||
"onTimePerfect30": {
|
||
"title": "À l’heure 30j",
|
||
"description": "Prenez tous vos médicaments à l’heure pendant 30 jours d’affilée."
|
||
},
|
||
"compliance8030": {
|
||
"title": "Observance 80% · 30j",
|
||
"description": "Atteignez au moins 80% d’observance sur 30 jours pendant 30 jours d’affilée."
|
||
},
|
||
"bmiGreen30": {
|
||
"title": "IMC au vert · 30j",
|
||
"description": "Maintenez votre IMC dans la plage normale pendant 30 jours d’affilée."
|
||
},
|
||
"bpGreen30": {
|
||
"title": "Tension au vert · 30j",
|
||
"description": "Maintenez votre tension dans la plage normale pendant 30 jours d’affilée."
|
||
},
|
||
"pulseGreen30": {
|
||
"title": "Pouls au vert · 30j",
|
||
"description": "Maintenez votre pouls au repos dans la plage normale pendant 30 jours d’affilée."
|
||
},
|
||
"onTimePerfect180": {
|
||
"title": "À l’heure 180j",
|
||
"description": "Prenez tous vos médicaments à l’heure pendant 180 jours d’affilée."
|
||
},
|
||
"compliance80180": {
|
||
"title": "Observance 80% · 180j",
|
||
"description": "Atteignez au moins 80% d’observance sur 30 jours pendant 180 jours d’affilée."
|
||
},
|
||
"bmiGreen180": {
|
||
"title": "IMC au vert · 180j",
|
||
"description": "Maintenez votre IMC dans la plage normale pendant 180 jours d’affilée."
|
||
},
|
||
"bpGreen180": {
|
||
"title": "Tension au vert · 180j",
|
||
"description": "Maintenez votre tension dans la plage normale pendant 180 jours d’affilée."
|
||
},
|
||
"pulseGreen180": {
|
||
"title": "Pouls au vert · 180j",
|
||
"description": "Maintenez votre pouls au repos dans la plage normale pendant 180 jours d’affilée."
|
||
},
|
||
"onTimePerfect360": {
|
||
"title": "À l’heure 360j",
|
||
"description": "Prenez tous vos médicaments à l’heure pendant 360 jours d’affilée."
|
||
},
|
||
"compliance80360": {
|
||
"title": "Observance 80% · 360j",
|
||
"description": "Atteignez au moins 80% d’observance sur 30 jours pendant 360 jours d’affilée."
|
||
},
|
||
"bmiGreen360": {
|
||
"title": "IMC au vert · 360j",
|
||
"description": "Maintenez votre IMC dans la plage normale pendant 360 jours d’affilée."
|
||
},
|
||
"bpGreen360": {
|
||
"title": "Tension au vert · 360j",
|
||
"description": "Maintenez votre tension dans la plage normale pendant 360 jours d’affilée."
|
||
},
|
||
"pulseGreen360": {
|
||
"title": "Pouls au vert · 360j",
|
||
"description": "Maintenez votre pouls au repos dans la plage normale pendant 360 jours d’affilée."
|
||
},
|
||
"moodFirst": {
|
||
"title": "Première humeur",
|
||
"description": "Enregistrez votre première entrée d’humeur."
|
||
},
|
||
"moodStreak7": {
|
||
"title": "Journal d’humeur 7j",
|
||
"description": "Enregistrez une humeur 7 jours d’affilée."
|
||
},
|
||
"moodStreak30": {
|
||
"title": "Journal d’humeur 30j",
|
||
"description": "Enregistrez une humeur 30 jours d’affilée."
|
||
},
|
||
"moodUp7": {
|
||
"title": "Semaine plus lumineuse",
|
||
"description": "Votre moyenne d’humeur sur 7 jours s’est améliorée d’au moins 1,0 point par rapport à la semaine précédente."
|
||
},
|
||
"weightFirst": {
|
||
"title": "Première pesée",
|
||
"description": "Enregistrez votre première mesure de poids."
|
||
},
|
||
"weight50": {
|
||
"title": "Cinquante pesées",
|
||
"description": "Enregistrez 50 mesures de poids."
|
||
},
|
||
"weight200": {
|
||
"title": "200 pesées",
|
||
"description": "Enregistrez 200 mesures de poids."
|
||
},
|
||
"bpFirst": {
|
||
"title": "Première mesure",
|
||
"description": "Enregistrez votre première mesure de tension."
|
||
},
|
||
"bp50": {
|
||
"title": "Cinquante mesures de tension",
|
||
"description": "Enregistrez 50 mesures de tension."
|
||
},
|
||
"bp200": {
|
||
"title": "200 mesures de tension",
|
||
"description": "Enregistrez 200 mesures de tension."
|
||
},
|
||
"pulseFirst": {
|
||
"title": "Premier pouls",
|
||
"description": "Enregistrez votre première mesure de pouls."
|
||
},
|
||
"consistentMonth": {
|
||
"title": "Mois régulier",
|
||
"description": "Enregistrez des entrées sur au moins 25 jours différents au cours d’un même mois calendaire."
|
||
},
|
||
"entryStreak7": {
|
||
"title": "Série de suivis 7j",
|
||
"description": "Enregistrez au moins une entrée 7 jours d’affilée."
|
||
},
|
||
"entryStreak30": {
|
||
"title": "Série de suivis 30j",
|
||
"description": "Enregistrez au moins une entrée 30 jours d’affilée."
|
||
},
|
||
"weekendWarrior": {
|
||
"title": "Suivi du week-end",
|
||
"description": "Enregistrez des entrées sur 4 week-ends consécutifs (samedi + dimanche)."
|
||
},
|
||
"hiddenNightOwl": {
|
||
"title": "Oiseau de nuit",
|
||
"description": "Vous avez enregistré une entrée entre 02h00 et 04h00 du matin."
|
||
},
|
||
"hiddenEarlyBird": {
|
||
"title": "Lève-tôt",
|
||
"description": "Vous avez enregistré une entrée entre 04h00 et 06h00 du matin."
|
||
},
|
||
"hiddenLeapDay": {
|
||
"title": "Légende du jour bissextile",
|
||
"description": "Vous avez enregistré une entrée le 29 février."
|
||
},
|
||
"hiddenDoctorPdf": {
|
||
"title": "Visite à domicile",
|
||
"description": "Vous avez exporté votre premier rapport médical en PDF."
|
||
},
|
||
"hiddenLocaleFlip": {
|
||
"title": "Polyglotte",
|
||
"description": "Vous avez changé la langue de l’application au moins une fois."
|
||
},
|
||
"hiddenBugBuddy": {
|
||
"title": "Compagnon des bugs",
|
||
"description": "Vous avez soumis au moins 5 rapports de bug — le projet vous adore."
|
||
},
|
||
"missFree7": {
|
||
"title": "Aucune dose oubliée · 7j",
|
||
"description": "7 jours consécutifs sans dose oubliée."
|
||
},
|
||
"missFree30": {
|
||
"title": "Aucune dose oubliée · 30j",
|
||
"description": "30 jours consécutifs sans dose oubliée."
|
||
},
|
||
"missFree90": {
|
||
"title": "Aucune dose oubliée · 90j",
|
||
"description": "90 jours consécutifs sans dose oubliée."
|
||
},
|
||
"measurementWeeks4": {
|
||
"title": "Routine de mesure",
|
||
"description": "4 semaines consécutives avec des mesures au moins 5 jours par semaine."
|
||
},
|
||
"selfContextComplete": {
|
||
"title": "Auto-déclaration à jour",
|
||
"description": "Les quatre champs de l’auto-déclaration sont remplis — le Coach connaît votre contexte."
|
||
},
|
||
"sleepLog7": {
|
||
"title": "Journal de sommeil · 7j",
|
||
"description": "Données de sommeil enregistrées pendant 7 jours consécutifs."
|
||
}
|
||
},
|
||
"nextProgressLabel": "Progression avant déblocage",
|
||
"completedOn": "Terminé le {date}",
|
||
"locked": "Verrouillé",
|
||
"criterionHint": "{current} / {target}",
|
||
"progressPercent": "{percent}%",
|
||
"categories": {
|
||
"medication": "Médicament",
|
||
"vitals": "Constantes vitales",
|
||
"mood": "Humeur",
|
||
"security": "Compte et sécurité",
|
||
"engagement": "Engagement",
|
||
"hidden": "Caché"
|
||
},
|
||
"hiddenCard": {
|
||
"title": "Réussite cachée",
|
||
"description": "Continuez à suivre — vous pourriez bien tomber dessus.",
|
||
"ariaLabel": "Réussite cachée verrouillée"
|
||
},
|
||
"hiddenUnlockToast": {
|
||
"title": "Vous avez débloqué une réussite cachée !"
|
||
},
|
||
"dashboardCard": {
|
||
"title": "Débloqués récemment",
|
||
"viewAll": "Tout voir",
|
||
"empty": "Pas encore de réussites — continuez à suivre pour débloquer la première."
|
||
}
|
||
},
|
||
"bugreport": {
|
||
"title": "Rapport de bug",
|
||
"subtitle": "Envoie un bug, une suggestion ou une question. L’administrateur du serveur verra ton envoi.",
|
||
"loginRequired": "Connecte-toi pour signaler un bug.",
|
||
"bugTitle": "Titre",
|
||
"description": "Description",
|
||
"submit": "Envoyer",
|
||
"success": "Merci ! Ton rapport a bien été envoyé.",
|
||
"errorCreating": "Erreur lors de la création",
|
||
"category": "Type",
|
||
"categoryBug": "Bug",
|
||
"categoryFeature": "Suggestion",
|
||
"categoryQuestion": "Question",
|
||
"categoryOther": "Autre retour",
|
||
"bugTitlePlaceholder": "Résumé court (optionnel)",
|
||
"githubEscalationNote": "Ton retour est stocké localement. Si l’administrateur active l’intégration GitHub, il pourra être publié comme issue public à la demande.",
|
||
"internalOnlyNote": "Ton retour est stocké localement et n’est visible que par l’administrateur de ce serveur.",
|
||
"disabledTitle": "Les rapports de bug sont désactivés",
|
||
"disabledBody": "L'administrateur a désactivé les rapports de bug sur ce serveur."
|
||
},
|
||
"notifications": {
|
||
"title": "Notifications",
|
||
"eventColumn": "Événement",
|
||
"subtitle": "Choisis quelles notifications tu reçois et par quel canal.",
|
||
"loadError": "Impossible de charger les paramètres de notification.",
|
||
"noChannels": "Configure d’abord un canal de notification dans les paramètres.",
|
||
"goToSettings": "Aller aux paramètres du canal",
|
||
"channelDisabled": "Désactivé",
|
||
"admin": {
|
||
"deployFailedTitle": "Échec du déploiement : {application}",
|
||
"deployFailedBody": "Une erreur est survenue lors du déploiement de {application} (#{deployment}) : {error}. Voir les journaux : {logsUrl}",
|
||
"testNotificationTitle": "HealthLog notification de test",
|
||
"testNotificationBody": "Cette notification de test a été déclenchée depuis le panneau d'administration. Si vous la voyez, le canal fonctionne.",
|
||
"reminderCheckMissedTitle": "Rappel manqué : {medication}",
|
||
"reminderCheckMissedBody": "{medication} ({dose}) n'a pas été enregistré dans la fenêtre {window}.",
|
||
"reminderCheckOverdueTitle": "Prise en retard : {medication}",
|
||
"reminderCheckOverdueBody": "{medication} ({dose}) dans la fenêtre {window} est en retard de {minutes} minutes.",
|
||
"offlineGeoUnavailableTitle": "Bases de géolocalisation hors ligne non chargées",
|
||
"offlineGeoUnavailableBody": "HealthLog résout les localisations de connexion via le fallback en ligne ipwho.is. Pour activer les bases hors ligne GeoLite2-City et GeoLite2-ASN, définissez MAXMIND_LICENSE_KEY dans les secrets GitHub Actions à {secretsUrl} puis redéployez. En attendant, la colonne opérateur dans l'aperçu des connexions reste vide.",
|
||
"tlsPinChangedTitle": "Certificat feuille TLS modifié : {host}",
|
||
"tlsPinChangedBody": "La feuille TLS servie par {host} a maintenant le pin SPKI {servedPin}, qui ne figure pas dans l'ensemble de pins connus. Les clients épinglés (l'app native) ne pourront plus se connecter une fois l'ancien pin disparu. Réextrayez le nouveau pin de la feuille, ajoutez-le à TLS_LEAF_SPKI_PINS et à l'ensemble de pins du client natif, et publiez une version avant l'expiration de ce certificat le {validTo}. Voir docs/ops/tls-cert-pin.md."
|
||
},
|
||
"user": {
|
||
"telegramTestBody": "HealthLog: connexion réussie. Les notifications Telegram sont actives."
|
||
},
|
||
"moodReminder": {
|
||
"title": "Rappel quotidien d’humeur",
|
||
"description": "Petit rappel à l’heure que tu as choisie si tu n’as pas encore noté ton humeur du jour. Utilise uniquement les canaux déjà configurés (Telegram, ntfy, Web Push, Apple Push) et reste silencieux dès que tu as noté ton humeur aujourd’hui.",
|
||
"toggleAria": "Activer / désactiver le rappel quotidien d’humeur",
|
||
"statusOn": "Actif à l’heure que tu as choisie",
|
||
"statusOff": "Désactivé",
|
||
"enabledToast": "Rappel d’humeur activé.",
|
||
"disabledToast": "Rappel d’humeur désactivé.",
|
||
"saveError": "Échec de l’enregistrement. Réessayez.",
|
||
"hourLabel": "Heure du rappel",
|
||
"hourAria": "Heure du rappel d’humeur",
|
||
"hourSavedToast": "Heure du rappel mise à jour."
|
||
},
|
||
"coachNudge": {
|
||
"title": "Coach proactif",
|
||
"description": "Vous contacte lorsque vos données suggèrent de consulter le Coach — par exemple une faible observance ou une moyenne hebdomadaire de tension élevée. Les thèmes et la fréquence sont réglables.",
|
||
"toggleAria": "Activer ou désactiver les rappels proactifs du Coach",
|
||
"statusOn": "Actif",
|
||
"groupsLabel": "Thèmes",
|
||
"groupMedication": "Médication",
|
||
"groupMedicationDesc": "Prises irrégulières au cours de la dernière semaine.",
|
||
"groupVitals": "Constantes vitales",
|
||
"groupVitalsDesc": "Tension, récupération, tendance du poids, sommeil.",
|
||
"groupRoutine": "Routine",
|
||
"groupRoutineDesc": "Arrêts brusques des mesures et bilans de l'auto-description.",
|
||
"frequencyLabel": "Fréquence",
|
||
"frequencyWeekly": "Au plus une fois par semaine",
|
||
"frequencyBiweekly": "Au plus toutes les deux semaines",
|
||
"frequencyAria": "Choisir la fréquence des rappels",
|
||
"statusOff": "Désactivé",
|
||
"enabledToast": "Rappels proactifs du Coach activés.",
|
||
"disabledToast": "Rappels proactifs du Coach désactivés.",
|
||
"saveError": "Impossible d'enregistrer. Veuillez réessayer plus tard."
|
||
},
|
||
"lowStock": {
|
||
"title": "Alerte de stock faible",
|
||
"description": "Vérifie une fois par jour les stocks suivis de vos médicaments et vous prévient quand l’un d’eux couvre moins de jours que ce seuil. Une notification par pénurie ; elle se réarme après un réapprovisionnement.",
|
||
"toggleAria": "Activer ou désactiver les alertes de stock faible",
|
||
"statusOn": "Actif",
|
||
"statusOff": "Désactivé",
|
||
"daysLabel": "Prévenir en dessous de (jours)",
|
||
"daysAria": "Choisir le seuil de stock en jours",
|
||
"leadLabel": "Délai de réapprovisionnement (jours)",
|
||
"leadAria": "Délai de réapprovisionnement en jours",
|
||
"leadHelp": "L’alerte est envoyée ce nombre de jours plus un intervalle de dose plus tôt, pour qu’un réapprovisionnement arrive avant ta dernière dose. Un médicament donné peut remplacer cette valeur dans son onglet stock.",
|
||
"leadSavedToast": "Délai de réapprovisionnement enregistré.",
|
||
"savedToast": "Seuil de stock enregistré.",
|
||
"enabledToast": "Alertes de stock faible activées.",
|
||
"disabledToast": "Alertes de stock faible désactivées.",
|
||
"saveError": "Échec de l’enregistrement. Réessayez.",
|
||
"medicationsLink": "Voir tes médicaments"
|
||
},
|
||
"eventMedicationReminder": "Rappel de médicament",
|
||
"eventMedicationReminderDesc": "Envoyé à chaque heure de prise prévue.",
|
||
"eventMeasurementAnomaly": "Mesure inhabituelle",
|
||
"eventMeasurementAnomalyDesc": "Envoyé quand une valeur sort nettement de votre plage habituelle.",
|
||
"eventComplianceLow": "Observance faible",
|
||
"eventComplianceLowDesc": "Envoyé quand votre taux de prise des derniers jours passe sous les 80 %.",
|
||
"eventWithingsSyncFailed": "Échec de la synchronisation Withings",
|
||
"eventWithingsSyncFailedDesc": "Envoyé quand la synchronisation Withings échoue plusieurs fois d'affilée.",
|
||
"eventSystemAlert": "Notification système",
|
||
"eventSystemAlertDesc": "Messages généraux du serveur HealthLog, par exemple maintenance ou avis de compte.",
|
||
"eventPersonalRecord": "Record personnel",
|
||
"eventPersonalRecordDesc": "Envoyé quand une valeur dépasse votre meilleur précédent.",
|
||
"eventMoodReminder": "Rappel d'humeur",
|
||
"eventMoodReminderDesc": "Rappel quotidien pour noter votre humeur du moment.",
|
||
"eventCyclePeriodSoon": "Règles à venir",
|
||
"eventCyclePeriodSoonDesc": "Envoyé quelques jours avant vos prochaines règles prévues.",
|
||
"eventCyclePeriodConfirm": "Vos règles ont-elles commencé ?",
|
||
"eventCyclePeriodConfirmDesc": "Un rappel discret le jour prévu ou après, tant qu'aucune règle n'est enregistrée.",
|
||
"eventCycleFertileSoon": "Fenêtre fertile à venir",
|
||
"eventCycleFertileSoonDesc": "Envoyé quelques jours avant votre fenêtre fertile estimée lorsque votre objectif est de concevoir.",
|
||
"eventMedicationLowStock": "Stock de médicament faible",
|
||
"eventMedicationLowStockDesc": "Quand un stock suivi couvre moins de jours que votre seuil de stock",
|
||
"eventCoachNudge": "Rappel du Coach",
|
||
"eventCoachNudgeDesc": "Message ponctuel de votre Coach quand vos tendances récentes justifient un point.",
|
||
"eventMeasurementReminder": "Rappel de mesure",
|
||
"eventMeasurementReminderDesc": "Envoyé lorsqu'une mesure suivie est due.",
|
||
"eventMedicationIntakeSync": "Synchronisation des prises",
|
||
"eventMedicationIntakeSyncDesc": "Mise à jour entre appareils quand une dose est enregistrée, prise ou ignorée."
|
||
},
|
||
"i18n": {
|
||
"maintainershipBanner": {
|
||
"notice": "Cette langue est traduite automatiquement, y compris les instructions critiques pour la sécurité du Coach. Un contrôle de dérive automatique tourne en CI ; signalez toute régression du Coach sur GitHub.",
|
||
"cta": "Signaler sur GitHub",
|
||
"dismiss": "Ignorer"
|
||
}
|
||
},
|
||
"targets": {
|
||
"bmi": "IMC",
|
||
"average30d": "Moy. 30 jours :",
|
||
"consistency": {
|
||
"ariaLabel": "7 derniers jours, statut dans/hors plage par jour",
|
||
"daysInRange": "{count} sur {total} dans la cible",
|
||
"daysLogged": "{count} sur {total} enregistrés",
|
||
"dotInRange": "dans la plage",
|
||
"dotNearRange": "proche de la plage",
|
||
"dotOutOfRange": "hors plage",
|
||
"dotNotLogged": "non saisi",
|
||
"relativeDay": {
|
||
"today": "Aujourd'hui",
|
||
"yesterday": "Hier",
|
||
"twoDaysAgo": "il y a 2 jours",
|
||
"threeDaysAgo": "il y a 3 jours",
|
||
"fourDaysAgo": "il y a 4 jours",
|
||
"fiveDaysAgo": "il y a 5 jours",
|
||
"sixDaysAgo": "il y a 6 jours"
|
||
}
|
||
},
|
||
"edit": {
|
||
"title": "Modifier la plage cible — {metric}",
|
||
"description": "Ajuste la plage cible utilisée dans les graphiques, les insights et le rapport médical. Valeurs en {unit}.",
|
||
"derivedHint": "Cette carte est dérivée d’autres métriques. Modifie plutôt les objectifs sous-jacents (p. ex. tension ou poids).",
|
||
"minLabel": "Min",
|
||
"maxLabel": "Max",
|
||
"systolicMin": "Systolique min",
|
||
"systolicMax": "Systolique max",
|
||
"diastolicMin": "Diastolique min",
|
||
"diastolicMax": "Diastolique max",
|
||
"boundsHint": "Plage autorisée : {min}–{max} {unit}",
|
||
"resetToDefault": "Restaurer la valeur par défaut",
|
||
"saveSuccess": "Plage cible mise à jour",
|
||
"saveError": "Impossible d’enregistrer la plage cible",
|
||
"resetSuccess": "Plage cible réinitialisée"
|
||
},
|
||
"currentValue": "Actuel : {value} {unit}",
|
||
"targetRangeValue": "Plage cible : {min}–{max} {unit}",
|
||
"sourceLabel": "Source : {source}",
|
||
"inTarget": "Dans la plage cible",
|
||
"aboveTarget": "{delta} {unit} au-dessus de la plage",
|
||
"belowTarget": "{delta} {unit} en dessous de la plage",
|
||
"diastolic": "Diastolique",
|
||
"glucoseFasting": "Glycémie — à jeun",
|
||
"glucosePostprandial": "Glycémie — postprandiale",
|
||
"glucoseRandom": "Glycémie — indifférente",
|
||
"glucoseBedtime": "Glycémie — avant le coucher",
|
||
"status": {
|
||
"underweight": "Insuffisance pondérale",
|
||
"normal": "Normal",
|
||
"overweight": "Surpoids",
|
||
"obesityGrade1": "Obésité grade I",
|
||
"obesityGrade2": "Obésité grade II",
|
||
"obesityGrade3": "Obésité grade III",
|
||
"optimal": "Optimale",
|
||
"highNormal": "Normale haute",
|
||
"hypertensionGrade1": "Hypertension grade 1",
|
||
"hypertensionGrade2": "Hypertension grade 2",
|
||
"hypertensionGrade3": "Hypertension grade 3",
|
||
"bradycardia": "Bradycardie",
|
||
"elevated": "Élevé",
|
||
"tachycardia": "Tachycardie",
|
||
"significantlyLow": "Nettement bas",
|
||
"slightlyLow": "Légèrement bas",
|
||
"onTarget": "Dans la plage cible",
|
||
"slightlyElevated": "Légèrement élevé",
|
||
"significantlyElevated": "Nettement élevé",
|
||
"farTooShort": "Bien trop court",
|
||
"tooShort": "Trop court",
|
||
"slightlyLong": "Légèrement long",
|
||
"farTooLong": "Bien trop long",
|
||
"belowEssential": "Sous l’essentiel",
|
||
"essential": "Essentiel",
|
||
"athletic": "Athlétique",
|
||
"fitness": "Fitness",
|
||
"acceptable": "Acceptable",
|
||
"obese": "Obèse",
|
||
"veryLow": "Très bas",
|
||
"lowActive": "Peu actif",
|
||
"moderatelyActive": "Modérément actif",
|
||
"active": "Actif",
|
||
"veryActive": "Très actif",
|
||
"good": "Bon",
|
||
"moderate": "Modéré",
|
||
"low": "Bas",
|
||
"high": "Élevé",
|
||
"veryGood": "Très bon",
|
||
"veryStable": "Très stable",
|
||
"stable": "Stable",
|
||
"fluctuating": "Fluctuant"
|
||
}
|
||
},
|
||
"passwordStrength": {
|
||
"veryWeak": "Très faible",
|
||
"weak": "Faible",
|
||
"acceptable": "Acceptable",
|
||
"strong": "Fort",
|
||
"veryStrong": "Très fort",
|
||
"tooShort": "Trop court",
|
||
"characters": "caractères",
|
||
"minLength": "Au moins {count} caractères requis."
|
||
},
|
||
"telegram": {
|
||
"errorInvalidAction": "Action invalide.",
|
||
"errorMedicationNotFound": "Médicament introuvable.",
|
||
"errorMedicationInactive": "Médicament introuvable ou inactif.",
|
||
"errorUnknownAction": "Action inconnue.",
|
||
"snoozeOneHour": "1 heure",
|
||
"snoozeThreeHours": "3 heures",
|
||
"snoozedFor": "{name} reporté de {duration}.",
|
||
"skipped": "{name} ignoré.",
|
||
"alreadyRecorded": "{name} était déjà enregistré.",
|
||
"recordedAsTaken": "{name} enregistré comme pris.",
|
||
"confirmed": "{name} confirmé.",
|
||
"genericConfirmed": "Confirmé.",
|
||
"cancelled": "Annulé.",
|
||
"moodLogged": "Enregistré : {score}/5",
|
||
"moodNotePrompt": "Ajoutez une note brève (facultatif).",
|
||
"moodNoteSaved": "Note enregistrée.",
|
||
"moodNoteExpired": "Cette invite a expiré.",
|
||
"remindLater": "Rappel reporté de {duration}.",
|
||
"measurementDone": "Marqué comme fait.",
|
||
"measurementNotFound": "Rappel introuvable.",
|
||
"buttonMoodNote": "Note…",
|
||
"buttonLater": "Plus tard",
|
||
"buttonDone": "Fait",
|
||
"noActiveMedications": "Aucun médicament actif trouvé.",
|
||
"whichMedication": "<b>Quel médicament as-tu pris ?</b>",
|
||
"cancelButton": "Annuler",
|
||
"askMedicationName": "Indique le médicament, p. ex. <b>pris Ramipril</b>.",
|
||
"medicationNotFoundExact": "Médicament introuvable. Envoie le nom exactement tel qu’il apparaît dans HealthLog.",
|
||
"helpHeader": "<b>Commandes disponibles :</b>",
|
||
"helpBody": "/help — afficher cette aide\n/add — enregistrer une prise\n/start — démarrer le bot\n\n<b>Commandes texte :</b>\ntaken <nom> — confirmer une prise\n\n<b>Boutons dans les rappels :</b>\n• Pris — confirmer la prise\n• 🕐 1h / 🕐 3h — reporter le rappel\n• ⏭ Ignorer — ignorer la prise\n• ✓ Confirmer — confirmer une prise manquée"
|
||
},
|
||
"medicationReminders": {
|
||
"phaseGreenTitle": "🟢 Rappel : {medName}",
|
||
"phaseGreenMessage": "🟢 Reminder:\n<b>{medName}</b> ({doseInfo}, {timeWindow})\nWindow closes in {minutes} Min.",
|
||
"phaseYellowTitle": "🟡 Bientôt due : {medName}",
|
||
"phaseYellowMessage": "🟡 Bientôt due :\n<b>{medName}</b> ({doseInfo}, {timeWindow})\nIl reste {minutes} min.",
|
||
"phaseOrangeTitle": "🟠 En retard : {medName}",
|
||
"phaseOrangeMessage": "🟠 Overdue:\n<b>{medName}</b> ({doseInfo}, {timeWindow})\nOverdue by {minutes} Min.",
|
||
"phaseRedTitle": "🔴 Manquée : {medName}",
|
||
"phaseRedMessage": "🔴 Manquée :\n<b>{medName}</b> ({doseInfo}, {timeWindow})\nMarquée comme manquée.",
|
||
"buttonTaken": "Pris",
|
||
"buttonConfirm": "✓ Confirmer",
|
||
"buttonSnoozeOneHour": "🕐 1h",
|
||
"buttonSnoozeThreeHours": "🕐 3h",
|
||
"buttonSkip": "⏭ Ignorer"
|
||
},
|
||
"lowStockReminders": {
|
||
"title": "Stock faible : {medName}",
|
||
"bodyToday": "{medName} : {units} unités restantes — moins d’un jour de réserve.",
|
||
"bodyReorder": "{medName} : {units} unités restantes. Le stock sera épuisé vers le {runsOutOn} — recommandez avant le {reorderBy}.",
|
||
"bodyLastDose": "{medName} : {units} unités restantes — environ votre dernière dose. Le stock sera épuisé vers le {runsOutOn}."
|
||
},
|
||
"moodReminders": {
|
||
"dailyTitle": "Enregistrer votre humeur",
|
||
"dailyBody": "Comment vous sentez-vous aujourd’hui ?"
|
||
},
|
||
"coachNudges": {
|
||
"complianceTitle": "Votre Coach a une remarque à ce sujet",
|
||
"complianceBody": "Vos prises ont été irrégulières cette semaine. Échangez avec le Coach — le plan peut peut-être être simplifié.",
|
||
"bpTitle": "Tension élevée cette semaine",
|
||
"bpBody": "Votre tension moyenne de la semaine a dépassé votre objectif. Le Coach peut vous aider à mettre les valeurs en perspective.",
|
||
"scoreTitle": "Votre score de récupération baisse",
|
||
"scoreBody": "Votre score de récupération a nettement chuté cette semaine. Le Coach peut vous aider à cerner les causes possibles.",
|
||
"selfContextTitle": "Aidez votre Coach à mieux vous connaître",
|
||
"selfContextBody": "Votre auto-description est incomplète ou n'a pas été mise à jour depuis un moment. Deux minutes dans les réglages gardent le contexte du Coach à jour.",
|
||
"weightTitle": "Votre poids s'éloigne de votre zone cible",
|
||
"weightBody": "Votre moyenne hebdomadaire s'est encore éloignée de votre zone cible. Le Coach peut vous aider à faire le point sereinement.",
|
||
"sleepDebtTitle": "Plusieurs nuits courtes cette semaine",
|
||
"sleepDebtBody": "La plupart de vos dernières nuits sont restées sous votre objectif de sommeil. Le Coach peut vous aider à chercher des régularités.",
|
||
"measurementGapTitle": "Votre journal est devenu silencieux",
|
||
"measurementGapBody": "Aucune nouvelle valeur depuis une semaine. Un bref échange avec le Coach aide à reprendre la routine — ou à repérer une synchronisation en panne.",
|
||
"focusSuffix": "Vous vouliez surveiller : {focus}.",
|
||
"questionConditions": "Avez-vous des maladies chroniques que le Coach devrait connaître ?",
|
||
"questionFocus": "Y a-t-il quelque chose de précis auquel le Coach devrait veiller ?",
|
||
"questionAllergies": "Avez-vous des allergies ou des intolérances ?",
|
||
"questionAboutMe": "Envie de parler un peu de vous au Coach — habitudes, objectifs, contexte ?"
|
||
},
|
||
"clinicianView": {
|
||
"title": "Dossier de santé partagé",
|
||
"period": "Période couverte : {start} – {end}",
|
||
"expires": "Ce lien expire le {date}.",
|
||
"provenance": "Il s'agit d'un résumé en lecture seule partagé par la personne concernée, exporté de ses données HealthLog auto-enregistrées. Les valeurs sont auto-déclarées et peuvent inclure des mesures synchronisées depuis des appareils ; à considérer comme rapportées par le patient, non comme un examen clinique.",
|
||
"vitals": "Signes vitaux",
|
||
"labs": "Valeurs de laboratoire",
|
||
"medications": "Médicaments et observance",
|
||
"bmi": "Indice de masse corporelle (IMC)",
|
||
"statSummary": "dernier {latest} (moy. {avg}, plage {min}–{max})",
|
||
"adherence": "{rate} d'observance",
|
||
"noAdherence": "—",
|
||
"glucose": {
|
||
"FASTING": "Glycémie (à jeun)",
|
||
"POSTPRANDIAL": "Glycémie (postprandiale)",
|
||
"RANDOM": "Glycémie (aléatoire)",
|
||
"BEDTIME": "Glycémie (au coucher)"
|
||
},
|
||
"wellness": {
|
||
"title": "Scores de bien-être",
|
||
"disclaimer": "Scores descriptifs (0–100) calculés à partir des signaux suivis. Ce n'est ni une évaluation clinique ni un diagnostic.",
|
||
"recovery": "Score de récupération",
|
||
"stress": "Score de stress",
|
||
"strain": "Score de charge",
|
||
"score": "Score de bien-être"
|
||
},
|
||
"footer": "Partagé depuis HealthLog — un suivi de santé auto-hébergé.",
|
||
"unlock": {
|
||
"title": "Saisir la phrase secrète",
|
||
"description": "Ce dossier de santé partagé est protégé. Saisissez la phrase secrète qui vous a été communiquée pour le consulter.",
|
||
"label": "Phrase secrète",
|
||
"error": "Cette phrase secrète est incorrecte.",
|
||
"submit": "Déverrouiller"
|
||
}
|
||
},
|
||
"cycle": {
|
||
"symptomCategory": {
|
||
"physical": "Physique",
|
||
"emotional": "Émotionnel",
|
||
"digestive": "Digestif",
|
||
"custom": "Personnalisé"
|
||
},
|
||
"symptom": {
|
||
"cramps": "Crampes",
|
||
"headache": "Mal de tête",
|
||
"bloating": "Ballonnements",
|
||
"acne": "Acné",
|
||
"breastTenderness": "Sensibilité des seins",
|
||
"fatigue": "Fatigue",
|
||
"backPain": "Mal de dos",
|
||
"insomnia": "Insomnie",
|
||
"libidoHigh": "Libido élevée",
|
||
"libidoLow": "Libido faible",
|
||
"moodSwings": "Sautes d'humeur",
|
||
"foodCravings": "Fringales",
|
||
"nausea": "Nausées",
|
||
"diarrhea": "Diarrhée",
|
||
"constipation": "Constipation",
|
||
"custom": {
|
||
"add": "Ajouter un symptôme",
|
||
"label": "Nom",
|
||
"labelPlaceholder": "ex. Vertige",
|
||
"icon": "Icône",
|
||
"limitReached": "Limite de symptômes personnalisés atteinte.",
|
||
"remove": "Supprimer {label}",
|
||
"fallbackLabel": "Symptôme personnalisé"
|
||
}
|
||
},
|
||
"prediction": {
|
||
"disclaimer": "Les prévisions sont des estimations issues de tes données enregistrées, et non un avis médical ou un moyen de contraception. La précision s'améliore à mesure que tu enregistres des cycles."
|
||
},
|
||
"insights": {
|
||
"headline": {
|
||
"title": "Ton cycle et ton corps",
|
||
"restingHeartRate": "Ta fréquence cardiaque au repos est d'environ {delta} {unit} {dir} en phase lutéale qu'en phase folliculaire.",
|
||
"heartRateVariability": "Ta variabilité de la fréquence cardiaque est d'environ {delta} {unit} {dir} en phase lutéale qu'en phase folliculaire.",
|
||
"generic": "Ton/ta {metric} est d'environ {delta} {unit} {dir} en phase lutéale qu'en phase folliculaire.",
|
||
"dirHigher": "plus élevée",
|
||
"dirLower": "plus basse",
|
||
"empty": "Pas encore assez de cycles et de relevés pour faire ressortir un schéma de phase. Continue à enregistrer : cela se complétera à mesure que ton historique grandit."
|
||
},
|
||
"crosstab": {
|
||
"description": "Comment chaque mesure se compare entre tes phases lutéale et folliculaire, sur tes propres données.",
|
||
"pairLabel": "{metric} · lutéale vs folliculaire",
|
||
"detail": "Lutéale {lutealAvg} {unit} ({lutealDays} jours) vs folliculaire {follicularAvg} {unit} ({follicularDays} jours).",
|
||
"metricRestingHeartRate": "Fréquence cardiaque au repos",
|
||
"metricHrv": "Variabilité de la fréquence cardiaque",
|
||
"metricSleepDuration": "Durée du sommeil",
|
||
"metricSteps": "Pas",
|
||
"metricWeight": "Poids",
|
||
"metricBasalBodyTemp": "Température basale",
|
||
"metricWristTemperature": "Température du poignet la nuit",
|
||
"metricSkinTemperature": "Température de la peau",
|
||
"metricBloodGlucose": "Glycémie",
|
||
"metricMood": "Humeur",
|
||
"unitHours": "h",
|
||
"unitSteps": "pas",
|
||
"unitBpm": "bpm",
|
||
"unitMs": "ms",
|
||
"unitKg": "kg",
|
||
"unitCelsius": "°C",
|
||
"unitGlucose": "mg/dL",
|
||
"unitMood": "pts",
|
||
"confidenceLow": "Confiance faible",
|
||
"confidenceMedium": "Confiance moyenne",
|
||
"confidenceHigh": "Confiance élevée"
|
||
},
|
||
"title": "Analyses du cycle",
|
||
"symptomPatternsTitle": "Tendances des symptômes par phase",
|
||
"symptomPatternsEmpty": "Notez vos symptômes sur un cycle pour voir dans quelle phase ils se regroupent.",
|
||
"symptomMostlyIn": "Surtout en {phase} ({count}/{total} jours)"
|
||
},
|
||
"phaseEducation": {
|
||
"title": "Ce qui se passe maintenant",
|
||
"whatsHappening": {
|
||
"MENSTRUAL": "Tes règles marquent le début d'un nouveau cycle, lorsque la muqueuse utérine se détache. L'énergie et l'humeur semblent souvent plus basses durant ces premiers jours.",
|
||
"FOLLICULAR": "Après les règles, l'œstrogène augmente progressivement pendant que le corps prépare un ovule. Beaucoup ressentent une énergie plus stable durant cette période.",
|
||
"OVULATORY": "Vers le milieu du cycle, un ovule est libéré et la fertilité culmine sur une courte fenêtre. Cette phase est la plus brève des quatre.",
|
||
"LUTEAL": "Après l'ovulation, la progestérone augmente et le corps se pose. Dans les jours précédant les prochaines règles, certaines personnes remarquent des changements prémenstruels."
|
||
},
|
||
"context": {
|
||
"MENSTRUAL": "Les taux hormonaux sont au plus bas, ce qui peut donner à ces jours des airs de remise à zéro tranquille. Certaines personnes remarquent des crampes, un sommeil plus léger ou l'envie de lever le pied ; d'autres les traversent presque sans changement. Tout cela reste dans la normale, et le ressenti peut varier d'un cycle à l'autre.",
|
||
"FOLLICULAR": "Avec l'œstrogène qui monte, beaucoup décrivent ces jours comme lumineux et ouverts : le sommeil vient souvent plus facilement et l'esprit semble plus clair. La température basale reste en général dans sa plage basse jusqu'à juste avant l'ovulation. La durée de cette phase est ce qui varie le plus d'une personne à l'autre, et d'un cycle à l'autre.",
|
||
"OVULATORY": "L'œstrogène culmine juste avant la libération de l'ovule, souvent accompagné d'un bref regain d'humeur et d'une légère hausse de la température basale dans le jour ou les deux qui suivent. La glaire cervicale tend à devenir plus claire et plus filante autour de cette fenêtre. Un bref tiraillement d'un côté, certaines personnes le remarquent ; beaucoup ne ressentent rien, et les deux sont tout à fait normaux.",
|
||
"LUTEAL": "La progestérone mène la seconde moitié et la température basale se stabilise en général un peu plus haut qu'au début du cycle. Certaines personnes remarquent des variations du sommeil, de l'appétit, de l'humeur ou de l'énergie au fil des jours, tandis que d'autres se sentent stables tout du long. Le schéma est personnel, et il se présente souvent différemment d'un mois à l'autre."
|
||
},
|
||
"commonHere": "Tu le remarques souvent ici",
|
||
"stillLearning": "On apprend encore ton cycle. Continue à noter et cela se remplira avec les tendances de tes propres journées."
|
||
},
|
||
"insightsSummary": {
|
||
"title": "Ton cycle",
|
||
"currentDay": "Jour {day} de ton cycle",
|
||
"noActiveCycle": "Aucun cycle actif pour l'instant",
|
||
"viewDetails": "Voir les analyses du cycle"
|
||
},
|
||
"wellnessRing": {
|
||
"label": "Cycle"
|
||
},
|
||
"disclaimer": "Ces prévisions sont des estimations descriptives issues de vos données enregistrées, ni une méthode de contraception ni un avis médical. Elles n'indiquent jamais qu'il est sûr d'avoir des rapports non protégés. Pour la contraception ou toute décision médicale, consultez un professionnel de santé.",
|
||
"title": "Ton cycle",
|
||
"subtitle": "Enregistre tes règles et symptômes, et vois ce qui arrive ensuite.",
|
||
"tabs": {
|
||
"calendar": "Calendrier",
|
||
"predictions": "Prévisions",
|
||
"insights": "Analyses",
|
||
"settings": "Réglages"
|
||
},
|
||
"logToday": "Enregistrer aujourd'hui",
|
||
"startedPeriod": "Mes règles ont commencé aujourd'hui",
|
||
"endedPeriod": "Mes règles se sont terminées aujourd'hui",
|
||
"phase": {
|
||
"MENSTRUAL": "Menstruelle",
|
||
"FOLLICULAR": "Folliculaire",
|
||
"OVULATORY": "Ovulatoire",
|
||
"LUTEAL": "Lutéale",
|
||
"none": "Aucune phase",
|
||
"label": "Phase"
|
||
},
|
||
"flow": {
|
||
"NONE": "Aucun",
|
||
"SPOTTING": "Spotting",
|
||
"LIGHT": "Léger",
|
||
"MEDIUM": "Moyen",
|
||
"HEAVY": "Abondant",
|
||
"label": "Flux"
|
||
},
|
||
"ovulationTest": {
|
||
"NEGATIVE": "Négatif",
|
||
"POSITIVE_LH_SURGE": "Pic de LH",
|
||
"ESTROGEN_SURGE": "Pic d'œstrogène",
|
||
"INDETERMINATE": "Indéterminé",
|
||
"label": "Test d'ovulation"
|
||
},
|
||
"mucus": {
|
||
"DRY": "Sec",
|
||
"STICKY": "Collant",
|
||
"CREAMY": "Crémeux",
|
||
"WATERY": "Aqueux",
|
||
"EGG_WHITE": "Blanc d'œuf",
|
||
"label": "Glaire cervicale"
|
||
},
|
||
"cervixPosition": {
|
||
"LOW": "Bas",
|
||
"HIGH": "Haut"
|
||
},
|
||
"cervixFirmness": {
|
||
"FIRM": "Ferme",
|
||
"SOFT": "Souple"
|
||
},
|
||
"cervixOpening": {
|
||
"CLOSED": "Fermé",
|
||
"OPEN": "Ouvert"
|
||
},
|
||
"goal": {
|
||
"GENERAL_HEALTH": "Santé générale",
|
||
"AVOID_PREGNANCY": "Éviter une grossesse",
|
||
"TRYING_TO_CONCEIVE": "Désir d'enfant",
|
||
"PERIMENOPAUSE": "Périménopause",
|
||
"OFF": "Suivi désactivé",
|
||
"label": "Pourquoi fais-tu ce suivi ?",
|
||
"description": "Cela adapte le langage et les prévisions affichées. Les conseils sur la fenêtre fertile n'apparaissent qu'en cas de désir d'enfant."
|
||
},
|
||
"ring": {
|
||
"dayOfCycle": "Jour {day}",
|
||
"dayUnknown": "—",
|
||
"ariaPhase": "Jour {day} du cycle, phase {phase}",
|
||
"ariaUnknown": "Pas encore de cycle actif",
|
||
"caption": "de ton cycle",
|
||
"firstPeriodCta": "Enregistrer mes premières règles"
|
||
},
|
||
"calendar": {
|
||
"legendPeriod": "Règles enregistrées",
|
||
"legendPredicted": "Règles prévues",
|
||
"legendFertile": "Fenêtre fertile",
|
||
"legendOvulation": "Ovulation",
|
||
"legendSymptoms": "Symptômes enregistrés",
|
||
"prevMonth": "Mois précédent",
|
||
"nextMonth": "Mois suivant",
|
||
"loading": "Chargement de ton calendrier…",
|
||
"learning": "Nous apprenons ton cycle — enregistre au moins trois cycles complets et la fenêtre fertile, l'ovulation et les phases se compléteront. D'ici là, le calendrier n'affiche que ce que tu as enregistré.",
|
||
"legendSymptom": "Symptômes",
|
||
"legendOvulationConfirmed": "Ovulation confirmée",
|
||
"flowSpotting": "spotting",
|
||
"flowLight": "léger",
|
||
"flowMedium": "moyen",
|
||
"flowHeavy": "abondant"
|
||
},
|
||
"predictions": {
|
||
"title": "Ce qui arrive ensuite",
|
||
"nextPeriod": "Prochaines règles",
|
||
"nextPeriodWindow": "{low} – {high}",
|
||
"fertileWindow": "Fenêtre fertile",
|
||
"ovulation": "Ovulation estimée",
|
||
"confidenceHigh": "Élevée",
|
||
"confidenceMedium": "Moyenne",
|
||
"confidenceLow": "Faible",
|
||
"stillLearning": "Encore en apprentissage",
|
||
"stillLearningBody": "Enregistre au moins trois cycles complets et tes prévisions s'affineront. D'ici là, ceci reste une estimation approximative.",
|
||
"rawMode": "Prévision désactivée",
|
||
"rawModeBody": "Tu as désactivé les prévisions — seules tes données enregistrées sont affichées, sans prévision.",
|
||
"none": "Pas encore de prévision. Enregistre des règles pour commencer.",
|
||
"ovulationConfirmed": "Ovulation (confirmée)"
|
||
},
|
||
"history": {
|
||
"title": "Tes cycles",
|
||
"avgLength": "Durée moyenne",
|
||
"variability": "Variabilité",
|
||
"avgPeriodLength": "Règles moyennes",
|
||
"regularity": "Régularité",
|
||
"regularityREGULAR": "Régulier",
|
||
"regularityIRREGULAR": "Irrégulier",
|
||
"regularityLEARNING": "En apprentissage",
|
||
"days": "{count} jours",
|
||
"daysPlusMinus": "± {count} jours",
|
||
"none": "Aucun cycle enregistré pour l'instant.",
|
||
"recentCycles": "Cycles récents",
|
||
"ongoing": "en cours",
|
||
"periodDays": "règles {count} j",
|
||
"ovulationChip": "Ovulation",
|
||
"chartTitle": "Durée du cycle au fil du temps",
|
||
"chartCaption": "Chaque barre est un cycle : la base rose est vos règles, le reste est la durée du cycle.",
|
||
"chartAria": "Graphique de durée de vos {count} derniers cycles, d'une moyenne de {avg} jours, classé comme {regularity}.",
|
||
"legendPeriodSegment": "Jours de règles",
|
||
"legendRestSegment": "Reste du cycle"
|
||
},
|
||
"sheet": {
|
||
"title": "Enregistrer ta journée",
|
||
"description": "Saisis le flux, les symptômes et les notes du jour.",
|
||
"flow": "Flux",
|
||
"symptoms": "Symptômes",
|
||
"temperature": "Température basale",
|
||
"temperaturePlaceholder": "°C",
|
||
"temperatureDisturbed": "Marquer la mesure comme perturbée",
|
||
"temperatureDisturbedHint": "Fièvre, maladie, alcool ou mesure tardive — exclue de l'évaluation de la température.",
|
||
"ovulationTest": "Test d'ovulation",
|
||
"mucus": "Glaire cervicale",
|
||
"cervix": "Col de l'utérus",
|
||
"cervixPosition": "Position",
|
||
"cervixFirmness": "Fermeté",
|
||
"cervixOpening": "Ouverture",
|
||
"intercourse": "Rapports",
|
||
"protected": "Protégés",
|
||
"note": "Note",
|
||
"notePlaceholder": "Ce que tu veux retenir d'aujourd'hui…",
|
||
"save": "Enregistrer",
|
||
"saving": "Enregistrement…",
|
||
"cancel": "Annuler",
|
||
"saveError": "Enregistrement impossible. Réessaie.",
|
||
"intermenstrualBleeding": "Saignements entre les règles",
|
||
"pregnancyTest": "Test de grossesse",
|
||
"progesteroneTest": "Test de progestérone",
|
||
"contraceptive": "Contraception",
|
||
"severity": "Intensité",
|
||
"severityLevel": "Intensité {level} sur 4",
|
||
"delete": "Supprimer",
|
||
"temperatureSection": "Température et ovulation",
|
||
"intimacySection": "Intimité et contraception",
|
||
"testsSection": "Tests",
|
||
"phaseDayHeader": "Jour {day} · {phase}",
|
||
"bbtHint": "Prends-la dès le matin, avant de te lever."
|
||
},
|
||
"settings": {
|
||
"title": "Réglages du cycle",
|
||
"typicalCycleLength": "Durée typique du cycle (jours)",
|
||
"typicalPeriodLength": "Durée typique des règles (jours)",
|
||
"lutealPhaseLength": "Durée de la phase lutéale (jours)",
|
||
"priorsDescription": "Ces valeurs aident tes prévisions avant d'avoir enregistré beaucoup de cycles. Laisse vide pour utiliser les valeurs par défaut.",
|
||
"rawChartMode": "Mode graphique brut",
|
||
"rawChartModeDescription": "Affiche uniquement tes données enregistrées, sans prévision ni interprétation.",
|
||
"secondarySymptomLabel": "Deuxième signe de fertilité",
|
||
"secondarySymptomDescription": "Le deuxième signe associé à ta température pour la double vérification sympto-thermique. La plupart des personnes observent la glaire cervicale ; passe à l'observation du col de l'utérus si tu préfères.",
|
||
"secondarySymptomCitation": "En savoir plus sur la méthode (étude)",
|
||
"secondarySymptom": {
|
||
"MUCUS": "Glaire cervicale",
|
||
"CERVIX": "Col de l'utérus"
|
||
},
|
||
"prediction": "Prévisions",
|
||
"predictionDescription": "Prévois tes prochaines règles et, le cas échéant, ta fenêtre fertile.",
|
||
"encryption": "Chiffrer les entrées sensibles",
|
||
"encryptionDescription": "Chiffre au repos les champs révélant l'intention (tests de grossesse, contraception, rapports), en plus des notes toujours chiffrées.",
|
||
"discreet": "Notifications discrètes",
|
||
"discreetDescription": "Masque les détails du cycle dans le texte des notifications sur ton écran verrouillé.",
|
||
"saved": "Réglages enregistrés",
|
||
"saveError": "Enregistrement impossible. Réessaie.",
|
||
"save": "Enregistrer",
|
||
"reminders": "Rappels",
|
||
"remindersDescription": "Activez les rappels de règles par canal dans les paramètres de notification.",
|
||
"remindersLink": "Paramètres de notification",
|
||
"fertileReminder": "Rappel de fenêtre fertile",
|
||
"fertileReminderDescription": "Recevez un avertissement quelques jours avant votre fenêtre fertile estimée. Désactivé par défaut : activez-le par canal dans les paramètres de notification."
|
||
},
|
||
"testResult": {
|
||
"POSITIVE": "Positif",
|
||
"NEGATIVE": "Négatif",
|
||
"INDETERMINATE": "Incertain"
|
||
},
|
||
"contraceptive": {
|
||
"NONE": "Aucune",
|
||
"UNSPECIFIED": "Autre",
|
||
"IMPLANT": "Implant",
|
||
"INJECTION": "Injection",
|
||
"IUD": "DIU",
|
||
"INTRAVAGINAL_RING": "Anneau",
|
||
"ORAL": "Pilule",
|
||
"PATCH": "Patch",
|
||
"EMERGENCY": "Urgence"
|
||
},
|
||
"loadError": "Impossible de charger vos données de cycle.",
|
||
"saveError": "Impossible d’enregistrer votre saisie de cycle.",
|
||
"deleteError": "Impossible de supprimer l’entrée.",
|
||
"bbt": {
|
||
"title": "Température basale",
|
||
"caption": "Votre température matinale sur ce cycle. Une hausse durable d'environ 0,2 °C suit l'ovulation.",
|
||
"empty": "Pas encore de relevés de température",
|
||
"emptyHint": "Notez votre température basale chaque matin pour voir le décalage de température de votre cycle.",
|
||
"ovulationEstimate": "Ovulation est.",
|
||
"tooltipTemp": "{temp} °C",
|
||
"ovulationConfirmed": "Ovulation confirmée"
|
||
},
|
||
"fieldInfo": {
|
||
"bbt": "Ta température au repos, prise dès le matin avant de te lever. Elle augmente légèrement (environ 0,2–0,3 °C) après l'ovulation.",
|
||
"bbtLabel": "Qu'est-ce que la température basale ?",
|
||
"mucus": "Les pertes vaginales évoluent au fil du cycle — de sèches ou collantes à crémeuses, puis aqueuses et comme du blanc d'œuf autour des jours les plus fertiles.",
|
||
"mucusLabel": "Qu'est-ce que la glaire cervicale ?",
|
||
"ovulationTest": "Un test urinaire à domicile qui détecte le pic de LH — la montée hormonale environ 24–36 h avant l'ovulation. Un test positif signale la période la plus fertile.",
|
||
"ovulationTestLabel": "Qu'est-ce qu'un test d'ovulation ?",
|
||
"spotting": "Léger saignement en dehors des règles.",
|
||
"spottingLabel": "Qu'est-ce que le spotting entre les règles ?",
|
||
"pregnancyTest": "Résultat d'un test de grossesse (hCG) à domicile.",
|
||
"pregnancyTestLabel": "Qu'est-ce qu'un test de grossesse ?",
|
||
"progesteroneTest": "Un test confirmant que l'ovulation a eu lieu — la progestérone augmente ensuite.",
|
||
"progesteroneTestLabel": "Qu'est-ce qu'un test de progestérone ?",
|
||
"intercourse": "Si un rapport sexuel a eu lieu ce jour-là.",
|
||
"intercourseLabel": "Que suit le rapport ?",
|
||
"protected": "Si une contraception a été utilisée pendant le rapport.",
|
||
"protectedLabel": "Que signifie protégé ?"
|
||
}
|
||
},
|
||
"cycleReminders": {
|
||
"periodSoonTitle": "Règles probablement bientôt",
|
||
"periodSoonBody": "Vos prochaines règles sont prévues dans environ deux jours.",
|
||
"periodConfirmTitle": "Vos règles ont-elles commencé ?",
|
||
"periodConfirmBody": "Vos règles étaient prévues pour maintenant. Enregistrez-les pour garder des prévisions précises.",
|
||
"fertileSoonTitle": "Fenêtre fertile à venir",
|
||
"fertileSoonBody": "Votre fenêtre fertile estimée devrait commencer dans environ deux jours. Il s'agit d'une estimation, et non d'une garantie médicale ou contraceptive.",
|
||
"discreetTitle": "Rappel HealthLog",
|
||
"discreetBody": "Vous avez un rappel dans HealthLog."
|
||
},
|
||
"dataList": {
|
||
"allSources": "Toutes les sources",
|
||
"dateFrom": "Du",
|
||
"dateTo": "Au",
|
||
"dateRange": "Période",
|
||
"valueRange": "Valeur",
|
||
"valueMin": "Min.",
|
||
"valueMax": "Max.",
|
||
"typeLabel": "Type",
|
||
"sourceLabel": "Source",
|
||
"resetFilters": "Réinitialiser",
|
||
"clearFilter": "Supprimer le filtre : {label}",
|
||
"selectAll": "Tout sélectionner sur cette page",
|
||
"selectRow": "Sélectionner la ligne",
|
||
"selected": "{count} sélectionné(s)",
|
||
"deleteN": "Supprimer ({count})",
|
||
"clearSelection": "Effacer la sélection",
|
||
"selectionBarLabel": "Actions de sélection"
|
||
},
|
||
"measurementReminders": {
|
||
"sectionTitle": "Prévention",
|
||
"sectionDescription": "Rappels de ce qu'il faut mesurer ou vérifier, quand et où.",
|
||
"addButton": "Ajouter un rappel",
|
||
"markDone": "Terminé",
|
||
"delete": "Supprimer",
|
||
"deleteConfirmTitle": "Supprimer le rappel ?",
|
||
"deleteConfirmDescription": "Ce rappel de prévention sera définitivement supprimé.",
|
||
"disabledBadge": "Désactivé",
|
||
"nextDue": {
|
||
"none": "Non planifié",
|
||
"today": "À faire aujourd'hui",
|
||
"tomorrow": "À faire demain",
|
||
"inDays": "Dans {days} jours"
|
||
},
|
||
"overdueByDays": "En retard de {days} jours",
|
||
"cadence": {
|
||
"everyNDays": "Tous les {days} jours",
|
||
"custom": "Planning personnalisé",
|
||
"customInterval": "Personnalisé (tous les N jours)",
|
||
"rruleOption": "Règle personnalisée (RRULE)"
|
||
},
|
||
"location": {
|
||
"prefix": "Chez : {location}"
|
||
},
|
||
"types": {
|
||
"WEIGHT": "Poids",
|
||
"BLOOD_PRESSURE_SYS": "Tension artérielle",
|
||
"PULSE": "Pouls",
|
||
"BLOOD_GLUCOSE": "Glycémie",
|
||
"OXYGEN_SATURATION": "Saturation en oxygène",
|
||
"BODY_FAT": "Masse grasse",
|
||
"BODY_TEMPERATURE": "Température corporelle",
|
||
"FAT_MASS": "Masse grasse",
|
||
"FAT_FREE_MASS": "Masse maigre totale",
|
||
"MUSCLE_MASS": "Masse musculaire",
|
||
"LEAN_BODY_MASS": "Masse maigre",
|
||
"BONE_MASS": "Masse osseuse",
|
||
"TOTAL_BODY_WATER": "Eau corporelle",
|
||
"VISCERAL_FAT": "Graisse viscérale",
|
||
"BODY_MASS_INDEX": "Indice de masse corporelle (IMC)"
|
||
},
|
||
"typeGroups": {
|
||
"vitals": "Constantes vitales",
|
||
"bodyComposition": "Composition corporelle"
|
||
},
|
||
"empty": {
|
||
"title": "Aucun rappel pour l'instant",
|
||
"description": "Ajoutez un rappel pour mesurer régulièrement votre tension ou planifier un bilan sanguin annuel."
|
||
},
|
||
"form": {
|
||
"label": "Libellé",
|
||
"labelPlaceholder": "ex. Mesurer la tension",
|
||
"kind": "Type",
|
||
"kindType": "Lié à une mesure",
|
||
"kindFreeText": "Vérification libre",
|
||
"measurementType": "Mesure",
|
||
"cadence": "Répétition",
|
||
"notifyHour": "Rappeler à",
|
||
"location": "Où (facultatif)",
|
||
"locationPlaceholder": "ex. Médecin, Laboratoire",
|
||
"save": "Enregistrer",
|
||
"createTitle": "Nouveau rappel",
|
||
"editTitle": "Modifier le rappel",
|
||
"customInterval": "Répéter tous les (jours)",
|
||
"rrule": "Règle de récurrence (RRULE)",
|
||
"rruleHint": "RFC-5545, p. ex. FREQ=YEARLY pour un contrôle annuel.",
|
||
"firstDue": "Première échéance (facultatif)"
|
||
},
|
||
"pushTitle": "Rappel de prévention",
|
||
"pushBody": "C'est l'heure : {label}",
|
||
"pushLocation": "(chez {location})",
|
||
"edit": "Modifier",
|
||
"originCoach": "Coach",
|
||
"until": "Jusqu'au {date}",
|
||
"selfPlanned": "Auto-planifié",
|
||
"captureValue": "Enregistrer la valeur",
|
||
"measureNow": "Mesurer maintenant",
|
||
"nextDueLabel": "Prochaine échéance :",
|
||
"lastDoneLabel": "Dernière fois :",
|
||
"customize": "Personnaliser la prévention",
|
||
"adherence": {
|
||
"label": "Dans l'intervalle",
|
||
"onTrack": "Dans les temps",
|
||
"due": "À faire maintenant"
|
||
},
|
||
"capture": {
|
||
"title": "Enregistrer une mesure",
|
||
"description": "Saisissez la valeur ; le rappel est marqué comme fait."
|
||
},
|
||
"manage": {
|
||
"title": "Gérer les rappels",
|
||
"description": "Activer ou désactiver des rappels individuels.",
|
||
"empty": "Aucun rappel à personnaliser pour l'instant."
|
||
},
|
||
"dashboard": {
|
||
"empty": "Aucun rappel de prévention à venir.",
|
||
"openLink": "Ouvrir la prévention"
|
||
},
|
||
"showMeasurements": "Afficher les mesures"
|
||
},
|
||
"moduleList": {
|
||
"viewToggleLabel": "Affichage",
|
||
"viewCards": "Vue en cartes",
|
||
"viewList": "Vue en liste",
|
||
"viewHeading": "Affichage",
|
||
"viewDescription": "Choisissez si les entrées s'affichent en cartes ou en liste compacte.",
|
||
"reorder": {
|
||
"heading": "Ordre",
|
||
"description": "Faites glisser les entrées pour définir leur ordre d'affichage.",
|
||
"empty": "Aucune entrée à réordonner pour l'instant."
|
||
}
|
||
},
|
||
"labs": {
|
||
"title": "Résultats d'analyses",
|
||
"subtitle": "Analyses sanguines et biomarqueurs",
|
||
"addResult": "Ajouter une valeur",
|
||
"addDescription": "Enregistrez un biomarqueur à partir d'un compte rendu de laboratoire.",
|
||
"addFirst": "Ajouter votre premier résultat",
|
||
"emptyTitle": "Aucun résultat pour l'instant",
|
||
"emptyDescription": "Enregistrez des analyses comme l'HbA1c, le LDL ou la ferritine pour les suivre dans le temps et les partager avec votre médecin.",
|
||
"referenceLabel": "Référence",
|
||
"readingsCount": "{count} mesures",
|
||
"deleteConfirmTitle": "Supprimer le résultat d'analyse ?",
|
||
"deleteConfirmDescription": "Ce résultat d'analyse sera définitivement supprimé.",
|
||
"deletedToast": "Résultat supprimé",
|
||
"deleteError": "Impossible de supprimer le résultat",
|
||
"loadError": "Impossible de charger les résultats",
|
||
"customize": "Personnaliser les analyses",
|
||
"localOcr": {
|
||
"heading": "Lire les scans sur cet appareil",
|
||
"description": "Permet de scanner un compte rendu de laboratoire même si votre fournisseur d'IA ne peut pas lire les images : la photo est lue sur votre appareil et seul le texte extrait est envoyé à votre fournisseur. Moins précis — vérifiez chaque valeur avant d'enregistrer."
|
||
},
|
||
"sort": {
|
||
"heading": "Tri",
|
||
"label": "Ordre des valeurs",
|
||
"recentDesc": "Mesure la plus récente d'abord",
|
||
"recentAsc": "Mesure la plus ancienne d'abord",
|
||
"alphaAsc": "Nom (A–Z)",
|
||
"alphaDesc": "Nom (Z–A)",
|
||
"manual": "Trier manuellement",
|
||
"hint": "En tri manuel, vous pouvez glisser les biomarqueurs ci-dessous dans votre propre ordre."
|
||
},
|
||
"range": {
|
||
"inRange": "Dans la norme",
|
||
"below": "Sous la norme",
|
||
"above": "Au-dessus de la norme"
|
||
},
|
||
"form": {
|
||
"value": "Valeur",
|
||
"takenAt": "Date du prélèvement",
|
||
"note": "Note",
|
||
"notePlaceholder": "Contexte facultatif pour ce résultat",
|
||
"requiredError": "Saisissez une valeur.",
|
||
"save": "Enregistrer",
|
||
"savedToast": "Résultat enregistré",
|
||
"saveError": "Impossible d'enregistrer le résultat",
|
||
"biomarker": "Biomarqueur",
|
||
"biomarkerPlaceholder": "Choisir un biomarqueur",
|
||
"defineNew": "+ Définir un nouveau biomarqueur",
|
||
"noBiomarkersHint": "Définissez d'abord un biomarqueur pour enregistrer une valeur.",
|
||
"pickBiomarkerError": "Choisissez d'abord un biomarqueur.",
|
||
"resultType": "Type de résultat",
|
||
"numeric": "Numérique",
|
||
"qualitative": "Qualitatif",
|
||
"qualitativeResult": "Résultat",
|
||
"qualitativePlaceholder": "p. ex. négatif",
|
||
"qualNegative": "négatif",
|
||
"qualPositive": "positif",
|
||
"qualBorderline": "limite"
|
||
},
|
||
"backToLabs": "Retour aux résultats",
|
||
"hasNote": "Note",
|
||
"editTitle": "Modifier la mesure",
|
||
"editDescription": "Corrigez la valeur, la date ou la note de cette mesure.",
|
||
"editedToast": "Mesure mise à jour",
|
||
"editError": "Impossible de mettre à jour la mesure",
|
||
"editTimestampError": "Saisissez une date valide.",
|
||
"editReading": "Modifier la mesure",
|
||
"deleteReading": "Supprimer la mesure",
|
||
"restoredToast": "Mesure restaurée",
|
||
"restoreError": "Impossible de restaurer la mesure",
|
||
"detail": {
|
||
"history": "Historique",
|
||
"emptyTitle": "Aucune mesure pour l'instant",
|
||
"emptyDescription": "Ajoutez une valeur pour suivre ce biomarqueur dans le temps."
|
||
},
|
||
"chart": {
|
||
"empty": "Aucune mesure sur cette période.",
|
||
"valueLabel": "Valeur",
|
||
"range": {
|
||
"30": "30 j",
|
||
"90": "90 j",
|
||
"365": "1 a",
|
||
"all": "Tout"
|
||
}
|
||
},
|
||
"biomarker": {
|
||
"manageTitle": "Biomarqueurs",
|
||
"managerDescription": "Définissez un marqueur une fois — son unité et sa plage sont réutilisées pour chaque mesure.",
|
||
"define": "Définir",
|
||
"defineFirst": "Définir votre premier biomarqueur",
|
||
"defineTitle": "Définir un biomarqueur",
|
||
"defineDescription": "Réglez le nom, l'unité et la plage une fois. Vous choisissez le marqueur à l'ajout d'une valeur.",
|
||
"editTitle": "Modifier le biomarqueur",
|
||
"edit": "Modifier",
|
||
"delete": "Supprimer",
|
||
"deletedToast": "Biomarqueur supprimé",
|
||
"deleteError": "Impossible de supprimer le biomarqueur",
|
||
"deleteConfirmTitle": "Supprimer le biomarqueur ?",
|
||
"deleteConfirmDescription": "La définition est supprimée. Les mesures existantes sont conservées mais dissociées.",
|
||
"emptyTitle": "Aucun biomarqueur pour l'instant",
|
||
"emptyDescription": "Définissez des marqueurs comme LDL ou HbA1c pour enregistrer des valeurs.",
|
||
"loadError": "Impossible de charger les biomarqueurs",
|
||
"noRange": "Pas de plage de référence",
|
||
"form": {
|
||
"seedLabel": "Partir d'un marqueur courant",
|
||
"seedPlaceholder": "Choisir un marqueur (facultatif)",
|
||
"seedHint": "En choisir un remplit les champs — ajustez la plage à votre laboratoire.",
|
||
"name": "Nom",
|
||
"namePlaceholder": "ex. Cholestérol LDL",
|
||
"unit": "Unité",
|
||
"unitPlaceholder": "ex. mg/dL",
|
||
"panel": "Panel",
|
||
"panelPlaceholder": "ex. Lipides",
|
||
"lowerBound": "Référence basse",
|
||
"upperBound": "Référence haute",
|
||
"lowerPlaceholder": "Borne inférieure",
|
||
"upperPlaceholder": "Borne supérieure",
|
||
"context": "Contexte",
|
||
"contextPlaceholder": "Note facultative sur ce marqueur",
|
||
"rangeHint": "Les deux bornes sont facultatives — laissez-en une vide pour une plage ouverte (ex. LDL < 116).",
|
||
"requiredError": "Le nom et l'unité sont requis.",
|
||
"rangeOrderError": "La borne inférieure ne doit pas dépasser la borne supérieure.",
|
||
"save": "Enregistrer le biomarqueur",
|
||
"savedToast": "Biomarqueur enregistré",
|
||
"updatedToast": "Biomarqueur mis à jour",
|
||
"saveError": "Impossible d'enregistrer le biomarqueur"
|
||
}
|
||
},
|
||
"catalog": {
|
||
"total-cholesterol": "Cholestérol total",
|
||
"ldl": "Cholestérol LDL",
|
||
"hdl": "Cholestérol HDL",
|
||
"triglycerides": "Triglycérides",
|
||
"fasting-glucose": "Glycémie à jeun",
|
||
"hba1c": "HbA1c",
|
||
"tsh": "TSH",
|
||
"ft3": "T3 libre",
|
||
"ft4": "T4 libre",
|
||
"ferritin": "Ferritine",
|
||
"transferrin-saturation": "Saturation de la transferrine",
|
||
"vitamin-d": "Vitamine D (25-OH)",
|
||
"vitamin-b12": "Vitamine B12",
|
||
"folate": "Folate",
|
||
"hs-crp": "CRP us",
|
||
"creatinine": "Créatinine",
|
||
"egfr": "DFGe",
|
||
"alt": "ALAT",
|
||
"ast": "ASAT",
|
||
"ggt": "GGT",
|
||
"sodium": "Sodium",
|
||
"potassium": "Potassium",
|
||
"hemoglobin": "Hémoglobine",
|
||
"hematocrit": "Hématocrite",
|
||
"wbc": "Leucocytes",
|
||
"platelets": "Plaquettes",
|
||
"panel": {
|
||
"lipids": "Lipides",
|
||
"glucose": "Métabolisme du glucose",
|
||
"thyroid": "Thyroïde",
|
||
"iron": "Fer",
|
||
"vitamins": "Vitamines",
|
||
"inflammation": "Inflammation",
|
||
"renal": "Rein",
|
||
"liver": "Foie",
|
||
"electrolytes": "Électrolytes",
|
||
"bloodCount": "Numération sanguine"
|
||
}
|
||
},
|
||
"noteLoadFailed": "La note n’a pas pu être chargée ; elle restera inchangée à l’enregistrement.",
|
||
"showingLatestOf": "Affichage des {shown} derniers résultats sur {total}",
|
||
"ocr": {
|
||
"scanButton": "Scanner un compte rendu",
|
||
"addScan": "Scanner un document",
|
||
"addManual": "Ajouter une valeur manuellement",
|
||
"uploadHint": "Importez une photo ou un PDF d'un compte rendu de laboratoire",
|
||
"acceptWithPdf": "JPEG, PNG, WebP ou PDF",
|
||
"acceptImageOnly": "JPEG, PNG ou WebP",
|
||
"extracting": "Lecture de votre compte rendu…",
|
||
"readingOnDevice": "Lecture sur votre appareil…",
|
||
"localModeHint": "Lu sur votre appareil, puis envoyé sous forme de texte. Moins précis — vérifiez chaque valeur.",
|
||
"rangeFromScan": "Valeurs de référence issues du scan",
|
||
"rangeVerify": "Vérifiez les valeurs de référence",
|
||
"reviewTitle": "Vérifier avant d'enregistrer",
|
||
"reviewHint": "Vérifiez chaque valeur, puis enregistrez celles à conserver.",
|
||
"foundCount": "{count} valeurs trouvées",
|
||
"confirmRow": "Inclure cette valeur",
|
||
"analyteLabel": "Nom de l'analyse",
|
||
"resultLabel": "Résultat",
|
||
"valueLabel": "Valeur",
|
||
"unitLabel": "Unité",
|
||
"dateLabel": "Date",
|
||
"refLowLabel": "Référence basse",
|
||
"refHighLabel": "Référence haute",
|
||
"newBiomarker": "Nouveau biomarqueur — sera créé",
|
||
"linksExisting": "Lié au {name} existant",
|
||
"duplicateWarning": "Une valeur correspondante existe déjà",
|
||
"lowConfidence": "Veuillez vérifier cette valeur",
|
||
"valueUnreadable": "Valeur illisible — saisissez-la manuellement",
|
||
"saveSelected": "Enregistrer {count} sélectionnées",
|
||
"discardAll": "Tout abandonner",
|
||
"savedToast": "{count} résultats de laboratoire enregistrés",
|
||
"noRows": "Aucune valeur n'a pu être trouvée dans ce compte rendu.",
|
||
"nothingToSave": "Sélectionnez au moins une valeur à enregistrer.",
|
||
"saveFailed": "Impossible d'enregistrer les valeurs. Veuillez réessayer.",
|
||
"providerUnsupported": "Votre fournisseur d'IA ne peut pas lire les images. Configurez un modèle capable de vision.",
|
||
"consentRequired": "Le consentement au traitement par IA est requis pour scanner un compte rendu.",
|
||
"rateLimited": "Trop de scans. Réessayez plus tard.",
|
||
"budgetExceeded": "Votre budget d'utilisation de l'IA pour aujourd'hui est atteint.",
|
||
"fileTooLarge": "Le fichier est trop volumineux (max. 12 Mo).",
|
||
"fileType": "Importez un JPEG, PNG, WebP ou PDF.",
|
||
"extractFailed": "Impossible de lire le compte rendu. Essayez une photo plus nette.",
|
||
"pdfNeedsAnthropic": "Le scan PDF nécessite un fournisseur de vision Claude ; importez plutôt une photo."
|
||
}
|
||
},
|
||
"modules": {
|
||
"cycle": {
|
||
"label": "Cycle",
|
||
"description": "Suivez règles, phases et prévisions."
|
||
},
|
||
"mood": {
|
||
"label": "Humeur",
|
||
"description": "Notez l'humeur quotidienne et les tags."
|
||
},
|
||
"sleep": {
|
||
"label": "Sommeil",
|
||
"description": "Durée, phases et chronologie du sommeil."
|
||
},
|
||
"glucose": {
|
||
"label": "Glycémie",
|
||
"description": "Mesures de glycémie et tendances."
|
||
},
|
||
"workouts": {
|
||
"label": "Entraînements",
|
||
"description": "Séances d'entraînement et activité."
|
||
},
|
||
"recovery": {
|
||
"label": "Récupération",
|
||
"description": "Indicateurs de récupération et de charge de vos appareils."
|
||
},
|
||
"labs": {
|
||
"label": "Résultats de labo",
|
||
"description": "Enregistrez les résultats de laboratoire et leur historique."
|
||
},
|
||
"achievements": {
|
||
"label": "Réussites",
|
||
"description": "Badges et séries pour votre routine."
|
||
},
|
||
"coach": {
|
||
"label": "Coach",
|
||
"description": "Chat IA fondé sur vos propres données."
|
||
},
|
||
"insights": {
|
||
"label": "Insights",
|
||
"description": "Analyses IA, briefing et corrélations."
|
||
},
|
||
"doctorReport": {
|
||
"label": "Rapport médical",
|
||
"description": "Export PDF et FHIR pour votre cabinet."
|
||
},
|
||
"medications": {
|
||
"label": "Médicaments",
|
||
"description": "Schémas, prises et observance."
|
||
},
|
||
"illness": {
|
||
"label": "Journal de maladie",
|
||
"description": "Suivez les épisodes de maladie et d'affections avec un historique quotidien des symptômes."
|
||
}
|
||
},
|
||
"illness": {
|
||
"title": "Journal de maladie",
|
||
"subtitle": "Un suivi rétrospectif de vos épisodes de maladie et d'affections.",
|
||
"settings": {
|
||
"viewDescription": "Choisis si les épisodes s'affichent en cartes ou en liste compacte.",
|
||
"orderDescription": "Fais glisser tes épisodes dans l'ordre où tu veux les voir."
|
||
},
|
||
"customize": "Personnaliser le journal de maladie",
|
||
"newEpisode": "Nouvel épisode",
|
||
"logDay": "Enregistrer un jour",
|
||
"markRecovered": "Marquer comme rétabli",
|
||
"deletedToast": "Épisode supprimé",
|
||
"restoreError": "Impossible de restaurer l'épisode",
|
||
"onsetOn": "Débuté le {date}",
|
||
"recoveredOn": "rétabli {date}",
|
||
"status": {
|
||
"active": "En cours",
|
||
"ongoing": "Persistant",
|
||
"recovered": "Rétabli"
|
||
},
|
||
"empty": {
|
||
"title": "Aucun épisode pour l'instant",
|
||
"body": "Démarrez un épisode pour tenir un historique quotidien des symptômes et revoir son évolution."
|
||
},
|
||
"type": {
|
||
"INFECTION": "Infection",
|
||
"ALLERGY": "Allergie",
|
||
"INJURY": "Blessure",
|
||
"MENTAL_HEALTH": "Santé mentale",
|
||
"AUTOIMMUNE": "Auto-immune",
|
||
"CHRONIC": "Chronique",
|
||
"OTHER": "Autre"
|
||
},
|
||
"lifecycle": {
|
||
"ACUTE": "Aiguë",
|
||
"CHRONIC_ONGOING": "Chronique / persistante",
|
||
"RECURRING": "Récurrente",
|
||
"FLARE": "Poussée"
|
||
},
|
||
"new": {
|
||
"title": "Nouvel épisode",
|
||
"description": "Enregistrez une maladie ou une affection. Vous pourrez ensuite noter les symptômes au quotidien.",
|
||
"label": "Nom",
|
||
"labelPlaceholder": "p. ex. Rhume",
|
||
"type": "Type",
|
||
"lifecycle": "Évolution",
|
||
"onset": "Débuté le",
|
||
"note": "Note",
|
||
"notePlaceholder": "Ce qui mérite d'être noté (chiffré).",
|
||
"saveError": "Impossible d'enregistrer l'épisode. Veuillez réessayer.",
|
||
"parent": "Part of",
|
||
"parentNone": "Not linked"
|
||
},
|
||
"sheet": {
|
||
"title": "Enregistrer {date}",
|
||
"description": "Notez les symptômes du jour, votre forme et une éventuelle fièvre.",
|
||
"symptoms": "Symptômes",
|
||
"functionalImpact": "Votre forme",
|
||
"fever": "Température",
|
||
"note": "Note",
|
||
"noteSet": "Définie",
|
||
"notePlaceholder": "Comment s'est passée la journée (chiffré).",
|
||
"severityFor": "Intensité de {symptom}",
|
||
"saveError": "Impossible d'enregistrer la journée. Veuillez réessayer.",
|
||
"day": "Day"
|
||
},
|
||
"impact": {
|
||
"0": "Pleinement fonctionnel",
|
||
"1": "Légèrement limité",
|
||
"2": "Surtout au repos",
|
||
"3": "Alité"
|
||
},
|
||
"symptom": {
|
||
"runnyNose": "Nez qui coule",
|
||
"stuffyNose": "Nez bouché",
|
||
"sneezing": "Éternuements",
|
||
"soreThroat": "Mal de gorge",
|
||
"cough": "Toux",
|
||
"headache": "Mal de tête",
|
||
"bodyAches": "Courbatures",
|
||
"fatigue": "Fatigue"
|
||
},
|
||
"correlation": {
|
||
"title": "Comment cela s'est déroulé",
|
||
"learning": "Encore en apprentissage — enregistre quelques jours de plus pour voir des tendances ici.",
|
||
"preOnsetTitle": "Comment cela s'est annoncé",
|
||
"preOnsetBody": "Signaux qui se sont écartés de ta base avant le début que tu as noté.",
|
||
"nadirTitle": "Ce qui a changé",
|
||
"nadirBody": "À quel point chaque signal suivi s'est écarté de ta plage habituelle.",
|
||
"recoveryGapTitle": "Écart de récupération",
|
||
"recoveryGapLag": "Tes valeurs se sont stabilisées {days} jours après que tu te sois senti mieux.",
|
||
"recoveryGapLead": "Tes valeurs se sont stabilisées {days} jours avant que tu notes la guérison.",
|
||
"recoveryGapLagSymptom": "Tu t'es senti mieux {days} jours avant que tes symptômes consignés s'apaisent.",
|
||
"recoveryGapLeadSymptom": "Tes symptômes consignés se sont apaisés {days} jours avant que tu notes la guérison.",
|
||
"recoveryGapSame": "Tes valeurs se sont stabilisées le jour même où tu t'es senti mieux.",
|
||
"redFlagTitle": "À examiner de plus près",
|
||
"redFlagSpo2": "Ta saturation en oxygène est restée basse plusieurs jours. Si cela se reproduit, consulte un médecin.",
|
||
"redFlagFever": "Tu as eu une fièvre persistante. Si cela se reproduit, consulte un médecin.",
|
||
"direction": {
|
||
"above": "au-dessus de ton habituel",
|
||
"below": "en dessous de ton habituel"
|
||
}
|
||
},
|
||
"insights": {
|
||
"title": "Ton historique de maladies",
|
||
"countOne": "Tu as enregistré 1 épisode sur cette période.",
|
||
"countOther": "Tu as enregistré {count} épisodes sur cette période.",
|
||
"typicalGap": "Écart de récupération typique : {days} jours entre le mieux-être et la stabilisation de tes valeurs.",
|
||
"typicalGapWithDriver": "Écart de récupération typique : {days} jours – tu te sens généralement mieux avant que {vital} ne se stabilise.",
|
||
"typicalGapLearning": "Encore quelques épisodes résolus et un écart de récupération typique apparaîtra ici.",
|
||
"none": "Aucun épisode enregistré sur cette période.",
|
||
"analyze": "Analyser l'écart de récupération"
|
||
},
|
||
"section": {
|
||
"active": "Actifs",
|
||
"resolved": "Résolus"
|
||
},
|
||
"flares": {
|
||
"countOne": "1 poussée",
|
||
"countOther": "{count} poussées"
|
||
},
|
||
"timeline": {
|
||
"title": "Chronologie du jour",
|
||
"error": "Impossible de charger la chronologie.",
|
||
"severity": "Intensité {severity}",
|
||
"noSymptoms": "Aucun symptôme enregistré.",
|
||
"impact": "Votre forme : {impact}",
|
||
"fever": "Température : {value} °C",
|
||
"empty": "Aucun jour enregistré pour l’instant."
|
||
},
|
||
"loadError": "Could not load this episode.",
|
||
"backToList": "Back to journal",
|
||
"detail": {
|
||
"note": "Note"
|
||
},
|
||
"edit": {
|
||
"title": "Edit episode",
|
||
"description": "Update this episode's details."
|
||
},
|
||
"menu": {
|
||
"label": "Episode actions"
|
||
},
|
||
"deleteConfirm": {
|
||
"title": "Delete this episode?",
|
||
"body": "“{label}” and all its day-logs will be removed. This cannot be undone."
|
||
},
|
||
"vital": {
|
||
"RESTING_HEART_RATE": "Resting heart rate",
|
||
"HEART_RATE_VARIABILITY": "Heart-rate variability",
|
||
"RECOVERY_SCORE": "Recovery",
|
||
"OXYGEN_SATURATION": "Oxygen saturation",
|
||
"BODY_TEMPERATURE": "Body temperature",
|
||
"SKIN_TEMPERATURE": "Skin temperature",
|
||
"RESPIRATORY_RATE": "Respiratory rate",
|
||
"BLOOD_PRESSURE_SYS": "Systolic blood pressure",
|
||
"BLOOD_PRESSURE_DIA": "Diastolic blood pressure",
|
||
"PULSE": "Pulse",
|
||
"WEIGHT": "Weight"
|
||
}
|
||
},
|
||
"coach": {
|
||
"reminderSuggestion": {
|
||
"title": "Créer un rappel ?",
|
||
"accept": "Créer le rappel",
|
||
"dismiss": "Pas maintenant",
|
||
"stop": "Je mesure assez",
|
||
"accepted": "Rappel créé",
|
||
"dismissed": "D'accord, je ne le proposerai plus",
|
||
"stopped": "Compris, j'arrête de proposer des rappels",
|
||
"failed": "Échec de la création, veuillez réessayer",
|
||
"cadence": {
|
||
"weightDaily": "Pesez-vous chaque jour, à peu près à la même heure",
|
||
"bp722": "Mesurez votre tension deux fois par jour pendant une semaine",
|
||
"glucoseStructured": "Mesurez votre glycémie selon un horaire quotidien structuré"
|
||
}
|
||
},
|
||
"settings": {
|
||
"reminderSuggestionsLabel": "Suggestions de fréquence",
|
||
"reminderSuggestionsDescription": "Laissez le Coach proposer de temps en temps un rappel fondé sur des preuves pour mesurer une donnée plus régulièrement."
|
||
}
|
||
},
|
||
"safety": {
|
||
"floor": {
|
||
"bpHighTitle": "Tension artérielle très élevée",
|
||
"bpHighDoctor": "Deux mesures récentes étaient à {systolic}/{diastolic} mmHg ou plus. Repose-toi, remesure dans quelques minutes et contacte ton médecin dès que possible si cela reste aussi élevé.",
|
||
"bpHighEmergency": "Deux mesures récentes étaient à {systolic}/{diastolic} mmHg ou plus et tu as signalé des symptômes. En cas de douleur thoracique, d'essoufflement, de faiblesse ou de troubles de la vision ou de la parole, appelle les secours immédiatement.",
|
||
"bpLowTitle": "Tension artérielle basse",
|
||
"bpLowDoctor": "Deux mesures récentes avaient une systolique inférieure à {systolic} mmHg. Si tu te sens étourdi ou faible, assieds-toi ou allonge-toi et contacte ton médecin si cela persiste.",
|
||
"bpLowEmergency": "Deux mesures récentes avaient une systolique inférieure à {systolic} mmHg et tu as signalé des symptômes. Si tu te sens près de t'évanouir, confus ou as la peau froide et moite, appelle les secours immédiatement.",
|
||
"glucoseLowTitle": "Glycémie basse",
|
||
"glucoseLowDoctor": "Deux mesures récentes étaient en dessous de 70 mg/dL ({value} mg/dL). Prends des glucides à action rapide, remesure dans 15 minutes et contacte ton médecin si les baisses persistent.",
|
||
"glucoseLowEmergency": "Deux mesures récentes étaient en dessous de 70 mg/dL ({value} mg/dL) et tu as signalé des symptômes. Traite maintenant avec du sucre rapide ; si tu ne peux pas ou te sens très mal, appelle les secours.",
|
||
"glucoseLowSevereTitle": "Glycémie très basse",
|
||
"glucoseLowSevereDoctor": "Deux mesures récentes étaient en dessous de 54 mg/dL ({value} mg/dL). Traite immédiatement avec des glucides à action rapide, remesure dans 15 minutes et contacte ton médecin.",
|
||
"glucoseLowSevereEmergency": "Deux mesures récentes étaient en dessous de 54 mg/dL ({value} mg/dL) et tu as signalé des symptômes. Traite maintenant ; si tu ne gardes pas la nourriture ou te sens très mal, appelle les secours.",
|
||
"glucoseHighTitle": "Glycémie très élevée",
|
||
"glucoseHighDoctor": "Deux mesures récentes étaient à {value} mg/dL ou plus. Remesure, hydrate-toi et contacte ton médecin dès que possible si cela reste aussi élevé.",
|
||
"glucoseHighEmergency": "Deux mesures récentes étaient à {value} mg/dL ou plus et tu as signalé des symptômes. En cas de vomissements, de respiration rapide ou de confusion, appelle les secours immédiatement."
|
||
}
|
||
}
|
||
}
|