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": "Texto copiado al portapapeles",
"deleteMessage": "Eliminar mensaje",
"deleteMessageConfirmation": "¿Está seguro de que desea eliminar este mensaje?",
"shareLocation": "Compartir ubicación",
"shareLocationText": "{markerInfo}\n\nCoordenadas: {lat}, {lon}\n\nGoogle Maps: {url}",
"sarLocationShare": "Ubicación SAR",
"locationShared": "Ubicación compartida",
"refreshedContacts": "Contactos actualizados",
"@refreshedContacts": {
@@ -2321,12 +2325,12 @@
}
},
"sarTemplates": "SAR Templates",
"manageSarTemplates": "Manage cursor on target templates",
"addTemplate": "Add Template",
"editTemplate": "Edit Template",
"deleteTemplate": "Delete Template",
"templateName": "Template Name",
"sarTemplates": "Plantillas SAR",
"manageSarTemplates": "Gestionar plantillas SAR",
"addTemplate": "Agregar plantilla",
"editTemplate": "Editar plantilla",
"deleteTemplate": "Eliminar plantilla",
"templateName": "Nombre de plantilla",
"templateNameHint": "e.g. Found Person",
"templateEmoji": "Emoji",
"emojiRequired": "Se requiere emoji",
@@ -2335,8 +2339,8 @@
"templateDescriptionHint": "Add additional context...",
"templateColor": "Color",
"previewFormat": "Preview (SAR Message Format)",
"importFromClipboard": "Import",
"exportToClipboard": "Export",
"importFromClipboard": "Importar",
"exportToClipboard": "Exportar",
"deleteTemplateConfirmation": "Delete template '{name}'?",
"templateAdded": "Template added",
"templateUpdated": "Template updated",
@@ -2345,10 +2349,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": "Restablecer valores predeterminados",
"resetToDefaultsConfirmation": "Esto eliminará todas las plantillas personalizadas y restaurará las 4 plantillas predeterminadas. ¿Continuar?",
"reset": "Restablecer",
"resetComplete": "Plantillas restablecidas a valores predeterminados",
"noTemplates": "No templates available",
"tapAddToCreate": "Tap + to create your first template",
"ok": "OK",
@@ -2377,5 +2381,55 @@
"noContactsOrRoomsAvailable": "No hay contactos o salas disponibles",
"messagesWillBeSentToPublicChannel": "Los mensajes se enviarán al canal público",
"newMessage": "Nuevo mensaje",
"channel": "Canal"
"channel": "Canal",
"samplePoliceLead": "Jefe de Policía",
"sampleDroneOperator": "Operador de Dron",
"sampleFirefighterAlpha": "Bombero",
"sampleMedicCharlie": "Médico",
"sampleCommandDelta": "Comando",
"sampleFireEngine": "Camión de Bomberos",
"sampleAirSupport": "Apoyo Aéreo",
"sampleBaseCoordinator": "Coordinador de Base",
"channelEmergency": "Emergencia",
"channelCoordination": "Coordinación",
"channelUpdates": "Actualizaciones",
"sampleTeamMember": "Miembro de Equipo de Muestra",
"sampleScout": "Explorador de Muestra",
"sampleBase": "Base de Muestra",
"sampleSearcher": "Buscador de Muestra",
"sampleObjectBackpack": " Mochila encontrada - color azul",
"sampleObjectVehicle": " Vehículo abandonado - verificar propietario",
"sampleObjectCamping": " Equipo de camping descubierto",
"sampleObjectTrailMarker": " Marcador de sendero encontrado fuera del camino",
"sampleMsgAllTeamsCheckIn": "Todos los equipos reporten",
"sampleMsgWeatherUpdate": "Actualización del clima: Cielo despejado, temp 18°C",
"sampleMsgBaseCamp": "Campamento base establecido en área de preparación",
"sampleMsgTeamAlpha": "Equipo moviéndose al sector 2",
"sampleMsgRadioCheck": "Prueba de radio - todas las estaciones respondan",
"sampleMsgWaterSupply": "Suministro de agua disponible en punto de control 3",
"sampleMsgTeamBravo": "Equipo reportando: sector 1 despejado",
"sampleMsgEtaRallyPoint": "ETA al punto de encuentro: 15 minutos",
"sampleMsgSupplyDrop": "Caída de suministros confirmada para las 14:00",
"sampleMsgDroneSurvey": "Inspección con dron completada - sin hallazgos",
"sampleMsgTeamCharlie": "Equipo solicitando apoyo",
"sampleMsgRadioDiscipline": "Todas las unidades: mantener disciplina de radio",
"sampleMsgUrgentMedical": "URGENTE: Asistencia médica necesaria en sector 4",
"sampleMsgAdultMale": " Hombre adulto, consciente",
"sampleMsgFireSpotted": "Fuego avistado - coordenadas próximas",
"sampleMsgSpreadingRapidly": " ¡Se propaga rápidamente!",
"sampleMsgPriorityHelicopter": "PRIORIDAD: Necesitamos apoyo de helicóptero",
"sampleMsgMedicalTeamEnRoute": "Equipo médico en camino a su ubicación",
"sampleMsgEvacHelicopter": "Helicóptero de evacuación ETA 10 minutos",
"sampleMsgEmergencyResolved": "Emergencia resuelta - todo despejado",
"sampleMsgEmergencyStagingArea": " Área de preparación de emergencia",
"sampleMsgEmergencyServices": "Servicios de emergencia notificados y respondiendo",
"sampleAlphaTeamLead": "Líder de Equipo",
"sampleBravoScout": "Explorador",
"sampleCharlieMedic": "Médico",
"sampleDeltaNavigator": "Navegador",
"sampleEchoSupport": "Apoyo",
"sampleBaseCommand": "Comando de Base",
"sampleFieldCoordinator": "Coordinador de Campo",
"sampleMedicalTeam": "Equipo Médico"
}