feat: Enhance SAR message handling with color indexing and localization

- Added `sarColorIndex` to `Message` and `SarMarker` models to support color indexing for SAR markers.
- Introduced a standard color palette in `SarTemplate` and methods to retrieve colors based on index.
- Updated `SarTemplate` to include localization for template names.
- Modified `SarUpdateSheet` and message sending logic to include color index in SAR messages.
- Enhanced `SarMessageParser` to support both old and new message formats with color index.
- Updated UI components to reflect changes in SAR marker color handling based on the new color index.
- Improved sample data generation to utilize localized strings for better testing and demonstration.
This commit is contained in:
Janez T
2025-10-23 19:17:13 +02:00
parent b70eed1bf2
commit 98cda8c976
28 changed files with 2734 additions and 270 deletions

View File

@@ -1752,6 +1752,10 @@
"textCopiedToClipboard": "Texte copié dans le presse-papiers",
"deleteMessage": "Supprimer le message",
"deleteMessageConfirmation": "Êtes-vous sûr de vouloir supprimer ce message?",
"shareLocation": "Partager la position",
"shareLocationText": "{markerInfo}\n\nCoordonnées: {lat}, {lon}\n\nGoogle Maps: {url}",
"sarLocationShare": "Position SAR",
"locationShared": "Position partagée",
"refreshedContacts": "Contacts actualisés",
"@refreshedContacts": {
@@ -2326,12 +2330,12 @@
}
},
"sarTemplates": "SAR Templates",
"manageSarTemplates": "Manage cursor on target templates",
"addTemplate": "Add Template",
"editTemplate": "Edit Template",
"deleteTemplate": "Delete Template",
"templateName": "Template Name",
"sarTemplates": "Modèles SAR",
"manageSarTemplates": "Gérer les modèles SAR",
"addTemplate": "Ajouter un modèle",
"editTemplate": "Modifier le modèle",
"deleteTemplate": "Supprimer le modèle",
"templateName": "Nom du modèle",
"templateNameHint": "e.g. Found Person",
"templateEmoji": "Emoji",
"emojiRequired": "Emoji est requis",
@@ -2340,8 +2344,8 @@
"templateDescriptionHint": "Add additional context...",
"templateColor": "Color",
"previewFormat": "Preview (SAR Message Format)",
"importFromClipboard": "Import",
"exportToClipboard": "Export",
"importFromClipboard": "Importer",
"exportToClipboard": "Exporter",
"deleteTemplateConfirmation": "Delete template '{name}'?",
"templateAdded": "Template added",
"templateUpdated": "Template updated",
@@ -2350,10 +2354,10 @@
"templatesExported": "{count, plural, =1{Exported 1 template to clipboard} other{Exported {count} templates to clipboard}}",
"importFailed": "Import failed: {error}",
"exportFailed": "Export failed: {error}",
"resetToDefaults": "Reset to Defaults",
"resetToDefaultsConfirmation": "This will delete all custom templates and restore the 4 default templates. Continue?",
"reset": "Reset",
"resetComplete": "Templates reset to defaults",
"resetToDefaults": "Réinitialiser aux valeurs par défaut",
"resetToDefaultsConfirmation": "Cela supprimera tous les modèles personnalisés et restaurera les 4 modèles par défaut. Continuer?",
"reset": "Réinitialiser",
"resetComplete": "Modèles réinitialisés aux valeurs par défaut",
"noTemplates": "No templates available",
"tapAddToCreate": "Tap + to create your first template",
"ok": "OK",
@@ -2382,5 +2386,55 @@
"noContactsOrRoomsAvailable": "Aucun contact ou salle disponible",
"messagesWillBeSentToPublicChannel": "Les messages seront envoyés au canal public",
"newMessage": "Nouveau message",
"channel": "Canal"
"channel": "Canal",
"samplePoliceLead": "Chef de Police",
"sampleDroneOperator": "Opérateur de Drone",
"sampleFirefighterAlpha": "Pompier",
"sampleMedicCharlie": "Médecin",
"sampleCommandDelta": "Commandement",
"sampleFireEngine": "Camion de Pompiers",
"sampleAirSupport": "Soutien Aérien",
"sampleBaseCoordinator": "Coordinateur de Base",
"channelEmergency": "Urgence",
"channelCoordination": "Coordination",
"channelUpdates": "Mises à jour",
"sampleTeamMember": "Membre d'Équipe Exemple",
"sampleScout": "Éclaireur Exemple",
"sampleBase": "Base Exemple",
"sampleSearcher": "Chercheur Exemple",
"sampleObjectBackpack": " Sac à dos trouvé - couleur bleue",
"sampleObjectVehicle": " Véhicule abandonné - vérifier le propriétaire",
"sampleObjectCamping": " Équipement de camping découvert",
"sampleObjectTrailMarker": " Balise de sentier trouvée hors piste",
"sampleMsgAllTeamsCheckIn": "Toutes les équipes se signaler",
"sampleMsgWeatherUpdate": "Mise à jour météo : Ciel dégagé, temp 18°C",
"sampleMsgBaseCamp": "Camp de base établi à la zone de rassemblement",
"sampleMsgTeamAlpha": "Équipe se déplaçant vers le secteur 2",
"sampleMsgRadioCheck": "Test radio - toutes les stations répondent",
"sampleMsgWaterSupply": "Approvisionnement en eau disponible au point de contrôle 3",
"sampleMsgTeamBravo": "Équipe signale : secteur 1 dégagé",
"sampleMsgEtaRallyPoint": "ETA au point de ralliement : 15 minutes",
"sampleMsgSupplyDrop": "Largage de ravitaillement confirmé pour 14h00",
"sampleMsgDroneSurvey": "Surveillance par drone terminée - aucune découverte",
"sampleMsgTeamCharlie": "Équipe demande du renfort",
"sampleMsgRadioDiscipline": "Toutes les unités : maintenir la discipline radio",
"sampleMsgUrgentMedical": "URGENT : Assistance médicale nécessaire au secteur 4",
"sampleMsgAdultMale": " Homme adulte, conscient",
"sampleMsgFireSpotted": "Feu repéré - coordonnées à venir",
"sampleMsgSpreadingRapidly": " Se propage rapidement !",
"sampleMsgPriorityHelicopter": "PRIORITÉ : Besoin de soutien hélicoptère",
"sampleMsgMedicalTeamEnRoute": "Équipe médicale en route vers votre position",
"sampleMsgEvacHelicopter": "Hélicoptère d'évacuation ETA 10 minutes",
"sampleMsgEmergencyResolved": "Urgence résolue - tout est clair",
"sampleMsgEmergencyStagingArea": " Zone de rassemblement d'urgence",
"sampleMsgEmergencyServices": "Services d'urgence notifiés et en réponse",
"sampleAlphaTeamLead": "Chef d'Équipe",
"sampleBravoScout": "Éclaireur",
"sampleCharlieMedic": "Médecin",
"sampleDeltaNavigator": "Navigateur",
"sampleEchoSupport": "Soutien",
"sampleBaseCommand": "Commandement de Base",
"sampleFieldCoordinator": "Coordinateur de Terrain",
"sampleMedicalTeam": "Équipe Médicale"
}