Enhance user profile and world travel pages with improved UI and functionality

- Updated user profile page to include achievement calculations and enhanced styling for user information and statistics.
- Added icons for better visual representation of user stats and achievements.
- Improved layout for displaying adventures and collections with conditional rendering for empty states.
- Refactored world travel page to include search and filter functionality for cities, with a sidebar for progress and stats.
- Implemented completion percentage and progress bars for visited cities.
- Enhanced map integration with markers for visited and not visited cities, including toggle options for map labels.
This commit is contained in:
Sean Morley
2025-06-14 11:10:59 -04:00
parent d4c76f8718
commit 151c76dbd1
21 changed files with 2209 additions and 2461 deletions

View File

@@ -14,18 +14,8 @@
"logout": "Cerrar Sesión",
"about": "Acerca de AdventureLog",
"documentation": "Documentación",
"discord": "Discord",
"theme_selection": "Selección de Tema",
"themes": {
"light": "Claro",
"dark": "Oscuro",
"night": "Noche",
"forest": "Bosque",
"aqua": "Aqua",
"aestheticDark": "Estética Oscura",
"aestheticLight": "Estética Clara",
"northernLights": "Aurora Boreal"
},
"themes": {},
"my_tags": "Mis etiquetas",
"tag": "Etiqueta",
"language_selection": "Idioma",
@@ -70,33 +60,8 @@
"remove_from_collection": "Eliminar de la Colección",
"add_to_collection": "Añadir a la Colección",
"delete": "Eliminar",
"activities": {
"activity": "Actividad 🏄",
"art_museums": "Arte y Museos 🎨",
"attraction": "Atracción 🎢",
"culture": "Cultura 🎭",
"dining": "Cenar 🍽️",
"event": "Evento 🎉",
"festivals": "Festivales 🎪",
"fitness": "Ejercicio 🏋️",
"general": "General 🌍",
"hiking": "Senderismo 🥾",
"historical_sites": "Sitios Históricos 🏛️",
"lodging": "Alojamiento 🛌",
"music_concerts": "Música y Conciertos 🎶",
"nightlife": "Vida nocturna 🌃",
"other": "Otro",
"outdoor": "Al aire libre 🏞️",
"shopping": "Compras 🛍️",
"spiritual_journeys": "Viajes espirituales 🧘‍♀️",
"transportation": "Transporte 🚗",
"volunteer_work": "Trabajo voluntario 🤝",
"water_sports": "Deportes acuáticos 🚤",
"wildlife": "Vida silvestre 🦒"
},
"activities": {},
"no_image_found": "No se encontró ninguna imagen",
"adventure_details": "Detalles de la aventura",
"adventure_type": "Tipo de aventura",
"collection": "Colección",
"homepage": "Página principal",
"latitude": "Latitud",
@@ -123,7 +88,6 @@
"category_filter": "Filtro de categoría",
"clear": "Limpiar",
"archived_collections": "Colecciones archivadas",
"close_filters": "Cerrar filtros",
"my_collections": "Mis colecciones",
"open_filters": "Abrir filtros",
"private": "Privado",
@@ -153,7 +117,6 @@
"start_before_end_error": "La fecha de inicio debe ser anterior a la fecha de finalización.",
"wiki_image_error": "Error al obtener la imagen de Wikipedia",
"actions": "Acciones",
"activity": "Actividad",
"see_adventures": "Ver Aventuras",
"activity_types": "Tipos de actividad",
"add": "Agregar",
@@ -177,34 +140,28 @@
"location": "Ubicación",
"location_information": "Información de ubicación",
"my_images": "Mis imágenes",
"my_visits": "Mis visitas",
"new_adventure": "Nueva aventura",
"no_description_found": "No se encontró ninguna descripción",
"no_images": "Sin imágenes",
"no_location": "Por favor ingresa una ubicación",
"no_results": "No se encontraron resultados",
"no_start_date": "Por favor ingrese una fecha de inicio",
"public_adventure": "Aventura pública",
"remove": "Eliminar",
"save_next": "Guardar y Siguiente",
"search_for_location": "Buscar una ubicación",
"search_results": "Resultados de búsqueda",
"select_adventure_category": "Seleccionar categoría de aventura",
"share_adventure": "¡Comparte esta aventura!",
"start_date": "Fecha de inicio",
"upload_image": "Subir imagen",
"upload_images_here": "Sube imágenes aquí",
"url": "URL",
"warning": "Advertencia",
"wiki_desc": "Extrae un extracto de un artículo de Wikipedia que coincide con el nombre de la aventura.",
"wikipedia": "Wikipedia",
"add_an_activity": "Agregar una actividad",
"adventure_not_found": "No hay aventuras que mostrar. \n¡Agregue algunas usando el botón más en la parte inferior derecha o intente cambiar los filtros!",
"no_adventures_found": "No se encontraron aventuras",
"no_collections_found": "No se encontraron colecciones para agregar esta aventura.",
"my_adventures": "Mis aventuras",
"no_linkable_adventures": "No se encontraron aventuras que puedan vincularse a esta colección.",
"mark_region_as_visited": "¿Marcar región {region}, {country} como visitada?",
"mark_visited": "Marcar como visitado",
"not_visited": "No visitado",
"all": "Todo",
@@ -226,7 +183,6 @@
"link_new": "Vincula una Nueva...",
"linked_adventures": "Aventuras vinculadas",
"links": "Enlaces",
"no_end_date": "Por favor ingresa una fecha de finalización",
"note": "Nota",
"notes": "Notas",
"nothing_planned": "Nada planeado para este día. \n¡Disfruta el viaje!",
@@ -265,7 +221,6 @@
"starting_airport": "Aeropuerto de inicio",
"to": "A",
"transportation_delete_confirm": "¿Está seguro de que desea eliminar este transporte? \nEsta acción no se puede deshacer.",
"show_map": "Mostrar mapa",
"will_be_marked": "se marcará como visitado una vez guardada la aventura.",
"cities_updated": "ciudades actualizadas",
"create_adventure": "Crear aventura",
@@ -280,11 +235,8 @@
"attachments": "Adjuntos",
"gpx_tip": "¡Sube archivos GPX a archivos adjuntos para verlos en el mapa!",
"images": "Imágenes",
"primary": "Principal",
"upload": "Subir",
"view_attachment": "Ver archivo adjunto",
"attachment_name": "Nombre del archivo adjunto",
"of": "de",
"city": "Ciudad",
"delete_lodging": "Eliminar alojamiento",
"display_name": "Nombre para mostrar",
@@ -295,16 +247,13 @@
"price": "Precio",
"region": "Región",
"reservation_number": "Número de reserva",
"welcome_map_info": "Aventuras públicas en este servidor",
"open_in_maps": "Abrir en mapas",
"all_day": "Todo el día",
"collection_no_start_end_date": "Agregar una fecha de inicio y finalización a la colección desbloqueará las funciones de planificación del itinerario en la página de colección.",
"date_itinerary": "Itinerario de fecha",
"no_ordered_items": "Agregue elementos con fechas a la colección para verlos aquí.",
"ordered_itinerary": "Itinerario ordenado",
"additional_info": "información adicional",
"invalid_date_range": "Rango de fechas no válido",
"sunrise_sunset": "Amanecer y Atardecer",
"timezone": "Zona horaria",
"no_visits": "No hay visitas",
"arrival_timezone": "Zona horaria de llegada",
@@ -334,14 +283,12 @@
"num_countries": "países encontrados",
"partially_visited": "Parcialmente visitado",
"country_list": "Lista de países",
"all_visited": "Has visitado todas las regiones en",
"cities": "ciudades",
"failed_to_mark_visit": "No se pudo marcar la visita a",
"failed_to_remove_visit": "No se pudo eliminar la visita a",
"marked_visited": "marcado como visitado",
"no_cities_found": "No se encontraron ciudades",
"region_failed_visited": "No se pudo marcar la región como visitada",
"region_stats": "Estadísticas de la región",
"regions_in": "Regiones en",
"removed": "eliminado",
"view_cities": "Ver ciudades",
@@ -363,10 +310,7 @@
"profile_picture": "Foto de perfil",
"public_profile": "Perfil público",
"public_tooltip": "Con un perfil público, los usuarios pueden compartir colecciones con usted y ver su perfil en la página de usuarios.",
"email_required": "Se requiere correo electrónico",
"both_passwords_required": "Se requieren ambas contraseñas",
"new_password": "Nueva contraseña",
"reset_failed": "No se pudo restablecer la contraseña",
"or_3rd_party": "O inicie sesión con un servicio de terceros",
"no_public_adventures": "No se encontraron aventuras públicas",
"no_public_collections": "No se encontraron colecciones públicas",
@@ -379,7 +323,6 @@
"settings": {
"account_settings": "Configuración de cuenta de usuario",
"confirm_new_password": "Confirmar nueva contraseña",
"current_email": "Correo electrónico actual",
"email_change": "Cambiar correo electrónico",
"new_email": "Nuevo correo electrónico",
"new_password": "Nueva contraseña",
@@ -390,25 +333,16 @@
"update_error": "Error al actualizar la configuración",
"update_success": "¡La configuración se actualizó correctamente!",
"change_password": "Cambiar la contraseña",
"login_redir": "Luego será redirigido a la página de inicio de sesión.",
"missing_email": "Por favor ingrese una dirección de correo electrónico",
"possible_reset": "Si la dirección de correo electrónico que proporcionó está asociada con una cuenta, recibirá un correo electrónico con instrucciones para restablecer su contraseña.",
"reset_password": "Restablecer contraseña",
"token_required": "Se requieren token y UID para restablecer la contraseña.",
"password_does_not_match": "Las contraseñas no coinciden",
"password_is_required": "Se requiere contraseña",
"submit": "Enviar",
"invalid_token": "El token no es válido o ha caducado",
"about_this_background": "Sobre este fondo",
"join_discord": "Únete a Discord",
"join_discord_desc": "para compartir tus propias fotos. Publícalos en el canal de #travel-share",
"photo_by": "Foto por",
"change_password_error": "No se puede cambiar la contraseña. \nContraseña actual no válida o contraseña nueva no válida.",
"current_password": "Contraseña actual",
"password_change_lopout_warning": "Se cerrará su sesión después de cambiar su contraseña.",
"generic_error": "Se produjo un error al procesar su solicitud.",
"email_added": "¡Correo electrónico añadido exitosamente!",
"email_added_error": "Error al añadir correo electrónico",
"email_removed": "¡El correo electrónico se eliminó correctamente!",
"email_removed_error": "Error al eliminar el correo electrónico",
"email_set_primary": "¡El correo electrónico se configuró como principal correctamente!",
@@ -420,7 +354,6 @@
"verify": "Verificar",
"verify_email_error": "Error al verificar el correo electrónico. \nInténtalo de nuevo en unos minutos.",
"verify_email_success": "¡La verificación por correo electrónico se envió correctamente!",
"error_change_password": "Error al cambiar la contraseña. \nPor favor verifique su contraseña actual e inténtelo nuevamente.",
"disable_mfa": "Deshabilitar MFA",
"enable_mfa": "Habilitar MFA",
"mfa_disabled": "¡La autenticación multifactor se deshabilitó correctamente!",
@@ -435,28 +368,13 @@
"email_verified": "¡Correo electrónico verificado exitosamente!",
"email_verified_error": "Error al verificar el correo electrónico",
"email_verified_success": "Su correo electrónico ha sido verificado. \nAhora puedes iniciar sesión.",
"invalid_code": "Código MFA no válido",
"invalid_credentials": "Nombre de usuario o contraseña no válidos",
"mfa_required": "Se requiere autenticación multifactor",
"add_email_blocked": "No puede agregar una dirección de correo electrónico a una cuenta protegida por autenticación de dos factores.",
"required": "Este campo es obligatorio",
"csrf_failed": "No se pudo recuperar el token CSRF",
"duplicate_email": "Esta dirección de correo electrónico ya está en uso.",
"email_taken": "Esta dirección de correo electrónico ya está en uso.",
"username_taken": "Este nombre de usuario ya está en uso.",
"administration_settings": "Configuración de administración",
"documentation_link": "Enlace de documentación",
"launch_account_connections": "Iniciar conexiones de cuenta",
"launch_administration_panel": "Iniciar el panel de administración",
"no_verified_email_warning": "Debe tener una dirección de correo electrónico verificada para habilitar la autenticación de dos factores.",
"social_auth_desc": "Habilite o deshabilite los proveedores de autenticación social y OIDC para su cuenta. \nEstas conexiones le permiten iniciar sesión con proveedores de identidad de autenticación autohospedados como Authentik o proveedores externos como GitHub.",
"social_auth_desc_2": "Estas configuraciones se administran en el servidor AdventureLog y el administrador debe habilitarlas manualmente.",
"social_oidc_auth": "Autenticación social y OIDC",
"add_email": "Agregar correo electrónico",
"password_too_short": "La contraseña debe tener al menos 6 caracteres.",
"disable_password": "Desactivar contraseña",
"password_disable": "Desactivar la autenticación de contraseña",
"password_disable_desc": "Desactivar la autenticación de contraseña le impedirá iniciar sesión con una contraseña. \nDeberá utilizar un proveedor social o OIDC para iniciar sesión. Si su proveedor social no está vinculado, la autenticación de contraseña se volverá a habilitar automáticamente incluso si esta configuración está deshabilitada.",
"password_disable_warning": "Actualmente, la autenticación de contraseña está deshabilitada. \nIniciar sesión a través de un proveedor social o OIDC se requiere.",
"password_disabled": "Autenticación de contraseña deshabilitada",
"password_disabled_error": "Error al deshabilitar la autenticación de contraseña. \nAsegúrese de que un proveedor social o OIDC esté vinculado a su cuenta.",
@@ -464,7 +382,6 @@
"password_enabled_error": "Error al habilitar la autenticación de contraseña.",
"admin": "Administración",
"advanced": "Avanzado",
"confirm_new_password_desc": "Confirmar nueva contraseña",
"disabled": "Desactivado",
"emails": "Correos electrónicos",
"enabled": "Activado",
@@ -514,31 +431,24 @@
"license": "Licencia",
"all_rights_reserved": "Reservados todos los derechos.",
"email_verified_erorr_desc": "Su correo electrónico no pudo ser verificado. \nPor favor intente de nuevo.",
"email_verified_error_desc": "Su correo electrónico no pudo ser verificado. \nPor favor intente de nuevo.",
"no_emai_set": "Sin conjunto de correo electrónico"
},
"checklist": {
"add_item": "Añadir elemento",
"checklist_delete_error": "Error al eliminar la lista de tareas",
"checklist_deleted": "¡Lista de tareas eliminada exitosamente!",
"checklist_editor": "Editor de lista de tareas",
"checklist_public": "Esta lista de tareas es pública porque se encuentra en una colección pública.",
"editing_checklist": "Editando lista de tareas",
"failed_to_save": "No se pudo guardar la lista de tareas",
"item": "Elemento",
"item_already_exists": "El elemento ya existe",
"item_cannot_be_empty": "El elemento no puede estar vacío",
"items": "Elementos",
"new_item": "Nuevo artículo",
"save": "Guardar",
"checklist_viewer": "Visor de lista de verificación",
"new_checklist": "Nueva lista de verificación"
},
"collection": {
"collection_created": "¡Colección creada con éxito!",
"collection_edit_success": "¡Colección editada con éxito!",
"create": "Crear",
"edit_collection": "Editar colección",
"error_creating_collection": "Error al crear la colección",
"error_editing_collection": "Error al editar la colección",
"new_collection": "Nueva colección",
@@ -560,8 +470,6 @@
"note_viewer": "Visor de notas"
},
"transportation": {
"date_and_time": "Fecha y Hora",
"error_editing_transportation": "Error al editar el transporte",
"modes": {
"bus": "Autobús",
"bike": "Bicicleta",
@@ -573,20 +481,13 @@
"walking": "Caminando"
},
"new_transportation": "Nuevo transporte",
"provide_start_date": "Por favor proporcione una fecha de inicio",
"start": "Comenzar",
"to_location": "A la ubicación",
"transport_type": "Tipo de transporte",
"transportation_deleted": "¡Transporte eliminado exitosamente!",
"transportation_edit_success": "Transporte editado exitosamente!",
"type": "Tipo",
"date_time": "Fecha de inicio",
"edit": "Editar",
"edit_transportation": "Editar Transporte",
"end_date_time": "Fecha de finalización",
"flight_number": "Número de vuelo",
"from_location": "Desde la ubicación",
"transportation_added": "¡Transporte agregado exitosamente!",
"transportation_delete_error": "Error al eliminar el transporte",
"ending_airport_desc": "Ingrese el código de aeropuerto final (por ejemplo, LAX)",
"fetch_location_information": "Información de ubicación para obtener",
@@ -634,7 +535,6 @@
"no_categories_found": "No se encontraron categorías.",
"select_category": "Seleccionar categoría",
"update_after_refresh": "Las tarjetas de aventuras se actualizarán una vez que actualices la página.",
"add_category": "Agregar categoría",
"add_new_category": "Agregar nueva categoría"
},
"dashboard": {
@@ -651,25 +551,14 @@
"api_key": "Clave API de Immich",
"api_note": "Nota: esta debe ser la URL del servidor API de Immich, por lo que probablemente termine con /api a menos que tenga una configuración personalizada.",
"disable": "Desactivar",
"enable_immich": "Habilitar Immich",
"imageid_required": "Se requiere identificación con imagen",
"immich": "Immich",
"immich_desc": "Integre su cuenta de Immich con AdventureLog para permitirle buscar en su biblioteca de fotos e importar fotos para sus aventuras.",
"immich_disabled": "¡La integración de Immich se deshabilitó exitosamente!",
"immich_enabled": "¡La integración de Immich se habilitó exitosamente!",
"immich_error": "Error al actualizar la integración de Immich",
"immich_updated": "¡La configuración de Immich se actualizó exitosamente!",
"integration_enabled": "Integración habilitada",
"integration_fetch_error": "Error al obtener datos de la integración de Immich",
"integration_missing": "Falta la integración de Immich en el backend",
"load_more": "Cargar más",
"no_items_found": "No se encontraron elementos",
"query_required": "Se requiere consulta",
"server_down": "El servidor Immich está actualmente inactivo o inaccesible",
"server_url": "URL del servidor Immich",
"update_integration": "Integración de actualización",
"immich_integration": "Integración Immich",
"documentation": "Documentación de integración de Immich",
"localhost_note": "Nota: lo más probable es que localhost no funcione a menos que haya configurado las redes acoplables en consecuencia. \nSe recomienda utilizar la dirección IP del servidor o el nombre de dominio.",
"api_key_placeholder": "Ingrese su clave de API Immich",
"enable_integration": "Habilitar la integración",
@@ -685,15 +574,10 @@
"validation_error": "Se produjo un error al validar la integración de Immich. \nVerifique la URL y la tecla API de su servidor."
},
"recomendations": {
"address": "Dirección",
"contact": "Contacto",
"phone": "Teléfono",
"recommendation": "Recomendación",
"website": "Sitio web",
"recommendations": "Recomendaciones",
"adventure_recommendations": "Recomendaciones de aventura",
"food": "Comida",
"miles": "Millas",
"tourism": "Turismo"
},
"lodging": {
@@ -701,30 +585,17 @@
"bnb": "Cama y desayuno",
"cabin": "Cabina",
"campground": "Terreno de camping",
"check_in": "Registro",
"check_out": "Salida",
"date_and_time": "Fecha",
"edit": "Editar",
"error_editing_lodging": "Error de edición de alojamiento",
"hostel": "Albergue",
"hotel": "Hotel",
"house": "Casa",
"lodging_added": "¡Alojamiento agregado con éxito!",
"lodging_delete_error": "Error de eliminación de alojamiento",
"lodging_deleted": "¡Alojamiento eliminado con éxito!",
"lodging_edit_success": "¡Alojamiento editado con éxito!",
"lodging_type": "Tipo de alojamiento",
"motel": "Motel",
"new_lodging": "Nuevo alojamiento",
"other": "Otro",
"provide_start_date": "Proporcione una fecha de inicio",
"reservation_number": "Número de reserva",
"resort": "Complejo",
"start": "Comenzar",
"type": "Tipo",
"villa": "Villa",
"edit_lodging": "Editar alojamiento",
"current_timezone": "Zona horaria"
"edit_lodging": "Editar alojamiento"
},
"google_maps": {
"google_maps_integration_desc": "Conecte su cuenta de Google Maps para obtener resultados y recomendaciones de búsqueda de ubicación de alta calidad."