feat: Add GPX import/export functionality and enhance trail management

- Implemented GPX export and import features in GpxService for location trails.
- Added UI controls for exporting and importing trails in the TrailControls widget.
- Introduced localization strings for GPX operations in Italian and Slovenian.
- Enhanced MapProvider to manage imported trails and toggle visibility for contact trails.
- Updated trail color management with TrailColorService for consistent color assignment based on contact roles.
- Improved UI for displaying contact trails with toggle options for individual and all contact trails.
- Refactored detailed compass dialog to remove unnecessary path toggle button for contacts.
This commit is contained in:
Janez T
2025-10-28 11:04:09 +01:00
parent a1207ad844
commit e7fe700fee
23 changed files with 1967 additions and 33 deletions

View File

@@ -2310,6 +2310,111 @@
"description": "Tooltip de controles del rastro"
},
"exportTrailToGpx": "Exportar rastro a GPX",
"@exportTrailToGpx": {
"description": "Etiqueta del botón para exportar el rastro a archivo GPX"
},
"importTrailFromGpx": "Importar rastro desde GPX",
"@importTrailFromGpx": {
"description": "Etiqueta del botón para importar el rastro desde archivo GPX"
},
"trailExportedSuccessfully": "¡Rastro exportado exitosamente!",
"@trailExportedSuccessfully": {
"description": "Mensaje de éxito cuando se exporta el rastro"
},
"failedToExportTrail": "Error al exportar el rastro",
"@failedToExportTrail": {
"description": "Mensaje de error cuando falla la exportación del rastro"
},
"failedToImportTrail": "Error al importar el rastro: {error}",
"@failedToImportTrail": {
"description": "Mensaje de error cuando falla la importación del rastro",
"placeholders": {
"error": {
"type": "String"
}
}
},
"importTrail": "Importar rastro",
"@importTrail": {
"description": "Título del diálogo de importación de rastro"
},
"importTrailQuestion": "¿Importar rastro con {pointCount} puntos?\n\nPuede reemplazar su rastro actual o verlo junto a él.",
"@importTrailQuestion": {
"description": "Contenido del diálogo de confirmación de importación de rastro",
"placeholders": {
"pointCount": {
"type": "int"
}
}
},
"viewAlongside": "Ver junto",
"@viewAlongside": {
"description": "Botón para importar el rastro junto al rastro actual"
},
"replaceCurrent": "Reemplazar actual",
"@replaceCurrent": {
"description": "Botón para reemplazar el rastro actual con el rastro importado"
},
"trailImported": "¡Rastro importado! ({pointCount} puntos)",
"@trailImported": {
"description": "Mensaje de éxito cuando se importa el rastro",
"placeholders": {
"pointCount": {
"type": "int"
}
}
},
"trailReplaced": "¡Rastro reemplazado! ({pointCount} puntos)",
"@trailReplaced": {
"description": "Mensaje de éxito cuando se reemplaza el rastro",
"placeholders": {
"pointCount": {
"type": "int"
}
}
},
"contactTrails": "Rastros de contactos",
"@contactTrails": {
"description": "Encabezado de la sección de rastros de contactos"
},
"showAllContactTrails": "Mostrar todos los rastros de contactos",
"@showAllContactTrails": {
"description": "Etiqueta del interruptor para mostrar todos los rastros de contactos"
},
"noContactsWithLocationHistory": "No hay contactos con historial de ubicación",
"@noContactsWithLocationHistory": {
"description": "Subtítulo cuando no hay contactos con rastros"
},
"showingTrailsForContacts": "Mostrando rastros para {count} contactos",
"@showingTrailsForContacts": {
"description": "Subtítulo que muestra el número de contactos con rastros",
"placeholders": {
"count": {
"type": "int"
}
}
},
"individualContactTrails": "Rastros individuales de contactos",
"@individualContactTrails": {
"description": "Título del elemento expandible para rastros individuales de contactos"
},
"deviceInformation": "Información del dispositivo",
"@deviceInformation": {
"description": "Encabezado de la sección de información del dispositivo"