1544 lines
81 KiB
TypeScript
1544 lines
81 KiB
TypeScript
const fr: Record<string, string> = {
|
||
// Common
|
||
'common.save': 'Enregistrer',
|
||
'common.cancel': 'Annuler',
|
||
'common.delete': 'Supprimer',
|
||
'common.edit': 'Modifier',
|
||
'common.add': 'Ajouter',
|
||
'common.loading': 'Chargement…',
|
||
'common.import': 'Importer',
|
||
'common.error': 'Erreur',
|
||
'common.back': 'Retour',
|
||
'common.all': 'Tout',
|
||
'common.close': 'Fermer',
|
||
'common.open': 'Ouvrir',
|
||
'common.upload': 'Importer',
|
||
'common.search': 'Rechercher',
|
||
'common.confirm': 'Confirmer',
|
||
'common.ok': 'OK',
|
||
'common.yes': 'Oui',
|
||
'common.no': 'Non',
|
||
'common.or': 'ou',
|
||
'common.none': 'Aucun',
|
||
'common.date': 'Date',
|
||
'common.rename': 'Renommer',
|
||
'common.name': 'Nom',
|
||
'common.email': 'E-mail',
|
||
'common.password': 'Mot de passe',
|
||
'common.saving': 'Enregistrement…',
|
||
'common.saved': 'Enregistré',
|
||
'trips.reminder': 'Rappel',
|
||
'trips.reminderNone': 'Aucun',
|
||
'trips.reminderDay': 'jour',
|
||
'trips.reminderDays': 'jours',
|
||
'trips.reminderCustom': 'Personnalisé',
|
||
'trips.reminderDaysBefore': 'jours avant le départ',
|
||
'trips.reminderDisabledHint': 'Les rappels de voyage sont désactivés. Activez-les dans Admin > Paramètres > Notifications.',
|
||
'common.update': 'Mettre à jour',
|
||
'common.change': 'Modifier',
|
||
'common.uploading': 'Import en cours…',
|
||
'common.backToPlanning': 'Retour à la planification',
|
||
'common.reset': 'Réinitialiser',
|
||
|
||
// Navbar
|
||
'nav.trip': 'Voyage',
|
||
'nav.share': 'Partager',
|
||
'nav.settings': 'Paramètres',
|
||
'nav.admin': 'Admin',
|
||
'nav.logout': 'Déconnexion',
|
||
'nav.lightMode': 'Mode clair',
|
||
'nav.darkMode': 'Mode sombre',
|
||
'nav.autoMode': 'Mode auto',
|
||
'nav.administrator': 'Administrateur',
|
||
|
||
// Dashboard
|
||
'dashboard.title': 'Mes voyages',
|
||
'dashboard.subtitle.loading': 'Chargement des voyages…',
|
||
'dashboard.subtitle.trips': '{count} voyages ({archived} archivés)',
|
||
'dashboard.subtitle.empty': 'Commencez votre premier voyage',
|
||
'dashboard.subtitle.activeOne': '{count} voyage actif',
|
||
'dashboard.subtitle.activeMany': '{count} voyages actifs',
|
||
'dashboard.subtitle.archivedSuffix': ' · {count} archivés',
|
||
'dashboard.newTrip': 'Nouveau voyage',
|
||
'dashboard.gridView': 'Vue en grille',
|
||
'dashboard.listView': 'Vue en liste',
|
||
'dashboard.currency': 'Devise',
|
||
'dashboard.timezone': 'Fuseau horaire',
|
||
'dashboard.localTime': 'Heure locale',
|
||
'dashboard.timezoneCustomTitle': 'Fuseau horaire personnalisé',
|
||
'dashboard.timezoneCustomLabelPlaceholder': 'Libellé (facultatif)',
|
||
'dashboard.timezoneCustomTzPlaceholder': 'ex. America/New_York',
|
||
'dashboard.timezoneCustomAdd': 'Ajouter',
|
||
'dashboard.timezoneCustomErrorEmpty': 'Saisissez un identifiant de fuseau horaire',
|
||
'dashboard.timezoneCustomErrorInvalid': 'Fuseau horaire invalide. Utilisez un format comme Europe/Berlin',
|
||
'dashboard.timezoneCustomErrorDuplicate': 'Déjà ajouté',
|
||
'dashboard.emptyTitle': 'Aucun voyage',
|
||
'dashboard.emptyText': 'Créez votre premier voyage et commencez à planifier !',
|
||
'dashboard.emptyButton': 'Créer un premier voyage',
|
||
'dashboard.nextTrip': 'Prochain voyage',
|
||
'dashboard.shared': 'Partagé',
|
||
'dashboard.sharedBy': 'Partagé par {name}',
|
||
'dashboard.days': 'Jours',
|
||
'dashboard.places': 'Lieux',
|
||
'dashboard.members': 'Compagnons de voyage',
|
||
'dashboard.archive': 'Archiver',
|
||
'dashboard.copyTrip': 'Copier',
|
||
'dashboard.copySuffix': 'copie',
|
||
'dashboard.restore': 'Restaurer',
|
||
'dashboard.archived': 'Archivé',
|
||
'dashboard.status.ongoing': 'En cours',
|
||
'dashboard.status.today': "Aujourd'hui",
|
||
'dashboard.status.tomorrow': 'Demain',
|
||
'dashboard.status.past': 'Passé',
|
||
'dashboard.status.daysLeft': '{count} jours restants',
|
||
'dashboard.toast.loadError': 'Impossible de charger les voyages',
|
||
'dashboard.toast.created': 'Voyage créé avec succès !',
|
||
'dashboard.toast.createError': 'Impossible de créer le voyage',
|
||
'dashboard.toast.updated': 'Voyage mis à jour !',
|
||
'dashboard.toast.updateError': 'Impossible de mettre à jour le voyage',
|
||
'dashboard.toast.deleted': 'Voyage supprimé',
|
||
'dashboard.toast.deleteError': 'Impossible de supprimer le voyage',
|
||
'dashboard.toast.archived': 'Voyage archivé',
|
||
'dashboard.toast.archiveError': "Impossible d'archiver le voyage",
|
||
'dashboard.toast.restored': 'Voyage restauré',
|
||
'dashboard.toast.restoreError': 'Impossible de restaurer le voyage',
|
||
'dashboard.toast.copied': 'Voyage copié !',
|
||
'dashboard.toast.copyError': 'Impossible de copier le voyage',
|
||
'dashboard.confirm.delete': 'Supprimer le voyage « {title} » ? Tous les lieux et plans seront définitivement supprimés.',
|
||
'dashboard.editTrip': 'Modifier le voyage',
|
||
'dashboard.createTrip': 'Créer un nouveau voyage',
|
||
'dashboard.tripTitle': 'Titre',
|
||
'dashboard.tripTitlePlaceholder': 'ex. Été au Japon',
|
||
'dashboard.tripDescription': 'Description',
|
||
'dashboard.tripDescriptionPlaceholder': 'De quoi parle ce voyage ?',
|
||
'dashboard.startDate': 'Date de début',
|
||
'dashboard.endDate': 'Date de fin',
|
||
'dashboard.noDateHint': 'Aucune date définie — 7 jours par défaut seront créés. Vous pouvez modifier cela à tout moment.',
|
||
'dashboard.coverImage': 'Image de couverture',
|
||
'dashboard.addCoverImage': 'Ajouter une image de couverture',
|
||
'dashboard.addMembers': 'Compagnons de voyage',
|
||
'dashboard.addMember': 'Ajouter un membre',
|
||
'dashboard.coverSaved': 'Image de couverture enregistrée',
|
||
'dashboard.coverUploadError': 'Échec de l\'import',
|
||
'dashboard.coverRemoveError': 'Échec de la suppression',
|
||
'dashboard.titleRequired': 'Le titre est obligatoire',
|
||
'dashboard.endDateError': 'La date de fin doit être postérieure à la date de début',
|
||
|
||
// Settings
|
||
'settings.title': 'Paramètres',
|
||
'settings.subtitle': 'Configurez vos paramètres personnels',
|
||
'settings.map': 'Carte',
|
||
'settings.mapTemplate': 'Modèle de carte',
|
||
'settings.mapTemplatePlaceholder.select': 'Sélectionner un modèle…',
|
||
'settings.mapDefaultHint': 'Laissez vide pour OpenStreetMap (par défaut)',
|
||
'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||
'settings.mapHint': 'Modèle d\'URL pour les tuiles de carte',
|
||
'settings.latitude': 'Latitude',
|
||
'settings.longitude': 'Longitude',
|
||
'settings.saveMap': 'Enregistrer la carte',
|
||
'settings.apiKeys': 'Clés API',
|
||
'settings.mapsKey': 'Clé API Google Maps',
|
||
'settings.mapsKeyHint': 'Pour la recherche de lieux. Nécessite l\'API Places (New). Obtenez-la sur console.cloud.google.com',
|
||
'settings.weatherKey': 'Clé API OpenWeatherMap',
|
||
'settings.weatherKeyHint': 'Pour les données météo. Gratuit sur openweathermap.org/api',
|
||
'settings.keyPlaceholder': 'Saisir la clé…',
|
||
'settings.configured': 'Configuré',
|
||
'settings.saveKeys': 'Enregistrer les clés',
|
||
'settings.display': 'Affichage',
|
||
'settings.colorMode': 'Mode de couleur',
|
||
'settings.light': 'Clair',
|
||
'settings.dark': 'Sombre',
|
||
'settings.auto': 'Auto',
|
||
'settings.language': 'Langue',
|
||
'settings.temperature': 'Unité de température',
|
||
'settings.timeFormat': 'Format de l\'heure',
|
||
'settings.routeCalculation': 'Calcul d\'itinéraire',
|
||
'settings.blurBookingCodes': 'Masquer les codes de réservation',
|
||
'settings.notifications': 'Notifications',
|
||
'settings.notifyTripInvite': 'Invitations de voyage',
|
||
'settings.notifyBookingChange': 'Modifications de réservation',
|
||
'settings.notifyTripReminder': 'Rappels de voyage',
|
||
'settings.notifyVacayInvite': 'Invitations de fusion Vacay',
|
||
'settings.notifyPhotosShared': 'Photos partagées (Immich)',
|
||
'settings.notifyCollabMessage': 'Messages de chat (Collab)',
|
||
'settings.notifyPackingTagged': 'Liste de bagages : attributions',
|
||
'settings.notifyWebhook': 'Notifications webhook',
|
||
'settings.notificationsDisabled': 'Les notifications ne sont pas configurées. Demandez à un administrateur d\'activer les notifications par e-mail ou webhook.',
|
||
'settings.notificationsActive': 'Canal actif',
|
||
'settings.notificationsManagedByAdmin': 'Les événements de notification sont configurés par votre administrateur.',
|
||
'admin.notifications.title': 'Notifications',
|
||
'admin.notifications.hint': 'Choisissez un canal de notification. Un seul peut être actif à la fois.',
|
||
'admin.notifications.none': 'Désactivé',
|
||
'admin.notifications.email': 'E-mail (SMTP)',
|
||
'admin.notifications.webhook': 'Webhook',
|
||
'admin.notifications.events': 'Événements de notification',
|
||
'admin.notifications.eventsHint': 'Choisissez quels événements déclenchent des notifications pour tous les utilisateurs.',
|
||
'admin.notifications.configureFirst': 'Configurez d\'abord les paramètres SMTP ou webhook ci-dessous, puis activez les événements.',
|
||
'admin.notifications.save': 'Enregistrer les paramètres de notification',
|
||
'admin.notifications.saved': 'Paramètres de notification enregistrés',
|
||
'admin.notifications.testWebhook': 'Envoyer un webhook de test',
|
||
'admin.notifications.testWebhookSuccess': 'Webhook de test envoyé avec succès',
|
||
'admin.notifications.testWebhookFailed': 'Échec du webhook de test',
|
||
'admin.smtp.title': 'E-mail et notifications',
|
||
'admin.smtp.hint': 'Configuration SMTP pour l\'envoi des notifications par e-mail.',
|
||
'admin.smtp.testButton': 'Envoyer un e-mail de test',
|
||
'admin.webhook.hint': 'Envoyer des notifications vers un webhook externe (Discord, Slack, etc.).',
|
||
'admin.smtp.testSuccess': 'E-mail de test envoyé avec succès',
|
||
'admin.smtp.testFailed': 'Échec de l\'e-mail de test',
|
||
'dayplan.icsTooltip': 'Exporter le calendrier (ICS)',
|
||
'share.linkTitle': 'Lien public',
|
||
'share.linkHint': 'Créez un lien que n\'importe qui peut utiliser pour consulter ce voyage sans se connecter. Lecture seule — aucune modification possible.',
|
||
'share.createLink': 'Créer un lien',
|
||
'share.deleteLink': 'Supprimer le lien',
|
||
'share.createError': 'Impossible de créer le lien',
|
||
'common.copy': 'Copier',
|
||
'common.copied': 'Copié',
|
||
'share.permMap': 'Carte et plan',
|
||
'share.permBookings': 'Réservations',
|
||
'share.permPacking': 'Bagages',
|
||
'shared.expired': 'Lien expiré ou invalide',
|
||
'shared.expiredHint': 'Ce lien de partage n\'est plus actif.',
|
||
'shared.readOnly': 'Vue en lecture seule',
|
||
'shared.tabPlan': 'Plan',
|
||
'shared.tabBookings': 'Réservations',
|
||
'shared.tabPacking': 'Bagages',
|
||
'shared.tabBudget': 'Budget',
|
||
'shared.tabChat': 'Chat',
|
||
'shared.days': 'jours',
|
||
'shared.places': 'lieux',
|
||
'shared.other': 'Autre',
|
||
'shared.totalBudget': 'Budget total',
|
||
'shared.messages': 'messages',
|
||
'shared.sharedVia': 'Partagé via',
|
||
'shared.confirmed': 'Confirmé',
|
||
'shared.pending': 'En attente',
|
||
'share.permBudget': 'Budget',
|
||
'share.permCollab': 'Chat',
|
||
'settings.on': 'Activé',
|
||
'settings.off': 'Désactivé',
|
||
'settings.mcp.title': 'Configuration MCP',
|
||
'settings.mcp.endpoint': 'Point de terminaison MCP',
|
||
'settings.mcp.clientConfig': 'Configuration du client',
|
||
'settings.mcp.clientConfigHint': 'Remplacez <your_token> par un token API de la liste ci-dessous. Le chemin vers npx devra peut-être être ajusté selon votre système (ex. C:\\PROGRA~1\\nodejs\\npx.cmd sous Windows).',
|
||
'settings.mcp.copy': 'Copier',
|
||
'settings.mcp.copied': 'Copié !',
|
||
'settings.mcp.apiTokens': 'Tokens API',
|
||
'settings.mcp.createToken': 'Créer un token',
|
||
'settings.mcp.noTokens': 'Aucun token pour l\'instant. Créez-en un pour connecter des clients MCP.',
|
||
'settings.mcp.tokenCreatedAt': 'Créé',
|
||
'settings.mcp.tokenUsedAt': 'Utilisé',
|
||
'settings.mcp.deleteTokenTitle': 'Supprimer le token',
|
||
'settings.mcp.deleteTokenMessage': 'Ce token cessera de fonctionner immédiatement. Tout client MCP l\'utilisant perdra l\'accès.',
|
||
'settings.mcp.modal.createTitle': 'Créer un token API',
|
||
'settings.mcp.modal.tokenName': 'Nom du token',
|
||
'settings.mcp.modal.tokenNamePlaceholder': 'ex. Claude Desktop, Ordinateur pro',
|
||
'settings.mcp.modal.creating': 'Création…',
|
||
'settings.mcp.modal.create': 'Créer le token',
|
||
'settings.mcp.modal.createdTitle': 'Token créé',
|
||
'settings.mcp.modal.createdWarning': 'Ce token ne sera affiché qu\'une seule fois. Copiez-le et conservez-le maintenant — il ne pourra pas être récupéré.',
|
||
'settings.mcp.modal.done': 'Terminé',
|
||
'settings.mcp.toast.created': 'Token créé',
|
||
'settings.mcp.toast.createError': 'Impossible de créer le token',
|
||
'settings.mcp.toast.deleted': 'Token supprimé',
|
||
'settings.mcp.toast.deleteError': 'Impossible de supprimer le token',
|
||
'settings.account': 'Compte',
|
||
'settings.about': 'À propos',
|
||
'settings.username': 'Nom d\'utilisateur',
|
||
'settings.email': 'E-mail',
|
||
'settings.role': 'Rôle',
|
||
'settings.roleAdmin': 'Administrateur',
|
||
'settings.oidcLinked': 'Lié avec',
|
||
'settings.changePassword': 'Changer le mot de passe',
|
||
'settings.mustChangePassword': 'Vous devez changer votre mot de passe avant de continuer. Veuillez définir un nouveau mot de passe ci-dessous.',
|
||
'settings.currentPassword': 'Mot de passe actuel',
|
||
'settings.currentPasswordRequired': 'Le mot de passe actuel est requis',
|
||
'settings.newPassword': 'Nouveau mot de passe',
|
||
'settings.confirmPassword': 'Confirmer le nouveau mot de passe',
|
||
'settings.updatePassword': 'Mettre à jour le mot de passe',
|
||
'settings.passwordRequired': 'Veuillez saisir le mot de passe actuel et le nouveau',
|
||
'settings.passwordTooShort': 'Le mot de passe doit comporter au moins 8 caractères',
|
||
'settings.passwordMismatch': 'Les mots de passe ne correspondent pas',
|
||
'settings.passwordWeak': 'Le mot de passe doit contenir des majuscules, des minuscules, un chiffre et un caractère spécial',
|
||
'settings.passwordChanged': 'Mot de passe modifié avec succès',
|
||
'settings.deleteAccount': 'Supprimer le compte',
|
||
'settings.deleteAccountTitle': 'Supprimer votre compte ?',
|
||
'settings.deleteAccountWarning': 'Votre compte ainsi que tous vos voyages, lieux et fichiers seront définitivement supprimés. Cette action est irréversible.',
|
||
'settings.deleteAccountConfirm': 'Supprimer définitivement',
|
||
'settings.deleteBlockedTitle': 'Suppression impossible',
|
||
'settings.deleteBlockedMessage': 'Vous êtes le seul administrateur. Promouvez un autre utilisateur en tant qu\'administrateur avant de supprimer votre compte.',
|
||
'settings.roleUser': 'Utilisateur',
|
||
'settings.saveProfile': 'Enregistrer le profil',
|
||
'settings.mfa.title': 'Authentification à deux facteurs (2FA)',
|
||
'settings.mfa.description': 'Ajoute une étape supplémentaire lors de la connexion. Utilisez une application d\'authentification (Google Authenticator, Authy, etc.).',
|
||
'settings.mfa.requiredByPolicy': 'Votre administrateur exige l\'authentification à deux facteurs. Configurez une application d\'authentification ci-dessous avant de continuer.',
|
||
'settings.mfa.backupTitle': 'Codes de secours',
|
||
'settings.mfa.backupDescription': 'Utilisez ces codes à usage unique si vous perdez l\'accès à votre application d\'authentification.',
|
||
'settings.mfa.backupWarning': 'Enregistrez ces codes maintenant. Chaque code n\'est utilisable qu\'une seule fois.',
|
||
'settings.mfa.backupCopy': 'Copier les codes',
|
||
'settings.mfa.backupDownload': 'Télécharger TXT',
|
||
'settings.mfa.backupPrint': 'Imprimer / PDF',
|
||
'settings.mfa.backupCopied': 'Codes de secours copiés',
|
||
'settings.mfa.enabled': '2FA est activé sur votre compte.',
|
||
'settings.mfa.disabled': '2FA n\'est pas activé.',
|
||
'settings.mfa.setup': 'Configurer l\'authentificateur',
|
||
'settings.mfa.scanQr': 'Scannez ce code QR avec votre application ou entrez la clé manuellement.',
|
||
'settings.mfa.secretLabel': 'Clé secrète (saisie manuelle)',
|
||
'settings.mfa.codePlaceholder': 'Code à 6 chiffres',
|
||
'settings.mfa.enable': 'Activer 2FA',
|
||
'settings.mfa.cancelSetup': 'Annuler',
|
||
'settings.mfa.disableTitle': 'Désactiver 2FA',
|
||
'settings.mfa.disableHint': 'Entrez votre mot de passe et un code actuel de votre authentificateur.',
|
||
'settings.mfa.disable': 'Désactiver 2FA',
|
||
'settings.mfa.toastEnabled': 'Authentification à deux facteurs activée',
|
||
'settings.mfa.toastDisabled': 'Authentification à deux facteurs désactivée',
|
||
'settings.mfa.demoBlocked': 'Non disponible en mode démo',
|
||
'settings.toast.mapSaved': 'Paramètres de carte enregistrés',
|
||
'settings.toast.keysSaved': 'Clés API enregistrées',
|
||
'settings.toast.displaySaved': 'Paramètres d\'affichage enregistrés',
|
||
'settings.toast.profileSaved': 'Profil enregistré',
|
||
'settings.uploadAvatar': 'Importer une photo de profil',
|
||
'settings.removeAvatar': 'Supprimer la photo de profil',
|
||
'settings.avatarUploaded': 'Photo de profil mise à jour',
|
||
'settings.avatarRemoved': 'Photo de profil supprimée',
|
||
'settings.avatarError': 'Échec de l\'import',
|
||
|
||
// Login
|
||
'login.error': 'Échec de la connexion. Veuillez vérifier vos identifiants.',
|
||
'login.tagline': 'Vos voyages.\nVotre organisation.',
|
||
'login.description': 'Planifiez vos voyages en collaboration avec des cartes interactives, des budgets et la synchronisation en temps réel.',
|
||
'login.features.maps': 'Cartes interactives',
|
||
'login.features.mapsDesc': 'Google Places, itinéraires et regroupement',
|
||
'login.features.realtime': 'Synchronisation en temps réel',
|
||
'login.features.realtimeDesc': 'Planifiez ensemble via WebSocket',
|
||
'login.features.budget': 'Suivi du budget',
|
||
'login.features.budgetDesc': 'Catégories, graphiques et coûts par personne',
|
||
'login.features.collab': 'Collaboration',
|
||
'login.features.collabDesc': 'Multi-utilisateurs avec voyages partagés',
|
||
'login.features.packing': 'Listes de bagages',
|
||
'login.features.packingDesc': 'Catégories, progression et suggestions',
|
||
'login.features.bookings': 'Réservations',
|
||
'login.features.bookingsDesc': 'Vols, hôtels, restaurants et plus',
|
||
'login.features.files': 'Documents',
|
||
'login.features.filesDesc': 'Importez et gérez vos documents',
|
||
'login.features.routes': 'Itinéraires intelligents',
|
||
'login.features.routesDesc': 'Optimisation automatique et export Google Maps',
|
||
'login.selfHosted': 'Auto-hébergé · Open Source · Vos données restent les vôtres',
|
||
'login.title': 'Connexion',
|
||
'login.subtitle': 'Bon retour',
|
||
'login.signingIn': 'Connexion en cours…',
|
||
'login.signIn': 'Se connecter',
|
||
'login.createAdmin': 'Créer un compte administrateur',
|
||
'login.createAdminHint': 'Configurez le premier compte administrateur pour TREK.',
|
||
'login.setNewPassword': 'Définir un nouveau mot de passe',
|
||
'login.setNewPasswordHint': 'Vous devez changer votre mot de passe avant de continuer.',
|
||
'login.createAccount': 'Créer un compte',
|
||
'login.createAccountHint': 'Créez un nouveau compte.',
|
||
'login.creating': 'Création…',
|
||
'login.noAccount': 'Pas encore de compte ?',
|
||
'login.hasAccount': 'Vous avez déjà un compte ?',
|
||
'login.register': 'S\'inscrire',
|
||
'login.emailPlaceholder': 'votre@email.com',
|
||
'login.username': 'Nom d\'utilisateur',
|
||
'login.oidc.registrationDisabled': 'Les inscriptions sont désactivées. Contactez votre administrateur.',
|
||
'login.oidc.noEmail': 'Aucun e-mail reçu du fournisseur.',
|
||
'login.mfaTitle': 'Authentification à deux facteurs',
|
||
'login.mfaSubtitle': 'Entrez le code à 6 chiffres de votre application d\'authentification.',
|
||
'login.mfaCodeLabel': 'Code de vérification',
|
||
'login.mfaCodeRequired': 'Entrez le code de votre application d\'authentification.',
|
||
'login.mfaHint': 'Ouvrez Google Authenticator, Authy ou une autre application TOTP.',
|
||
'login.mfaBack': '← Retour à la connexion',
|
||
'login.mfaVerify': 'Vérifier',
|
||
'login.oidc.tokenFailed': 'L\'authentification a échoué.',
|
||
'login.oidc.invalidState': 'Session invalide. Veuillez réessayer.',
|
||
'login.demoFailed': 'Échec de la connexion démo',
|
||
'login.oidcSignIn': 'Se connecter avec {name}',
|
||
'login.oidcOnly': 'L\'authentification par mot de passe est désactivée. Veuillez vous connecter via votre fournisseur SSO.',
|
||
'login.demoHint': 'Essayez la démo — aucune inscription nécessaire',
|
||
|
||
// Register
|
||
'register.passwordMismatch': 'Les mots de passe ne correspondent pas',
|
||
'register.passwordTooShort': 'Le mot de passe doit comporter au moins 8 caractères',
|
||
'register.failed': 'Échec de l\'inscription',
|
||
'register.getStarted': 'Commencer',
|
||
'register.subtitle': 'Créez un compte et commencez à planifier vos voyages de rêve.',
|
||
'register.feature1': 'Plans de voyage illimités',
|
||
'register.feature2': 'Vue carte interactive',
|
||
'register.feature3': 'Gérez les lieux et catégories',
|
||
'register.feature4': 'Suivez les réservations',
|
||
'register.feature5': 'Créez des listes de bagages',
|
||
'register.feature6': 'Stockez photos et fichiers',
|
||
'register.createAccount': 'Créer un compte',
|
||
'register.startPlanning': 'Commencez à planifier vos voyages',
|
||
'register.minChars': 'Min. 6 caractères',
|
||
'register.confirmPassword': 'Confirmer le mot de passe',
|
||
'register.repeatPassword': 'Répéter le mot de passe',
|
||
'register.registering': 'Inscription en cours…',
|
||
'register.register': 'S\'inscrire',
|
||
'register.hasAccount': 'Vous avez déjà un compte ?',
|
||
'register.signIn': 'Se connecter',
|
||
|
||
// Admin
|
||
'admin.title': 'Administration',
|
||
'admin.subtitle': 'Gestion des utilisateurs et paramètres système',
|
||
'admin.tabs.users': 'Utilisateurs',
|
||
'admin.tabs.categories': 'Catégories',
|
||
'admin.tabs.backup': 'Sauvegarde',
|
||
'admin.stats.users': 'Utilisateurs',
|
||
'admin.stats.trips': 'Voyages',
|
||
'admin.stats.places': 'Lieux',
|
||
'admin.stats.photos': 'Photos',
|
||
'admin.stats.files': 'Fichiers',
|
||
'admin.table.user': 'Utilisateur',
|
||
'admin.table.email': 'E-mail',
|
||
'admin.table.role': 'Rôle',
|
||
'admin.table.created': 'Créé le',
|
||
'admin.table.lastLogin': 'Dernière connexion',
|
||
'admin.table.actions': 'Actions',
|
||
'admin.you': '(Vous)',
|
||
'admin.editUser': 'Modifier l\'utilisateur',
|
||
'admin.newPassword': 'Nouveau mot de passe',
|
||
'admin.newPasswordHint': 'Laissez vide pour conserver le mot de passe actuel',
|
||
'admin.deleteUser': 'Supprimer l\'utilisateur « {name} » ? Tous les voyages seront définitivement supprimés.',
|
||
'admin.deleteUserTitle': 'Supprimer l\'utilisateur',
|
||
'admin.newPasswordPlaceholder': 'Saisir le nouveau mot de passe…',
|
||
'admin.toast.loadError': 'Impossible de charger les données d\'administration',
|
||
'admin.toast.userUpdated': 'Utilisateur mis à jour',
|
||
'admin.toast.updateError': 'Échec de la mise à jour',
|
||
'admin.toast.userDeleted': 'Utilisateur supprimé',
|
||
'admin.toast.deleteError': 'Échec de la suppression',
|
||
'admin.toast.cannotDeleteSelf': 'Impossible de supprimer votre propre compte',
|
||
'admin.toast.userCreated': 'Utilisateur créé',
|
||
'admin.toast.createError': 'Échec de la création de l\'utilisateur',
|
||
'admin.toast.fieldsRequired': 'Le nom d\'utilisateur, l\'e-mail et le mot de passe sont requis',
|
||
'admin.createUser': 'Créer un utilisateur',
|
||
'admin.invite.title': 'Liens d\'invitation',
|
||
'admin.invite.subtitle': 'Créer des liens d\'inscription à usage unique',
|
||
'admin.invite.create': 'Créer un lien',
|
||
'admin.invite.createAndCopy': 'Créer et copier',
|
||
'admin.invite.empty': 'Aucun lien d\'invitation créé',
|
||
'admin.invite.maxUses': 'Utilisations max.',
|
||
'admin.invite.expiry': 'Expire après',
|
||
'admin.invite.uses': 'utilisé(s)',
|
||
'admin.invite.expiresAt': 'expire le',
|
||
'admin.invite.createdBy': 'par',
|
||
'admin.invite.active': 'Actif',
|
||
'admin.invite.expired': 'Expiré',
|
||
'admin.invite.usedUp': 'Épuisé',
|
||
'admin.invite.copied': 'Lien d\'invitation copié',
|
||
'admin.invite.copyLink': 'Copier le lien',
|
||
'admin.invite.deleted': 'Lien d\'invitation supprimé',
|
||
'admin.invite.createError': 'Erreur lors de la création du lien',
|
||
'admin.invite.deleteError': 'Erreur lors de la suppression du lien',
|
||
'admin.tabs.settings': 'Paramètres',
|
||
'admin.allowRegistration': 'Autoriser les inscriptions',
|
||
'admin.allowRegistrationHint': 'Les nouveaux utilisateurs peuvent s\'inscrire eux-mêmes',
|
||
'admin.requireMfa': 'Exiger l\'authentification à deux facteurs (2FA)',
|
||
'admin.requireMfaHint': 'Les utilisateurs sans 2FA doivent terminer la configuration dans Paramètres avant d\'utiliser l\'application.',
|
||
'admin.apiKeys': 'Clés API',
|
||
'admin.apiKeysHint': 'Facultatif. Active les données de lieu étendues comme les photos et la météo.',
|
||
'admin.mapsKey': 'Clé API Google Maps',
|
||
'admin.mapsKeyHint': 'Requise pour la recherche de lieux. Obtenez-la sur console.cloud.google.com',
|
||
'admin.mapsKeyHintLong': 'Sans clé API, OpenStreetMap est utilisé pour la recherche de lieux. Avec une clé Google API, les photos, notes et horaires d\'ouverture peuvent également être chargés. Obtenez-en une sur console.cloud.google.com.',
|
||
'admin.recommended': 'Recommandé',
|
||
'admin.weatherKey': 'Clé API OpenWeatherMap',
|
||
'admin.weatherKeyHint': 'Pour les données météo. Gratuit sur openweathermap.org',
|
||
'admin.validateKey': 'Tester',
|
||
'admin.keyValid': 'Connecté',
|
||
'admin.keyInvalid': 'Invalide',
|
||
'admin.keySaved': 'Clés API enregistrées',
|
||
'admin.oidcTitle': 'Authentification unique (OIDC)',
|
||
'admin.oidcSubtitle': 'Autorisez la connexion via des fournisseurs externes comme Google, Apple, Authentik ou Keycloak.',
|
||
'admin.oidcDisplayName': 'Nom d\'affichage',
|
||
'admin.oidcIssuer': 'URL de l\'émetteur',
|
||
'admin.oidcIssuerHint': 'L\'URL de l\'émetteur OpenID Connect du fournisseur. ex. https://accounts.google.com',
|
||
'admin.oidcSaved': 'Configuration OIDC enregistrée',
|
||
'admin.oidcOnlyMode': 'Désactiver l\'authentification par mot de passe',
|
||
'admin.oidcOnlyModeHint': 'Lorsqu\'activé, seule la connexion SSO est autorisée. La connexion et l\'inscription par mot de passe sont bloquées.',
|
||
|
||
// File Types
|
||
'admin.fileTypes': 'Types de fichiers autorisés',
|
||
'admin.fileTypesHint': 'Configurez les types de fichiers que les utilisateurs peuvent importer.',
|
||
'admin.fileTypesFormat': 'Extensions séparées par des virgules (ex. jpg,png,pdf,doc). Utilisez * pour autoriser tous les types.',
|
||
'admin.fileTypesSaved': 'Paramètres des types de fichiers enregistrés',
|
||
|
||
'admin.bagTracking.title': 'Suivi des bagages',
|
||
'admin.bagTracking.subtitle': 'Activer le poids et l\'attribution de bagages pour les articles',
|
||
'admin.tabs.config': 'Configuration',
|
||
'admin.tabs.templates': 'Modèles de bagages',
|
||
'admin.packingTemplates.title': 'Modèles de bagages',
|
||
'admin.packingTemplates.subtitle': 'Créer des listes de bagages réutilisables pour vos voyages',
|
||
'admin.packingTemplates.create': 'Nouveau modèle',
|
||
'admin.packingTemplates.namePlaceholder': 'Nom du modèle (ex. Vacances à la plage)',
|
||
'admin.packingTemplates.empty': 'Aucun modèle créé',
|
||
'admin.packingTemplates.items': 'articles',
|
||
'admin.packingTemplates.categories': 'catégories',
|
||
'admin.packingTemplates.itemName': 'Nom de l\'article',
|
||
'admin.packingTemplates.itemCategory': 'Catégorie',
|
||
'admin.packingTemplates.categoryName': 'Nom de catégorie (ex. Vêtements)',
|
||
'admin.packingTemplates.addCategory': 'Ajouter une catégorie',
|
||
'admin.packingTemplates.created': 'Modèle créé',
|
||
'admin.packingTemplates.deleted': 'Modèle supprimé',
|
||
'admin.packingTemplates.loadError': 'Erreur de chargement des modèles',
|
||
'admin.packingTemplates.createError': 'Erreur de création du modèle',
|
||
'admin.packingTemplates.deleteError': 'Erreur de suppression du modèle',
|
||
'admin.packingTemplates.saveError': 'Erreur de sauvegarde',
|
||
|
||
// Addons
|
||
'admin.tabs.addons': 'Extensions',
|
||
'admin.addons.title': 'Extensions',
|
||
'admin.addons.subtitle': 'Activez ou désactivez des fonctionnalités pour personnaliser votre expérience TREK.',
|
||
'admin.addons.catalog.memories.name': 'Photos (Immich)',
|
||
'admin.addons.catalog.memories.description': 'Partagez vos photos de voyage via votre instance Immich',
|
||
'admin.addons.catalog.mcp.name': 'MCP',
|
||
'admin.addons.catalog.mcp.description': 'Protocole de contexte de modèle pour l\'intégration d\'assistants IA',
|
||
'admin.addons.catalog.packing.name': 'Bagages',
|
||
'admin.addons.catalog.packing.description': 'Listes de contrôle pour préparer vos bagages pour chaque voyage',
|
||
'admin.addons.catalog.budget.name': 'Budget',
|
||
'admin.addons.catalog.budget.description': 'Suivez les dépenses et planifiez votre budget de voyage',
|
||
'admin.addons.catalog.documents.name': 'Documents',
|
||
'admin.addons.catalog.documents.description': 'Stockez et gérez vos documents de voyage',
|
||
'admin.addons.catalog.vacay.name': 'Vacances',
|
||
'admin.addons.catalog.vacay.description': 'Planificateur de vacances personnel avec vue calendrier',
|
||
'admin.addons.catalog.atlas.name': 'Atlas',
|
||
'admin.addons.catalog.atlas.description': 'Carte du monde avec pays visités et statistiques de voyage',
|
||
'admin.addons.catalog.collab.name': 'Collaboration',
|
||
'admin.addons.catalog.collab.description': 'Notes en temps réel, sondages et chat pour la planification de voyage',
|
||
'admin.addons.subtitleBefore': 'Activez ou désactivez des fonctionnalités pour personnaliser votre expérience ',
|
||
'admin.addons.subtitleAfter': '.',
|
||
'admin.addons.enabled': 'Activé',
|
||
'admin.addons.disabled': 'Désactivé',
|
||
'admin.addons.type.trip': 'Voyage',
|
||
'admin.addons.type.global': 'Global',
|
||
'admin.addons.type.integration': 'Intégration',
|
||
'admin.addons.tripHint': 'Disponible comme onglet dans chaque voyage',
|
||
'admin.addons.globalHint': 'Disponible comme section autonome dans la navigation principale',
|
||
'admin.addons.integrationHint': 'Services backend et intégrations API sans page dédiée',
|
||
'admin.addons.toast.updated': 'Extension mise à jour',
|
||
'admin.addons.toast.error': 'Échec de la mise à jour de l\'extension',
|
||
'admin.addons.noAddons': 'Aucune extension disponible',
|
||
// Weather info
|
||
'admin.weather.title': 'Données météo',
|
||
'admin.weather.badge': 'Depuis le 24 mars 2026',
|
||
'admin.weather.description': 'TREK utilise Open-Meteo comme source de données météo. Open-Meteo est un service météo gratuit et open source — aucune clé API requise.',
|
||
'admin.weather.forecast': 'Prévisions sur 16 jours',
|
||
'admin.weather.forecastDesc': 'Auparavant 5 jours (OpenWeatherMap)',
|
||
'admin.weather.climate': 'Données climatiques historiques',
|
||
'admin.weather.climateDesc': 'Moyennes des 85 dernières années pour les jours au-delà des prévisions de 16 jours',
|
||
'admin.weather.requests': '10 000 requêtes / jour',
|
||
'admin.weather.requestsDesc': 'Gratuit, aucune clé API requise',
|
||
'admin.weather.locationHint': 'La météo est basée sur le premier lieu avec des coordonnées de chaque jour. Si aucun lieu n\'est attribué à un jour, un lieu de la liste est utilisé comme référence.',
|
||
|
||
'admin.tabs.audit': 'Journal d\'audit',
|
||
|
||
'admin.audit.subtitle': 'Événements sensibles de sécurité et d\'administration (sauvegardes, utilisateurs, 2FA, paramètres).',
|
||
'admin.audit.empty': 'Aucune entrée d\'audit.',
|
||
'admin.audit.refresh': 'Actualiser',
|
||
'admin.audit.loadMore': 'Charger plus',
|
||
'admin.audit.showing': '{count} chargées · {total} au total',
|
||
'admin.audit.col.time': 'Heure',
|
||
'admin.audit.col.user': 'Utilisateur',
|
||
'admin.audit.col.action': 'Action',
|
||
'admin.audit.col.resource': 'Ressource',
|
||
'admin.audit.col.ip': 'IP',
|
||
'admin.audit.col.details': 'Détails',
|
||
|
||
// MCP Tokens
|
||
'admin.tabs.mcpTokens': 'Tokens MCP',
|
||
'admin.mcpTokens.title': 'Tokens MCP',
|
||
'admin.mcpTokens.subtitle': 'Gérer les tokens API de tous les utilisateurs',
|
||
'admin.mcpTokens.owner': 'Propriétaire',
|
||
'admin.mcpTokens.tokenName': 'Nom du token',
|
||
'admin.mcpTokens.created': 'Créé',
|
||
'admin.mcpTokens.lastUsed': 'Dernière utilisation',
|
||
'admin.mcpTokens.never': 'Jamais',
|
||
'admin.mcpTokens.empty': 'Aucun token MCP n\'a encore été créé',
|
||
'admin.mcpTokens.deleteTitle': 'Supprimer le token',
|
||
'admin.mcpTokens.deleteMessage': 'Ce token sera révoqué immédiatement. L\'utilisateur perdra l\'accès MCP via ce token.',
|
||
'admin.mcpTokens.deleteSuccess': 'Token supprimé',
|
||
'admin.mcpTokens.deleteError': 'Impossible de supprimer le token',
|
||
'admin.mcpTokens.loadError': 'Impossible de charger les tokens',
|
||
|
||
// GitHub
|
||
'admin.tabs.github': 'GitHub',
|
||
'admin.github.title': 'Historique des versions',
|
||
'admin.github.subtitle': 'Dernières mises à jour de {repo}',
|
||
'admin.github.latest': 'Dernière',
|
||
'admin.github.prerelease': 'Pré-version',
|
||
'admin.github.showDetails': 'Afficher les détails',
|
||
'admin.github.hideDetails': 'Masquer les détails',
|
||
'admin.github.loadMore': 'Charger plus',
|
||
'admin.github.loading': 'Chargement…',
|
||
'admin.github.support': 'Aidez à poursuivre le développement de TREK',
|
||
'admin.github.error': 'Impossible de charger les versions',
|
||
'admin.github.by': 'par',
|
||
|
||
'admin.update.available': 'Mise à jour disponible',
|
||
'admin.update.text': 'TREK {version} est disponible. Vous utilisez {current}.',
|
||
'admin.update.button': 'Voir sur GitHub',
|
||
'admin.update.install': 'Installer la mise à jour',
|
||
'admin.update.confirmTitle': 'Installer la mise à jour ?',
|
||
'admin.update.confirmText': 'TREK sera mis à jour de {current} vers {version}. Le serveur redémarrera automatiquement ensuite.',
|
||
'admin.update.dataInfo': 'Toutes vos données (voyages, utilisateurs, clés API, importations, Vacances, Atlas, budgets) seront préservées.',
|
||
'admin.update.warning': 'L\'application sera brièvement indisponible pendant le redémarrage.',
|
||
'admin.update.confirm': 'Mettre à jour maintenant',
|
||
'admin.update.installing': 'Mise à jour…',
|
||
'admin.update.success': 'Mise à jour installée ! Le serveur redémarre…',
|
||
'admin.update.failed': 'Échec de la mise à jour',
|
||
'admin.update.backupHint': 'Nous recommandons de créer une sauvegarde avant la mise à jour.',
|
||
'admin.update.backupLink': 'Aller aux sauvegardes',
|
||
'admin.update.howTo': 'Comment mettre à jour',
|
||
'admin.update.dockerText': 'Votre instance TREK fonctionne dans Docker. Pour mettre à jour vers {version}, exécutez les commandes suivantes sur votre serveur :',
|
||
'admin.update.reloadHint': 'Veuillez recharger la page dans quelques secondes.',
|
||
|
||
// Vacay addon
|
||
'vacay.subtitle': 'Planifiez et gérez vos jours de congés',
|
||
'vacay.settings': 'Paramètres',
|
||
'vacay.year': 'Année',
|
||
'vacay.addYear': 'Ajouter une année',
|
||
'vacay.removeYear': 'Supprimer l\'année',
|
||
'vacay.removeYearConfirm': 'Supprimer {year} ?',
|
||
'vacay.removeYearHint': 'Toutes les entrées de vacances et jours fériés d\'entreprise de cette année seront définitivement supprimés.',
|
||
'vacay.remove': 'Supprimer',
|
||
'vacay.persons': 'Personnes',
|
||
'vacay.noPersons': 'Aucune personne ajoutée',
|
||
'vacay.addPerson': 'Ajouter une personne',
|
||
'vacay.editPerson': 'Modifier la personne',
|
||
'vacay.removePerson': 'Supprimer la personne',
|
||
'vacay.removePersonConfirm': 'Supprimer {name} ?',
|
||
'vacay.removePersonHint': 'Toutes les entrées de vacances de cette personne seront définitivement supprimées.',
|
||
'vacay.personName': 'Nom',
|
||
'vacay.personNamePlaceholder': 'Saisir le nom',
|
||
'vacay.color': 'Couleur',
|
||
'vacay.add': 'Ajouter',
|
||
'vacay.legend': 'Légende',
|
||
'vacay.publicHoliday': 'Jour férié',
|
||
'vacay.companyHoliday': 'Jour férié d\'entreprise',
|
||
'vacay.weekend': 'Week-end',
|
||
'vacay.modeVacation': 'Vacances',
|
||
'vacay.modeCompany': 'Jour férié d\'entreprise',
|
||
'vacay.entitlement': 'Droits',
|
||
'vacay.entitlementDays': 'Jours',
|
||
'vacay.used': 'Utilisés',
|
||
'vacay.remaining': 'Restants',
|
||
'vacay.carriedOver': 'de {year}',
|
||
'vacay.weekendDays': 'Jours de week-end',
|
||
'vacay.mon': 'Lun',
|
||
'vacay.tue': 'Mar',
|
||
'vacay.wed': 'Mer',
|
||
'vacay.thu': 'Jeu',
|
||
'vacay.fri': 'Ven',
|
||
'vacay.sat': 'Sam',
|
||
'vacay.sun': 'Dim',
|
||
'vacay.blockWeekends': 'Bloquer les week-ends',
|
||
'vacay.blockWeekendsHint': 'Empêcher les entrées de vacances les samedis et dimanches',
|
||
'vacay.publicHolidays': 'Jours fériés',
|
||
'vacay.publicHolidaysHint': 'Marquer les jours fériés dans le calendrier',
|
||
'vacay.selectCountry': 'Sélectionner un pays',
|
||
'vacay.selectRegion': 'Sélectionner une région (facultatif)',
|
||
'vacay.companyHolidays': 'Jours fériés d\'entreprise',
|
||
'vacay.companyHolidaysHint': 'Autoriser le marquage des jours fériés d\'entreprise',
|
||
'vacay.companyHolidaysNoDeduct': 'Les jours fériés d\'entreprise ne sont pas déduits des jours de vacances.',
|
||
'vacay.carryOver': 'Report',
|
||
'vacay.carryOverHint': 'Reporter automatiquement les jours de vacances restants à l\'année suivante',
|
||
'vacay.sharing': 'Partage',
|
||
'vacay.sharingHint': 'Partagez votre plan de vacances avec d\'autres utilisateurs TREK',
|
||
'vacay.owner': 'Propriétaire',
|
||
'vacay.shareEmailPlaceholder': 'E-mail de l\'utilisateur TREK',
|
||
'vacay.shareSuccess': 'Plan partagé avec succès',
|
||
'vacay.shareError': 'Impossible de partager le plan',
|
||
'vacay.dissolve': 'Séparer les calendriers',
|
||
'vacay.dissolveHint': 'Séparer à nouveau les calendriers. Vos entrées seront conservées.',
|
||
'vacay.dissolveAction': 'Dissoudre',
|
||
'vacay.dissolved': 'Calendrier séparé',
|
||
'vacay.fusedWith': 'Partagé avec',
|
||
'vacay.you': 'vous',
|
||
'vacay.noData': 'Aucune donnée',
|
||
'vacay.changeColor': 'Changer la couleur',
|
||
'vacay.inviteUser': 'Inviter un utilisateur',
|
||
'vacay.inviteHint': 'Invitez un autre utilisateur TREK à partager un calendrier de vacances combiné.',
|
||
'vacay.selectUser': 'Sélectionner un utilisateur',
|
||
'vacay.sendInvite': 'Envoyer l\'invitation',
|
||
'vacay.inviteSent': 'Invitation envoyée',
|
||
'vacay.inviteError': 'Impossible d\'envoyer l\'invitation',
|
||
'vacay.pending': 'en attente',
|
||
'vacay.noUsersAvailable': 'Aucun utilisateur disponible',
|
||
'vacay.accept': 'Accepter',
|
||
'vacay.decline': 'Refuser',
|
||
'vacay.acceptFusion': 'Accepter et fusionner',
|
||
'vacay.inviteTitle': 'Demande de fusion',
|
||
'vacay.inviteWantsToFuse': 'souhaite partager un calendrier de vacances avec vous.',
|
||
'vacay.fuseInfo1': 'Vous verrez tous les deux toutes les entrées de vacances dans un calendrier partagé.',
|
||
'vacay.fuseInfo2': 'Les deux parties peuvent créer et modifier des entrées pour l\'autre.',
|
||
'vacay.fuseInfo3': 'Les deux parties peuvent supprimer des entrées et modifier les droits aux vacances.',
|
||
'vacay.fuseInfo4': 'Les paramètres comme les jours fériés et les jours d\'entreprise sont partagés.',
|
||
'vacay.fuseInfo5': 'La fusion peut être dissoute à tout moment par l\'une ou l\'autre partie. Vos entrées seront préservées.',
|
||
'vacay.addCalendar': 'Ajouter un calendrier',
|
||
'vacay.calendarColor': 'Couleur',
|
||
'vacay.calendarLabel': 'Libellé',
|
||
'vacay.noCalendars': 'Aucun calendrier',
|
||
'nav.myTrips': 'Mes voyages',
|
||
|
||
// Atlas addon
|
||
'atlas.subtitle': 'Votre empreinte de voyage à travers le monde',
|
||
'atlas.countries': 'Pays',
|
||
'atlas.trips': 'Voyages',
|
||
'atlas.places': 'Lieux',
|
||
'atlas.days': 'Jours',
|
||
'atlas.visitedCountries': 'Pays visités',
|
||
'atlas.cities': 'Villes',
|
||
'atlas.noData': 'Aucune donnée de voyage',
|
||
'atlas.noDataHint': 'Créez un voyage et ajoutez des lieux pour voir votre carte du monde',
|
||
'atlas.lastTrip': 'Dernier voyage',
|
||
'atlas.nextTrip': 'Prochain voyage',
|
||
'atlas.daysLeft': 'jours restants',
|
||
'atlas.streak': 'Série',
|
||
'atlas.year': 'an',
|
||
'atlas.years': 'ans',
|
||
'atlas.yearInRow': 'année consécutive',
|
||
'atlas.yearsInRow': 'années consécutives',
|
||
'atlas.tripIn': 'voyage en',
|
||
'atlas.tripsIn': 'voyages en',
|
||
'atlas.since': 'depuis',
|
||
'atlas.europe': 'Europe',
|
||
'atlas.asia': 'Asie',
|
||
'atlas.northAmerica': 'Amérique du N.',
|
||
'atlas.southAmerica': 'Amérique du S.',
|
||
'atlas.africa': 'Afrique',
|
||
'atlas.oceania': 'Océanie',
|
||
'atlas.other': 'Autre',
|
||
'atlas.firstVisit': 'Premier voyage',
|
||
'atlas.lastVisitLabel': 'Dernier voyage',
|
||
'atlas.tripSingular': 'Voyage',
|
||
'atlas.tripPlural': 'Voyages',
|
||
'atlas.placeVisited': 'Lieu visité',
|
||
'atlas.placesVisited': 'Lieux visités',
|
||
'atlas.statsTab': 'Statistiques',
|
||
'atlas.bucketTab': 'Bucket List',
|
||
'atlas.addBucket': 'Ajouter à la bucket list',
|
||
'atlas.bucketNamePlaceholder': 'Lieu ou destination...',
|
||
'atlas.bucketNotesPlaceholder': 'Notes (optionnel)',
|
||
'atlas.bucketEmpty': 'Votre bucket list est vide',
|
||
'atlas.bucketEmptyHint': 'Ajoutez des lieux que vous rêvez de visiter',
|
||
'atlas.unmark': 'Retirer',
|
||
'atlas.confirmMark': 'Marquer ce pays comme visité ?',
|
||
'atlas.confirmUnmark': 'Retirer ce pays de votre liste ?',
|
||
'atlas.markVisited': 'Marquer comme visité',
|
||
'atlas.markVisitedHint': 'Ajouter ce pays à votre liste de visités',
|
||
'atlas.addToBucket': 'Ajouter à la bucket list',
|
||
'atlas.addPoi': 'Ajouter un lieu',
|
||
'atlas.searchCountry': 'Rechercher un pays…',
|
||
'atlas.month': 'Mois',
|
||
'atlas.addToBucketHint': 'Sauvegarder comme lieu à visiter',
|
||
'atlas.bucketWhen': 'Quand prévoyez-vous d\'y aller ?',
|
||
|
||
// Trip Planner
|
||
'trip.tabs.plan': 'Plan',
|
||
'trip.tabs.reservations': 'Réservations',
|
||
'trip.tabs.reservationsShort': 'Résa',
|
||
'trip.tabs.packing': 'Liste de bagages',
|
||
'trip.tabs.packingShort': 'Bagages',
|
||
'trip.tabs.budget': 'Budget',
|
||
'trip.tabs.files': 'Fichiers',
|
||
'trip.loading': 'Chargement du voyage…',
|
||
'trip.loadingPhotos': 'Chargement des photos des lieux...',
|
||
'trip.mobilePlan': 'Plan',
|
||
'trip.mobilePlaces': 'Lieux',
|
||
'trip.toast.placeUpdated': 'Lieu mis à jour',
|
||
'trip.toast.placeAdded': 'Lieu ajouté',
|
||
'trip.toast.placeDeleted': 'Lieu supprimé',
|
||
'trip.toast.selectDay': 'Veuillez d\'abord sélectionner un jour',
|
||
'trip.toast.assignedToDay': 'Lieu attribué au planning',
|
||
'trip.toast.reorderError': 'Échec de la réorganisation',
|
||
'trip.toast.reservationUpdated': 'Réservation mise à jour',
|
||
'trip.toast.reservationAdded': 'Réservation ajoutée',
|
||
'trip.toast.deleted': 'Supprimé',
|
||
'trip.confirm.deletePlace': 'Voulez-vous vraiment supprimer ce lieu ?',
|
||
|
||
// Day Plan Sidebar
|
||
'dayplan.emptyDay': 'Aucun lieu prévu pour ce jour',
|
||
'dayplan.addNote': 'Ajouter une note',
|
||
'dayplan.editNote': 'Modifier la note',
|
||
'dayplan.noteAdd': 'Ajouter une note',
|
||
'dayplan.noteEdit': 'Modifier la note',
|
||
'dayplan.noteTitle': 'Note',
|
||
'dayplan.noteSubtitle': 'Note du jour',
|
||
'dayplan.totalCost': 'Coût total',
|
||
'dayplan.days': 'Jours',
|
||
'dayplan.dayN': 'Jour {n}',
|
||
'dayplan.calculating': 'Calcul en cours…',
|
||
'dayplan.route': 'Itinéraire',
|
||
'dayplan.optimize': 'Optimiser',
|
||
'dayplan.optimized': 'Itinéraire optimisé',
|
||
'dayplan.routeError': 'Impossible de calculer l\'itinéraire',
|
||
'dayplan.toast.needTwoPlaces': 'Au moins deux lieux nécessaires pour optimiser l\'itinéraire',
|
||
'dayplan.toast.routeOptimized': 'Itinéraire optimisé',
|
||
'dayplan.toast.noGeoPlaces': 'Aucun lieu avec des coordonnées trouvé pour le calcul d\'itinéraire',
|
||
'dayplan.confirmed': 'Confirmé',
|
||
'dayplan.pendingRes': 'En attente',
|
||
'dayplan.pdf': 'PDF',
|
||
'dayplan.pdfTooltip': 'Exporter le plan du jour en PDF',
|
||
'dayplan.pdfError': 'Échec de l\'export PDF',
|
||
'dayplan.cannotReorderTransport': 'Les réservations avec une heure fixe ne peuvent pas être réorganisées',
|
||
'dayplan.confirmRemoveTimeTitle': 'Supprimer l\'heure ?',
|
||
'dayplan.confirmRemoveTimeBody': 'Ce lieu a une heure fixe ({time}). Le déplacer supprimera l\'heure et permettra un tri libre.',
|
||
'dayplan.confirmRemoveTimeAction': 'Supprimer l\'heure et déplacer',
|
||
'dayplan.cannotDropOnTimed': 'Les éléments ne peuvent pas être placés entre des entrées à heure fixe',
|
||
'dayplan.cannotBreakChronology': 'Cela briserait l\'ordre chronologique des éléments et réservations planifiés',
|
||
|
||
// Places Sidebar
|
||
'places.addPlace': 'Ajouter un lieu/activité',
|
||
'places.importGpx': 'GPX',
|
||
'places.gpxImported': '{count} lieux importés depuis GPX',
|
||
'places.gpxError': 'L\'import GPX a échoué',
|
||
'places.importGoogleList': 'Liste Google',
|
||
'places.googleListHint': 'Collez un lien de liste Google Maps partagée pour importer tous les lieux.',
|
||
'places.googleListImported': '{count} lieux importés depuis "{list}"',
|
||
'places.googleListError': 'Impossible d\'importer la liste Google Maps',
|
||
'places.viewDetails': 'Voir les détails',
|
||
'places.urlResolved': 'Lieu importé depuis l\'URL',
|
||
'places.assignToDay': 'Ajouter à quel jour ?',
|
||
'places.all': 'Tous',
|
||
'places.unplanned': 'Non planifiés',
|
||
'places.search': 'Rechercher des lieux…',
|
||
'places.allCategories': 'Toutes les catégories',
|
||
'places.categoriesSelected': 'catégories',
|
||
'places.clearFilter': 'Effacer le filtre',
|
||
'places.count': '{count} lieux',
|
||
'places.countSingular': '1 lieu',
|
||
'places.allPlanned': 'Tous les lieux sont planifiés',
|
||
'places.noneFound': 'Aucun lieu trouvé',
|
||
'places.editPlace': 'Modifier le lieu',
|
||
'places.formName': 'Nom',
|
||
'places.formNamePlaceholder': 'ex. Tour Eiffel',
|
||
'places.formDescription': 'Description',
|
||
'places.formDescriptionPlaceholder': 'Brève description…',
|
||
'places.formAddress': 'Adresse',
|
||
'places.formAddressPlaceholder': 'Rue, ville, pays',
|
||
'places.formLat': 'Latitude (ex. 48.8566)',
|
||
'places.formLng': 'Longitude (ex. 2.3522)',
|
||
'places.formCategory': 'Catégorie',
|
||
'places.noCategory': 'Sans catégorie',
|
||
'places.categoryNamePlaceholder': 'Nom de la catégorie',
|
||
'places.formTime': 'Heure',
|
||
'places.startTime': 'Début',
|
||
'places.endTime': 'Fin',
|
||
'places.endTimeBeforeStart': 'L\'heure de fin est antérieure à l\'heure de début',
|
||
'places.timeCollision': 'Chevauchement horaire avec :',
|
||
'places.formWebsite': 'Site web',
|
||
'places.formNotesPlaceholder': 'Notes personnelles…',
|
||
'places.formReservation': 'Réservation',
|
||
'places.reservationNotesPlaceholder': 'Notes de réservation, numéro de confirmation…',
|
||
'places.mapsSearchPlaceholder': 'Rechercher des lieux…',
|
||
'places.mapsSearchError': 'La recherche de lieu a échoué.',
|
||
'places.osmHint': 'Recherche via OpenStreetMap (pas de photos, horaires ni notes). Ajoutez une clé API Google dans les paramètres pour plus de détails.',
|
||
'places.osmActive': 'Recherche via OpenStreetMap (pas de photos, notes ni horaires). Ajoutez une clé API Google dans les paramètres pour des données enrichies.',
|
||
'places.categoryCreateError': 'Impossible de créer la catégorie',
|
||
'places.nameRequired': 'Veuillez saisir un nom',
|
||
'places.saveError': 'Échec de l\'enregistrement',
|
||
// Place Inspector
|
||
'inspector.opened': 'Ouvert',
|
||
'inspector.closed': 'Fermé',
|
||
'inspector.openingHours': 'Horaires d\'ouverture',
|
||
'inspector.showHours': 'Afficher les horaires',
|
||
'inspector.files': 'Fichiers',
|
||
'inspector.filesCount': '{count} fichiers',
|
||
'inspector.removeFromDay': 'Retirer du jour',
|
||
'inspector.addToDay': 'Ajouter au jour',
|
||
'inspector.confirmedRes': 'Réservation confirmée',
|
||
'inspector.pendingRes': 'Réservation en attente',
|
||
'inspector.google': 'Ouvrir dans Google Maps',
|
||
'inspector.website': 'Ouvrir le site web',
|
||
'inspector.addRes': 'Réservation',
|
||
'inspector.editRes': 'Modifier la réservation',
|
||
'inspector.participants': 'Participants',
|
||
'inspector.trackStats': 'Données du parcours',
|
||
|
||
// Reservations
|
||
'reservations.title': 'Réservations',
|
||
'reservations.empty': 'Aucune réservation',
|
||
'reservations.emptyHint': 'Ajoutez des réservations pour les vols, hôtels et plus',
|
||
'reservations.add': 'Ajouter une réservation',
|
||
'reservations.addManual': 'Réservation manuelle',
|
||
'reservations.placeHint': 'Conseil : les réservations sont mieux créées directement depuis un lieu pour les lier à votre plan du jour.',
|
||
'reservations.confirmed': 'Confirmée',
|
||
'reservations.pending': 'En attente',
|
||
'reservations.summary': '{confirmed} confirmées, {pending} en attente',
|
||
'reservations.fromPlan': 'Du plan',
|
||
'reservations.showFiles': 'Afficher les fichiers',
|
||
'reservations.editTitle': 'Modifier la réservation',
|
||
'reservations.status': 'Statut',
|
||
'reservations.datetime': 'Date et heure',
|
||
'reservations.startTime': 'Heure de début',
|
||
'reservations.endTime': 'Heure de fin',
|
||
'reservations.date': 'Date',
|
||
'reservations.time': 'Heure',
|
||
'reservations.timeAlt': 'Heure (alternative, ex. 19h30)',
|
||
'reservations.notes': 'Notes',
|
||
'reservations.notesPlaceholder': 'Notes supplémentaires…',
|
||
'reservations.meta.airline': 'Compagnie aérienne',
|
||
'reservations.meta.flightNumber': 'N° de vol',
|
||
'reservations.meta.from': 'De',
|
||
'reservations.meta.to': 'À',
|
||
'reservations.meta.trainNumber': 'N° de train',
|
||
'reservations.meta.platform': 'Quai',
|
||
'reservations.meta.seat': 'Place',
|
||
'reservations.meta.checkIn': 'Arrivée',
|
||
'reservations.meta.checkOut': 'Départ',
|
||
'reservations.meta.linkAccommodation': 'Hébergement',
|
||
'reservations.meta.pickAccommodation': 'Lier à un hébergement',
|
||
'reservations.meta.noAccommodation': 'Aucun',
|
||
'reservations.meta.hotelPlace': 'Hébergement',
|
||
'reservations.meta.pickHotel': 'Sélectionner un hébergement',
|
||
'reservations.meta.fromDay': 'Du',
|
||
'reservations.meta.toDay': 'Au',
|
||
'reservations.meta.selectDay': 'Sélectionner un jour',
|
||
'reservations.type.flight': 'Vol',
|
||
'reservations.type.hotel': 'Hébergement',
|
||
'reservations.type.restaurant': 'Restaurant',
|
||
'reservations.type.train': 'Train',
|
||
'reservations.type.car': 'Voiture de location',
|
||
'reservations.type.cruise': 'Croisière',
|
||
'reservations.type.event': 'Événement',
|
||
'reservations.type.tour': 'Visite',
|
||
'reservations.type.other': 'Autre',
|
||
'reservations.confirm.delete': 'Voulez-vous vraiment supprimer la réservation « {name} » ?',
|
||
'reservations.confirm.deleteTitle': 'Supprimer la réservation ?',
|
||
'reservations.confirm.deleteBody': '« {name} » sera définitivement supprimé.',
|
||
'reservations.toast.updated': 'Réservation mise à jour',
|
||
'reservations.toast.removed': 'Réservation supprimée',
|
||
'reservations.toast.fileUploaded': 'Fichier importé',
|
||
'reservations.toast.uploadError': 'Échec de l\'import',
|
||
'reservations.newTitle': 'Nouvelle réservation',
|
||
'reservations.bookingType': 'Type de réservation',
|
||
'reservations.titleLabel': 'Titre',
|
||
'reservations.titlePlaceholder': 'ex. Lufthansa LH123, Hôtel Adlon, …',
|
||
'reservations.locationAddress': 'Lieu / Adresse',
|
||
'reservations.locationPlaceholder': 'Adresse, aéroport, hôtel…',
|
||
'reservations.confirmationCode': 'Code de réservation',
|
||
'reservations.confirmationPlaceholder': 'ex. ABC12345',
|
||
'reservations.day': 'Jour',
|
||
'reservations.noDay': 'Aucun jour',
|
||
'reservations.place': 'Lieu',
|
||
'reservations.noPlace': 'Aucun lieu',
|
||
'reservations.pendingSave': 'sera enregistré…',
|
||
'reservations.uploading': 'Importation…',
|
||
'reservations.attachFile': 'Joindre un fichier',
|
||
'reservations.linkExisting': 'Lier un fichier existant',
|
||
'reservations.toast.saveError': 'Échec de l\'enregistrement',
|
||
'reservations.toast.updateError': 'Échec de la mise à jour',
|
||
'reservations.toast.deleteError': 'Échec de la suppression',
|
||
'reservations.confirm.remove': 'Supprimer la réservation pour « {name} » ?',
|
||
'reservations.linkAssignment': 'Lier à l\'affectation du jour',
|
||
'reservations.pickAssignment': 'Sélectionnez une affectation de votre plan…',
|
||
'reservations.noAssignment': 'Aucun lien (autonome)',
|
||
|
||
// Budget
|
||
'budget.title': 'Budget',
|
||
'budget.exportCsv': 'Exporter CSV',
|
||
'budget.emptyTitle': 'Aucun budget créé',
|
||
'budget.emptyText': 'Créez des catégories et des entrées pour planifier votre budget de voyage',
|
||
'budget.emptyPlaceholder': 'Nom de la catégorie…',
|
||
'budget.createCategory': 'Créer une catégorie',
|
||
'budget.category': 'Catégorie',
|
||
'budget.categoryName': 'Nom de la catégorie',
|
||
'budget.table.name': 'Nom',
|
||
'budget.table.total': 'Total',
|
||
'budget.table.persons': 'Personnes',
|
||
'budget.table.days': 'Jours',
|
||
'budget.table.perPerson': 'Par personne',
|
||
'budget.table.perDay': 'Par jour',
|
||
'budget.table.perPersonDay': 'P. p / Jour',
|
||
'budget.table.note': 'Note',
|
||
'budget.table.date': 'Date',
|
||
'budget.newEntry': 'Nouvelle entrée',
|
||
'budget.defaultEntry': 'Nouvelle entrée',
|
||
'budget.defaultCategory': 'Nouvelle catégorie',
|
||
'budget.total': 'Total',
|
||
'budget.totalBudget': 'Budget total',
|
||
'budget.byCategory': 'Par catégorie',
|
||
'budget.editTooltip': 'Cliquez pour modifier',
|
||
'budget.confirm.deleteCategory': 'Voulez-vous vraiment supprimer la catégorie « {name} » avec {count} entrées ?',
|
||
'budget.deleteCategory': 'Supprimer la catégorie',
|
||
'budget.perPerson': 'Par personne',
|
||
'budget.paid': 'Payé',
|
||
'budget.open': 'Ouvert',
|
||
'budget.noMembers': 'Aucun membre assigné',
|
||
'budget.settlement': 'Règlement',
|
||
'budget.settlementInfo': 'Cliquez sur l\'avatar d\'un membre sur un poste budgétaire pour le marquer en vert — cela signifie qu\'il a payé. Le règlement indique ensuite qui doit combien à qui.',
|
||
'budget.netBalances': 'Soldes nets',
|
||
|
||
// Files
|
||
'files.title': 'Fichiers',
|
||
'files.count': '{count} fichiers',
|
||
'files.countSingular': '1 fichier',
|
||
'files.uploaded': '{count} importés',
|
||
'files.uploadError': 'Échec de l\'import',
|
||
'files.dropzone': 'Déposez les fichiers ici',
|
||
'files.dropzoneHint': 'ou cliquez pour parcourir',
|
||
'files.allowedTypes': 'Images, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 Mo',
|
||
'files.uploading': 'Importation…',
|
||
'files.filterAll': 'Tous',
|
||
'files.filterPdf': 'PDF',
|
||
'files.filterImages': 'Images',
|
||
'files.filterDocs': 'Documents',
|
||
'files.filterCollab': 'Notes Collab',
|
||
'files.sourceCollab': 'Depuis les notes Collab',
|
||
'files.empty': 'Aucun fichier',
|
||
'files.emptyHint': 'Importez des fichiers pour les joindre à votre voyage',
|
||
'files.openTab': 'Ouvrir dans un nouvel onglet',
|
||
'files.confirm.delete': 'Voulez-vous vraiment supprimer ce fichier ?',
|
||
'files.toast.deleted': 'Fichier supprimé',
|
||
'files.toast.deleteError': 'Impossible de supprimer le fichier',
|
||
'files.sourcePlan': 'Plan du jour',
|
||
'files.sourceBooking': 'Réservation',
|
||
'files.attach': 'Joindre',
|
||
'files.pasteHint': 'Vous pouvez aussi coller des images depuis le presse-papiers (Ctrl+V)',
|
||
'files.trash': 'Corbeille',
|
||
'files.trashEmpty': 'La corbeille est vide',
|
||
'files.emptyTrash': 'Vider la corbeille',
|
||
'files.restore': 'Restaurer',
|
||
'files.star': 'Favori',
|
||
'files.unstar': 'Retirer des favoris',
|
||
'files.assign': 'Assigner',
|
||
'files.assignTitle': 'Assigner le fichier',
|
||
'files.assignPlace': 'Lieu',
|
||
'files.assignBooking': 'Réservation',
|
||
'files.unassigned': 'Non attribué',
|
||
'files.unlink': 'Supprimer le lien',
|
||
'files.toast.trashed': 'Déplacé dans la corbeille',
|
||
'files.toast.restored': 'Fichier restauré',
|
||
'files.toast.trashEmptied': 'Corbeille vidée',
|
||
'files.toast.assigned': 'Fichier attribué',
|
||
'files.toast.assignError': 'Échec de l\'assignation',
|
||
'files.toast.restoreError': 'Échec de la restauration',
|
||
'files.confirm.permanentDelete': 'Supprimer définitivement ce fichier ? Cette action est irréversible.',
|
||
'files.confirm.emptyTrash': 'Supprimer définitivement tous les fichiers de la corbeille ? Cette action est irréversible.',
|
||
'files.noteLabel': 'Note',
|
||
'files.notePlaceholder': 'Ajouter une note…',
|
||
|
||
// Packing
|
||
'packing.title': 'Liste de bagages',
|
||
'packing.empty': 'La liste de bagages est vide',
|
||
'packing.import': 'Importer',
|
||
'packing.importTitle': 'Importer la liste',
|
||
'packing.importHint': 'Un élément par ligne. Catégorie et quantité optionnelles séparées par virgule, point-virgule ou tabulation : Nom, Catégorie, Quantité',
|
||
'packing.importPlaceholder': 'Brosse à dents\nCrème solaire, Hygiène\nT-Shirts, Vêtements, 5\nPasseport, Documents',
|
||
'packing.importCsv': 'Charger CSV/TXT',
|
||
'packing.importAction': 'Importer {count}',
|
||
'packing.importSuccess': '{count} éléments importés',
|
||
'packing.importError': 'Échec de l\'import',
|
||
'packing.importEmpty': 'Aucun élément à importer',
|
||
'packing.progress': '{packed} sur {total} emballés ({percent} %)',
|
||
'packing.clearChecked': 'Supprimer {count} cochés',
|
||
'packing.clearCheckedShort': 'Supprimer {count}',
|
||
'packing.suggestions': 'Suggestions',
|
||
'packing.suggestionsTitle': 'Ajouter des suggestions',
|
||
'packing.allSuggested': 'Toutes les suggestions ajoutées',
|
||
'packing.allPacked': 'Tout est emballé !',
|
||
'packing.addPlaceholder': 'Ajouter un nouvel article…',
|
||
'packing.categoryPlaceholder': 'Catégorie…',
|
||
'packing.filterAll': 'Tous',
|
||
'packing.filterOpen': 'À faire',
|
||
'packing.filterDone': 'Fait',
|
||
'packing.emptyTitle': 'La liste de bagages est vide',
|
||
'packing.emptyHint': 'Ajoutez des articles ou utilisez les suggestions',
|
||
'packing.emptyFiltered': 'Aucun article ne correspond à ce filtre',
|
||
'packing.menuRename': 'Renommer',
|
||
'packing.menuCheckAll': 'Tout cocher',
|
||
'packing.menuUncheckAll': 'Tout décocher',
|
||
'packing.menuDeleteCat': 'Supprimer la catégorie',
|
||
'packing.addItem': 'Ajouter un article',
|
||
'packing.addItemPlaceholder': 'Nom de l\'article...',
|
||
'packing.addCategory': 'Ajouter une catégorie',
|
||
'packing.newCategoryPlaceholder': 'Nom de catégorie (ex. Vêtements)',
|
||
'packing.applyTemplate': 'Appliquer un modèle',
|
||
'packing.template': 'Modèle',
|
||
'packing.templateApplied': '{count} articles ajoutés depuis le modèle',
|
||
'packing.templateError': 'Erreur lors de l\'application du modèle',
|
||
'packing.assignUser': 'Assigner un utilisateur',
|
||
'packing.noMembers': 'Aucun membre',
|
||
'packing.bags': 'Bagages',
|
||
'packing.noBag': 'Non assigné',
|
||
'packing.totalWeight': 'Poids total',
|
||
'packing.bagName': 'Nom...',
|
||
'packing.addBag': 'Ajouter un bagage',
|
||
'packing.changeCategory': 'Changer de catégorie',
|
||
'packing.confirm.clearChecked': 'Voulez-vous vraiment supprimer {count} articles cochés ?',
|
||
'packing.confirm.deleteCat': 'Voulez-vous vraiment supprimer la catégorie « {name} » avec {count} articles ?',
|
||
'packing.defaultCategory': 'Autre',
|
||
'packing.toast.saveError': 'Échec de l\'enregistrement',
|
||
'packing.toast.deleteError': 'Échec de la suppression',
|
||
'packing.toast.renameError': 'Échec du renommage',
|
||
'packing.toast.addError': 'Échec de l\'ajout',
|
||
|
||
// Packing suggestions
|
||
'packing.suggestions.items': [
|
||
{ name: 'Passeport', category: 'Documents' },
|
||
{ name: 'Carte d\'identité', category: 'Documents' },
|
||
{ name: 'Assurance voyage', category: 'Documents' },
|
||
{ name: 'Billets d\'avion', category: 'Documents' },
|
||
{ name: 'Carte bancaire', category: 'Finances' },
|
||
{ name: 'Espèces', category: 'Finances' },
|
||
{ name: 'Visa', category: 'Documents' },
|
||
{ name: 'T-shirts', category: 'Vêtements' },
|
||
{ name: 'Pantalons', category: 'Vêtements' },
|
||
{ name: 'Sous-vêtements', category: 'Vêtements' },
|
||
{ name: 'Chaussettes', category: 'Vêtements' },
|
||
{ name: 'Veste', category: 'Vêtements' },
|
||
{ name: 'Pyjama', category: 'Vêtements' },
|
||
{ name: 'Maillot de bain', category: 'Vêtements' },
|
||
{ name: 'Imperméable', category: 'Vêtements' },
|
||
{ name: 'Chaussures confortables', category: 'Vêtements' },
|
||
{ name: 'Brosse à dents', category: 'Hygiène' },
|
||
{ name: 'Dentifrice', category: 'Hygiène' },
|
||
{ name: 'Shampooing', category: 'Hygiène' },
|
||
{ name: 'Déodorant', category: 'Hygiène' },
|
||
{ name: 'Crème solaire', category: 'Hygiène' },
|
||
{ name: 'Rasoir', category: 'Hygiène' },
|
||
{ name: 'Chargeur', category: 'Électronique' },
|
||
{ name: 'Batterie externe', category: 'Électronique' },
|
||
{ name: 'Écouteurs', category: 'Électronique' },
|
||
{ name: 'Adaptateur de voyage', category: 'Électronique' },
|
||
{ name: 'Appareil photo', category: 'Électronique' },
|
||
{ name: 'Antidouleurs', category: 'Santé' },
|
||
{ name: 'Pansements', category: 'Santé' },
|
||
{ name: 'Désinfectant', category: 'Santé' },
|
||
],
|
||
|
||
// Members / Sharing
|
||
'members.shareTrip': 'Partager le voyage',
|
||
'members.inviteUser': 'Inviter un utilisateur',
|
||
'members.selectUser': 'Sélectionner un utilisateur…',
|
||
'members.invite': 'Inviter',
|
||
'members.allHaveAccess': 'Tous les utilisateurs ont déjà accès.',
|
||
'members.access': 'Accès',
|
||
'members.person': 'personne',
|
||
'members.persons': 'personnes',
|
||
'members.you': 'vous',
|
||
'members.owner': 'Propriétaire',
|
||
'members.leaveTrip': 'Quitter le voyage',
|
||
'members.removeAccess': 'Retirer l\'accès',
|
||
'members.confirmLeave': 'Quitter le voyage ? Vous perdrez l\'accès.',
|
||
'members.confirmRemove': 'Retirer l\'accès à cet utilisateur ?',
|
||
'members.loadError': 'Impossible de charger les membres',
|
||
'members.added': 'ajouté',
|
||
'members.addError': 'Échec de l\'ajout',
|
||
'members.removed': 'Membre retiré',
|
||
'members.removeError': 'Échec de la suppression',
|
||
|
||
// Categories (Admin)
|
||
'categories.title': 'Catégories',
|
||
'categories.subtitle': 'Gérer les catégories de lieux',
|
||
'categories.new': 'Nouvelle catégorie',
|
||
'categories.empty': 'Aucune catégorie',
|
||
'categories.namePlaceholder': 'Nom de la catégorie',
|
||
'categories.icon': 'Icône',
|
||
'categories.color': 'Couleur',
|
||
'categories.customColor': 'Choisir une couleur personnalisée',
|
||
'categories.preview': 'Aperçu',
|
||
'categories.defaultName': 'Catégorie',
|
||
'categories.update': 'Mettre à jour',
|
||
'categories.create': 'Créer',
|
||
'categories.confirm.delete': 'Supprimer la catégorie ? Les lieux de cette catégorie ne seront pas supprimés.',
|
||
'categories.toast.loadError': 'Impossible de charger les catégories',
|
||
'categories.toast.nameRequired': 'Veuillez saisir un nom',
|
||
'categories.toast.updated': 'Catégorie mise à jour',
|
||
'categories.toast.created': 'Catégorie créée',
|
||
'categories.toast.saveError': 'Échec de l\'enregistrement',
|
||
'categories.toast.deleted': 'Catégorie supprimée',
|
||
'categories.toast.deleteError': 'Échec de la suppression',
|
||
|
||
// Backup (Admin)
|
||
'backup.title': 'Sauvegarde des données',
|
||
'backup.subtitle': 'Base de données et tous les fichiers importés',
|
||
'backup.refresh': 'Actualiser',
|
||
'backup.upload': 'Importer une sauvegarde',
|
||
'backup.uploading': 'Importation…',
|
||
'backup.create': 'Créer une sauvegarde',
|
||
'backup.creating': 'Création…',
|
||
'backup.empty': 'Aucune sauvegarde',
|
||
'backup.createFirst': 'Créer la première sauvegarde',
|
||
'backup.download': 'Télécharger',
|
||
'backup.restore': 'Restaurer',
|
||
'backup.confirm.restore': 'Restaurer la sauvegarde « {name} » ?\n\nToutes les données actuelles seront remplacées par la sauvegarde.',
|
||
'backup.confirm.uploadRestore': 'Importer et restaurer le fichier de sauvegarde « {name} » ?\n\nToutes les données actuelles seront écrasées.',
|
||
'backup.confirm.delete': 'Supprimer la sauvegarde « {name} » ?',
|
||
'backup.toast.loadError': 'Impossible de charger les sauvegardes',
|
||
'backup.toast.created': 'Sauvegarde créée avec succès',
|
||
'backup.toast.createError': 'Impossible de créer la sauvegarde',
|
||
'backup.toast.restored': 'Sauvegarde restaurée. La page va se recharger…',
|
||
'backup.toast.restoreError': 'Échec de la restauration',
|
||
'backup.toast.uploadError': 'Échec de l\'import',
|
||
'backup.toast.deleted': 'Sauvegarde supprimée',
|
||
'backup.toast.deleteError': 'Échec de la suppression',
|
||
'backup.toast.downloadError': 'Échec du téléchargement',
|
||
'backup.toast.settingsSaved': 'Paramètres de sauvegarde automatique enregistrés',
|
||
'backup.toast.settingsError': 'Impossible d\'enregistrer les paramètres',
|
||
'backup.auto.title': 'Sauvegarde automatique',
|
||
'backup.auto.subtitle': 'Sauvegarde automatique programmée',
|
||
'backup.auto.enable': 'Activer la sauvegarde automatique',
|
||
'backup.auto.enableHint': 'Les sauvegardes seront créées automatiquement selon le calendrier choisi',
|
||
'backup.auto.interval': 'Intervalle',
|
||
'backup.auto.hour': 'Exécuter à l\'heure',
|
||
'backup.auto.hourHint': 'Heure locale du serveur (format {format})',
|
||
'backup.auto.dayOfWeek': 'Jour de la semaine',
|
||
'backup.auto.dayOfMonth': 'Jour du mois',
|
||
'backup.auto.dayOfMonthHint': 'Limité à 1–28 pour la compatibilité avec tous les mois',
|
||
'backup.auto.scheduleSummary': 'Planification',
|
||
'backup.auto.summaryDaily': 'Tous les jours à {hour}h00',
|
||
'backup.auto.summaryWeekly': 'Chaque {day} à {hour}h00',
|
||
'backup.auto.summaryMonthly': 'Le {day} de chaque mois à {hour}h00',
|
||
'backup.auto.envLocked': 'Docker',
|
||
'backup.auto.envLockedHint': 'La sauvegarde automatique est configurée via les variables d\'environnement Docker. Pour modifier ces paramètres, mettez à jour votre docker-compose.yml et redémarrez le conteneur.',
|
||
'backup.auto.copyEnv': 'Copier les variables d\'env Docker',
|
||
'backup.auto.envCopied': 'Variables d\'env Docker copiées dans le presse-papiers',
|
||
'backup.auto.keepLabel': 'Supprimer les anciennes sauvegardes après',
|
||
'backup.dow.sunday': 'Dim',
|
||
'backup.dow.monday': 'Lun',
|
||
'backup.dow.tuesday': 'Mar',
|
||
'backup.dow.wednesday': 'Mer',
|
||
'backup.dow.thursday': 'Jeu',
|
||
'backup.dow.friday': 'Ven',
|
||
'backup.dow.saturday': 'Sam',
|
||
'backup.interval.hourly': 'Toutes les heures',
|
||
'backup.interval.daily': 'Quotidien',
|
||
'backup.interval.weekly': 'Hebdomadaire',
|
||
'backup.interval.monthly': 'Mensuel',
|
||
'backup.keep.1day': '1 jour',
|
||
'backup.keep.3days': '3 jours',
|
||
'backup.keep.7days': '7 jours',
|
||
'backup.keep.14days': '14 jours',
|
||
'backup.keep.30days': '30 jours',
|
||
'backup.keep.forever': 'Conserver indéfiniment',
|
||
|
||
// Photos
|
||
'photos.allDays': 'Tous les jours',
|
||
'photos.noPhotos': 'Aucune photo',
|
||
'photos.uploadHint': 'Importez vos photos de voyage',
|
||
'photos.clickToSelect': 'ou cliquez pour sélectionner',
|
||
'photos.linkPlace': 'Lier au lieu',
|
||
'photos.noPlace': 'Aucun lieu',
|
||
'photos.uploadN': '{n} photo(s) importée(s)',
|
||
|
||
// Backup restore modal
|
||
'backup.restoreConfirmTitle': 'Restaurer la sauvegarde ?',
|
||
'backup.restoreWarning': 'Toutes les données actuelles (voyages, lieux, utilisateurs, importations) seront définitivement remplacées par la sauvegarde. Cette action est irréversible.',
|
||
'backup.restoreTip': 'Conseil : créez une sauvegarde de l\'état actuel avant de restaurer.',
|
||
'backup.restoreConfirm': 'Oui, restaurer',
|
||
|
||
// PDF
|
||
'pdf.travelPlan': 'Plan de voyage',
|
||
'pdf.planned': 'Planifié',
|
||
'pdf.costLabel': 'Coût EUR',
|
||
'pdf.preview': 'Aperçu PDF',
|
||
'pdf.saveAsPdf': 'Enregistrer en PDF',
|
||
|
||
// Planner
|
||
'planner.places': 'Lieux',
|
||
'planner.bookings': 'Réservations',
|
||
'planner.packingList': 'Liste de bagages',
|
||
'planner.documents': 'Documents',
|
||
'planner.dayPlan': 'Plan du jour',
|
||
'planner.reservations': 'Réservations',
|
||
'planner.minTwoPlaces': 'Au moins 2 lieux avec coordonnées nécessaires',
|
||
'planner.noGeoPlaces': 'Aucun lieu avec coordonnées disponible',
|
||
'planner.routeCalculated': 'Itinéraire calculé',
|
||
'planner.routeCalcFailed': 'L\'itinéraire n\'a pas pu être calculé',
|
||
'planner.routeError': 'Erreur lors du calcul de l\'itinéraire',
|
||
'planner.routeOptimized': 'Itinéraire optimisé',
|
||
'planner.reservationUpdated': 'Réservation mise à jour',
|
||
'planner.reservationAdded': 'Réservation ajoutée',
|
||
'planner.confirmDeleteReservation': 'Supprimer la réservation ?',
|
||
'planner.reservationDeleted': 'Réservation supprimée',
|
||
'planner.days': 'Jours',
|
||
'planner.allPlaces': 'Tous les lieux',
|
||
'planner.totalPlaces': '{n} lieux au total',
|
||
'planner.noDaysPlanned': 'Aucun jour planifié',
|
||
'planner.editTrip': 'Modifier le voyage \u2192',
|
||
'planner.placeOne': '1 lieu',
|
||
'planner.placeN': '{n} lieux',
|
||
'planner.addNote': 'Ajouter une note',
|
||
'planner.noEntries': 'Aucune entrée pour ce jour',
|
||
'planner.addPlace': 'Ajouter un lieu ou une activité',
|
||
'planner.addPlaceShort': '+ Ajouter un lieu ou une activité',
|
||
'planner.resPending': 'Réservation en attente · ',
|
||
'planner.resConfirmed': 'Réservation confirmée · ',
|
||
'planner.notePlaceholder': 'Note…',
|
||
'planner.noteTimePlaceholder': 'Heure (facultatif)',
|
||
'planner.noteExamplePlaceholder': 'ex. S3 à 14h30 depuis la gare centrale, ferry depuis le quai 7, pause déjeuner…',
|
||
'planner.totalCost': 'Coût total',
|
||
'planner.searchPlaces': 'Rechercher des lieux…',
|
||
'planner.allCategories': 'Toutes les catégories',
|
||
'planner.noPlacesFound': 'Aucun lieu trouvé',
|
||
'planner.addFirstPlace': 'Ajouter un premier lieu',
|
||
'planner.noReservations': 'Aucune réservation',
|
||
'planner.addFirstReservation': 'Ajouter une première réservation',
|
||
'planner.new': 'Nouveau',
|
||
'planner.addToDay': '+ Jour',
|
||
'planner.calculating': 'Calcul…',
|
||
'planner.route': 'Itinéraire',
|
||
'planner.optimize': 'Optimiser',
|
||
'planner.openGoogleMaps': 'Ouvrir dans Google Maps',
|
||
'planner.selectDayHint': 'Sélectionnez un jour dans la liste de gauche pour voir le plan du jour',
|
||
'planner.noPlacesForDay': 'Aucun lieu pour ce jour',
|
||
'planner.addPlacesLink': 'Ajouter des lieux \u2192',
|
||
'planner.minTotal': 'min. total',
|
||
'planner.noReservation': 'Pas de réservation',
|
||
'planner.removeFromDay': 'Retirer du jour',
|
||
'planner.addToThisDay': 'Ajouter au jour',
|
||
'planner.overview': 'Aperçu',
|
||
'planner.noDays': 'Aucun jour',
|
||
'planner.editTripToAddDays': 'Modifiez le voyage pour ajouter des jours',
|
||
'planner.dayCount': '{n} jours',
|
||
'planner.clickToUnlock': 'Cliquez pour déverrouiller',
|
||
'planner.keepPosition': 'Maintenir la position lors de l\'optimisation de l\'itinéraire',
|
||
'planner.dayDetails': 'Détails du jour',
|
||
'planner.dayN': 'Jour {n}',
|
||
|
||
// Dashboard Stats
|
||
'stats.countries': 'Pays',
|
||
'stats.cities': 'Villes',
|
||
'stats.trips': 'Voyages',
|
||
'stats.places': 'Lieux',
|
||
'stats.worldProgress': 'Progression mondiale',
|
||
'stats.visited': 'visités',
|
||
'stats.remaining': 'restants',
|
||
'stats.visitedCountries': 'Pays visités',
|
||
|
||
// Day Detail Panel
|
||
'day.precipProb': 'Probabilité de pluie',
|
||
'day.precipitation': 'Précipitations',
|
||
'day.wind': 'Vent',
|
||
'day.sunrise': 'Lever du soleil',
|
||
'day.sunset': 'Coucher du soleil',
|
||
'day.hourlyForecast': 'Prévisions horaires',
|
||
'day.climateHint': 'Moyennes historiques — prévisions réelles disponibles dans les 16 jours précédant cette date.',
|
||
'day.noWeather': 'Aucune donnée météo disponible. Ajoutez un lieu avec des coordonnées.',
|
||
'day.overview': 'Aperçu du jour',
|
||
'day.accommodation': 'Hébergement',
|
||
'day.addAccommodation': 'Ajouter un hébergement',
|
||
'day.hotelDayRange': 'Appliquer aux jours',
|
||
'day.noPlacesForHotel': 'Ajoutez d\'abord des lieux à votre voyage',
|
||
'day.allDays': 'Tous',
|
||
'day.checkIn': 'Arrivée',
|
||
'day.checkOut': 'Départ',
|
||
'day.confirmation': 'Confirmation',
|
||
'day.editAccommodation': 'Modifier l\'hébergement',
|
||
'day.reservations': 'Réservations',
|
||
|
||
// Memories / Immich
|
||
'memories.title': 'Photos',
|
||
'memories.notConnected': 'Immich non connecté',
|
||
'memories.notConnectedHint': 'Connectez votre instance Immich dans les paramètres pour voir vos photos de voyage ici.',
|
||
'memories.noDates': 'Ajoutez des dates à votre voyage pour charger les photos.',
|
||
'memories.noPhotos': 'Aucune photo trouvée',
|
||
'memories.noPhotosHint': 'Aucune photo trouvée dans Immich pour la période de ce voyage.',
|
||
'memories.photosFound': 'photos',
|
||
'memories.fromOthers': 'd\'autres',
|
||
'memories.sharePhotos': 'Partager les photos',
|
||
'memories.sharing': 'Partagé',
|
||
'memories.reviewTitle': 'Vérifier vos photos',
|
||
'memories.reviewHint': 'Cliquez sur les photos pour les exclure du partage.',
|
||
'memories.shareCount': 'Partager {count} photos',
|
||
'memories.immichUrl': 'URL du serveur Immich',
|
||
'memories.immichApiKey': 'Clé API',
|
||
'memories.testConnection': 'Tester la connexion',
|
||
'memories.testFirst': 'Testez la connexion avant de sauvegarder',
|
||
'memories.connected': 'Connecté',
|
||
'memories.disconnected': 'Non connecté',
|
||
'memories.connectionSuccess': 'Connecté à Immich',
|
||
'memories.connectionError': 'Impossible de se connecter à Immich',
|
||
'memories.saved': 'Paramètres Immich enregistrés',
|
||
'memories.oldest': 'Plus anciennes',
|
||
'memories.newest': 'Plus récentes',
|
||
'memories.allLocations': 'Tous les lieux',
|
||
'memories.addPhotos': 'Ajouter des photos',
|
||
'memories.linkAlbum': 'Lier un album',
|
||
'memories.selectAlbum': 'Choisir un album Immich',
|
||
'memories.noAlbums': 'Aucun album trouvé',
|
||
'memories.syncAlbum': 'Synchroniser',
|
||
'memories.unlinkAlbum': 'Délier',
|
||
'memories.photos': 'photos',
|
||
'memories.selectPhotos': 'Sélectionner des photos depuis Immich',
|
||
'memories.selectHint': 'Appuyez sur les photos pour les sélectionner.',
|
||
'memories.selected': 'sélectionné(s)',
|
||
'memories.addSelected': 'Ajouter {count} photos',
|
||
'memories.alreadyAdded': 'Ajouté',
|
||
'memories.private': 'Privé',
|
||
'memories.stopSharing': 'Arrêter le partage',
|
||
'memories.tripDates': 'Dates du voyage',
|
||
'memories.allPhotos': 'Toutes les photos',
|
||
'memories.confirmShareTitle': 'Partager avec les membres du voyage ?',
|
||
'memories.confirmShareHint': '{count} photos seront visibles par tous les membres de ce voyage. Vous pourrez rendre des photos individuelles privées plus tard.',
|
||
'memories.confirmShareButton': 'Partager les photos',
|
||
|
||
// Collab Addon
|
||
'collab.tabs.chat': 'Discussion',
|
||
'collab.tabs.notes': 'Notes',
|
||
'collab.tabs.polls': 'Sondages',
|
||
'collab.whatsNext.title': 'À venir',
|
||
'collab.whatsNext.today': 'Aujourd\'hui',
|
||
'collab.whatsNext.tomorrow': 'Demain',
|
||
'collab.whatsNext.empty': 'Aucune activité à venir',
|
||
'collab.whatsNext.until': 'à',
|
||
'collab.whatsNext.emptyHint': 'Les activités avec des horaires apparaîtront ici',
|
||
'collab.chat.send': 'Envoyer',
|
||
'collab.chat.placeholder': 'Écrire un message…',
|
||
'collab.chat.empty': 'Commencez la conversation',
|
||
'collab.chat.emptyHint': 'Les messages sont partagés avec tous les membres du voyage',
|
||
'collab.chat.emptyDesc': 'Partagez des idées, des plans et des mises à jour avec votre groupe de voyage',
|
||
'collab.chat.today': 'Aujourd\'hui',
|
||
'collab.chat.yesterday': 'Hier',
|
||
'collab.chat.deletedMessage': 'a supprimé un message',
|
||
'collab.chat.reply': 'Répondre',
|
||
'collab.chat.loadMore': 'Charger les messages précédents',
|
||
'collab.chat.justNow': 'à l\'instant',
|
||
'collab.chat.minutesAgo': 'il y a {n} min',
|
||
'collab.chat.hoursAgo': 'il y a {n} h',
|
||
'collab.notes.title': 'Notes',
|
||
'collab.notes.new': 'Nouvelle note',
|
||
'collab.notes.empty': 'Aucune note',
|
||
'collab.notes.emptyHint': 'Commencez à capturer vos idées et plans',
|
||
'collab.notes.all': 'Toutes',
|
||
'collab.notes.titlePlaceholder': 'Titre de la note',
|
||
'collab.notes.contentPlaceholder': 'Écrivez quelque chose…',
|
||
'collab.notes.categoryPlaceholder': 'Catégorie',
|
||
'collab.notes.newCategory': 'Nouvelle catégorie…',
|
||
'collab.notes.category': 'Catégorie',
|
||
'collab.notes.noCategory': 'Sans catégorie',
|
||
'collab.notes.color': 'Couleur',
|
||
'collab.notes.save': 'Enregistrer',
|
||
'collab.notes.cancel': 'Annuler',
|
||
'collab.notes.edit': 'Modifier',
|
||
'collab.notes.delete': 'Supprimer',
|
||
'collab.notes.pin': 'Épingler',
|
||
'collab.notes.unpin': 'Désépingler',
|
||
'collab.notes.daysAgo': 'il y a {n} j',
|
||
'collab.notes.categorySettings': 'Gérer les catégories',
|
||
'collab.notes.create': 'Créer',
|
||
'collab.notes.website': 'Site web',
|
||
'collab.notes.websitePlaceholder': 'https://…',
|
||
'collab.notes.attachFiles': 'Joindre des fichiers',
|
||
'collab.notes.noCategoriesYet': 'Aucune catégorie',
|
||
'collab.notes.emptyDesc': 'Créez une note pour commencer',
|
||
'collab.polls.title': 'Sondages',
|
||
'collab.polls.new': 'Nouveau sondage',
|
||
'collab.polls.empty': 'Aucun sondage',
|
||
'collab.polls.emptyHint': 'Posez des questions au groupe et votez ensemble',
|
||
'collab.polls.question': 'Question',
|
||
'collab.polls.questionPlaceholder': 'Que devrait-on faire ?',
|
||
'collab.polls.addOption': '+ Ajouter une option',
|
||
'collab.polls.optionPlaceholder': 'Option {n}',
|
||
'collab.polls.create': 'Créer le sondage',
|
||
'collab.polls.close': 'Fermer',
|
||
'collab.polls.closed': 'Fermé',
|
||
'collab.polls.votes': '{n} votes',
|
||
'collab.polls.vote': '{n} vote',
|
||
'collab.polls.multipleChoice': 'Choix multiples',
|
||
'collab.polls.multiChoice': 'Choix multiples',
|
||
'collab.polls.deadline': 'Date limite',
|
||
'collab.polls.option': 'Option',
|
||
'collab.polls.options': 'Options',
|
||
'collab.polls.delete': 'Supprimer',
|
||
'collab.polls.closedSection': 'Fermés',
|
||
|
||
// Permissions
|
||
'admin.tabs.permissions': 'Permissions',
|
||
'perm.title': 'Paramètres des permissions',
|
||
'perm.subtitle': 'Contrôlez qui peut effectuer des actions dans l\'application',
|
||
'perm.saved': 'Paramètres des permissions enregistrés',
|
||
'perm.resetDefaults': 'Réinitialiser par défaut',
|
||
'perm.customized': 'personnalisé',
|
||
'perm.level.admin': 'Administrateur uniquement',
|
||
'perm.level.tripOwner': 'Propriétaire du voyage',
|
||
'perm.level.tripMember': 'Membres du voyage',
|
||
'perm.level.everybody': 'Tout le monde',
|
||
'perm.cat.trip': 'Gestion des voyages',
|
||
'perm.cat.members': 'Gestion des membres',
|
||
'perm.cat.files': 'Fichiers',
|
||
'perm.cat.content': 'Contenu et planning',
|
||
'perm.cat.extras': 'Budget, bagages et collaboration',
|
||
'perm.action.trip_create': 'Créer des voyages',
|
||
'perm.action.trip_edit': 'Modifier les détails du voyage',
|
||
'perm.action.trip_delete': 'Supprimer des voyages',
|
||
'perm.action.trip_archive': 'Archiver / désarchiver des voyages',
|
||
'perm.action.trip_cover_upload': 'Télécharger l\'image de couverture',
|
||
'perm.action.member_manage': 'Ajouter / supprimer des membres',
|
||
'perm.action.file_upload': 'Télécharger des fichiers',
|
||
'perm.action.file_edit': 'Modifier les métadonnées des fichiers',
|
||
'perm.action.file_delete': 'Supprimer des fichiers',
|
||
'perm.action.place_edit': 'Ajouter / modifier / supprimer des lieux',
|
||
'perm.action.day_edit': 'Modifier les jours, notes et affectations',
|
||
'perm.action.reservation_edit': 'Gérer les réservations',
|
||
'perm.action.budget_edit': 'Gérer le budget',
|
||
'perm.action.packing_edit': 'Gérer les listes de bagages',
|
||
'perm.action.collab_edit': 'Collaboration (notes, sondages, chat)',
|
||
'perm.action.share_manage': 'Gérer les liens de partage',
|
||
'perm.actionHint.trip_create': 'Qui peut créer de nouveaux voyages',
|
||
'perm.actionHint.trip_edit': 'Qui peut modifier le nom, les dates, la description et la devise du voyage',
|
||
'perm.actionHint.trip_delete': 'Qui peut supprimer définitivement un voyage',
|
||
'perm.actionHint.trip_archive': 'Qui peut archiver ou désarchiver un voyage',
|
||
'perm.actionHint.trip_cover_upload': 'Qui peut télécharger ou modifier l\'image de couverture',
|
||
'perm.actionHint.member_manage': 'Qui peut inviter ou supprimer des membres du voyage',
|
||
'perm.actionHint.file_upload': 'Qui peut télécharger des fichiers vers un voyage',
|
||
'perm.actionHint.file_edit': 'Qui peut modifier les descriptions et liens des fichiers',
|
||
'perm.actionHint.file_delete': 'Qui peut déplacer des fichiers vers la corbeille ou les supprimer définitivement',
|
||
'perm.actionHint.place_edit': 'Qui peut ajouter, modifier ou supprimer des lieux',
|
||
'perm.actionHint.day_edit': 'Qui peut modifier les jours, notes de jours et affectations de lieux',
|
||
'perm.actionHint.reservation_edit': 'Qui peut créer, modifier ou supprimer des réservations',
|
||
'perm.actionHint.budget_edit': 'Qui peut créer, modifier ou supprimer des éléments de budget',
|
||
'perm.actionHint.packing_edit': 'Qui peut gérer les articles de bagages et les sacs',
|
||
'perm.actionHint.collab_edit': 'Qui peut créer des notes, des sondages et envoyer des messages',
|
||
'perm.actionHint.share_manage': 'Qui peut créer ou supprimer des liens de partage publics',
|
||
// Undo
|
||
'undo.button': 'Annuler',
|
||
'undo.tooltip': 'Annuler : {action}',
|
||
'undo.assignPlace': 'Lieu ajouté au jour',
|
||
'undo.removeAssignment': 'Lieu retiré du jour',
|
||
'undo.reorder': 'Lieux réorganisés',
|
||
'undo.optimize': 'Itinéraire optimisé',
|
||
'undo.deletePlace': 'Lieu supprimé',
|
||
'undo.moveDay': 'Lieu déplacé vers un autre jour',
|
||
'undo.lock': 'Verrouillage du lieu modifié',
|
||
'undo.importGpx': 'Import GPX',
|
||
'undo.importGoogleList': 'Import Google Maps',
|
||
|
||
// Notifications
|
||
'notifications.title': 'Notifications',
|
||
'notifications.markAllRead': 'Tout marquer comme lu',
|
||
'notifications.deleteAll': 'Tout supprimer',
|
||
'notifications.showAll': 'Voir toutes les notifications',
|
||
'notifications.empty': 'Aucune notification',
|
||
'notifications.emptyDescription': 'Vous êtes à jour !',
|
||
'notifications.all': 'Toutes',
|
||
'notifications.unreadOnly': 'Non lues',
|
||
'notifications.markRead': 'Marquer comme lu',
|
||
'notifications.markUnread': 'Marquer comme non lu',
|
||
'notifications.delete': 'Supprimer',
|
||
'notifications.system': 'Système',
|
||
'memories.error.loadAlbums': 'Impossible de charger les albums',
|
||
'memories.error.linkAlbum': 'Impossible de lier l\'album',
|
||
'memories.error.unlinkAlbum': 'Impossible de dissocier l\'album',
|
||
'memories.error.syncAlbum': 'Impossible de synchroniser l\'album',
|
||
'memories.error.loadPhotos': 'Impossible de charger les photos',
|
||
'memories.error.addPhotos': 'Impossible d\'ajouter les photos',
|
||
'memories.error.removePhoto': 'Impossible de supprimer la photo',
|
||
'memories.error.toggleSharing': 'Impossible de mettre à jour le partage',
|
||
'undo.addPlace': 'Lieu ajouté',
|
||
'undo.done': 'Annulé : {action}',
|
||
'notifications.test.title': 'Notification test de {actor}',
|
||
'notifications.test.text': 'Ceci est une simple notification de test.',
|
||
'notifications.test.booleanTitle': '{actor} demande votre approbation',
|
||
'notifications.test.booleanText': 'Notification de test booléenne.',
|
||
'notifications.test.accept': 'Approuver',
|
||
'notifications.test.decline': 'Refuser',
|
||
'notifications.test.navigateTitle': 'Allez voir quelque chose',
|
||
'notifications.test.navigateText': 'Notification de test de navigation.',
|
||
'notifications.test.goThere': 'Y aller',
|
||
'notifications.test.adminTitle': 'Diffusion admin',
|
||
'notifications.test.adminText': '{actor} a envoyé une notification de test à tous les admins.',
|
||
'notifications.test.tripTitle': '{actor} a publié dans votre voyage',
|
||
'notifications.test.tripText': 'Notification de test pour le voyage "{trip}".',
|
||
}
|
||
|
||
export default fr
|