const es: Record = { // Common 'common.save': 'Guardar', 'common.cancel': 'Cancelar', 'common.delete': 'Eliminar', 'common.edit': 'Editar', 'common.add': 'Añadir', 'common.loading': 'Cargando...', 'common.error': 'Error', 'common.back': 'Atrás', 'common.all': 'Todo', 'common.close': 'Cerrar', 'common.open': 'Abrir', 'common.upload': 'Subir', 'common.search': 'Buscar', 'common.confirm': 'Confirmar', 'common.ok': 'Aceptar', 'common.yes': 'Sí', 'common.no': 'No', 'common.or': 'o', 'common.none': 'Ninguno', 'common.date': 'Fecha', 'common.rename': 'Renombrar', 'common.name': 'Nombre', 'common.email': 'Correo', 'common.password': 'Contraseña', 'common.saving': 'Guardando...', 'common.update': 'Actualizar', 'common.change': 'Cambiar', 'common.uploading': 'Subiendo…', 'common.backToPlanning': 'Volver a la planificación', 'common.reset': 'Restablecer', // Navbar 'nav.trip': 'Viaje', 'nav.share': 'Compartir', 'nav.settings': 'Ajustes', 'nav.admin': 'Administración', 'nav.logout': 'Cerrar sesión', 'nav.lightMode': 'Modo claro', 'nav.darkMode': 'Modo oscuro', 'nav.autoMode': 'Modo automático', 'nav.administrator': 'Administrador', 'nav.myTrips': 'Mis viajes', // Dashboard 'dashboard.title': 'Mis viajes', 'dashboard.subtitle.loading': 'Cargando viajes...', 'dashboard.subtitle.trips': '{count} viajes ({archived} archivados)', 'dashboard.subtitle.empty': 'Empieza tu primer viaje', 'dashboard.subtitle.activeOne': '{count} viaje activo', 'dashboard.subtitle.activeMany': '{count} viajes activos', 'dashboard.subtitle.archivedSuffix': ' · {count} archivados', 'dashboard.newTrip': 'Nuevo viaje', 'dashboard.gridView': 'Vista de cuadrícula', 'dashboard.listView': 'Vista de lista', 'dashboard.currency': 'Divisa', 'dashboard.timezone': 'Zonas horarias', 'dashboard.localTime': 'Hora local', 'dashboard.timezoneCustomTitle': 'Zona horaria personalizada', 'dashboard.timezoneCustomLabelPlaceholder': 'Nombre (opcional)', 'dashboard.timezoneCustomTzPlaceholder': 'ej. America/New_York', 'dashboard.timezoneCustomAdd': 'Añadir', 'dashboard.timezoneCustomErrorEmpty': 'Introduce una zona horaria', 'dashboard.timezoneCustomErrorInvalid': 'Zona horaria no válida. Usa formato como Europe/Madrid', 'dashboard.timezoneCustomErrorDuplicate': 'Ya añadida', 'dashboard.emptyTitle': 'Aún no hay viajes', 'dashboard.emptyText': 'Crea tu primer viaje y empieza a planificar', 'dashboard.emptyButton': 'Crear primer viaje', 'dashboard.nextTrip': 'Próximo viaje', 'dashboard.shared': 'Compartido', 'dashboard.sharedBy': 'Compartido por {name}', 'dashboard.days': 'Días', 'dashboard.places': 'Lugares', 'dashboard.archive': 'Archivar', 'dashboard.restore': 'Restaurar', 'dashboard.archived': 'Archivado', 'dashboard.status.ongoing': 'En curso', 'dashboard.status.today': 'Hoy', 'dashboard.status.tomorrow': 'Mañana', 'dashboard.status.past': 'Pasado', 'dashboard.status.daysLeft': 'Quedan {count} días', 'dashboard.toast.loadError': 'No se pudieron cargar los viajes', 'dashboard.toast.created': '¡Viaje creado correctamente!', 'dashboard.toast.createError': 'No se pudo crear el viaje', 'dashboard.toast.updated': '¡Viaje actualizado!', 'dashboard.toast.updateError': 'No se pudo actualizar el viaje', 'dashboard.toast.deleted': 'Viaje eliminado', 'dashboard.toast.deleteError': 'No se pudo eliminar el viaje', 'dashboard.toast.archived': 'Viaje archivado', 'dashboard.toast.archiveError': 'No se pudo archivar el viaje', 'dashboard.toast.restored': 'Viaje restaurado', 'dashboard.toast.restoreError': 'No se pudo restaurar el viaje', 'dashboard.confirm.delete': '¿Eliminar el viaje "{title}"? Todos los lugares y planes se borrarán permanentemente.', 'dashboard.editTrip': 'Editar viaje', 'dashboard.createTrip': 'Crear nuevo viaje', 'dashboard.tripTitle': 'Título', 'dashboard.tripTitlePlaceholder': 'p. ej. Verano en Japón', 'dashboard.tripDescription': 'Descripción', 'dashboard.tripDescriptionPlaceholder': '¿De qué trata este viaje?', 'dashboard.startDate': 'Fecha de inicio', 'dashboard.endDate': 'Fecha de fin', 'dashboard.noDateHint': 'Sin fecha definida: se crearán 7 días por defecto. Puedes cambiarlo cuando quieras.', 'dashboard.coverImage': 'Imagen de portada', 'dashboard.addCoverImage': 'Añadir imagen de portada', 'dashboard.addMembers': 'Compañeros de viaje', 'dashboard.addMember': 'Añadir miembro', 'dashboard.coverSaved': 'Imagen de portada guardada', 'dashboard.coverUploadError': 'Error al subir la imagen', 'dashboard.coverRemoveError': 'Error al eliminar la imagen', 'dashboard.titleRequired': 'El título es obligatorio', 'dashboard.endDateError': 'La fecha de fin debe ser posterior a la de inicio', // Settings 'settings.title': 'Ajustes', 'settings.subtitle': 'Configura tus ajustes personales', 'settings.map': 'Mapa', 'settings.mapTemplate': 'Plantilla del mapa', 'settings.mapTemplatePlaceholder.select': 'Seleccionar plantilla...', 'settings.mapDefaultHint': 'Déjalo vacío para OpenStreetMap (por defecto)', 'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', 'settings.mapHint': 'Plantilla de URL para los mosaicos del mapa', 'settings.latitude': 'Latitud', 'settings.longitude': 'Longitud', 'settings.saveMap': 'Guardar mapa', 'settings.apiKeys': 'Claves API', 'settings.mapsKey': 'Clave API de Google Maps', 'settings.mapsKeyHint': 'Necesaria para buscar lugares. Consíguela en console.cloud.google.com', 'settings.weatherKey': 'Clave API de OpenWeatherMap', 'settings.weatherKeyHint': 'Para datos meteorológicos. Gratis en openweathermap.org/api', 'settings.keyPlaceholder': 'Introduce la clave...', 'settings.configured': 'Configurado', 'settings.saveKeys': 'Guardar claves', 'settings.display': 'Visualización', 'settings.colorMode': 'Modo de color', 'settings.light': 'Claro', 'settings.dark': 'Oscuro', 'settings.auto': 'Automático', 'settings.language': 'Idioma', 'settings.temperature': 'Unidad de temperatura', 'settings.timeFormat': 'Formato de hora', 'settings.routeCalculation': 'Cálculo de ruta', 'settings.blurBookingCodes': 'Difuminar códigos de reserva', 'settings.on': 'Activado', 'settings.off': 'Desactivado', 'settings.account': 'Cuenta', 'settings.username': 'Usuario', 'settings.email': 'Correo', 'settings.role': 'Rol', 'settings.roleAdmin': 'Administrador', 'settings.oidcLinked': 'Vinculado con', 'settings.changePassword': 'Cambiar contraseña', 'settings.currentPassword': 'Contraseña actual', 'settings.newPassword': 'Nueva contraseña', 'settings.confirmPassword': 'Confirmar nueva contraseña', 'settings.updatePassword': 'Actualizar contraseña', 'settings.passwordRequired': 'Introduce la contraseña actual y la nueva', 'settings.passwordTooShort': 'La contraseña debe tener al menos 8 caracteres', 'settings.passwordMismatch': 'Las contraseñas no coinciden', 'settings.passwordChanged': 'Contraseña cambiada correctamente', 'settings.deleteAccount': 'Eliminar cuenta', 'settings.deleteAccountTitle': '¿Eliminar tu cuenta?', 'settings.deleteAccountWarning': 'Tu cuenta y todos tus viajes, lugares y archivos se eliminarán permanentemente. Esta acción no se puede deshacer.', 'settings.deleteAccountConfirm': 'Eliminar permanentemente', 'settings.deleteBlockedTitle': 'No es posible eliminarla', 'settings.deleteBlockedMessage': 'Eres el único administrador. Asciende a otro usuario a administrador antes de eliminar tu cuenta.', 'settings.roleUser': 'Usuario', 'settings.saveProfile': 'Guardar perfil', 'settings.mfa.title': 'Autenticación de dos factores (2FA)', 'settings.mfa.description': 'Añade un segundo paso al iniciar sesión. Usa una app de autenticación (Google Authenticator, Authy, etc.).', 'settings.mfa.enabled': '2FA está activado en tu cuenta.', 'settings.mfa.disabled': '2FA no está activado.', 'settings.mfa.setup': 'Configurar autenticador', 'settings.mfa.scanQr': 'Escanea este código QR con tu app o introduce la clave manualmente.', 'settings.mfa.secretLabel': 'Clave secreta (entrada manual)', 'settings.mfa.codePlaceholder': 'Código de 6 dígitos', 'settings.mfa.enable': 'Activar 2FA', 'settings.mfa.cancelSetup': 'Cancelar', 'settings.mfa.disableTitle': 'Desactivar 2FA', 'settings.mfa.disableHint': 'Introduce tu contraseña y un código actual de tu autenticador.', 'settings.mfa.disable': 'Desactivar 2FA', 'settings.mfa.toastEnabled': 'Autenticación de dos factores activada', 'settings.mfa.toastDisabled': 'Autenticación de dos factores desactivada', 'settings.mfa.demoBlocked': 'No disponible en modo demo', 'settings.toast.mapSaved': 'Ajustes del mapa guardados', 'settings.toast.keysSaved': 'Claves API guardadas', 'settings.toast.displaySaved': 'Ajustes de visualización guardados', 'settings.toast.profileSaved': 'Perfil guardado', 'settings.uploadAvatar': 'Subir foto de perfil', 'settings.removeAvatar': 'Eliminar foto de perfil', 'settings.avatarUploaded': 'Foto de perfil actualizada', 'settings.avatarRemoved': 'Foto de perfil eliminada', 'settings.avatarError': 'Falló la subida', // Login 'login.error': 'Inicio de sesión fallido. Revisa tus credenciales.', 'login.tagline': 'Tus viajes.\nTu plan.', 'login.description': 'Planifica viajes en colaboración con mapas interactivos, presupuestos y sincronización en tiempo real.', 'login.features.maps': 'Mapas interactivos', 'login.features.mapsDesc': 'Google Places, rutas y agrupación', 'login.features.realtime': 'Sincronización en tiempo real', 'login.features.realtimeDesc': 'Planificad juntos mediante WebSocket', 'login.features.budget': 'Control de presupuesto', 'login.features.budgetDesc': 'Categorías, gráficos y costes por persona', 'login.features.collab': 'Colaboración', 'login.features.collabDesc': 'Multiusuario con viajes compartidos', 'login.features.packing': 'Listas de equipaje', 'login.features.packingDesc': 'Categorías, progreso y sugerencias', 'login.features.bookings': 'Reservas', 'login.features.bookingsDesc': 'Vuelos, hoteles, restaurantes y más', 'login.features.files': 'Documentos', 'login.features.filesDesc': 'Sube y gestiona documentos', 'login.features.routes': 'Rutas inteligentes', 'login.features.routesDesc': 'Optimización automática y exportación a Google Maps', 'login.selfHosted': 'Autoalojado · Código abierto · Tus datos siguen siendo tuyos', 'login.title': 'Iniciar sesión', 'login.subtitle': 'Bienvenido de nuevo', 'login.signingIn': 'Iniciando sesión…', 'login.signIn': 'Entrar', 'login.createAdmin': 'Crear cuenta de administrador', 'login.createAdminHint': 'Configura la primera cuenta administradora de NOMAD.', 'login.createAccount': 'Crear cuenta', 'login.createAccountHint': 'Crea una cuenta nueva.', 'login.creating': 'Creando…', 'login.noAccount': '¿No tienes cuenta?', 'login.hasAccount': '¿Ya tienes cuenta?', 'login.register': 'Registrarse', 'login.emailPlaceholder': 'tu@correo.com', 'login.username': 'Usuario', 'login.oidc.registrationDisabled': 'El registro está desactivado. Contacta con tu administrador.', 'login.oidc.noEmail': 'No se recibió ningún correo del proveedor.', 'login.mfaTitle': 'Autenticación de dos factores', 'login.mfaSubtitle': 'Introduce el código de 6 dígitos de tu app de autenticación.', 'login.mfaCodeLabel': 'Código de verificación', 'login.mfaCodeRequired': 'Introduce el código de tu app de autenticación.', 'login.mfaHint': 'Abre Google Authenticator, Authy u otra app TOTP.', 'login.mfaBack': '← Volver al inicio de sesión', 'login.mfaVerify': 'Verificar', 'login.oidc.tokenFailed': 'La autenticación falló.', 'login.oidc.invalidState': 'Sesión no válida. Inténtalo de nuevo.', 'login.demoFailed': 'Falló el acceso a la demo', 'login.oidcSignIn': 'Entrar con {name}', 'login.demoHint': 'Prueba la demo: no necesitas registrarte', // Register 'register.passwordMismatch': 'Las contraseñas no coinciden', 'register.passwordTooShort': 'La contraseña debe tener al menos 6 caracteres', 'register.failed': 'Falló el registro', 'register.getStarted': 'Empezar', 'register.subtitle': 'Crea una cuenta y empieza a planificar tus viajes.', 'register.feature1': 'Planes de viaje ilimitados', 'register.feature2': 'Vista de mapa interactiva', 'register.feature3': 'Gestiona lugares y categorías', 'register.feature4': 'Haz seguimiento de las reservas', 'register.feature5': 'Crea listas de equipaje', 'register.feature6': 'Guarda fotos y archivos', 'register.createAccount': 'Crear cuenta', 'register.startPlanning': 'Empieza a planificar tu viaje', 'register.minChars': 'Mín. 6 caracteres', 'register.confirmPassword': 'Confirmar contraseña', 'register.repeatPassword': 'Repetir contraseña', 'register.registering': 'Registrando...', 'register.register': 'Registrarse', 'register.hasAccount': '¿Ya tienes cuenta?', 'register.signIn': 'Iniciar sesión', // Admin 'admin.title': 'Administración', 'admin.subtitle': 'Gestión de usuarios y ajustes del sistema', 'admin.tabs.users': 'Usuarios', 'admin.tabs.categories': 'Categorías', 'admin.tabs.backup': 'Copia de seguridad', 'admin.stats.users': 'Usuarios', 'admin.stats.trips': 'Viajes', 'admin.stats.places': 'Lugares', 'admin.stats.photos': 'Fotos', 'admin.stats.files': 'Archivos', 'admin.table.user': 'Usuario', 'admin.table.email': 'Correo', 'admin.table.role': 'Rol', 'admin.table.created': 'Creado', 'admin.table.lastLogin': 'Último acceso', 'admin.table.actions': 'Acciones', 'admin.you': '(Tú)', 'admin.editUser': 'Editar usuario', 'admin.newPassword': 'Nueva contraseña', 'admin.newPasswordHint': 'Déjalo vacío para mantener la contraseña actual', 'admin.deleteUser': '¿Eliminar al usuario "{name}"? Todos sus viajes se borrarán permanentemente.', 'admin.deleteUserTitle': 'Eliminar usuario', 'admin.newPasswordPlaceholder': 'Introduce una nueva contraseña…', 'admin.toast.loadError': 'No se pudieron cargar los datos de administración', 'admin.toast.userUpdated': 'Usuario actualizado', 'admin.toast.updateError': 'No se pudo actualizar', 'admin.toast.userDeleted': 'Usuario eliminado', 'admin.toast.deleteError': 'No se pudo eliminar', 'admin.toast.cannotDeleteSelf': 'No puedes eliminar tu propia cuenta', 'admin.toast.userCreated': 'Usuario creado', 'admin.toast.createError': 'No se pudo crear el usuario', 'admin.toast.fieldsRequired': 'Usuario, correo y contraseña son obligatorios', 'admin.createUser': 'Crear usuario', 'admin.invite.title': 'Enlaces de invitación', 'admin.invite.subtitle': 'Crear enlaces de registro de un solo uso', 'admin.invite.create': 'Crear enlace', 'admin.invite.createAndCopy': 'Crear y copiar', 'admin.invite.empty': 'No se han creado enlaces de invitación', 'admin.invite.maxUses': 'Usos máx.', 'admin.invite.expiry': 'Expira después de', 'admin.invite.uses': 'usado(s)', 'admin.invite.expiresAt': 'expira el', 'admin.invite.createdBy': 'por', 'admin.invite.active': 'Activo', 'admin.invite.expired': 'Expirado', 'admin.invite.usedUp': 'Agotado', 'admin.invite.copied': 'Enlace de invitación copiado', 'admin.invite.copyLink': 'Copiar enlace', 'admin.invite.deleted': 'Enlace de invitación eliminado', 'admin.invite.createError': 'Error al crear el enlace', 'admin.invite.deleteError': 'Error al eliminar el enlace', 'admin.tabs.settings': 'Ajustes', 'admin.allowRegistration': 'Permitir el registro', 'admin.allowRegistrationHint': 'Los nuevos usuarios pueden registrarse por sí mismos', 'admin.apiKeys': 'Claves API', 'admin.apiKeysHint': 'Opcional. Activa datos ampliados de lugares, como fotos y previsión del tiempo.', 'admin.mapsKey': 'Clave API de Google Maps', 'admin.mapsKeyHint': 'Obligatoria para buscar lugares. Consíguela en console.cloud.google.com', 'admin.mapsKeyHintLong': 'Sin una clave API, la búsqueda de lugares usa OpenStreetMap. Con una clave de Google también se pueden cargar fotos, valoraciones y horarios de apertura. Consíguela en console.cloud.google.com.', 'admin.recommended': 'Recomendado', 'admin.weatherKey': 'Clave API de OpenWeatherMap', 'admin.weatherKeyHint': 'Para datos meteorológicos. Gratis en openweathermap.org', 'admin.validateKey': 'Probar', 'admin.keyValid': 'Conectado', 'admin.keyInvalid': 'No válida', 'admin.keySaved': 'Claves API guardadas', 'admin.oidcTitle': 'Inicio de sesión único (OIDC)', 'admin.oidcSubtitle': 'Permite iniciar sesión mediante proveedores externos como Google, Apple, Authentik o Keycloak.', 'admin.oidcDisplayName': 'Nombre visible', 'admin.oidcIssuer': 'URL del emisor', 'admin.oidcIssuerHint': 'La URL Issuer de OpenID Connect del proveedor. Ej.: https://accounts.google.com', 'admin.oidcSaved': 'Configuración OIDC guardada', // File Types 'admin.fileTypes': 'Tipos de archivo permitidos', 'admin.fileTypesHint': 'Configura qué tipos de archivo pueden subir los usuarios.', 'admin.fileTypesFormat': 'Extensiones separadas por comas (p. ej. jpg,png,pdf,doc). Usa * para permitir todos los tipos.', 'admin.fileTypesSaved': 'Ajustes de tipos de archivo guardados', 'admin.bagTracking.title': 'Seguimiento de equipaje', 'admin.bagTracking.subtitle': 'Activar peso y asignación de equipaje para artículos de la lista', 'admin.tabs.config': 'Configuración', 'admin.tabs.templates': 'Plantillas de equipaje', 'admin.packingTemplates.title': 'Plantillas de equipaje', 'admin.packingTemplates.subtitle': 'Crear listas de equipaje reutilizables para tus viajes', 'admin.packingTemplates.create': 'Nueva plantilla', 'admin.packingTemplates.namePlaceholder': 'Nombre de la plantilla (ej. Vacaciones en la playa)', 'admin.packingTemplates.empty': 'No se han creado plantillas aún', 'admin.packingTemplates.items': 'artículos', 'admin.packingTemplates.categories': 'categorías', 'admin.packingTemplates.itemName': 'Nombre del artículo', 'admin.packingTemplates.itemCategory': 'Categoría', 'admin.packingTemplates.categoryName': 'Nombre de categoría (ej. Ropa)', 'admin.packingTemplates.addCategory': 'Añadir categoría', 'admin.packingTemplates.created': 'Plantilla creada', 'admin.packingTemplates.deleted': 'Plantilla eliminada', 'admin.packingTemplates.loadError': 'Error al cargar plantillas', 'admin.packingTemplates.createError': 'Error al crear plantilla', 'admin.packingTemplates.deleteError': 'Error al eliminar plantilla', 'admin.packingTemplates.saveError': 'Error al guardar', // Addons 'admin.tabs.addons': 'Complementos', 'admin.addons.title': 'Complementos', 'admin.addons.subtitle': 'Activa o desactiva funciones para personalizar tu experiencia en NOMAD.', 'admin.addons.subtitleBefore': 'Activa o desactiva funciones para personalizar tu experiencia en ', 'admin.addons.subtitleAfter': '.', 'admin.addons.enabled': 'Activo', 'admin.addons.disabled': 'Desactivado', 'admin.addons.type.trip': 'Viaje', 'admin.addons.type.global': 'Global', 'admin.addons.tripHint': 'Disponible como pestaña dentro de cada viaje', 'admin.addons.globalHint': 'Disponible como sección independiente en la navegación principal', 'admin.addons.toast.updated': 'Complemento actualizado', 'admin.addons.toast.error': 'No se pudo actualizar el complemento', 'admin.addons.noAddons': 'No hay complementos disponibles', 'admin.weather.title': 'Datos meteorológicos', 'admin.weather.badge': 'Desde el 24 de marzo de 2026', 'admin.weather.description': 'NOMAD utiliza Open-Meteo como fuente de datos meteorológicos. Open-Meteo es un servicio meteorológico gratuito y de código abierto: no requiere clave API.', 'admin.weather.forecast': 'Pronóstico de 16 días', 'admin.weather.forecastDesc': 'Antes eran 5 días (OpenWeatherMap)', 'admin.weather.climate': 'Datos climáticos históricos', 'admin.weather.climateDesc': 'Promedios de los últimos 85 años para fechas posteriores al pronóstico de 16 días', 'admin.weather.requests': '10.000 solicitudes / día', 'admin.weather.requestsDesc': 'Gratis, sin necesidad de clave API', 'admin.weather.locationHint': 'El tiempo se basa en el primer lugar con coordenadas de cada día. Si no hay ningún lugar asignado a un día, se usa como referencia cualquier lugar de la lista.', // GitHub 'admin.tabs.github': 'GitHub', 'admin.github.title': 'Historial de versiones', 'admin.github.subtitle': 'Últimas novedades de {repo}', 'admin.github.latest': 'Última', 'admin.github.prerelease': 'Prelanzamiento', 'admin.github.showDetails': 'Mostrar detalles', 'admin.github.hideDetails': 'Ocultar detalles', 'admin.github.loadMore': 'Cargar más', 'admin.github.loading': 'Cargando...', 'admin.github.support': 'Ayuda a seguir desarrollando TREK', 'admin.github.error': 'No se pudieron cargar las versiones', 'admin.github.by': 'por', 'admin.update.available': 'Actualización disponible', 'admin.update.text': 'NOMAD {version} está disponible. Estás usando {current}.', 'admin.update.button': 'Ver en GitHub', 'admin.update.install': 'Instalar actualización', 'admin.update.confirmTitle': '¿Instalar actualización?', 'admin.update.confirmText': 'NOMAD se actualizará de {current} a {version}. Después, el servidor se reiniciará automáticamente.', 'admin.update.dataInfo': 'Todos tus datos (viajes, usuarios, claves API, subidas, Vacay, Atlas, presupuestos) se conservarán.', 'admin.update.warning': 'La app estará brevemente no disponible durante el reinicio.', 'admin.update.confirm': 'Actualizar ahora', 'admin.update.installing': 'Actualizando…', 'admin.update.success': '¡Actualización instalada! El servidor se está reiniciando…', 'admin.update.failed': 'La actualización falló', 'admin.update.backupHint': 'Recomendamos crear una copia de seguridad antes de actualizar.', 'admin.update.backupLink': 'Ir a Copia de seguridad', 'admin.update.howTo': 'Cómo actualizar', 'admin.update.dockerText': 'Tu instancia de NOMAD se ejecuta en Docker. Para actualizar a {version}, ejecuta los siguientes comandos en tu servidor:', 'admin.update.reloadHint': 'Recarga la página en unos segundos.', // Vacay addon 'vacay.subtitle': 'Planifica y gestiona días de vacaciones', 'vacay.settings': 'Ajustes', 'vacay.year': 'Año', 'vacay.addYear': 'Añadir año', 'vacay.removeYear': 'Eliminar año', 'vacay.removeYearConfirm': '¿Eliminar {year}?', 'vacay.removeYearHint': 'Todas las vacaciones y festivos de empresa de este año se borrarán permanentemente.', 'vacay.remove': 'Eliminar', 'vacay.persons': 'Personas', 'vacay.noPersons': 'No se han añadido personas', 'vacay.addPerson': 'Añadir persona', 'vacay.editPerson': 'Editar persona', 'vacay.removePerson': 'Eliminar persona', 'vacay.removePersonConfirm': '¿Eliminar a {name}?', 'vacay.removePersonHint': 'Todas las vacaciones de esta persona se borrarán permanentemente.', 'vacay.personName': 'Nombre', 'vacay.personNamePlaceholder': 'Introduce un nombre', 'vacay.color': 'Color', 'vacay.add': 'Añadir', 'vacay.legend': 'Leyenda', 'vacay.publicHoliday': 'Festivo', 'vacay.companyHoliday': 'Festivo de empresa', 'vacay.weekend': 'Fin de semana', 'vacay.modeVacation': 'Vacaciones', 'vacay.modeCompany': 'Festivo de empresa', 'vacay.entitlement': 'Derecho', 'vacay.entitlementDays': 'Días', 'vacay.used': 'Usados', 'vacay.remaining': 'Restantes', 'vacay.carriedOver': 'de {year}', 'vacay.blockWeekends': 'Bloquear fines de semana', 'vacay.blockWeekendsHint': 'Impide marcar vacaciones en sábados y domingos', 'vacay.weekendDays': 'Días de fin de semana', 'vacay.mon': 'Lun', 'vacay.tue': 'Mar', 'vacay.wed': 'Mié', 'vacay.thu': 'Jue', 'vacay.fri': 'Vie', 'vacay.sat': 'Sáb', 'vacay.sun': 'Dom', 'vacay.publicHolidays': 'Festivos', 'vacay.publicHolidaysHint': 'Marcar festivos en el calendario', 'vacay.selectCountry': 'Seleccionar país', 'vacay.selectRegion': 'Seleccionar región (opcional)', 'vacay.companyHolidays': 'Festivos de empresa', 'vacay.companyHolidaysHint': 'Permitir marcar días festivos comunes de la empresa', 'vacay.companyHolidaysNoDeduct': 'Los festivos de empresa no descuentan días de vacaciones.', 'vacay.carryOver': 'Arrastrar saldo', 'vacay.carryOverHint': 'Trasladar automáticamente los días restantes al año siguiente', 'vacay.sharing': 'Compartir', 'vacay.sharingHint': 'Comparte tu calendario de vacaciones con otros usuarios de NOMAD', 'vacay.owner': 'Propietario', 'vacay.shareEmailPlaceholder': 'Correo electrónico del usuario de NOMAD', 'vacay.shareSuccess': 'Plan compartido correctamente', 'vacay.shareError': 'No se pudo compartir el plan', 'vacay.dissolve': 'Deshacer fusión', 'vacay.dissolveHint': 'Separar de nuevo los calendarios. Tus entradas se conservarán.', 'vacay.dissolveAction': 'Disolver', 'vacay.dissolved': 'Calendario separado', 'vacay.fusedWith': 'Fusionado con', 'vacay.you': 'tú', 'vacay.noData': 'Sin datos', 'vacay.changeColor': 'Cambiar color', 'vacay.inviteUser': 'Invitar usuario', 'vacay.inviteHint': 'Invita a otro usuario de NOMAD a compartir un calendario combinado de vacaciones.', 'vacay.selectUser': 'Seleccionar usuario', 'vacay.sendInvite': 'Enviar invitación', 'vacay.inviteSent': 'Invitación enviada', 'vacay.inviteError': 'No se pudo enviar la invitación', 'vacay.pending': 'pendiente', 'vacay.noUsersAvailable': 'No hay usuarios disponibles', 'vacay.accept': 'Aceptar', 'vacay.decline': 'Rechazar', 'vacay.acceptFusion': 'Aceptar y fusionar', 'vacay.inviteTitle': 'Solicitud de fusión', 'vacay.inviteWantsToFuse': 'quiere compartir un calendario de vacaciones contigo.', 'vacay.fuseInfo1': 'Ambos veréis todas las entradas de vacaciones en un único calendario compartido.', 'vacay.fuseInfo2': 'Ambas partes pueden crear y editar entradas mutuamente.', 'vacay.fuseInfo3': 'Ambas partes pueden borrar entradas y cambiar el número de días de vacaciones disponibles.', 'vacay.fuseInfo4': 'Ajustes como festivos y festivos de empresa se comparten.', 'vacay.fuseInfo5': 'La fusión puede disolverse en cualquier momento por cualquiera de las partes. Tus entradas se conservarán.', 'vacay.addCalendar': 'Añadir calendario', 'vacay.calendarColor': 'Color', 'vacay.calendarLabel': 'Etiqueta', 'vacay.noCalendars': 'Sin calendarios', // Atlas addon 'atlas.subtitle': 'Tu huella viajera por el mundo', 'atlas.countries': 'Países', 'atlas.trips': 'Viajes', 'atlas.places': 'Lugares', 'atlas.days': 'Días', 'atlas.visitedCountries': 'Países visitados', 'atlas.cities': 'Ciudades', 'atlas.noData': 'Aún no hay datos de viaje', 'atlas.noDataHint': 'Crea un viaje y añade lugares para ver tu mapa del mundo', 'atlas.lastTrip': 'Último viaje', 'atlas.nextTrip': 'Próximo viaje', 'atlas.daysLeft': 'días restantes', 'atlas.streak': 'Racha', 'atlas.year': 'año', 'atlas.years': 'años', 'atlas.yearInRow': 'año seguido', 'atlas.yearsInRow': 'años seguidos', 'atlas.tripIn': 'viaje en', 'atlas.tripsIn': 'viajes en', 'atlas.since': 'desde', 'atlas.europe': 'Europa', 'atlas.asia': 'Asia', 'atlas.northAmerica': 'América del Norte', 'atlas.southAmerica': 'América del Sur', 'atlas.africa': 'África', 'atlas.oceania': 'Oceanía', 'atlas.other': 'Otros', 'atlas.firstVisit': 'Primer viaje', 'atlas.lastVisitLabel': 'Último viaje', 'atlas.tripSingular': 'Viaje', 'atlas.tripPlural': 'Viajes', 'atlas.placeVisited': 'Lugar visitado', 'atlas.placesVisited': 'Lugares visitados', 'atlas.statsTab': 'Estadísticas', 'atlas.bucketTab': 'Lista de deseos', 'atlas.addBucket': 'Añadir a lista de deseos', 'atlas.bucketNamePlaceholder': 'Lugar o destino...', 'atlas.bucketNotesPlaceholder': 'Notas (opcional)', 'atlas.bucketEmpty': 'Tu lista de deseos está vacía', 'atlas.bucketEmptyHint': 'Añade lugares que sueñas con visitar', 'atlas.unmark': 'Eliminar', 'atlas.confirmMark': '¿Marcar este país como visitado?', 'atlas.confirmUnmark': '¿Eliminar este país de tu lista de visitados?', 'atlas.markVisited': 'Marcar como visitado', 'atlas.markVisitedHint': 'Añadir este país a tu lista de visitados', 'atlas.addToBucket': 'Añadir a lista de deseos', 'atlas.addToBucketHint': 'Guardar como lugar que quieres visitar', 'atlas.bucketWhen': '¿Cuándo planeas visitarlo?', // Trip Planner 'trip.tabs.plan': 'Plan', 'trip.tabs.reservations': 'Reservas', 'trip.tabs.reservationsShort': 'Reservas', 'trip.tabs.packing': 'Lista de equipaje', 'trip.tabs.packingShort': 'Equipaje', 'trip.tabs.budget': 'Presupuesto', 'trip.tabs.files': 'Archivos', 'trip.loading': 'Cargando viaje...', 'trip.mobilePlan': 'Plan', 'trip.mobilePlaces': 'Lugares', 'trip.toast.placeUpdated': 'Lugar actualizado', 'trip.toast.placeAdded': 'Lugar añadido', 'trip.toast.placeDeleted': 'Lugar eliminado', 'trip.toast.selectDay': 'Selecciona primero un día', 'trip.toast.assignedToDay': 'Lugar asignado al día', 'trip.toast.reorderError': 'No se pudo reordenar', 'trip.toast.reservationUpdated': 'Reserva actualizada', 'trip.toast.reservationAdded': 'Reserva añadida', 'trip.toast.deleted': 'Eliminado', 'trip.confirm.deletePlace': '¿Seguro que quieres eliminar este lugar?', // Day Plan Sidebar 'dayplan.emptyDay': 'No hay lugares planificados para este día', 'dayplan.addNote': 'Añadir nota', 'dayplan.editNote': 'Editar nota', 'dayplan.noteAdd': 'Añadir nota', 'dayplan.noteEdit': 'Editar nota', 'dayplan.noteTitle': 'Nota', 'dayplan.noteSubtitle': 'Nota diaria', 'dayplan.totalCost': 'Coste total', 'dayplan.days': 'Días', 'dayplan.dayN': 'Día {n}', 'dayplan.calculating': 'Calculando...', 'dayplan.route': 'Ruta', 'dayplan.optimize': 'Optimizar', 'dayplan.optimized': 'Ruta optimizada', 'dayplan.routeError': 'No se pudo calcular la ruta', 'dayplan.toast.needTwoPlaces': 'Se necesitan al menos dos lugares para optimizar la ruta', 'dayplan.toast.routeOptimized': 'Ruta optimizada', 'dayplan.toast.noGeoPlaces': 'No se encontraron lugares con coordenadas para calcular la ruta', 'dayplan.confirmed': 'Confirmado', 'dayplan.pendingRes': 'Pendiente', 'dayplan.pdf': 'PDF', 'dayplan.pdfTooltip': 'Exportar plan diario como PDF', 'dayplan.pdfError': 'No se pudo exportar el PDF', 'dayplan.cannotReorderTransport': 'Las reservas con hora fija no se pueden reordenar', 'dayplan.confirmRemoveTimeTitle': '¿Eliminar hora?', 'dayplan.confirmRemoveTimeBody': 'Este lugar tiene una hora fija ({time}). Al moverlo se eliminará la hora y se permitirá el orden libre.', 'dayplan.confirmRemoveTimeAction': 'Eliminar hora y mover', 'dayplan.cannotDropOnTimed': 'No se pueden colocar elementos entre entradas con hora fija', 'dayplan.cannotBreakChronology': 'Esto rompería el orden cronológico de los elementos y reservas programados', // Places Sidebar 'places.addPlace': 'Añadir lugar/actividad', 'places.importGpx': 'Importar GPX', 'places.gpxImported': '{count} lugares importados desde GPX', 'places.gpxError': 'Error al importar GPX', 'places.assignToDay': '¿A qué día añadirlo?', 'places.all': 'Todo', 'places.unplanned': 'Sin planificar', 'places.search': 'Buscar lugares...', 'places.allCategories': 'Todas las categorías', 'places.count': '{count} lugares', 'places.countSingular': '1 lugar', 'places.allPlanned': 'Todos los lugares están planificados', 'places.noneFound': 'No se encontraron lugares', 'places.editPlace': 'Editar lugar', 'places.formName': 'Nombre', 'places.formNamePlaceholder': 'p. ej. Torre Eiffel', 'places.formDescription': 'Descripción', 'places.formDescriptionPlaceholder': 'Descripción breve...', 'places.formAddress': 'Dirección', 'places.formAddressPlaceholder': 'Calle, ciudad, país', 'places.formLat': 'Latitud (p. ej. 48.8566)', 'places.formLng': 'Longitud (p. ej. 2.3522)', 'places.formCategory': 'Categoría', 'places.noCategory': 'Sin categoría', 'places.categoryNamePlaceholder': 'Nombre de la categoría', 'places.formTime': 'Hora', 'places.startTime': 'Inicio', 'places.endTime': 'Fin', 'places.endTimeBeforeStart': 'La hora de fin es anterior a la de inicio', 'places.timeCollision': 'Solapamiento horario con:', 'places.formWebsite': 'Página web', 'places.formNotesPlaceholder': 'Notas personales...', 'places.formReservation': 'Reserva', 'places.reservationNotesPlaceholder': 'Notas de reserva, número de confirmación...', 'places.mapsSearchPlaceholder': 'Buscar lugares...', 'places.mapsSearchError': 'La búsqueda de lugares falló.', 'places.osmHint': 'Usando búsqueda con OpenStreetMap (sin fotos, horarios ni valoraciones). Añade una clave API de Google en Ajustes para obtener todos los detalles.', 'places.osmActive': 'Búsqueda mediante OpenStreetMap (sin fotos, valoraciones ni horarios). Añade una clave API de Google en Ajustes para datos ampliados.', 'places.categoryCreateError': 'No se pudo crear la categoría', 'places.nameRequired': 'Introduce un nombre', 'places.saveError': 'No se pudo guardar', // Place Inspector 'inspector.opened': 'Abierto', 'inspector.closed': 'Cerrado', 'inspector.openingHours': 'Horario de apertura', 'inspector.showHours': 'Mostrar horario', 'inspector.files': 'Archivos', 'inspector.filesCount': '{count} archivos', 'inspector.removeFromDay': 'Quitar del día', 'inspector.addToDay': 'Añadir al día', 'inspector.confirmedRes': 'Reserva confirmada', 'inspector.pendingRes': 'Reserva pendiente', 'inspector.google': 'Abrir en Google Maps', 'inspector.website': 'Abrir la web', 'inspector.addRes': 'Reserva', 'inspector.editRes': 'Editar reserva', 'inspector.participants': 'Participantes', // Reservations 'reservations.title': 'Reservas', 'reservations.empty': 'Aún no hay reservas', 'reservations.emptyHint': 'Añade reservas de vuelos, hoteles y más', 'reservations.add': 'Añadir reserva', 'reservations.addManual': 'Reserva manual', 'reservations.placeHint': 'Consejo: es mejor crear las reservas directamente desde un lugar para vincularlas con el plan del día.', 'reservations.confirmed': 'Confirmada', 'reservations.pending': 'Pendiente', 'reservations.summary': '{confirmed} confirmadas, {pending} pendientes', 'reservations.fromPlan': 'Del plan', 'reservations.showFiles': 'Mostrar archivos', 'reservations.editTitle': 'Editar reserva', 'reservations.status': 'Estado', 'reservations.datetime': 'Fecha y hora', 'reservations.startTime': 'Hora de inicio', 'reservations.endTime': 'Hora de fin', 'reservations.date': 'Fecha', 'reservations.time': 'Hora', 'reservations.timeAlt': 'Hora (alternativa, p. ej. 19:30)', 'reservations.notes': 'Notas', 'reservations.notesPlaceholder': 'Notas adicionales...', 'reservations.type.flight': 'Vuelo', 'reservations.type.hotel': 'Alojamiento', 'reservations.type.restaurant': 'Restaurante', 'reservations.type.train': 'Tren', 'reservations.type.car': 'Coche de alquiler', 'reservations.type.cruise': 'Crucero', 'reservations.type.event': 'Evento', 'reservations.type.tour': 'Tour', 'reservations.type.other': 'Otro', 'reservations.confirm.delete': '¿Seguro que quieres eliminar la reserva "{name}"?', 'reservations.confirm.deleteTitle': '¿Eliminar reserva?', 'reservations.confirm.deleteBody': '« {name} » se eliminará permanentemente.', 'reservations.toast.updated': 'Reserva actualizada', 'reservations.toast.removed': 'Reserva eliminada', 'reservations.toast.fileUploaded': 'Archivo subido', 'reservations.toast.uploadError': 'No se pudo subir', 'reservations.newTitle': 'Nueva reserva', 'reservations.bookingType': 'Tipo de reserva', 'reservations.titleLabel': 'Título', 'reservations.titlePlaceholder': 'p. ej. Lufthansa LH123, Hotel Adlon, ...', 'reservations.locationAddress': 'Ubicación / dirección', 'reservations.locationPlaceholder': 'Dirección, aeropuerto, hotel...', 'reservations.confirmationCode': 'Código de reserva', 'reservations.confirmationPlaceholder': 'p. ej. ABC12345', 'reservations.day': 'Día', 'reservations.noDay': 'Sin día', 'reservations.place': 'Lugar', 'reservations.noPlace': 'Sin lugar', 'reservations.pendingSave': 'se guardará…', 'reservations.uploading': 'Subiendo...', 'reservations.attachFile': 'Adjuntar archivo', 'reservations.linkExisting': 'Vincular archivo existente', 'reservations.toast.saveError': 'No se pudo guardar', 'reservations.toast.updateError': 'No se pudo actualizar', 'reservations.toast.deleteError': 'No se pudo eliminar', 'reservations.confirm.remove': '¿Eliminar la reserva de "{name}"?', 'reservations.linkAssignment': 'Vincular a una asignación del día', 'reservations.pickAssignment': 'Selecciona una asignación de tu plan...', 'reservations.noAssignment': 'Sin vínculo (independiente)', // Budget 'budget.title': 'Presupuesto', 'budget.emptyTitle': 'Aún no se ha creado ningún presupuesto', 'budget.emptyText': 'Crea categorías y entradas para planificar el presupuesto de tu viaje', 'budget.emptyPlaceholder': 'Introduce el nombre de la categoría...', 'budget.createCategory': 'Crear categoría', 'budget.category': 'Categoría', 'budget.categoryName': 'Nombre de la categoría', 'budget.table.name': 'Nombre', 'budget.table.total': 'Total', 'budget.table.persons': 'Personas', 'budget.table.days': 'Días', 'budget.table.perPerson': 'Por persona', 'budget.table.perDay': 'Por día', 'budget.table.perPersonDay': 'Por pers. / día', 'budget.table.note': 'Nota', 'budget.newEntry': 'Nueva entrada', 'budget.defaultEntry': 'Nueva entrada', 'budget.defaultCategory': 'Nueva categoría', 'budget.total': 'Total', 'budget.totalBudget': 'Presupuesto total', 'budget.byCategory': 'Por categoría', 'budget.editTooltip': 'Haz clic para editar', 'budget.confirm.deleteCategory': '¿Seguro que quieres eliminar la categoría "{name}" con {count} entradas?', 'budget.deleteCategory': 'Eliminar categoría', 'budget.perPerson': 'Por persona', 'budget.paid': 'Pagado', 'budget.open': 'Abrir', 'budget.noMembers': 'No hay miembros asignados', 'budget.settlement': 'Liquidación', 'budget.settlementInfo': 'Haz clic en el avatar de un miembro en una partida del presupuesto para marcarlo en verde — esto significa que ha pagado. La liquidación muestra quién debe cuánto a quién.', 'budget.netBalances': 'Saldos netos', // Files 'files.title': 'Archivos', 'files.count': '{count} archivos', 'files.countSingular': '1 archivo', 'files.uploaded': '{count} archivos subidos', 'files.uploadError': 'La subida falló', 'files.dropzone': 'Arrastra aquí los archivos', 'files.dropzoneHint': 'o haz clic para explorar', 'files.allowedTypes': 'Imágenes, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Máx. 50 MB', 'files.uploading': 'Subiendo...', 'files.filterAll': 'Todo', 'files.filterPdf': 'PDF', 'files.filterImages': 'Imágenes', 'files.filterDocs': 'Documentos', 'files.filterCollab': 'Notas de colaboración', 'files.sourceCollab': 'Desde notas de colaboración', 'files.empty': 'Aún no hay archivos', 'files.emptyHint': 'Sube archivos para adjuntarlos a tu viaje', 'files.openTab': 'Abrir en una pestaña nueva', 'files.confirm.delete': '¿Seguro que quieres eliminar este archivo?', 'files.toast.deleted': 'Archivo eliminado', 'files.toast.deleteError': 'No se pudo eliminar el archivo', 'files.sourcePlan': 'Plan diario', 'files.sourceBooking': 'Reserva', 'files.attach': 'Adjuntar', 'files.pasteHint': 'También puedes pegar imágenes desde el portapapeles (Ctrl+V)', // Packing 'packing.title': 'Lista de equipaje', 'packing.empty': 'La lista de equipaje está vacía', 'packing.import': 'Importar', 'packing.importTitle': 'Importar lista de equipaje', 'packing.importHint': 'Un elemento por línea. Categoría y cantidad opcionales separadas por coma, punto y coma o tabulación: Nombre, Categoría, Cantidad', 'packing.importPlaceholder': 'Cepillo de dientes\nProtector solar, Higiene\nCamisetas, Ropa, 5\nPasaporte, Documentos', 'packing.importCsv': 'Cargar CSV/TXT', 'packing.importAction': 'Importar {count}', 'packing.importSuccess': '{count} elementos importados', 'packing.importError': 'Error al importar', 'packing.importEmpty': 'Sin elementos para importar', 'packing.progress': '{packed} de {total} preparados ({percent}%)', 'packing.clearChecked': 'Eliminar {count} marcados', 'packing.clearCheckedShort': 'Eliminar {count}', 'packing.suggestions': 'Sugerencias', 'packing.suggestionsTitle': 'Añadir sugerencias', 'packing.allSuggested': 'Todas las sugerencias añadidas', 'packing.allPacked': '¡Todo preparado!', 'packing.addPlaceholder': 'Añadir nuevo elemento...', 'packing.categoryPlaceholder': 'Categoría...', 'packing.filterAll': 'Todo', 'packing.filterOpen': 'Pendientes', 'packing.filterDone': 'Hecho', 'packing.emptyTitle': 'La lista de equipaje está vacía', 'packing.emptyHint': 'Añade elementos o usa las sugerencias', 'packing.emptyFiltered': 'Ningún elemento coincide con este filtro', 'packing.menuRename': 'Renombrar', 'packing.menuCheckAll': 'Marcar todo', 'packing.menuUncheckAll': 'Desmarcar todo', 'packing.menuDeleteCat': 'Eliminar categoría', 'packing.addItem': 'Añadir artículo', 'packing.addItemPlaceholder': 'Nombre del artículo...', 'packing.addCategory': 'Añadir categoría', 'packing.newCategoryPlaceholder': 'Nombre de categoría (ej. Ropa)', 'packing.applyTemplate': 'Aplicar plantilla', 'packing.template': 'Plantilla', 'packing.templateApplied': '{count} artículos añadidos desde plantilla', 'packing.templateError': 'Error al aplicar plantilla', 'packing.assignUser': 'Asignar usuario', 'packing.noMembers': 'Sin miembros', 'packing.bags': 'Equipaje', 'packing.noBag': 'Sin asignar', 'packing.totalWeight': 'Peso total', 'packing.bagName': 'Nombre...', 'packing.addBag': 'Añadir equipaje', 'packing.changeCategory': 'Cambiar categoría', 'packing.confirm.clearChecked': '¿Seguro que quieres eliminar {count} elementos marcados?', 'packing.confirm.deleteCat': '¿Seguro que quieres eliminar la categoría "{name}" con {count} elementos?', 'packing.defaultCategory': 'Otros', 'packing.toast.saveError': 'No se pudo guardar', 'packing.toast.deleteError': 'No se pudo eliminar', 'packing.toast.renameError': 'No se pudo renombrar', 'packing.toast.addError': 'No se pudo añadir', // Packing suggestions 'packing.suggestions.items': [ { name: 'Pasaporte', category: 'Documentos' }, { name: 'Documento de identidad', category: 'Documentos' }, { name: 'Seguro de viaje', category: 'Documentos' }, { name: 'Billetes de vuelo', category: 'Documentos' }, { name: 'Tarjeta de crédito', category: 'Finanzas' }, { name: 'Efectivo', category: 'Finanzas' }, { name: 'Visado', category: 'Documentos' }, { name: 'Camisetas', category: 'Ropa' }, { name: 'Pantalones', category: 'Ropa' }, { name: 'Ropa interior', category: 'Ropa' }, { name: 'Calcetines', category: 'Ropa' }, { name: 'Chaqueta', category: 'Ropa' }, { name: 'Pijama', category: 'Ropa' }, { name: 'Ropa de baño', category: 'Ropa' }, { name: 'Impermeable', category: 'Ropa' }, { name: 'Zapatos cómodos', category: 'Ropa' }, { name: 'Cepillo de dientes', category: 'Aseo' }, { name: 'Pasta de dientes', category: 'Aseo' }, { name: 'Champú', category: 'Aseo' }, { name: 'Desodorante', category: 'Aseo' }, { name: 'Protector solar', category: 'Aseo' }, { name: 'Maquinilla de afeitar', category: 'Aseo' }, { name: 'Cargador', category: 'Electrónica' }, { name: 'Batería externa', category: 'Electrónica' }, { name: 'Auriculares', category: 'Electrónica' }, { name: 'Adaptador de viaje', category: 'Electrónica' }, { name: 'Cámara', category: 'Electrónica' }, { name: 'Analgésicos', category: 'Salud' }, { name: 'Tiritas', category: 'Salud' }, { name: 'Desinfectante', category: 'Salud' }, ], // Members / Sharing 'members.shareTrip': 'Compartir viaje', 'members.inviteUser': 'Invitar usuario', 'members.selectUser': 'Seleccionar usuario…', 'members.invite': 'Invitar', 'members.allHaveAccess': 'Todos los usuarios ya tienen acceso.', 'members.access': 'Acceso', 'members.person': 'persona', 'members.persons': 'personas', 'members.you': 'tú', 'members.owner': 'Propietario', 'members.leaveTrip': 'Abandonar viaje', 'members.removeAccess': 'Quitar acceso', 'members.confirmLeave': '¿Abandonar el viaje? Perderás el acceso.', 'members.confirmRemove': '¿Quitar el acceso de este usuario?', 'members.loadError': 'No se pudieron cargar los miembros', 'members.added': 'añadido', 'members.addError': 'No se pudo añadir', 'members.removed': 'Miembro eliminado', 'members.removeError': 'No se pudo eliminar', // Categories (Admin) 'categories.title': 'Categorías', 'categories.subtitle': 'Gestiona categorías para lugares', 'categories.new': 'Nueva categoría', 'categories.empty': 'Aún no hay categorías', 'categories.namePlaceholder': 'Nombre de la categoría', 'categories.icon': 'Icono', 'categories.color': 'Color', 'categories.customColor': 'Elegir color personalizado', 'categories.preview': 'Vista previa', 'categories.defaultName': 'Categoría', 'categories.update': 'Actualizar', 'categories.create': 'Crear', 'categories.confirm.delete': '¿Eliminar la categoría? Los lugares de esta categoría no se eliminarán.', 'categories.toast.loadError': 'No se pudieron cargar las categorías', 'categories.toast.nameRequired': 'Introduce un nombre', 'categories.toast.updated': 'Categoría actualizada', 'categories.toast.created': 'Categoría creada', 'categories.toast.saveError': 'No se pudo guardar', 'categories.toast.deleted': 'Categoría eliminada', 'categories.toast.deleteError': 'No se pudo eliminar', // Backup (Admin) 'backup.title': 'Copia de seguridad de datos', 'backup.subtitle': 'Base de datos y todos los archivos subidos', 'backup.refresh': 'Actualizar', 'backup.upload': 'Subir copia de seguridad', 'backup.uploading': 'Subiendo…', 'backup.create': 'Crear copia', 'backup.creating': 'Creando…', 'backup.empty': 'Aún no hay copias', 'backup.createFirst': 'Crear la primera copia', 'backup.download': 'Descargar', 'backup.restore': 'Restaurar', 'backup.confirm.restore': '¿Restaurar la copia "{name}"?\n\nTodos los datos actuales serán reemplazados por la copia.', 'backup.confirm.uploadRestore': '¿Subir y restaurar el archivo de copia "{name}"?\n\nTodos los datos actuales se sobrescribirán.', 'backup.confirm.delete': '¿Eliminar la copia "{name}"?', 'backup.toast.loadError': 'No se pudieron cargar las copias', 'backup.toast.created': 'Copia de seguridad creada correctamente', 'backup.toast.createError': 'No se pudo crear la copia', 'backup.toast.restored': 'Copia restaurada. La página se recargará…', 'backup.toast.restoreError': 'No se pudo restaurar', 'backup.toast.uploadError': 'No se pudo subir', 'backup.toast.deleted': 'Copia eliminada', 'backup.toast.deleteError': 'No se pudo eliminar', 'backup.toast.downloadError': 'La descarga falló', 'backup.toast.settingsSaved': 'Ajustes de copia automática guardados', 'backup.toast.settingsError': 'No se pudieron guardar los ajustes', 'backup.auto.title': 'Copia automática', 'backup.auto.subtitle': 'Copia de seguridad automática según una programación', 'backup.auto.enable': 'Activar copia automática', 'backup.auto.enableHint': 'Se crearán copias automáticamente según la frecuencia elegida', 'backup.auto.interval': 'Intervalo', 'backup.auto.keepLabel': 'Eliminar copias antiguas después de', 'backup.interval.hourly': 'Cada hora', 'backup.interval.daily': 'Diaria', 'backup.interval.weekly': 'Semanal', 'backup.interval.monthly': 'Mensual', 'backup.keep.1day': '1 día', 'backup.keep.3days': '3 días', 'backup.keep.7days': '7 días', 'backup.keep.14days': '14 días', 'backup.keep.30days': '30 días', 'backup.keep.forever': 'Conservar para siempre', // Photos 'photos.allDays': 'Todos los días', 'photos.noPhotos': 'Aún no hay fotos', 'photos.uploadHint': 'Sube y organiza las fotos compartidas de este viaje', 'photos.clickToSelect': 'o haz clic para seleccionar', 'photos.linkPlace': 'Vincular lugar', 'photos.noPlace': 'Sin lugar', 'photos.uploadN': 'Subida de {n} foto(s)', 'admin.addons.catalog.memories.name': 'Fotos (Immich)', 'admin.addons.catalog.memories.description': 'Comparte fotos de viaje a través de tu instancia de Immich', 'admin.addons.catalog.packing.name': 'Equipaje', 'admin.addons.catalog.packing.description': 'Prepara tu equipaje con listas de comprobación para cada viaje', 'admin.addons.catalog.budget.name': 'Presupuesto', 'admin.addons.catalog.budget.description': 'Controla los gastos y planifica el presupuesto del viaje', 'admin.addons.catalog.documents.name': 'Documentos', 'admin.addons.catalog.documents.description': 'Guarda y gestiona la documentación del viaje', 'admin.addons.catalog.vacay.name': 'Vacaciones', 'admin.addons.catalog.vacay.description': 'Planificador personal de vacaciones con vista de calendario', 'admin.addons.catalog.atlas.name': 'Atlas', 'admin.addons.catalog.atlas.description': 'Mapa del mundo con los países visitados y estadísticas de viaje', 'admin.addons.catalog.collab.name': 'Colaboración', 'admin.addons.catalog.collab.description': 'Notas, encuestas y chat en tiempo real para organizar el viaje', // Backup restore modal 'backup.restoreConfirmTitle': '¿Restaurar copia?', 'backup.restoreWarning': 'Todos los datos actuales (viajes, lugares, usuarios, subidas) serán reemplazados permanentemente por la copia. Esta acción no se puede deshacer.', 'backup.restoreTip': 'Consejo: crea una copia del estado actual antes de restaurar.', 'backup.restoreConfirm': 'Sí, restaurar', // PDF 'pdf.travelPlan': 'Plan de viaje', 'pdf.planned': 'Planificado', 'pdf.costLabel': 'Coste EUR', 'pdf.preview': 'Vista previa PDF', 'pdf.saveAsPdf': 'Guardar como PDF', // Planner 'planner.places': 'Lugares', 'planner.bookings': 'Reservas', 'planner.packingList': 'Lista de equipaje', 'planner.documents': 'Documentos', 'planner.dayPlan': 'Plan por días', 'planner.reservations': 'Reservas', 'planner.minTwoPlaces': 'Se necesitan al menos 2 lugares con coordenadas', 'planner.noGeoPlaces': 'No hay lugares con coordenadas disponibles', 'planner.routeCalculated': 'Ruta calculada', 'planner.routeCalcFailed': 'No se pudo calcular la ruta', 'planner.routeError': 'Error al calcular la ruta', 'planner.routeOptimized': 'Ruta optimizada', 'planner.reservationUpdated': 'Reserva actualizada', 'planner.reservationAdded': 'Reserva añadida', 'planner.confirmDeleteReservation': '¿Eliminar reserva?', 'planner.reservationDeleted': 'Reserva eliminada', 'planner.days': 'Días', 'planner.allPlaces': 'Todos los lugares', 'planner.totalPlaces': '{n} lugares en total', 'planner.noDaysPlanned': 'Aún no hay días planificados', 'planner.editTrip': 'Editar viaje →', 'planner.placeOne': '1 lugar', 'planner.placeN': '{n} lugares', 'planner.addNote': 'Añadir nota', 'planner.noEntries': 'No hay entradas para este día', 'planner.addPlace': 'Añadir lugar/actividad', 'planner.addPlaceShort': '+ Añadir lugar/actividad', 'planner.resPending': 'Reserva pendiente · ', 'planner.resConfirmed': 'Reserva confirmada · ', 'planner.notePlaceholder': 'Nota…', 'planner.noteTimePlaceholder': 'Hora (opcional)', 'planner.noteExamplePlaceholder': 'p. ej. S3 a las 14:30 desde la estación central, ferry desde el muelle 7, pausa para comer…', 'planner.totalCost': 'Coste total', 'planner.searchPlaces': 'Buscar lugares…', 'planner.allCategories': 'Todas las categorías', 'planner.noPlacesFound': 'No se encontraron lugares', 'planner.addFirstPlace': 'Añadir el primer lugar', 'planner.noReservations': 'Sin reservas', 'planner.addFirstReservation': 'Añadir la primera reserva', 'planner.new': 'Nuevo', 'planner.addToDay': '+ Día', 'planner.calculating': 'Calculando…', 'planner.route': 'Ruta', 'planner.optimize': 'Optimizar', 'planner.openGoogleMaps': 'Abrir en Google Maps', 'planner.selectDayHint': 'Selecciona un día de la lista izquierda para ver su plan', 'planner.noPlacesForDay': 'Aún no hay lugares para este día', 'planner.addPlacesLink': 'Añadir lugares →', 'planner.minTotal': 'min en total', 'planner.noReservation': 'Sin reserva', 'planner.removeFromDay': 'Quitar del día', 'planner.addToThisDay': 'Añadir al día', 'planner.overview': 'Vista general', 'planner.noDays': 'No hay días todavía', 'planner.editTripToAddDays': 'Edita el viaje para añadir días', 'planner.dayCount': '{n} días', 'planner.clickToUnlock': 'Haz clic para desbloquear', 'planner.keepPosition': 'Mantener posición durante la optimización de ruta', 'planner.dayDetails': 'Detalles del día', 'planner.dayN': 'Día {n}', // Dashboard Stats 'stats.countries': 'Países', 'stats.cities': 'Ciudades', 'stats.trips': 'Viajes', 'stats.places': 'Lugares', 'stats.worldProgress': 'Progreso mundial', 'stats.visited': 'visitados', 'stats.remaining': 'restantes', 'stats.visitedCountries': 'Países visitados', // Day Detail Panel 'day.precipProb': 'Probabilidad de lluvia', 'day.precipitation': 'Precipitación', 'day.wind': 'Viento', 'day.sunrise': 'Amanecer', 'day.sunset': 'Atardecer', 'day.hourlyForecast': 'Pronóstico por horas', 'day.climateHint': 'Promedios históricos: el pronóstico real está disponible dentro de los 16 días previos a la fecha.', 'day.noWeather': 'No hay datos meteorológicos disponibles. Añade un lugar con coordenadas.', 'day.overview': 'Resumen diario', 'day.accommodation': 'Alojamiento', 'day.addAccommodation': 'Añadir alojamiento', 'day.hotelDayRange': 'Aplicar a los días', 'day.noPlacesForHotel': 'Añade primero lugares al viaje', 'day.allDays': 'Todos', 'day.checkIn': 'Check-in', 'day.checkOut': 'Check-out', 'day.confirmation': 'Confirmación', 'day.editAccommodation': 'Editar alojamiento', 'day.reservations': 'Reservas', // Memories / Immich 'memories.title': 'Fotos', 'memories.notConnected': 'Immich no conectado', 'memories.notConnectedHint': 'Conecta tu instancia de Immich en Ajustes para ver tus fotos de viaje aquí.', 'memories.noDates': 'Añade fechas a tu viaje para cargar fotos.', 'memories.noPhotos': 'No se encontraron fotos', 'memories.noPhotosHint': 'No se encontraron fotos en Immich para el rango de fechas de este viaje.', 'memories.photosFound': 'fotos', 'memories.fromOthers': 'de otros', 'memories.sharePhotos': 'Compartir fotos', 'memories.sharing': 'Compartiendo', 'memories.reviewTitle': 'Revisar tus fotos', 'memories.reviewHint': 'Haz clic en las fotos para excluirlas de compartir.', 'memories.shareCount': 'Compartir {count} fotos', 'memories.immichUrl': 'URL del servidor Immich', 'memories.immichApiKey': 'Clave API', 'memories.testConnection': 'Probar conexión', 'memories.connected': 'Conectado', 'memories.disconnected': 'No conectado', 'memories.connectionSuccess': 'Conectado a Immich', 'memories.connectionError': 'No se pudo conectar a Immich', 'memories.saved': 'Configuración de Immich guardada', 'memories.oldest': 'Más antiguas', 'memories.newest': 'Más recientes', 'memories.allLocations': 'Todas las ubicaciones', 'memories.addPhotos': 'Añadir fotos', 'memories.selectPhotos': 'Seleccionar fotos de Immich', 'memories.selectHint': 'Toca las fotos para seleccionarlas.', 'memories.selected': 'seleccionado(s)', 'memories.addSelected': 'Añadir {count} fotos', 'memories.alreadyAdded': 'Añadido', 'memories.private': 'Privado', 'memories.stopSharing': 'Dejar de compartir', 'memories.tripDates': 'Fechas del viaje', 'memories.allPhotos': 'Todas las fotos', 'memories.confirmShareTitle': '¿Compartir con los miembros del viaje?', 'memories.confirmShareHint': '{count} fotos serán visibles para todos los miembros de este viaje. Puedes hacer fotos individuales privadas más tarde.', 'memories.confirmShareButton': 'Compartir fotos', // Collab Addon 'collab.tabs.chat': 'Mensajes', 'collab.tabs.notes': 'Notas', 'collab.tabs.polls': 'Encuestas', 'collab.whatsNext.title': 'Qué viene ahora', 'collab.whatsNext.today': 'Hoy', 'collab.whatsNext.tomorrow': 'Mañana', 'collab.whatsNext.empty': 'No hay actividades próximas', 'collab.whatsNext.until': 'hasta', 'collab.whatsNext.emptyHint': 'Las actividades con hora aparecerán aquí', 'collab.chat.send': 'Enviar', 'collab.chat.placeholder': 'Escribe un mensaje...', 'collab.chat.empty': 'Empieza la conversación', 'collab.chat.emptyHint': 'Los mensajes se comparten con todos los miembros del viaje', 'collab.chat.emptyDesc': 'Comparte ideas, planes y novedades con tu grupo de viaje', 'collab.chat.today': 'Hoy', 'collab.chat.yesterday': 'Ayer', 'collab.chat.deletedMessage': 'eliminó un mensaje', 'collab.chat.loadMore': 'Cargar mensajes anteriores', 'collab.chat.justNow': 'justo ahora', 'collab.chat.minutesAgo': 'hace {n} min', 'collab.chat.hoursAgo': 'hace {n} h', 'collab.notes.title': 'Notas', 'collab.notes.new': 'Nueva nota', 'collab.notes.empty': 'Aún no hay notas', 'collab.notes.emptyHint': 'Empieza a capturar ideas y planes', 'collab.notes.all': 'Todas', 'collab.notes.titlePlaceholder': 'Título de la nota', 'collab.notes.contentPlaceholder': 'Escribe algo...', 'collab.notes.categoryPlaceholder': 'Categoría', 'collab.notes.newCategory': 'Nueva categoría...', 'collab.notes.category': 'Categoría', 'collab.notes.noCategory': 'Sin categoría', 'collab.notes.color': 'Color', 'collab.notes.save': 'Guardar', 'collab.notes.cancel': 'Cancelar', 'collab.notes.edit': 'Editar', 'collab.notes.delete': 'Eliminar', 'collab.notes.pin': 'Fijar', 'collab.notes.unpin': 'Desfijar', 'collab.notes.daysAgo': 'hace {n} d', 'collab.notes.categorySettings': 'Gestionar categorías', 'collab.notes.create': 'Crear', 'collab.notes.website': 'Sitio web', 'collab.notes.websitePlaceholder': 'https://...', 'collab.notes.attachFiles': 'Adjuntar archivos', 'collab.notes.noCategoriesYet': 'Aún no hay categorías', 'collab.notes.emptyDesc': 'Crea una nota para empezar', 'collab.polls.title': 'Encuestas', 'collab.polls.new': 'Nueva encuesta', 'collab.polls.empty': 'Aún no hay encuestas', 'collab.polls.emptyHint': 'Pregunta al grupo y votad juntos', 'collab.polls.question': 'Pregunta', 'collab.polls.questionPlaceholder': '¿Qué deberíamos hacer?', 'collab.polls.addOption': '+ Añadir opción', 'collab.polls.optionPlaceholder': 'Opción {n}', 'collab.polls.create': 'Crear encuesta', 'collab.polls.close': 'Cerrar', 'collab.polls.closed': 'Cerrada', 'collab.polls.votes': '{n} votos', 'collab.polls.vote': '{n} voto', 'collab.polls.multipleChoice': 'Selección múltiple', 'collab.polls.multiChoice': 'Selección múltiple', 'collab.polls.deadline': 'Fecha límite', 'collab.polls.option': 'Opción', 'collab.polls.options': 'Opciones', 'collab.polls.delete': 'Eliminar', 'collab.polls.closedSection': 'Cerradas', // Files management (2.6.2) 'files.trash': 'Papelera', 'files.trashEmpty': 'La papelera está vacía', 'files.emptyTrash': 'Vaciar papelera', 'files.restore': 'Restaurar', 'files.star': 'Destacar', 'files.unstar': 'Quitar destacado', 'files.assign': 'Asignar', 'files.assignTitle': 'Asignar archivo', 'files.assignPlace': 'Lugar', 'files.assignBooking': 'Reserva', 'files.unassigned': 'Sin asignar', 'files.unlink': 'Eliminar vínculo', 'files.noteLabel': 'Nota', 'files.notePlaceholder': 'Añadir una nota...', 'files.toast.trashed': 'Movido a la papelera', 'files.toast.restored': 'Archivo restaurado', 'files.toast.trashEmptied': 'Papelera vaciada', 'files.toast.assigned': 'Archivo asignado', 'files.toast.assignError': 'Error al asignar', 'files.toast.restoreError': 'Error al restaurar', 'files.confirm.permanentDelete': 'Eliminar este archivo permanentemente? No se puede deshacer.', 'files.confirm.emptyTrash': 'Eliminar todos los archivos de la papelera? No se puede deshacer.', // Reservation metadata (2.6.2) 'reservations.meta.airline': 'Aerolínea', 'reservations.meta.flightNumber': 'N° de vuelo', 'reservations.meta.from': 'Desde', 'reservations.meta.to': 'Hasta', 'reservations.meta.trainNumber': 'N° de tren', 'reservations.meta.platform': 'Andén', 'reservations.meta.seat': 'Asiento', 'reservations.meta.checkIn': 'Check-in', 'reservations.meta.checkOut': 'Check-out', 'reservations.meta.linkAccommodation': 'Alojamiento', 'reservations.meta.pickAccommodation': 'Vincular con alojamiento', 'reservations.meta.noAccommodation': 'Ninguno', 'reservations.meta.hotelPlace': 'Alojamiento', 'reservations.meta.pickHotel': 'Seleccionar alojamiento', 'reservations.meta.fromDay': 'Desde', 'reservations.meta.toDay': 'Hasta', 'reservations.meta.selectDay': 'Seleccionar día', // OIDC-only mode (2.6.2) 'admin.oidcOnlyMode': 'Desactivar autenticación por contraseña', 'admin.oidcOnlyModeHint': 'Si está activado, solo se permite el inicio de sesión con SSO. El inicio de sesión y registro con contraseña se bloquean.', 'login.oidcOnly': 'La autenticación por contraseña está desactivada. Por favor, inicia sesión con tu proveedor SSO.', // Settings (2.6.2) 'settings.currentPasswordRequired': 'La contraseña actual es obligatoria', 'settings.passwordWeak': 'La contraseña debe contener mayúsculas, minúsculas y números', } export default es