// Spanish translations. Reviewed for UI register (informal tú).
// Native review still recommended before publicizing as fully supported.
export default {
// Nav
'nav.displays': 'Pantallas',
'nav.content': 'Contenido',
'nav.playlists': 'Listas de reproducción',
'nav.layouts': 'Diseños',
'nav.widgets': 'Widgets',
'nav.schedule': 'Horario',
'nav.walls': 'Muros de video',
'nav.reports': 'Informes',
'nav.kiosk': 'Kiosco',
'nav.designer': 'Diseñador',
'nav.activity': 'Actividad',
'nav.teams': 'Equipos',
'nav.help': 'Ayuda',
'nav.settings': 'Configuración',
'nav.subscription': 'Suscripción',
'nav.admin': 'Administrador',
// Common
'common.save': 'Guardar',
'common.cancel': 'Cancelar',
'common.delete': 'Eliminar',
'common.edit': 'Editar',
'common.done': 'Listo',
'common.loading': 'Cargando...',
'common.connected': 'Conectado',
'common.disconnected': 'Desconectado',
'common.never': 'Nunca',
'common.just_now': 'Ahora mismo',
'common.minutes_ago': 'hace {n}m',
'common.hours_ago': 'hace {n}h',
'common.days_ago': 'hace {n}d',
'common.unknown': 'Desconocido',
// Auth
'auth.sign_in': 'Iniciar sesión',
'auth.sign_out': 'Cerrar sesión',
'auth.create_account': 'Crear cuenta',
'auth.create_admin_account': 'Crear cuenta de administrador',
'auth.email': 'Correo electrónico',
'auth.password': 'Contraseña',
'auth.name': 'Nombre',
'auth.placeholder_email': 'tu@ejemplo.com',
'auth.placeholder_password': '••••••••',
'auth.placeholder_name': 'Tu nombre',
'auth.placeholder_register_password': 'Mínimo 6 caracteres',
'auth.subtitle_setup': 'Crea tu cuenta de administrador para comenzar',
'auth.subtitle_signin': 'Inicia sesión para gestionar tus pantallas',
'auth.trial_notice': 'Las cuentas nuevas reciben 14 días de prueba Pro gratis',
'auth.divider_or': 'O',
'auth.signin_google': 'Iniciar sesión con Google',
'auth.signin_microsoft': 'Iniciar sesión con Microsoft',
'auth.back_to_signin': 'Volver a iniciar sesión',
'auth.support_access': 'Acceso de soporte',
'auth.support_token_placeholder': 'Pega el token de soporte',
'auth.support_authenticate': 'Autenticar con token de soporte',
'auth.terms': 'Términos del servicio',
'auth.privacy': 'Política de privacidad',
'auth.error_email_password_required': 'Se requieren correo y contraseña',
'auth.error_password_min_6': 'La contraseña debe tener al menos 6 caracteres',
'auth.error_login_failed': 'Error al iniciar sesión',
'auth.error_registration_failed': 'Error al registrarse',
'auth.error_paste_support_token': 'Pega un token de soporte',
'auth.error_support_failed': 'Error en el inicio de sesión de soporte',
'auth.error_google_failed': 'Error al iniciar sesión con Google',
'auth.error_microsoft_failed': 'Error al iniciar sesión con Microsoft',
// Dashboard
'dashboard.title': 'Pantallas',
'dashboard.subtitle': 'Administra tus pantallas remotas',
'dashboard.help_tip': 'Tus dispositivos vinculados. Verde = en línea, rojo = desconectado. Haz clic en uno para gestionar su lista de reproducción, ver telemetría o usar el control remoto.',
'dashboard.add': 'Agregar pantalla',
'dashboard.create_group': '+ Grupo',
'dashboard.search': 'Buscar pantallas...',
'dashboard.all_status': 'Todos los estados',
'dashboard.online': 'En línea',
'dashboard.offline': 'Desconectado',
'dashboard.awaiting_pairing': 'Esperando vinculación',
'dashboard.no_preview': 'Vista previa no disponible',
'dashboard.total_displays': 'Pantallas totales',
'dashboard.ungrouped': 'Sin grupo',
'dashboard.no_displays': 'Aún no hay pantallas',
'dashboard.no_displays_desc': 'Instala la aplicación de ScreenTinker en tu TV y vincúlala con el botón de arriba.',
'dashboard.failed_to_load': 'Error al cargar las pantallas',
'dashboard.unknown_playlist': 'Lista desconocida',
'dashboard.mixed_playlists': 'Listas variadas',
'dashboard.playlist_label': 'Lista: {name}',
'dashboard.devices_count_one': '{n} dispositivo',
'dashboard.devices_count_other': '{n} dispositivos',
'dashboard.online_count': '{n} en línea',
'dashboard.set_playlist_placeholder': 'Asignar lista...',
'dashboard.send_command_placeholder': 'Enviar comando...',
'dashboard.manage': 'Gestionar',
'dashboard.manage_tooltip': 'Agregar/quitar dispositivos',
'dashboard.delete_group_tooltip': 'Eliminar grupo',
'dashboard.no_devices_in_group': 'No hay dispositivos en este grupo. Haz clic en Gestionar para agregar.',
'dashboard.manage_group_subtitle': 'Marca los dispositivos para agregarlos a este grupo',
'dashboard.draft_suffix': '(borrador)',
'dashboard.cmd.screen_on': 'Encender pantalla',
'dashboard.cmd.screen_off': 'Apagar pantalla',
'dashboard.cmd.restart_app': 'Reiniciar app',
'dashboard.cmd.check_update': 'Buscar actualización',
'dashboard.cmd.reboot': 'Reiniciar',
'dashboard.cmd.shutdown': 'Apagar',
'dashboard.prompt_group_name': 'Nombre del grupo:',
'dashboard.error_pairing_code': 'Ingresa un código de vinculación válido de 6 dígitos',
'dashboard.confirm_add_to_group': '{name} ya está en: {groups}\n\n¿Agregarlo también a "{target}"?',
'dashboard.confirm_assign_playlist': '¿Asignar la lista "{playlist}" a todos los dispositivos de "{group}"?',
'dashboard.confirm_destructive_command': '¿{cmd} todos los {n} dispositivos de "{group}"?\n\nEsto no se puede deshacer.',
'dashboard.confirm_delete_group': '¿Eliminar este grupo? Los dispositivos no se verán afectados.',
'dashboard.toast.display_paired': '¡Pantalla vinculada con éxito!',
'dashboard.toast.group_created': 'Grupo creado',
'dashboard.toast.group_deleted': 'Grupo eliminado',
'dashboard.toast.already_in_group': '{name} ya está en {group}',
'dashboard.toast.moved_device': 'Se movió {name} a {group}',
'dashboard.toast.removed_device_one': 'Se quitó {name} de 1 grupo',
'dashboard.toast.removed_device_other': 'Se quitó {name} de {n} grupos',
'dashboard.toast.playlist_assigned_one': 'Lista asignada a 1 dispositivo',
'dashboard.toast.playlist_assigned_other': 'Lista asignada a {n} dispositivos',
'dashboard.toast.command_sent': '{cmd} enviado a {sent}/{total} dispositivos',
'dashboard.toast.command_sent_with_offline': '{cmd} enviado a {sent}/{total} dispositivos ({offline} desconectados)',
// Content library
'content.title': 'Biblioteca de contenido',
'content.subtitle': 'Sube y administra tus archivos multimedia',
'content.help_tip': 'Sube videos e imágenes aquí. Selecciona varios archivos para subir en lote. Usa URL remota para transmitir desde fuentes externas. Haz clic en una miniatura para previsualizar.',
'content.drop': 'Arrastra archivos aquí o haz clic para subir',
'content.upload_hint': 'Soporta MP4, WebM, AVI, MKV, JPEG, PNG, GIF, WebP',
'content.upload_progress': 'Subiendo...',
'content.upload_progress_named': 'Subiendo {name}...',
'content.upload_progress_named_pct': 'Subiendo {name}... {pct}%',
'content.remote_url': 'URL remota',
'content.remote_desc': 'Transmite directamente desde una URL. Ahorra ancho de banda local.',
'content.remote_url_placeholder': 'https://ejemplo.com/video.mp4',
'content.remote_name_placeholder': 'Nombre para mostrar (opcional)',
'content.remote_add_btn': 'Agregar URL remota',
'content.youtube': 'YouTube',
'content.youtube_desc': 'Inserta un video de YouTube en tus pantallas.',
'content.youtube_url_placeholder': 'https://youtube.com/watch?v=...',
'content.youtube_name_placeholder': 'Nombre para mostrar (opcional)',
'content.youtube_add_btn': 'Agregar video de YouTube',
'content.search_placeholder': 'Buscar contenido...',
'content.new_folder_btn': '+ Nueva carpeta',
'content.breadcrumb_root': 'Todo el contenido',
'content.rename_btn': 'Renombrar',
'content.delete_folder_btn': 'Eliminar carpeta',
'content.prompt_folder_name': 'Nombre de la carpeta:',
'content.prompt_rename_folder': 'Renombrar carpeta:',
'content.confirm_delete_folder': '¿Eliminar esta carpeta? El contenido volverá al nivel raíz. Las subcarpetas también se eliminarán.',
'content.empty_folder_title': 'Esta carpeta está vacía',
'content.empty_folder_desc': 'Arrastra contenido aquí o usa la acción Mover.',
'content.no_content': 'Aún no hay contenido',
'content.no_content_desc': 'Sube videos e imágenes para comenzar.',
'content.failed_to_load': 'Error al cargar el contenido',
'content.type_youtube': 'YouTube',
'content.type_remote': 'URL remota',
'content.type_remote_short': 'Remota',
'content.type_video': 'Video',
'content.type_image': 'Imagen',
'content.btn_edit': 'Editar',
'content.btn_delete': 'Eliminar',
'content.btn_confirm_delete': '¿Confirmar eliminación?',
'content.btn_deleting': 'Eliminando...',
'content.edit_modal_title': 'Editar contenido',
'content.label_filename': 'Nombre del archivo / Mostrar como',
'content.label_remote_url_field': 'URL remota',
'content.label_mime_type': 'Tipo MIME',
'content.label_folder': 'Carpeta',
'content.label_replace_file': 'Reemplazar archivo',
'content.replace_file_hint': 'Déjalo vacío para mantener el archivo actual',
'content.folder_root_option': '— Raíz —',
'content.save_changes': 'Guardar cambios',
'content.mime.video_mp4': 'Video (MP4)',
'content.mime.video_webm': 'Video (WebM)',
'content.mime.image_jpeg': 'Imagen (JPEG)',
'content.mime.image_png': 'Imagen (PNG)',
'content.mime.image_gif': 'Imagen (GIF)',
'content.mime.image_webp': 'Imagen (WebP)',
'content.error_enter_url': 'Ingresa una URL',
'content.error_enter_youtube_url': 'Ingresa una URL de YouTube',
'content.error_update_failed': 'Error al actualizar',
'content.toast.remote_added': 'Contenido remoto agregado',
'content.toast.youtube_added': 'Video de YouTube agregado',
'content.toast.deleted': 'Contenido eliminado',
'content.toast.updated': 'Contenido actualizado',
'content.toast.uploaded_named': '{name} se subió correctamente',
'content.toast.upload_failed_named': 'Error al subir {name}: {error}',
'content.toast.folder_created_named': 'Carpeta "{name}" creada',
'content.toast.folder_renamed': 'Carpeta renombrada',
'content.toast.folder_deleted': 'Carpeta eliminada',
'content.toast.moved': 'Movido',
'content.toast.moved_to_root': 'Movido a la raíz',
// Device detail
'device.back': 'Volver a Pantallas',
'device.owner_label': 'Propietario: {owner}',
'device.rename': 'Renombrar',
'device.screenshot_btn': 'Captura',
'device.remove': 'Eliminar',
'device.click_to_confirm': 'Haz clic de nuevo para confirmar',
'device.prompt_new_name': 'Ingresa el nuevo nombre:',
'device.confirm_discard_draft': '¿Descartar todos los cambios no publicados y volver a la última versión publicada?',
'device.failed_load': 'Error al cargar el dispositivo',
'device.no_screenshot': 'No hay captura disponible. Haz clic en "Captura" para tomar una.',
'device.no_content_assigned': 'Sin contenido asignado',
'device.now_playing_id': 'Reproduciendo: {id}',
'device.playlist_count_one': '1 elemento en la lista',
'device.playlist_count_other': '{n} elementos en la lista',
'device.tab.now_playing': 'Reproducción actual',
'device.tab.now_playing_tip': 'Captura en vivo de lo que se muestra ahora en este dispositivo.',
'device.tab.playlist': 'Lista',
'device.tab.playlist_tip': 'Contenido asignado a este dispositivo. Arrastra para reordenar. Agrega medios, widgets o páginas de kiosco.',
'device.tab.info': 'Información del dispositivo',
'device.tab.info_tip': 'Telemetría de hardware, orientación, notas y controles del dispositivo.',
'device.tab.remote': 'Control remoto',
'device.tab.remote_tip': 'Visualiza la pantalla del dispositivo en tiempo real y envía pulsaciones. Funciona en la APK de Android y el reproductor web.',
'device.draft.banner_title': 'Cambios sin publicar',
'device.draft.devices_showing_published': 'Los dispositivos siguen mostrando la última versión publicada.',
'device.draft.never_published': 'Esta lista nunca se ha publicado. Los dispositivos no mostrarán nada hasta que la publiques.',
'device.draft.discard': 'Descartar',
'device.draft.publish': 'Publicar',
'device.draft.publishing': 'Publicando...',
'device.layout.label': 'Diseño de pantalla',
'device.layout.fullscreen_default': 'Pantalla completa (predeterminado)',
'device.layout.zones_count': '{name} ({n} zonas)',
'device.layout.template_zones_count': '[Plantilla] {name} ({n} zonas)',
'device.layout.apply': 'Aplicar',
'device.playlist.label': 'Lista',
'device.playlist.no_playlist': 'Sin lista',
'device.playlist.copy_to_btn': 'Copiar a...',
'device.playlist.add_content_btn': 'Agregar contenido',
'device.playlist.empty_title': 'Sin contenido asignado',
'device.playlist.empty_desc': 'Agrega contenido de tu biblioteca a la lista de esta pantalla.',
'device.playlist_picker.with_count': '{name} — {n} elementos',
'device.playlist_picker.with_auto': '{name} (auto) — {n} elementos',
'device.info.status': 'Estado',
'device.info.ip_address': 'Dirección IP',
'device.info.battery': 'Batería',
'device.info.storage': 'Almacenamiento',
'device.info.size_free': '{size} libres',
'device.info.player_type': 'Tipo de reproductor',
'device.info.web_player': 'Reproductor web',
'device.info.wifi': 'WiFi',
'device.info.uptime': 'Tiempo activo',
'device.info.android_version': 'Versión de Android',
'device.info.app_version': 'Versión de la app',
'device.info.screen_resolution': 'Resolución de pantalla',
'device.info.ram': 'RAM',
'device.info.cpu_usage': 'Uso de CPU',
'device.timeline.title': 'Línea de tiempo (últimas 24 horas)',
'device.timeline.h24_ago': 'hace 24h',
'device.timeline.now': 'Ahora',
'device.timeline.online': 'En línea',
'device.timeline.offline': 'Desconectado',
'device.timeline.no_data': 'Sin datos',
'device.timeline.uptime_pct_tracked': '{pct}% activo ({n}min registrados)',
'device.timeline.uptime_pct_no_data': '{pct}% activo (sin datos)',
'device.form.orientation_label': 'Orientación / Rotación',
'device.form.orientation.landscape': 'Horizontal (0°)',
'device.form.orientation.portrait': 'Vertical (90° SR)',
'device.form.orientation.landscape_flipped': 'Horizontal invertido (180°)',
'device.form.orientation.portrait_flipped': 'Vertical invertido (270° SR)',
'device.form.default_content_label': 'Contenido predeterminado',
'device.form.default_content_none': 'Ninguno (mostrar "Esperando...")',
'device.form.notes_label': 'Notas',
'device.form.notes_placeholder': 'Ubicación, detalles de instalación, etc.',
'device.form.save_settings': 'Guardar configuración',
'device.ctl.reboot_device': 'Reiniciar dispositivo',
'device.ctl.screen_off': 'Apagar pantalla',
'device.ctl.screen_on': 'Encender pantalla',
'device.ctl.launch_player': 'Iniciar reproductor',
'device.ctl.force_update': 'Forzar actualización',
'device.ctl.shutdown': 'Apagar',
'device.remote.start_prompt': 'Haz clic en "Iniciar control remoto" para comenzar',
'device.remote.start': 'Iniciar control remoto',
'device.remote.stop': 'Detener control remoto',
'device.remote.vol_up': 'Vol +',
'device.remote.vol_down': 'Vol -',
'device.remote.home': 'Inicio',
'device.remote.back': 'Atrás',
'device.remote.recents': 'Recientes',
'device.remote.power': 'Encendido',
'device.remote.ok': 'OK',
'device.remote.settings': 'Ajustes',
'device.remote.scrn_off': 'Pant. off',
'device.remote.scrn_on': 'Pant. on',
'device.remote.enable_system_view': 'Habilitar vista de sistema',
'device.remote.system_view_tooltip': 'Solicita al usuario del dispositivo permitir captura de pantalla completa - habilita ver pantalla de inicio, ajustes y otras apps',
'device.remote.system_view_hint': 'Requiere aprobación única en el dispositivo',
'device.remote.waiting_for_approval': 'Esperando aprobación del dispositivo...',
'device.remote.system_view_enabled': 'Vista de sistema habilitada',
'device.remote.unlocked_hint': 'Navegación y controles del sistema desbloqueados',
'device.pl_item.widget_with_type': 'Widget ({type})',
'device.pl_item.youtube': 'YouTube',
'device.pl_item.video': 'Video',
'device.pl_item.image': 'Imagen',
'device.pl_item.zone_label': 'Zona: {id}',
'device.pl_item.no_zone': 'Sin zona',
'device.pl_item.mute': 'Silenciar',
'device.pl_item.unmute': 'Activar audio',
'device.pl_item.remove': 'Eliminar',
'device.copy.no_other_devices': 'No hay otros dispositivos a los que copiar',
'device.copy.prompt': '¿A qué dispositivo copiar la lista?\n\n{list}\n\nIngresa el número:',
'device.copy.invalid_selection': 'Selección no válida',
'device.copy.toast': 'Se copiaron {n} elementos a {device}',
'device.assign.empty_all': 'Aún no hay contenido, widgets ni páginas de kiosco. ¡Crea algo primero!',
'device.assign.modal_title': 'Agregar a la lista',
'device.assign.zone_label': 'Zona',
'device.assign.zone_default': 'Predeterminada (pantalla completa)',
'device.assign.duration_label': 'Duración (segundos, para imágenes/widgets)',
'device.assign.tab.media': 'Medios ({n})',
'device.assign.tab.widgets': 'Widgets ({n})',
'device.assign.tab.kiosk': 'Kiosco ({n})',
'device.assign.no_media': 'Aún no se ha subido ningún medio',
'device.assign.no_widgets': 'Aún no hay widgets creados.',
'device.assign.no_kiosk': 'Aún no hay páginas de kiosco.',
'device.assign.create_one': 'Crea uno',
'device.assign.add_selected': 'Agregar selección',
'device.assign.select_first': 'Primero selecciona algo',
'device.assign.kiosk_widget_name': 'Kiosco: {name}',
'device.toast.screenshot_requested': 'Captura solicitada',
'device.toast.renamed': 'Pantalla renombrada',
'device.toast.removing': 'Eliminando...',
'device.toast.removed': 'Pantalla eliminada',
'device.toast.settings_saved': 'Configuración guardada',
'device.toast.published': 'Lista publicada — dispositivos actualizados',
'device.toast.draft_discarded': 'Cambios del borrador descartados',
'device.toast.playlist_changed': 'Lista cambiada',
'device.toast.layout_applied': 'Diseño aplicado',
'device.toast.switched_to_fullscreen': 'Cambiado a pantalla completa',
'device.toast.added_to_playlist': 'Agregado a la lista',
'device.toast.unmuted': 'Audio activado',
'device.toast.muted': 'Silenciado',
'device.toast.zone_updated': 'Zona actualizada',
'device.toast.removed_from_playlist': 'Contenido eliminado de la lista',
'device.toast.playlist_reordered': 'Lista reordenada',
'device.toast.reboot_sent': 'Comando de reinicio enviado',
'device.toast.shutdown_sent': 'Comando de apagado enviado',
'device.toast.screen_off_sent': 'Comando para apagar pantalla enviado',
'device.toast.screen_on_sent': 'Comando para encender pantalla enviado',
'device.toast.launch_sent': 'Comando de inicio enviado',
'device.toast.update_triggered': 'Verificación de actualización iniciada',
'device.toast.remote_started': 'Sesión de control remoto iniciada',
// Settings
'settings.title': 'Configuración',
'settings.subtitle': 'Configuración del servidor e información de instalación',
'settings.account': 'Cuenta',
'settings.save_profile': 'Guardar perfil',
'settings.change_password': 'Cambiar contraseña',
'settings.password_min_8': 'Debe tener al menos 8 caracteres.',
'settings.current_password': 'Contraseña actual',
'settings.new_password': 'Contraseña nueva',
'settings.confirm_new_password': 'Confirmar contraseña nueva',
'settings.sso_note': 'Inicias sesión con {provider}. Gestiona tu contraseña ahí.',
'settings.license': 'Licencia',
'settings.license_mit': 'Licencia MIT - todas las funciones incluidas.',
'settings.platform_admin_link': 'Las herramientas de administración están en la',
'settings.platform_admin_page_suffix': '.',
'settings.user_management': 'Gestión de usuarios',
'settings.loading_users': 'Cargando usuarios...',
'settings.white_label': 'Marca blanca / Branding',
'settings.white_label_desc': 'Personaliza la apariencia del panel y el reproductor para tus clientes.',
'settings.brand_name': 'Nombre de la marca',
'settings.logo_url': 'URL del logotipo',
'settings.primary_color': 'Color principal',
'settings.bg_color': 'Color de fondo',
'settings.custom_domain': 'Dominio personalizado',
'settings.favicon_url': 'URL del favicon',
'settings.custom_css': 'CSS personalizado (opcional)',
'settings.hide_branding': 'Ocultar la marca "ScreenTinker"',
'settings.save_branding': 'Guardar branding',
'settings.preview': 'Previsualizar',
'settings.white_label_enterprise_only': 'El branding personalizado está disponible en el plan Enterprise',
'settings.view_plans': 'Ver planes',
'settings.server_info': 'Información del servidor',
'settings.server_url': 'URL del servidor',
'settings.api_endpoint': 'Endpoint de la API',
'settings.server_url_hint': 'Usa esta URL al configurar la app de Android',
'settings.setup_guide': 'Guía de instalación',
'settings.setup_step_1': 'Instala el APK de ScreenTinker en tu TV mediante sideloading',
'settings.setup_step_2_prefix': 'Abre la app e ingresa esta URL del servidor:',
'settings.setup_step_3': 'La app mostrará un código de vinculación de 6 dígitos',
'settings.setup_step_4': 'Haz clic en "Agregar pantalla" en el panel e ingresa el código',
'settings.setup_step_5': 'Sube contenido en la Biblioteca de contenido',
'settings.setup_step_6': 'Asigna contenido a la lista de la pantalla',
'settings.your_data': 'Tus datos',
'settings.your_data_desc': 'Exporta o importa tus dispositivos, contenido, diseños, horarios y toda la configuración. Úsalo para migrar entre instancias en la nube y autoalojadas.',
'settings.export_my_data': 'Exportar mis datos',
'settings.include_media_zip': 'Incluir archivos multimedia (ZIP)',
'settings.import_data': 'Importar datos',
'settings.language': 'Idioma',
'settings.about': 'Acerca de',
'settings.about_tagline': 'Sistema de gestión de señalización digital.',
'settings.third_party_licenses': 'Licencias de terceros',
'settings.import.reading_file': 'Leyendo archivo...',
'settings.import.zip_detected': 'Exportación ZIP detectada: {name} ({size} MB)
Contiene datos + archivos multimedia.',
'settings.import.confirm': 'Confirmar importación',
'settings.import.invalid_file': 'Archivo no válido. Debe ser un JSON o ZIP de exportación de ScreenTinker.',
'settings.import.summary_devices': '{n} dispositivos',
'settings.import.summary_content': '{n} elementos de contenido',
'settings.import.summary_widgets': '{n} widgets',
'settings.import.summary_layouts': '{n} diseños',
'settings.import.summary_schedules': '{n} horarios',
'settings.import.summary_walls': '{n} muros de video',
'settings.import.summary_kiosk': '{n} páginas de kiosco',
'settings.import.found_summary': 'Encontrado: {summary}.
De: {email} (exportado {date})',
'settings.import.empty_export': 'exportación vacía',
'settings.import.uploading_zip': 'Subiendo e importando... Esto puede tardar para archivos grandes.',
'settings.import.importing': 'Importando...',
'settings.import.complete': 'Importación completa: {imported}.',
'settings.import.pairing_codes_title': 'Códigos de vinculación:',
'settings.import.pairing_codes_hint': 'Ingresa estos códigos en cada dispositivo para volver a vincularlos. Las asignaciones y horarios se conservarán.',
'settings.import.failed': 'Error al importar',
'settings.import.failed_with_error': 'Error al importar: {error}',
'settings.import.read_failed': 'Error al leer el archivo: {error}',
'settings.toast.support_token_generated': 'Token de soporte generado (válido {hours}h)',
'settings.toast.import_success': 'Datos importados correctamente',
'settings.toast.name_required': 'El nombre no puede estar vacío',
'settings.toast.profile_saved': 'Perfil guardado',
'settings.toast.current_password_required': 'Ingresa tu contraseña actual',
'settings.toast.new_password_min_8': 'La nueva contraseña debe tener al menos 8 caracteres',
'settings.toast.passwords_dont_match': 'Las nuevas contraseñas no coinciden',
'settings.toast.password_changed': 'Contraseña cambiada',
'settings.toast.branding_saved': 'Branding guardado',
'settings.toast.preview_applied': 'Previsualización aplicada (recarga para restablecer)',
'settings.toast.plan_updated': 'Plan actualizado',
'settings.toast.user_removed': 'Usuario eliminado',
'settings.user.col_user': 'Usuario',
'settings.user.col_auth': 'Auth',
'settings.user.col_role': 'Rol',
'settings.user.col_plan': 'Plan',
'settings.user.col_actions': 'Acciones',
'settings.user.remove': 'Eliminar',
'settings.user.you': 'Tú',
'settings.user.confirm': '¿Confirmar?',
'settings.user.count_one': '1 usuario registrado',
'settings.user.count_other': '{n} usuarios registrados',
// Widgets
'widget.title': 'Widgets',
'widget.subtitle': 'Agrega contenido dinámico a tus diseños',
'widget.help_tip': 'Elementos de contenido dinámico: relojes en vivo, clima, tickers RSS, texto, páginas web y feeds sociales. Crea un widget y asígnalo a la lista de un dispositivo.',
'widget.new_widget': 'Nuevo widget',
'widget.configure': 'Configurar widget',
'widget.preview': 'Previsualizar',
'widget.preview_title': 'Previsualización',
'widget.close': 'Cerrar',
'widget.edit_x': 'Editar {type}',
'widget.new_x': 'Nuevo {type}',
'widget.empty_title': 'Aún no hay widgets',
'widget.empty_desc': 'Crea un widget para agregar contenido dinámico a tus diseños.',
'widget.this_widget': 'este widget',
'widget.confirm_delete': '¿Eliminar "{name}"? Esto no se puede deshacer.',
'widget.toast.saved': 'Widget guardado',
'widget.toast.deleted': 'Widget eliminado',
'widget.toast.preview_failed': 'Falló la previsualización',
'widget.type.clock.name': 'Reloj',
'widget.type.clock.desc': 'Reloj digital con fecha',
'widget.type.weather.name': 'Clima',
'widget.type.weather.desc': 'Condiciones meteorológicas actuales',
'widget.type.rss.name': 'Ticker de noticias',
'widget.type.rss.desc': 'Feed RSS con desplazamiento',
'widget.type.text.name': 'Texto/HTML',
'widget.type.text.desc': 'Texto o HTML personalizado',
'widget.type.webpage.name': 'Página web',
'widget.type.webpage.desc': 'Incrustar una página web',
'widget.type.social.name': 'Feed social',
'widget.type.social.desc': 'Feed de redes sociales',
'widget.type.directory_board.name': 'Directorio',
'widget.type.directory_board.desc': 'Directorio de inquilinos/salas con desplazamiento para vestíbulos',
'widget.field.name': 'Nombre del widget',
'widget.field.format': 'Formato',
'widget.field.format_12h': '12 horas',
'widget.field.format_24h': '24 horas',
'widget.field.timezone': 'Zona horaria',
'widget.field.font_size': 'Tamaño de fuente',
'widget.field.font_size_px': 'Tamaño de fuente (px)',
'widget.field.color': 'Color',
'widget.field.background': 'Fondo',
'widget.field.location': 'Ubicación',
'widget.field.location_placeholder': 'Ciudad, Estado',
'widget.field.units': 'Unidades',
'widget.field.units_imperial': 'Imperial (°F)',
'widget.field.units_metric': 'Métrico (°C)',
'widget.field.feed_url': 'URL del feed',
'widget.field.scroll_speed_seconds': 'Velocidad de desplazamiento (segundos)',
'widget.field.max_items': 'Máx. elementos',
'widget.field.html_content': 'Contenido HTML',
'widget.field.css_optional': 'CSS (opcional)',
'widget.field.url': 'URL',
'widget.field.zoom_pct': 'Zoom (%)',
'widget.field.refresh_interval': 'Intervalo de actualización (segundos, 0 = nunca)',
'widget.field.platform': 'Plataforma',
'widget.field.platform_twitter': 'Twitter/X',
'widget.field.platform_instagram': 'Instagram',
'widget.field.query': 'Consulta',
'widget.field.query_placeholder': '@usuario o #hashtag',
'widget.picker.default_title': 'Seleccionar imagen',
'widget.picker.select_logo': 'Seleccionar logotipo',
'widget.picker.select_bg_images': 'Seleccionar imágenes de fondo',
'widget.picker.search': 'Buscar imágenes...',
'widget.picker.no_matches': 'Sin coincidencias.',
'widget.picker.no_images': 'No hay imágenes en tu biblioteca. Sube imágenes primero desde la Biblioteca de contenido.',
'widget.picker.selected_count': '{n} seleccionadas',
'widget.dir.title_label': 'Título',
'widget.dir.title_placeholder': 'Almacén Lincoln',
'widget.dir.logo_label': 'Logotipo (opcional)',
'widget.dir.footer_text_label': 'Texto del pie',
'widget.dir.footer_placeholder': 'Consultas de arrendamiento: Contacto...',
'widget.dir.bg_images_label': 'Imágenes de fondo (opcional)',
'widget.dir.bg_images_hint': 'Las imágenes se alternan cada 15 segundos al 30% de opacidad. Agrega varias para rotación.',
'widget.dir.add_bg_image': '+ Agregar imagen de fondo',
'widget.dir.theme': 'Tema',
'widget.dir.theme_dark': 'Oscuro',
'widget.dir.theme_light': 'Claro',
'widget.dir.scroll_speed': 'Velocidad de desplazamiento',
'widget.dir.speed_slow': 'Lenta',
'widget.dir.speed_medium': 'Media',
'widget.dir.speed_fast': 'Rápida',
'widget.dir.columns': 'Columnas',
'widget.dir.columns_auto': 'Auto',
'widget.dir.categories': 'Categorías',
'widget.dir.add_category': '+ Agregar categoría',
'widget.dir.add_entry': '+ Agregar entrada',
'widget.dir.empty_categories': 'Agrega tu primer piso o departamento para empezar',
'widget.dir.no_entries': 'Aún no hay entradas',
'widget.dir.entry': 'entrada',
'widget.dir.entries': 'entradas',
'widget.dir.collapse': 'Contraer',
'widget.dir.expand': 'Expandir',
'widget.dir.move_up': 'Subir',
'widget.dir.move_down': 'Bajar',
'widget.dir.delete_category': 'Eliminar categoría',
'widget.dir.delete_entry': 'Eliminar entrada',
'widget.dir.unnamed': '(sin nombre)',
'widget.dir.confirm_delete_category': '¿Eliminar la categoría "{name}" y todas sus entradas?',
'widget.dir.category_name_placeholder': 'p. ej. Primer piso',
'widget.dir.entry_id_placeholder': '101',
'widget.dir.entry_name_placeholder': 'Nombre del inquilino',
'widget.dir.entry_subtitle_placeholder': 'Detalles (opcional)',
'widget.dir.available': 'Disponible',
'widget.dir.change': 'Cambiar',
'widget.dir.choose_logo': 'Elegir logotipo',
'widget.dir.remove_logo': 'Quitar',
'widget.dir.no_bg_images': 'No se han seleccionado imágenes de fondo',
'widget.dir.remove_bg': 'Quitar',
// Designer
'designer.title': 'Diseñador de contenido',
'designer.subtitle': 'Crea contenido dinámico para señalización',
'designer.help_tip': 'Crea señalización personalizada con elementos en vivo: relojes, clima, tickers RSS, cuentas regresivas, códigos QR. Publica como widget o exporta como PNG.',
'designer.load_design': 'Cargar diseño',
'designer.export_png': 'Exportar PNG',
'designer.publish': 'Publicar en biblioteca',
'designer.preview_hint': 'Haz clic en los elementos para seleccionar. Arrastra para reposicionar. La vista previa se actualiza en tiempo real.',
'designer.add_element': 'Agregar elemento',
'designer.background': 'Fondo',
'designer.bg_image': 'Imagen',
'designer.properties': 'Propiedades',
'designer.layers': 'Capas',
'designer.no_elements': 'Aún no hay elementos',
'designer.save_design_file': 'Guardar archivo de diseño',
'designer.qr_label': 'CÓDIGO QR',
'designer.loading_news': 'Cargando noticias...',
'designer.no_items': 'Sin elementos',
'designer.feed_unavailable': 'Feed no disponible',
'designer.countdown_now': '¡AHORA!',
'designer.widget_name': 'Diseño {date}',
'designer.el.text': 'Texto',
'designer.el.heading': 'Título',
'designer.el.image': 'Imagen',
'designer.el.video': 'Video',
'designer.el.clock': 'Reloj',
'designer.el.date': 'Fecha',
'designer.el.weather': 'Clima',
'designer.el.ticker': 'Ticker',
'designer.el.shape': 'Forma',
'designer.el.qr': 'Código QR',
'designer.el.countdown': 'Cuenta regresiva',
'designer.el.webpage': 'Página web',
'designer.bg.black': 'Negro',
'designer.bg.dark_blue': 'Azul oscuro',
'designer.bg.dark_gradient': 'Gradiente oscuro',
'designer.bg.blue_gradient': 'Gradiente azul',
'designer.bg.sunset': 'Atardecer',
'designer.bg.ocean': 'Océano',
'designer.bg.forest': 'Bosque',
'designer.bg.dark_red': 'Rojo oscuro',
'designer.bg.white': 'Blanco',
'designer.default.text': 'Tu texto aquí',
'designer.default.heading': 'TÍTULO',
'designer.default.coming_soon': 'Próximamente',
'designer.prompt.video_url': 'URL del video (MP4):',
'designer.prompt.weather_location': 'Ciudad, Estado:',
'designer.prompt.rss_url': 'URL del feed RSS:',
'designer.prompt.qr_url': 'URL del código QR:',
'designer.prompt.countdown_date': 'Fecha objetivo (AAAA-MM-DD):',
'designer.prompt.webpage_url': 'URL de la página web:',
'designer.prop.text': 'Texto',
'designer.prop.size': 'Tamaño',
'designer.prop.font': 'Fuente',
'designer.prop.color': 'Color',
'designer.prop.bold': 'Negrita',
'designer.prop.shadow': 'Sombra',
'designer.prop.format': 'Formato',
'designer.prop.show_seconds': 'Mostrar segundos',
'designer.prop.muted': 'Silenciado',
'designer.prop.loop': 'Bucle',
'designer.prop.opacity': 'Opacidad',
'designer.prop.shape': 'Forma',
'designer.prop.location': 'Ubicación',
'designer.prop.feed_url': 'URL del feed',
'designer.prop.speed': 'Velocidad (segundos)',
'designer.prop.text_color': 'Color del texto',
'designer.prop.bg_color': 'Color de fondo',
'designer.prop.target_date': 'Fecha objetivo',
'designer.prop.label': 'Etiqueta',
'designer.toast.published': '¡Publicado como widget! Asígnalo a una zona de diseño.',
'designer.toast.publish_failed': 'Falló la publicación',
'designer.toast.export_failed': 'Falló la exportación: {error}',
'designer.toast.loaded': 'Diseño cargado',
'designer.toast.invalid_file': 'Archivo de diseño no válido',
// Playlists
'playlist.title': 'Listas de reproducción',
'playlist.subtitle': 'Crea y gestiona listas de contenido',
'playlist.show_auto_generated': 'Mostrar autogeneradas',
'playlist.new_playlist_btn': '+ Nueva lista',
'playlist.new_playlist': 'Nueva lista',
'playlist.empty_title': 'Aún no hay listas',
'playlist.empty_desc': 'Crea tu primera lista para organizar contenido para tus pantallas.',
'playlist.all_auto_generated': 'Todas las listas son autogeneradas. Activa "Mostrar autogeneradas" para verlas.',
'playlist.tag_auto': 'auto',
'playlist.tag_draft': 'borrador',
'playlist.item_count_one': '1 elemento',
'playlist.item_count_other': '{n} elementos',
'playlist.created_at': 'Creado {date}',
'playlist.display_count_one': '1 pantalla',
'playlist.display_count_other': '{n} pantallas',
'playlist.assigned_to_one': 'Asignada a 1 pantalla',
'playlist.assigned_to_other': 'Asignada a {n} pantallas',
'playlist.load_failed': 'Error al cargar las listas: {error}',
'playlist.back_to_playlists': 'Volver a listas',
'playlist.name_placeholder': 'Nombre de la lista',
'playlist.desc_placeholder': 'Descripción (opcional)',
'playlist.create_btn': 'Crear',
'playlist.add_desc_placeholder': 'Agregar una descripción...',
'playlist.click_to_rename': 'Clic para renombrar',
'playlist.click_to_edit_desc': 'Clic para editar descripción',
'playlist.add_content': '+ Agregar contenido',
'playlist.delete_playlist': 'Eliminar lista',
'playlist.back': 'Atrás',
'playlist.items_empty': 'Esta lista está vacía',
'playlist.items_empty_hint': 'Haz clic en "Agregar contenido" para añadir elementos.',
'playlist.duration': 'Duración',
'playlist.sec': 'seg',
'playlist.move_up': 'Subir',
'playlist.move_down': 'Bajar',
'playlist.remove_item': 'Quitar elemento',
'playlist.item_widget': 'Widget',
'playlist.unknown_type': 'Tipo desconocido',
'playlist.confirm_delete': '¿Eliminar "{name}"? Esto no se puede deshacer.',
'playlist.confirm_discard_draft': '¿Descartar todos los cambios no publicados y volver a la última versión publicada?',
'playlist.draft.banner_title': 'Cambios sin publicar',
'playlist.draft.devices_showing_published': 'Los dispositivos siguen mostrando la última versión publicada.',
'playlist.draft.never_published': 'Esta lista nunca se ha publicado. Los dispositivos no mostrarán nada hasta que la publiques.',
'playlist.draft.discard_changes': 'Descartar cambios',
'playlist.draft.publish': 'Publicar',
'playlist.draft.publishing': 'Publicando...',
'playlist.toast.created': 'Lista creada',
'playlist.toast.deleted': 'Lista eliminada',
'playlist.toast.published': 'Lista publicada — dispositivos actualizados',
'playlist.toast.draft_discarded': 'Cambios del borrador descartados',
'playlist.toast.item_removed': 'Elemento eliminado',
'playlist.add_modal_title': 'Agregar contenido a la lista',
'playlist.tab_content': 'Contenido',
'playlist.tab_widgets': 'Widgets',
'playlist.search_placeholder': 'Buscar...',
'playlist.close': 'Cerrar',
'playlist.no_content_found': 'No se encontró contenido',
'playlist.no_widgets_found': 'No se encontraron widgets',
'playlist.add_btn': 'Agregar',
'playlist.adding': 'Agregando...',
'playlist.added': 'Agregado',
// Onboarding
'onboarding.back': 'Atrás',
'onboarding.next': 'Siguiente',
'onboarding.skip': 'Omitir asistente',
'onboarding.go_to_dashboard': 'Ir al panel',
'onboarding.pair_display': 'Vincular pantalla',
'onboarding.step.welcome.title': '¡Bienvenido a ScreenTinker!',
'onboarding.step.welcome.intro': 'Vamos a configurarlo todo en menos de 5 minutos.',
'onboarding.step.welcome.guide_through': 'Este asistente te guiará a través de:',
'onboarding.step.welcome.bullet_download': 'Descargar la app del reproductor',
'onboarding.step.welcome.bullet_pair': 'Vincular tu primera pantalla',
'onboarding.step.welcome.bullet_upload': 'Subir y asignar contenido',
'onboarding.step.player.title': 'Paso 1: Obtén la app del reproductor',
'onboarding.step.player.intro': 'Instala el reproductor en tu dispositivo de pantalla.',
'onboarding.step.player.android_label': 'APK Android',
'onboarding.step.player.android_desc': 'Cajas TV, tabletas, Fire TV',
'onboarding.step.player.web_label': 'Reproductor web',
'onboarding.step.player.web_desc': 'Cualquier navegador, Pi, ChromeOS',
'onboarding.step.player.url_hint': 'Abre la app en tu pantalla e ingresa esta URL del servidor:',
'onboarding.step.pair.title': 'Paso 2: Vincula tu pantalla',
'onboarding.step.pair.intro': 'Ingresa el código de 6 dígitos mostrado en tu pantalla.',
'onboarding.step.pair.name_placeholder': 'Nombre (p. ej., TV Vestíbulo)',
'onboarding.step.upload.title': 'Paso 3: Sube contenido',
'onboarding.step.upload.intro': 'Sube un video o imagen para mostrar.',
'onboarding.step.upload.click_to_select': 'Haz clic para seleccionar un archivo',
'onboarding.step.upload.formats': 'MP4, WebM, JPEG, PNG, GIF',
'onboarding.step.upload.uploading': 'Subiendo...',
'onboarding.step.done.title': '¡Todo listo!',
'onboarding.step.done.intro': '¡Tu pantalla está vinculada y el contenido se está reproduciendo!',
'onboarding.step.done.whats_next': '¿Qué sigue?',
'onboarding.step.done.next_content': 'Agrega más contenido en la Biblioteca de contenido',
'onboarding.step.done.next_layouts': 'Crea diseños multizona en Diseños',
'onboarding.step.done.next_schedule': 'Configura un horario en el calendario de Horario',
'onboarding.step.done.next_widgets': 'Agrega widgets en vivo (reloj, clima, ticker) en Widgets',
'onboarding.step.done.next_kiosk': 'Crea pantallas interactivas en Kiosco',
'onboarding.step.done.next_designer': 'Diseña contenido personalizado en el Diseñador',
'onboarding.toast.invalid_code': 'Ingresa un código válido de 6 dígitos',
'onboarding.toast.pairing': 'Vinculando...',
'onboarding.toast.pair_failed': 'Falló la vinculación',
'onboarding.toast.pair_failed_with_error': 'Falló la vinculación: {error}',
'onboarding.toast.paired': '¡Pantalla vinculada!',
'onboarding.toast.uploaded_assigning': '¡Subido! Asignando a la pantalla...',
'onboarding.toast.content_assigned': '¡Contenido subido y asignado!',
'onboarding.toast.upload_failed': 'Falló la subida',
'onboarding.toast.error_with_error': 'Error: {error}',
// Admin
'admin.title': 'Administración de plataforma',
'admin.subtitle': 'Controles de superadmin - solo tú puedes ver esto',
'admin.access_denied': 'Acceso denegado',
'admin.access_denied_desc': 'Se requiere acceso de administrador de plataforma.',
'admin.all_users': 'Todos los usuarios',
'admin.plans': 'Planes de suscripción',
'admin.system': 'Sistema',
'admin.col.user': 'Usuario',
'admin.col.auth': 'Auth',
'admin.col.last_login': 'Último inicio',
'admin.col.role': 'Rol',
'admin.col.plan': 'Plan',
'admin.col.actions': 'Acciones',
'admin.col.devices': 'Dispositivos',
'admin.col.storage': 'Almacenamiento',
'admin.col.monthly': 'Mensual',
'admin.col.yearly': 'Anual',
'admin.role.user': 'Usuario',
'admin.role.admin': 'Admin',
'admin.role.superadmin': 'Superadmin',
'admin.remove': 'Eliminar',
'admin.owner': 'Propietario',
'admin.confirm': '¿Confirmar?',
'admin.total_users': '{n} usuarios totales',
'admin.unlimited': 'Ilimitado',
'admin.free': 'Gratis',
'admin.version': 'Versión',
'admin.frontend_hash': 'Hash del frontend',
'admin.download_db_backup': 'Descargar respaldo de BD',
'admin.server_status': 'Estado del servidor',
'admin.toast.role_updated': 'Rol actualizado',
'admin.toast.plan_updated': 'Plan actualizado',
'admin.toast.user_removed': 'Usuario eliminado',
// Schedule
'schedule.title': 'Horario',
'schedule.subtitle': 'Calendario de programación de contenido',
'schedule.help_tip': 'Calendario semanal visual para programación. Haz clic en Agregar horario para crear franjas. Configura recurrencia para repetir contenido. La prioridad mayor anula la menor. Los horarios de dispositivo anulan los de grupo.',
'schedule.prev_week': '< Anterior',
'schedule.next_week': 'Siguiente >',
'schedule.add_schedule': 'Agregar horario',
'schedule.edit_schedule': 'Editar horario',
'schedule.apply_to': 'Aplicar a',
'schedule.target_device': 'Dispositivo',
'schedule.target_group': 'Grupo',
'schedule.group_devices_count': '{n} dispositivos',
'schedule.no_groups_msg': 'Aún no hay grupos creados. Créalos en la página Pantallas.',
'schedule.zone_note': 'Nota: Los horarios por zona dependen del diseño. Asegúrate de que todos los dispositivos del grupo usan el mismo diseño.',
'schedule.playlist_override': 'Sobrescribir lista',
'schedule.no_playlist_override': '— Sin sobrescribir lista —',
'schedule.draft_suffix': '(borrador)',
'schedule.layout_override': 'Sobrescribir diseño',
'schedule.no_layout_override': '— Sin sobrescribir diseño —',
'schedule.content_label': 'Contenido',
'schedule.content_hint': '(elemento único, opcional)',
'schedule.content_none': '— Ninguno —',
'schedule.title_label': 'Título (opcional)',
'schedule.title_placeholder': 'p. ej., Lista mañana',
'schedule.start_time': 'Hora de inicio',
'schedule.end_time': 'Hora de fin',
'schedule.repeat': 'Repetir',
'schedule.repeat_none': 'No repetir',
'schedule.repeat_daily': 'Diario',
'schedule.repeat_weekdays': 'Días laborables',
'schedule.repeat_weekends': 'Fines de semana',
'schedule.repeat_weekly': 'Semanal',
'schedule.priority': 'Prioridad',
'schedule.color': 'Color',
'schedule.scheduled_label': 'Programado',
'schedule.tooltip_group_prefix': 'Grupo: ',
'schedule.tooltip_priority': 'Prioridad: {n}',
'schedule.day.sun': 'Dom',
'schedule.day.mon': 'Lun',
'schedule.day.tue': 'Mar',
'schedule.day.wed': 'Mié',
'schedule.day.thu': 'Jue',
'schedule.day.fri': 'Vie',
'schedule.day.sat': 'Sáb',
'schedule.hour_12am': '12am',
'schedule.hour_am': 'am',
'schedule.hour_12pm': '12pm',
'schedule.hour_pm': 'pm',
'schedule.toast.no_groups': 'No hay grupos disponibles. Crea uno primero.',
'schedule.toast.saved': 'Horario guardado',
// Reports
'report.title': 'Informes',
'report.subtitle': 'Análisis de reproducción y disponibilidad de dispositivos',
'report.help_tip': 'Análisis de reproducción. Ve qué se reprodujo, cuándo y en qué dispositivo. Filtra por rango de fechas y dispositivo. Exporta a CSV para verificación.',
'report.export_csv': 'Exportar CSV',
'report.device': 'Dispositivo',
'report.all_devices': 'Todos los dispositivos',
'report.start_date': 'Fecha de inicio',
'report.end_date': 'Fecha de fin',
'report.load_report': 'Cargar informe',
'report.select_range': 'Selecciona un rango de fechas y haz clic en Cargar informe',
'report.error': 'Error',
'report.total_plays': 'Reproducciones totales',
'report.total_hours': 'Horas totales',
'report.unique_content': 'Contenido único',
'report.active_devices': 'Dispositivos activos',
'report.avg_duration': 'Duración media',
'report.plays_per_day': 'Reproducciones por día',
'report.plays_by_hour': 'Reproducciones por hora',
'report.top_content': 'Contenido más reproducido',
'report.by_device': 'Por dispositivo',
'report.no_data': 'Sin datos',
'report.col.content': 'Contenido',
'report.col.device': 'Dispositivo',
'report.col.plays': 'Reproducciones',
'report.col.total_hours': 'Horas totales',
'report.col.completion': 'Finalización',
// Kiosk
'kiosk.title': 'Páginas de kiosco',
'kiosk.subtitle': 'Crea interfaces táctiles interactivas',
'kiosk.help_tip': 'Crea interfaces táctiles interactivas. Agrega botones con iconos y acciones. Incluye pantalla inactiva tras inactividad. Asígnalas a dispositivos como widget.',
'kiosk.new_page': 'Nueva página de kiosco',
'kiosk.prompt_name': 'Nombre de la página de kiosco:',
'kiosk.empty_title': 'Aún no hay páginas',
'kiosk.empty_desc': 'Crea una interfaz táctil interactiva para tus pantallas.',
'kiosk.label': 'Página de kiosco',
'kiosk.preview': 'Previsualizar',
'kiosk.confirm_delete': '¿Eliminar la página "{name}"? Esto no se puede deshacer.',
'kiosk.toast.deleted': 'Página eliminada',
'kiosk.toast.delete_failed': 'Error al eliminar',
'kiosk.toast.saved': 'Página guardada',
'kiosk.not_found': 'Página no encontrada',
'kiosk.back': 'Volver a páginas',
'kiosk.page_settings': 'Ajustes de la página',
'kiosk.title_label': 'Título',
'kiosk.subtitle_label': 'Subtítulo',
'kiosk.logo_url': 'URL del logotipo',
'kiosk.footer_text': 'Texto del pie',
'kiosk.idle_title': 'Título pantalla inactiva',
'kiosk.idle_default': 'Toca para comenzar',
'kiosk.idle_timeout': 'Tiempo de inactividad (segundos)',
'kiosk.style': 'Estilo',
'kiosk.background': 'Fondo',
'kiosk.text_color': 'Color del texto',
'kiosk.columns': 'Columnas',
'kiosk.button_color': 'Color del botón',
'kiosk.button_hover': 'Color hover del botón',
'kiosk.buttons': 'Botones',
'kiosk.add_btn': '+ Agregar',
'kiosk.icon_placeholder': 'Emoji',
'kiosk.label_placeholder': 'Etiqueta',
'kiosk.sublabel_placeholder': 'Sub-etiqueta',
'kiosk.action_none': 'Sin acción',
'kiosk.action_url': 'Abrir URL',
'kiosk.action_page': 'Ir a página',
'kiosk.url_placeholder': 'URL o página',
'kiosk.no_buttons': 'Aún no hay botones',
'kiosk.new_button': 'Nuevo botón',
// Layout editor
'layout.title': 'Diseños',
'layout.subtitle': 'Diseños de pantalla y plantillas',
'layout.help_tip': 'Crea diseños de pantalla multi-zona. Usa plantillas o crea uno propio. Arrastra zonas para posicionar, cambia tamaño con la esquina. Asigna diseños a dispositivos desde la pestaña Lista.',
'layout.new_layout': 'Nuevo diseño',
'layout.templates': 'Plantillas',
'layout.my_layouts': 'Mis diseños',
'layout.empty_custom': 'Aún no hay diseños personalizados',
'layout.prompt_name': 'Nombre del diseño:',
'layout.default_zone_name': 'Principal',
'layout.template_label': 'Plantilla',
'layout.use_template': 'Usar plantilla',
'layout.zone_count_one': '1 zona',
'layout.zone_count_other': '{n} zonas',
'layout.confirm_delete': '¿Eliminar el diseño "{name}"? Esto no se puede deshacer.',
'layout.toast.deleted': 'Diseño eliminado',
'layout.toast.delete_failed': 'Error al eliminar el diseño',
'layout.toast.saved': 'Diseño guardado',
'layout.not_found': 'Diseño no encontrado',
'layout.back': 'Volver a diseños',
'layout.add_zone': 'Agregar zona',
'layout.zones': 'Zonas',
'layout.properties': 'Propiedades',
'layout.delete_zone': 'Eliminar zona',
'layout.zone_n': 'Zona {n}',
'layout.prop.name': 'Nombre',
'layout.prop.x': 'X (%)',
'layout.prop.y': 'Y (%)',
'layout.prop.width': 'Ancho (%)',
'layout.prop.height': 'Alto (%)',
'layout.prop.type': 'Tipo',
'layout.type_content': 'Contenido',
'layout.type_widget': 'Widget',
// Video walls
'wall.title': 'Muros de video',
'wall.subtitle': 'Combina varias pantallas en una sola grande',
'wall.help_tip': 'Combina varias pantallas en una sola grande. Configura el tamaño de la cuadrícula, arrastra dispositivos a posiciones, ajusta la compensación de bisel. Asigna contenido para reproducir en todos los dispositivos.',
'wall.new_wall': 'Nuevo muro de video',
'wall.prompt_name': 'Nombre del muro de video:',
'wall.empty_title': 'Aún no hay muros',
'wall.empty_desc': 'Crea un muro para combinar varias pantallas.',
'wall.grid_summary': 'Cuadrícula {cols}x{rows} • {n} dispositivos',
'wall.not_found': 'Muro no encontrado',
'wall.back': 'Volver a muros',
'wall.delete_wall': 'Eliminar muro',
'wall.grid_config': 'Configuración de cuadrícula',
'wall.columns': 'Columnas',
'wall.rows': 'Filas',
'wall.h_bezel': 'Bisel H (mm)',
'wall.v_bezel': 'Bisel V (mm)',
'wall.update': 'Actualizar',
'wall.content': 'Contenido',
'wall.no_content': 'Sin contenido',
'wall.set_content': 'Establecer contenido',
'wall.available_displays': 'Pantallas disponibles',
'wall.all_assigned': 'Todos los dispositivos asignados',
'wall.drop_here': 'Soltar aquí',
'wall.toast.placed': '{name} colocado en [{col},{row}]',
'wall.toast.grid_updated': 'Cuadrícula actualizada',
'wall.toast.content_updated': 'Contenido actualizado',
'wall.toast.deleted': 'Muro eliminado',
// Billing
'billing.title': 'Suscripción',
'billing.subtitle': 'Administra tu plan y facturación',
'billing.current_plan': 'Plan actual',
'billing.self_hosted': 'Autoalojado',
'billing.trial_days_left': 'Prueba - {n} días restantes',
'billing.trial_ends': 'Tu prueba {plan} termina en {n} días',
'billing.trial_after': 'Después de la prueba, pasarás al plan Gratis (1 dispositivo). Actualiza ahora para conservar tus dispositivos y funciones.',
'billing.devices': 'Dispositivos',
'billing.devices_lc': 'dispositivos',
'billing.storage': 'Almacenamiento',
'billing.storage_lc': 'almacenamiento',
'billing.features': 'Funciones',
'billing.feat.remote_control': 'Control remoto',
'billing.feat.remote_urls': 'URLs remotas',
'billing.feat.priority_support': 'Soporte prioritario',
'billing.available_plans': 'Planes disponibles',
'billing.current': 'Actual',
'billing.unlimited': 'Ilimitado',
'billing.free': 'Gratis',
'billing.per_month': '/mes',
'billing.yearly_save': 'o ${price}/año (ahorra {pct}%)',
'billing.monthly': 'Mensual',
'billing.yearly': 'Anual',
'billing.manage_subscription': 'Gestionar suscripción',
'billing.self_hosted_note': 'Modo autoalojado: los planes pueden ser asignados por administradores sin facturación.',
'billing.failed_to_load': 'Error al cargar',
'billing.toast.checkout_failed': 'Error al iniciar el pago: {error}',
'billing.toast.portal_failed': 'Error al abrir el portal de facturación: {error}',
'billing.toast.payment_success': '¡Pago exitoso! Tu plan ha sido actualizado.',
// Teams
'team.title': 'Equipos',
'team.subtitle': 'Gestiona equipos y acceso compartido',
'team.help_tip': 'Crea equipos para compartir dispositivos con otros usuarios. Los propietarios gestionan el equipo, los editores pueden cambiar contenido/listas, los espectadores solo monitorean.',
'team.new_team': 'Nuevo equipo',
'team.prompt_name': 'Nombre del equipo:',
'team.empty_title': 'Aún no hay equipos',
'team.empty_desc': 'Crea un equipo para compartir dispositivos con otros usuarios.',
'team.your_role': 'Tu rol: {role}',
'team.member_count_one': '1 miembro',
'team.member_count_other': '{n} miembros',
'team.not_found': 'Equipo no encontrado',
'team.back': 'Volver a equipos',
'team.delete_team': 'Eliminar equipo',
'team.members_count': 'Miembros ({n})',
'team.invite': '+ Invitar',
'team.role_viewer': 'Espectador',
'team.role_editor': 'Editor',
'team.role_owner': 'Propietario',
'team.remove': 'Eliminar',
'team.remove_from_team': 'Quitar del equipo',
'team.no_members': 'Sin miembros',
'team.shared_devices': 'Dispositivos compartidos ({n})',
'team.add_device': '+ Agregar dispositivo...',
'team.no_devices': 'No hay dispositivos compartidos con este equipo',
'team.prompt_email': 'Email para invitar:',
'team.prompt_role': 'Rol (viewer, editor o owner):',
'team.toast.invalid_role': 'Rol no válido',
'team.toast.invitation_sent': 'Invitación enviada',
'team.toast.role_updated': 'Rol actualizado',
'team.toast.member_removed': 'Miembro eliminado',
'team.toast.device_added': 'Dispositivo agregado al equipo',
'team.toast.device_removed': 'Dispositivo quitado del equipo',
'team.toast.deleted': 'Equipo eliminado',
// Activity
'activity.title': 'Registro de actividad',
'activity.subtitle': 'Historial de auditoría de todas las acciones',
'activity.load_more': 'Cargar más',
'activity.empty_title': 'Aún no hay actividad',
'activity.empty_desc': 'Las acciones aparecerán aquí a medida que uses el sistema.',
'activity.system': 'Sistema',
'activity.verb_created': 'creó',
'activity.verb_updated': 'actualizó',
'activity.verb_deleted': 'eliminó',
'activity.action_paired_device': 'vinculó un dispositivo',
'activity.action_added_remote_content': 'agregó contenido remoto',
'activity.noun_content': 'contenido',
'activity.noun_device': 'dispositivo',
'activity.noun_playlist_assignment': 'asignación de lista',
'activity.noun_assignment': 'asignación',
'activity.noun_layout': 'diseño',
'activity.noun_widget': 'widget',
'activity.noun_schedule': 'horario',
'activity.noun_video_wall': 'muro de video',
'activity.alert_device_offline': 'alerta: dispositivo desconectado',
// Help
'help.title': 'Centro de ayuda',
'help.subtitle': 'Guías rápidas y preguntas frecuentes',
'help.faq': 'Preguntas frecuentes',
'help.shortcuts': 'Atajos de teclado',
'help.shortcut_esc': 'Reiniciar reproductor web (en la página del reproductor)',
'help.shortcut_f': 'Alternar pantalla completa (reproductor web)',
// Add Display modal
'add_display.title': 'Agregar pantalla',
'add_display.intro': 'Ingresa el código de vinculación de 6 dígitos mostrado en la pantalla.',
'add_display.pairing_code': 'Código de vinculación',
'add_display.display_name': 'Nombre (opcional)',
'add_display.name_placeholder': 'p. ej., TV Vestíbulo',
'add_display.need_player': '¿Necesitas la app del reproductor? Instala una para obtener un código:',
'add_display.android_apk': 'APK Android',
'add_display.web_player': 'Reproductor web',
'add_display.raspberry_pi': 'Raspberry Pi',
'add_display.windows': 'Windows',
'add_display.smart_tv_note': 'Smart TVs (LG/Samsung): abre el navegador integrado y ve a /player',
'add_display.pair_btn': 'Vincular pantalla',
};