{ "message": { "hello": "Bonjour" }, "loginPage": { "emailLabel": "E-mail", "passwordLabel": "Mot de passe", "togglePasswordVisibilityLabel": "Basculer la visibilité du mot de passe", "loginButton": "Connexion", "signupLink": "Vous n'avez pas de compte ? S'inscrire", "errors": { "emailRequired": "L'e-mail est requis", "emailInvalid": "Format d'e-mail invalide", "passwordRequired": "Le mot de passe est requis", "loginFailed": "Échec de la connexion. Veuillez vérifier vos identifiants." }, "notifications": { "loginSuccess": "Connexion réussie" } }, "listsPage": { "retryButton": "Réessayer", "emptyState": { "noListsForGroup": "Aucune liste trouvée pour ce groupe.", "noListsYet": "Vous n'avez pas encore de listes.", "personalGlobalInfo": "Créez une liste personnelle ou rejoignez un groupe pour voir les listes partagées.", "groupSpecificInfo": "Ce groupe n'a pas encore de listes." }, "createNewListButton": "Créer une nouvelle liste", "loadingLists": "Chargement des listes...", "noDescription": "Pas de description", "addItemPlaceholder": "Ajouter un nouvel article...", "createCard": { "title": "+ Liste" }, "pageTitle": { "forGroup": "Listes pour {groupName}", "forGroupId": "Listes pour le groupe {groupId}", "myLists": "Mes listes" }, "errors": { "fetchFailed": "Échec de la récupération des listes." } }, "groupsPage": { "retryButton": "Réessayer", "emptyState": { "title": "Pas encore de groupes !", "description": "Vous n'êtes membre d'aucun groupe pour le moment. Créez-en un ou rejoignez-en un à l'aide d'un code d'invitation.", "createButton": "Créer un nouveau groupe" }, "groupCard": { "newListButton": "Liste" }, "createCard": { "title": "+ Groupe" }, "joinGroup": { "title": "Rejoindre un groupe avec un code d'invitation", "inputLabel": "Entrez le code d'invitation", "inputPlaceholder": "Entrez le code d'invitation", "joinButton": "Rejoindre" }, "createDialog": { "title": "Créer un nouveau groupe", "closeButtonLabel": "Fermer", "groupNameLabel": "Nom du groupe", "cancelButton": "Annuler", "createButton": "Créer" }, "errors": { "fetchFailed": "Échec du chargement des groupes", "groupNameRequired": "Le nom du groupe est requis", "createFailed": "Échec de la création du groupe. Veuillez réessayer.", "inviteCodeRequired": "Le code d'invitation est requis", "joinFailed": "Échec pour rejoindre le groupe. Veuillez vérifier le code d'invitation et réessayer.", "invalidDataFromServer": "Données invalides reçues du serveur.", "createFailedConsole": "Erreur lors de la création du groupe :", "joinFailedConsole": "Erreur pour rejoindre le groupe :" }, "notifications": { "groupCreatedSuccess": "Groupe '{groupName}' créé avec succès.", "joinSuccessNamed": "Vous avez rejoint le groupe '{groupName}' avec succès.", "joinSuccessGeneric": "Vous avez rejoint le groupe avec succès.", "listCreatedSuccess": "Liste '{listName}' créée avec succès." } }, "authCallbackPage": { "redirecting": "Redirection...", "errors": { "authenticationFailed": "Échec de l'authentification", "noTokenProvided": "Aucun jeton fourni" } }, "choresPage": { "title": "Tâches", "tabs": { "overdue": "En retard", "today": "Aujourd'hui", "upcoming": "À venir", "allPending": "Toutes en attente", "completed": "Terminées" }, "viewToggle": { "calendarLabel": "Vue Calendrier", "calendarText": "Calendrier", "listLabel": "Vue Liste", "listText": "Liste" }, "newChoreButtonLabel": "Nouvelle tâche", "newChoreButtonText": "Nouvelle tâche", "loadingState": { "loadingChores": "Chargement des tâches..." }, "calendar": { "prevMonthLabel": "Mois précédent", "nextMonthLabel": "Mois suivant", "weekdays": { "sun": "Dim", "mon": "Lun", "tue": "Mar", "wed": "Mer", "thu": "Jeu", "fri": "Ven", "sat": "Sam" }, "addChoreToDayLabel": "Ajouter une tâche à ce jour", "emptyState": "Aucune tâche à afficher pour cette période." }, "listView": { "choreTypePersonal": "Personnel", "choreTypeGroupFallback": "Groupe", "completedDatePrefix": "Terminée le :", "actions": { "doneTitle": "Marquer comme terminée", "doneText": "Terminée", "undoTitle": "Marquer comme non terminée", "undoText": "Annuler", "editTitle": "Modifier", "editLabel": "Modifier la tâche", "editText": "Modifier", "deleteTitle": "Supprimer", "deleteLabel": "Supprimer la tâche", "deleteText": "Supprimer" }, "emptyState": { "message": "Aucune tâche dans cette vue. Bien joué !", "viewAllButton": "Voir toutes les tâches en attente" } }, "choreModal": { "editTitle": "Modifier la tâche", "newTitle": "Nouvelle tâche", "closeButtonLabel": "Fermer la modale", "nameLabel": "Nom", "namePlaceholder": "Entrez le nom de la tâche", "typeLabel": "Type", "typePersonal": "Personnel", "typeGroup": "Groupe", "groupLabel": "Groupe", "groupSelectDefault": "Sélectionnez un groupe", "descriptionLabel": "Description", "descriptionPlaceholder": "Ajoutez une description (facultatif)", "frequencyLabel": "Fréquence", "intervalLabel": "Intervalle (jours)", "intervalPlaceholder": "ex: 10", "dueDateLabel": "Date d'échéance", "quickDueDateToday": "Aujourd'hui", "quickDueDateTomorrow": "Demain", "quickDueDateNextWeek": "Semaine prochaine", "cancelButton": "Annuler", "saveButton": "Enregistrer" }, "consoleErrors": { "loadFailed": "Échec du chargement de toutes les tâches :", "loadGroupsFailed": "Échec du chargement des groupes", "createAssignmentForNewChoreFailed": "Échec de la création de l'affectation pour la nouvelle tâche :", "saveFailed": "Échec de l'enregistrement de la tâche :", "deleteFailed": "Échec de la suppression de la tâche :", "createAssignmentFailed": "Échec de la création de l'affectation :", "updateCompletionStatusFailed": "Échec de la mise à jour du statut d'achèvement de la tâche :" }, "deleteDialog": { "title": "Supprimer la tâche", "confirmationText": "Êtes-vous sûr de vouloir supprimer cette tâche ? Cette action est irréversible.", "deleteButton": "Supprimer" }, "shortcutsModal": { "title": "Raccourcis clavier", "descNewChore": "Nouvelle tâche", "descToggleView": "Basculer la vue (Liste/Calendrier)", "descToggleShortcuts": "Afficher/Masquer les raccourcis", "descCloseModal": "Fermer toute modale/dialogue ouvert" }, "frequencyOptions": { "oneTime": "Une fois", "daily": "Quotidien", "weekly": "Hebdomadaire", "monthly": "Mensuel", "custom": "Personnalisé" }, "frequency": { "customInterval": "Tous les {n} jour | Tous les {n} jours" }, "formatters": { "noDueDate": "Pas de date d'échéance", "dueToday": "Pour aujourd'hui", "dueTomorrow": "Pour demain", "overdueFull": "En retard : {date}", "dueFull": "Échéance le {date}", "invalidDate": "Date invalide" }, "notifications": { "loadFailed": "Échec du chargement des tâches.", "loadGroupsFailed": "Échec du chargement des groupes.", "updateSuccess": "Tâche '{name}' mise à jour avec succès.", "createSuccess": "Tâche '{name}' créée avec succès.", "updateFailed": "Échec de la mise à jour de la tâche.", "createFailed": "Échec de la création de la tâche.", "deleteSuccess": "Tâche '{name}' supprimée avec succès.", "deleteFailed": "Échec de la suppression de la tâche.", "markedDone": "{name} marquée comme terminée.", "markedNotDone": "{name} marquée comme non terminée.", "statusUpdateFailed": "Échec de la mise à jour du statut de la tâche.", "createAssignmentFailed": "Échec de la création de l'affectation pour la tâche." }, "validation": { "nameRequired": "Le nom de la tâche est requis.", "groupRequired": "Veuillez sélectionner un groupe pour les tâches de groupe.", "intervalRequired": "L'intervalle personnalisé doit être d'au moins 1 jour.", "dueDateRequired": "La date d'échéance est requise.", "invalidDueDate": "Format de date d'échéance invalide." }, "unsavedChangesConfirmation": "Vous avez des modifications non enregistrées dans le formulaire de tâche. Êtes-vous sûr de vouloir quitter ?" }, "errorNotFoundPage": { "errorCode": "404", "errorMessage": "Oups. Rien ici...", "goHomeButton": "Aller à l'accueil" }, "groupDetailPage": { "loadingLabel": "Chargement des détails du groupe...", "retryButton": "Réessayer", "groupNotFound": "Groupe non trouvé ou une erreur s'est produite.", "members": { "title": "Membres du groupe", "defaultRole": "Membre", "removeButton": "Retirer", "emptyState": "Aucun membre trouvé.", "closeMenuLabel": "Fermer le menu" }, "invites": { "title": "Inviter des membres", "description": "Invitez de nouveaux membres en générant un code partageable.", "addMemberButtonLabel": "Ajouter un membre", "closeInviteLabel": "Fermer l'invitation", "regenerateButton": "Régénérer le code d'invitation", "generateButton": "Générer le code d'invitation", "activeCodeLabel": "Code d'invitation actif actuel :", "copyButtonLabel": "Copier le code d'invitation", "copySuccess": "Code d'invitation copié dans le presse-papiers !", "emptyState": "Aucun code d'invitation actif. Cliquez sur le bouton ci-dessus pour en générer un.", "errors": { "newDataInvalid": "Les données du nouveau code d'invitation sont invalides." } }, "errors": { "failedToFetchActiveInvite": "Échec de la récupération du code d'invitation actif.", "failedToFetchGroupDetails": "Échec de la récupération des détails du groupe.", "failedToLoadUpcomingChores": "Erreur lors du chargement des tâches à venir :", "failedToLoadRecentExpenses": "Erreur lors du chargement des dépenses récentes :" }, "console": { "noActiveInvite": "Aucun code d'invitation actif trouvé pour ce groupe." }, "chores": { "title": "Tâches du groupe", "manageButton": "Gérer les tâches", "duePrefix": "Échéance :", "emptyState": "Aucune tâche planifiée. Cliquez sur \"Gérer les tâches\" pour en créer !" }, "expenses": { "title": "Dépenses du groupe", "manageButton": "Gérer les dépenses", "emptyState": "Aucune dépense enregistrée. Cliquez sur \"Gérer les dépenses\" pour en ajouter !", "paidBy": "Payé par :", "owes": "doit", "paidAmount": "Payé :", "onDate": "le", "settleShareButton": "Régler ma part", "activityLabel": "Activité :", "byUser": "par", "fallbackUserName": "ID utilisateur : {userId}", "activityByUserFallback": "Utilisateur {userId}", "splitTypes": { "equal": "Égal", "exactAmounts": "Montants exacts", "percentage": "Pourcentage", "shares": "Parts", "itemBased": "Basé sur l'article" } }, "notifications": { "fetchDetailsFailed": "Échec de la récupération des détails du groupe.", "fetchInviteFailed": "Échec de la récupération du code d'invitation actif.", "generateInviteSuccess": "Nouveau code d'invitation généré avec succès !", "generateInviteError": "Échec de la génération du code d'invitation.", "clipboardNotSupported": "Presse-papiers non pris en charge ou aucun code à copier.", "copyInviteFailed": "Échec de la copie du code d'invitation.", "removeMemberSuccess": "Membre retiré avec succès", "removeMemberFailed": "Échec du retrait du membre", "loadExpensesFailed": "Échec du chargement des dépenses récentes.", "cannotSettleOthersShares": "Vous ne pouvez régler que vos propres parts.", "settlementDataMissing": "Impossible de traiter le règlement : données manquantes.", "settleShareSuccess": "Part réglée avec succès !", "settleShareFailed": "Échec du règlement de la part." }, "loading": { "settlement": "Traitement du règlement..." }, "settleShareModal": { "title": "Régler la part", "settleAmountFor": "Régler le montant pour {userName} :", "amountLabel": "Montant", "cancelButton": "Annuler", "confirmButton": "Confirmer", "errors": { "enterAmount": "Veuillez entrer un montant.", "positiveAmount": "Veuillez entrer un montant positif.", "exceedsRemaining": "Le montant ne peut pas dépasser le reste : {amount}.", "noSplitSelected": "Erreur : Aucune répartition sélectionnée." } }, "status": { "settled": "Réglé", "partiallySettled": "Partiellement réglé", "unsettled": "Non réglé", "paid": "Payé", "partiallyPaid": "Partiellement payé", "unpaid": "Non payé", "unknown": "Statut inconnu" } }, "accountPage": { "title": "Paramètres du compte", "loadingProfile": "Chargement du profil...", "retryButton": "Réessayer", "profileSection": { "header": "Informations du profil", "nameLabel": "Nom", "emailLabel": "E-mail", "saveButton": "Enregistrer les modifications" }, "passwordSection": { "header": "Changer le mot de passe", "currentPasswordLabel": "Mot de passe actuel", "newPasswordLabel": "Nouveau mot de passe", "changeButton": "Changer le mot de passe" }, "notificationsSection": { "header": "Préférences de notification", "emailNotificationsLabel": "Notifications par e-mail", "emailNotificationsDescription": "Recevoir des notifications par e-mail pour les mises à jour importantes", "listUpdatesLabel": "Mises à jour des listes", "listUpdatesDescription": "Être notifié lorsque les listes sont mises à jour", "groupActivitiesLabel": "Activités de groupe", "groupActivitiesDescription": "Recevoir des notifications pour les activités de groupe" }, "notifications": { "profileLoadFailed": "Échec du chargement du profil", "profileUpdateSuccess": "Profil mis à jour avec succès", "profileUpdateFailed": "Échec de la mise à jour du profil", "passwordFieldsRequired": "Veuillez remplir les champs du mot de passe actuel et du nouveau mot de passe.", "passwordTooShort": "Le nouveau mot de passe doit comporter au moins 8 caractères.", "passwordChangeSuccess": "Mot de passe changé avec succès", "passwordChangeFailed": "Échec du changement de mot de passe", "preferencesUpdateSuccess": "Préférences mises à jour avec succès", "preferencesUpdateFailed": "Échec de la mise à jour des préférences" }, "saving": "Enregistrement..." }, "signupPage": { "header": "S'inscrire", "fullNameLabel": "Nom complet", "emailLabel": "E-mail", "passwordLabel": "Mot de passe", "confirmPasswordLabel": "Confirmer le mot de passe", "togglePasswordVisibility": "Basculer la visibilité du mot de passe", "submitButton": "S'inscrire", "loginLink": "Vous avez déjà un compte ? Connexion", "validation": { "nameRequired": "Le nom est requis", "emailRequired": "L'e-mail est requis", "emailInvalid": "Format d'e-mail invalide", "passwordRequired": "Le mot de passe est requis", "passwordLength": "Le mot de passe doit comporter au moins 8 caractères", "confirmPasswordRequired": "Veuillez confirmer votre mot de passe", "passwordsNoMatch": "Les mots de passe ne correspondent pas" }, "notifications": { "signupFailed": "Échec de l'inscription. Veuillez réessayer.", "signupSuccess": "Compte créé avec succès. Veuillez vous connecter." } }, "listDetailPage": { "loading": { "list": "Chargement de la liste...", "items": "Chargement des articles...", "ocrProcessing": "Traitement de l'image...", "addingOcrItems": "Ajout des articles OCR...", "costSummary": "Chargement du résumé...", "expenses": "Chargement des dépenses...", "settlement": "Traitement du règlement..." }, "errors": { "fetchFailed": "Échec du chargement des détails de la liste.", "genericLoadFailure": "Groupe non trouvé ou une erreur s'est produite.", "ocrNoItems": "Aucun article extrait de l'image.", "ocrFailed": "Échec du traitement de l'image.", "addItemFailed": "Échec de l'ajout de l'article.", "updateItemFailed": "Échec de la mise à jour de l'article.", "updateItemPriceFailed": "Échec de la mise à jour du prix de l'article.", "deleteItemFailed": "Échec de la suppression de l'article.", "addOcrItemsFailed": "Échec de l'ajout des articles OCR.", "fetchItemsFailed": "Échec du chargement des articles : {errorMessage}", "loadCostSummaryFailed": "Échec du chargement du résumé des coûts." }, "retryButton": "Réessayer", "buttons": { "addViaOcr": "Ajouter via OCR", "addItem": "Ajouter", "addItems": "Ajouter des articles", "cancel": "Annuler", "confirm": "Confirmer", "saveChanges": "Enregistrer les modifications", "close": "Fermer", "costSummary": "Résumé des coûts" }, "badges": { "groupList": "Liste de groupe", "personalList": "Liste personnelle" }, "items": { "emptyState": { "title": "Pas encore d'articles !", "message": "Ajoutez des articles en utilisant le formulaire ci-dessous." }, "addItemForm": { "placeholder": "Ajouter un nouvel article", "quantityPlaceholder": "Qté", "itemNameSrLabel": "Nom du nouvel article", "quantitySrLabel": "Quantité" }, "pricePlaceholder": "Prix", "editItemAriaLabel": "Modifier l'article", "deleteItemAriaLabel": "Supprimer l'article" }, "modals": { "ocr": { "title": "Ajouter des articles via OCR", "uploadLabel": "Télécharger une image" }, "confirmation": { "title": "Confirmation" }, "editItem": { "title": "Modifier l'article", "nameLabel": "Nom de l'article", "quantityLabel": "Quantité" }, "costSummary": { "title": "Résumé des coûts de la liste", "totalCostLabel": "Coût total de la liste :", "equalShareLabel": "Part égale par utilisateur :", "participantsLabel": "Utilisateurs participants :", "userBalancesHeader": "Soldes des utilisateurs", "tableHeaders": { "user": "Utilisateur", "itemsAddedValue": "Valeur des articles ajoutés", "amountDue": "Montant dû", "balance": "Solde" }, "emptyState": "Aucun résumé des coûts disponible." }, "settleShare": { "title": "Régler la part", "settleAmountFor": "Régler le montant pour {userName} :", "amountLabel": "Montant", "errors": { "enterAmount": "Veuillez entrer un montant.", "positiveAmount": "Veuillez entrer un montant positif.", "exceedsRemaining": "Le montant ne peut pas dépasser le reste : {amount}.", "noSplitSelected": "Erreur : Aucune répartition sélectionnée." } } }, "confirmations": { "updateMessage": "Marquer '{itemName}' comme {status} ?", "statusComplete": "terminé", "statusIncomplete": "incomplet", "deleteMessage": "Supprimer '{itemName}' ? Ceci ne peut pas être annulé." }, "notifications": { "itemAddedSuccess": "Article ajouté avec succès.", "itemsAddedSuccessOcr": "{count} article(s) ajouté(s) avec succès depuis l'OCR.", "itemUpdatedSuccess": "Article mis à jour avec succès.", "itemDeleteSuccess": "Article supprimé avec succès.", "enterItemName": "Veuillez entrer un nom d'article.", "costSummaryLoadFailed": "Échec du chargement du résumé des coûts.", "cannotSettleOthersShares": "Vous ne pouvez régler que vos propres parts.", "settlementDataMissing": "Impossible de traiter le règlement : données manquantes.", "settleShareSuccess": "Part réglée avec succès !", "settleShareFailed": "Échec du règlement de la part." }, "expensesSection": { "title": "Dépenses", "addExpenseButton": "Ajouter une dépense", "loading": "Chargement des dépenses...", "emptyState": "Aucune dépense enregistrée pour cette liste pour le moment.", "paidBy": "Payé par :", "onDate": "le", "owes": "doit", "paidAmount": "Payé :", "activityLabel": "Activité :", "byUser": "par", "settleShareButton": "Régler ma part", "retryButton": "Réessayer" }, "status": { "settled": "Réglé", "partiallySettled": "Partiellement réglé", "unsettled": "Non réglé", "paid": "Payé", "partiallyPaid": "Partiellement payé", "unpaid": "Non payé", "unknown": "Statut inconnu" } }, "myChoresPage": { "title": "Mes tâches assignées", "showCompletedToggle": "Afficher les tâches terminées", "timelineHeaders": { "overdue": "En retard", "today": "Pour aujourd'hui", "thisWeek": "Cette semaine", "later": "Plus tard", "completed": "Terminées" }, "choreCard": { "personal": "Personnel", "group": "Groupe", "duePrefix": "Échéance", "completedPrefix": "Terminée", "dueToday": "Pour aujourd'hui", "markCompleteButton": "Marquer comme terminée" }, "frequencies": { "one_time": "Une fois", "daily": "Quotidien", "weekly": "Hebdomadaire", "monthly": "Mensuel", "custom": "Personnalisé", "unknown": "Fréquence inconnue" }, "dates": { "invalidDate": "Date invalide", "unknownDate": "Date inconnue" }, "emptyState": { "title": "Pas encore d'affectations !", "noAssignmentsPending": "Vous n'avez aucune affectation de tâche en attente.", "noAssignmentsAll": "Vous n'avez aucune affectation de tâche (terminée ou en attente).", "viewAllChoresButton": "Voir toutes les tâches" }, "notifications": { "loadFailed": "Échec du chargement des affectations", "markedComplete": "\"{choreName}\" marquée comme terminée !", "markCompleteFailed": "Échec du marquage de l'affectation comme terminée" } }, "personalChoresPage": { "title": "Tâches personnelles", "newChoreButton": "Nouvelle tâche", "editButton": "Modifier", "deleteButton": "Supprimer", "cancelButton": "Annuler", "saveButton": "Enregistrer", "modals": { "editChoreTitle": "Modifier la tâche", "newChoreTitle": "Nouvelle tâche", "deleteChoreTitle": "Supprimer la tâche" }, "form": { "nameLabel": "Nom", "descriptionLabel": "Description", "frequencyLabel": "Fréquence", "intervalLabel": "Intervalle (jours)", "dueDateLabel": "Prochaine date d'échéance" }, "deleteDialog": { "confirmationText": "Êtes-vous sûr de vouloir supprimer cette tâche ?" }, "frequencies": { "one_time": "Une fois", "daily": "Quotidien", "weekly": "Hebdomadaire", "monthly": "Mensuel", "custom": "Personnalisé", "unknown": "Fréquence inconnue" }, "dates": { "invalidDate": "Date invalide", "duePrefix": "Échéance" }, "notifications": { "loadFailed": "Échec du chargement des tâches personnelles", "updateSuccess": "Tâche personnelle mise à jour avec succès", "createSuccess": "Tâche personnelle créée avec succès", "saveFailed": "Échec de l'enregistrement de la tâche personnelle", "deleteSuccess": "Tâche personnelle supprimée avec succès", "deleteFailed": "Échec de la suppression de la tâche personnelle" } }, "indexPage": { "welcomeMessage": "Bienvenue sur l'application Valerie UI", "mainPageInfo": "Ceci est la page d'index principale.", "sampleTodosHeader": "Exemples de tâches (depuis les données IndexPage)", "totalCountLabel": "Nombre total depuis meta :", "noTodos": "Aucune tâche à afficher." }, "languageSelector": { "title": "Langue", "languages": { "en": "English", "de": "Deutsch", "nl": "Nederlands", "fr": "Français", "es": "Español" } } }