Statistiques — refonte complète, aucun changement backend statistics_screen.dart réécrit (+1832) : barres horizontales monochromes à la place des barres verticales tronquées et des deux anneaux, barre de filtres unique avec les volumes par canal, règle mono-canal, 4 KPI portant chacun leur variation, bandeau « à retenir », courbe en aire avec bandes de week-end. La période précédente s'obtient en rappelant le même endpoint. statistics_report.dart : export PDF généré côté client (paquet pdf Dart), il partage les valeurs calculées de l'écran — un chiffre ne peut pas diverger entre l'écran et le document envoyé à la commune. Deux puces du sommaire promettaient des données inexistantes (parcours terminés, questions au guide IA), retirées. ⚠️ Jamais ouvert dans un navigateur. Cases de test : test-plan.md §8bis / §8ter. Guide IA Screens/GuideIa/guide_ia_screen.dart — onglet Configuration. Menu conditionné à isAssistant, le même drapeau que la garde d'AiController. L'onglet « Ce que demandent vos visiteurs » n'est pas dans ce commit : le schéma backend est prêt, l'UI non. Onboarding self-service Screens/Auth/ (mot de passe oublié, définition du mot de passe), Screens/Billing/subscription_screen.dart, ai_quota_hint.dart. ⚠️ Aucun parcours joué de bout en bout — test-plan.md §18. Parcours guidés progression_mode.dart : 9 booléens sur 3 niveaux remplacés par 3 questions. Popups GuidedPath / GuidedStep / QuizQuestion mises à jour en conséquence. Client API (manager_api_new) — édité À LA MAIN, ne pas relancer la génération onboarding_api.dart, authentication_api.dart (+80), instance_dto (champs Guide*), guided_step / quiz_question_guided_step (flags morts retirés). Le // @dart=2.18 manquant dans onboarding_api.dart cassait les 3 apps Flutter d'un coup — corrigé ici. i18n : ~180 clés par langue (FR/EN/NL) + fichiers générés. Tests : progression_mode_test, statistics_report_test (le second a attrapé deux plantages qui seraient sortis au premier clic). flutter build web ✅. flutter analyze : 68 erreurs, toutes dans les fichiers modèle orphelins de manager_api_new — dette connue, pas une régression, ces fichiers ne sont pas dans le graphe de compilation.
1632 lines
37 KiB
Dart
1632 lines
37 KiB
Dart
// ignore: unused_import
|
|
import 'package:intl/intl.dart' as intl;
|
|
import 'app_localizations.dart';
|
|
|
|
// ignore_for_file: type=lint
|
|
|
|
/// The translations for English (`en`).
|
|
class AppLocalizationsEn extends AppLocalizations {
|
|
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
|
|
|
@override
|
|
String get cancel => 'Cancel';
|
|
|
|
@override
|
|
String get save => 'Save';
|
|
|
|
@override
|
|
String get create => 'Create';
|
|
|
|
@override
|
|
String get delete => 'Delete';
|
|
|
|
@override
|
|
String get close => 'Close';
|
|
|
|
@override
|
|
String get edit => 'Edit';
|
|
|
|
@override
|
|
String get actions => 'Actions';
|
|
|
|
@override
|
|
String get status => 'Status';
|
|
|
|
@override
|
|
String get no => 'No';
|
|
|
|
@override
|
|
String get name => 'Name';
|
|
|
|
@override
|
|
String get type => 'Type';
|
|
|
|
@override
|
|
String get date => 'Date';
|
|
|
|
@override
|
|
String get loginSuccess => 'Login successful';
|
|
|
|
@override
|
|
String get loginError => 'An error occurred during login';
|
|
|
|
@override
|
|
String get rememberMe => 'Remember me';
|
|
|
|
@override
|
|
String get connect => 'LOG IN';
|
|
|
|
@override
|
|
String get forgotPasswordLink => 'Forgot your password?';
|
|
|
|
@override
|
|
String get forgotPasswordTitle => 'Forgot password';
|
|
|
|
@override
|
|
String get forgotPasswordDesc =>
|
|
'Enter your email and we\'ll send you a link to set a new password.';
|
|
|
|
@override
|
|
String get forgotPasswordSubmit => 'SEND LINK';
|
|
|
|
@override
|
|
String get forgotPasswordSuccess =>
|
|
'If this email exists, a reset link has just been sent.';
|
|
|
|
@override
|
|
String get backToLogin => 'Back to login';
|
|
|
|
@override
|
|
String get setPasswordTitle => 'Set your password';
|
|
|
|
@override
|
|
String get setPasswordDesc => 'Choose a password to access your workspace.';
|
|
|
|
@override
|
|
String get setPasswordNewLabel => 'New password';
|
|
|
|
@override
|
|
String get setPasswordSubmit => 'SET PASSWORD';
|
|
|
|
@override
|
|
String get setPasswordSuccess => 'Password set — you can now log in.';
|
|
|
|
@override
|
|
String get setPasswordError => 'This link is invalid or has expired';
|
|
|
|
@override
|
|
String get setPasswordTooShort => 'Password must be at least 8 characters';
|
|
|
|
@override
|
|
String get setPasswordMissingToken => 'Invalid link — no token provided';
|
|
|
|
@override
|
|
String get inviteUserHint =>
|
|
'An invitation email will be sent to set the password.';
|
|
|
|
@override
|
|
String get menuSubscription => 'Subscription';
|
|
|
|
@override
|
|
String get subscriptionTitle => 'Subscription';
|
|
|
|
@override
|
|
String get subscriptionTrialActive => 'Free trial in progress';
|
|
|
|
@override
|
|
String subscriptionTrialEndsAt(Object date) {
|
|
return 'Your trial ends on $date';
|
|
}
|
|
|
|
@override
|
|
String get subscriptionTrialNoDate => 'Your free trial is active.';
|
|
|
|
@override
|
|
String get subscriptionPlanActive => 'Essentiel plan active';
|
|
|
|
@override
|
|
String get subscriptionPlanActiveDesc =>
|
|
'Your subscription is active and renews automatically.';
|
|
|
|
@override
|
|
String get subscriptionIncludedTitle => 'What\'s included';
|
|
|
|
@override
|
|
String get subscriptionUpgradeBtn => 'Upgrade to a paid subscription';
|
|
|
|
@override
|
|
String get subscriptionCheckoutError =>
|
|
'Could not start checkout, please try again later.';
|
|
|
|
@override
|
|
String get subscriptionAddonsTitle => 'Add-ons';
|
|
|
|
@override
|
|
String get subscriptionAddonsComingSoon =>
|
|
'Coming soon: extra AI requests and other options.';
|
|
|
|
@override
|
|
String get menuApplications => 'Applications';
|
|
|
|
@override
|
|
String get menuConfigurations => 'Configurations';
|
|
|
|
@override
|
|
String get menuResources => 'Resources';
|
|
|
|
@override
|
|
String get menuStatistics => 'Statistics';
|
|
|
|
@override
|
|
String get menuGuideIa => 'AI Guide';
|
|
|
|
@override
|
|
String get guideIaSubtitle =>
|
|
'Your guide answers visitor questions using your own content. It never answers from anything else.';
|
|
|
|
@override
|
|
String get guideIaUsageTitle => 'This month\'s usage';
|
|
|
|
@override
|
|
String guideIaUsageQuestions(Object count) {
|
|
return '$count questions asked';
|
|
}
|
|
|
|
@override
|
|
String get guideIaUsageNoQuota => 'No cap set on your plan.';
|
|
|
|
@override
|
|
String get guideIaChannelsTitle => 'Where the guide is available';
|
|
|
|
@override
|
|
String get guideIaChannelsSub =>
|
|
'Enabled per channel, from each application\'s settings.';
|
|
|
|
@override
|
|
String get guideIaChannelOn => 'Enabled';
|
|
|
|
@override
|
|
String get guideIaChannelOff => 'Disabled';
|
|
|
|
@override
|
|
String get guideIaIdentityTitle => 'Guide identity';
|
|
|
|
@override
|
|
String get guideIaIdentitySub => 'This is what gives the answers their tone';
|
|
|
|
@override
|
|
String get guideIaNameLabel => 'Guide name';
|
|
|
|
@override
|
|
String get guideIaNameHint => 'The name visitors see and hear. E.g. Leon';
|
|
|
|
@override
|
|
String get guideIaPersonaLabel => 'Personality';
|
|
|
|
@override
|
|
String get guideIaPersonaHint =>
|
|
'Describe it the way you would introduce a guide to a new colleague. To get started, pick an example:';
|
|
|
|
@override
|
|
String get guideIaExampleWarden => 'Passionate warden';
|
|
|
|
@override
|
|
String get guideIaExampleWardenText =>
|
|
'Your name is Leon, you are the site\'s former warden. You speak plainly and warmly, and you happily slip in an anecdote. Address visitors politely.';
|
|
|
|
@override
|
|
String get guideIaExampleSober => 'Measured mediator';
|
|
|
|
@override
|
|
String get guideIaExampleSoberText =>
|
|
'You are a calm, precise cultural mediator. You answer in two or three sentences, without familiarity, citing established facts. If something is uncertain, you say so.';
|
|
|
|
@override
|
|
String get guideIaExampleKids => 'For children';
|
|
|
|
@override
|
|
String get guideIaExampleKidsText =>
|
|
'You are an enthusiastic explorer speaking to children aged 7 to 12. Use informal language, ask questions, use simple comparisons and short words. Tell stories.';
|
|
|
|
@override
|
|
String get guideIaFallbackLabel => 'When the guide doesn\'t know';
|
|
|
|
@override
|
|
String get guideIaFallbackHint =>
|
|
'The guide picks one at random. With a single sentence it repeats it word for word, and that shows immediately.';
|
|
|
|
@override
|
|
String get guideIaFallbackAdd => 'Add a wording';
|
|
|
|
@override
|
|
String get guideIaFallbackTranslated =>
|
|
'Visitors see these sentences: they will be translated into their language, like the rest of your content.';
|
|
|
|
@override
|
|
String get guideIaVoiceTitle => 'Your guide out loud';
|
|
|
|
@override
|
|
String get guideIaVoiceSub =>
|
|
'Visitors ask out loud and hear the answer — in the app, or in their connected glasses.';
|
|
|
|
@override
|
|
String get guideIaVoiceFemale => 'Female voice, warm';
|
|
|
|
@override
|
|
String get guideIaVoiceMale => 'Male voice, steady';
|
|
|
|
@override
|
|
String guideIaVoiceWakeword(Object word) {
|
|
return 'Wake word: \"$word\"';
|
|
}
|
|
|
|
@override
|
|
String guideIaVoiceInfoName(Object word) {
|
|
return 'Visitors say \"$word\" to wake the guide, even if it goes by another name. A voice and wake word of your own are available as an option.';
|
|
}
|
|
|
|
@override
|
|
String get guideIaVoiceInfoGlasses =>
|
|
'Connected glasses work with the mobile app installed on the visitor\'s phone.';
|
|
|
|
@override
|
|
String get guideIaVoiceInfoMultilang =>
|
|
'The same voice speaks all your languages: your guide keeps one identity across them.';
|
|
|
|
@override
|
|
String get guideIaSave => 'Save';
|
|
|
|
@override
|
|
String get guideIaSaved => 'Guide saved';
|
|
|
|
@override
|
|
String get guideIaSaveError => 'Saving failed. Please try again.';
|
|
|
|
@override
|
|
String get menuNotifications => 'Notifications';
|
|
|
|
@override
|
|
String get menuUsers => 'Users';
|
|
|
|
@override
|
|
String get menuApiKeys => 'API Keys';
|
|
|
|
@override
|
|
String get noPlansAvailable => 'No plans available. Create a plan first.';
|
|
|
|
@override
|
|
String get noPlan => 'No plan (unlimited)';
|
|
|
|
@override
|
|
String get unlimitedStorage => 'Unlimited storage';
|
|
|
|
@override
|
|
String get unlimitedAI => 'Unlimited AI';
|
|
|
|
@override
|
|
String aiTokensPerMonth(String amount) {
|
|
return '$amount AI tokens/month';
|
|
}
|
|
|
|
@override
|
|
String get storageLabel => 'Storage';
|
|
|
|
@override
|
|
String get aiThisMonthLabel => 'AI this month';
|
|
|
|
@override
|
|
String get unlimited => 'Unlimited';
|
|
|
|
@override
|
|
String get requestsAbbr => 'req';
|
|
|
|
@override
|
|
String get tokensAbbr => 'tokens';
|
|
|
|
@override
|
|
String get planUpdated => 'Plan updated';
|
|
|
|
@override
|
|
String errorMessage(String error) {
|
|
return 'Error: $error';
|
|
}
|
|
|
|
@override
|
|
String get switchInstance => 'Switch instance';
|
|
|
|
@override
|
|
String get noInstanceFound => 'No instance found';
|
|
|
|
@override
|
|
String get configurePlan => 'Configure plan';
|
|
|
|
@override
|
|
String get tooltipSwitchInstance => 'Switch instance';
|
|
|
|
@override
|
|
String get tooltipLogout => 'Log out';
|
|
|
|
@override
|
|
String get usersTitle => 'Users';
|
|
|
|
@override
|
|
String get createUserBtn => 'Create user';
|
|
|
|
@override
|
|
String get createUserTitle => 'Create user';
|
|
|
|
@override
|
|
String get editUserTitle => 'Edit user';
|
|
|
|
@override
|
|
String get deleteUserTitle => 'Delete user';
|
|
|
|
@override
|
|
String deleteUserConfirm(String email) {
|
|
return 'Delete $email?';
|
|
}
|
|
|
|
@override
|
|
String get noUsers => 'No users';
|
|
|
|
@override
|
|
String get email => 'Email';
|
|
|
|
@override
|
|
String get firstName => 'First name';
|
|
|
|
@override
|
|
String get lastName => 'Last name';
|
|
|
|
@override
|
|
String get password => 'Password';
|
|
|
|
@override
|
|
String get role => 'Role';
|
|
|
|
@override
|
|
String get tooltipEdit => 'Edit';
|
|
|
|
@override
|
|
String get tooltipDelete => 'Delete';
|
|
|
|
@override
|
|
String get notificationsTitle => 'Notifications';
|
|
|
|
@override
|
|
String get newMessage => 'New message';
|
|
|
|
@override
|
|
String get messageTitle => 'Title';
|
|
|
|
@override
|
|
String get messageBody => 'Message';
|
|
|
|
@override
|
|
String get schedule => 'Schedule';
|
|
|
|
@override
|
|
String get time => 'Time';
|
|
|
|
@override
|
|
String get send => 'Send';
|
|
|
|
@override
|
|
String get cancelNotification => 'Cancel notification';
|
|
|
|
@override
|
|
String cancelNotificationConfirm(String title) {
|
|
return 'Cancel « $title »?';
|
|
}
|
|
|
|
@override
|
|
String get allNotifications => 'All';
|
|
|
|
@override
|
|
String get sentNotifications => 'Sent';
|
|
|
|
@override
|
|
String get scheduledNotifications => 'Scheduled';
|
|
|
|
@override
|
|
String get failedNotifications => 'Failed';
|
|
|
|
@override
|
|
String get noNotifications => 'No notifications sent';
|
|
|
|
@override
|
|
String get noNotificationsForFilter => 'No notifications for this filter';
|
|
|
|
@override
|
|
String get topic => 'Topic';
|
|
|
|
@override
|
|
String get tooltipCancelNotification => 'Cancel';
|
|
|
|
@override
|
|
String resultsCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count results',
|
|
one: '$count result',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get apiKeysTitle => 'API Keys';
|
|
|
|
@override
|
|
String get createApiKey => 'Create API key';
|
|
|
|
@override
|
|
String get createKeyBtn => 'Create key';
|
|
|
|
@override
|
|
String get appType => 'Application type';
|
|
|
|
@override
|
|
String get noExpiration => 'No expiration';
|
|
|
|
@override
|
|
String expiresOn(String date) {
|
|
return 'Expires on $date';
|
|
}
|
|
|
|
@override
|
|
String get choose => 'Choose';
|
|
|
|
@override
|
|
String get removeExpiration => 'Remove expiration';
|
|
|
|
@override
|
|
String get apiKeyCreatedTitle => 'API key created';
|
|
|
|
@override
|
|
String get copyKeyWarning => 'Copy this key now — it won\'t be shown again.';
|
|
|
|
@override
|
|
String get copy => 'Copy';
|
|
|
|
@override
|
|
String get copiedKey => 'I\'ve copied the key';
|
|
|
|
@override
|
|
String get revokeApiKeyTitle => 'Revoke API key';
|
|
|
|
@override
|
|
String revokeApiKeyConfirm(String name) {
|
|
return 'Revoke « $name »? Apps using this key will lose access.';
|
|
}
|
|
|
|
@override
|
|
String get revoke => 'Revoke';
|
|
|
|
@override
|
|
String get noApiKeys => 'No API keys';
|
|
|
|
@override
|
|
String get createdOn => 'Created on';
|
|
|
|
@override
|
|
String get expiration => 'Expiration';
|
|
|
|
@override
|
|
String get activeKey => 'Active';
|
|
|
|
@override
|
|
String get revokedKey => 'Revoked';
|
|
|
|
@override
|
|
String get tooltipRevoke => 'Revoke';
|
|
|
|
@override
|
|
String get statisticsTitle => 'Statistics';
|
|
|
|
@override
|
|
String get statsLoadError => 'Unable to load statistics';
|
|
|
|
@override
|
|
String get statsNoData => 'No data yet for this period';
|
|
|
|
@override
|
|
String statsNoDataForType(String type) {
|
|
return 'No events received for type \"$type\"';
|
|
}
|
|
|
|
@override
|
|
String get statsSessions => 'Sessions';
|
|
|
|
@override
|
|
String get statsAvgDuration => 'Avg. duration';
|
|
|
|
@override
|
|
String get statsTopApp => 'Top app';
|
|
|
|
@override
|
|
String get statsTopLang => 'Top language';
|
|
|
|
@override
|
|
String get statsVisitsByDay => 'Visits per day';
|
|
|
|
@override
|
|
String get statsAll => 'All';
|
|
|
|
@override
|
|
String get statsTopSections => 'Top sections';
|
|
|
|
@override
|
|
String get statsApps => 'Apps';
|
|
|
|
@override
|
|
String get statsLanguages => 'Languages';
|
|
|
|
@override
|
|
String get statsTopPOI => 'Top POI';
|
|
|
|
@override
|
|
String get statsPOI => 'POI';
|
|
|
|
@override
|
|
String get statsTaps => 'Taps';
|
|
|
|
@override
|
|
String get statsTopAgenda => 'Top agenda events';
|
|
|
|
@override
|
|
String get statsEvent => 'Event';
|
|
|
|
@override
|
|
String get statsQuiz => 'Quiz';
|
|
|
|
@override
|
|
String get statsSection => 'Section';
|
|
|
|
@override
|
|
String get statsAvgScore => 'Avg. score';
|
|
|
|
@override
|
|
String get statsCompletions => 'Completions';
|
|
|
|
@override
|
|
String get statsGames => 'Games';
|
|
|
|
@override
|
|
String get statsGameType => 'Type';
|
|
|
|
@override
|
|
String get statsArticles => 'Articles read';
|
|
|
|
@override
|
|
String get statsReadings => 'Reads';
|
|
|
|
@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 => 'Valid';
|
|
|
|
@override
|
|
String get statsInvalid => 'Invalid';
|
|
|
|
@override
|
|
String get statsViews => 'Views';
|
|
|
|
@override
|
|
String get statsAttendanceTitle => 'Attendance';
|
|
|
|
@override
|
|
String statsPeriodRange(String from, String to) {
|
|
return 'From $from to $to';
|
|
}
|
|
|
|
@override
|
|
String get statsFilterPeriod => 'Period';
|
|
|
|
@override
|
|
String get statsFilterChannel => 'Channel';
|
|
|
|
@override
|
|
String statsPeriodDays(int days) {
|
|
return '$days days';
|
|
}
|
|
|
|
@override
|
|
String get statsPeriodYear => 'Year';
|
|
|
|
@override
|
|
String get statsChannelMobile => 'Mobile app';
|
|
|
|
@override
|
|
String get statsChannelTablet => 'Kiosk';
|
|
|
|
@override
|
|
String get statsChannelWeb => 'Website';
|
|
|
|
@override
|
|
String get statsChannelVR => 'VR headset';
|
|
|
|
@override
|
|
String get statsChannelVoice => 'Voice guide';
|
|
|
|
@override
|
|
String statsTakeawayUp(String percent) {
|
|
return 'Attendance is up $percent % compared to the previous period.';
|
|
}
|
|
|
|
@override
|
|
String statsTakeawayDown(String percent) {
|
|
return 'Attendance is down $percent % compared to the previous period.';
|
|
}
|
|
|
|
@override
|
|
String get statsTakeawayStable =>
|
|
'Attendance is stable compared to the previous period.';
|
|
|
|
@override
|
|
String statsTakeawayVolume(String visits, String perDay) {
|
|
return '$visits visits over the period, or $perDay a day on average.';
|
|
}
|
|
|
|
@override
|
|
String statsTakeawayVoice(String percent) {
|
|
return 'The voice guide accounts for $percent % of visits — a strong argument for your funding bodies.';
|
|
}
|
|
|
|
@override
|
|
String statsTakeawayChannel(String channel, String percent) {
|
|
return 'The « $channel » channel accounts for $percent % of visits.';
|
|
}
|
|
|
|
@override
|
|
String statsTakeawayContent(String title, String percent) {
|
|
return '« $title » alone accounts for $percent % of all views: it is your front door, keep it up to date first.';
|
|
}
|
|
|
|
@override
|
|
String get statsKpiVisits => 'Visits';
|
|
|
|
@override
|
|
String get statsKpiAvgDuration => 'Average duration';
|
|
|
|
@override
|
|
String get statsKpiContentsPerVisit => 'Contents per visit';
|
|
|
|
@override
|
|
String get statsKpiVoiceShare => 'Voice guide share';
|
|
|
|
@override
|
|
String get statsKpiTotalViews => 'Contents viewed';
|
|
|
|
@override
|
|
String get statsVsPrevious => 'vs previous period';
|
|
|
|
@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 => 'Light bands mark the weekends';
|
|
|
|
@override
|
|
String get statsWeekends => 'Saturdays and Sundays';
|
|
|
|
@override
|
|
String statsPeakDay(String date, String visits) {
|
|
return 'Peak on $date — $visits visits';
|
|
}
|
|
|
|
@override
|
|
String get statsTopContents => 'Most viewed contents';
|
|
|
|
@override
|
|
String get statsTopContentsSub => 'Number of views over the period';
|
|
|
|
@override
|
|
String get statsChannels => 'Channels';
|
|
|
|
@override
|
|
String get statsChannelsSub => 'Visits per channel';
|
|
|
|
@override
|
|
String get statsLanguagesSub => 'Visits per language';
|
|
|
|
@override
|
|
String get statsReportTitle => 'Your attendance report';
|
|
|
|
@override
|
|
String get statsReportBody =>
|
|
'A document in your own colours, ready to send to your municipality, your board or your funding bodies.';
|
|
|
|
@override
|
|
String get statsReportItemAttendance =>
|
|
'Attendance, visit durations and trend';
|
|
|
|
@override
|
|
String get statsReportItemContents => 'Most viewed contents and their trend';
|
|
|
|
@override
|
|
String get statsReportItemChannels =>
|
|
'Breakdown per channel, including the voice guide, and per language';
|
|
|
|
@override
|
|
String get statsReportItemAdvanced =>
|
|
'Points of interest, quizzes, games and QR scans';
|
|
|
|
@override
|
|
String statsReportGenerated(String date) {
|
|
return 'Report generated on $date with MyInfoMate';
|
|
}
|
|
|
|
@override
|
|
String get statsReportError => 'The report could not be generated';
|
|
|
|
@override
|
|
String get statsReportDownload => 'Download the PDF';
|
|
|
|
@override
|
|
String get statsAdvancedTitle => 'Advanced statistics';
|
|
|
|
@override
|
|
String get statsAdvancedBody =>
|
|
'Detailed statistics (POI, quizzes, games, articles, QR…) are available with the Premium plan.';
|
|
|
|
@override
|
|
String get statsUnavailableTitle => 'Statistics not included';
|
|
|
|
@override
|
|
String get statsUnavailableBody =>
|
|
'Your current plan does not include attendance statistics.';
|
|
|
|
@override
|
|
String get noData => 'No data';
|
|
|
|
@override
|
|
String get errorOccurred => 'An error occurred';
|
|
|
|
@override
|
|
String get yes => 'Yes';
|
|
|
|
@override
|
|
String get newConfiguration => 'New configuration';
|
|
|
|
@override
|
|
String get configNameLabel => 'Name:';
|
|
|
|
@override
|
|
String get orText => 'or';
|
|
|
|
@override
|
|
String get importLabel => 'Import';
|
|
|
|
@override
|
|
String get configNameRequired => 'Please specify a name for the new visit';
|
|
|
|
@override
|
|
String get configCreatedSuccess => 'Configuration created successfully';
|
|
|
|
@override
|
|
String configExportSuccess(String path) {
|
|
return 'Configuration exported successfully, file is at: $path';
|
|
}
|
|
|
|
@override
|
|
String get configExportFailed => 'Configuration export failed';
|
|
|
|
@override
|
|
String get configDeletedSuccess => 'Configuration deleted successfully';
|
|
|
|
@override
|
|
String get configSavedSuccess => 'Configuration saved successfully';
|
|
|
|
@override
|
|
String get configDeleteConfirm =>
|
|
'Are you sure you want to delete this configuration?';
|
|
|
|
@override
|
|
String get newSection => 'New section';
|
|
|
|
@override
|
|
String get newSubSection => 'New sub section';
|
|
|
|
@override
|
|
String get sectionNameLabel => 'Name:';
|
|
|
|
@override
|
|
String get sectionTypeLabel => 'Type:';
|
|
|
|
@override
|
|
String get sectionNameRequired => 'Please specify a name for the new section';
|
|
|
|
@override
|
|
String get sectionCreatedSuccess => 'Section created successfully!';
|
|
|
|
@override
|
|
String get sectionDeleteConfirm =>
|
|
'Are you sure you want to delete this section?';
|
|
|
|
@override
|
|
String get sectionSavedSuccess => 'Section saved successfully';
|
|
|
|
@override
|
|
String get sectionTranslationSaved =>
|
|
'Section translations saved successfully';
|
|
|
|
@override
|
|
String get sectionLoadError => 'An error occurred while loading the section';
|
|
|
|
@override
|
|
String get qrCodeCopied => 'This QR code has been copied to the clipboard';
|
|
|
|
@override
|
|
String get beaconLabel => 'Beacon:';
|
|
|
|
@override
|
|
String get beaconIdLabel => 'Beacon ID:';
|
|
|
|
@override
|
|
String get beaconMustBeNumber => 'This must be a number';
|
|
|
|
@override
|
|
String get identifierLabel => 'Identifier:';
|
|
|
|
@override
|
|
String get displayTitleLabel => 'Display title:';
|
|
|
|
@override
|
|
String get imageLabel => 'Image:';
|
|
|
|
@override
|
|
String get backgroundImageLabel => 'Background image:';
|
|
|
|
@override
|
|
String get questionInputLabel => 'Question:';
|
|
|
|
@override
|
|
String get videoUrlLabel => 'Video URL:';
|
|
|
|
@override
|
|
String get webUrlLabel => 'Website URL:';
|
|
|
|
@override
|
|
String get subSectionUpdatedSuccess => 'Sub section updated successfully';
|
|
|
|
@override
|
|
String get subSectionUpdateError =>
|
|
'An error occurred while updating the sub section';
|
|
|
|
@override
|
|
String get subSectionDeletedSuccess => 'Sub section deleted successfully';
|
|
|
|
@override
|
|
String get subSectionDeleteError =>
|
|
'An error occurred while deleting the sub section';
|
|
|
|
@override
|
|
String get subSectionOrderUpdatedSuccess =>
|
|
'Sub section order updated successfully';
|
|
|
|
@override
|
|
String get subSectionOrderUpdateError =>
|
|
'An error occurred while updating the sub section order';
|
|
|
|
@override
|
|
String get subSectionCreatedSuccess => 'Sub section created successfully';
|
|
|
|
@override
|
|
String get subSectionCreateError =>
|
|
'An error occurred while creating the sub section';
|
|
|
|
@override
|
|
String get questionsLabel => 'Questions';
|
|
|
|
@override
|
|
String get questionLabel => 'Question';
|
|
|
|
@override
|
|
String get editQuestion => 'Edit question';
|
|
|
|
@override
|
|
String get questionDeleteConfirm =>
|
|
'Are you sure you want to delete this question?';
|
|
|
|
@override
|
|
String get questionsLoadError =>
|
|
'An error occurred while loading the questions';
|
|
|
|
@override
|
|
String get quizBadScore => 'Bad score';
|
|
|
|
@override
|
|
String get quizMediumScore => 'Medium score';
|
|
|
|
@override
|
|
String get quizGoodScore => 'Good score';
|
|
|
|
@override
|
|
String get quizExcellentScore => 'Excellent score';
|
|
|
|
@override
|
|
String get quizBadScoreMsg => 'Message for a bad score';
|
|
|
|
@override
|
|
String get quizMediumScoreMsg => 'Message for a medium score';
|
|
|
|
@override
|
|
String get quizGoodScoreMsg => 'Message for a good score';
|
|
|
|
@override
|
|
String get quizExcellentScoreMsg => 'Message for an excellent score';
|
|
|
|
@override
|
|
String get questionOrderUpdatedSuccess =>
|
|
'Question order updated successfully';
|
|
|
|
@override
|
|
String get questionOrderUpdateError =>
|
|
'An error occurred while updating the question order';
|
|
|
|
@override
|
|
String get questionCreatedSuccess => 'Question created successfully';
|
|
|
|
@override
|
|
String get questionCreateError =>
|
|
'An error occurred while creating the question';
|
|
|
|
@override
|
|
String get questionUpdatedSuccess => 'Question updated successfully';
|
|
|
|
@override
|
|
String get questionUpdateError =>
|
|
'An error occurred while updating the question';
|
|
|
|
@override
|
|
String get questionDeletedSuccess => 'Question deleted successfully';
|
|
|
|
@override
|
|
String get questionDeleteError =>
|
|
'An error occurred while deleting the question';
|
|
|
|
@override
|
|
String get translationIncomplete => 'Translation is incomplete';
|
|
|
|
@override
|
|
String get geopointCreatedSuccess => 'Point created successfully';
|
|
|
|
@override
|
|
String get geopointCreateError =>
|
|
'An error occurred while creating the point';
|
|
|
|
@override
|
|
String get geopointUpdatedSuccess => 'Point updated successfully';
|
|
|
|
@override
|
|
String get geopointUpdateError =>
|
|
'An error occurred while updating the point';
|
|
|
|
@override
|
|
String get geopointDeletedSuccess => 'Point deleted successfully';
|
|
|
|
@override
|
|
String get geopointDeleteError =>
|
|
'An error occurred while deleting the point';
|
|
|
|
@override
|
|
String get categoryCreatedSuccess => 'Category created successfully';
|
|
|
|
@override
|
|
String get categoryCreateError =>
|
|
'An error occurred while creating the category';
|
|
|
|
@override
|
|
String get categoryUpdatedSuccess => 'Category updated successfully';
|
|
|
|
@override
|
|
String get categoryUpdateError =>
|
|
'An error occurred while updating the category';
|
|
|
|
@override
|
|
String get eventCreatedSuccess => 'Event created successfully';
|
|
|
|
@override
|
|
String get eventCreateError => 'An error occurred while creating the event';
|
|
|
|
@override
|
|
String get eventUpdatedSuccess => 'Event updated successfully';
|
|
|
|
@override
|
|
String get eventUpdateError => 'An error occurred while updating the event';
|
|
|
|
@override
|
|
String get eventDeletedSuccess => 'Event deleted successfully';
|
|
|
|
@override
|
|
String get eventDeleteError => 'An error occurred while deleting the event';
|
|
|
|
@override
|
|
String get annotationCreatedSuccess => 'Annotation created successfully';
|
|
|
|
@override
|
|
String get annotationCreateError =>
|
|
'An error occurred while creating the annotation';
|
|
|
|
@override
|
|
String get annotationUpdatedSuccess => 'Annotation updated successfully';
|
|
|
|
@override
|
|
String get annotationUpdateError =>
|
|
'An error occurred while updating the annotation';
|
|
|
|
@override
|
|
String get programmeBlockCreatedSuccess => 'Block created successfully';
|
|
|
|
@override
|
|
String get programmeBlockCreateError =>
|
|
'An error occurred while creating the block';
|
|
|
|
@override
|
|
String get programmeBlockUpdatedSuccess => 'Block updated successfully';
|
|
|
|
@override
|
|
String get programmeBlockUpdateError =>
|
|
'An error occurred while updating the block';
|
|
|
|
@override
|
|
String get pathCreatedSuccess => 'Path created successfully';
|
|
|
|
@override
|
|
String get pathCreateError => 'An error occurred while creating the path';
|
|
|
|
@override
|
|
String get pathUpdatedSuccess => 'Path updated successfully';
|
|
|
|
@override
|
|
String get pathUpdateError => 'An error occurred while updating the path';
|
|
|
|
@override
|
|
String get stepCreatedSuccess => 'Step created successfully';
|
|
|
|
@override
|
|
String get stepCreateError => 'An error occurred while creating the step';
|
|
|
|
@override
|
|
String get stepUpdatedSuccess => 'Step updated successfully';
|
|
|
|
@override
|
|
String get stepUpdateError => 'An error occurred while updating the step';
|
|
|
|
@override
|
|
String get agendaEventsLabel => 'Events';
|
|
|
|
@override
|
|
String get agendaEventFallback => 'Event';
|
|
|
|
@override
|
|
String get addEvent => 'Add an event';
|
|
|
|
@override
|
|
String get noEvents => 'No events';
|
|
|
|
@override
|
|
String get noAddress => 'No address';
|
|
|
|
@override
|
|
String get agendaFilterAll => 'All';
|
|
|
|
@override
|
|
String get agendaFilterThisMonth => 'This month';
|
|
|
|
@override
|
|
String get agendaFilterThisYear => 'This year';
|
|
|
|
@override
|
|
String get agendaFilterPast => 'Past';
|
|
|
|
@override
|
|
String get agendaEventDeleteConfirm =>
|
|
'Are you sure you want to delete this event?';
|
|
|
|
@override
|
|
String get onlineLabel => 'Online:';
|
|
|
|
@override
|
|
String get mapViewLabel => 'Map view:';
|
|
|
|
@override
|
|
String get mapServiceLabel => 'Map service:';
|
|
|
|
@override
|
|
String get jsonFilesLabel => 'JSON files:';
|
|
|
|
@override
|
|
String get jsonLabel => 'JSON';
|
|
|
|
@override
|
|
String get guidedPathsLabel => 'Guided Paths';
|
|
|
|
@override
|
|
String get addPath => 'Add a path';
|
|
|
|
@override
|
|
String get noPathConfigured => 'No path configured';
|
|
|
|
@override
|
|
String get pathOrderUpdateError => 'Error updating order';
|
|
|
|
@override
|
|
String get pathNoTitle => 'Untitled path';
|
|
|
|
@override
|
|
String get pathDeletedSuccess => 'Path deleted successfully';
|
|
|
|
@override
|
|
String get pathDeleteError => 'Error deleting path';
|
|
|
|
@override
|
|
String get pathsLabel => 'Paths';
|
|
|
|
@override
|
|
String get pointsOfInterestLabel => 'Points of Interest';
|
|
|
|
@override
|
|
String get geopointsLabel => 'Geographic points';
|
|
|
|
@override
|
|
String get searchLabel => 'Search:';
|
|
|
|
@override
|
|
String get geopointsLoadError => 'Error loading geographic points';
|
|
|
|
@override
|
|
String get geopointDeleteConfirm =>
|
|
'Are you sure you want to delete this geographic point?';
|
|
|
|
@override
|
|
String get serviceLabel => 'Service:';
|
|
|
|
@override
|
|
String get centerPointLabel => 'Center point:';
|
|
|
|
@override
|
|
String get iconLabel => 'Icon:';
|
|
|
|
@override
|
|
String get listViewLabel => 'List view:';
|
|
|
|
@override
|
|
String get typeLabel => 'Type:';
|
|
|
|
@override
|
|
String get zoomLabel => 'Zoom:';
|
|
|
|
@override
|
|
String get categoriesLabel => 'Categories:';
|
|
|
|
@override
|
|
String get startDateLabel => 'Start date';
|
|
|
|
@override
|
|
String get notDefined => 'Not defined';
|
|
|
|
@override
|
|
String get endDateLabel => 'End date';
|
|
|
|
@override
|
|
String get programmeLabel => 'Programme';
|
|
|
|
@override
|
|
String get addBlock => 'Add a block';
|
|
|
|
@override
|
|
String get blockFallback => 'Block';
|
|
|
|
@override
|
|
String get noBlocks => 'No programme blocks defined';
|
|
|
|
@override
|
|
String get programmeBlockDeletedSuccess => 'Block deleted successfully';
|
|
|
|
@override
|
|
String get programmeBlockDeleteError => 'Error deleting block';
|
|
|
|
@override
|
|
String get baseMapLabel => 'Base map';
|
|
|
|
@override
|
|
String get mapLabel => 'Map:';
|
|
|
|
@override
|
|
String get globalAnnotationsLabel => 'Global annotations';
|
|
|
|
@override
|
|
String get addAnnotation => 'Add an annotation';
|
|
|
|
@override
|
|
String get noAnnotations => 'No global annotations';
|
|
|
|
@override
|
|
String get annotationFallback => 'Annotation';
|
|
|
|
@override
|
|
String get annotationDeletedSuccess => 'Annotation deleted';
|
|
|
|
@override
|
|
String get annotationDeleteError => 'Error deleting';
|
|
|
|
@override
|
|
String get agendaEventCreatedSuccess => 'Event created successfully';
|
|
|
|
@override
|
|
String get agendaEventCreateError =>
|
|
'An error occurred while creating the event';
|
|
|
|
@override
|
|
String get agendaEventUpdatedSuccess => 'Event updated successfully';
|
|
|
|
@override
|
|
String get agendaEventUpdateError =>
|
|
'An error occurred while updating the event';
|
|
|
|
@override
|
|
String get agendaEventDeletedSuccess => 'Event deleted successfully';
|
|
|
|
@override
|
|
String get agendaEventDeleteError =>
|
|
'An error occurred while deleting the event';
|
|
|
|
@override
|
|
String get newResource => 'New resource';
|
|
|
|
@override
|
|
String get resourceCreatedSuccess => 'Resource created successfully';
|
|
|
|
@override
|
|
String get resourceCreateError =>
|
|
'An error occurred while creating the resource';
|
|
|
|
@override
|
|
String get resourceUpdatedSuccess => 'Resource updated successfully';
|
|
|
|
@override
|
|
String get resourceNoFileLoaded => 'No file has been loaded';
|
|
|
|
@override
|
|
String get resourceNameRequired => 'Please give the resource a name';
|
|
|
|
@override
|
|
String get resourceTooLarge => 'Error: resource size must be under 1.5MB';
|
|
|
|
@override
|
|
String get resourceInvalidUrl => 'The URL is invalid';
|
|
|
|
@override
|
|
String get resourceUrlRequired => 'Please fill in the URL field';
|
|
|
|
@override
|
|
String get generalInfo => 'General information';
|
|
|
|
@override
|
|
String get mainImageLabel => 'Main image:';
|
|
|
|
@override
|
|
String get loaderLabel => 'Loader:';
|
|
|
|
@override
|
|
String get primaryColorLabel => 'Primary color:';
|
|
|
|
@override
|
|
String get secondaryColorLabel => 'Secondary color:';
|
|
|
|
@override
|
|
String get layoutLabel => 'Layout:';
|
|
|
|
@override
|
|
String get layoutGrid => 'Grid';
|
|
|
|
@override
|
|
String get languagesLabel => 'Languages:';
|
|
|
|
@override
|
|
String get featuredEventLabel => 'Featured event:';
|
|
|
|
@override
|
|
String get chooseEvent => 'Choose an event';
|
|
|
|
@override
|
|
String get previewWebTitle => 'Preview — Web';
|
|
|
|
@override
|
|
String get previewMobileTitle => 'Preview — Mobile';
|
|
|
|
@override
|
|
String get previewDesktop => 'Desktop';
|
|
|
|
@override
|
|
String get previewMobile => 'Mobile';
|
|
|
|
@override
|
|
String get noneOption => 'None';
|
|
|
|
@override
|
|
String get aiAssistantLabel => 'AI assistant:';
|
|
|
|
@override
|
|
String get appUpdatedSuccess => 'Mobile application updated';
|
|
|
|
@override
|
|
String get configActivatedSuccess => 'Configuration activated successfully';
|
|
|
|
@override
|
|
String get configDeactivatedSuccess =>
|
|
'Configuration deactivated successfully';
|
|
|
|
@override
|
|
String get configRemoveConfirm =>
|
|
'Are you sure you want to remove this configuration from the application?';
|
|
|
|
@override
|
|
String get configRemovedSuccess =>
|
|
'Configuration removed from application successfully';
|
|
|
|
@override
|
|
String get configRemoveError =>
|
|
'An error occurred while removing the configuration';
|
|
|
|
@override
|
|
String get phoneConfigTitle => 'Configurations per device';
|
|
|
|
@override
|
|
String get addConfig => 'Add a configuration';
|
|
|
|
@override
|
|
String get selectConfigToAdd => 'Select a configuration to add';
|
|
|
|
@override
|
|
String get noItems => 'No items to display';
|
|
|
|
@override
|
|
String get add => 'Add';
|
|
|
|
@override
|
|
String pinCode(String code) {
|
|
return 'Pin code: $code';
|
|
}
|
|
|
|
@override
|
|
String get tablets => 'Tablets';
|
|
|
|
@override
|
|
String stepsCount(int count) {
|
|
return '$count steps';
|
|
}
|
|
|
|
@override
|
|
String get displayedDescriptionLabel => 'Displayed description:';
|
|
|
|
@override
|
|
String get displayedContentLabel => 'Displayed content:';
|
|
|
|
@override
|
|
String get displayedNameLabel => 'Display name:';
|
|
|
|
@override
|
|
String get startTimeLabel => 'Start time';
|
|
|
|
@override
|
|
String get noAnnotationConfigured => 'No annotations configured.';
|
|
|
|
@override
|
|
String get newStepTitle => 'New step';
|
|
|
|
@override
|
|
String get editStepTitle => 'Edit step';
|
|
|
|
@override
|
|
String get stepTitleLabel => 'Step title';
|
|
|
|
@override
|
|
String get stepDescriptionLabel => 'Step description';
|
|
|
|
@override
|
|
String get stepLocationLabel => 'Step location:';
|
|
|
|
@override
|
|
String get initiallyHiddenLabel => 'Initially hidden';
|
|
|
|
@override
|
|
String get lockedLabel => 'Locked';
|
|
|
|
@override
|
|
String get durationSecondsLabel => 'Duration (seconds):';
|
|
|
|
@override
|
|
String get triggerGeopointLabel => 'Trigger GeoPoint (ID):';
|
|
|
|
@override
|
|
String get questionsChallengesLabel => 'Questions / Challenges';
|
|
|
|
@override
|
|
String get noQuestionsConfigured => 'No questions configured.';
|
|
|
|
@override
|
|
String get newAgendaEventTitle => 'New event';
|
|
|
|
@override
|
|
String get editAgendaEventTitle => 'Edit event';
|
|
|
|
@override
|
|
String get eventTitleLabel => 'Event title';
|
|
|
|
@override
|
|
String get eventDescriptionLabel => 'Event description';
|
|
|
|
@override
|
|
String get startDateColonLabel => 'Start date:';
|
|
|
|
@override
|
|
String get videoResourceLabel => 'Video:';
|
|
|
|
@override
|
|
String get directVideoLinkLabel => 'Direct video link:';
|
|
|
|
@override
|
|
String get phoneLabel => 'Phone:';
|
|
|
|
@override
|
|
String get locationGeometryLabel => 'Location / Geometry';
|
|
|
|
@override
|
|
String get geometryLabel => 'Geometry:';
|
|
|
|
@override
|
|
String get materialIconLabel => 'Icon (material):';
|
|
|
|
@override
|
|
String get linearLabel => 'Linear:';
|
|
|
|
@override
|
|
String get requiredSuccessLabel => 'Required success:';
|
|
|
|
@override
|
|
String get pathStepsLabel => 'Path steps';
|
|
|
|
@override
|
|
String get noStepConfigured => 'No point/step configured.';
|
|
|
|
@override
|
|
String get stepFallback => 'Step';
|
|
|
|
@override
|
|
String get questionAskedLabel => 'Question asked:';
|
|
|
|
@override
|
|
String get questionTitleLabel => 'Question title';
|
|
|
|
@override
|
|
String get expectedAnswerLabel => 'Expected answer:';
|
|
|
|
@override
|
|
String get expectedAnswerModalLabel => 'Expected answer';
|
|
|
|
@override
|
|
String get validationNote =>
|
|
'Validation is done by comparison (case-insensitive).';
|
|
|
|
@override
|
|
String get possibleAnswersLabel => 'Possible answers:';
|
|
|
|
@override
|
|
String get noAnswerDefined => 'No answer defined. Add at least one.';
|
|
|
|
@override
|
|
String get correctAnswer => 'Correct answer ✓';
|
|
|
|
@override
|
|
String get wrongAnswer => 'Wrong answer';
|
|
|
|
@override
|
|
String get answerNote => '✓ = correct answer. Multiple can be correct.';
|
|
|
|
@override
|
|
String get geopointZoneTitle => 'Geographic point / Zone';
|
|
|
|
@override
|
|
String get geometryTypeLabel => 'Geometry (Point/Line/Zone):';
|
|
|
|
@override
|
|
String get phoneModalLabel => 'Phone';
|
|
|
|
@override
|
|
String get categoryLabel => 'Category:';
|
|
|
|
@override
|
|
String get startMessageLabel => 'Start message:';
|
|
|
|
@override
|
|
String get startMessageModalLabel => 'Start message';
|
|
|
|
@override
|
|
String get createCategoryTitle => 'Create category';
|
|
|
|
@override
|
|
String get editCategoryTitle => 'Edit category';
|
|
|
|
@override
|
|
String get categoryIconLabel => 'Category icon:';
|
|
|
|
@override
|
|
String get selectResource => 'Select a resource';
|
|
|
|
@override
|
|
String get createPdfTitle => 'Create PDF';
|
|
|
|
@override
|
|
String get answersLabel => 'Answers';
|
|
|
|
@override
|
|
String get answerLabel => 'Answer';
|
|
|
|
@override
|
|
String get createAnswerTitle => 'Create answer';
|
|
|
|
@override
|
|
String get editAnswerTitle => 'Edit answer';
|
|
|
|
@override
|
|
String get answerValidNote => 'If checked, the answer is valid';
|
|
|
|
@override
|
|
String get selectConfiguration => 'Select a configuration';
|
|
|
|
@override
|
|
String get noConfigFound => 'No configuration found';
|
|
|
|
@override
|
|
String get backgroundColorLabel => 'Background color:';
|
|
|
|
@override
|
|
String get updateTabletBtn => 'Update tablet';
|
|
|
|
@override
|
|
String get kioskUpdatedSuccess => 'Kiosk updated';
|
|
|
|
@override
|
|
String get webViewError =>
|
|
'The web page cannot be displayed, the URL is incorrect or empty';
|
|
|
|
@override
|
|
String get download => 'Download';
|
|
|
|
@override
|
|
String get resourceDeleteConfirm =>
|
|
'Are you sure you want to delete this resource?';
|
|
|
|
@override
|
|
String get categoriesTitle => 'Categories';
|
|
|
|
@override
|
|
String get endTimeLabel => 'End time';
|
|
|
|
@override
|
|
String get annotationsLabel => 'Annotations';
|
|
}
|