Files
TREK/shared/src/i18n/fr/settings.ts
T
jubnl ae71bcfd1e feat(settings): make the display currency optional, falling back to the trip's
Costs already resolved `default_currency || trip.currency || 'EUR'`, but the
setting could never actually be empty: the store seeded 'USD', so a user who had
never touched it silently had every trip converted into dollars, and the picker
offered no way to unset it.

Seed it empty and lead the picker with a "Trip currency" option, so an unset
preference means "show each trip in its own currency" instead of forcing them all
through one code. An explicit empty value persists and beats the admin-set
instance default — it is a deliberate choice, not an absence.

This also brings the public share's fallback to life: the share payload has
resolved sharer's currency -> trip currency since #1361, but the trip-currency
branch was unreachable while every owner had a currency forced on them.

Plugins are handed `formats.currency` as a concrete code, so PluginFrame now
resolves the same chain rather than passing an empty string through the bridge.
2026-07-13 22:23:15 +02:00

509 lines
32 KiB
TypeScript

import type { TranslationStrings } from '../types';
const settings: TranslationStrings = {
'settings.title': 'Paramètres',
'settings.subtitle': 'Configurez vos paramètres personnels',
'settings.tabs.display': 'Affichage',
'settings.tabs.map': 'Carte',
'settings.tabs.notifications': 'Notifications',
'settings.tabs.integrations': 'Intégrations',
'settings.plugins.oauth.connected': 'Connecté',
'settings.plugins.oauth.notConnected': 'Non connecté',
'settings.plugins.oauth.connect': 'Connecter',
'settings.plugins.oauth.disconnect': 'Déconnecter',
'settings.tabs.plugins': 'Modules',
'settings.plugins.title': 'Paramètres des modules',
'settings.plugins.subtitle': 'Vos paramètres personnels pour les modules que vous utilisez (clés API, préférences).',
'settings.plugins.empty': 'Aucun module actif.',
'settings.plugins.saved': 'Paramètres enregistrés',
'settings.tabs.account': 'Compte',
'settings.tabs.offline': 'Offline',
'settings.tabs.about': 'À propos',
'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.mapProvider': 'Fournisseur de carte',
'settings.mapProviderHint': 'Affecte les cartes Trip Planner et Journey. Atlas utilise toujours Leaflet.',
'settings.mapLeafletSubtitle': 'Classique 2D, toutes tuiles raster',
'settings.mapMapboxSubtitle': 'Tuiles vectorielles, bâtiments 3D & terrain',
'settings.mapMapLibreSubtitle': 'Tuiles vectorielles OpenFreeMap, sans jeton',
'settings.mapExperimental': 'Expérimental',
'settings.mapMapboxToken': "Jeton d'accès Mapbox",
'settings.mapMapboxTokenHint': 'Jeton public (pk.*) depuis',
'settings.mapMapboxTokenLink': "mapbox.com → Jetons d'accès",
'settings.mapStyle': 'Style de carte',
'settings.mapStylePlaceholder': 'Sélectionner un style Mapbox',
'settings.mapStyleHint': 'Preset ou votre propre URL mapbox://styles/USER/ID',
'settings.mapOpenFreeMapStylePlaceholder': 'Sélectionner un style OpenFreeMap',
'settings.mapOpenFreeMapStyleHint':
'Preset ou URL de style OpenFreeMap. Les styles OpenFreeMap fonctionnent sans jeton.',
'settings.map3dBuildings': 'Bâtiments 3D & terrain',
'settings.map3dHint':
'Inclinaison + extrusions 3D réelles des bâtiments — fonctionne avec tous les styles, y compris satellite.',
'settings.mapHighQuality': 'Mode haute qualité',
'settings.mapHighQualityHint':
'Anticrénelage + projection globe pour des bords plus nets et une vue réaliste du monde.',
'settings.mapHighQualityWarning': 'Peut affecter les performances sur les appareils moins puissants.',
'settings.mapTipLabel': 'Astuce :',
'settings.mapTip':
'Clic droit et glisser pour pivoter/incliner la carte. Clic milieu pour ajouter un lieu (le clic droit est réservé à la rotation).',
'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.distance': 'Unité de distance',
'settings.timeFormat': "Format de l'heure",
'settings.blurBookingCodes': 'Masquer les codes de réservation',
'settings.aiAlwaysRetry': 'Always retry booking imports with AI',
'settings.aiAlwaysRetryHint': 'When a file cannot be read by the standard parser, automatically retry it with AI.',
'settings.optimizeFromAccommodation': "Optimiser l'itinéraire depuis l'hébergement",
'settings.optimizeFromAccommodationHint':
"Lors de l'optimisation d'une journée, commencez l'itinéraire à l'hôtel où vous vous réveillez et terminez-le à celui où vous arrivez le soir.",
'settings.notifications': 'Notifications',
'settings.notifyTripInvite': 'Invitations de voyage',
'settings.notifyBookingChange': 'Modifications de réservation',
'settings.notifyTripReminder': 'Rappels de voyage',
'settings.notifyTodoDue': 'Tâche à échéance',
'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.',
'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.clientConfigHintOAuth':
"Remplacez <your_client_id> et <your_client_secret> par les identifiants affichés dans le client OAuth 2.1 créé ci-dessus. mcp-remote ouvrira votre navigateur pour finaliser l'autorisation lors de la première connexion. 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.mcp.apiTokensDeprecated':
'Les tokens API sont dépréciés et seront supprimés dans une prochaine version. Veuillez utiliser les clients OAuth 2.1 à la place.',
'settings.oauth.clients': 'Clients OAuth 2.1',
'settings.oauth.clientsHint':
'Enregistrez des clients OAuth 2.1 pour permettre à des applications MCP tierces (Claude Web, Cursor, etc.) de se connecter sans tokens statiques.',
'settings.oauth.createClient': 'Nouveau client',
'settings.oauth.noClients': 'Aucun client OAuth enregistré.',
'settings.oauth.clientId': 'ID client',
'settings.oauth.clientSecret': 'Secret client',
'settings.oauth.deleteClient': 'Supprimer le client',
'settings.oauth.deleteClientMessage':
"Ce client et toutes les sessions actives seront définitivement supprimés. Toute application l'utilisant perdra immédiatement l'accès.",
'settings.oauth.rotateSecret': 'Renouveler le secret',
'settings.oauth.rotateSecretMessage':
'Un nouveau secret client sera généré et toutes les sessions existantes seront immédiatement invalidées. Mettez à jour votre application avant de fermer cette fenêtre.',
'settings.oauth.rotateSecretConfirm': 'Renouveler',
'settings.oauth.rotateSecretConfirming': 'Renouvellement…',
'settings.oauth.rotateSecretDoneTitle': 'Nouveau secret généré',
'settings.oauth.rotateSecretDoneWarning':
"Ce secret n'est affiché qu'une seule fois. Copiez-le maintenant et mettez à jour votre application — toutes les sessions précédentes ont été invalidées.",
'settings.oauth.activeSessions': 'Sessions OAuth actives',
'settings.oauth.sessionScopes': 'Portées',
'settings.oauth.sessionExpires': 'Expire',
'settings.oauth.revoke': 'Révoquer',
'settings.oauth.revokeSession': 'Révoquer la session',
'settings.oauth.revokeSessionMessage': "Cela révoquera immédiatement l'accès pour cette session OAuth.",
'settings.oauth.modal.createTitle': 'Enregistrer un client OAuth',
'settings.oauth.modal.presets': 'Préréglages rapides',
'settings.oauth.modal.clientName': "Nom de l'application",
'settings.oauth.modal.clientNamePlaceholder': 'ex. Claude Web, Mon app MCP',
'settings.oauth.modal.redirectUris': 'URIs de redirection',
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
'settings.oauth.modal.redirectUrisHint':
'Une URI par ligne. HTTPS requis (localhost exempté). Correspondance exacte.',
'settings.oauth.modal.scopes': 'Portées autorisées',
'settings.oauth.modal.scopesHint':
"list_trips et get_trip_summary sont toujours disponibles — aucune portée requise. Ils permettent à l'IA de découvrir les IDs de voyage nécessaires.",
'settings.oauth.modal.selectAll': 'Tout sélectionner',
'settings.oauth.modal.deselectAll': 'Tout désélectionner',
'settings.oauth.modal.creating': 'Enregistrement…',
'settings.oauth.modal.create': 'Enregistrer le client',
'settings.oauth.modal.createdTitle': 'Client enregistré',
'settings.oauth.modal.createdWarning':
"Le secret client n'est affiché qu'une seule fois. Copiez-le maintenant — il ne peut pas être récupéré.",
'settings.oauth.toast.createError': "Impossible d'enregistrer le client OAuth",
'settings.oauth.toast.deleted': 'Client OAuth supprimé',
'settings.oauth.toast.deleteError': 'Impossible de supprimer le client OAuth',
'settings.oauth.toast.revoked': 'Session révoquée',
'settings.oauth.toast.revokeError': 'Impossible de révoquer la session',
'settings.oauth.toast.rotateError': 'Impossible de renouveler le secret client',
'settings.oauth.modal.machineClient': 'Client machine (sans connexion navigateur)',
'settings.oauth.modal.machineClientHint':
'Utilise le grant client_credentials — aucune URI de redirection requise. Le token est émis directement via client_id + client_secret et agit en votre nom dans les portées sélectionnées.',
'settings.oauth.modal.machineClientUsage':
'Obtenir un token : POST /oauth/token avec grant_type=client_credentials, client_id et client_secret. Sans navigateur, sans token de rafraîchissement.',
'settings.oauth.badge.machine': 'machine',
'settings.account': 'Compte',
'settings.about': 'À propos',
'settings.about.reportBug': 'Signaler un bug',
'settings.about.reportBugHint': 'Un problème ? Faites-le nous savoir',
'settings.about.featureRequest': 'Proposer une fonctionnalité',
'settings.about.featureRequestHint': 'Suggérez une nouvelle fonctionnalité',
'settings.about.wikiHint': 'Documentation et guides',
'settings.about.supporters.badge': 'Soutiens Mensuels',
'settings.about.supporters.title': 'Compagnons de voyage pour TREK',
'settings.about.supporters.subtitle':
"Pendant que tu planifies ton prochain itinéraire, ces personnes aident à planifier l'avenir de TREK. Leur contribution mensuelle va directement au développement et aux heures réellement passées — pour que TREK reste Open Source.",
'settings.about.supporters.since': 'soutien depuis {date}',
'settings.about.supporters.tierEmpty': 'Sois le premier',
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer',
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
'settings.about.description':
'TREK est un planificateur de voyage auto-hébergé qui vous aide à organiser vos voyages de la première idée au dernier souvenir. Planification journalière, budget, listes de bagages, photos et bien plus — le tout au même endroit, sur votre propre serveur.',
'settings.about.madeWith': 'Fait avec',
'settings.about.madeBy': 'par Maurice et une communauté open-source grandissante.',
'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",
'settings.bookingLabels': 'Étiquettes des itinéraires',
'settings.bookingLabelsHint':
"Affiche les noms des gares / aéroports sur la carte. Si désactivé, seule l'icône est affichée.",
'settings.notifyVersionAvailable': 'Nouvelle version disponible',
'settings.notificationPreferences.noChannels':
"Aucun canal de notification n'est configuré. Demandez à un administrateur de configurer les notifications par e-mail ou webhook.",
'settings.webhookUrl.label': 'URL du webhook',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint':
'Entrez votre URL de webhook Discord, Slack ou personnalisée pour recevoir des notifications.',
'settings.webhookUrl.saved': 'URL du webhook enregistrée',
'settings.webhookUrl.test': 'Tester',
'settings.webhookUrl.testSuccess': 'Webhook de test envoyé avec succès',
'settings.webhookUrl.testFailed': 'Échec du webhook de test',
'settings.ntfyUrl.topicLabel': 'Sujet Ntfy',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
'settings.ntfyUrl.serverLabel': 'URL du serveur Ntfy (optionnel)',
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint':
'Entrez votre sujet Ntfy pour recevoir des notifications push. Laissez le serveur vide pour utiliser la valeur par défaut configurée par votre administrateur.',
'settings.ntfyUrl.tokenLabel': "Jeton d'accès (optionnel)",
'settings.ntfyUrl.tokenHint': 'Requis pour les sujets protégés par mot de passe.',
'settings.ntfyUrl.saved': 'Paramètres Ntfy enregistrés',
'settings.ntfyUrl.test': 'Tester',
'settings.ntfyUrl.testSuccess': 'Notification de test Ntfy envoyée avec succès',
'settings.ntfyUrl.testFailed': 'Échec de la notification de test Ntfy',
'settings.ntfyUrl.tokenCleared': "Jeton d'accès effacé",
'settings.notificationPreferences.inapp': 'In-App',
'settings.notificationPreferences.notConfigured': 'Pas encore configuré — à paramétrer dans les réglages du plugin',
'settings.plugins.actions': 'Actions',
'settings.plugins.actions.confirm': 'Exécuter cette action ?',
'settings.notificationPreferences.sendTest': 'Envoyer un test',
'settings.notificationPreferences.configure': 'Configurer',
'settings.notificationPreferences.testSuccess': 'Notification de test envoyée.',
'settings.notificationPreferences.testFailed': 'Échec du test.',
'settings.notificationPreferences.pluginConfigured':
'Configuré. Gérez vos identifiants sur la page de réglages du plugin.',
'settings.notificationPreferences.webhook': 'Webhook',
'settings.notificationPreferences.email': 'Email',
'settings.notificationPreferences.ntfy': 'Ntfy',
'settings.currency': 'Currency',
'settings.currencyHint': 'All amounts in Costs are converted to and shown in this currency.',
'settings.currencyTrip': 'Devise du voyage',
'settings.passkey.title': 'Passkeys',
'settings.passkey.description':
'Connectez-vous plus rapidement et de façon résistante au phishing avec une passkey — votre empreinte digitale, votre visage, votre code PIN ou une clé matérielle. Votre mot de passe reste disponible en secours.',
'settings.passkey.notConfigured':
'Les passkeys sont activées mais ne sont pas encore entièrement configurées sur ce serveur. Demandez à votre administrateur de définir le domaine WebAuthn.',
'settings.passkey.add': 'Ajouter une passkey',
'settings.passkey.addTitle': 'Ajouter une passkey',
'settings.passkey.passwordPrompt':
'Confirmez votre mot de passe actuel, puis suivez les instructions de votre appareil.',
'settings.passkey.passwordRequired': 'Votre mot de passe actuel est requis.',
'settings.passkey.namePlaceholder': 'Nom (facultatif, ex. "iPhone")',
'settings.passkey.addedToast': 'Passkey ajoutée',
'settings.passkey.added': 'Ajoutée',
'settings.passkey.addError': "Impossible d'ajouter la passkey",
'settings.passkey.cancelled': 'Configuration de la passkey annulée',
'settings.passkey.deleted': 'Passkey supprimée',
'settings.passkey.deleteConfirm': 'Supprimer cette passkey ? Confirmez avec votre mot de passe.',
'settings.passkey.rename': 'Renommer',
'settings.passkey.defaultName': 'Passkey',
'settings.passkey.synced': 'Synchronisée',
'settings.passkey.deviceBound': 'Cet appareil',
'settings.passkey.lastUsed': 'Dernière utilisation',
'settings.passkey.neverUsed': 'Jamais utilisée',
'settings.mapPoiPill': 'Explorer les lieux sur la carte',
'settings.mapPoiPillHint':
'Afficher une pastille de catégorie sur la carte du voyage pour trouver à proximité des restaurants, hébergements et plus encore depuis OpenStreetMap.',
'settings.airtrail.title': 'AirTrail',
'settings.airtrail.hint':
'Connectez votre instance AirTrail auto-hébergée pour importer et synchroniser vos vols. Créez une clé API dans AirTrail sous Paramètres → Sécurité.',
'settings.airtrail.url': "URL de l'instance",
'settings.airtrail.apiKey': 'Clé API',
'settings.airtrail.apiKeyPlaceholder': 'Clé API Bearer',
'settings.airtrail.apiKeyHint': 'Générée dans AirTrail sous Paramètres → Sécurité. Stockée chiffrée.',
'settings.airtrail.allowInsecureTls': 'Autoriser les certificats auto-signés',
'settings.airtrail.allowInsecureTlsHint':
'À activer uniquement pour une instance de confiance sur votre propre réseau.',
'settings.airtrail.writeBack': 'Réécrire les modifications dans AirTrail',
'settings.airtrail.writeBackHint':
'Désactivé par défaut : AirTrail fait référence et TREK se contente de le lire. Activez pour renvoyer vers AirTrail les modifications faites dans TREK.',
'settings.airtrail.connected': 'Connecté',
'settings.airtrail.notConnected': 'Non connecté',
'settings.airtrail.toast.saved': 'Connexion AirTrail enregistrée',
'settings.airtrail.toast.saveError': "Impossible d'enregistrer la connexion",
'settings.airtrail.test.button': 'Tester la connexion',
'settings.airtrail.test.success': 'Connecté — {count} vol(s) trouvé(s)',
'settings.airtrail.test.failed': 'Échec de la connexion',
'settings.aiParsing.title': 'Analyse par IA',
'settings.aiParsing.hint':
"Utilisez votre propre modèle d'IA pour extraire les réservations des fichiers importés. Cela ne s'applique que si votre administrateur n'a pas configuré de modèle pour l'ensemble de l'instance.",
'settings.aiParsing.provider': 'Fournisseur',
'settings.aiParsing.providerLocal': 'Local (Ollama)',
'settings.aiParsing.providerOpenai': 'OpenAI',
'settings.aiParsing.providerAnthropic': 'Anthropic',
'settings.aiParsing.model': 'Modèle',
'settings.aiParsing.baseUrl': 'URL de base',
'settings.aiParsing.baseUrlHint':
"Emplacement d'exécution du modèle — un serveur Ollama local ou un point de terminaison compatible OpenAI.",
'settings.aiParsing.apiKey': 'Clé API',
'settings.aiParsing.apiKeyHint': 'Stockée de façon chiffrée. Laissez vide pour conserver la clé actuelle.',
'settings.aiParsing.multimodal': "Envoyer les documents sous forme d'images",
'settings.aiParsing.multimodalHint':
"Pour les modèles capables d'analyser des images — envoie le PDF d'origine au lieu du texte extrait.",
'settings.aiParsing.toast.saved': "Paramètres d'IA enregistrés",
'settings.aiParsing.toast.saveError': "Impossible d'enregistrer les paramètres d'IA",
'settings.tabs.appearance': 'Appearance',
'settings.appearance.theme': 'Theme',
'settings.appearance.scheme': 'Color scheme',
'settings.appearance.scheme.default': 'Default',
'settings.appearance.scheme.highContrast': 'High contrast',
'settings.appearance.scheme.indigo': 'Indigo',
'settings.appearance.scheme.teal': 'Teal',
'settings.appearance.scheme.rose': 'Rose',
'settings.appearance.scheme.amber': 'Amber',
'settings.appearance.scheme.violet': 'Violet',
'settings.appearance.scheme.custom': 'Custom',
'settings.appearance.customAccent': 'Custom accent',
'settings.appearance.contrastOk': 'Good contrast',
'settings.appearance.contrastLow': 'Low contrast',
'settings.appearance.readability': 'Readability',
'settings.appearance.transparency': 'Transparency',
'settings.appearance.transparencyHint':
'Glassy translucent surfaces. Turn off for solid, higher-contrast backgrounds.',
'settings.appearance.reduceMotion': 'Reduce motion',
'settings.appearance.reduceMotionHint': 'Minimize animations and transitions.',
'settings.appearance.density': 'Density',
'settings.appearance.comfortable': 'Comfortable',
'settings.appearance.compact': 'Compact',
'settings.appearance.textSize': 'Text size',
'settings.appearance.advancedTextSizes': 'Advanced text sizes',
'settings.appearance.hideAdvanced': 'Hide advanced',
'settings.appearance.tier.title': 'Titles',
'settings.appearance.tier.subtitle': 'Subtitles',
'settings.appearance.tier.body': 'Body',
'settings.appearance.tier.caption': 'Captions',
'settings.appearance.dashboardWidgets': 'Dashboard widgets',
'settings.appearance.dashboardWidgetsHint': 'Show or hide dashboard widgets independently on desktop and mobile.',
'settings.appearance.desktop': 'Desktop',
'settings.appearance.mobile': 'Mobile',
'settings.appearance.widget.sidebar': 'Right sidebar',
'settings.appearance.widget.currency': 'Currency',
'settings.appearance.widget.collections': 'Collections',
'settings.appearance.widget.timezones': 'Timezones',
'settings.appearance.widget.upcomingReservations': 'Upcoming reservations',
'settings.appearance.widget.atlas': 'Atlas / countries',
'settings.appearance.widget.tripsTotal': 'Trips total',
'settings.appearance.widget.daysTraveled': 'Days traveled',
'settings.appearance.widget.distanceFlown': 'Distance flown',
'settings.appearance.reset': 'Reset to defaults',
'settings.appearance.group.belowHero': 'Below the hero',
'settings.appearance.group.bottomOfPage': 'Bottom of page',
'settings.appearance.sidebarHint': 'The whole right column. Turn off and the dashboard centers.',
'settings.appearance.densityHint':
'Compact tightens spacing and padding for a denser layout that fits more on screen.',
'settings.appearance.textSizeAll': 'Everything',
'settings.appearance.perSize': 'Adjust each size separately',
'settings.appearance.size.large': 'Large',
'settings.appearance.size.medium': 'Medium',
'settings.appearance.size.normal': 'Normal',
'settings.appearance.size.small': 'Small',
'settings.appearance.preview.large': 'Large heading',
'settings.appearance.preview.medium': 'Medium subtitle',
'settings.appearance.preview.normal': 'Normal body text',
'settings.appearance.preview.small': 'Small caption / address',
'settings.appearance.example.large': 'Headings, big numbers',
'settings.appearance.example.medium': 'Sub-headings',
'settings.appearance.example.normal': 'Place names, descriptions',
'settings.appearance.example.small': 'Addresses, labels',
'settings.appearance.experimental': 'Experimental',
'settings.general.languageRegion': 'Language & region',
'settings.general.travelMap': 'Travel & map',
// ── Offline (#1135)
'settings.offline.cache.title': 'Cache hors ligne',
'settings.offline.mode.title': 'Mode hors ligne',
'settings.offline.mode.force': 'Forcer le mode hors ligne',
'settings.offline.mode.forceHint':
"Travaillez uniquement à partir des données en cache et mettez vos modifications en file d'attente. Désactivez pour vous reconnecter et synchroniser.",
'settings.offline.mode.active':
"Le mode hors ligne est activé — vos modifications sont en file d'attente et seront synchronisées lorsque vous le désactiverez.",
'settings.offline.prepare.title': 'Préparer le mode hors ligne',
'settings.offline.prepare.hint':
'Téléchargez tout ce dont vous avez besoin — données de voyage, documents et tuiles de carte — avant de perdre la connexion.',
'settings.offline.prepare.button': 'Télécharger pour une utilisation hors ligne',
'settings.offline.prepare.running': 'Téléchargement…',
'settings.offline.prepare.done': 'Prêt pour une utilisation hors ligne',
'settings.offline.prepare.phase.trips': 'Données de voyage',
'settings.offline.prepare.phase.files': 'Documents',
'settings.offline.prepare.phase.tiles': 'Tuiles de carte',
'settings.offline.resync': 'Resynchroniser maintenant',
'settings.offline.resyncing': 'Synchronisation…',
'settings.offline.storage.title': 'Que stocker hors ligne',
'settings.offline.storage.tiles': 'Stocker les tuiles de carte hors ligne',
'settings.offline.storage.tilesHint':
'Les tuiles de carte utilisent le plus de stockage. Désactivez cette option pour ne conserver hors ligne que les données de voyage et les documents.',
'settings.offline.storage.tripsTitle': 'Voyages',
'settings.offline.storage.tripOn': 'Stocké hors ligne',
'settings.offline.storage.tripOff': 'Non stocké',
'settings.offline.clear': 'Vider le cache',
'settings.offline.clearConfirm':
'Vider toutes les données de voyage hors ligne ? Vous pourrez resynchroniser à tout moment lorsque vous serez en ligne.',
'settings.offline.stats.trips': 'Voyages en cache',
'settings.offline.stats.pending': 'Modifications en attente',
'settings.offline.stats.failed': 'Modifications échouées',
'settings.offline.stats.conflicts': 'Conflits',
'settings.offline.empty': "Aucun voyage en cache pour l'instant. Connectez-vous à Internet pour synchroniser.",
'settings.offline.loading': 'Chargement…',
'settings.offline.conflicts.title': 'Conflits de synchronisation',
'settings.offline.conflicts.hint':
'Les modifications que vous avez faites hors ligne entrent en conflit avec des modifications plus récentes sur le serveur. Choisissez la version à conserver.',
'settings.offline.conflicts.keepMine': 'Conserver la mienne',
'settings.offline.conflicts.keepServer': 'Conserver la leur',
'settings.offline.conflicts.mine': 'Votre version',
'settings.offline.conflicts.server': 'Version du serveur',
'settings.offline.conflicts.item': 'Modification de “{name}”',
'settings.offline.conflicts.strategyTitle': 'En cas de conflit',
'settings.offline.conflicts.strategy.ask': 'Me demander à chaque fois',
'settings.offline.conflicts.strategy.mine': 'Toujours conserver ma version',
'settings.offline.conflicts.strategy.server': 'Toujours conserver la version du serveur',
'settings.offline.banner.offline': 'Hors ligne',
'settings.offline.banner.forced': 'Mode hors ligne',
'settings.offline.banner.queued': 'Hors ligne · {count} en attente',
'settings.offline.banner.syncing': 'Synchronisation de {count}…',
'settings.offline.banner.failed': 'Échec de la synchronisation : {count}',
'settings.offline.banner.conflicts': 'Conflits : {count}',
'settings.pluginActivity.title': 'Activité des plugins',
'settings.pluginActivity.description':
"Chaque action qu'un plugin a effectuée en votre nom, la plus récente en premier.",
'settings.pluginActivity.empty': 'Aucune activité de plugin pour le moment.',
'settings.pluginActivity.refresh': 'Actualiser',
'settings.pluginActivity.columns.plugin': 'Plugin',
'settings.pluginActivity.columns.action': 'Action',
'settings.pluginActivity.columns.resource': 'Ressource',
'settings.pluginActivity.columns.when': 'Quand',
'settings.pluginActivity.columns.status': 'Résultat',
};
export default settings;