mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-14 00:01:03 +00:00
b53130ca0d
A sign-in with another subject of the same provider is refused, so an account whose provider re-issued the subject (a migrated or rebuilt IdP, a changed sub format) was locked out: editing the email, as the wiki advised, never touched the stored link. The edit dialog now offers "Remove SSO link" for other accounts while SSO is set up (DELETE /api/admin/users/:id/sso, audit admin.user_sso_unlink). The next SSO sign-in links again under the rules of a first one, so it still needs a verified, not self-set email. The log line names the remedy, and the wiki tells the two refusals apart. Fixes #3065
1181 lines
87 KiB
TypeScript
1181 lines
87 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const admin: TranslationStrings = {
|
||
'admin.notifications.title': 'Notifications', // same-as-en
|
||
'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.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",
|
||
'admin.title': 'Administration', // same-as-en
|
||
'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.users.one': 'Utilisateur',
|
||
'admin.stats.trips': 'Voyages',
|
||
'admin.stats.trips.one': 'Voyage',
|
||
'admin.stats.places': 'Lieux',
|
||
'admin.stats.places.one': 'Lieu',
|
||
'admin.stats.photos': 'Photos', // same-as-en
|
||
'admin.stats.files': 'Fichiers',
|
||
'admin.stats.files.one': 'Fichier',
|
||
'admin.table.user': 'Utilisateur',
|
||
'admin.table.email': 'E-mail',
|
||
'admin.table.role': 'Rôle',
|
||
'admin.table.created': 'Créé le',
|
||
'admin.table.lastActive': 'Dernière activité',
|
||
'admin.table.actions': 'Actions', // same-as-en
|
||
'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}\" ? Son compte ainsi que tous les voyages et journaux dont il est propriétaire seront définitivement supprimés, y compris les voyages partagés avec d'autres membres, qui en perdront l'accès. Les voyages appartenant à d'autres restent.",
|
||
'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.authMethods': "Méthodes d'authentification",
|
||
'admin.passwordLogin': 'Connexion par mot de passe',
|
||
'admin.passwordLoginHint': 'Autoriser les utilisateurs à se connecter avec leur e-mail et leur mot de passe',
|
||
'admin.passwordRegistration': 'Inscription par mot de passe',
|
||
'admin.passwordRegistrationHint':
|
||
"Autoriser les nouveaux utilisateurs à s'inscrire avec un e-mail et un mot de passe",
|
||
'admin.oidcLogin': 'Connexion SSO',
|
||
'admin.oidcLoginHint': 'Autoriser les utilisateurs à se connecter via SSO',
|
||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||
'admin.oidcRegistrationHint': 'Créer automatiquement des comptes pour les nouveaux utilisateurs SSO',
|
||
'admin.envOverrideHint':
|
||
"Les réglages de connexion par mot de passe sont contrôlés par la variable d'environnement OIDC_ONLY et ne peuvent pas être modifiés ici.",
|
||
'admin.lockoutWarning': 'Au moins une méthode de connexion doit rester activée',
|
||
'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':
|
||
"D'où viennent les données de lieux. L'index TREK ne demande aucune clé ; les deux fournisseurs ci-dessous sont facultatifs.",
|
||
'admin.trekApi.badgeDefault': 'Source recommandée par défaut',
|
||
'admin.googleCaveat.badge': 'Déconseillé',
|
||
'admin.googleCaveat.body':
|
||
"TREK est un logiciel libre et nous ne sommes pas neutres ici. À cette échelle, les avis et les photos de commerces ordinaires n'existent que chez Google, et c'est cela, un monopole. Le champ est là faute d'alternative, pas parce que nous le recommandons. Chaque requête part alors chez Google.",
|
||
'admin.trekApi.tagline':
|
||
"Les services propres à TREK : recherche de lieux, recherche d'adresses et calcul d'itinéraires, sans clé Google et sans clé à saisir. Chaque installation dispose d'un quota journalier équitable, et seul le nombre de requêtes est compté.",
|
||
'admin.trekApi.factPlaces': '73,6 millions de lieux dans le monde',
|
||
'admin.trekApi.factNoKey': 'Aucune clé à saisir, quota journalier équitable',
|
||
'admin.trekApi.factOffline': 'Paquets par pays utilisables hors ligne',
|
||
'admin.trekApi.factPrivacy': 'Les recherches ne sont jamais journalisées',
|
||
'admin.trekApi.factAddresses': 'Adresses et villes dans le monde entier, en 26 langues',
|
||
'admin.trekApi.factRouting': 'Itinéraires en voiture, à vélo et à pied, avec dénivelé',
|
||
'admin.trekApi.addrStreets': 'Rues et numéros',
|
||
'admin.trekApi.addrTowns': 'Villes et régions',
|
||
'admin.trekApi.addrReverse': "Adresse d'un point sur la carte",
|
||
'admin.trekApi.addrLanguages': '26 langues',
|
||
'admin.trekApi.addressNote':
|
||
"Toutes les adresses d'OpenStreetMap, pendant la saisie et depuis un point sur la carte.",
|
||
'admin.trekApi.routeCar': 'En voiture',
|
||
'admin.trekApi.routeBike': 'À vélo',
|
||
'admin.trekApi.routeFoot': 'À pied',
|
||
'admin.trekApi.routeAvoid': 'Éviter les péages, les autoroutes et les ferries',
|
||
'admin.trekApi.routeElevation': "Profil d'élévation",
|
||
'admin.trekApi.routingNote':
|
||
"Des itinéraires sur toute la planète, reconstruits chaque mois à partir d'OpenStreetMap, avec les altitudes issues de tuiles de relief.",
|
||
'admin.trekApi.more': "Ce qu'il contient",
|
||
'admin.trekApi.fieldPhone': 'Téléphone',
|
||
'admin.trekApi.fieldStableId': 'Identifiant stable',
|
||
'admin.trekApi.includedNote':
|
||
"Les descriptions viennent du site du lieu lui-même ; les horaires d'OpenStreetMap là où ils sont renseignés.",
|
||
'admin.trekApi.notRatings': 'Avis',
|
||
'admin.trekApi.notPhotos': 'Photos des commerces ordinaires',
|
||
'admin.trekApi.notIncludedNote':
|
||
"Aucune source ouverte ne propose l'un ni l'autre, à aucun prix. Une clé Google reste le seul chemin vers ces deux-là.",
|
||
'admin.trekApi.sourcesLabel': 'Sources', // same-as-en
|
||
'admin.trekApi.sourcesNote': "Chaque champ d'une réponse indique de laquelle il provient.",
|
||
'admin.trekApi.included': 'Inclus',
|
||
'admin.trekApi.notIncluded': 'Non inclus',
|
||
'admin.trekApi.quota.title': 'Quota du jour',
|
||
'admin.trekApi.quota.used': 'Utilisé',
|
||
'admin.trekApi.quota.remaining': 'Restant',
|
||
'admin.trekApi.quota.resets': 'Remise à zéro à',
|
||
'admin.trekApi.quota.limit': 'Limite',
|
||
'admin.trekApi.quota.key': 'Clé',
|
||
'admin.trekApi.quota.state.connected': 'Connecté',
|
||
'admin.trekApi.quota.state.registering': 'Configuration en cours',
|
||
'admin.trekApi.quota.state.legacy': 'Réserve partagée',
|
||
'admin.trekApi.quota.state.off': 'Désactivé',
|
||
'admin.trekApi.quota.state.revoked': 'Clé révoquée',
|
||
'admin.trekApi.quota.tier.std': 'Standard', // same-as-en
|
||
'admin.trekApi.quota.tier.hosted': 'Hébergé',
|
||
'admin.trekApi.quota.tier.own': 'Instance propre',
|
||
'admin.trekApi.quota.tier.legacy': 'Partagé',
|
||
'admin.trekApi.quota.hint.registering':
|
||
'Cette installation obtient sa clé en arrière-plan. La recherche continue de fonctionner pendant ce temps.',
|
||
'admin.trekApi.quota.hint.legacy':
|
||
"Pas encore de clé. Les recherches passent par la réserve partagée jusqu'à ce que l'installation en obtienne une lors de sa prochaine recherche.",
|
||
'admin.trekApi.quota.hint.off': 'Non utilisé sur cette instance : désactivé, ou dirigé vers votre propre copie.',
|
||
'admin.trekApi.quota.hint.revoked':
|
||
"La clé de cette installation a été révoquée. Les recherches passent par la réserve partagée jusqu'à ce que vous créiez une nouvelle identité.",
|
||
'admin.trekApi.quota.unavailable': 'Le quota ne peut pas être lu pour le moment.',
|
||
'admin.trekApi.quota.service.places': 'Recherche de lieux',
|
||
'admin.trekApi.quota.service.photon': 'Recherche d’adresses',
|
||
'admin.trekApi.quota.service.valhalla': 'Itinéraires',
|
||
'admin.trekApi.quota.notInUse': 'Non utilisé sur cette instance',
|
||
'admin.trekApi.quota.envKey': 'La clé provient de TREK_SERVICES_KEY.',
|
||
'admin.trekApi.quota.regenerate': 'Nouvelle identité',
|
||
'admin.trekApi.quota.regenerateTitle': 'Créer une nouvelle identité ?',
|
||
'admin.trekApi.quota.regenerateBody':
|
||
"Cette installation abandonne sa clé et en demande une nouvelle en arrière-plan. La recherche continue de fonctionner pendant ce temps. Utile après avoir copié l'installation sur une autre machine, ou si la clé a été révoquée.",
|
||
'admin.trekApi.quota.regenerated': 'Une nouvelle identité est en cours de configuration.',
|
||
'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 Google, l'API TREK recommandée est utilisée. Avec une clé, les photos, les avis et les horaires peuvent être chargés en plus. Créez-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.unsplashKey': 'Clé API Unsplash',
|
||
'admin.unsplashKeyHint': 'Pour la recherche d’images. Gratuit sur unsplash.com/developers',
|
||
'admin.amapKey': 'Clé API Amap (高德地图)',
|
||
'admin.amapKeyHint':
|
||
'Pour la recherche de lieux en Chine continentale, où Google est inaccessible et où OpenStreetMap contient très peu de données. Nécessite une clé de type « Web 服务 » (service web), pas une clé d’API JS. À obtenir sur console.amap.com.',
|
||
'admin.keyFromEnv': 'Défini via {name}',
|
||
'admin.placesProvider.title': 'Fournisseur de recherche de lieux',
|
||
'admin.placesProvider.subtitle':
|
||
"L'index propre de TREK et OpenStreetMap répondent à chaque recherche. Ceci choisit qui est interrogé en plus quand ils ne trouvent rien : Automatique préfère Google si une clé existe, puis Amap.",
|
||
'admin.placesProvider.auto': 'Automatique',
|
||
'admin.placesProvider.google': 'Google Places',
|
||
'admin.placesProvider.amap': 'Amap (高德地图)', // same-as-en
|
||
'admin.placesProvider.openstreetmap': 'OpenStreetMap',
|
||
'admin.placesProvider.missingKey':
|
||
"Le fournisseur sélectionné n'a pas de clé API configurée : la recherche de lieux est donc assurée par le seul index TREK et OpenStreetMap.",
|
||
'admin.placesProvider.saved': 'Fournisseur de recherche de lieux enregistré',
|
||
'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.",
|
||
'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.googleOptions': 'Ce à quoi sert la clé',
|
||
'admin.googleOptionsSummary': '{on} sur {total} activés',
|
||
'admin.placesPhotos.title': 'Photos de lieux',
|
||
'admin.placesPhotos.subtitle':
|
||
"Récupère les photos depuis l'API Google Places. Désactivez pour économiser le quota API. Les photos Wikimedia ne sont pas affectées.",
|
||
'admin.placesAutocomplete.title': 'Autocomplétion des lieux',
|
||
'admin.placesAutocomplete.subtitle':
|
||
"Utilise l'API Google Places pour les suggestions de recherche. Désactivez pour économiser le quota API.",
|
||
'admin.placesDetails.title': 'Détails du lieu',
|
||
'admin.placesDetails.subtitle':
|
||
"Récupère les informations détaillées du lieu (horaires, note, site web) depuis l'API Google Places. Désactivez pour économiser le quota API.",
|
||
'admin.placesEnrich.title': 'Enrichissement des lieux',
|
||
'admin.placesEnrich.subtitle':
|
||
"Affiche des images et une description lors de l'ajout d'un lieu. Wikipédia et OpenStreetMap sont toujours utilisés ; Google s'y ajoute si Photos de lieux ou Détails de lieux sont activés.",
|
||
'admin.placesGoogleOnly.title': 'Rechercher uniquement avec Google',
|
||
'admin.placesGoogleOnly.subtitle':
|
||
"Chaque recherche et chaque suggestion passent par Google Places. Désactivé, l'index de TREK et OpenStreetMap répondent d'abord, Google n'est interrogé que s'ils ne trouvent rien.",
|
||
'admin.placesGoogleOnly.missingKey':
|
||
"Nécessite une clé API Google Maps. Sans elle, la recherche passe par l'index de TREK et OpenStreetMap, quelle que soit la position de cet interrupteur.",
|
||
'admin.placesGoogleOnly.otherProvider':
|
||
'Nécessite Google comme fournisseur de lieux. Avec Amap ou OpenStreetMap sélectionné, aucune recherche ne part vers Google, quelle que soit la position de cet interrupteur.',
|
||
'admin.googleQuota.title': "Limite quotidienne d'appels à Google",
|
||
'admin.googleQuota.subtitle':
|
||
"Une fois atteinte, TREK n'appelle plus Google jusqu'au lendemain (UTC) et cherche avec OpenStreetMap. Laissez vide pour aucune limite.",
|
||
'admin.googleQuota.placeholder': 'Aucune limite',
|
||
'admin.googleQuota.usedToday': "Aujourd'hui : {used}",
|
||
'admin.googleQuota.usedOfLimit': "Aujourd'hui : {used} sur {limit}",
|
||
'admin.googleQuota.reached': "Limite atteinte ({used}), Google en pause jusqu'à demain",
|
||
'admin.googleQuota.saved': 'Limite quotidienne enregistrée',
|
||
'admin.transitProvider.title': 'Fournisseur de transports en commun',
|
||
'admin.transitProvider.subtitle': 'Quel service répond à la recherche de transports en commun.',
|
||
'admin.transitProvider.transitous': 'Transitous (gratuit)',
|
||
'admin.transitProvider.google': 'Google',
|
||
'admin.transitProvider.transitousHint':
|
||
'Flux GTFS communautaires. Gratuit et sans clé, avec la meilleure couverture en Europe.',
|
||
'admin.transitProvider.googleHint':
|
||
"Utilise la clé Google ci-dessus, pour les régions sans données Transitous. Facturé à la recherche ; tant qu'aucune clé n'est définie, Transitous est utilisé.",
|
||
'admin.transitProvider.noKeyWarning':
|
||
"Google est sélectionné, mais aucune clé Google n'est configurée ; la recherche de transports utilise toujours Transitous. Ajoutez une clé dans Clés d'API ci-dessus.",
|
||
'admin.transitProvider.personalKeyWarning':
|
||
"Seule votre propre clé Google est définie : la recherche des autres membres continue de basculer sur Transitous. Enregistrez la clé ci-dessus en tant qu'administrateur pour l'appliquer à toute l'instance.",
|
||
'admin.placeShadow.title': 'Journal des recherches de lieux',
|
||
'admin.placeShadow.subtitle':
|
||
'Enregistrer quel résultat de recherche a été retenu, afin de pouvoir évaluer plus tard un autre index de lieux sur de vraies recherches. Rien ne quitte cette instance, et un administrateur peut exporter ou supprimer le journal à tout moment.',
|
||
'admin.bagTracking.title': 'Suivi des bagages',
|
||
'admin.bagTracking.subtitle': "Activer le poids et l'attribution de bagages pour les articles",
|
||
'admin.collab.chat.title': 'Chat', // same-as-en
|
||
'admin.collab.chat.subtitle': 'Messagerie en temps réel pour la collaboration',
|
||
'admin.collab.notes.title': 'Notes', // same-as-en
|
||
'admin.collab.notes.subtitle': 'Notes et documents partagés',
|
||
'admin.collab.polls.title': 'Sondages',
|
||
'admin.collab.polls.subtitle': 'Sondages et votes de groupe',
|
||
'admin.collab.whatsnext.title': 'Et ensuite',
|
||
'admin.collab.whatsnext.subtitle': "Suggestions d'activités et prochaines étapes",
|
||
'admin.tabs.config': 'Personnalisation',
|
||
'admin.tabs.defaults': 'Valeurs par défaut',
|
||
'admin.defaultSettings.title': 'Paramètres utilisateur par défaut',
|
||
'admin.defaultSettings.description':
|
||
"Définissez des valeurs par défaut pour toute l'instance. Les utilisateurs n'ayant pas modifié un paramètre verront ces valeurs. Leurs propres modifications ont toujours la priorité.",
|
||
'admin.defaultSettings.saved': 'Valeur par défaut enregistrée',
|
||
'admin.defaultSettings.reset': 'Réinitialiser à la valeur par défaut intégrée',
|
||
'admin.defaultSettings.resetToBuiltIn': 'réinitialiser',
|
||
'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.items.one': 'article',
|
||
'admin.packingTemplates.categories': 'catégories',
|
||
'admin.packingTemplates.categories.one': 'catégorie',
|
||
'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.deleteCategoryError': 'Échec de la suppression de la catégorie',
|
||
'admin.packingTemplates.deleteItemError': 'Échec de la suppression de cet élément',
|
||
'admin.packingTemplates.saveError': 'Erreur de sauvegarde',
|
||
'admin.tabs.addons': 'Extensions',
|
||
'admin.tabs.plugins': 'Plugins', // same-as-en
|
||
'admin.tabs.storage': 'Stockage',
|
||
'admin.plugins.rescan': 'Réanalyser',
|
||
'admin.plugins.rescanned': 'Dossier des plugins réanalysé',
|
||
'admin.plugins.upload': 'Téléverser un plugin',
|
||
'admin.plugins.dropToUpload': "Déposez un .zip de plugin pour l'installer",
|
||
'admin.plugins.uploaded': "Plugin “{name}” téléversé — activez-le pour l'exécuter",
|
||
'admin.plugins.sideloaded': 'Chargé manuellement',
|
||
'admin.plugins.devLinkBadge': 'Dev-Link',
|
||
'admin.plugins.devLinkHint':
|
||
'Chargé depuis un dossier de build local et rechargé à chaud avec des données réelles — dev uniquement',
|
||
'admin.plugins.devLinkTitle': 'Lier un plugin local',
|
||
'admin.plugins.devLinkPathPlaceholder': '/absolute/path/to/your/plugin',
|
||
'admin.plugins.devLinkButton': 'Lier',
|
||
'admin.plugins.devLinkLinked': "{id} lié — activez-le pour l'exécuter",
|
||
'admin.plugins.sideloadedHint': 'Téléversé manuellement — pas depuis le registre, non signé et non vérifié',
|
||
'admin.plugins.browse': 'Parcourir les plugins',
|
||
'admin.plugins.installed': 'Installé',
|
||
'admin.plugins.install': 'Installer',
|
||
'admin.plugins.registryEmpty': 'Aucun plugin disponible dans le registre pour le moment.',
|
||
'admin.plugins.actionError': "L'action a échoué",
|
||
'admin.plugins.activate': 'Activer',
|
||
'admin.plugins.activated': 'Plugin activé',
|
||
'admin.plugins.deactivate': 'Désactiver',
|
||
'admin.plugins.deactivated': 'Plugin désactivé',
|
||
'admin.plugins.viewErrors': "Voir le journal d'erreurs",
|
||
'admin.plugins.errorLog': "Journal d'erreurs",
|
||
'admin.plugins.allowedHosts': 'Hôtes autorisés',
|
||
'admin.plugins.allowedHosts.hint':
|
||
'Ce plugin communique avec un service que vous seul pouvez nommer (un serveur auto-hébergé). Ajoutez les hôtes qu’il peut joindre — il ne joindra aucun autre.',
|
||
'admin.plugins.allowedHosts.none': 'Aucun hôte ajouté pour l’instant.',
|
||
'admin.plugins.allowedHosts.unsupported':
|
||
'Ce plugin n’utilise pas d’hôtes fournis par l’opérateur. Ses hôtes autorisés sont fixés dans son manifeste.',
|
||
'admin.plugins.allowedHosts.restartNote':
|
||
'L’enregistrement redémarre le plugin pour qu’il prenne en compte la nouvelle liste.',
|
||
'admin.plugins.allowedHosts.add': 'Ajouter un hôte autorisé',
|
||
'admin.plugins.allowedHosts.count': '{n} hôtes autorisés',
|
||
'admin.plugins.allowedHosts.count.one': '{n} hôte autorisé',
|
||
'admin.plugins.operatorEgressPill': '+ hôtes que vous ajoutez',
|
||
'admin.plugins.operatorEgressHint':
|
||
'Ce plugin communique avec un service que vous seul pouvez nommer (un serveur auto-hébergé). Après installation, ajoutez les hôtes qu’il peut joindre via ⋯ → Hôtes autorisés. Il ne joindra aucun autre.',
|
||
'admin.plugins.noErrors': 'Aucune erreur enregistrée.',
|
||
'admin.plugins.uninstalled': 'Plugin désinstallé',
|
||
'admin.plugins.uninstallTitle': 'Désinstaller le plugin ?',
|
||
'admin.plugins.uninstallBody':
|
||
'Cela arrête le plugin, supprime son code et efface toutes ses données. Cette action est irréversible.',
|
||
'admin.plugins.status.starting': 'Démarrage…',
|
||
'admin.plugins.type.widget': 'Widget', // same-as-en
|
||
'admin.plugins.type.page': 'Page', // same-as-en
|
||
'admin.plugins.type.integration': 'Intégration',
|
||
'admin.plugins.type.trip-page': 'Page de voyage',
|
||
'admin.plugins.reviewed': 'Vérifié',
|
||
'admin.plugins.unreviewed': 'Non vérifié',
|
||
'admin.plugins.updated': 'Plugin mis à jour',
|
||
'admin.plugins.updateTo': 'Mettre à jour → v{version}',
|
||
'admin.plugins.enabledToggle': 'Activer le plugin',
|
||
'plugins.notFound': 'Plugin introuvable',
|
||
'plugins.frameLoadFailed': "Ce plugin n'a pas pu être chargé.",
|
||
'admin.plugins.title': 'Plugins', // same-as-en
|
||
'admin.plugins.subtitle': 'Installez et gérez des plugins tiers sur votre instance.',
|
||
'admin.plugins.disabledTitle': 'Les plugins sont désactivés',
|
||
'admin.plugins.disabledBody':
|
||
"L'environnement d'exécution des plugins est désactivé (TREK_PLUGINS_ENABLED). Aucun plugin ne peut fonctionner tant qu'un administrateur ne l'active pas dans la configuration du serveur.",
|
||
'admin.plugins.empty': 'Aucun plugin installé pour le moment.',
|
||
'admin.plugins.loadError': 'Impossible de charger les plugins.',
|
||
'admin.plugins.scaffoldNote':
|
||
"L'installation et l'activation des plugins arriveront dans une mise à jour ultérieure. Ce panneau liste actuellement uniquement les plugins installés.",
|
||
'admin.plugins.status.active': 'Actif',
|
||
'admin.plugins.status.inactive': 'Inactif',
|
||
'admin.plugins.status.disabled': 'Désactivé',
|
||
'admin.plugins.status.error': 'Erreur',
|
||
'admin.plugins.status.incompatible': 'Incompatible', // same-as-en
|
||
'admin.plugins.details': 'Détails',
|
||
'admin.plugins.detailError': 'Impossible de charger les détails du plugin.',
|
||
'admin.plugins.permissionsTitle': 'Permissions', // same-as-en
|
||
'admin.plugins.noPermissions': 'Ce plugin ne demande aucune permission spéciale.',
|
||
'admin.plugins.egressNote': 'Peut se connecter à : {hosts}',
|
||
'admin.plugins.setupTitle': 'Configuration',
|
||
'admin.plugins.noSetup': 'Fonctionne immédiatement — rien à configurer.',
|
||
'admin.plugins.scope.instance': "Toute l'instance",
|
||
'admin.plugins.scope.user': 'Par utilisateur',
|
||
'admin.plugins.fieldRequired': 'Requis',
|
||
'admin.plugins.sourceRepo': 'Dépôt source',
|
||
'admin.plugins.reportIssue': 'Signaler un problème',
|
||
'admin.plugins.homepage': 'Site web',
|
||
'admin.plugins.requiresTrek': 'Nécessite TREK {version}+',
|
||
'admin.plugins.reviewedOn': 'Vérifié le {date}',
|
||
'admin.plugins.perm.db:own': 'Stocker ses propres données dans une base de données isolée',
|
||
'admin.plugins.perm.db:read:trips': "Lire les voyages accessibles à l'utilisateur actif",
|
||
'admin.plugins.perm.db:read:users': 'Lire les informations de profil de base (nom, avatar — jamais les identifiants)',
|
||
'admin.plugins.perm.db:read:costs': "Lire les dépenses (postes de budget) accessibles à l'utilisateur actif",
|
||
'admin.plugins.perm.db:read:packing': "Lire les listes de bagages des voyages accessibles à l'utilisateur actif",
|
||
'admin.plugins.perm.db:write:packing':
|
||
"Créer, modifier et supprimer des articles de la liste de bagages sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.weather:read': "Lire les prévisions météo en cache de l'hôte (par coordonnées)",
|
||
'admin.plugins.perm.db:read:categories': 'Lire la liste globale des catégories de lieux',
|
||
'admin.plugins.perm.db:read:tags': "Lire les étiquettes de l'utilisateur actif",
|
||
'admin.plugins.perm.db:write:tags': "Créer, modifier et supprimer les étiquettes de l'utilisateur actif",
|
||
'admin.plugins.perm.db:read:todos': "Lire les tâches des voyages accessibles à l'utilisateur actif",
|
||
'admin.plugins.perm.db:write:todos':
|
||
"Créer, modifier et supprimer des tâches sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:write:atlas':
|
||
"Marquer des pays et régions comme visités et gérer la liste d'envies de l'utilisateur actif (nécessite le module Atlas)",
|
||
'admin.plugins.perm.db:write:vacay':
|
||
"Basculer les jours de congé et les fermetures d'entreprise sur le plan actif de l'utilisateur actif (nécessite le module Vacay)",
|
||
'admin.plugins.perm.db:write:journal':
|
||
"Créer, modifier et supprimer des entrées de journal dans les journaux que l'utilisateur actif peut modifier (nécessite le module Journey)",
|
||
'admin.plugins.perm.db:write:collections':
|
||
"Créer et modifier des collections et y enregistrer des lieux, avec le rôle de collection de l'utilisateur actif (nécessite le module Collections)",
|
||
'admin.plugins.perm.db:write:files':
|
||
"Joindre des fichiers aux voyages que l'utilisateur actif peut modifier (limite de 10 Mo, extensions bloquées refusées) et gérer leurs liens",
|
||
'admin.plugins.perm.db:write:collab':
|
||
"Publier des notes, des sondages et des messages de chat sur les voyages que l'utilisateur actif peut modifier (nécessite le module Collab)",
|
||
'admin.plugins.perm.db:write:members':
|
||
"Ajouter des utilisateurs aux voyages — accorde l'accès au voyage ; protégé par le droit de gestion des membres de l'utilisateur actif",
|
||
'admin.plugins.perm.notify:send':
|
||
"Envoyer une notification (boîte de réception + e-mail/ntfy) à l'utilisateur actif ou à un voyage auquel il appartient — jamais à un destinataire arbitraire",
|
||
'admin.plugins.perm.ai:invoke':
|
||
"Utiliser le fournisseur d'IA configuré par l'administrateur (complétion de texte + extraction de documents) au nom de l'utilisateur actif — le module ne détient jamais de clé",
|
||
'admin.plugins.perm.oauth:client':
|
||
"Se connecter à un service tiers en votre nom via OAuth géré par l'hôte (l'hôte détient les jetons, le module ne les voit jamais)",
|
||
'admin.plugins.perm.db:read:files': "Lire les fichiers des voyages accessibles à l'utilisateur actif",
|
||
'admin.plugins.perm.db:write:reservations':
|
||
"Créer, modifier et supprimer des réservations sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:write:accommodations':
|
||
"Créer, modifier et supprimer des hébergements sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:read:journal':
|
||
"Lire les journaux de voyage de l'utilisateur actif (nécessite le module Journey)",
|
||
'admin.plugins.perm.db:read:atlas':
|
||
"Lire les pays et régions visités par l'utilisateur actif (nécessite le module Atlas)",
|
||
'admin.plugins.perm.db:read:vacay': "Lire le plan de vacances de l'utilisateur actif (nécessite le module Vacay)",
|
||
'admin.plugins.perm.db:read:daynotes': "Lire les notes de journée des voyages accessibles à l'utilisateur actif",
|
||
'admin.plugins.perm.db:read:collections':
|
||
"Lire les collections de lieux enregistrés de l'utilisateur actif (nécessite le module Collections)",
|
||
'admin.plugins.perm.db:write:daynotes':
|
||
"Créer, modifier et supprimer des notes de journée sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.jobs:run':
|
||
"Exécuter ses tâches d'arrière-plan selon une planification (sans contexte utilisateur — ne peut pas lire les données utilisateur)",
|
||
'admin.plugins.perm.db:write:costs':
|
||
"Créer des dépenses (postes de budget) sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:write:places':
|
||
"Ajouter, modifier et supprimer des lieux sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:write:days':
|
||
"Ajouter, modifier et supprimer des jours sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:write:itinerary':
|
||
"Attribuer et retirer des lieux aux jours des voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:write:trips':
|
||
"Modifier les détails du voyage (titre, dates, devise…) sur les voyages que l'utilisateur actif peut modifier",
|
||
'admin.plugins.perm.db:meta':
|
||
"Associer ses propres données privées aux voyages, lieux et jours auxquels l'utilisateur actif a accès",
|
||
'admin.plugins.perm.ws:broadcast:trip': 'Envoyer des mises à jour en temps réel aux membres du voyage',
|
||
'admin.plugins.perm.ws:broadcast:user': 'Envoyer des mises à jour en temps réel à des utilisateurs individuels',
|
||
'admin.plugins.perm.hook:photo-provider': 'Fournir des photos à Photos',
|
||
'admin.plugins.perm.hook:calendar-source': 'Fournir des événements au calendrier',
|
||
'admin.plugins.perm.hook:place-detail-provider': 'Ajouter des détails supplémentaires (avis, notes, liens) à un lieu',
|
||
'admin.plugins.perm.hook:search-provider':
|
||
'Répondre aux recherches de lieux depuis son propre index, à côté des résultats de TREK',
|
||
'admin.plugins.perm.hook:poi-category-provider':
|
||
"Ajouter ses propres catégories de lieux à « Explorer les lieux sur la carte » ; en choisir une envoie à l'extension la zone de la carte que vous consultez",
|
||
'admin.plugins.perm.hook:trip-warning-provider':
|
||
'Émettre des avertissements de validation sur un voyage (affichés dans le planificateur)',
|
||
'admin.plugins.perm.hook:table-contributor':
|
||
'Ajouter des colonnes et des actions aux vues du voyage (réservations, lieux, jours)',
|
||
'admin.plugins.perm.hook:map-marker-provider':
|
||
'Ajouter des marqueurs à la carte du voyage (p. ex. afficher réservations ou POIs)',
|
||
'admin.plugins.perm.hook:map-layer-provider':
|
||
'Tracer des itinéraires, des corridors et des zones sur la carte du voyage',
|
||
'admin.plugins.perm.hook:route-provider':
|
||
'Proposer des profils de routage avec lesquels le planificateur calcule les itinéraires des jours (p. ex. routage pour véhicule électrique avec arrêts de recharge)',
|
||
'admin.plugins.perm.hook:day-schedule-provider':
|
||
'Ajouter des entrées horaires au plan de la journée (arrêts de recharge, marges de sécurité)',
|
||
'admin.plugins.perm.hook:day-tint-provider':
|
||
'Colorer les jours du plan de la journée (par exemple, à quelle étape du voyage appartient un jour)',
|
||
'admin.plugins.cap.mcpTools': 'Publie des outils IA',
|
||
'admin.plugins.mcpToolsTitle': 'Outils IA publiés',
|
||
'admin.plugins.mcpToolsHint':
|
||
"Un assistant peut les exécuter au nom d'un utilisateur. Chacun agit avec les accès accordés ci-dessus.",
|
||
'admin.plugins.poiCategoriesTitle': 'Catégories de carte ajoutées',
|
||
'admin.plugins.perm.mcp:tools':
|
||
"Publier des outils qu'un assistant IA peut exécuter en votre nom (il agit avec les accès que vous accordez ici à l'extension, pas avec les siens)",
|
||
'admin.plugins.perm.geolocation:read':
|
||
"Demander votre position en temps réel tant que l'une de ses vues est ouverte (TREK la lit avec l'autorisation de localisation de ce site, pas avec une autorisation propre à l'extension)",
|
||
'admin.plugins.perm.hook:pdf-section-provider': "Ajouter des sections de texte à l'export PDF du voyage",
|
||
'admin.plugins.perm.hook:atlas-layer-provider':
|
||
"Mettre en évidence des pays sur la carte du monde Atlas (p. ex. listes d'envies ou avis aux voyageurs)",
|
||
'admin.plugins.perm.hook:journal-entry-provider':
|
||
'Ajouter des lignes supplémentaires (liens, statistiques) aux entrées du journal',
|
||
'admin.plugins.perm.hook:user-data':
|
||
"Effacer ou exporter les données qu'il stocke sur un utilisateur (RGPD : suppression de compte et demandes d'accès)",
|
||
'admin.plugins.perm.hook:trip-card-provider':
|
||
'Ajouter de petits badges (statut, compteurs) aux cartes de voyage du tableau de bord',
|
||
'admin.plugins.perm.hook:notification-channel': 'Envoyer vos notifications via un canal supplémentaire',
|
||
'admin.plugins.perm.events:subscribe':
|
||
'Réagir aux événements d’activité principaux (nom de l’événement et voyage uniquement, jamais le contenu)',
|
||
'admin.plugins.perm.http:outbound': 'Effectuer des requêtes sortantes vers ses hôtes déclarés',
|
||
'admin.plugins.perm.db:read:collab':
|
||
"Lire les notes, sondages et messages de chat des voyages accessibles à l'utilisateur actif (nécessite le module Collab)",
|
||
'admin.plugins.perm.db:read:files:content':
|
||
"Lire le contenu (octets) des fichiers des voyages accessibles à l'utilisateur actif",
|
||
'admin.plugins.perm.db:create:trips': "Créer de nouveaux voyages appartenant à l'utilisateur actif",
|
||
'admin.plugins.perm.rates:read': "Lire les taux de change en cache de l'hôte",
|
||
'admin.plugins.updateConsentTitle': 'Cette mise à jour nécessite de nouvelles permissions',
|
||
'admin.plugins.updateConsentBody':
|
||
"{name} v{version} demande des droits que vous n'avez pas encore accordés. La nouvelle version est installée mais reste désactivée jusqu'à ce que vous l'approuviez.",
|
||
'admin.plugins.updateNewPermissions': 'Nouvelles permissions demandées',
|
||
'admin.plugins.updateNewEgress': 'Nouvelles connexions sortantes',
|
||
'admin.plugins.updateApprove': 'Approuver et activer',
|
||
'admin.plugins.updateLater': "Laisser désactivé pour l'instant",
|
||
'admin.plugins.updateKeptOff':
|
||
"Mise à jour installée — laissée désactivée jusqu'à ce que vous approuviez les nouvelles permissions",
|
||
'admin.plugins.reviewedMeaning':
|
||
"« Vérifié » signifie qu'un mainteneur de TREK a analysé ce plugin à la recherche de logiciels malveillants à chaque version — non pour sa qualité ni son bon fonctionnement. Ce n'est pas une garantie qu'un plugin est inoffensif.",
|
||
'admin.plugins.security.title': 'Comment les plugins sont confinés — et les limites',
|
||
'admin.plugins.security.isolationTitle': "Chaque plugin s'exécute en isolation",
|
||
'admin.plugins.security.isolationBody':
|
||
"Un plugin s'exécute comme son propre processus verrouillé qui ne peut lire que ses propres fichiers. Il ne peut pas lire votre base de données, votre secret de connexion ou votre clé de chiffrement, ne peut pas lancer d'autres programmes et ne peut écrire de fichiers nulle part. Son interface s'exécute dans un cadre de navigateur scellé qui ne peut pas lire votre cookie de session ni toucher à la page TREK qui l'entoure.",
|
||
'admin.plugins.security.permsTitle': 'Ce que signifient les permissions',
|
||
'admin.plugins.security.permsBody':
|
||
"Les permissions affichées avant l'installation constituent une limite stricte que TREK applique pendant l'exécution du plugin — il ne peut littéralement rien faire qui ne figure pas dans la liste. Mais elles vous indiquent ce qu'un plugin peut faire, pas ce qu'il fait réellement. Un plugin autorisé à lire vos voyages et à contacter un serveur peut envoyer vos voyages à ce serveur ; lisez donc les permissions et les hôtes sortants, pas seulement la description.",
|
||
'admin.plugins.security.limitsTitle': 'Ce que nous ne pouvons pas promettre',
|
||
'admin.plugins.security.limitsBody':
|
||
"L'isolation est une frontière logicielle solide, mais pas absolue. Un plugin agit avec exactement les droits que vous approuvez ; dans les limites de ces droits, il peut donc se comporter autrement que ne le laisse penser sa description, et il peut envoyer aux hôtes qu'il a déclarés les données qu'il détient légitimement. TREK ne lit ni ne juge ce que fait réellement le code d'un plugin.",
|
||
'admin.plugins.security.worstTitle': 'Le pire scénario',
|
||
'admin.plugins.security.worstBody':
|
||
"Un plugin malveillant que vous activez peut détourner les données et connexions que vous lui avez accordées — par exemple, divulguer les voyages qu'il est autorisé à lire. Il ne peut pas voler de mots de passe, falsifier une connexion admin, exécuter des commandes sur votre serveur ni atteindre des données que vous n'avez pas accordées. Les dégâts restent limités à ce que vous avez approuvé, et désactiver le plugin l'arrête.",
|
||
'admin.plugins.security.reviewedTitle': 'Ce que signifie « Vérifié »',
|
||
'admin.plugins.security.reviewedBody':
|
||
"Un plugin vérifié a été analysé manuellement à la recherche de logiciels malveillants par un mainteneur de TREK à chaque version — contrôlé pour du code hostile, non pour son bon fonctionnement. Ce n'est pas une promesse que le plugin est inoffensif.",
|
||
'admin.plugins.security.signedTitle': 'Ce que signifie « Signé »',
|
||
'admin.plugins.security.signedBody':
|
||
"La somme de contrôle que TREK vérifie à chaque installation prouve que les fichiers sont exactement ceux dont le registre se porte garant. Une signature prouve autre chose : qu'ils proviennent de l'auteur, signés avec une clé que lui seul détient. Un plugin signé possède les deux. Un plugin non signé n'est pas dangereux — il porte simplement une garantie de moins, et la plupart des plugins du registre ne sont pas signés aujourd'hui.",
|
||
'admin.plugins.signed': 'Signé',
|
||
'admin.plugins.signedHint': "Vérifié avec la clé de signature de l'auteur au moment de l'installation",
|
||
'admin.plugins.unsigned': 'Non signé',
|
||
'admin.plugins.unsignedHint':
|
||
"Les fichiers correspondent à ce dont le registre se porte garant, mais rien ne les relie à l'auteur. Une garantie de moins — pas un danger.",
|
||
'admin.plugins.updateBlocked': 'Mise à jour bloquée — {reason}',
|
||
'admin.plugins.reviewBlock': 'Examiner',
|
||
'admin.plugins.retrusted': 'Nouvelle clé de signature approuvée — le plugin est mis à jour',
|
||
'admin.plugins.sig.title': "La signature de {name} n'a pas pu être vérifiée",
|
||
'admin.plugins.sig.keyChangedBody':
|
||
"La clé de signature de l'auteur n'est pas celle avec laquelle ce plugin a été installé. Les auteurs changent bel et bien de clé — mais un attaquant ayant pris le contrôle du plugin ressemblerait exactement à ceci.",
|
||
'admin.plugins.sig.invalidBody':
|
||
"Les fichiers ne correspondent pas à la signature de l'auteur. Ce n'est pas ce que l'auteur a signé — soit ils ont été corrompus, soit ils ont été altérés. Impossible de passer outre.",
|
||
'admin.plugins.sig.missingBody':
|
||
"Ce plugin était signé lorsque vous l'avez installé, mais la nouvelle version ne fournit aucune signature. TREK n'acceptera pas ce recul en silence. Impossible de passer outre.",
|
||
'admin.plugins.sig.incompleteBody':
|
||
"L'entrée du registre est à moitié signée : elle déclare une clé d'auteur mais la version ne porte aucune signature (ou l'inverse). C'est une erreur du côté du plugin. Impossible de passer outre.",
|
||
'admin.plugins.sig.pinnedKey': "Clé utilisée lors de l'installation",
|
||
'admin.plugins.sig.newKey': "Clé proposée aujourd'hui",
|
||
'admin.plugins.sig.confirmOutOfBand':
|
||
"TREK ne peut pas distinguer un changement de clé légitime d'une prise de contrôle — vus d'ici, les deux sont identiques. Confirmez la nouvelle clé auprès de l'auteur via un canal auquel vous faites déjà confiance avant de l'accepter. Une fois que c'est fait, le plugin est mis à jour et la nouvelle clé est mémorisée.",
|
||
'admin.plugins.sig.retrustConfirm': 'Faire confiance à la nouvelle clé et mettre à jour',
|
||
'admin.plugins.sig.cancel': 'Ne pas lui faire confiance',
|
||
'admin.plugins.sig.consentUnsigned':
|
||
"Rien ne relie cette version à son auteur — les fichiers correspondent au registre, mais ne portent aucune signature d'auteur.",
|
||
'admin.plugins.security.trustTitle': 'En résumé',
|
||
'admin.plugins.security.trustBody':
|
||
"Installer un plugin revient à installer n'importe quelle application tierce : n'ajoutez que du code provenant d'auteurs de confiance et, en cas de doute, inspectez-le vous-même au préalable. TREK décline toute responsabilité concernant les plugins tiers.",
|
||
'admin.plugins.runtimeOn': 'Exécution activée',
|
||
'admin.plugins.tabDiscover': 'Découvrir',
|
||
'admin.plugins.searchPlaceholder': 'Rechercher des plugins…',
|
||
'admin.plugins.filterType': 'Type', // same-as-en
|
||
'admin.plugins.filterStatus': 'Statut',
|
||
'admin.plugins.sortBy': 'Trier',
|
||
'admin.plugins.allTypes': 'Tous les types',
|
||
'admin.plugins.allStatuses': 'Tous',
|
||
'admin.plugins.stateOff': 'Désactivé',
|
||
'admin.plugins.filterUpdate': 'Mise à jour disponible',
|
||
'admin.plugins.sortName': 'Nom',
|
||
'admin.plugins.sortRecent': 'Récemment mis à jour',
|
||
'admin.plugins.sortUpdates': 'Mises à jour en premier',
|
||
'admin.plugins.sortDownloads': 'Plus téléchargés',
|
||
'admin.plugins.updatesAvailable': '{count} mises à jour disponibles pour vos plugins.',
|
||
'admin.plugins.updatesAvailable.one': '{count} mise à jour disponible pour vos plugins.',
|
||
'admin.plugins.newerNeedsTrek': 'v{version} disponible — nécessite TREK {range}',
|
||
'admin.plugins.versionsTitle': 'Versions', // same-as-en
|
||
'admin.plugins.versionPickerTitle': 'Changer de version — {name}',
|
||
'admin.plugins.versionSwitch': 'Passer à {version}',
|
||
'admin.plugins.versionNeedsTrek': 'nécessite TREK {range}',
|
||
'admin.plugins.changeVersion': 'Changer de version…',
|
||
'admin.plugins.noVersions': 'Aucune version publiée trouvée dans le registre.',
|
||
'admin.plugins.downgradeTitle': 'Revenir à une version antérieure de ce plugin ?',
|
||
'admin.plugins.downgradeBody':
|
||
'Passage de v{from} à v{to} : les données écrites par la version plus récente restent en place, et la version plus ancienne pourrait ne pas les comprendre.',
|
||
'admin.plugins.downgradeConfirm': 'Rétrograder',
|
||
'admin.plugins.updatesHeld': 'Mises à jour en pause à la v{version}',
|
||
'admin.plugins.resumeUpdates': 'Reprendre les mises à jour',
|
||
'admin.plugins.updatesResumed': 'Mises à jour reprises',
|
||
'admin.plugins.updateAll': 'Tout mettre à jour',
|
||
'admin.plugins.noMatchInstalled': 'Aucun plugin installé ne correspond à votre recherche.',
|
||
'admin.plugins.noMatchRegistry': 'Aucun plugin du registre ne correspond à votre recherche.',
|
||
'admin.plugins.restart': 'Redémarrer',
|
||
'admin.plugins.restarted': 'Plugin redémarré',
|
||
'admin.plugins.instanceSettings': 'Paramètres de l’instance',
|
||
'admin.plugins.settingsSaved': 'Paramètres enregistrés',
|
||
'admin.plugins.settingsSavedRestarted': 'Paramètres enregistrés — plugin redémarré',
|
||
'admin.plugins.actions': 'Actions', // same-as-en
|
||
'admin.plugins.actions.confirm': 'Exécuter cette action ?',
|
||
'admin.plugins.actions.inactive': 'Activez le plugin pour exécuter ses actions',
|
||
'admin.plugins.requiredMissing': '« {field} » est obligatoire',
|
||
'admin.plugins.cap.readsTrips': 'Lit vos voyages',
|
||
'admin.plugins.cap.readsUsers': 'Lit les profils de base',
|
||
'admin.plugins.cap.readsCosts': 'Lit vos dépenses',
|
||
'admin.plugins.cap.readsPacking': 'Lit les listes de bagages',
|
||
'admin.plugins.cap.readsFiles': 'Lit les fichiers du voyage',
|
||
'admin.plugins.cap.writesCosts': 'Ajoute des dépenses',
|
||
'admin.plugins.cap.writesPlaces': 'Modifie les lieux',
|
||
'admin.plugins.cap.writesDays': 'Modifie les jours',
|
||
'admin.plugins.cap.writesItinerary': "Modifie l'itinéraire",
|
||
'admin.plugins.cap.writesTrips': 'Modifie les voyages',
|
||
'admin.plugins.cap.metadata': 'Ajoute des métadonnées',
|
||
'admin.plugins.cap.widget': 'Widget de tableau de bord',
|
||
'admin.plugins.cap.heroWidget': "Widget carte d'embarquement",
|
||
'admin.plugins.cap.placeSlot': 'Détail du lieu',
|
||
'admin.plugins.cap.daySlot': 'Détail du jour',
|
||
'admin.plugins.cap.reservationSlot': 'Détail de la réservation',
|
||
'admin.plugins.cap.replacesTabs': 'Remplace des onglets du planificateur',
|
||
'admin.plugins.cap.realtime': 'Mises à jour en temps réel',
|
||
'admin.plugins.cap.notificationChannel': 'Canal de notification',
|
||
'admin.plugins.cap.photos': 'Fournit des photos',
|
||
'admin.plugins.cap.calendar': 'Fournit des événements de calendrier',
|
||
'admin.plugins.cap.placeDetails': 'Enrichit les lieux',
|
||
'admin.plugins.cap.search': 'Répond aux recherches',
|
||
'admin.plugins.cap.poiCategories': 'Ajoute des catégories à la carte',
|
||
'admin.plugins.cap.warnings': 'Signale les problèmes',
|
||
'admin.plugins.cap.mapLayers': 'Dessine sur la carte',
|
||
'admin.plugins.cap.routing': 'Propose des itinéraires',
|
||
'admin.plugins.cap.daySchedule': 'Ajoute des horaires',
|
||
'admin.plugins.cap.dayTint': 'Colore les jours',
|
||
'admin.plugins.cap.geolocation': 'Lit votre position',
|
||
'admin.plugins.cap.events': 'Réagit à l’activité',
|
||
'admin.plugins.cap.requiresAddon': 'Nécessite {addon}',
|
||
'admin.plugins.cap.dependsOn': 'Requiert {id} {version}',
|
||
'admin.plugins.dep.addonDisabledToast': 'Activez d’abord les modules requis : {addons}',
|
||
'admin.plugins.dep.addonDisabledToast.one': 'Activez d’abord le module requis : {addons}',
|
||
'admin.plugins.dep.autoEnabled': 'Plugins requis activés au préalable : {plugins}',
|
||
'admin.plugins.dep.autoEnabled.one': 'Plugin requis activé au préalable : {plugins}',
|
||
'admin.plugins.dep.downloaded': '{id} téléchargé',
|
||
'admin.plugins.dep.resolveTitle': 'Dépendances manquantes',
|
||
'admin.plugins.dep.resolveBody': '« {name} » nécessite l’installation de ces plugins avant de pouvoir être activé.',
|
||
'admin.plugins.dep.requires': 'Nécessite {version}',
|
||
'admin.plugins.dep.mismatch': 'Nécessite {wanted} — {installed} est installé',
|
||
'admin.plugins.dep.download': 'Télécharger',
|
||
'admin.plugins.dep.update': 'Mettre à jour',
|
||
'admin.plugins.dep.resolveHint': 'Télécharge la dernière version compatible, y compris ses propres dépendances.',
|
||
'admin.plugins.dep.trekIncompatible': 'Nécessite TREK {range} — ce serveur exécute {host}',
|
||
'admin.plugins.dep.trekUnknown': 'N’indique pas quelles versions de TREK sont prises en charge',
|
||
'admin.plugins.installCompatible': 'Installer {version}',
|
||
'admin.plugins.installAnyway': 'Installer quand même',
|
||
'admin.plugins.rangeBypass.pill': 'Contrôles de version désactivés',
|
||
'admin.plugins.rangeBypass.pillHint':
|
||
'TREK_PLUGINS_IGNORE_TREK_RANGE est défini — les plugins peuvent s’installer et s’exécuter en dehors des versions de TREK déclarées par leurs auteurs',
|
||
'admin.plugins.rangeBypass.title': 'Hors des versions de TREK prises en charge',
|
||
'admin.plugins.rangeBypass.noticeTitle': 'Installé hors des versions de TREK prises en charge',
|
||
'admin.plugins.rangeBypass.body':
|
||
'« {name} » déclare prendre en charge TREK {range}, et ce serveur exécute {host}. TREK le laisse passer uniquement parce que TREK_PLUGINS_IGNORE_TREK_RANGE est défini. Son auteur n’a pas mis à jour la plage de versions du plugin pour ce TREK : rien ne garantit qu’il fonctionne — et dans de rares cas, un plugin incompatible peut corrompre les données de TREK. Ne continuez que si vous acceptez ce risque.',
|
||
'admin.plugins.rangeBypass.bodyUnknown':
|
||
'« {name} » n’indique pas quelles versions de TREK il prend en charge ; ce serveur exécute {host}. TREK le laisse passer uniquement parce que TREK_PLUGINS_IGNORE_TREK_RANGE est défini. Rien n’indique que son auteur l’a testé sur ce TREK : rien ne garantit qu’il fonctionne — et dans de rares cas, un plugin incompatible peut corrompre les données de TREK. Ne continuez que si vous acceptez ce risque.',
|
||
'admin.plugins.dep.trekBypassed': 'Hors de sa plage TREK ({range}) — contrôles de version désactivés',
|
||
'admin.plugins.dep.trekBypassedUnknown': 'Ne déclare aucune plage TREK — contrôles de version désactivés',
|
||
'admin.plugins.rangeBypass.titleAdmin': 'Non testé sur ce TREK',
|
||
'admin.plugins.rangeBypass.bodyAdmin':
|
||
'Selon son auteur, « {name} » prend en charge TREK {range}, et ce serveur exécute {host}. L’auteur ne l’a pas encore validé pour ce TREK : il peut ne pas fonctionner et, dans de rares cas, un plugin inadapté peut endommager les données de TREK. Vous pouvez quand même l’utiliser : votre choix ne vaut que pour ce plugin dans cette version, et TREK vous redemandera après une mise à jour.',
|
||
'admin.plugins.rangeBypass.bodyAdminUnknown':
|
||
'« {name} » n’indique pas les versions de TREK qu’il prend en charge, et ce serveur exécute {host}. Rien n’indique qu’il a été testé sur ce TREK : il peut ne pas fonctionner et, dans de rares cas, un plugin inadapté peut endommager les données de TREK. Vous pouvez quand même l’utiliser : votre choix ne vaut que pour ce plugin dans cette version, et TREK vous redemandera après une mise à jour.',
|
||
'admin.plugins.dep.trekAccepted': 'Conçu pour TREK {range}, utilisé à vos risques',
|
||
'admin.plugins.dep.trekAcceptedUnknown': 'Aucune version de TREK indiquée, utilisé à vos risques',
|
||
'admin.plugins.activateAnyway': 'Activer quand même',
|
||
'admin.plugins.untestedChip': 'Pas encore validé pour TREK {host}',
|
||
'admin.plugins.filters': 'Filtrer',
|
||
'admin.plugins.security.short': 'Comment les plugins sont sécurisés',
|
||
'admin.plugins.accessTitle': 'Ce à quoi il peut accéder',
|
||
'admin.plugins.connectsTitle': 'Se connecte à',
|
||
'admin.plugins.detailsTitle': 'Détails',
|
||
'admin.plugins.noAccess': 'Ne nécessite aucun accès particulier.',
|
||
'admin.plugins.metaVersion': 'Version', // same-as-en
|
||
'admin.plugins.metaSize': 'Taille',
|
||
'admin.plugins.metaRequires': 'Nécessite',
|
||
'admin.plugins.metaReviewed': 'Vérifié le',
|
||
'admin.plugins.downloads': 'Téléchargements',
|
||
'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)', // same-as-en
|
||
'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': 'Listes',
|
||
'admin.addons.catalog.packing.description': 'Listes de bagages et tâches à faire pour vos voyages',
|
||
'admin.addons.catalog.budget.name': 'Coûts',
|
||
'admin.addons.catalog.budget.description': 'Suivez les dépenses du voyage et répartissez-les entre les voyageurs',
|
||
'admin.addons.catalog.documents.name': 'Documents', // same-as-en
|
||
'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, sondages, chat et suggestions pour planifier à plusieurs',
|
||
'admin.addons.catalog.roadtrip.name': 'Road trip',
|
||
'admin.addons.catalog.roadtrip.description':
|
||
'Planifiez des trajets avec étapes : temps de conduite et heures d’arrivée se recalculent seuls',
|
||
'admin.addons.catalog.tours.name': 'Sorties',
|
||
'admin.addons.catalog.tours.description': 'Randonnées, balades à vélo et autres sorties qui suivent un itinéraire',
|
||
'admin.addons.subtitleBefore': 'Activez ou désactivez des fonctionnalités pour personnaliser votre expérience ',
|
||
'admin.addons.subtitleAfter': '.',
|
||
'admin.addons.catalog.naver_list_import.name': 'Import de listes Naver',
|
||
'admin.addons.catalog.naver_list_import.description': 'Importez des lieux depuis une liste Naver Maps partagée',
|
||
'admin.addons.catalog.airtrail.name': 'AirTrail',
|
||
'admin.addons.catalog.airtrail.description': 'Synchronisez les vols depuis votre instance AirTrail',
|
||
'admin.addons.catalog.dawarich.name': 'Dawarich',
|
||
'admin.addons.catalog.dawarich.description':
|
||
'Lisez les séjours et les trajets enregistrés depuis une instance Dawarich que chaque utilisateur connecte lui-même',
|
||
'admin.addons.catalog.llm_parsing.name': 'Analyse par IA',
|
||
'admin.addons.catalog.llm_parsing.description':
|
||
'Lit les réservations que l’analyseur intégré ne comprend pas, via un modèle d’IA de votre choix',
|
||
'admin.addons.catalog.ai_assistant.name': 'Assistant IA',
|
||
'admin.addons.catalog.ai_assistant.description':
|
||
'Un chat dans chaque voyage qui répond aux questions et propose des modifications que vous confirmez',
|
||
'admin.addons.llm.vision.auto': 'Automatique',
|
||
'admin.addons.llm.vision.on': 'Oui',
|
||
'admin.addons.llm.vision.off': 'Non',
|
||
'admin.addons.llm.vision.hintLocal': 'En automatique, TREK demande au serveur Ollama si ce modèle lit les images.',
|
||
'admin.addons.llm.vision.hintCloud':
|
||
'En automatique, un modèle cloud est considéré comme ne lisant pas les images. Choisissez Oui si ce modèle les lit.',
|
||
'admin.addons.enabled': 'Activé',
|
||
'admin.addons.disabled': 'Désactivé',
|
||
'admin.addons.type.trip': 'Voyage',
|
||
'admin.addons.type.global': 'Global', // same-as-en
|
||
'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.group.count': '{enabled} sur {total} activés',
|
||
'admin.addons.search': 'Rechercher des modules',
|
||
'admin.addons.filter': 'Afficher',
|
||
'admin.addons.filter.all': 'Tous',
|
||
'admin.addons.filter.on': 'Activés',
|
||
'admin.addons.filter.off': 'Désactivés',
|
||
'admin.addons.noMatch': 'Aucun module ne correspond à la recherche ou au filtre.',
|
||
'admin.addons.subOptions': '{count} options', // same-as-en
|
||
'admin.addons.subOptions.one': '{count} option', // same-as-en
|
||
'admin.addons.subOptionsOn': '{count} activées',
|
||
'admin.addons.subOptionsOn.one': '{count} activée',
|
||
'admin.toursWanderer.title': 'wanderer',
|
||
'admin.toursWanderer.subtitle':
|
||
'Les utilisateurs peuvent connecter leur propre instance wanderer et importer ses sentiers comme sorties',
|
||
'admin.toursHikingMap.title': 'Carte de randonnée (OpenHikingMap)',
|
||
'admin.toursHikingMap.subtitle':
|
||
"Propose OpenHikingMap comme fond de carte dans le planificateur d'itinéraires. Gratuit pour les installations non commerciales jusqu'à 500 000 tuiles par mois ; une installation commerciale ou plus importante nécessite d'abord un accord avec openmaps.fr",
|
||
'admin.toursCycleMap.title': 'Carte vélo (CyclOSM)',
|
||
'admin.toursCycleMap.subtitle':
|
||
"Propose CyclOSM comme fond de carte pour les sorties vélo dans le planificateur. OpenStreetMap France le sert pour un usage modéré ; une installation à fort trafic ou commerciale le désactive ou conclut d'abord un accord avec l'opérateur",
|
||
'admin.toursSkiRouting.title': 'Routeur de pistes',
|
||
'admin.toursSkiRouting.subtitle':
|
||
'Planifie les sorties à ski le long des pistes, remontées et itinéraires avec les données de pistes du serveur Places. Désactivé, les tronçons d’une sortie à ski sont tracés en ligne droite',
|
||
'admin.addons.noAddons': 'Aucune extension disponible',
|
||
'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': 'Audit', // same-as-en
|
||
'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.showing.one': '{count} chargée, {total} au total',
|
||
'admin.audit.col.time': 'Heure',
|
||
'admin.audit.col.user': 'Utilisateur',
|
||
'admin.audit.col.action': 'Action', // same-as-en
|
||
'admin.audit.col.resource': 'Ressource',
|
||
'admin.audit.col.ip': 'IP',
|
||
'admin.audit.col.details': 'Détails',
|
||
'admin.tabs.mcpTokens': 'Accès MCP',
|
||
'admin.mcpTokens.title': 'Accès MCP',
|
||
'admin.mcpTokens.subtitle': 'Gérer les sessions OAuth et les tokens API de tous les utilisateurs',
|
||
'admin.mcpTokens.sectionTitle': 'Tokens API',
|
||
'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',
|
||
'admin.oauthSessions.sectionTitle': 'Sessions OAuth',
|
||
'admin.oauthSessions.clientName': 'Client', // same-as-en
|
||
'admin.oauthSessions.owner': 'Propriétaire',
|
||
'admin.oauthSessions.scopes': 'Portées',
|
||
'admin.oauthSessions.created': 'Créé',
|
||
'admin.oauthSessions.empty': 'Aucune session OAuth active',
|
||
'admin.oauthSessions.revokeTitle': 'Révoquer la session',
|
||
'admin.oauthSessions.revokeMessage': "Cette session OAuth sera révoquée immédiatement. Le client perdra l'accès MCP.",
|
||
'admin.oauthSessions.revokeSuccess': 'Session révoquée',
|
||
'admin.oauthSessions.revokeError': 'Impossible de révoquer la session',
|
||
'admin.oauthSessions.loadError': 'Impossible de charger les sessions OAuth',
|
||
'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.nonDockerText':
|
||
"Cette instance TREK ne fonctionne pas dans Docker. Pour mettre à jour vers {version}, relancez la méthode d'installation ou de mise à jour que vous avez utilisée — par exemple, sur Proxmox Community Scripts, lancez la mise à jour depuis la console LXC :",
|
||
'admin.update.wikiLink': 'Ouvrir le guide de mise à jour',
|
||
'admin.update.reloadHint': 'Veuillez recharger la page dans quelques secondes.',
|
||
'admin.tabs.permissions': 'Permissions', // same-as-en
|
||
'admin.notifications.emailPanel.title': 'Email (SMTP)', // same-as-en
|
||
'admin.notifications.webhookPanel.title': 'Webhook',
|
||
'admin.notifications.webPushPanel.title': 'Web Push',
|
||
'admin.notifications.webPushPanel.hint':
|
||
"Permet aux utilisateurs de recevoir des notifications sur leurs téléphones et ordinateurs via le navigateur, même quand TREK est fermé. Nécessite HTTPS ; sur iPhone et iPad, TREK doit être ajouté à l'écran d'accueil.",
|
||
'admin.notifications.inappPanel.title': 'In-App',
|
||
'admin.notifications.inappPanel.hint':
|
||
'Les notifications in-app sont toujours actives et ne peuvent pas être désactivées globalement.',
|
||
'admin.notifications.adminWebhookPanel.title': 'Webhook admin',
|
||
'admin.notifications.adminWebhookPanel.hint':
|
||
"Ce webhook est utilisé exclusivement pour les notifications admin (ex. alertes de version). Il est séparé des webhooks utilisateur et s'active automatiquement si une URL est configurée.",
|
||
'admin.notifications.adminWebhookPanel.saved': 'URL du webhook admin enregistrée',
|
||
'admin.notifications.adminWebhookPanel.testSuccess': 'Webhook de test envoyé avec succès',
|
||
'admin.notifications.adminWebhookPanel.testFailed': 'Échec du webhook de test',
|
||
'admin.notifications.adminWebhookPanel.alwaysOnHint':
|
||
"Le webhook admin s'active automatiquement si une URL est configurée",
|
||
'admin.notifications.ntfy': 'Ntfy',
|
||
'admin.ntfy.hint':
|
||
'Permet aux utilisateurs de configurer leurs propres sujets ntfy pour les notifications push. Définissez le serveur par défaut ci-dessous pour pré-remplir les paramètres utilisateur.',
|
||
'admin.notifications.testNtfy': 'Envoyer un Ntfy de test',
|
||
'admin.notifications.testNtfySuccess': 'Ntfy de test envoyé avec succès',
|
||
'admin.notifications.testNtfyFailed': "Échec de l'envoi du Ntfy de test",
|
||
'admin.notifications.adminNtfyPanel.title': 'Ntfy admin',
|
||
'admin.notifications.adminNtfyPanel.hint':
|
||
"Ce sujet Ntfy est utilisé exclusivement pour les notifications admin (ex. alertes de version). Il est séparé des sujets par utilisateur et s'active toujours lorsqu'il est configuré.",
|
||
'admin.notifications.adminNtfyPanel.serverLabel': 'URL du serveur Ntfy',
|
||
'admin.notifications.adminNtfyPanel.serverHint':
|
||
'Utilisé également comme serveur par défaut pour les notifications ntfy des utilisateurs. Laisser vide pour utiliser ntfy.sh. Les utilisateurs peuvent le modifier dans leurs propres paramètres.',
|
||
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
|
||
'admin.notifications.adminNtfyPanel.topicLabel': 'Sujet admin',
|
||
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts', // same-as-en
|
||
'admin.notifications.adminNtfyPanel.tokenLabel': "Jeton d'accès (optionnel)",
|
||
'admin.notifications.adminNtfyPanel.tokenCleared': "Jeton d'accès admin effacé",
|
||
'admin.notifications.adminNtfyPanel.saved': 'Paramètres Ntfy admin enregistrés',
|
||
'admin.notifications.adminNtfyPanel.test': 'Envoyer un Ntfy de test',
|
||
'admin.notifications.adminNtfyPanel.testSuccess': 'Ntfy de test envoyé avec succès',
|
||
'admin.notifications.adminNtfyPanel.testFailed': "Échec de l'envoi du Ntfy de test",
|
||
'admin.notifications.adminNtfyPanel.alwaysOnHint': "Le Ntfy admin s'active toujours lorsqu'un sujet est configuré",
|
||
'admin.notifications.adminNotificationsHint':
|
||
"Configurez quels canaux envoient les notifications admin (ex. alertes de version). Le webhook s'active automatiquement si une URL webhook admin est définie.",
|
||
'admin.notificationDefaults.title': 'Valeurs par défaut des utilisateurs',
|
||
'admin.notificationDefaults.hint':
|
||
"L'état de départ des notifications de chaque utilisateur. « Désactivé » peut encore être activé par l'utilisateur ; « Bloqué » le désactive pour tous et apparaît verrouillé dans leurs réglages. S'applique à ceux qui n'ont pas modifié la case.",
|
||
'admin.notificationDefaults.on': 'Activé',
|
||
'admin.notificationDefaults.off': 'Désactivé',
|
||
'admin.notificationDefaults.blocked': 'Bloqué',
|
||
'admin.notificationDefaults.cycle': 'Cliquer pour : {next}',
|
||
'admin.notifications.tripReminders.title': 'Rappels de voyage',
|
||
'admin.notifications.tripReminders.hint':
|
||
"Envoie une notification de rappel avant le début d'un voyage (nécessite des jours de rappel définis sur le voyage).",
|
||
'admin.notifications.tripReminders.enabled': 'Rappels de voyage activés',
|
||
'admin.notifications.tripReminders.disabled': 'Rappels de voyage désactivés',
|
||
'admin.tabs.notifications': 'Notifications', // same-as-en
|
||
'admin.addons.catalog.journey.name': 'Journal de voyage',
|
||
'admin.addons.catalog.journey.description': 'Suivi de voyages et journal avec check-ins, photos et récits quotidiens',
|
||
'admin.addons.catalog.collections.name': 'Collections', // same-as-en
|
||
'admin.addons.catalog.collections.description':
|
||
'Rassemblez des lieux de tous vos voyages dans des listes nommées et réutilisez-les',
|
||
'admin.passkey.title': 'Connexion par passkey',
|
||
'admin.passkey.cardHint':
|
||
'Permettez aux utilisateurs de se connecter avec des passkeys (WebAuthn). Désactivé par défaut.',
|
||
'admin.passkey.login': 'Activer la connexion par passkey',
|
||
'admin.passkey.loginHint':
|
||
"Affiche une option « Se connecter avec une passkey » et permet aux utilisateurs d'enregistrer des passkeys dans leurs paramètres.",
|
||
'admin.passkey.notConfigured':
|
||
'Aucun domaine WebAuthn ne peut encore être résolu pour ce déploiement. Définissez APP_URL ou le Relying Party ID ci-dessous — les passkeys restent masquées jusque-là.',
|
||
'admin.passkey.rpId': 'Relying Party ID (domaine)',
|
||
'admin.passkey.rpIdHint':
|
||
"Le domaine nu auquel les passkeys sont liées, ex. trek.example.org. Laissez vide pour le déduire d'APP_URL. Le modifier ultérieurement invalide les passkeys existantes.",
|
||
'admin.passkey.origins': 'Origines autorisées',
|
||
'admin.passkey.originsHint':
|
||
'Origines complètes séparées par des virgules, ex. https://trek.example.org. Laissez vide pour utiliser APP_URL.',
|
||
'admin.passkey.reset': 'Réinitialiser les passkeys',
|
||
'admin.passkey.resetHint':
|
||
"Supprime toutes les passkeys de cet utilisateur (ex. en cas d'appareil perdu). Il pourra toujours se connecter avec son mot de passe.",
|
||
'admin.passkey.resetConfirm': 'Supprimer toutes les passkeys de {name} ?',
|
||
'admin.passkey.resetDone': '{count} passkeys supprimées',
|
||
'admin.passkey.resetDone.one': '{count} passkey supprimée',
|
||
'admin.defaultSettings.mapProvider': 'Moteur cartographique',
|
||
'admin.defaultSettings.mapProviderHint':
|
||
'La carte par défaut pour tous les utilisateurs de cette instance. Chaque utilisateur peut toujours la remplacer dans ses propres paramètres.',
|
||
'admin.defaultSettings.providerLeaflet': 'Standard (gratuit)',
|
||
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
|
||
'admin.defaultSettings.providerMapLibre': 'MapLibre (OpenFreeMap)',
|
||
'admin.defaultSettings.mapboxToken': 'Jeton Mapbox partagé',
|
||
'admin.defaultSettings.mapboxTokenHint':
|
||
"Utilisé pour chaque utilisateur n'ayant pas saisi son propre jeton — ainsi toute l'instance bénéficie de Mapbox sans partager la clé individuellement. Stocké de façon chiffrée.",
|
||
'admin.defaultSettings.mapboxStyle': 'Style de carte',
|
||
'admin.defaultSettings.mapboxStylePlaceholder': 'Choisissez un style…',
|
||
'admin.defaultSettings.mapbox3d': 'Bâtiments & terrain en 3D',
|
||
'admin.defaultSettings.mapboxQuality': 'Mode haute qualité',
|
||
'admin.defaultSettings.cartoKey': 'Clé CARTO partagée',
|
||
'admin.defaultSettings.cartoKeyHint':
|
||
"Utilisée pour chaque utilisateur n'ayant pas saisi sa propre clé, ainsi toute l'instance reçoit les tuiles CARTO sans filigrane. Stockée de façon chiffrée.",
|
||
'admin.group.users': 'Utilisateurs',
|
||
'admin.group.config': 'Configuration', // same-as-en
|
||
'admin.group.integration': 'Intégrations',
|
||
'admin.group.maintenance': 'Maintenance', // same-as-en
|
||
'admin.invite.tripLabel': 'Ajouter à un voyage (facultatif)',
|
||
'admin.invite.tripNone': 'Aucun voyage',
|
||
'admin.invite.tripHint':
|
||
"Le nouvel utilisateur est automatiquement ajouté à ce voyage lorsqu'il s'inscrit via le lien.",
|
||
'admin.invite.boundTo': 'ajoute à {trip}',
|
||
'admin.placesUsageTitle': 'À quoi sert la clé',
|
||
'admin.mapsKeyHintShort': 'Ajoute photos, avis et horaires. Chaque recherche passe alors par Google.',
|
||
'admin.amapKeyHintShort':
|
||
'Pour la recherche de lieux en Chine continentale. Nécessite une clé de service web, pas une clé API JS.',
|
||
'admin.collab.links.subtitle': 'Liens partagés et favoris',
|
||
'admin.paddleRegions.title': 'Données des plans d’eau pour la pagaie',
|
||
'admin.paddleRegions.hint':
|
||
'Seuils, écluses et règles de navigation issus d’OpenStreetMap, lus par région puis de nouveau chaque mois.',
|
||
'admin.paddleRegions.search': 'Ajouter une région',
|
||
'admin.paddleRegions.searchPlaceholder': 'Rechercher dans Geofabrik, par exemple Bretagne',
|
||
'admin.paddleRegions.noHits': 'Aucune région de ce nom',
|
||
'admin.paddleRegions.added': 'Ajoutée',
|
||
'admin.paddleRegions.empty':
|
||
'Aucune région pour l’instant. Les sorties en pagaie indiquent alors qu’aucune donnée d’obstacles n’est connue.',
|
||
'admin.paddleRegions.status.queued': 'En attente',
|
||
'admin.paddleRegions.status.importing': 'Lecture',
|
||
'admin.paddleRegions.status.ready': 'Prête',
|
||
'admin.paddleRegions.status.failed': 'Échec',
|
||
'admin.paddleRegions.phase.download': 'Téléchargement',
|
||
'admin.paddleRegions.phase.read': 'Lecture',
|
||
'admin.paddleRegions.objects': '{count} objets',
|
||
'admin.paddleRegions.objects.one': '{count} objet',
|
||
'admin.paddleRegions.asOf': 'État au {date}',
|
||
'admin.paddleRegions.keptData': 'Les données lues précédemment restent utilisées.',
|
||
'admin.paddleRegions.refresh': 'Relire',
|
||
'admin.paddleRegions.remove': 'Supprimer la région',
|
||
'admin.paddleRegions.removeMessage':
|
||
'{name} et ses données d’obstacles seront supprimées. Les sorties en pagaie dans cette zone n’afficheront alors plus de données.',
|
||
'admin.paddleRegions.retry': 'Réessayer',
|
||
'admin.paddleRegions.offline': 'Les régions ne peuvent être gérées qu’avec une connexion.',
|
||
'admin.paddleRegions.catalogUnavailable': 'Geofabrik est injoignable pour le moment. Réessayez plus tard.',
|
||
'admin.paddleRegions.attribution':
|
||
'Données © les contributeurs d’OpenStreetMap (ODbL), extraits régionaux de Geofabrik. Relues le 3 de chaque mois.',
|
||
'admin.paddleRegions.toast.added': 'Région ajoutée. TREK la lit en arrière-plan.',
|
||
'admin.paddleRegions.toast.removed': 'Région supprimée',
|
||
'admin.paddleRegions.phase.build': 'Construction du réseau d’eau',
|
||
'admin.paddleRegions.network.km': '{km} km de cours d’eau',
|
||
'admin.paddleRegions.network.lakes': '{count} lacs',
|
||
'admin.paddleRegions.network.lakes.one': '{count} lac',
|
||
'admin.paddleRegions.network.portages': '{count} portages cartographiés',
|
||
'admin.paddleRegions.network.portages.one': '{count} portage cartographié',
|
||
'admin.paddleRegions.network.inferred': '{count} portages supposés',
|
||
'admin.paddleRegions.network.inferred.one': '{count} portage supposé',
|
||
'admin.paddleRegions.network.locks': '{count} écluses',
|
||
'admin.paddleRegions.network.locks.one': '{count} écluse',
|
||
'admin.paddleRegions.network.gaps': '{count} lacunes comblées',
|
||
'admin.paddleRegions.network.gaps.one': '{count} lacune comblée',
|
||
'admin.paddleRegions.network.missing': 'Aucun réseau d’eau',
|
||
'admin.paddleRegions.network.missingHint':
|
||
'Relisez la région pour construire le réseau que suit l’itinéraire en pagaie.',
|
||
'admin.paddleRegions.auto.title': 'Charger les régions automatiquement',
|
||
'admin.paddleRegions.auto.mode.auto': 'Automatique',
|
||
'admin.paddleRegions.auto.mode.ask': 'Sur demande',
|
||
'admin.paddleRegions.auto.mode.off': 'Désactivé',
|
||
'admin.paddleRegions.auto.modeHint.auto':
|
||
"Quand quelqu'un planifie une sortie en canoë là où il n'y a pas encore de données d'eau, TREK charge tout de suite la plus petite région qui convient, jusqu'à la taille limite et seulement quelques-unes par jour. Les plus grandes attendent ici comme demande. Seul le nom de la région part chez Geofabrik, jamais le lieu.",
|
||
'admin.paddleRegions.auto.modeHint.ask':
|
||
"Chaque nouvelle région attend ici qu'un administrateur la valide. Quand un administrateur planifie, elle se charge tout de suite.",
|
||
'admin.paddleRegions.auto.modeHint.off':
|
||
'TREK ne charge rien de lui-même et ne demande rien. Ajoute les régions ici à la main.',
|
||
'admin.paddleRegions.auto.maxSize': 'Plus grande région chargée automatiquement',
|
||
'admin.paddleRegions.auto.maxSizeHint':
|
||
'Les régions plus grandes attendent ici comme demande. Lire une région prend quelques minutes et occupe de la mémoire pendant ce temps.',
|
||
'admin.paddleRegions.requests.title': 'Demandées',
|
||
'admin.paddleRegions.requests.reason.ask': 'Sur demande',
|
||
'admin.paddleRegions.requests.reason.too_large': 'Trop grande',
|
||
'admin.paddleRegions.requests.reason.limit': 'Limite du jour',
|
||
'admin.paddleRegions.requests.declined': 'Refusée',
|
||
'admin.paddleRegions.requests.by': 'par {user}',
|
||
'admin.paddleRegions.requests.approve': 'Charger',
|
||
'admin.paddleRegions.requests.decline': 'Refuser',
|
||
'admin.paddleRegions.origin.auto': 'Automatique',
|
||
'admin.paddleRegions.origin.autoHint':
|
||
'TREK a chargé cette région de lui-même pour une sortie en canoë planifiée là-bas.',
|
||
'admin.mfa.reset': 'Réinitialiser la 2FA',
|
||
'admin.mfa.resetHint':
|
||
"Désactive l'authentification à deux facteurs de cet utilisateur, par exemple après la perte d'un téléphone. Il est déconnecté partout et pourra la reconfigurer après s'être connecté avec son mot de passe.",
|
||
'admin.mfa.resetConfirm': "Désactiver l'authentification à deux facteurs de {name} ?",
|
||
'admin.mfa.resetDone': 'Authentification à deux facteurs réinitialisée',
|
||
'admin.sso.unlink': 'Supprimer la liaison SSO',
|
||
'admin.sso.unlinkHint':
|
||
'Oublie quelle connexion chez votre fournisseur SSO appartient à ce compte, par exemple après un changement des identifiants utilisateur chez le fournisseur. La prochaine connexion SSO avec une adresse e-mail confirmée relie à nouveau le compte.',
|
||
'admin.sso.unlinkConfirm': 'Supprimer la liaison SSO de {name} ?',
|
||
'admin.sso.unlinkDone': 'Liaison SSO supprimée',
|
||
'admin.danger.title': 'Zone de danger',
|
||
'admin.rotateJwt.title': 'Renouveler le secret JWT',
|
||
'admin.rotateJwt.hint':
|
||
'Génère un nouveau secret de signature JWT. Toutes les sessions actives seront invalidées immédiatement.',
|
||
'admin.rotateJwt.confirm': 'Renouveler et se déconnecter',
|
||
'admin.rotateJwt.warning': 'Attention, cela invalidera toutes les sessions et vous déconnectera.',
|
||
'admin.rotateJwt.body':
|
||
'Un nouveau secret JWT sera généré immédiatement. Tous les utilisateurs connectés, vous compris, seront déconnectés et devront se reconnecter.',
|
||
'admin.oidcDisplayNamePlaceholder': 'ex. Google, Authentik, Keycloak',
|
||
'admin.oidcDiscoveryUrl': 'URL de découverte (facultative)',
|
||
'admin.oidcDiscoveryUrlHint':
|
||
"Remplace l'URL de découverte construite automatiquement. Nécessaire pour les fournisseurs comme Authentik dont le point de terminaison n'est pas à {path}.",
|
||
'admin.smtp.skipTls': 'Ignorer la vérification du certificat TLS',
|
||
'admin.smtp.skipTlsHint': 'À activer pour les certificats auto-signés sur des serveurs de messagerie locaux',
|
||
'admin.demoBaseline.title': 'État de référence de la démo',
|
||
'admin.demoBaseline.hint':
|
||
"Enregistre l'état actuel comme point de réinitialisation horaire. Tous les voyages et réglages de l'administrateur seront conservés.",
|
||
'admin.demoBaseline.button': "Enregistrer l'état de référence",
|
||
'admin.demoBaseline.saved': 'État de référence enregistré ! Les réinitialisations reviendront à cet état.',
|
||
'admin.demoBaseline.failed': "Échec de l'enregistrement de l'état de référence",
|
||
'admin.invite.deleteTitle': "Supprimer le lien d'invitation",
|
||
'admin.invite.deleteConfirm':
|
||
"Supprimer ce lien d'invitation ? Toute personne qui ne l'a pas encore utilisé ne pourra plus s'inscrire avec.",
|
||
'admin.packingTemplates.deleteTemplateTitle': 'Supprimer le modèle',
|
||
'admin.packingTemplates.deleteTemplateConfirm':
|
||
'Supprimer le modèle "{name}" avec toutes ses catégories et tous ses éléments ?',
|
||
'admin.packingTemplates.deleteCategoryTitle': 'Supprimer la catégorie',
|
||
'admin.packingTemplates.deleteCategoryConfirm': 'Supprimer la catégorie "{name}" et tous ses éléments ?',
|
||
'admin.rotateJwt.button': 'Renouveler',
|
||
'admin.addons.ai.name': 'IA',
|
||
'admin.addons.ai.description':
|
||
"Une connexion pour l'assistant et l'import de réservations. MCP permet à d'autres applis d'IA d'utiliser TREK.",
|
||
'admin.addons.ai.setup': "Configurer l'IA",
|
||
'admin.addons.ai.dialogSub':
|
||
"La connexion que partagent l'assistant et l'analyse par IA, et ce que chacun peut faire.",
|
||
'admin.addons.ai.tab.connection': 'Connexion',
|
||
'admin.addons.ai.parsing.readsWith': 'Lit les réservations avec',
|
||
'admin.addons.ai.parsing.own': 'Connexion propre',
|
||
'admin.addons.ai.parsing.ownHint': 'Utilisée à la place de la connexion partagée.',
|
||
'admin.addons.ai.parsing.useShared': 'Utiliser la connexion partagée',
|
||
'admin.addons.ai.parsing.sharedTag': 'Partagée',
|
||
'admin.addons.ai.parsing.perUser': 'Chaque personne lit avec sa propre connexion, configurée dans ses paramètres.',
|
||
'admin.addons.ai.parsing.none':
|
||
"Pas encore de connexion. Configurez-en une pour tous, ou donnez-en une propre à l'analyse par IA.",
|
||
'admin.addons.ai.parsing.setupOwn': 'En utiliser une autre',
|
||
'admin.addons.ai.parsing.installed': 'Installés sur le serveur',
|
||
'admin.addons.ai.parsing.refresh': 'Actualiser',
|
||
'admin.addons.ai.parsing.noModels': 'Aucun modèle installé. Téléchargez-en un ci-dessous.',
|
||
'admin.addons.ai.parsing.pullTitle': 'Télécharger un modèle recommandé',
|
||
'admin.addons.ai.parsing.pull': 'Télécharger',
|
||
'admin.addons.ai.parsing.pulling': 'Téléchargement…',
|
||
'admin.addons.ai.parsing.use': 'Utiliser',
|
||
'admin.addons.ai.parsing.selected': 'Sélectionné',
|
||
'admin.addons.ai.parsing.pulled': 'Modèle téléchargé',
|
||
'admin.addons.ai.parsing.pullFailed': 'Impossible de télécharger le modèle',
|
||
'admin.addons.ai.parsing.unreachable': 'Impossible de joindre le serveur local',
|
||
'admin.addons.ai.parsing.apiKeyOptional': 'Souvent inutile',
|
||
'admin.contribute.title': 'Partager les détails des lieux',
|
||
'admin.contribute.status.active': 'Partage actif',
|
||
'admin.contribute.status.paused': 'En pause',
|
||
'admin.contribute.status.off': 'Désactivé',
|
||
'admin.contribute.status.unavailable': 'Indisponible',
|
||
'admin.contribute.noteActive':
|
||
'Ce que vos utilisateurs saisissent sur les lieux parvient, après vérification, à chaque TREK. Merci de votre aide.',
|
||
'admin.contribute.noteOff':
|
||
'Faites en sorte que ce que vos utilisateurs saisissent sur les lieux améliore la TREK Places API pour tout le monde.',
|
||
'admin.contribute.ineligible.env_off': 'Désactivé pour cette installation par TREK_PLACES_CONTRIBUTE.',
|
||
'admin.contribute.ineligible.not_production':
|
||
'Seule une installation de production peut partager des détails de lieux.',
|
||
'admin.contribute.ineligible.demo': 'Une installation de démonstration ne partage pas de détails de lieux.',
|
||
'admin.contribute.ineligible.index_off': "Le partage nécessite l'index TREK comme source de lieux.",
|
||
'admin.contribute.ineligible.custom_places_url':
|
||
"Cette installation utilise sa propre Places API, il n'y a donc personne avec qui partager.",
|
||
'admin.contribute.ineligible.services_off': 'Les services TREK sont désactivés pour cette installation.',
|
||
'admin.contribute.ineligible.no_key':
|
||
"Cette installation n'a pas encore de clé de services. Elle est demandée automatiquement.",
|
||
'admin.contribute.pause.key_invalid': "En pause : le service n'a pas accepté la clé de cette installation.",
|
||
'admin.contribute.pause.key_refused':
|
||
'En pause : le service a refusé la clé de cette installation. Une nouvelle clé reprend le partage.',
|
||
'admin.contribute.pause.not_accepting':
|
||
"En pause : le service n'accepte pas de contributions pour le moment. Les valeurs en attente seront envoyées plus tard.",
|
||
'admin.contribute.field.website': 'Site web',
|
||
'admin.contribute.field.phone': 'Téléphone',
|
||
'admin.contribute.field.email': 'E-mail',
|
||
'admin.contribute.field.opening_hours': "Horaires d'ouverture",
|
||
'admin.contribute.field.description': 'Description', // same-as-en
|
||
'admin.contribute.field.image': 'Photo', // same-as-en
|
||
'admin.contribute.figure.accepted': 'Acceptées',
|
||
'admin.contribute.figure.acceptedInfo': 'Valeurs prises en compte par le service au cours des 30 derniers jours.',
|
||
'admin.contribute.figure.queue': 'En attente',
|
||
'admin.contribute.figure.queueFull':
|
||
"La file d'attente est pleine. Les nouvelles valeurs attendent qu'une place se libère.",
|
||
'admin.contribute.figure.last': 'Dernière acceptée',
|
||
'admin.contribute.never': 'jamais',
|
||
'admin.contribute.log.title': 'Journal des transmissions',
|
||
'admin.contribute.log.result': 'Résultat',
|
||
'admin.contribute.log.field': 'Champ',
|
||
'admin.contribute.log.allResults': 'Tous les résultats',
|
||
'admin.contribute.log.allFields': 'Tous les champs',
|
||
'admin.contribute.log.empty': "Rien n'a encore été envoyé.",
|
||
'admin.contribute.log.failed': "Le journal n'a pas pu être chargé.",
|
||
'admin.contribute.log.previous': 'Page précédente',
|
||
'admin.contribute.log.next': 'Page suivante',
|
||
'admin.contribute.result.accepted': 'Acceptée',
|
||
'admin.contribute.result.duplicate': 'Déjà connue',
|
||
'admin.contribute.result.rejected': 'Refusée',
|
||
'admin.contribute.result.withheld': 'Non envoyée',
|
||
'admin.contribute.result.retracted': 'Retirée',
|
||
'admin.contribute.withdraw': 'Retirer tout ce qui a été envoyé',
|
||
'admin.contribute.withdrawTitle': 'Tout retirer ?',
|
||
'admin.contribute.withdrawMessage':
|
||
'Toutes les valeurs envoyées par cette installation sont supprimées de la TREK Places API et les valeurs en attente sont abandonnées. Les lieux conservent leurs détails ici.',
|
||
'admin.contribute.withdrawn': "Retirées de l'index : {total}",
|
||
'admin.contribute.offTitle': 'Arrêter le partage ?',
|
||
'admin.contribute.offMessage':
|
||
"Plus rien n'est envoyé et les valeurs en attente sont abandonnées. Ce qui a déjà été accepté reste dans l'index, sauf si vous le retirez.",
|
||
'admin.contribute.offConfirm': 'Arrêter le partage',
|
||
'admin.contribute.refused.terms_outdated': 'Les conditions ont changé entre-temps. Veuillez les relire.',
|
||
'admin.contribute.refused.no_field': 'Choisissez au moins un champ à partager.',
|
||
'admin.contribute.prompt.title': 'Aidez chaque TREK à mieux connaître les lieux',
|
||
'admin.contribute.prompt.lead':
|
||
"Lorsqu'une personne ajoute ici un site web, un numéro de téléphone, des horaires ou une description à un lieu, TREK peut les transmettre. Après vérification, chaque installation TREK les affiche, et la vôtre reçoit en retour ce que d'autres ont ajouté.",
|
||
'admin.contribute.prompt.why':
|
||
"La TREK Places API est gratuite et n'exige aucune clé Google, car elle est construite à partir de données ouvertes. Chaque détail que vous partagez l'améliore pour des milliers de voyageurs. Merci d'en faire partie.",
|
||
'admin.contribute.prompt.whatLabel': 'Ce qui est partagé',
|
||
'admin.contribute.prompt.imageNote':
|
||
'Les photos sont examinées à la main avant que quiconque les voie. Vous pourrez modifier chaque réglage plus tard.',
|
||
'admin.contribute.prompt.neverLabel': 'Jamais partagé',
|
||
'admin.contribute.never.notes': 'Notes', // same-as-en
|
||
'admin.contribute.never.files': 'Fichiers et pièces jointes',
|
||
'admin.contribute.never.trips': 'Voyages, jours et réservations',
|
||
'admin.contribute.never.people': 'Noms, e-mails et comptes',
|
||
'admin.contribute.never.providers': 'Détails renseignés par Google ou un autre fournisseur',
|
||
'admin.contribute.prompt.how':
|
||
"Seulement ce que vos utilisateurs ont saisi eux-mêmes, et seulement pour les lieux que l'index connaît. Aucun utilisateur, voyage ou compte n'accompagne ces données. Le journal montre chaque transmission, et vous pouvez désactiver des champs ou tout retirer à tout moment.",
|
||
'admin.contribute.prompt.past':
|
||
'Les détails que vos utilisateurs ont saisis depuis TREK 5.1 sont aussi partagés, petit à petit.',
|
||
'admin.contribute.prompt.openRegistration':
|
||
"L'inscription est ouverte sur cette installation : toute personne ayant un compte peut donc saisir des détails. Chaque valeur est vérifiée avant d'être publiée.",
|
||
'admin.contribute.prompt.footnote':
|
||
"Vous décidez pour toute l'installation. Vos utilisateurs ne sont pas sollicités.",
|
||
'admin.contribute.prompt.agree': 'Accepter et partager',
|
||
'admin.contribute.prompt.snooze': 'Pas maintenant',
|
||
'admin.contribute.prompt.decline': 'Non, merci',
|
||
'admin.contribute.prompt.thanks': 'Merci. Les détails des lieux sont désormais partagés.',
|
||
'admin.servicesCard.title': 'Recherche de lieux et itinéraires',
|
||
'admin.servicesCard.hint':
|
||
'Les services propres à TREK, le fournisseur qui répond à la recherche et aux transports en commun, et le journal des recherches.',
|
||
};
|
||
export default admin;
|