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": "Text in Zwischenablage kopiert",
"deleteMessage": "Nachricht löschen",
"deleteMessageConfirmation": "Möchten Sie diese Nachricht wirklich löschen?",
"shareLocation": "Standort teilen",
"shareLocationText": "{markerInfo}\n\nKoordinaten: {lat}, {lon}\n\nGoogle Maps: {url}",
"sarLocationShare": "SAR Standort",
"locationShared": "Standort geteilt",
"refreshedContacts": "Kontakte aktualisiert",
"@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": "SAR-Vorlagen",
"manageSarTemplates": "SAR-Vorlagen verwalten",
"addTemplate": "Vorlage hinzufügen",
"editTemplate": "Vorlage bearbeiten",
"deleteTemplate": "Vorlage löschen",
"templateName": "Vorlagenname",
"templateNameHint": "e.g. Found Person",
"templateEmoji": "Emoji",
"emojiRequired": "Emoji ist erforderlich",
@@ -2340,8 +2344,8 @@
"templateDescriptionHint": "Add additional context...",
"templateColor": "Color",
"previewFormat": "Preview (SAR Message Format)",
"importFromClipboard": "Import",
"exportToClipboard": "Export",
"importFromClipboard": "Importieren",
"exportToClipboard": "Exportieren",
"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": "Auf Standard zurücksetzen",
"resetToDefaultsConfirmation": "Dadurch werden alle benutzerdefinierten Vorlagen gelöscht und die 4 Standardvorlagen wiederhergestellt. Fortfahren?",
"reset": "Zurücksetzen",
"resetComplete": "Vorlagen auf Standard zurückgesetzt",
"noTemplates": "No templates available",
"tapAddToCreate": "Tap + to create your first template",
"ok": "OK",
@@ -2382,5 +2386,55 @@
"noContactsOrRoomsAvailable": "Keine Kontakte oder Räume verfügbar",
"messagesWillBeSentToPublicChannel": "Nachrichten werden an öffentlichen Kanal gesendet",
"newMessage": "Neue Nachricht",
"channel": "Kanal"
"channel": "Kanal",
"samplePoliceLead": "Polizeiführer",
"sampleDroneOperator": "Drohnenbediener",
"sampleFirefighterAlpha": "Feuerwehrmann",
"sampleMedicCharlie": "Sanitäter",
"sampleCommandDelta": "Kommando",
"sampleFireEngine": "Feuerwehrfahrzeug",
"sampleAirSupport": "Luftunterstützung",
"sampleBaseCoordinator": "Basiskoordinator",
"channelEmergency": "Notfall",
"channelCoordination": "Koordination",
"channelUpdates": "Aktualisierungen",
"sampleTeamMember": "Beispiel-Teammitglied",
"sampleScout": "Beispiel-Späher",
"sampleBase": "Beispiel-Basis",
"sampleSearcher": "Beispiel-Sucher",
"sampleObjectBackpack": " Rucksack gefunden - blaue Farbe",
"sampleObjectVehicle": " Fahrzeug verlassen - Besitzer prüfen",
"sampleObjectCamping": " Campingausrüstung entdeckt",
"sampleObjectTrailMarker": " Wegmarkierung abseits des Pfades gefunden",
"sampleMsgAllTeamsCheckIn": "Alle Teams melden",
"sampleMsgWeatherUpdate": "Wetterupdate: Klarer Himmel, Temp. 18°C",
"sampleMsgBaseCamp": "Basislager am Sammelplatz eingerichtet",
"sampleMsgTeamAlpha": "Team bewegt sich zu Sektor 2",
"sampleMsgRadioCheck": "Funkcheck - alle Stationen antworten",
"sampleMsgWaterSupply": "Wasserversorgung verfügbar an Kontrollpunkt 3",
"sampleMsgTeamBravo": "Team meldet: Sektor 1 frei",
"sampleMsgEtaRallyPoint": "Ankunftszeit am Sammelpunkt: 15 Minuten",
"sampleMsgSupplyDrop": "Versorgungsabwurf bestätigt für 14:00",
"sampleMsgDroneSurvey": "Drohnenüberwachung abgeschlossen - keine Funde",
"sampleMsgTeamCharlie": "Team fordert Unterstützung an",
"sampleMsgRadioDiscipline": "An alle Einheiten: Funkdisziplin wahren",
"sampleMsgUrgentMedical": "DRINGEND: Medizinische Hilfe benötigt in Sektor 4",
"sampleMsgAdultMale": " Erwachsener Mann, bei Bewusstsein",
"sampleMsgFireSpotted": "Feuer gesichtet - Koordinaten folgen",
"sampleMsgSpreadingRapidly": " Breitet sich schnell aus!",
"sampleMsgPriorityHelicopter": "PRIORITÄT: Brauche Hubschrauberunterstützung",
"sampleMsgMedicalTeamEnRoute": "Medizinisches Team auf dem Weg zu Ihrem Standort",
"sampleMsgEvacHelicopter": "Evakuierungshubschrauber ETA 10 Minuten",
"sampleMsgEmergencyResolved": "Notfall behoben - alles klar",
"sampleMsgEmergencyStagingArea": " Notfall-Sammelplatz",
"sampleMsgEmergencyServices": "Rettungsdienste benachrichtigt und auf dem Weg",
"sampleAlphaTeamLead": "Team-Leiter",
"sampleBravoScout": "Späher",
"sampleCharlieMedic": "Sanitäter",
"sampleDeltaNavigator": "Navigator",
"sampleEchoSupport": "Unterstützung",
"sampleBaseCommand": "Basis-Kommando",
"sampleFieldCoordinator": "Feldkoordinator",
"sampleMedicalTeam": "Medizinisches Team"
}