manager-app/lib/l10n/app_localizations_fr.dart
Thomas Fransolet 762448c654 Lot F : écran d'audit log et compteur d'utilisateurs
Écran « Activité » sur GET /api/Audit, réservé au SuperAdmin comme la policy
de l'endpoint (menuId 13, conditionné à role.value == 0). Filtres instance,
type d'entité, utilisateur et plage de dates, pagination 50, clic sur une
ligne pour le détail avant/après en table plutôt que le JSON brut. Les ids
d'instance et d'utilisateur sont résolus en noms, un id absent de l'annuaire
restant affiché tel quel : le journal doit rester lisible après la
suppression de ce qu'il décrit.

manager_api_new n'est pas touché. L'écran passe par un http.get direct au
Bearer, comme _loadKnowledge / _loadInsights / _reindex du Guide IA : une
lecture seule ne justifie pas d'étendre un client qui s'édite à la main, et
le déclencheur de génération n'existe plus depuis le lot A.

Côté utilisateurs, compteur « X / 5 » et bouton d'ajout désactivé au
plafond. Le SuperAdmin en est exclu : son GET /api/User renvoie toutes les
instances, compter cette liste contre un plafond par instance n'aurait
aucun sens. Le masquage du rôle SuperAdmin pour un InstanceAdmin, resté en
question dans todo-features.md, était déjà fait — _allowedRoles filtre sur
r >= callerRole.

Trois pièges relevés en câblant :

- AuditController renvoie les entités brutes, pas un DTO — les champs sont
  ceux d'AuditLog en camelCase.
- invokeAPI ne lève pas sur un code d'erreur et son résultat était ignoré
  dans users_screen : un e-mail déjà utilisé (409) ou un rôle refusé (403)
  ne produisait aucun message. Le statut est désormais testé et le corps
  affiché, ce qui rendra visible sans retouche le futur 422 du plafond.
- DropdownButtonFormField ne relit pas initialValue sur reconstruction
  (FormField.didUpdateWidget ne traite que forceErrorText) : « Réinitialiser
  les filtres » vidait la requête sans vider l'affichage. Remplacé par un
  DropdownButton piloté.

40 clés i18n FR/EN/NL, flutter gen-l10n relancé. flutter analyze propre sur
les dossiers travaillés, flutter build web vert.

Deux dettes serveur restent ouvertes, hors périmètre de ce commit : le
plafond de 5 n'est pas appliqué par UserController (ce qui est livré ici est
un garde-fou d'interface, un POST direct passe toujours), et aucune section
n'est journalisée — AuditedTypes.Contains exige l'égalité exacte alors que
Section est abstraite. Détail dans DOCS/todo-features.md et v1-plan.md lot F.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 11:04:40 +02:00

1969 lines
47 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for French (`fr`).
class AppLocalizationsFr extends AppLocalizations {
AppLocalizationsFr([String locale = 'fr']) : super(locale);
@override
String get cancel => 'Annuler';
@override
String get save => 'Enregistrer';
@override
String get create => 'Créer';
@override
String get delete => 'Supprimer';
@override
String get close => 'Fermer';
@override
String get edit => 'Modifier';
@override
String get actions => 'Actions';
@override
String get status => 'Statut';
@override
String get no => 'Non';
@override
String get name => 'Nom';
@override
String get type => 'Type';
@override
String get date => 'Date';
@override
String get loginSuccess => 'Connexion réussie';
@override
String get loginError => 'Un problème est survenu lors de la connexion';
@override
String get rememberMe => 'Se souvenir de moi';
@override
String get connect => 'SE CONNECTER';
@override
String get forgotPasswordLink => 'Mot de passe oublié ?';
@override
String get forgotPasswordTitle => 'Mot de passe oublié';
@override
String get forgotPasswordDesc =>
'Indiquez votre e-mail, nous vous envoyons un lien pour définir un nouveau mot de passe.';
@override
String get forgotPasswordSubmit => 'ENVOYER LE LIEN';
@override
String get forgotPasswordSuccess =>
'Si cet e-mail existe, un lien de réinitialisation vient d\'être envoyé.';
@override
String get backToLogin => 'Retour à la connexion';
@override
String get setPasswordTitle => 'Définir votre mot de passe';
@override
String get setPasswordDesc =>
'Choisissez un mot de passe pour accéder à votre espace.';
@override
String get setPasswordNewLabel => 'Nouveau mot de passe';
@override
String get setPasswordSubmit => 'DÉFINIR LE MOT DE PASSE';
@override
String get setPasswordSuccess =>
'Mot de passe défini — vous pouvez vous connecter.';
@override
String get setPasswordError => 'Ce lien est invalide ou a expiré';
@override
String get setPasswordTooShort =>
'Le mot de passe doit contenir au moins 8 caractères';
@override
String get setPasswordMissingToken => 'Lien invalide — aucun jeton fourni';
@override
String get inviteUserHint =>
'Un e-mail d\'invitation sera envoyé pour définir le mot de passe.';
@override
String get menuSubscription => 'Abonnement';
@override
String get subscriptionTitle => 'Abonnement';
@override
String get subscriptionTrialActive => 'Essai gratuit en cours';
@override
String subscriptionTrialEndsAt(Object date) {
return 'Votre essai se termine le $date';
}
@override
String get subscriptionTrialNoDate => 'Votre essai gratuit est actif.';
@override
String get subscriptionPlanActive => 'Plan Essentiel actif';
@override
String get subscriptionPlanActiveDesc =>
'Votre abonnement est actif et se renouvelle automatiquement.';
@override
String get subscriptionIncludedTitle => 'Ce qui est inclus';
@override
String get subscriptionUpgradeBtn => 'Passer à un abonnement payant';
@override
String get subscriptionCheckoutError =>
'Impossible de démarrer le paiement, réessayez plus tard.';
@override
String get subscriptionAddonsTitle => 'Add-ons';
@override
String get subscriptionAddonsComingSoon =>
'Bientôt disponible : requêtes IA supplémentaires et autres options.';
@override
String get menuApplications => 'Applications';
@override
String get menuConfigurations => 'Configurations';
@override
String get menuResources => 'Ressources';
@override
String get menuStatistics => 'Statistiques';
@override
String get menuGuideIa => 'Guide IA';
@override
String get guideIaSubtitle =>
'Votre guide répond aux questions des visiteurs à partir de vos propres contenus. Il ne répond jamais à partir d\'autre chose.';
@override
String get guideIaUsageTitle => 'Consommation du mois';
@override
String guideIaUsageQuestions(Object count) {
return '$count questions posées';
}
@override
String get guideIaUsageNoQuota => 'Aucun plafond défini sur votre offre.';
@override
String get guideIaChannelsTitle => 'Où le guide est disponible';
@override
String get guideIaChannelsSub =>
'Activable canal par canal, depuis la configuration de chaque application.';
@override
String get guideIaChannelOn => 'Activé';
@override
String get guideIaChannelOff => 'Désactivé';
@override
String get guideIaIdentityTitle => 'Identité du guide';
@override
String get guideIaIdentitySub => 'C\'est ce qui donne son ton aux réponses';
@override
String get guideIaNameLabel => 'Nom du guide';
@override
String get guideIaNameHint =>
'Le nom que le visiteur voit et entend. Ex : Léon';
@override
String get guideIaPersonaLabel => 'Personnalité';
@override
String get guideIaPersonaHint =>
'Décrivez-le comme vous présenteriez un guide à un nouveau collègue. Pour démarrer, partez d\'un exemple :';
@override
String get guideIaExampleWarden => 'Gardien passionné';
@override
String get guideIaExampleWardenText =>
'Tu t\'appelles Léon, tu es l\'ancien gardien du lieu. Tu parles simplement, avec chaleur, et tu glisses volontiers une anecdote. Tu vouvoies les visiteurs.';
@override
String get guideIaExampleSober => 'Médiateur sobre';
@override
String get guideIaExampleSoberText =>
'Tu es un médiateur culturel calme et précis. Tu réponds en deux ou trois phrases, sans familiarité, en citant les faits établis. Si une information n\'est pas certaine, tu le dis. Tu vouvoies les visiteurs.';
@override
String get guideIaExampleKids => 'Pour les enfants';
@override
String get guideIaExampleKidsText =>
'Tu es une exploratrice enthousiaste qui s\'adresse à des enfants de 7 à 12 ans. Tu tutoies, tu poses des questions, tu utilises des comparaisons simples et des mots courts. Tu racontes des histoires.';
@override
String get guideIaFallbackLabel => 'Quand le guide ne sait pas répondre';
@override
String get guideIaFallbackHint =>
'Le guide en choisit une au hasard. Avec une seule phrase, il la répète à l\'identique et ça se remarque tout de suite.';
@override
String get guideIaFallbackAdd => 'Ajouter une formulation';
@override
String get guideIaFallbackTranslated =>
'Ces phrases sont vues par vos visiteurs : elles seront traduites dans leur langue, comme le reste de vos contenus.';
@override
String get guideIaVoiceTitle => 'Votre guide à voix haute';
@override
String get guideIaVoiceSub =>
'Le visiteur pose sa question à voix haute et entend la réponse — dans l\'application, ou dans ses lunettes connectées.';
@override
String get guideIaVoiceFemale => 'Voix féminine, chaleureuse';
@override
String get guideIaVoiceMale => 'Voix masculine, posée';
@override
String guideIaVoiceWakeword(Object word) {
return 'Réveil : « $word »';
}
@override
String guideIaVoiceInfoName(Object word) {
return 'Le visiteur dit « $word » pour réveiller le guide, même s\'il porte un autre nom. Une voix et un mot de réveil à votre nom sont possibles en option.';
}
@override
String get guideIaVoiceInfoGlasses =>
'Les lunettes connectées fonctionnent avec l\'application mobile installée sur le téléphone du visiteur.';
@override
String get guideIaVoiceInfoMultilang =>
'La même voix parle toutes vos langues : votre guide garde la même identité d\'une langue à l\'autre.';
@override
String get guideIaSave => 'Enregistrer';
@override
String get guideIaSaved => 'Guide enregistré';
@override
String get guideIaSaveError => 'L\'enregistrement a échoué. Réessayez.';
@override
String get guideIaTabConfig => 'Configuration';
@override
String get guideIaTabQuestions => 'Ce que demandent vos visiteurs';
@override
String get guideIaPreviewTitle => 'Essayer votre guide';
@override
String get guideIaPreviewSub =>
'Testez le ton et les réponses sans passer par un téléphone';
@override
String get guideIaPreviewPlaceholder =>
'Posez une question, comme le ferait un visiteur';
@override
String get guideIaPreviewSources => 'D\'où vient cette réponse ?';
@override
String get guideIaPreviewSourcesInfo =>
'Cet indicateur de sources n\'apparaît que sur cet écran. Vos visiteurs, eux, ne voient que la réponse.';
@override
String get guideIaPreviewError =>
'Le guide n\'a pas répondu. Réessayez dans un instant.';
@override
String get guideIaPreviewUnsaved =>
'Enregistrez vos modifications pour les essayer : l\'aperçu interroge le guide tel qu\'il est publié.';
@override
String get guideIaKnowledgeTitle => 'Ce que connaît votre guide';
@override
String get guideIaKnowledgeSub =>
'Mesuré sur ce qui est réellement indexé, pas sur ce qui est publié';
@override
String get guideIaKnowledgeSections => 'Sections indexées';
@override
String get guideIaKnowledgeChunks => 'Morceaux de contenu';
@override
String get guideIaKnowledgeLanguages => 'Langues couvertes';
@override
String get guideIaKnowledgeLastIndexed => 'Dernière indexation';
@override
String get guideIaKnowledgeHint =>
'Une section dépubliée disparaît des réponses du guide dans la minute.';
@override
String guideIaKnowledgeMinutesAgo(Object count) {
return 'il y a $count min';
}
@override
String guideIaKnowledgeHoursAgo(Object count) {
return 'il y a $count h';
}
@override
String guideIaKnowledgeDaysAgo(Object count) {
return 'il y a $count j';
}
@override
String get guideIaKpiQuestions => 'Questions ce mois';
@override
String get guideIaKpiUnanswered => 'Sans réponse';
@override
String get guideIaKpiThemes => 'Thèmes';
@override
String get guideIaKpiLanguages => 'Langues';
@override
String get guideIaGapTitle =>
'Ce que vos visiteurs cherchent sans le trouver';
@override
String guideIaGapSub(Object count) {
return '$count questions n\'ont trouvé aucune réponse dans vos contenus. Ajoutez-les et votre guide saura répondre dès la prochaine visite.';
}
@override
String get guideIaTopicsTitle => 'Sujets des questions';
@override
String get guideIaQuestionLanguagesTitle => 'Langues des questions';
@override
String get guideIaInsightsSubCount => 'Nombre de questions sur la période';
@override
String get guideIaCitedTitle => 'Contenus les plus utilisés';
@override
String get guideIaCitedSub => 'Sections citées dans les réponses';
@override
String get guideIaInsightsEmpty => 'Aucune question pour l\'instant';
@override
String get guideIaInsightsEmptyHint =>
'Dès que vos visiteurs interrogeront le guide, leurs questions seront regroupées ici par sujet — et celles restées sans réponse vous diront quoi ajouter à vos contenus.';
@override
String get guideIaInsightsPrivacy =>
'Les questions sont conservées 90 jours puis supprimées. Seuls les regroupements par sujet sont gardés au-delà. Aucune donnée permettant d\'identifier un visiteur n\'est enregistrée.';
@override
String get menuNotifications => 'Notifications';
@override
String get menuUsers => 'Utilisateurs';
@override
String get menuApiKeys => 'Clés API';
@override
String get noPlansAvailable =>
'Aucun plan disponible. Créez d\'abord un plan.';
@override
String get noPlan => 'Aucun plan (illimité)';
@override
String get unlimitedStorage => 'Stockage illimité';
@override
String get unlimitedAI => 'IA illimitée';
@override
String aiTokensPerMonth(String amount) {
return '$amount tokens IA/mois';
}
@override
String get storageLabel => 'Stockage';
@override
String get aiThisMonthLabel => 'IA ce mois';
@override
String get unlimited => 'Illimité';
@override
String get requestsAbbr => 'req';
@override
String get tokensAbbr => 'tokens';
@override
String get planUpdated => 'Plan mis à jour';
@override
String errorMessage(String error) {
return 'Erreur : $error';
}
@override
String get switchInstance => 'Changer d\'instance';
@override
String get noInstanceFound => 'Aucune instance trouvée';
@override
String get configurePlan => 'Configurer le plan';
@override
String get tooltipSwitchInstance => 'Changer d\'instance';
@override
String get tooltipLogout => 'Se déconnecter';
@override
String get usersTitle => 'Utilisateurs';
@override
String get createUserBtn => 'Créer un utilisateur';
@override
String get createUserTitle => 'Créer un utilisateur';
@override
String get editUserTitle => 'Modifier l\'utilisateur';
@override
String get deleteUserTitle => 'Supprimer l\'utilisateur';
@override
String deleteUserConfirm(String email) {
return 'Supprimer $email ?';
}
@override
String get noUsers => 'Aucun utilisateur';
@override
String get email => 'Email';
@override
String get firstName => 'Prénom';
@override
String get lastName => 'Nom';
@override
String get password => 'Mot de passe';
@override
String get role => 'Rôle';
@override
String get tooltipEdit => 'Modifier';
@override
String get tooltipDelete => 'Supprimer';
@override
String get notificationsTitle => 'Notifications';
@override
String get newMessage => 'Nouveau message';
@override
String get messageTitle => 'Titre';
@override
String get messageBody => 'Message';
@override
String get schedule => 'Planifier';
@override
String get time => 'Heure';
@override
String get send => 'Envoyer';
@override
String get cancelNotification => 'Annuler la notification';
@override
String cancelNotificationConfirm(String title) {
return 'Annuler « $title » ?';
}
@override
String get allNotifications => 'Toutes';
@override
String get sentNotifications => 'Envoyées';
@override
String get scheduledNotifications => 'Planifiées';
@override
String get failedNotifications => 'Échouées';
@override
String get noNotifications => 'Aucune notification envoyée';
@override
String get noNotificationsForFilter => 'Aucune notification pour ce filtre';
@override
String get topic => 'Topic';
@override
String get tooltipCancelNotification => 'Annuler';
@override
String resultsCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count résultats',
one: '$count résultat',
);
return '$_temp0';
}
@override
String get apiKeysTitle => 'Clés API';
@override
String get createApiKey => 'Créer une clé API';
@override
String get createKeyBtn => 'Créer une clé';
@override
String get appType => 'Type d\'application';
@override
String get noExpiration => 'Pas d\'expiration';
@override
String expiresOn(String date) {
return 'Expire le $date';
}
@override
String get choose => 'Choisir';
@override
String get removeExpiration => 'Supprimer l\'expiration';
@override
String get apiKeyCreatedTitle => 'Clé API créée';
@override
String get copyKeyWarning =>
'Copiez cette clé maintenant — elle ne sera plus affichée.';
@override
String get copy => 'Copier';
@override
String get copiedKey => 'J\'ai copié la clé';
@override
String get revokeApiKeyTitle => 'Révoquer la clé API';
@override
String revokeApiKeyConfirm(String name) {
return 'Révoquer « $name » ? Les apps utilisant cette clé perdront l\'accès.';
}
@override
String get revoke => 'Révoquer';
@override
String get noApiKeys => 'Aucune clé API';
@override
String get createdOn => 'Créée le';
@override
String get expiration => 'Expiration';
@override
String get activeKey => 'Active';
@override
String get revokedKey => 'Révoquée';
@override
String get tooltipRevoke => 'Révoquer';
@override
String get statisticsTitle => 'Statistiques';
@override
String get statsLoadError => 'Impossible de charger les statistiques';
@override
String get statsNoData => 'Pas encore de données pour cette période';
@override
String statsNoDataForType(String type) {
return 'Aucun event reçu pour le type \"$type\"';
}
@override
String get statsSessions => 'Sessions';
@override
String get statsAvgDuration => 'Durée moy.';
@override
String get statsTopApp => 'App top';
@override
String get statsTopLang => 'Langue top';
@override
String get statsVisitsByDay => 'Visites par jour';
@override
String get statsAll => 'Tous';
@override
String get statsTopSections => 'Top sections';
@override
String get statsApps => 'Apps';
@override
String get statsLanguages => 'Langues';
@override
String get statsTopPOI => 'Top POI';
@override
String get statsPOI => 'POI';
@override
String get statsTaps => 'Taps';
@override
String get statsTopAgenda => 'Top événements agenda';
@override
String get statsEvent => 'Événement';
@override
String get statsQuiz => 'Quiz';
@override
String get statsSection => 'Section';
@override
String get statsAvgScore => 'Score moy';
@override
String get statsCompletions => 'Complétions';
@override
String get statsGames => 'Jeux';
@override
String get statsGameType => 'Type';
@override
String get statsArticles => 'Articles lus';
@override
String get statsReadings => 'Lectures';
@override
String get statsMenuTitle => 'Menu';
@override
String get statsMenuItem => 'Item';
@override
String get statsQrScans => 'QR Scans';
@override
String get statsTotal => 'Total';
@override
String get statsValid => 'Valides';
@override
String get statsInvalid => 'Invalides';
@override
String get statsViews => 'Vues';
@override
String get statsAttendanceTitle => 'Fréquentation';
@override
String statsPeriodRange(String from, String to) {
return 'Du $from au $to';
}
@override
String get statsFilterPeriod => 'Période';
@override
String get statsFilterChannel => 'Canal';
@override
String statsPeriodDays(int days) {
return '$days jours';
}
@override
String get statsPeriodYear => 'Année';
@override
String get statsChannelMobile => 'Application mobile';
@override
String get statsChannelTablet => 'Borne d\'accueil';
@override
String get statsChannelWeb => 'Site web';
@override
String get statsChannelVR => 'Casque VR';
@override
String get statsChannelVoice => 'Guide vocal';
@override
String statsTakeawayUp(String percent) {
return 'La fréquentation progresse de $percent % par rapport à la période précédente.';
}
@override
String statsTakeawayDown(String percent) {
return 'La fréquentation recule de $percent % par rapport à la période précédente.';
}
@override
String get statsTakeawayStable =>
'La fréquentation est stable par rapport à la période précédente.';
@override
String statsTakeawayVolume(String visits, String perDay) {
return '$visits visites sur la période, soit $perDay par jour en moyenne.';
}
@override
String statsTakeawayVoice(String percent) {
return 'Le guide vocal représente $percent % des visites : c\'est un argument à faire valoir auprès de vos subsidiants.';
}
@override
String statsTakeawayChannel(String channel, String percent) {
return 'Le canal « $channel » concentre $percent % des visites.';
}
@override
String statsTakeawayContent(String title, String percent) {
return 'Le contenu « $title » concentre $percent % des consultations : c\'est votre porte d\'entrée, il mérite d\'être tenu à jour en priorité.';
}
@override
String get statsKpiVisits => 'Visites';
@override
String get statsKpiAvgDuration => 'Durée moyenne';
@override
String get statsKpiContentsPerVisit => 'Contenus par visite';
@override
String get statsKpiVoiceShare => 'Part du guide vocal';
@override
String get statsKpiTotalViews => 'Contenus consultés';
@override
String get statsVsPrevious => 'vs période précédente';
@override
String get statsTrendStable => 'stable';
@override
String statsDurationMinSec(String minutes, String seconds) {
return '$minutes min $seconds s';
}
@override
String statsDurationSec(String seconds) {
return '$seconds s';
}
@override
String get statsVisitsByDaySub =>
'Les bandes claires signalent les week-ends';
@override
String get statsWeekends => 'Samedis et dimanches';
@override
String statsPeakDay(String date, String visits) {
return 'Pic le $date$visits visites';
}
@override
String get statsTopContents => 'Contenus les plus consultés';
@override
String get statsTopContentsSub => 'Nombre de consultations sur la période';
@override
String get statsChannels => 'Canaux';
@override
String get statsChannelsSub => 'Visites par canal';
@override
String get statsLanguagesSub => 'Visites par langue';
@override
String get statsReportTitle => 'Votre rapport de fréquentation';
@override
String get statsReportBody =>
'Un document à vos couleurs, prêt à transmettre à votre commune, votre conseil d\'administration ou vos subsidiants.';
@override
String get statsReportItemAttendance =>
'Fréquentation, durées de visite et évolution';
@override
String get statsReportItemContents =>
'Contenus les plus consultés et leur évolution';
@override
String get statsReportItemChannels =>
'Répartition par canal, dont le guide vocal, et par langue';
@override
String get statsReportItemAdvanced =>
'Points d\'intérêt, quiz, jeux et scans QR';
@override
String statsReportGenerated(String date) {
return 'Rapport généré le $date avec MyInfoMate';
}
@override
String get statsReportError => 'Le rapport n\'a pas pu être généré';
@override
String get statsReportDownload => 'Télécharger le PDF';
@override
String get statsAdvancedTitle => 'Statistiques avancées';
@override
String get statsAdvancedBody =>
'Les statistiques détaillées (POI, quiz, jeux, articles, QR…) sont disponibles avec le plan Premium.';
@override
String get statsUnavailableTitle => 'Statistiques non incluses';
@override
String get statsUnavailableBody =>
'Votre plan actuel n\'inclut pas les statistiques de fréquentation.';
@override
String get noData => 'Aucune donnée';
@override
String get errorOccurred => 'Une erreur est survenue';
@override
String get yes => 'Oui';
@override
String get newConfiguration => 'Nouvelle configuration';
@override
String get configNameLabel => 'Nom :';
@override
String get orText => 'ou';
@override
String get importLabel => 'Importer';
@override
String get configNameRequired =>
'Veuillez spécifier un nom pour la nouvelle visite';
@override
String get configCreatedSuccess => 'La configuration a été créée avec succès';
@override
String configExportSuccess(String path) {
return 'L\'export de la configuration a réussi, le document se trouve à cet endroit : $path';
}
@override
String get configExportFailed => 'L\'export de la configuration a échoué';
@override
String get configDeletedSuccess =>
'La configuration a été supprimée avec succès';
@override
String get configSavedSuccess =>
'La configuration a été sauvegardée avec succès';
@override
String get configDeleteConfirm =>
'Êtes-vous sûr de vouloir supprimer cette configuration ?';
@override
String get newSection => 'Nouvelle section';
@override
String get newSubSection => 'Nouvelle sous section';
@override
String get sectionNameLabel => 'Nom :';
@override
String get sectionTypeLabel => 'Type:';
@override
String get sectionNameRequired =>
'Veuillez spécifier un nom pour la nouvelle section';
@override
String get sectionCreatedSuccess => 'La section a été créée avec succès !';
@override
String get sectionDeleteConfirm =>
'Êtes-vous sûr de vouloir supprimer cette section ?';
@override
String get sectionSavedSuccess => 'La section a été sauvegardée avec succès';
@override
String get sectionTranslationSaved =>
'Les traductions de la section ont été sauvegardées avec succès';
@override
String get sectionLoadError =>
'Une erreur est survenue lors de la récupération de la section';
@override
String get qrCodeCopied => 'Ce QR code a été copié dans le presse papier';
@override
String get beaconLabel => 'Beacon :';
@override
String get beaconIdLabel => 'Identifiant Beacon :';
@override
String get beaconMustBeNumber => 'Cela doit être un chiffre';
@override
String get identifierLabel => 'Identifiant :';
@override
String get displayTitleLabel => 'Titre affiché:';
@override
String get imageLabel => 'Image :';
@override
String get backgroundImageLabel => 'Image fond d\'écran :';
@override
String get questionInputLabel => 'Question :';
@override
String get videoUrlLabel => 'Url de la vidéo:';
@override
String get webUrlLabel => 'Url du site web:';
@override
String get subSectionUpdatedSuccess =>
'La sous section a été mis à jour avec succès';
@override
String get subSectionUpdateError =>
'Une erreur est survenue lors de la mise à jour de la sous section';
@override
String get subSectionDeletedSuccess =>
'La sous section a été supprimée avec succès';
@override
String get subSectionDeleteError =>
'Une erreur est survenue lors de la suppression de la sous section';
@override
String get subSectionOrderUpdatedSuccess =>
'L\'ordre des sous sections a été mis à jour avec succès';
@override
String get subSectionOrderUpdateError =>
'Une erreur est survenue lors de la mise à jour de l\'ordre des sous sections';
@override
String get subSectionCreatedSuccess =>
'La sous section a été créée avec succès';
@override
String get subSectionCreateError =>
'Une erreur est survenue lors de la création de la sous section';
@override
String get questionsLabel => 'Questions';
@override
String get questionLabel => 'Question';
@override
String get editQuestion => 'Modifier la question';
@override
String get questionDeleteConfirm =>
'Êtes-vous sûr de vouloir supprimer cette question ?';
@override
String get questionsLoadError =>
'Une erreur est survenue lors de la récupération des questions';
@override
String get quizBadScore => 'Mauvais score';
@override
String get quizMediumScore => 'Moyen score';
@override
String get quizGoodScore => 'Bon score';
@override
String get quizExcellentScore => 'Excellent score';
@override
String get quizBadScoreMsg => 'Message pour un mauvais score';
@override
String get quizMediumScoreMsg => 'Message pour un score moyen';
@override
String get quizGoodScoreMsg => 'Message pour un bon score';
@override
String get quizExcellentScoreMsg => 'Message pour un excellent score';
@override
String get questionOrderUpdatedSuccess =>
'L\'ordre des questions a été mis à jour avec succès';
@override
String get questionOrderUpdateError =>
'Une erreur est survenue lors de la mise à jour de l\'ordre des questions';
@override
String get questionCreatedSuccess => 'La question a été créée avec succès';
@override
String get questionCreateError =>
'Une erreur est survenue lors de la création de la question';
@override
String get questionUpdatedSuccess =>
'La question a été mis à jour avec succès';
@override
String get questionUpdateError =>
'Une erreur est survenue lors de la mise à jour de la question';
@override
String get questionDeletedSuccess =>
'La question a été supprimée avec succès';
@override
String get questionDeleteError =>
'Une erreur est survenue lors de la suppression de la question';
@override
String get translationIncomplete => 'La traduction n\'est pas complète';
@override
String get geopointCreatedSuccess => 'Le point a été créé avec succès';
@override
String get geopointCreateError =>
'Une erreur est survenue lors de la création du point';
@override
String get geopointUpdatedSuccess => 'Le point a été mis à jour avec succès';
@override
String get geopointUpdateError =>
'Une erreur est survenue lors de la mise à jour du point';
@override
String get geopointDeletedSuccess => 'Le point a été supprimé avec succès';
@override
String get geopointDeleteError =>
'Une erreur est survenue lors de la suppression du point';
@override
String get categoryCreatedSuccess => 'La catégorie a été créée avec succès';
@override
String get categoryCreateError =>
'Une erreur est survenue lors de la création de la catégorie';
@override
String get categoryUpdatedSuccess =>
'La catégorie a été mise à jour avec succès';
@override
String get categoryUpdateError =>
'Une erreur est survenue lors de la mise à jour de la catégorie';
@override
String get eventCreatedSuccess => 'L\'événement a été créé avec succès';
@override
String get eventCreateError =>
'Une erreur est survenue lors de la création de l\'événement';
@override
String get eventUpdatedSuccess => 'L\'événement a été mis à jour avec succès';
@override
String get eventUpdateError =>
'Une erreur est survenue lors de la mise à jour de l\'événement';
@override
String get eventDeletedSuccess => 'L\'événement a été supprimé avec succès';
@override
String get eventDeleteError =>
'Une erreur est survenue lors de la suppression de l\'événement';
@override
String get annotationCreatedSuccess =>
'L\'annotation a été créée avec succès';
@override
String get annotationCreateError =>
'Une erreur est survenue lors de la création de l\'annotation';
@override
String get annotationUpdatedSuccess =>
'L\'annotation a été mise à jour avec succès';
@override
String get annotationUpdateError =>
'Une erreur est survenue lors de la mise à jour de l\'annotation';
@override
String get programmeBlockCreatedSuccess => 'Le bloc a été créé avec succès';
@override
String get programmeBlockCreateError =>
'Une erreur est survenue lors de la création du bloc';
@override
String get programmeBlockUpdatedSuccess =>
'Le bloc a été mis à jour avec succès';
@override
String get programmeBlockUpdateError =>
'Une erreur est survenue lors de la mise à jour du bloc';
@override
String get pathCreatedSuccess => 'Le parcours a été créé avec succès';
@override
String get pathCreateError =>
'Une erreur est survenue lors de la création du parcours';
@override
String get pathUpdatedSuccess => 'Le parcours a été mis à jour avec succès';
@override
String get pathUpdateError =>
'Une erreur est survenue lors de la mise à jour du parcours';
@override
String get stepCreatedSuccess => 'L\'étape a été créée avec succès';
@override
String get stepCreateError =>
'Une erreur est survenue lors de la création de l\'étape';
@override
String get stepUpdatedSuccess => 'L\'étape a été mise à jour avec succès';
@override
String get stepUpdateError =>
'Une erreur est survenue lors de la mise à jour de l\'étape';
@override
String get agendaEventsLabel => 'Évènements';
@override
String get agendaEventFallback => 'Évènement';
@override
String get addEvent => 'Ajouter un évènement';
@override
String get noEvents => 'Aucun évènement';
@override
String get noAddress => 'Pas d\'adresse';
@override
String get agendaFilterAll => 'Tous';
@override
String get agendaFilterThisMonth => 'Ce mois-ci';
@override
String get agendaFilterThisYear => 'Cette année';
@override
String get agendaFilterPast => 'Passés';
@override
String get agendaEventDeleteConfirm =>
'Êtes-vous sûr de vouloir supprimer cet évènement ?';
@override
String get onlineLabel => 'En ligne :';
@override
String get mapViewLabel => 'Vue carte :';
@override
String get mapServiceLabel => 'Service carte :';
@override
String get jsonFilesLabel => 'Fichiers json :';
@override
String get jsonLabel => 'JSON';
@override
String get guidedPathsLabel => 'Parcours Guidés';
@override
String get addPath => 'Ajouter un parcours';
@override
String get noPathConfigured => 'Aucun parcours configuré';
@override
String get pathOrderUpdateError =>
'Erreur lors de la mise à jour de l\'ordre';
@override
String get pathNoTitle => 'Parcours sans titre';
@override
String get pathDeletedSuccess => 'Parcours supprimé avec succès';
@override
String get pathDeleteError => 'Erreur lors de la suppression du parcours';
@override
String get pathsLabel => 'Parcours';
@override
String get pointsOfInterestLabel => 'Points d\'Intérêt';
@override
String get geopointsLabel => 'Points géographiques';
@override
String get searchLabel => 'Recherche :';
@override
String get geopointsLoadError =>
'Une erreur est survenue lors de la récupération des points géographiques';
@override
String get geopointDeleteConfirm =>
'Êtes-vous sûr de vouloir supprimer ce point géographique ?';
@override
String get serviceLabel => 'Service :';
@override
String get centerPointLabel => 'Point de centrage :';
@override
String get iconLabel => 'Icône :';
@override
String get listViewLabel => 'Vue liste :';
@override
String get typeLabel => 'Type :';
@override
String get zoomLabel => 'Zoom :';
@override
String get categoriesLabel => 'Catégories :';
@override
String get startDateLabel => 'Date de début';
@override
String get notDefined => 'Non définie';
@override
String get endDateLabel => 'Date de fin';
@override
String get programmeLabel => 'Programme';
@override
String get addBlock => 'Ajouter un bloc';
@override
String get blockFallback => 'Bloc';
@override
String get noBlocks => 'Aucun bloc de programme défini';
@override
String get programmeBlockDeletedSuccess => 'Bloc supprimé avec succès';
@override
String get programmeBlockDeleteError =>
'Erreur lors de la suppression du bloc';
@override
String get baseMapLabel => 'Carte de base';
@override
String get mapLabel => 'Carte :';
@override
String get globalAnnotationsLabel => 'Annotations globales';
@override
String get addAnnotation => 'Ajouter une annotation';
@override
String get noAnnotations => 'Aucune annotation globale';
@override
String get annotationFallback => 'Annotation';
@override
String get annotationDeletedSuccess => 'Annotation supprimée';
@override
String get annotationDeleteError => 'Erreur lors de la suppression';
@override
String get agendaEventCreatedSuccess => 'L\'événement a été créé avec succès';
@override
String get agendaEventCreateError =>
'Une erreur est survenue lors de la création de l\'événement';
@override
String get agendaEventUpdatedSuccess =>
'L\'événement a été mis à jour avec succès';
@override
String get agendaEventUpdateError =>
'Une erreur est survenue lors de la mise à jour de l\'événement';
@override
String get agendaEventDeletedSuccess =>
'L\'événement a été supprimé avec succès';
@override
String get agendaEventDeleteError =>
'Une erreur est survenue lors de la suppression de l\'événement';
@override
String get newResource => 'Nouvelle ressource';
@override
String get resourceCreatedSuccess => 'La ressource a été créée avec succès';
@override
String get resourceCreateError =>
'Une erreur est survenue lors de la création de la ressource';
@override
String get resourceUpdatedSuccess =>
'La ressource a été mise à jour avec succès';
@override
String get resourceNoFileLoaded => 'Aucun fichier n\'a été chargé';
@override
String get resourceNameRequired => 'Veuillez donner un nom à la ressource';
@override
String get resourceTooLarge =>
'Erreur, attention, la taille de la ressource doit être inférieure à 1.5Mb';
@override
String get resourceInvalidUrl => 'L\'url est invalide';
@override
String get resourceUrlRequired => 'Veuillez remplir le champ URL';
@override
String get generalInfo => 'Informations générales';
@override
String get mainImageLabel => 'Image principale :';
@override
String get loaderLabel => 'Loader :';
@override
String get primaryColorLabel => 'Couleur principale :';
@override
String get secondaryColorLabel => 'Couleur secondaire :';
@override
String get layoutLabel => 'Affichage :';
@override
String get layoutGrid => 'Grille';
@override
String get languagesLabel => 'Langues :';
@override
String get featuredEventLabel => 'Evènement à l\'affiche :';
@override
String get chooseEvent => 'Choisir un évènement';
@override
String get previewWebTitle => 'Aperçu — Web';
@override
String get previewMobileTitle => 'Aperçu — Mobile';
@override
String get previewDesktop => 'Desktop';
@override
String get previewMobile => 'Mobile';
@override
String get noneOption => 'Aucun';
@override
String get aiAssistantLabel => 'Assistant IA :';
@override
String get appUpdatedSuccess => 'Application mobile mise à jour';
@override
String get configActivatedSuccess => 'Configuration activée avec succès';
@override
String get configDeactivatedSuccess => 'Configuration désactivée avec succès';
@override
String get configRemoveConfirm =>
'Êtes-vous sûr de vouloir retirer cette configuration de l\'application ?';
@override
String get configRemovedSuccess =>
'La configuration a été retirée de l\'application avec succès';
@override
String get configRemoveError =>
'Une erreur est survenue lors du retrait de la configuration';
@override
String get phoneConfigTitle => 'Contenu de l\'application mobile';
@override
String get addConfig => 'Ajouter une configuration';
@override
String get selectConfigToAdd => 'Sélectionner une configuration à ajouter';
@override
String get noItems => 'Aucun élément à afficher';
@override
String get add => 'Ajouter';
@override
String pinCode(String code) {
return 'Code pin: $code';
}
@override
String get tablets => 'Tablettes';
@override
String stepsCount(int count) {
return '$count étapes';
}
@override
String get displayedDescriptionLabel => 'Description affichée:';
@override
String get displayedContentLabel => 'Contenu affiché :';
@override
String get displayedNameLabel => 'Nom affiché :';
@override
String get startTimeLabel => 'Heure de début';
@override
String get noAnnotationConfigured => 'Aucune annotation configurée.';
@override
String get newStepTitle => 'Nouvelle Étape';
@override
String get editStepTitle => 'Modifier l\'Étape';
@override
String get stepTitleLabel => 'Titre de l\'étape';
@override
String get stepDescriptionLabel => 'Description de l\'étape';
@override
String get stepLocationLabel => 'Emplacement de l\'étape :';
@override
String get initiallyHiddenLabel => 'Cachée initialement';
@override
String get lockedLabel => 'Verrouillée';
@override
String get durationSecondsLabel => 'Durée (secondes) :';
@override
String get triggerGeopointLabel => 'GeoPoint de déclenchement (ID) :';
@override
String get questionsChallengesLabel => 'Questions / Défis';
@override
String get noQuestionsConfigured => 'Aucune question configurée.';
@override
String get newAgendaEventTitle => 'Nouvel Évènement';
@override
String get editAgendaEventTitle => 'Modifier l\'Évènement';
@override
String get eventTitleLabel => 'Titre de l\'évènement';
@override
String get eventDescriptionLabel => 'Description de l\'évènement';
@override
String get startDateColonLabel => 'Date de début :';
@override
String get videoResourceLabel => 'Vidéo :';
@override
String get directVideoLinkLabel => 'Lien vidéo direct :';
@override
String get phoneLabel => 'Téléphone :';
@override
String get locationGeometryLabel => 'Localisation / Géométrie';
@override
String get geometryLabel => 'Géométrie :';
@override
String get materialIconLabel => 'Icône (material) :';
@override
String get linearLabel => 'Linéaire :';
@override
String get requiredSuccessLabel => 'Réussite requise :';
@override
String get pathStepsLabel => 'Étapes du parcours';
@override
String get noStepConfigured => 'Aucun point/étape configuré.';
@override
String get stepFallback => 'Étape';
@override
String get questionAskedLabel => 'Question posée :';
@override
String get questionTitleLabel => 'Intitulé de la question';
@override
String get expectedAnswerLabel => 'Réponse attendue :';
@override
String get expectedAnswerModalLabel => 'Réponse attendue';
@override
String get validationNote =>
'La validation se fait par comparaison (insensible à la casse).';
@override
String get possibleAnswersLabel => 'Réponses possibles :';
@override
String get noAnswerDefined =>
'Aucune réponse définie. Ajoutez-en au moins une.';
@override
String get correctAnswer => 'Bonne réponse ✓';
@override
String get wrongAnswer => 'Mauvaise réponse';
@override
String get answerNote =>
'✓ = bonne réponse. Plusieurs peuvent être correctes.';
@override
String get geopointZoneTitle => 'Point géographique / Zone';
@override
String get geometryTypeLabel => 'Géométrie (Point/Ligne/Zone) :';
@override
String get phoneModalLabel => 'Téléphone';
@override
String get categoryLabel => 'Catégorie :';
@override
String get startMessageLabel => 'Message départ :';
@override
String get startMessageModalLabel => 'Message départ';
@override
String get createCategoryTitle => 'Création catégorie';
@override
String get editCategoryTitle => 'Modification catégorie';
@override
String get categoryIconLabel => 'Icône catégorie :';
@override
String get selectResource => 'Sélectionner une ressource';
@override
String get createPdfTitle => 'Création PDF';
@override
String get answersLabel => 'Réponses';
@override
String get answerLabel => 'Réponse';
@override
String get createAnswerTitle => 'Créer la réponse';
@override
String get editAnswerTitle => 'Modifier la réponse';
@override
String get answerValidNote => 'Si coché, la réponse est valide';
@override
String get selectConfiguration => 'Sélectionner une configuration';
@override
String get noConfigFound => 'Aucune configuration trouvée';
@override
String get backgroundColorLabel => 'Couleur fond d\'écran :';
@override
String get updateTabletBtn => 'Mettre à jour la tablette';
@override
String get kioskUpdatedSuccess => 'Le kiosk a été mis à jour';
@override
String get webViewError =>
'La page internet ne peut pas être affichée, l\'url est incorrecte ou vide';
@override
String get download => 'Télécharger';
@override
String get resourceDeleteConfirm =>
'Êtes-vous sûr de vouloir supprimer cette ressource ?';
@override
String get categoriesTitle => 'Catégories';
@override
String get endTimeLabel => 'Heure de fin';
@override
String get annotationsLabel => 'Annotations';
@override
String get addStep => 'Ajouter une étape';
@override
String get addQuestion => 'Ajouter une question';
@override
String get deleteStep => 'Supprimer l\'étape';
@override
String get deleteStepConfirm => 'Supprimer cette étape et ses questions ?';
@override
String get pathPanelTitle => 'Le parcours';
@override
String get pathPanelSubtitle => 'Titre, ambiance, progression';
@override
String get stepSummaryEmpty => 'Aucun contenu';
@override
String mediaCount(int count) {
return '$count média(s)';
}
@override
String questionCount(int count) {
return '$count question(s)';
}
@override
String get saveStatusIdle => 'Enregistrement automatique';
@override
String get saveStatusSaving => 'Enregistrement…';
@override
String get saveStatusSaved => 'Enregistré';
@override
String get saveStatusFailed => 'Échec de l\'enregistrement';
@override
String get retry => 'Réessayer';
@override
String get mapProviderMobileOnlyNote =>
'Le fournisseur et le type de carte s\'appliquent aux applications mobile et tablette. L\'application web affiche toujours sa propre carte.';
@override
String get menuAudit => 'Activité';
@override
String get auditTitle => 'Activité';
@override
String get auditSubtitle => 'Qui a modifié quoi, et quand';
@override
String get auditFilterInstance => 'Instance';
@override
String get auditFilterEntity => 'Type d\'élément';
@override
String get auditFilterUser => 'Utilisateur';
@override
String get auditFilterFrom => 'Depuis le';
@override
String get auditFilterTo => 'Jusqu\'au';
@override
String get auditAllInstances => 'Toutes les instances';
@override
String get auditAllEntities => 'Tous les types';
@override
String get auditAllUsers => 'Tous les utilisateurs';
@override
String get auditReset => 'Réinitialiser les filtres';
@override
String get auditColDate => 'Date';
@override
String get auditColInstance => 'Instance';
@override
String get auditColEntity => 'Élément';
@override
String get auditColAction => 'Action';
@override
String get auditColUser => 'Utilisateur';
@override
String get auditColEntityId => 'Identifiant';
@override
String get auditActionCreate => 'Création';
@override
String get auditActionUpdate => 'Modification';
@override
String get auditActionDelete => 'Suppression';
@override
String get auditEntitySection => 'Section';
@override
String get auditEntityResource => 'Ressource';
@override
String get auditEntityConfiguration => 'Configuration';
@override
String get auditEntityDevice => 'Appareil';
@override
String get auditEntityUser => 'Utilisateur';
@override
String get auditEntityInstance => 'Instance';
@override
String get auditEmpty => 'Aucune activité pour ces filtres';
@override
String get auditLoadError => 'Le journal d\'activité n\'a pas pu être chargé';
@override
String auditRange(int first, int last, int total) {
return '$first $last sur $total';
}
@override
String get auditPrevious => 'Page précédente';
@override
String get auditNext => 'Page suivante';
@override
String get auditDetailTitle => 'Détail de la modification';
@override
String get auditDetailField => 'Champ';
@override
String get auditDetailBefore => 'Avant';
@override
String get auditDetailAfter => 'Après';
@override
String get auditDetailNoValues =>
'Le journal ne conserve pas le détail de cette opération.';
@override
String usersCount(int count, int max) {
return '$count / $max utilisateurs';
}
@override
String usersQuotaReached(int max) {
return 'Plafond de $max utilisateurs atteint';
}
@override
String get usersQuotaHint =>
'Supprimez un utilisateur pour en inviter un autre.';
@override
String userCreateError(String message) {
return 'La création a échoué : $message';
}
}