É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>
775 lines
31 KiB
Plaintext
775 lines
31 KiB
Plaintext
{
|
||
"@@locale": "en",
|
||
|
||
"cancel": "Cancel",
|
||
"save": "Save",
|
||
"create": "Create",
|
||
"delete": "Delete",
|
||
"close": "Close",
|
||
"edit": "Edit",
|
||
"actions": "Actions",
|
||
"status": "Status",
|
||
"no": "No",
|
||
"name": "Name",
|
||
"type": "Type",
|
||
"date": "Date",
|
||
|
||
"loginSuccess": "Login successful",
|
||
"loginError": "An error occurred during login",
|
||
"rememberMe": "Remember me",
|
||
"connect": "LOG IN",
|
||
"forgotPasswordLink": "Forgot your password?",
|
||
"forgotPasswordTitle": "Forgot password",
|
||
"forgotPasswordDesc": "Enter your email and we'll send you a link to set a new password.",
|
||
"forgotPasswordSubmit": "SEND LINK",
|
||
"forgotPasswordSuccess": "If this email exists, a reset link has just been sent.",
|
||
"backToLogin": "Back to login",
|
||
"setPasswordTitle": "Set your password",
|
||
"setPasswordDesc": "Choose a password to access your workspace.",
|
||
"setPasswordNewLabel": "New password",
|
||
"setPasswordSubmit": "SET PASSWORD",
|
||
"setPasswordSuccess": "Password set — you can now log in.",
|
||
"setPasswordError": "This link is invalid or has expired",
|
||
"setPasswordTooShort": "Password must be at least 8 characters",
|
||
"setPasswordMissingToken": "Invalid link — no token provided",
|
||
"inviteUserHint": "An invitation email will be sent to set the password.",
|
||
|
||
"menuSubscription": "Subscription",
|
||
"subscriptionTitle": "Subscription",
|
||
"subscriptionTrialActive": "Free trial in progress",
|
||
"subscriptionTrialEndsAt": "Your trial ends on {date}",
|
||
"@subscriptionTrialEndsAt": { "placeholders": { "date": {} } },
|
||
"subscriptionTrialNoDate": "Your free trial is active.",
|
||
"subscriptionPlanActive": "Essentiel plan active",
|
||
"subscriptionPlanActiveDesc": "Your subscription is active and renews automatically.",
|
||
"subscriptionIncludedTitle": "What's included",
|
||
"subscriptionUpgradeBtn": "Upgrade to a paid subscription",
|
||
"subscriptionCheckoutError": "Could not start checkout, please try again later.",
|
||
"subscriptionAddonsTitle": "Add-ons",
|
||
"subscriptionAddonsComingSoon": "Coming soon: extra AI requests and other options.",
|
||
|
||
"menuApplications": "Applications",
|
||
"menuConfigurations": "Configurations",
|
||
"menuResources": "Resources",
|
||
"menuStatistics": "Statistics",
|
||
"menuGuideIa": "AI Guide",
|
||
"guideIaSubtitle": "Your guide answers visitor questions using your own content. It never answers from anything else.",
|
||
"guideIaUsageTitle": "This month's usage",
|
||
"guideIaUsageQuestions": "{count} questions asked",
|
||
"guideIaUsageNoQuota": "No cap set on your plan.",
|
||
"guideIaChannelsTitle": "Where the guide is available",
|
||
"guideIaChannelsSub": "Enabled per channel, from each application's settings.",
|
||
"guideIaChannelOn": "Enabled",
|
||
"guideIaChannelOff": "Disabled",
|
||
"guideIaIdentityTitle": "Guide identity",
|
||
"guideIaIdentitySub": "This is what gives the answers their tone",
|
||
"guideIaNameLabel": "Guide name",
|
||
"guideIaNameHint": "The name visitors see and hear. E.g. Leon",
|
||
"guideIaPersonaLabel": "Personality",
|
||
"guideIaPersonaHint": "Describe it the way you would introduce a guide to a new colleague. To get started, pick an example:",
|
||
"guideIaExampleWarden": "Passionate warden",
|
||
"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.",
|
||
"guideIaExampleSober": "Measured mediator",
|
||
"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.",
|
||
"guideIaExampleKids": "For children",
|
||
"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.",
|
||
"guideIaFallbackLabel": "When the guide doesn't know",
|
||
"guideIaFallbackHint": "The guide picks one at random. With a single sentence it repeats it word for word, and that shows immediately.",
|
||
"guideIaFallbackAdd": "Add a wording",
|
||
"guideIaFallbackTranslated": "Visitors see these sentences: they will be translated into their language, like the rest of your content.",
|
||
"guideIaVoiceTitle": "Your guide out loud",
|
||
"guideIaVoiceSub": "Visitors ask out loud and hear the answer — in the app, or in their connected glasses.",
|
||
"guideIaVoiceFemale": "Female voice, warm",
|
||
"guideIaVoiceMale": "Male voice, steady",
|
||
"guideIaVoiceWakeword": "Wake word: \"{word}\"",
|
||
"guideIaVoiceInfoName": "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.",
|
||
"guideIaVoiceInfoGlasses": "Connected glasses work with the mobile app installed on the visitor's phone.",
|
||
"guideIaVoiceInfoMultilang": "The same voice speaks all your languages: your guide keeps one identity across them.",
|
||
"guideIaSave": "Save",
|
||
"guideIaSaved": "Guide saved",
|
||
"guideIaSaveError": "Saving failed. Please try again.",
|
||
"guideIaTabConfig": "Configuration",
|
||
"guideIaTabQuestions": "What your visitors ask",
|
||
"guideIaPreviewTitle": "Try your guide",
|
||
"guideIaPreviewSub": "Test the tone and the answers without reaching for a phone",
|
||
"guideIaPreviewPlaceholder": "Ask a question, the way a visitor would",
|
||
"guideIaPreviewSources": "Where does this answer come from?",
|
||
"guideIaPreviewSourcesInfo": "This source indicator only appears on this screen. Your visitors see the answer alone.",
|
||
"guideIaPreviewError": "The guide did not answer. Try again in a moment.",
|
||
"guideIaPreviewUnsaved": "Save your changes before testing them: the preview queries the guide as published.",
|
||
"guideIaKnowledgeTitle": "What your guide knows",
|
||
"guideIaKnowledgeSub": "Measured on what is actually indexed, not on what is published",
|
||
"guideIaKnowledgeSections": "Indexed sections",
|
||
"guideIaKnowledgeChunks": "Content chunks",
|
||
"guideIaKnowledgeLanguages": "Languages covered",
|
||
"guideIaKnowledgeLastIndexed": "Last indexed",
|
||
"guideIaKnowledgeHint": "An unpublished section drops out of the guide's answers within the minute.",
|
||
"guideIaKnowledgeMinutesAgo": "{count} min ago",
|
||
"guideIaKnowledgeHoursAgo": "{count} h ago",
|
||
"guideIaKnowledgeDaysAgo": "{count} d ago",
|
||
"guideIaKpiQuestions": "Questions this month",
|
||
"guideIaKpiUnanswered": "Unanswered",
|
||
"guideIaKpiThemes": "Themes",
|
||
"guideIaKpiLanguages": "Languages",
|
||
"guideIaGapTitle": "What your visitors look for and don't find",
|
||
"guideIaGapSub": "{count} questions found no answer in your content. Add it and your guide will answer from the next visit on.",
|
||
"guideIaTopicsTitle": "Question topics",
|
||
"guideIaQuestionLanguagesTitle": "Question languages",
|
||
"guideIaInsightsSubCount": "Number of questions over the period",
|
||
"guideIaCitedTitle": "Most used content",
|
||
"guideIaCitedSub": "Sections cited in answers",
|
||
"guideIaInsightsEmpty": "No questions yet",
|
||
"guideIaInsightsEmptyHint": "As soon as your visitors start asking the guide, their questions will be grouped here by topic — and the ones left unanswered will tell you what to add to your content.",
|
||
"guideIaInsightsPrivacy": "Questions are kept for 90 days, then deleted. Only the topic groupings are kept beyond that. No data identifying a visitor is recorded.",
|
||
"menuNotifications": "Notifications",
|
||
"menuUsers": "Users",
|
||
"menuApiKeys": "API Keys",
|
||
|
||
"noPlansAvailable": "No plans available. Create a plan first.",
|
||
"noPlan": "No plan (unlimited)",
|
||
"unlimitedStorage": "Unlimited storage",
|
||
"unlimitedAI": "Unlimited AI",
|
||
"aiTokensPerMonth": "{amount} AI tokens/month",
|
||
"@aiTokensPerMonth": {
|
||
"placeholders": {
|
||
"amount": { "type": "String" }
|
||
}
|
||
},
|
||
"storageLabel": "Storage",
|
||
"aiThisMonthLabel": "AI this month",
|
||
"unlimited": "Unlimited",
|
||
"requestsAbbr": "req",
|
||
"tokensAbbr": "tokens",
|
||
"planUpdated": "Plan updated",
|
||
"errorMessage": "Error: {error}",
|
||
"@errorMessage": {
|
||
"placeholders": {
|
||
"error": { "type": "String" }
|
||
}
|
||
},
|
||
"switchInstance": "Switch instance",
|
||
"noInstanceFound": "No instance found",
|
||
"configurePlan": "Configure plan",
|
||
"tooltipSwitchInstance": "Switch instance",
|
||
"tooltipLogout": "Log out",
|
||
|
||
"usersTitle": "Users",
|
||
"createUserBtn": "Create user",
|
||
"createUserTitle": "Create user",
|
||
"editUserTitle": "Edit user",
|
||
"deleteUserTitle": "Delete user",
|
||
"deleteUserConfirm": "Delete {email}?",
|
||
"@deleteUserConfirm": {
|
||
"placeholders": {
|
||
"email": { "type": "String" }
|
||
}
|
||
},
|
||
"noUsers": "No users",
|
||
"email": "Email",
|
||
"firstName": "First name",
|
||
"lastName": "Last name",
|
||
"password": "Password",
|
||
"role": "Role",
|
||
"tooltipEdit": "Edit",
|
||
"tooltipDelete": "Delete",
|
||
|
||
"notificationsTitle": "Notifications",
|
||
"newMessage": "New message",
|
||
"messageTitle": "Title",
|
||
"messageBody": "Message",
|
||
"schedule": "Schedule",
|
||
"time": "Time",
|
||
"send": "Send",
|
||
"cancelNotification": "Cancel notification",
|
||
"cancelNotificationConfirm": "Cancel « {title} »?",
|
||
"@cancelNotificationConfirm": {
|
||
"placeholders": {
|
||
"title": { "type": "String" }
|
||
}
|
||
},
|
||
"allNotifications": "All",
|
||
"sentNotifications": "Sent",
|
||
"scheduledNotifications": "Scheduled",
|
||
"failedNotifications": "Failed",
|
||
"noNotifications": "No notifications sent",
|
||
"noNotificationsForFilter": "No notifications for this filter",
|
||
"topic": "Topic",
|
||
"tooltipCancelNotification": "Cancel",
|
||
"resultsCount": "{count, plural, one{{count} result} other{{count} results}}",
|
||
"@resultsCount": {
|
||
"placeholders": {
|
||
"count": { "type": "int" }
|
||
}
|
||
},
|
||
|
||
"apiKeysTitle": "API Keys",
|
||
"createApiKey": "Create API key",
|
||
"createKeyBtn": "Create key",
|
||
"appType": "Application type",
|
||
"noExpiration": "No expiration",
|
||
"expiresOn": "Expires on {date}",
|
||
"@expiresOn": {
|
||
"placeholders": {
|
||
"date": { "type": "String" }
|
||
}
|
||
},
|
||
"choose": "Choose",
|
||
"removeExpiration": "Remove expiration",
|
||
"apiKeyCreatedTitle": "API key created",
|
||
"copyKeyWarning": "Copy this key now — it won't be shown again.",
|
||
"copy": "Copy",
|
||
"copiedKey": "I've copied the key",
|
||
"revokeApiKeyTitle": "Revoke API key",
|
||
"revokeApiKeyConfirm": "Revoke « {name} »? Apps using this key will lose access.",
|
||
"@revokeApiKeyConfirm": {
|
||
"placeholders": {
|
||
"name": { "type": "String" }
|
||
}
|
||
},
|
||
"revoke": "Revoke",
|
||
"noApiKeys": "No API keys",
|
||
"createdOn": "Created on",
|
||
"expiration": "Expiration",
|
||
"activeKey": "Active",
|
||
"revokedKey": "Revoked",
|
||
"tooltipRevoke": "Revoke",
|
||
|
||
"statisticsTitle": "Statistics",
|
||
"statsLoadError": "Unable to load statistics",
|
||
"statsNoData": "No data yet for this period",
|
||
"statsNoDataForType": "No events received for type \"{type}\"",
|
||
"@statsNoDataForType": {
|
||
"placeholders": {
|
||
"type": { "type": "String" }
|
||
}
|
||
},
|
||
"statsSessions": "Sessions",
|
||
"statsAvgDuration": "Avg. duration",
|
||
"statsTopApp": "Top app",
|
||
"statsTopLang": "Top language",
|
||
"statsVisitsByDay": "Visits per day",
|
||
"statsAll": "All",
|
||
"statsTopSections": "Top sections",
|
||
"statsApps": "Apps",
|
||
"statsLanguages": "Languages",
|
||
"statsTopPOI": "Top POI",
|
||
"statsPOI": "POI",
|
||
"statsTaps": "Taps",
|
||
"statsTopAgenda": "Top agenda events",
|
||
"statsEvent": "Event",
|
||
"statsQuiz": "Quiz",
|
||
"statsSection": "Section",
|
||
"statsAvgScore": "Avg. score",
|
||
"statsCompletions": "Completions",
|
||
"statsGames": "Games",
|
||
"statsGameType": "Type",
|
||
"statsArticles": "Articles read",
|
||
"statsReadings": "Reads",
|
||
"statsMenuTitle": "Menu",
|
||
"statsMenuItem": "Item",
|
||
"statsQrScans": "QR Scans",
|
||
"statsTotal": "Total",
|
||
"statsValid": "Valid",
|
||
"statsInvalid": "Invalid",
|
||
"statsViews": "Views",
|
||
|
||
"statsAttendanceTitle": "Attendance",
|
||
"statsPeriodRange": "From {from} to {to}",
|
||
"@statsPeriodRange": {
|
||
"placeholders": {
|
||
"from": { "type": "String" },
|
||
"to": { "type": "String" }
|
||
}
|
||
},
|
||
"statsFilterPeriod": "Period",
|
||
"statsFilterChannel": "Channel",
|
||
"statsPeriodDays": "{days} days",
|
||
"@statsPeriodDays": {
|
||
"placeholders": {
|
||
"days": { "type": "int" }
|
||
}
|
||
},
|
||
"statsPeriodYear": "Year",
|
||
"statsChannelMobile": "Mobile app",
|
||
"statsChannelTablet": "Kiosk",
|
||
"statsChannelWeb": "Website",
|
||
"statsChannelVR": "VR headset",
|
||
"statsChannelVoice": "Voice guide",
|
||
"statsTakeawayUp": "Attendance is up {percent} % compared to the previous period.",
|
||
"@statsTakeawayUp": {
|
||
"placeholders": {
|
||
"percent": { "type": "String" }
|
||
}
|
||
},
|
||
"statsTakeawayDown": "Attendance is down {percent} % compared to the previous period.",
|
||
"@statsTakeawayDown": {
|
||
"placeholders": {
|
||
"percent": { "type": "String" }
|
||
}
|
||
},
|
||
"statsTakeawayStable": "Attendance is stable compared to the previous period.",
|
||
"statsTakeawayVolume": "{visits} visits over the period, or {perDay} a day on average.",
|
||
"@statsTakeawayVolume": {
|
||
"placeholders": {
|
||
"visits": { "type": "String" },
|
||
"perDay": { "type": "String" }
|
||
}
|
||
},
|
||
"statsTakeawayVoice": "The voice guide accounts for {percent} % of visits — a strong argument for your funding bodies.",
|
||
"@statsTakeawayVoice": {
|
||
"placeholders": {
|
||
"percent": { "type": "String" }
|
||
}
|
||
},
|
||
"statsTakeawayChannel": "The « {channel} » channel accounts for {percent} % of visits.",
|
||
"@statsTakeawayChannel": {
|
||
"placeholders": {
|
||
"channel": { "type": "String" },
|
||
"percent": { "type": "String" }
|
||
}
|
||
},
|
||
"statsTakeawayContent": "« {title} » alone accounts for {percent} % of all views: it is your front door, keep it up to date first.",
|
||
"@statsTakeawayContent": {
|
||
"placeholders": {
|
||
"title": { "type": "String" },
|
||
"percent": { "type": "String" }
|
||
}
|
||
},
|
||
"statsKpiVisits": "Visits",
|
||
"statsKpiAvgDuration": "Average duration",
|
||
"statsKpiContentsPerVisit": "Contents per visit",
|
||
"statsKpiVoiceShare": "Voice guide share",
|
||
"statsKpiTotalViews": "Contents viewed",
|
||
"statsVsPrevious": "vs previous period",
|
||
"statsTrendStable": "stable",
|
||
"statsDurationMinSec": "{minutes} min {seconds} s",
|
||
"@statsDurationMinSec": {
|
||
"placeholders": {
|
||
"minutes": { "type": "String" },
|
||
"seconds": { "type": "String" }
|
||
}
|
||
},
|
||
"statsDurationSec": "{seconds} s",
|
||
"@statsDurationSec": {
|
||
"placeholders": {
|
||
"seconds": { "type": "String" }
|
||
}
|
||
},
|
||
"statsVisitsByDaySub": "Light bands mark the weekends",
|
||
"statsWeekends": "Saturdays and Sundays",
|
||
"statsPeakDay": "Peak on {date} — {visits} visits",
|
||
"@statsPeakDay": {
|
||
"placeholders": {
|
||
"date": { "type": "String" },
|
||
"visits": { "type": "String" }
|
||
}
|
||
},
|
||
"statsTopContents": "Most viewed contents",
|
||
"statsTopContentsSub": "Number of views over the period",
|
||
"statsChannels": "Channels",
|
||
"statsChannelsSub": "Visits per channel",
|
||
"statsLanguagesSub": "Visits per language",
|
||
"statsReportTitle": "Your attendance report",
|
||
"statsReportBody": "A document in your own colours, ready to send to your municipality, your board or your funding bodies.",
|
||
"statsReportItemAttendance": "Attendance, visit durations and trend",
|
||
"statsReportItemContents": "Most viewed contents and their trend",
|
||
"statsReportItemChannels": "Breakdown per channel, including the voice guide, and per language",
|
||
"statsReportItemAdvanced": "Points of interest, quizzes, games and QR scans",
|
||
"statsReportGenerated": "Report generated on {date} with MyInfoMate",
|
||
"@statsReportGenerated": {
|
||
"placeholders": {
|
||
"date": { "type": "String" }
|
||
}
|
||
},
|
||
"statsReportError": "The report could not be generated",
|
||
"statsReportDownload": "Download the PDF",
|
||
"statsAdvancedTitle": "Advanced statistics",
|
||
"statsAdvancedBody": "Detailed statistics (POI, quizzes, games, articles, QR…) are available with the Premium plan.",
|
||
"statsUnavailableTitle": "Statistics not included",
|
||
"statsUnavailableBody": "Your current plan does not include attendance statistics.",
|
||
|
||
"noData": "No data",
|
||
"errorOccurred": "An error occurred",
|
||
"yes": "Yes",
|
||
|
||
"newConfiguration": "New configuration",
|
||
"configNameLabel": "Name:",
|
||
"orText": "or",
|
||
"importLabel": "Import",
|
||
"configNameRequired": "Please specify a name for the new visit",
|
||
"configCreatedSuccess": "Configuration created successfully",
|
||
"configExportSuccess": "Configuration exported successfully, file is at: {path}",
|
||
"@configExportSuccess": {
|
||
"placeholders": {
|
||
"path": { "type": "String" }
|
||
}
|
||
},
|
||
"configExportFailed": "Configuration export failed",
|
||
"configDeletedSuccess": "Configuration deleted successfully",
|
||
"configSavedSuccess": "Configuration saved successfully",
|
||
"configDeleteConfirm": "Are you sure you want to delete this configuration?",
|
||
|
||
"newSection": "New section",
|
||
"newSubSection": "New sub section",
|
||
"sectionNameLabel": "Name:",
|
||
"sectionTypeLabel": "Type:",
|
||
"sectionNameRequired": "Please specify a name for the new section",
|
||
"sectionCreatedSuccess": "Section created successfully!",
|
||
"sectionDeleteConfirm": "Are you sure you want to delete this section?",
|
||
"sectionSavedSuccess": "Section saved successfully",
|
||
"sectionTranslationSaved": "Section translations saved successfully",
|
||
"sectionLoadError": "An error occurred while loading the section",
|
||
"qrCodeCopied": "This QR code has been copied to the clipboard",
|
||
"beaconLabel": "Beacon:",
|
||
"beaconIdLabel": "Beacon ID:",
|
||
"beaconMustBeNumber": "This must be a number",
|
||
"identifierLabel": "Identifier:",
|
||
"displayTitleLabel": "Display title:",
|
||
"imageLabel": "Image:",
|
||
"backgroundImageLabel": "Background image:",
|
||
"questionInputLabel": "Question:",
|
||
"videoUrlLabel": "Video URL:",
|
||
"webUrlLabel": "Website URL:",
|
||
|
||
"subSectionUpdatedSuccess": "Sub section updated successfully",
|
||
"subSectionUpdateError": "An error occurred while updating the sub section",
|
||
"subSectionDeletedSuccess": "Sub section deleted successfully",
|
||
"subSectionDeleteError": "An error occurred while deleting the sub section",
|
||
"subSectionOrderUpdatedSuccess": "Sub section order updated successfully",
|
||
"subSectionOrderUpdateError": "An error occurred while updating the sub section order",
|
||
"subSectionCreatedSuccess": "Sub section created successfully",
|
||
"subSectionCreateError": "An error occurred while creating the sub section",
|
||
|
||
"questionsLabel": "Questions",
|
||
"questionLabel": "Question",
|
||
"editQuestion": "Edit question",
|
||
"questionDeleteConfirm": "Are you sure you want to delete this question?",
|
||
"questionsLoadError": "An error occurred while loading the questions",
|
||
"quizBadScore": "Bad score",
|
||
"quizMediumScore": "Medium score",
|
||
"quizGoodScore": "Good score",
|
||
"quizExcellentScore": "Excellent score",
|
||
"quizBadScoreMsg": "Message for a bad score",
|
||
"quizMediumScoreMsg": "Message for a medium score",
|
||
"quizGoodScoreMsg": "Message for a good score",
|
||
"quizExcellentScoreMsg": "Message for an excellent score",
|
||
"questionOrderUpdatedSuccess": "Question order updated successfully",
|
||
"questionOrderUpdateError": "An error occurred while updating the question order",
|
||
"questionCreatedSuccess": "Question created successfully",
|
||
"questionCreateError": "An error occurred while creating the question",
|
||
"questionUpdatedSuccess": "Question updated successfully",
|
||
"questionUpdateError": "An error occurred while updating the question",
|
||
"questionDeletedSuccess": "Question deleted successfully",
|
||
"questionDeleteError": "An error occurred while deleting the question",
|
||
"translationIncomplete": "Translation is incomplete",
|
||
|
||
"geopointCreatedSuccess": "Point created successfully",
|
||
"geopointCreateError": "An error occurred while creating the point",
|
||
"geopointUpdatedSuccess": "Point updated successfully",
|
||
"geopointUpdateError": "An error occurred while updating the point",
|
||
"geopointDeletedSuccess": "Point deleted successfully",
|
||
"geopointDeleteError": "An error occurred while deleting the point",
|
||
"categoryCreatedSuccess": "Category created successfully",
|
||
"categoryCreateError": "An error occurred while creating the category",
|
||
"categoryUpdatedSuccess": "Category updated successfully",
|
||
"categoryUpdateError": "An error occurred while updating the category",
|
||
|
||
"eventCreatedSuccess": "Event created successfully",
|
||
"eventCreateError": "An error occurred while creating the event",
|
||
"eventUpdatedSuccess": "Event updated successfully",
|
||
"eventUpdateError": "An error occurred while updating the event",
|
||
"eventDeletedSuccess": "Event deleted successfully",
|
||
"eventDeleteError": "An error occurred while deleting the event",
|
||
"annotationCreatedSuccess": "Annotation created successfully",
|
||
"annotationCreateError": "An error occurred while creating the annotation",
|
||
"annotationUpdatedSuccess": "Annotation updated successfully",
|
||
"annotationUpdateError": "An error occurred while updating the annotation",
|
||
"programmeBlockCreatedSuccess": "Block created successfully",
|
||
"programmeBlockCreateError": "An error occurred while creating the block",
|
||
"programmeBlockUpdatedSuccess": "Block updated successfully",
|
||
"programmeBlockUpdateError": "An error occurred while updating the block",
|
||
|
||
"pathCreatedSuccess": "Path created successfully",
|
||
"pathCreateError": "An error occurred while creating the path",
|
||
"pathUpdatedSuccess": "Path updated successfully",
|
||
"pathUpdateError": "An error occurred while updating the path",
|
||
"stepCreatedSuccess": "Step created successfully",
|
||
"stepCreateError": "An error occurred while creating the step",
|
||
"stepUpdatedSuccess": "Step updated successfully",
|
||
"stepUpdateError": "An error occurred while updating the step",
|
||
|
||
"agendaEventsLabel": "Events",
|
||
"agendaEventFallback": "Event",
|
||
"addEvent": "Add an event",
|
||
"noEvents": "No events",
|
||
"noAddress": "No address",
|
||
"agendaFilterAll": "All",
|
||
"agendaFilterThisMonth": "This month",
|
||
"agendaFilterThisYear": "This year",
|
||
"agendaFilterPast": "Past",
|
||
"agendaEventDeleteConfirm": "Are you sure you want to delete this event?",
|
||
"onlineLabel": "Online:",
|
||
"mapViewLabel": "Map view:",
|
||
"mapServiceLabel": "Map service:",
|
||
"jsonFilesLabel": "JSON files:",
|
||
"jsonLabel": "JSON",
|
||
|
||
"guidedPathsLabel": "Guided Paths",
|
||
"addPath": "Add a path",
|
||
"noPathConfigured": "No path configured",
|
||
"pathOrderUpdateError": "Error updating order",
|
||
"pathNoTitle": "Untitled path",
|
||
"pathDeletedSuccess": "Path deleted successfully",
|
||
"pathDeleteError": "Error deleting path",
|
||
"pathsLabel": "Paths",
|
||
|
||
"pointsOfInterestLabel": "Points of Interest",
|
||
"geopointsLabel": "Geographic points",
|
||
"searchLabel": "Search:",
|
||
"geopointsLoadError": "Error loading geographic points",
|
||
"geopointDeleteConfirm": "Are you sure you want to delete this geographic point?",
|
||
"serviceLabel": "Service:",
|
||
"centerPointLabel": "Center point:",
|
||
"iconLabel": "Icon:",
|
||
"listViewLabel": "List view:",
|
||
"typeLabel": "Type:",
|
||
"zoomLabel": "Zoom:",
|
||
"categoriesLabel": "Categories:",
|
||
|
||
"startDateLabel": "Start date",
|
||
"notDefined": "Not defined",
|
||
"endDateLabel": "End date",
|
||
"programmeLabel": "Programme",
|
||
"addBlock": "Add a block",
|
||
"blockFallback": "Block",
|
||
"noBlocks": "No programme blocks defined",
|
||
"programmeBlockDeletedSuccess": "Block deleted successfully",
|
||
"programmeBlockDeleteError": "Error deleting block",
|
||
"baseMapLabel": "Base map",
|
||
"mapLabel": "Map:",
|
||
"globalAnnotationsLabel": "Global annotations",
|
||
"addAnnotation": "Add an annotation",
|
||
"noAnnotations": "No global annotations",
|
||
"annotationFallback": "Annotation",
|
||
"annotationDeletedSuccess": "Annotation deleted",
|
||
"annotationDeleteError": "Error deleting",
|
||
|
||
"agendaEventCreatedSuccess": "Event created successfully",
|
||
"agendaEventCreateError": "An error occurred while creating the event",
|
||
"agendaEventUpdatedSuccess": "Event updated successfully",
|
||
"agendaEventUpdateError": "An error occurred while updating the event",
|
||
"agendaEventDeletedSuccess": "Event deleted successfully",
|
||
"agendaEventDeleteError": "An error occurred while deleting the event",
|
||
|
||
"newResource": "New resource",
|
||
"resourceCreatedSuccess": "Resource created successfully",
|
||
"resourceCreateError": "An error occurred while creating the resource",
|
||
"resourceUpdatedSuccess": "Resource updated successfully",
|
||
"resourceNoFileLoaded": "No file has been loaded",
|
||
"resourceNameRequired": "Please give the resource a name",
|
||
"resourceTooLarge": "Error: resource size must be under 1.5MB",
|
||
"resourceInvalidUrl": "The URL is invalid",
|
||
"resourceUrlRequired": "Please fill in the URL field",
|
||
|
||
"generalInfo": "General information",
|
||
"mainImageLabel": "Main image:",
|
||
"loaderLabel": "Loader:",
|
||
"primaryColorLabel": "Primary color:",
|
||
"secondaryColorLabel": "Secondary color:",
|
||
"layoutLabel": "Layout:",
|
||
"layoutGrid": "Grid",
|
||
"languagesLabel": "Languages:",
|
||
"featuredEventLabel": "Featured event:",
|
||
"chooseEvent": "Choose an event",
|
||
"previewWebTitle": "Preview — Web",
|
||
"previewMobileTitle": "Preview — Mobile",
|
||
"previewDesktop": "Desktop",
|
||
"previewMobile": "Mobile",
|
||
"noneOption": "None",
|
||
"aiAssistantLabel": "AI assistant:",
|
||
"appUpdatedSuccess": "Mobile application updated",
|
||
"configActivatedSuccess": "Configuration activated successfully",
|
||
"configDeactivatedSuccess": "Configuration deactivated successfully",
|
||
"configRemoveConfirm": "Are you sure you want to remove this configuration from the application?",
|
||
"configRemovedSuccess": "Configuration removed from application successfully",
|
||
"configRemoveError": "An error occurred while removing the configuration",
|
||
"phoneConfigTitle": "Configurations per device",
|
||
"addConfig": "Add a configuration",
|
||
"selectConfigToAdd": "Select a configuration to add",
|
||
"noItems": "No items to display",
|
||
"add": "Add",
|
||
|
||
"pinCode": "Pin code: {code}",
|
||
"@pinCode": {
|
||
"placeholders": {
|
||
"code": { "type": "String" }
|
||
}
|
||
},
|
||
"tablets": "Tablets",
|
||
|
||
"stepsCount": "{count} steps",
|
||
"@stepsCount": {
|
||
"placeholders": {
|
||
"count": { "type": "int" }
|
||
}
|
||
},
|
||
"displayedDescriptionLabel": "Displayed description:",
|
||
"displayedContentLabel": "Displayed content:",
|
||
"displayedNameLabel": "Display name:",
|
||
"startTimeLabel": "Start time",
|
||
"noAnnotationConfigured": "No annotations configured.",
|
||
"newStepTitle": "New step",
|
||
"editStepTitle": "Edit step",
|
||
"stepTitleLabel": "Step title",
|
||
"stepDescriptionLabel": "Step description",
|
||
"stepLocationLabel": "Step location:",
|
||
"initiallyHiddenLabel": "Initially hidden",
|
||
"lockedLabel": "Locked",
|
||
"durationSecondsLabel": "Duration (seconds):",
|
||
"triggerGeopointLabel": "Trigger GeoPoint (ID):",
|
||
"questionsChallengesLabel": "Questions / Challenges",
|
||
"noQuestionsConfigured": "No questions configured.",
|
||
"newAgendaEventTitle": "New event",
|
||
"editAgendaEventTitle": "Edit event",
|
||
"eventTitleLabel": "Event title",
|
||
"eventDescriptionLabel": "Event description",
|
||
"startDateColonLabel": "Start date:",
|
||
"videoResourceLabel": "Video:",
|
||
"directVideoLinkLabel": "Direct video link:",
|
||
"phoneLabel": "Phone:",
|
||
"locationGeometryLabel": "Location / Geometry",
|
||
"geometryLabel": "Geometry:",
|
||
"materialIconLabel": "Icon (material):",
|
||
"linearLabel": "Linear:",
|
||
"requiredSuccessLabel": "Required success:",
|
||
"pathStepsLabel": "Path steps",
|
||
"noStepConfigured": "No point/step configured.",
|
||
"stepFallback": "Step",
|
||
"questionAskedLabel": "Question asked:",
|
||
"questionTitleLabel": "Question title",
|
||
"expectedAnswerLabel": "Expected answer:",
|
||
"expectedAnswerModalLabel": "Expected answer",
|
||
"validationNote": "Validation is done by comparison (case-insensitive).",
|
||
"possibleAnswersLabel": "Possible answers:",
|
||
"noAnswerDefined": "No answer defined. Add at least one.",
|
||
"correctAnswer": "Correct answer ✓",
|
||
"wrongAnswer": "Wrong answer",
|
||
"answerNote": "✓ = correct answer. Multiple can be correct.",
|
||
"geopointZoneTitle": "Geographic point / Zone",
|
||
"geometryTypeLabel": "Geometry (Point/Line/Zone):",
|
||
"phoneModalLabel": "Phone",
|
||
"categoryLabel": "Category:",
|
||
"startMessageLabel": "Start message:",
|
||
"startMessageModalLabel": "Start message",
|
||
"createCategoryTitle": "Create category",
|
||
"editCategoryTitle": "Edit category",
|
||
"categoryIconLabel": "Category icon:",
|
||
"selectResource": "Select a resource",
|
||
"createPdfTitle": "Create PDF",
|
||
"answersLabel": "Answers",
|
||
"answerLabel": "Answer",
|
||
"createAnswerTitle": "Create answer",
|
||
"editAnswerTitle": "Edit answer",
|
||
"answerValidNote": "If checked, the answer is valid",
|
||
"selectConfiguration": "Select a configuration",
|
||
"noConfigFound": "No configuration found",
|
||
"backgroundColorLabel": "Background color:",
|
||
"updateTabletBtn": "Update tablet",
|
||
"kioskUpdatedSuccess": "Kiosk updated",
|
||
"webViewError": "The web page cannot be displayed, the URL is incorrect or empty",
|
||
"download": "Download",
|
||
"resourceDeleteConfirm": "Are you sure you want to delete this resource?",
|
||
"categoriesTitle": "Categories",
|
||
"endTimeLabel": "End time",
|
||
"annotationsLabel": "Annotations",
|
||
"addStep": "Add a step",
|
||
"addQuestion": "Add a question",
|
||
"deleteStep": "Delete step",
|
||
"deleteStepConfirm": "Delete this step and its questions?",
|
||
"pathPanelTitle": "The path",
|
||
"pathPanelSubtitle": "Title, mood, progression",
|
||
"stepSummaryEmpty": "No content",
|
||
"mediaCount": "{count} media",
|
||
"@mediaCount": {
|
||
"placeholders": {
|
||
"count": { "type": "int" }
|
||
}
|
||
},
|
||
"questionCount": "{count} question(s)",
|
||
"@questionCount": {
|
||
"placeholders": {
|
||
"count": { "type": "int" }
|
||
}
|
||
},
|
||
"saveStatusIdle": "Saved automatically",
|
||
"saveStatusSaving": "Saving…",
|
||
"saveStatusSaved": "Saved",
|
||
"saveStatusFailed": "Could not save",
|
||
"retry": "Retry",
|
||
"mapProviderMobileOnlyNote": "The map provider and type apply to the mobile and tablet apps. The web app always renders its own map.",
|
||
"menuAudit": "Activity",
|
||
"auditTitle": "Activity",
|
||
"auditSubtitle": "Who changed what, and when",
|
||
"auditFilterInstance": "Instance",
|
||
"auditFilterEntity": "Item type",
|
||
"auditFilterUser": "User",
|
||
"auditFilterFrom": "From",
|
||
"auditFilterTo": "To",
|
||
"auditAllInstances": "All instances",
|
||
"auditAllEntities": "All types",
|
||
"auditAllUsers": "All users",
|
||
"auditReset": "Clear filters",
|
||
"auditColDate": "Date",
|
||
"auditColInstance": "Instance",
|
||
"auditColEntity": "Item",
|
||
"auditColAction": "Action",
|
||
"auditColUser": "User",
|
||
"auditColEntityId": "Identifier",
|
||
"auditActionCreate": "Created",
|
||
"auditActionUpdate": "Updated",
|
||
"auditActionDelete": "Deleted",
|
||
"auditEntitySection": "Section",
|
||
"auditEntityResource": "Resource",
|
||
"auditEntityConfiguration": "Configuration",
|
||
"auditEntityDevice": "Device",
|
||
"auditEntityUser": "User",
|
||
"auditEntityInstance": "Instance",
|
||
"auditEmpty": "No activity for these filters",
|
||
"auditLoadError": "The activity log could not be loaded",
|
||
"auditRange": "{first} – {last} of {total}",
|
||
"@auditRange": {
|
||
"placeholders": {
|
||
"first": { "type": "int" },
|
||
"last": { "type": "int" },
|
||
"total": { "type": "int" }
|
||
}
|
||
},
|
||
"auditPrevious": "Previous page",
|
||
"auditNext": "Next page",
|
||
"auditDetailTitle": "Change detail",
|
||
"auditDetailField": "Field",
|
||
"auditDetailBefore": "Before",
|
||
"auditDetailAfter": "After",
|
||
"auditDetailNoValues": "The log does not keep the detail of this operation.",
|
||
"usersCount": "{count} / {max} users",
|
||
"@usersCount": {
|
||
"placeholders": {
|
||
"count": { "type": "int" },
|
||
"max": { "type": "int" }
|
||
}
|
||
},
|
||
"usersQuotaReached": "Limit of {max} users reached",
|
||
"@usersQuotaReached": {
|
||
"placeholders": {
|
||
"max": { "type": "int" }
|
||
}
|
||
},
|
||
"usersQuotaHint": "Delete a user to invite another one.",
|
||
"userCreateError": "Creation failed: {message}",
|
||
"@userCreateError": {
|
||
"placeholders": {
|
||
"message": { "type": "String" }
|
||
}
|
||
}
|
||
}
|