/** * Spanish — translated from locales/en.js. * * Register: formal (usted). * `hub`, `node` and `GEK` are left in English: they name the CLI * (`meshbay-node`), node.toml and the docs, which are English throughout. */ export default { // Nav 'nav.toggle_menu': 'Mostrar el menú', 'nav.light_mode': 'Tema claro', 'nav.dark_mode': 'Tema oscuro', 'nav.logout': 'Cerrar sesión', 'nav.login': 'Iniciar sesión', 'nav.minimize_tray': 'Minimizar en la bandeja', 'tray.show': 'Mostrar MeshBay', 'tray.quit': 'Salir', 'tray.start_node': 'Iniciar el nodo', 'tray.stop_node': 'Detener el nodo', // Sidebar 'sidebar.my_groups': 'Mis grupos', 'sidebar.no_groups': 'Aún no hay grupos', 'sidebar.legal': 'Información legal', 'sidebar.discover': 'Descubrir', 'sidebar.public_groups': 'Grupos públicos', // Login 'login.title': 'Iniciar sesión', 'login.username': 'Nombre de usuario', 'login.password': 'Contraseña', 'login.submit': 'Iniciar sesión', 'login.loading': 'Iniciando sesión...', 'login.no_account': '¿No tiene cuenta?', 'login.register_link': 'Crear una cuenta', 'login.forgot': '¿Olvidó su frase de contraseña?', 'login.show_password': 'Mostrar la frase de contraseña', 'login.hide_password': 'Ocultar la frase de contraseña', 'reset.title': 'Restablecer la frase de contraseña', 'reset.request_intro': 'Introduzca su nombre de usuario y el correo de la cuenta. Si coinciden, se envía un código de restablecimiento a esa dirección.', 'reset.send_code': 'Enviar código', 'reset.form_intro': 'Introduzca el código de su correo y elija una nueva frase de contraseña. Si tiene su clave de recuperación, añádala para restaurar también el acceso a sus grupos.', 'reset.code': 'Código de restablecimiento', 'reset.recovery_key': 'Clave de recuperación (opcional)', 'reset.recovery_key_hint': 'Déjelo en blanco si no la tiene. Sin ella, su inicio de sesión se restaura, pero hay que volver a unirse a cada grupo.', 'reset.new_pass': 'Nueva frase de contraseña', 'reset.new_pass_repeat': 'Repetir la nueva frase de contraseña', 'reset.submit': 'Restablecer la frase de contraseña', 'reset.working': 'Restaurando sus identidades de grupo…', 'reset.signin_restored': 'Su inicio de sesión se ha restaurado.', 'reset.groups_restored': 'Sus identidades de grupo se restauraron en todos los nodos alcanzables.', 'reset.no_recovery': 'Sus identidades de grupo no se restauraron. Para cada grupo, pida a su operador que le quite la fijación y le envíe un nuevo código de invitación, y vuelva a unirse.', 'reset.needs_operator': 'Estos grupos aún requieren acción: pida a cada operador que le quite la fijación y le envíe un nuevo código:', 'reset.go_app': 'Ir a la aplicación', 'reset.back_to_login': 'Volver al inicio de sesión', 'reset.err_unsupported': 'El restablecimiento de la frase de contraseña necesita el módulo de cifrado del navegador, que no está disponible aquí.', // Register 'register.title': 'Crear una cuenta', 'register.username': 'Nombre de usuario', 'register.email': 'Correo electrónico', 'register.password': 'Frase de contraseña (mínimo 12 caracteres)', 'register.confirm': 'Confirmar contraseña', 'register.submit': 'Crear la cuenta', 'register.loading': 'Creando la cuenta...', 'register.has_account': '¿Ya tiene una cuenta?', 'register.login_link': 'Iniciar sesión', 'register.recovery_title': 'Guarde su clave de recuperación', 'register.recovery_intro': 'Esta clave restaura sus identidades de grupo si alguna vez olvida su frase de contraseña. Guárdela en un gestor de contraseñas o en un lugar seguro.', 'register.recovery_copy': 'Copiar', 'register.recovery_copied': 'Copiado', 'register.recovery_warning': 'Si pierde tanto su frase de contraseña como esta clave, sus archivos permanecen en sus nodos pero se vuelve a unir a cada grupo con una nueva identidad.', 'register.recovery_saved': 'He guardado mi clave de recuperación en un lugar seguro.', 'register.recovery_continue': 'Continuar', 'register.recovery_email_opt': 'Enviarme también esta clave de recuperación por correo como copia de seguridad', 'register.recovery_emailed': 'También se ha enviado una copia a su correo electrónico, en el mismo mensaje que su código de verificación.', 'register.recovery_not_emailed': 'Esto no se envió por correo. Guárdela ahora: es la única vez que se muestra.', 'register.success_title': 'Verifique su correo', 'register.success_msg': 'Se ha enviado un código de verificación a su dirección de correo electrónico. Introdúzcalo a continuación para activar su cuenta.', 'register.go_login': 'Ir al inicio de sesión', 'register.code_placeholder': 'Código de verificación', 'register.verify_btn': 'Verificar', 'register.verifying': 'Verificando…', 'register.verified_title': 'Correo verificado', 'register.verified_msg': 'Su cuenta está activa. Ya puede iniciar sesión.', 'register.resend': 'Reenviar código', 'register.resend_sent': 'Se ha enviado un nuevo código.', 'login.pending_verification': 'Su correo electrónico aún no ha sido verificado. Revise su bandeja de entrada para obtener el código de verificación.', 'login.verify_link': 'Verificar correo', 'login.invalid': "Nombre de usuario o frase de contraseña incorrectos.", 'login.locked': "Demasiadas frases de contraseña incorrectas para esta cuenta. Vuelva a intentarlo en {minutes} min o restablezca su frase de contraseña.", // Sign-in page: what MeshBay is (browser only) 'welcome.title': 'Internet como debió ser.', 'welcome.lead': 'Sus fotos, su música, sus vídeos y sus conversaciones se quedan en casa, en su propio ordenador. MeshBay le permite disfrutarlos desde cualquier lugar y compartirlos con las personas que usted elija.', 'welcome.app_chat': 'Chat', 'welcome.app_photos': 'Fotos', 'welcome.app_media': 'Centro multimedia', 'welcome.app_video': 'Reproductor de vídeo', 'welcome.app_music': 'Reproductor de música', 'welcome.how_title': 'Cómo funciona', 'welcome.step_home': 'Instale MeshBay en un ordenador de casa. Sus archivos se quedan donde están.', 'welcome.step_anywhere': 'Inicie sesión desde su móvil, su portátil o cualquier navegador, esté donde esté.', 'welcome.step_share': 'Cree grupos e invite a su familia y a sus amigos a unirse.', 'welcome.uses_title': 'Qué puede hacer con él', 'welcome.use_chat': 'Mensajería instantánea dentro de un grupo', 'welcome.use_photos': 'Compartir álbumes de fotos con su familia y amigos', 'welcome.use_media': 'Acceder desde cualquier lugar a su centro multimedia, para usted y su hogar, con streaming y Chromecast desde la aplicación de escritorio', 'welcome.use_apps': 'Crear sus propias aplicaciones en el nodo que aloja', 'welcome.private_title': 'Privado desde el diseño', 'welcome.private_body': 'Sus archivos y mensajes viajan cifrados, directamente de sus dispositivos a su propio ordenador. meshbay.org solo ayuda a que sus dispositivos se encuentren: su contenido nunca pasa por él.', 'welcome.badge_free': 'Gratis', 'welcome.badge_open': 'Código abierto', 'welcome.badge_no_ads': 'Sin publicidad', 'welcome.badge_no_tracking': 'Sin rastreo', 'welcome.docs_title': 'Documentación', 'welcome.docs_source': 'Código fuente', 'welcome.docs_repo': 'git.meshbay.org', 'welcome.docs_user': 'Docs de usuario', 'welcome.docs_quickstart': 'Inicio rápido', 'welcome.docs_userguide': 'Guía de usuario', 'welcome.docs_devel': 'Docs de desarrollo', 'welcome.docs_design': 'Diseño', 'welcome.docs_protocol': 'Protocolo', 'welcome.download': 'Descargar (beta)', 'welcome.legal': 'Información legal', 'register.err_mismatch': 'Las contraseñas no coinciden', 'register.err_username_len': 'El nombre de usuario debe tener al menos {n} caracteres.', 'register.err_min_len': { one: 'Use al menos {n} carácter', other: 'Use al menos {n} caracteres', }, 'register.err_too_weak': 'Demasiado fácil de adivinar. Su frase de contraseña es lo ' + 'que protege sus claves allí donde están almacenadas — unas cuantas palabras sin ' + 'relación entre sí funcionan muy bien.', 'register.strength': 'Solidez: unos {bits} bits. Protege la copia de sus claves que ' + 'se guarda en los nodes a los que se une, así que conviene acertar.', 'captcha.required': 'Por favor, complete el captcha.', 'captcha.failed': 'Verificación del captcha fallida — inténtelo de nuevo.', // Home 'home.welcome': 'Bienvenido a MeshBay', 'home.no_groups': 'Todavía no es miembro de ningún grupo.', 'home.browse_prefix': 'Explore los ', 'home.browse_link': 'grupos públicos', 'home.browse_suffix': ' o pida a un administrador de grupo que le invite.', 'home.invite_only': 'Pida a un administrador de grupo que le invite.', 'home.my_groups': 'Mis grupos', // Explore 'explore.title': 'Grupos públicos', 'explore.search': 'Buscar grupos...', 'explore.loading': 'Cargando...', 'explore.empty': 'No hay grupos públicos disponibles.', 'explore.create_group': 'Crear un grupo', 'explore.join': 'Unirse', 'explore.member': 'Miembro', 'explore.disabled': "This hub does not have public groups.", // Group page 'group.default_name': 'Grupo', 'group.tab_files': 'Archivos', 'group.tab_chat': 'Chat', 'group.tab_video': 'Vídeos', 'group.tab_music': 'Música', 'group.tab_photos': 'Fotos', 'group.tab_helloworld': 'HelloWorld', 'helloworld.greeting': '¡Hola, mundo!', 'helloworld.no_directory': 'Aún no hay carpeta elegida. Elige una en los ajustes.', 'helloworld.counted': '{n} archivo(s)', 'settings_app.helloworld_directory_label': 'Carpeta', 'settings_app.helloworld_directory_hint': 'La carpeta que lista esta aplicación de referencia. Existe para mostrar que añadir una aplicación no requiere más que sus dos archivos.', 'group.tab_members': 'Miembros', 'group.tab_settings': "Ajustes", 'members.danger_leave_hint': "Perderá el acceso a los archivos y al chat de este grupo.", 'members.uploads_title': "Subidas", 'members.uploads_on': "Los miembros pueden añadir archivos", 'members.uploads_off': "Solo usted puede añadir archivos", 'members.uploads_disable': "Desactivar", 'members.uploads_enable': "Activar", 'members.uploads_hint': "Se aplica a todos menos a usted. El nodo rechaza la subida por sí mismo: no se trata de ocultar un botón.", 'members.apps_title': "Aplicaciones", 'members.apps_hint': "Qué partes de este grupo ven los miembros. Al menos una debe permanecer activada.", 'members.apps_need_one': "Al menos una aplicación debe permanecer activada.", 'members.danger_delete_hint': "El grupo desaparece para todos sus miembros. No se puede deshacer.", 'group.filter': 'Filtrar archivos...', 'group.refresh_index': 'Actualizar la lista', 'group.col_name': 'Nombre', 'group.col_size': 'Tamaño', 'group.col_type': 'Tipo', 'group.col_date': 'Fecha', 'group.empty_filter': 'Ningún archivo coincide con el filtro', 'group.empty_dir': 'Esta carpeta está vacía', 'group.download': 'Descargar', 'group.play': 'Reproducir', 'group.offline_title': 'Ningún node está en línea para este grupo en este momento.', 'group.offline_hint': 'Los archivos aparecerán cuando se conecte un node que aloje ' + 'este grupo.', 'group.upload': 'Subir', 'group.drop_here': 'Suelta para subir a {dir}', 'group.drop_not_here': 'Solo se pueden soltar archivos en una carpeta con permiso de escritura.', 'group.drop_conflict': 'Subida cancelada — ya existe en esta carpeta: {names}. Cámbiale el nombre o elimínalo primero.', 'group.drop_invalid': 'Subida cancelada — el nodo no puede guardar estos nombres: {names}', 'group.drop_unreadable': 'Subida cancelada — no se pudieron leer los elementos soltados.', 'group.drop_mkdir_failed': 'Subida cancelada — no se pudo crear una carpeta ({detail}).', 'group.mkdir': 'Nueva carpeta', 'group.mkdir_prompt': 'Nombre de la nueva carpeta', 'group.mkdir_offline': 'Sin conexión con el nodo.', 'group.download_offline': 'Sin conexión con el nodo — la descarga no puede empezar. Se reconecta sola; inténtelo de nuevo en un momento.', 'group.download_write_stalled': 'El archivo dejó de escribirse en el disco ({seconds} s sin avance). La descarga se detuvo en lugar de quedarse colgada; inténtelo de nuevo.', 'device.add_title': 'This browser is not linked to this node yet', 'device.add_hint': 'Your account is known here, but this browser holds a different key. Approve it from a device already linked — no operator needed.', 'device.add_btn': 'Get a linking code', 'device.add_show': 'Type this code into a device already linked to this node, within the hour:', 'device.mine_title': 'Your devices on this node', 'device.mine_hint': 'Each browser or client you use here holds its own key. They are separate from your devices on other nodes.', 'device.mine_empty': 'No device is linked here yet.', 'device.this_one': 'this one', 'device.revoke': 'Remove', 'device.revoke_confirm': 'Remove this device? It will lose access to this node until it is linked again.', 'device.approve_hint': 'Linking a new device? Enter the code it is showing.', 'device.approve_btn': 'Approve', 'device.approved': 'Device linked.', 'group.root_unavailable': '(no disponible — la unidad está desconectada)', 'group.root_plug': 'Conectar', 'group.root_eject': 'Expulsar', 'group.root_writable': 'Lectura/Escritura', 'group.root_ejected': '(expulsado)', 'group.view': 'Ver', 'group.delete': 'Eliminar', 'group.delete_confirm': '¿Eliminar {name}?', 'group.delete_group': 'Eliminar el grupo', 'group.delete_group_confirm': '¿Eliminar «{name}» de forma permanente y expulsar a ' + 'todos los miembros? Los archivos que están en el node se conservan.', 'group.err_transport': 'Módulo de transporte no cargado', // Status 'status.idle': 'Inactivo', 'status.discovering': 'Buscando nodes...', 'status.connecting': 'Conectando por WebRTC...', 'status.connecting_short': 'Conectando…', 'status.fetching': 'Obteniendo el índice...', 'status.files': { one: '{n} archivo', other: '{n} archivos', }, 'status.offline': 'Ningún node en línea', 'status.error': 'Error de conexión', // Chat 'chat.empty': 'Todavía no hay mensajes. ¡Empiece la conversación!', 'chat.placeholder': 'Escriba un mensaje...', 'chat.send': 'Enviar', 'chat.attach': 'Adjuntar archivo', 'chat.attach_read_only': 'Ningún directorio compartido con escritura: los adjuntos están desactivados', // Video player 'video.loading': 'Cargando {name}...', 'video.buffering': 'Almacenando en búfer...', 'video.resumed_at': "Reanudado en {time}", 'video.from_start': "Empezar desde el principio", 'video.audio_track': 'Pista de audio', 'video.audio_track_n': 'Pista {n}', 'video.subtitles': 'Subtítulos', 'video.subtitles_off': 'Ninguno', 'video.subtitle_track_n': 'Pista {n}', 'video.subtitles_forced': 'forzados (solo carteles)', 'video.subtitles_sdh': 'para sordos', 'video.err_subtitle': 'No se pudo cargar esta pista de subtítulos', 'video.close': 'Cerrar (Esc)', 'preview.pdf_fallback': 'Este navegador no mostrará el PDF integrado. Descárguelo ' + 'en su lugar — en cualquier caso se descifró aquí.', 'preview.too_large': 'Este archivo ocupa {size}, más de lo que esta página puede mantener en memoria ({limit}). Descárguelo en su lugar — una descarga se escribe directamente en disco.', 'download.too_large_for_memory': '«{name}» ocupa {size}. Este navegador solo puede guardar un archivo así transmitiéndolo al disco, y aquí no puede hacerlo — tendría que mantener el archivo entero en memoria. Recargue la página e inténtelo de nuevo; si eso no ayuda, use la aplicación de escritorio.', 'group.upload_indexing': 'indexando…', 'video.err_transport': 'Transporte no conectado', 'video.err_mse': 'Códec no compatible con la reproducción en continuo: {codec}', 'video.mode_poster': 'Pósteres', 'video.mode_flat': 'Lista plana', 'video.filter_all': 'All', 'video.filter_movies': 'Movies', 'video.filter_series': 'Series', 'pager.range': '{from}–{to} de {total}', 'pager.previous': 'Página anterior', 'pager.next': 'Página siguiente', 'video.empty': 'No se encontraron vídeos.', 'video.no_root_configured': 'Aún no se ha definido una carpeta raíz de Vídeos para este grupo — un operador puede elegir una en Configuración.', 'music.no_root_configured': 'Aún no se ha definido una carpeta raíz de Música para este grupo — un operador puede elegir una en Configuración.', 'video.director': 'Director', 'video.specials': 'Especiales', 'video.season_n': 'Temporada {n}', 'video.episode_n': 'Episodio {n}', 'video.n_episodes': { one: '{n} episodio', other: '{n} episodios', }, 'video.fix_match': 'Corregir coincidencia…', 'video.search_title': 'Corregir la coincidencia de TMDB', 'video.search_placeholder': 'Buscar en TMDB…', 'video.search_button': 'Buscar', 'video.search_no_results': 'No se encontraron coincidencias.', 'video.search_apply_hint': 'Se aplica a todos los archivos agrupados actualmente bajo este título.', 'video.search_apply_hint_movie': 'Se aplica solo a este archivo.', 'video.source_file': 'Archivo: {name}', 'video.no_match': 'Sin coincidencia fiable en TMDB — se muestra el nombre del archivo.', 'video.rematch_one': 'Volver a asociar', 'video.read_more': 'Leer más', 'video.read_less': 'Mostrar menos', // Música 'music.mode_grid': 'Álbumes', 'music.mode_flat': 'Lista plana', 'music.empty': 'No se encontró música.', 'music.unknown_album': 'Álbum desconocido', 'music.unknown_artist': 'Artista desconocido', 'music.various': 'Varios', 'music.play_all': 'Reproducir todo', 'music.menu_more': 'Más…', 'music.menu_play': 'Reproducir', 'music.menu_play_next': 'Reproducir a continuación', 'music.menu_enqueue': 'Añadir a la cola', 'music.n_tracks': { one: '{n} pista', other: '{n} pistas', }, 'music.err_transport': 'Transporte no conectado', 'music.err_playback': 'Error de reproducción', 'music.err_transcode': 'Error al convertir el formato', 'music.player_play': 'Reproducir', 'music.player_pause': 'Pausa', 'music.player_prev': 'Anterior', 'music.player_next': 'Siguiente', 'music.player_shuffle': 'Aleatorio', 'music.player_repeat_off': 'Repetición desactivada', 'music.player_repeat_all': 'Repetir todo', 'music.player_repeat_one': 'Repetir una', 'music.player_volume': 'Volumen', 'music.player_close': 'Cerrar reproductor', 'playlists.menu': 'Listas', 'playlists.load': 'Cargar una lista', 'playlists.create': 'Nueva lista…', 'playlists.delete': 'Eliminar una lista', 'playlists.remove_track': 'Quitar una pista', 'playlists.sync_now': 'Sincronizar ahora', 'playlists.add_to': 'Añadir a una lista', 'playlists.favorites': 'Favoritos', 'playlists.none_yet': 'Aún no hay listas', 'playlists.empty_playlist': 'Esta lista está vacía', 'playlists.added': '{n} añadidas', 'playlists.already_there': 'Ya está en esa lista', 'playlists.name_placeholder': 'Nombre de la lista', 'playlists.err_duplicate': 'Ya existe una lista con ese nombre', 'playlists.confirm_delete': '¿Eliminar la lista «{name}»? Esto no se puede deshacer.', 'playlists.deleted': '«{name}» eliminada', 'playlists.synced': 'Listas sincronizadas', 'playlists.sync_failed': 'No se pudieron sincronizar', 'playlists.err_no_key': 'Cierra sesión y vuelve a entrar con tu contraseña una vez para sincronizar las listas entre dispositivos.', 'playlists.err_too_large': '«{name}» es demasiado grande para sincronizarse con tus otros dispositivos. Divídela en listas de unas {n} canciones.', 'playlists.track_removed': 'Pista quitada', 'playlists.save_queue': 'Guardar la cola como lista…', 'playlists.cancel': 'Cancelar', 'playlists.save': 'Guardar', 'music.player_queue': 'Cola actual', 'music.queue_title': 'Reproduciendo ahora', // Photos 'photo.empty': 'No se encontraron fotos.', 'photo.no_roots_configured': 'Aún no se han definido carpetas raíz de Fotos para este grupo — un operador puede elegir algunas en Configuración.', 'photo.root_album': '(nivel superior)', 'photo.n_photos': { one: '{n} foto', other: '{n} fotos', }, 'photo.back': 'Atrás', 'photo.prev': 'Anterior (←)', 'photo.next': 'Siguiente (→)', 'photo.zip_album': 'Descargar álbum como zip', 'photo.zoom_in': 'Acercar', 'photo.zoom_out': 'Alejar', 'photo.zoom_fit_title': 'Ajustar a la ventana', 'photo.zoom_fit_label': 'Ajustar', 'photo.zoom_100': 'Tamaño real (100%)', // LAN cast 'cast.start': 'Enviar a dispositivo', 'cast.stop': 'Detener envío', 'cast.copy_url': 'Copiar URL del stream', 'cast.copied': 'URL copiada', 'cast.scanning': 'Buscando dispositivos…', 'cast.no_devices': 'No se encontraron dispositivos', // Settings 'settings.title': 'Ajustes', 'settings.coming_soon': 'Próximamente.', 'settings.downloads': 'Descargas', 'settings.dl_auto': 'Guardar automáticamente', 'settings.dl_auto_hint': 'Los archivos van directamente a la carpeta que elija más ' + 'abajo, sin ningún diálogo. Descargar veinte archivos deja allí veinte archivos.', 'settings.dl_ask': 'Preguntar cada vez', 'settings.dl_ask_hint': 'Un diálogo «Guardar como» por archivo — uno por archivo, ' + 'también cuando descarga una selección.', 'settings.dl_folder': 'Carpeta: {name}', 'settings.dl_no_folder': 'Ninguna carpeta elegida — las descargas van adonde las ' + 'ponga su navegador, y no se pueden pausar', 'settings.dl_choose': 'Elegir carpeta', 'settings.dl_change': 'Cambiar', 'settings.dl_forget': 'Olvidar', 'settings.profile': 'Perfil', 'settings.username': 'Nombre de usuario', 'settings.email': 'Email', 'settings.email_save': 'Save', 'settings.email_saved': 'Correo actualizado', 'settings.email_code_sent': 'Se ha enviado un código de verificación a su nueva dirección de correo.', 'settings.email_code_placeholder': 'Código de verificación', 'settings.email_verify_btn': 'Verificar', 'settings.email_verifying': 'Verificando…', 'settings.email_verified': 'Dirección de correo cambiada con éxito.', 'settings.notif_global_disable': 'Disable all notifications', 'settings.notif_global_hint': 'When enabled, no notifications are created for any group.', 'settings.defaults': 'Valores predeterminados', 'settings.default_tab': 'Default tab', 'settings.default_tab_hint': 'Which tab opens first when you enter a group.', 'settings.media_page_size': 'Elementos por página en Vídeos y Música', 'settings.media_page_size_hint': 'Cuántos pósters o álbumes se muestran a la vez; las flechas de la barra de herramientas pasan al siguiente grupo.', 'settings.music_keep_screen_on': 'Keep screen on during music playback', 'settings.music_keep_screen_on_hint': 'Prevents the phone from locking on its own while a track is playing.', 'settings.node_pins': 'Identidades de los nodes', 'settings.node_pins_hint': 'La clave de identidad de cada node se memoriza la ' + 'primera vez que se conecta. Si cambia, la conexión se rechaza — algo esperable ' + 'solo cuando un operador reinstala un node. Confírmelo con él antes de borrarla.', 'settings.node_pins_count': { one: '{n} fijada', other: '{n} fijadas', }, 'settings.node_pins_clear': 'Borrar las identidades fijadas', 'settings.passphrase': 'Frase de contraseña', 'settings.passphrase_hint': 'Cambia la frase de contraseña de esta cuenta. Sus claves de identidad se vuelven a cifrar en cada grupo cuyo nodo esté en línea; un grupo cuyo nodo esté fuera de línea tendrá que volver a unirse después.', 'settings.passphrase_change': 'Cambiar la frase de contraseña', 'settings.passphrase_current': 'Frase de contraseña actual', 'settings.passphrase_new': 'Nueva frase de contraseña', 'settings.passphrase_new_repeat': 'Repetir la nueva frase de contraseña', 'settings.continue': 'Continuar', 'settings.done': 'Listo', 'settings.passphrase_confirm_intro': 'Sus claves de identidad se volverán a cifrar ahora en cada grupo cuyo nodo se pueda alcanzar:', 'settings.passphrase_reachable': 'Actualizado ahora', 'settings.passphrase_unreachable': 'No se puede alcanzar', 'settings.passphrase_fallback_note': 'Para un grupo que no se pueda alcanzar, pida a su operador que le quite la fijación y le envíe un nuevo código de invitación, y vuelva a unirse. Sus archivos y mensajes no se pierden.', 'settings.passphrase_confirm_btn': 'Cambiarla', 'settings.passphrase_working': 'Volviendo a cifrar sus claves…', 'settings.passphrase_done': 'Frase de contraseña cambiada.', 'settings.passphrase_needs_operator': 'Estos grupos aún requieren acción: pida a cada operador que le quite la fijación y le envíe un nuevo código:', 'settings.pw_too_short': 'La nueva frase de contraseña debe tener al menos 12 caracteres.', 'settings.pw_mismatch': 'Las dos nuevas frases de contraseña no coinciden.', 'settings.pw_same': 'La nueva frase de contraseña debe ser distinta de la actual.', 'settings.pw_wrong_current': 'La frase de contraseña actual no es correcta. No se cambió nada.', 'settings.recovery': 'Clave de recuperación', 'settings.recovery_hint': 'Añade a cada grupo una copia de su identidad cifrada con su clave de recuperación. Hágalo una vez en cada navegador que use; sin ella, una frase de contraseña perdida obliga a volver a unirse a cada grupo a mano.', 'settings.recovery_loaded': 'Cargada en este navegador: los grupos nuevos quedan cubiertos automáticamente.', 'settings.recovery_open': 'Introducir la clave de recuperación', 'settings.recovery_input_ph': 'Pegue su clave de recuperación', 'settings.recovery_submit': 'Añadir copias de seguridad', 'settings.recovery_working': 'Actualizando sus grupos…', 'settings.recovery_done': 'Sus grupos ya tienen una copia de recuperación.', 'settings.recovery_partial': 'No se pudo contactar con estos grupos. Ábralos más tarde o vuelva a ejecutar esto:', 'settings.recovery_need_relogin': 'Cierre sesión y vuelva a entrar, luego inténtelo de nuevo.', 'settings.danger': 'Eliminar la cuenta', 'settings.sessions_heading': 'Sesiones', 'settings.sign_out_everywhere': 'Cerrar sesión en todas partes', 'settings.sign_out_everywhere_hint': 'Termina todas las sesiones de tu cuenta, incluida esta: útil si dejaste la sesión abierta en un ordenador que no es tuyo. Una aplicación de escritorio vuelve a entrar con su clave de dispositivo hasta que retires ese dispositivo.', 'settings.sign_out_everywhere_confirm': '¿Cerrar sesión en todos los navegadores y aplicaciones, incluido este?', 'settings.delete_hint': 'Elimina su cuenta, sus pertenencias a grupos y sus ' + 'notificaciones del hub, y libera su nombre de usuario. No alcanza lo que vive ' + 'en los nodes: los archivos que subió se quedan donde los guarda su operador, y ' + 'cada node conserva la identidad que fijó para usted hasta que su operador la ' + 'retire. Los registros de conexión se guardan un año, como exige la ley.', 'settings.delete_account': 'Eliminar mi cuenta', 'settings.delete_confirm': 'Escriba su frase de contraseña para confirmar. ' + 'Esta acción no se puede deshacer.', 'settings.delete_confirm_btn': 'Eliminar definitivamente', 'settings.cancel': 'Cancelar', 'settings.appearance': 'Apariencia', 'settings.theme': 'Tema', 'settings.theme_light': 'Claro', 'settings.theme_dark': 'Oscuro', 'settings.theme_system': 'Sistema', 'settings.language': 'Idioma', 'settings.about': 'Acerca de', 'firstrun.title': 'Which hub?', 'firstrun.hint': 'A hub holds your account and introduces you to nodes. It never sees your files, your messages or your keys.', 'firstrun.btn': 'Continue', 'firstrun.checking': 'Checking…', 'firstrun.note': 'There is no default on purpose: this application only trusts a hub for its API, never for the interface, which ships with the application itself.', 'device.this_device': 'This device', 'settings.keys_heading': 'Keys on this device', 'settings.hub_heading': 'Hub', 'settings.hub_current': 'Currently', 'settings.hub_hint': 'Changing this signs you out and restarts the window.', 'settings.hub_change': 'Change', 'settings.keys_where': 'Protected by', 'settings.keys_unprotected': 'No system keyring is running, so your keys are encrypted with a key that is not a secret. Anyone who can read this machine’s files can read them. Start a keyring, or treat this device as untrusted.', 'settings.keys_unavailable': 'This system offers no key storage at all, so this device cannot be remembered — you will be asked for your passphrase each time. That is the safe outcome: nothing was stored unprotected.', 'settings.version': 'Versión', 'settings.protocol': 'Protocolo', 'settings.role': 'Rol', 'settings.groups': 'Notificaciones de grupo', 'settings.notifications': 'Notificaciones', 'settings.node_key': 'Vincular un node', 'settings.node_key_desc': 'Si administra un node MeshBay, pegue aquí su clave ' + 'pública Ed25519 para vincularlo a su cuenta. Ejecute `meshbay-node status` en ' + 'la máquina que aloja el node para leer la clave, o cópiela desde ' + 'Node → Overview en el cliente de escritorio.', 'settings.node_key_placeholder': 'Pegue la clave pública Ed25519 del node (base64)', 'settings.node_key_submit': 'Vincular el node', 'settings.node_key_success': 'Node vinculado correctamente', 'settings.node_key_current': 'Clave del node vinculado', // Sidebar 'sidebar.create_group': 'Crear un grupo', 'sidebar.settings': 'Ajustes', 'sidebar.admin': 'Administración', // User menu 'usermenu.language': 'Idioma', 'usermenu.settings': 'Ajustes', 'usermenu.theme_light': 'Tema claro', 'usermenu.theme_dark': 'Tema oscuro', 'usermenu.logout': 'Cerrar sesión', // Admin panel 'admin.title': 'Administración', 'admin.tab_stats': 'Estadísticas', 'admin.tab_users': 'Usuarios', 'admin.tab_groups': 'Grupos', 'admin.tab_nodes': 'Nodes', 'admin.tab_logs': 'Registros', 'admin.col_observed_ip': 'Visto desde', 'admin.col_hint': 'Dirección anunciada', 'admin.col_last_seen': 'Último anuncio', 'admin.node_online': 'en línea', 'admin.node_offline': 'desconectado', 'admin.no_nodes': 'Ningún node registrado', 'admin.nodes_hint': '«Visto desde» es la dirección desde la que llegó el anuncio, ' + 'en una petición firmada con la clave del node — esa es la que sirve para ' + 'responder a un requerimiento. La dirección anunciada es la que el node cree que ' + 'es la suya, aprendida de un servidor STUN y enviada aquí; sirve para alcanzar el ' + 'node y no prueba nada.', 'admin.tab_blocklist': 'Lista de bloqueo', 'admin.tab_general': "General", 'admin.general_groups_heading': "Groups", 'admin.allow_public_groups_label': "Allow members to create public groups", 'admin.allow_public_groups_hint': "When off, new groups can only be private and invite-only. Existing public groups are left as they are — suspend them one by one from the Groups tab.", 'admin.mail_heading': "Correo saliente", 'admin.mail_hint': "Lo que este hub envía, y cuánto. Los dos que importan son el presupuesto por hora, que ningún número de cuentas puede subir, y el límite diario por destinatario, que es lo que vive realmente alguien acosado.", 'admin.mail_this_hour': "Enviados esta hora", 'admin.mail_remaining': "Quedan {general} para registros y cambios de dirección, {recovery} para restablecimientos de contraseña e invitaciones.", 'admin.mail_hourly_budget': "Mensajes por hora (toda la instancia)", 'admin.mail_hourly_reserved_for_recovery': "De ellos, reservados para restablecimientos e invitaciones", 'admin.mail_destination_daily_cap': "Mensajes por día a un mismo destinatario", 'admin.mail_destination_cooldown_seconds': "Segundos entre mensajes al mismo destinatario", 'admin.mail_invite_link_daily_cap': 'Correos de enlace de invitación por día y por cuenta', 'admin.mail_verification_resend_cooldown': "Segundos entre dos códigos de registro", 'admin.mail_reset_cooldown': "Segundos entre dos códigos de restablecimiento", 'admin.mail_email_change_cooldown': "Segundos antes de que una cuenta pueda proponer otra dirección", 'admin.mail_save': "Guardar límites de correo", 'admin.mail_reset_defaults': "Restaurar valores por defecto", 'admin.login_heading': "Inicio de sesión", 'admin.login_hint': "Tras este número de frases de contraseña incorrectas para un mismo nombre de usuario, se rechaza el inicio de sesión con frase de contraseña durante el tiempo indicado. Las sesiones ya abiertas y los dispositivos registrados siguen funcionando, y restablecer la frase de contraseña levanta el bloqueo. 0 lo desactiva.", 'admin.session_heading': 'Sesiones', 'admin.session_hint': 'Un navegador cierra la sesión tras el primer número de horas sin interacción ni reproducción en curso; la aplicación de escritorio no. Una sesión sin usar durante el segundo número deja de renovarse, y ninguna dura más del tercero.', 'admin.session_browser_idle_hours': 'Cierre de sesión del navegador por inactividad (horas)', 'admin.session_refresh_idle_hours': 'Una sesión sin usar caduca tras (horas)', 'admin.session_max_hours': 'Duración máxima de una sesión (horas)', 'admin.session_save': 'Guardar ajustes de sesión', 'admin.login_max_failures': "Frases incorrectas antes del bloqueo", 'admin.login_lockout_minutes': "Duración del bloqueo (minutos)", 'admin.login_save': "Guardar límites de inicio de sesión", 'admin.mail_state_is_in_stats': "El uso de la hora actual se muestra en Estadísticas.", 'admin.mail_state_hint': "Los restablecimientos y las invitaciones pueden gastar todo el presupuesto; los registros y cambios de dirección no pueden tocar la parte reservada. Se avisa a los administradores una vez por hora cuando se alcanza cualquiera de los dos límites.", 'admin.mail_left_signups': "Restante para registros", 'admin.mail_left_recovery': "Restante para restablecimientos e invitaciones", 'admin.mail_recipients': "Destinatarios contados hoy", 'admin.mail_alert_all': "Este hub ha dejado de enviar correo durante esta hora. También se rechazan los restablecimientos e invitaciones.", 'admin.mail_alert_general': "La parte para registros y cambios de dirección está agotada esta hora. Los restablecimientos e invitaciones siguen saliendo.", 'admin.settings_readonly': "Only an admin can change these settings.", // Admin stats 'admin.stat_users': 'Usuarios', 'admin.stat_groups': 'Grupos', 'admin.stat_nodes': 'Nodes', 'admin.stat_online': 'Nodes en línea', // Admin users 'admin.users_search': 'Buscar usuarios...', 'admin.col_username': 'Nombre de usuario', 'admin.col_role': 'Rol', 'admin.col_status': 'Estado', 'admin.col_created': 'Creación', 'admin.col_actions': 'Acciones', 'admin.col_email': 'Correo electrónico', 'admin.col_groups': 'Grupos', 'admin.no_users': 'No se ha encontrado ningún usuario', 'admin.btn_suspend': 'Suspender', 'admin.btn_unsuspend': 'Reactivar', 'admin.btn_revoke': "Revoke", 'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.", 'admin.btn_details': 'Detalles', 'admin.btn_delete': 'Eliminar', 'admin.delete_confirm': '¿Eliminar la cuenta «{user}» y todos sus grupos? Esta acción no se puede ' + 'deshacer. Los archivos que subió permanecen en los nodes que los alojan, y cada ' + 'node conserva la identidad que fijó hasta que su operador la retire. La ' + 'suspensión es la opción reversible.', 'admin.user_detail': 'Detalles del usuario', 'admin.btn_close': 'Cerrar', 'admin.self_note': '(usted)', // Admin groups 'admin.col_name': 'Nombre', 'admin.col_visibility': 'Visibilidad', 'admin.col_members': 'Miembros', 'admin.no_groups': 'No se ha encontrado ningún grupo', // Admin logs 'admin.col_time': 'Hora', 'admin.col_event': 'Evento', 'admin.col_user': 'Usuario', 'admin.col_ip': 'IP', 'admin.col_detail': 'Detalle', 'admin.filter_all': 'Todos los eventos', 'admin.no_logs': 'No se ha encontrado ningún registro', 'admin.btn_load_more': 'Cargar más', // Admin blocklist 'admin.col_hash': 'Huella', 'admin.col_reason': 'Motivo', 'admin.col_date': 'Fecha', 'admin.col_added_by': 'Añadida por', 'admin.no_blocked': 'Ninguna huella bloqueada', 'admin.add_hash': 'Añadir una huella a la lista de bloqueo', 'admin.hash_placeholder': 'huella blake3 (64 caracteres hexadecimales)', 'admin.reason_placeholder': 'Motivo', 'admin.btn_block': 'Bloquear', 'admin.btn_unblock': 'Desbloquear', // Notifications // Create group 'create_group.title': 'Crear un grupo', 'create_group.name': 'Nombre del grupo', 'create_group.name_placeholder': 'p. ej. Fotos de familia, Archivos del proyecto...', 'create_group.join_policy': 'Política de acceso', 'create_group.invite': 'Solo por invitación', 'create_group.invite_desc': "Los miembros deben ser invitados por un administrador. El grupo no aparece en la lista pública.", 'create_group.open': 'Abierto (cualquiera puede unirse)', 'create_group.open_desc': "Aparece en los grupos públicos: cualquiera puede encontrarlo y unirse sin aprobación.", 'create_group.description': 'Descripción', 'create_group.description_hint': '¿De qué trata este grupo? (opcional)', 'create_group.submit': 'Crear', 'create_group.hint': 'Un grupo necesita un node para alojar los archivos. Puede ' + 'crear el grupo ahora y conectar un node más adelante.', 'create_group.creating': 'Creando...', // Members 'members.col_role': 'Rol', 'members.group_role': 'Rol en el grupo', 'members.admin': 'Administrador', 'members.group_admin': 'Administrador del grupo', 'members.owner': 'Propietario', 'members.member': 'Miembro', 'members.invite_title': 'Invitar a un miembro', 'members.username_placeholder': 'Nombre de usuario', 'members.invite_btn': 'Invitar', 'members.invite_needs_pairing': 'Las invitaciones se firman con la clave que este ' + 'node fijó para su navegador, así que empareje el navegador abajo antes de ' + 'invitar a nadie.', 'members.invite_ask_operator': 'Solo el operador del node que aloja este grupo puede ' + 'invitar, desde un navegador emparejado con él.', 'members.remove': 'Expulsar', 'members.remove_confirm': '¿Expulsar a {user} de este grupo? Su cuenta, sus otros ' + 'grupos y los archivos que subió no se ven afectados.', 'members.remove_hint': 'Expulsar a alguien le quita la pertenencia al grupo e impide ' + 'que el node le entregue la clave del grupo. No elimina su cuenta, y no recupera ' + 'la clave que ya tiene en su poder — rótela en el node (meshbay-node gek-init) si ' + 'eso importa.', 'members.pair_title': 'Emparejar este navegador con su node', 'members.pair_hint': 'Su node solo acepta acciones de operador — invitaciones, ' + 'eliminación de archivos — desde un navegador con el que se haya emparejado. ' + 'Ejecute `meshbay-node operator pair` en el node y escriba aquí el código. El ' + 'código nunca pasa por el hub.', 'members.pair_btn': 'Emparejar', 'members.pair_success': 'Este navegador ya está emparejado con el node.', 'members.invite_code_ready': 'Código de invitación para {user}:', 'members.invite_email_sent': 'Se ha enviado un correo con el código a este miembro.', 'members.invite_email_failed': 'No se pudo enviar el correo — comparta el código manualmente.', 'members.invite_email_opt': 'Enviar la invitación por correo (puede llegar a spam)', 'members.link_title': "Invitar con un enlace", 'members.link_hint': "Para alguien que quizá aún no tenga cuenta. Envíelo como prefiera — mensajería, SMS. El enlace sirve una sola vez, durante siete días, para quien lo abra primero.", 'members.link_email_placeholder': "Dirección de correo (opcional)", 'members.link_btn': "Crear enlace", 'members.link_ready': "Enlace de invitación — válido 7 días, un solo uso:", 'members.link_copy': "Copiar", 'members.link_copied': "Copiado", 'members.link_email_sent': "El enlace se ha enviado por correo.", 'members.link_email_refused': "No se pudo enviar el correo — comparta el enlace usted mismo.", 'members.links_pending': "Enlaces de invitación", 'members.link_status_expired': "caducado", 'members.link_expires': "caduca el {date}", 'members.link_cancel': "Cancelar", 'members.link_share': "Compartir", 'members.link_share_title': "Invitación", 'members.link_unlabelled': "enlace creado el {date}", 'invite.title': "Le han invitado", 'invite.none': "No hay ninguna invitación esperando en esta pestaña. Vuelva a abrir el enlace que recibió.", 'invite.signed_out': "Alguien le ha invitado a un grupo en este hub. Cree una cuenta, o inicie sesión si ya tiene una.", 'invite.register': "Crear una cuenta", 'invite.signin': "Iniciar sesión", 'invite.confirm': "{inviter} le invita a unirse a {group}.", 'invite.join': "Unirse", 'invite.ignore': "Ignorar", 'invite.open': "Abrir el grupo", 'invite.already_member': "Ya es miembro de {group}.", 'invite.invalid': "Esta invitación ya no es válida: se ha usado, cancelado o ha caducado. Pida una nueva.", 'invite.joining': "Uniéndose…", 'invite.after_register': "Inicie sesión para unirse al grupo al que le invitaron.", 'invite.paste_title': "Unirse con un enlace de invitación", 'invite.paste_placeholder': "Pegue el enlace aquí", 'invite.paste_btn': "Continuar", 'invite.paste_invalid': "Eso no es un enlace de invitación.", 'invite.paste_other_hub': "Esta invitación es para otro hub.", 'group.link_spent': "Este enlace de invitación ya no es válido en la máquina que aloja el grupo. Pida uno nuevo.", 'members.invite_code_hint': 'También puede compartir este código por otro canal (ej. SMS). ' + 'Lo introduce la primera vez que abre este grupo.', 'transfers.title': 'Transferencias', 'transfers.clear': 'Borrar las terminadas', 'transfers.cancel': 'Cancelar', 'transfers.open': 'Abrir', 'transfers.done': 'Terminada', 'transfers.cancelled': 'Cancelada', 'transfers.preparing': 'Preparando…', 'transfers.waiting_own_slots': 'En espera — sus espacios están ocupados', 'transfers.waiting_node': 'En espera — {n} por delante', 'transfers.summary': '{running} en curso · {waiting} en espera', 'transfers.group_running': 'En curso', 'transfers.group_waiting': 'En espera', 'transfers.group_paused': 'En pausa', 'transfers.group_finished': 'Finalizados', 'transfers.cancel_one': 'Cancelar {name}', 'transfers.pause': 'Pausar', 'transfers.resume': 'Reanudar', 'transfers.paused': 'En pausa', 'transfers.not_pausable': 'No se puede pausar — elija una carpeta de descargas en Ajustes para activarlo', 'transfers.pause_one': 'Pausar {name}', 'transfers.resume_one': 'Reanudar {name}', 'transfers.eta_seconds': 'quedan {n} s', 'transfers.eta_minutes': 'quedan {n} min', 'transfers.eta_hours': 'quedan {n} h', 'transfers.failed': 'Fallida', 'group.select': 'Seleccionar', 'group.select_done': 'Listo', 'group.actions': 'Acciones ({n})', 'group.download_n': 'Descargar ({n})', 'group.download_zip_n': 'Descargar las carpetas en zip ({n})', 'group.download_zip_one': 'Descargar la carpeta en zip', 'group.delete_n': 'Eliminar ({n})', 'group.delete_n_confirm': { one: '¿Eliminar {n} elemento? {names}', other: '¿Eliminar {n} elementos? {names}', }, 'group.download_zip': { one: 'Descargar en zip ({n} archivo)', other: 'Descargar en zip ({n} archivos)', }, 'group.zip_empty': 'Esa carpeta no contiene nada que descargar.', 'group.zip_no_stream': 'Este navegador no puede escribir una descarga directamente ' + 'en el disco, así que {name} ({size}) tiene que construirse antes en memoria. Con ' + 'un archivo comprimido grande eso puede fallar. ¿Continuar?', 'group.zip_too_large': '«{name}» ocupa {size}, y una carpeta solo puede descargarse en zip hasta ' + '{limit}. Descargue una subcarpeta cada vez, o los archivos por separado.', 'group.rmdir': 'Eliminar la carpeta', 'group.rmdir_confirm': '¿Eliminar la carpeta «{name}»? Debe estar vacía.', 'group.rmdir_not_empty': 'Esa carpeta no está vacía. Elimine antes lo que contiene — ' + 'aquí nada borra archivos que usted no ve.', 'group.desc_edit': 'Editar la descripción', 'group.desc_add': 'Añadir una descripción', 'group.desc_save': 'Guardar', 'group.desc_cancel': 'Cancelar', 'group.desc_placeholder': 'Para qué sirve este grupo — los miembros lo ven en su ' + 'página de inicio.', 'group.join_code_title': 'Este node necesita reconocerle', 'group.join_code_hint': 'Pida el código de un solo uso a quien le invitó e ' + 'introdúzcalo aquí. Después, este navegador queda reconocido y no se le volverá a ' + 'preguntar.', 'group.join_code_btn': 'Unirse', 'group.pass_title': 'Introduzca su frase de contraseña', 'group.pass_hint': 'Este navegador aún no ha desbloqueado sus claves. Introduzca su frase de contraseña una vez para abrir sus grupos aquí.', 'group.pass_btn': 'Desbloquear', 'notif.purge': 'Borrar todo', 'notif.title': 'Notificaciones', 'notif.empty': 'Ninguna notificación', 'notif.mark_all_read': 'Marcar todo como leído', // Sidebar 'sidebar.search': 'Buscar archivos', // Status // Search 'search.placeholder': 'Buscar en todos los grupos...', 'search.no_results': 'Ningún archivo coincide con su búsqueda.', 'search.col_group': 'Grupo', 'search.result_count': { one: '{n} archivo encontrado', other: '{n} archivos encontrados', }, 'search.hint': 'Escriba un término para buscar en todos sus grupos.', 'search.indexing': 'Indexando {done} / {total} grupos…', 'search.unreachable': { one: '{n} grupo inalcanzable', other: '{n} grupos inalcanzables' }, 'search.n_sources': { one: '{n} fuente', other: '{n} fuentes' }, 'search.view_files': 'Archivos', 'search.view_videos': 'Vídeos', 'search.view_music': 'Música', 'search.view_photos': 'Fotos', 'search.connecting': 'Conectando a los grupos…', // Presence, chat paging, leaving a group, the profile page 'presence.online': 'Un node que sirve este grupo está en línea', 'presence.offline': 'Ningún node accesible para este grupo', 'presence.unknown': 'Aún sin comprobar', 'presence.indexing': 'Indexando — {pct}%', 'indexdock.kind_scan': "Indexando", 'indexdock.kind_rescan': "Releyendo", 'indexdock.kind_reconcile': "Poniéndose al día", 'indexdock.kind_watch': "Indexando archivos nuevos", 'indexdock.waiting': "En espera de indexar", 'indexdock.done': "Indexación terminada", 'indexdock.listing': "Listando archivos…", 'indexdock.percent': "{pct}%", 'indexdock.files': "{done} / {total} archivos", 'indexdock.next': "Después: {roots}", 'indexdock.next_count': "En espera: {count}", 'indexdock.open': "Abrir los ajustes de este grupo", 'indexdock.hide': "Ocultar hasta la próxima indexación", 'chat.load_older': 'Cargar {n} mensajes anteriores', 'chat.start_of_history': 'Inicio de la conversación', 'chat.today': 'Hoy', 'chat.yesterday': 'Ayer', 'chat.unread': 'Mensajes nuevos', 'chat.jump_latest': 'Ir a lo más reciente', 'chat.jump_new': 'Mensajes nuevos', 'chat.unreadable': 'No se pudo leer este mensaje', 'chat.unreadable_signature': 'Mensaje no verificado: la firma no coincide con el remitente', 'chat.unreadable_epoch': 'Escrito antes de que este dispositivo pudiera leer esta conversación', 'chat.unreadable_keys': 'Claves de chat no disponibles: vuelve a conectarte para leerlo', 'chat.unreadable_decrypt': 'No se pudo descifrar este mensaje', 'chat.unreadable_envelope': 'Este mensaje llegó incompleto', 'chat.unreadable_format': 'Este mensaje necesita una versión más reciente de MeshBay', 'chat.key_changed': 'Esta cuenta usa una clave que no has visto antes', 'chat.key_changed_hint': 'El nodo dice que este mensaje viene de esta cuenta, pero su clave de dispositivo no es una que hayas aceptado y nada la firmó. Puede ser un dispositivo nuevo añadido en otro sitio — o el nodo nombrando a la persona equivocada.', 'chat.encrypted_needs_newer': 'Esta conversación está cifrada y este cliente no puede leerla: actualiza MeshBay', 'chat.encrypted_cannot_send': 'Esta conversación está cifrada y este dispositivo aún no puede escribir en ella', 'group.leave': 'Salir del grupo', 'group.leave_confirm': '¿Salir de «{name}»? Perderá el acceso a sus archivos y a su chat. Los archivos que subió permanecen en el node, y este conserva la identidad que fijó para usted hasta que su operador la retire.', 'group.mute': 'Mute notifications', 'group.unmute': 'Unmute notifications', 'profile.title': 'Perfil', 'usermenu.profile': 'Perfil', // First-run setup wizard 'setup.welcome_title': 'Bienvenido a MeshBay', 'setup.welcome_message': 'Su node aloja sus archivos — cifrados, en su máquina. Vamos a ponerlo en marcha y crear su primer grupo.', 'setup.node_detected': 'Node local detectado y en funcionamiento.', 'setup.node_not_running': 'Su node está instalado pero no se está ejecutando.', 'setup.node_start': 'Iniciar node', 'setup.node_starting': 'Iniciando node…', 'setup.node_started': 'Node iniciado.', 'setup.node_not_installed': 'meshbay-node no está instalado en esta máquina.', 'setup.node_install_hint': 'Instálelo con su gestor de paquetes y vuelva aquí.', 'setup.node_startup_hint': 'Una vez que su node esté en funcionamiento, visite «Node» en la barra lateral en cualquier momento para que se inicie automáticamente al iniciar sesión, o se ejecute como un servicio en segundo plano.', 'setup.skip': 'Omitir — crear un grupo sin node local', 'setup.create_group': 'Crear su primer grupo', 'setup.dismiss': 'Omitir configuración', // Group 'group.retry': 'Reintentar', // Sidebar 'sidebar.node': 'Node', // Node admin 'node.title': 'Node', 'node.service_checking': 'Comprobando el servicio del nodo…', 'node.service_not_installed': 'No instalado como servicio', 'node.service_state_active': 'En ejecución', 'node.service_state_inactive': 'Detenido', 'node.service_state_failed': 'Fallido', 'node.service_state_activating': 'Iniciando…', 'node.service_state_deactivating': 'Deteniendo…', 'node.service_state_unknown': 'Desconocido', 'node.service_start': 'Iniciar', 'node.service_starting': 'Iniciando…', 'node.service_stop': 'Detener', 'node.service_stopping': 'Deteniendo…', 'node.service_restart': 'Reiniciar', 'node.service_restarting': 'Reiniciando…', 'node.service_mode_hint': 'Se ejecuta como servicio en segundo plano — se inicia al arrancar, antes de iniciar sesión.', 'node.startup_mode_label': 'Iniciar automáticamente:', 'node.startup_mode_off': 'Desactivado (iniciar manualmente)', 'node.startup_mode_signin': 'Al iniciar sesión', 'node.startup_mode_service': 'Como servicio en segundo plano (se inicia al arrancar)', 'node.startup_mode_updating': 'Cambiando de modo — compruebe si aparece un aviso de administrador…', 'node.startup_mode_service_unavailable_hint': 'El modo de servicio en segundo plano requiere una versión instalada. Para pruebas locales, ejecute "meshbay-node service install" desde una PowerShell con privilegios de administrador.', 'node.not_operator': 'No se pudo contactar con su node. Asegúrese de que esté en ejecución.', 'node.offline': 'Node sin conexión', 'node.retry': 'Reintentar', 'node.pair_needed': 'Ningún operador emparejado. Introduzca un código de emparejamiento para habilitar las operaciones de administración (invitaciones, eliminación de archivos).', 'node.pair_code_placeholder': 'Código de emparejamiento', 'node.pair_button': 'Emparejar este navegador', 'node.pair_success': 'Emparejamiento exitoso.', 'node.reload': 'Recargar configuración', 'node.reloaded': 'Configuración recargada. Los cambios de directorios en los grupos existentes ya están activos.', 'node.restart_needed': 'Después de añadir: inicialice la clave de grupo (meshbay-node gek-init --group ).', 'node.no_groups': 'No hay grupos configurados en este node.', 'node.stale': 'no está en el hub', 'node.settings': 'Node settings', 'node.settings_edit_hint': 'Changes are applied immediately and saved to node.toml.', 'node.settings_save': 'Save', 'node.settings_saving': 'Saving…', 'node.settings_saved': 'Settings saved.', 'node.setting_invite_ttl': 'Invitation TTL', 'node.setting_pair_ttl': 'Pairing code TTL', 'node.setting_device_ttl': 'Device request TTL', 'node.setting_max_streams': 'Max concurrent streams', 'node.setting_max_downloads': 'Descargas simultáneas máximas', 'node.setting_max_uploads': 'Subidas simultáneas máximas', 'node.setting_transcode': 'Transcode incompatible video', 'node.setting_max_upload': 'Subida individual máxima', 'node.setting_unit_gb': 'GB', 'node.setting_unit_hours': 'hours', 'node.setting_unit_minutes': 'min', 'node.setting_on': 'On', 'node.setting_off': 'Off', 'node.unavailable': 'no disponible', 'node.files': { one: '1 archivo', other: '{n} archivos' }, 'node.peers': { one: '1 par', other: '{n} pares' }, 'node.roots': 'Directorios', 'node.add_root': 'Añadir directorio', 'node.remove_root': 'Eliminar', 'node.root_no_signing_key': 'No hay clave de firma disponible: empareja primero este dispositivo con el nodo', 'node.root_no_route': 'No hay ruta al nodo: conéctate a él o usa la aplicación en la máquina que lo aloja', 'node.root_remove_last': 'Un grupo necesita al menos un directorio', 'node.root_path_hint': 'La ruta tal como la ve el nodo, en la máquina que aloja este grupo.', 'node.root_path_placeholder': '/home/user/Media', 'node.root_path': 'Ruta', 'node.directory': 'Directorio', 'node.root_added': 'Directorio añadido.', 'node.root_remove_confirm': '¿Eliminar «{name}» de este grupo?', 'node.root_removed': 'Directorio eliminado. Se recomienda reiniciar para actualizar el índice.', 'node.attach_group': 'Añadir grupo', 'node.attach_pick': 'Grupo a alojar', 'node.attach_dir': 'Directorio compartido', 'node.attach_upload_dir': 'Directorio de subida', 'node.attach_upload_label': 'Directorio de subida (para archivos y adjuntos del chat)', 'node.attached': 'Grupo añadido y cargado. Ejecute meshbay-node gek-init --group {name} si aún no lo ha hecho.', 'node.detach_group': 'Retirar grupo', 'node.detach_confirm': '¿Retirar «{name}» de este node?', 'node.detached': 'Grupo retirado.', 'node.gek': 'Clave de grupo', 'node.no_gek': 'Sin clave de grupo', 'node.gek_init_hint': 'Aún no hay clave de grupo. Ejecute GEK init desde la línea de comandos para configurarla.', 'node.gek_public_hint': 'La rotación de clave no está disponible para los grupos públicos.', 'node.gek_rotate': 'Rotar clave de grupo', 'node.gek_rotate_confirm': '¿Rotar la clave de grupo? Los miembros conectados recibirán la nueva clave automáticamente. El contenido ya descargado no se ve afectado.', 'node.gek_rotated': 'Clave de grupo rotada.', 'node.roster': 'Registro', 'node.roster_load': 'Cargar registro', 'node.roster_empty': 'Aún no hay miembros fijados.', 'node.roster_user': 'Usuario', 'node.roster_role': 'Rol', 'node.roster_status': 'Estado', 'node.roster_via': 'Fijado mediante', 'node.roster_invites': { one: '1 invitación pendiente', other: '{n} invitaciones pendientes' }, 'node.unpin': 'Desvincular', 'node.unpin_confirm': '¿Desvincular a «{name}»? Deberá emparejarse de nuevo.', 'node.unpin_done': 'Identidad desvinculada.', 'node.denylist': 'Lista de bloqueo', 'node.denylist_load': 'Cargar lista de bloqueo', 'node.denylist_empty': 'La lista de bloqueo está vacía.', 'node.denylist_count': { one: '1 entrada', other: '{n} entradas' }, 'node.denylist_remove': 'Eliminar', 'node.denylist_clear_all': 'Eliminar todas', 'node.denylist_clear_confirm': '¿Eliminar «{subject}» de la lista de bloqueo?', 'node.denylist_cleared': 'Entrada de la lista de bloqueo eliminada.', // Node settings 'settings_node.detach_failed_continue': 'No se pudo desconectar el grupo del node. ¿Eliminar del hub de todos modos?', 'settings_node.roots': 'Directorios compartidos', 'settings_node.scan_title': 'Escaneo', 'settings_node.scan_hint': 'Con qué frecuencia el node vuelve a comprobar sus directorios en busca de cambios que pudo haber pasado por alto, y cuánto tiempo espera tras un cambio antes de indexar un archivo.', 'settings_node.search_listed_title': 'Búsqueda', 'settings_node.search_listed_label': 'Mostrar este grupo en la búsqueda', 'settings_node.search_listed_hint': 'Si está desactivado, los archivos de este grupo no aparecen en la búsqueda global de los miembros. Los miembros siguen viéndolo todo al abrir el grupo: solo lo saca del listado global y no oculta nada a nadie.', 'settings_node.scan_reconcile_label': 'Intervalo de comprobación (minutos)', 'settings_node.scan_debounce_label': 'Espera tras un cambio (segundos)', 'settings_node.scan_save': 'Guardar', 'settings_node.scan_saving': 'Guardando…', 'settings_node.scan_saved': 'Guardado.', 'settings_node.tmdb_title': 'Metadatos de TMDB', 'settings_node.tmdb_hint': 'Permite que la aplicación de Vídeos muestre pósteres, sinopsis y reparto desde TMDB. Desactivado significa solo miniaturas, sin ninguna solicitud a un tercero.', 'settings_node.tmdb_enabled': 'Activado', 'settings_node.tmdb_disabled': 'Desactivado', 'settings_node.tmdb_token_label': 'Token de API personalizado (opcional)', 'settings_node.tmdb_token_placeholder': 'Déjelo en blanco para usar el token predeterminado', 'settings_node.tmdb_token_customized': 'Hay un token personalizado configurado.', 'settings_node.tmdb_token_default': 'Usando el token predeterminado.', 'settings_node.tmdb_save': 'Guardar', 'settings_node.tmdb_language_label': 'Idioma', 'settings_node.tmdb_language_hint': 'Se aplica a todos — una caché compartida, no una solicitud por espectador.', 'settings_node.video_root_title': 'Carpeta raíz de Vídeos', 'settings_node.video_root_hint': 'Qué carpeta (o subcarpeta) trata la app Vídeos como su punto de entrada para este grupo. No se muestra nada en Vídeos, ni se realizan búsquedas en TMDB, hasta que se elija una.', 'settings_node.video_root_none': '— ninguna elegida —', 'settings_node.musicbrainz_title': 'Metadatos de MusicBrainz', 'settings_node.musicbrainz_hint': 'Permite que la app de Música muestre carátulas y nombres canónicos de MusicBrainz cuando una pista no tiene una carátula incrustada utilizable. Desactivado significa navegación solo por etiquetas/nombre de archivo, sin solicitudes a terceros.', 'settings_node.musicbrainz_enabled': 'Activado', 'settings_node.musicbrainz_disabled': 'Desactivado', 'settings_node.video_root_save': 'Guardar', 'settings_node.video_root_change_confirm': 'Cambiar la raíz de Vídeos reemplaza lo que ve cada miembro en la pestaña Vídeos. ¿Continuar?', 'settings_node.audio_root_title': 'Carpeta raíz de Música', 'settings_node.audio_root_hint': 'Qué carpeta (o subcarpeta) trata la app Música como su punto de entrada para este grupo. No se muestra nada en Música, ni se leen etiquetas o carátulas, hasta que se elija una.', 'settings_node.audio_root_none': '— ninguna elegida —', 'settings_node.audio_root_save': 'Guardar', 'settings_node.audio_root_change_confirm': 'Cambiar la raíz de Música reemplaza lo que ve cada miembro en la pestaña Música. ¿Continuar?', 'settings_node.photo_roots_title': 'Carpetas raíz de Fotos', 'settings_node.photo_roots_hint': 'Qué carpeta(s) trata la app Fotos como puntos de entrada para este grupo — una fototeca suele estar repartida en varias carpetas, así que se pueden elegir varias. No se muestra nada en Fotos hasta que se añada al menos una.', 'settings_node.photo_roots_none': '— ninguna elegida —', 'settings_node.photo_roots_add_placeholder': 'Añadir una carpeta…', 'settings_node.photo_roots_add': 'Añadir', 'settings_node.photo_roots_remove': 'Quitar', 'settings_node.photo_roots_save': 'Guardar', 'settings_node.shared_directories_title': 'Directorios compartidos', 'settings_node.shared_directories_hint': 'Carpetas compartidas con este grupo. Active lectura-escritura para permitir subidas, marque como extraíble para unidades externas.', 'folder_tree.title_single': 'Elegir una carpeta', 'folder_tree.title_multi': 'Elegir carpetas', 'folder_tree.choose': 'Elegir…', 'folder_tree.remove': 'Quitar', 'folder_tree.add': 'Añadir una carpeta…', 'folder_tree.confirm': 'Usar', 'folder_tree.expand': 'Expandir', 'folder_tree.collapse': 'Contraer', 'folder_tree.nothing_selected': 'Nada seleccionado', 'folder_tree.empty': 'Este grupo aún no tiene directorios compartidos.', 'folder_tree.writable_only': 'Aquí solo se pueden elegir directorios de lectura-escritura: se escriben archivos en él.', 'folder_tree.no_writable_root': 'Este grupo no tiene ningún directorio de escritura. Activa primero lectura-escritura en Directorios compartidos.', 'folder_tree.read_only_blocked': 'Solo lectura: no se puede escribir', 'settings_app.save': 'Guardar', 'settings_app.saving': 'Guardando…', 'settings_app.disabled_hint': 'Activa esta aplicación para configurarla.', 'settings_app.video_directories_label': 'Carpetas de vídeo', 'settings_app.video_directories_hint': 'Dónde están las películas y series de este grupo. Nada fuera de ellas aparece en la pestaña Vídeos.', 'settings_app.music_directories_label': 'Carpetas de música', 'settings_app.music_directories_hint': 'Dónde están los álbumes de este grupo. Nada fuera de ellos aparece en la pestaña Música.', 'settings_app.photo_directories_label': 'Carpetas de fotos', 'settings_app.photo_directories_hint': 'Dónde están los álbumes de este grupo. Nada fuera de ellos aparece en la pestaña Fotos.', 'settings_app.chat_directory_label': 'Carpeta de adjuntos', 'settings_app.chat_directory_hint': 'Dónde se escriben los archivos enviados en el chat. Debe ser un directorio de lectura-escritura.', 'settings_app.chat_no_writable_root': 'Este grupo no tiene directorio de escritura, así que los adjuntos están desactivados.', 'settings_app.chat_link_preview_label': 'Vistas previas de enlaces', 'settings_app.chat_link_preview_hint': 'Cuando un miembro publica un enlace, el nodo obtiene el título y la imagen de la página. Es una petición desde tu máquina a un sitio que eligió otra persona.', 'settings_app.chat_encrypted_always': 'El chat de este grupo siempre está cifrado. No se puede desactivar.', 'settings_app.chat_rotate_epoch': 'Renovar la clave del chat', 'settings_app.chat_rotate_epoch_hint': 'Los miembros siguen leyendo todo el historial. Quien haya sido expulsado del grupo no podrá leer lo que se escriba a partir de ahora. Quitar a un miembro o un dispositivo ya lo hace por sí solo.', 'settings_app.tmdb_token_prompt': 'Regístrate en TMDB para generar tu propia clave de API.', 'settings_app.tmdb_token_link': 'Obtener una clave', 'settings_node.roots_offline_hint': 'Sin conexión con el nodo: los cambios pasan por el nodo local y se aplican en su próxima recarga.', 'settings_node.directories_title': 'Directorios de apps', 'settings_node.directories_hint': 'Carpetas compartidas, y cuál de ellas usan las apps de Vídeos, Música y Fotos como su(s) propio(s) punto(s) de entrada.', // Create group wizard 'wizard.title': 'Crear grupo', 'wizard.detecting': 'Detectando node local…', 'wizard.node_not_found': 'No se detectó un node local. Asegúrese de que meshbay-node esté en ejecución.', 'wizard.node_offline_warning': 'El node no está en ejecución. El grupo se creará solo en el hub. Podrá conectar el node más tarde desde la página Node.', 'wizard.retry': 'Reintentar', 'wizard.wrong_account': 'El node está en ejecución, pero el nombre de usuario configurado no coincide con su cuenta. Compruebe hub.username en node.toml.', 'wizard.skip_node': 'Continuar sin node', 'wizard.directories': 'Directorios compartidos', 'wizard.directories_hint': 'Elija los directorios que este grupo compartirá. Se requiere al menos uno.', 'wizard.add_directory': 'Añadir directorio', 'wizard.remove': 'Eliminar', 'wizard.set_upload': 'Establecer como destino de subida', 'wizard.upload_target': 'destino de subida', 'wizard.create_and_setup': 'Crear y configurar', 'wizard.create_hub_only': 'Crear solo en el hub', 'wizard.setting_up': 'Configurando su grupo…', 'wizard.step_create_hub': 'Creando grupo en el hub', 'wizard.step_attach': 'Conectando al node', 'wizard.step_apps': 'Eligiendo aplicaciones', 'wizard.step_add_roots': 'Añadiendo directorios', 'wizard.step_gek': 'Inicializando clave de cifrado', 'wizard.step_pair': 'Configurando emparejamiento', 'wizard.step_index': 'Indexando archivos', 'wizard.indexing_progress': 'Indexando… {pct}%', 'wizard.indexing_current_dir': 'Analizando: {dir}', 'wizard.done_title': 'Grupo creado', 'wizard.done_message': 'Su grupo está listo: su node lo aloja y el cifrado está configurado. Ahora invite a miembros desde la pestaña Ajustes.', 'wizard.go_to_group': 'Ir al grupo', 'wizard.finish_later': 'Finalizar configuración más tarde', 'node.stun_servers': 'STUN Servers', 'node.stun_hint': 'Servers used for WebRTC NAT traversal (ICE candidate gathering).', 'node.stun_add': 'Add', 'node.stun_add_placeholder': 'stun:host:port', 'node.stun_remove': 'Remove', 'node.stun_move_up': 'Move up', 'node.stun_move_down': 'Move down', 'node.stun_save': 'Save', 'node.stun_saving': 'Saving…', 'node.stun_saved': 'STUN servers saved.', 'node.stun_reset': 'Reset to defaults', 'node.stun_empty': 'No STUN servers configured. NAT traversal will not work.', 'node.stun_duplicate': 'This server is already in the list.', 'node.stun_invalid': 'STUN URL must start with stun:', 'node.ice_interfaces': 'ICE Interfaces', 'node.ice_auto_hint': 'Auto mode — virtual and VPN interfaces (Tailscale, Docker, libvirt, etc.) are excluded automatically.', 'node.ice_manual_hint': 'Manual mode — only the listed interfaces are used for ICE candidate gathering.', 'node.ice_add': 'Add', 'node.ice_add_placeholder': 'e.g. eth0, wlp0s20f3', 'node.ice_remove': 'Remove', 'node.ice_save': 'Save', 'node.ice_saving': 'Saving…', 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', 'node.overview': 'Overview', 'node.overview_version': 'Version', 'node.overview_node_id': 'Node ID', 'node.overview_node_key': 'Clave del node', 'node.overview_node_key_copy': 'Copiar', 'node.overview_node_key_copied': 'Copiada', 'node.overview_quic_port': 'QUIC port', 'node.overview_hub': 'Hub', 'node.node_roster': 'Node roster', 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', 'node.roster_scope': 'Scope', 'node.roster_scope_node': 'node-wide', 'node.peers_title': 'Connected peers', 'node.peers_empty': 'No peers connected.', 'node.peers_user': 'User', 'node.peers_ip': 'IP', 'node.peers_group': 'Group', 'node.peers_state': 'State', 'node.audit_title': 'Audit log', 'node.audit_all_events': 'All events', 'node.audit_empty': 'No audit entries.', 'node.audit_time': 'Time', 'node.audit_event': 'Event', 'node.audit_user': 'User', 'node.audit_ip': 'IP', 'node.audit_group': 'Group', 'node.audit_detail': 'Detail', 'node.maintenance': 'Maintenance', 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', 'node.maintenance_prune': 'Prune stale entries', 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', 'node.loading': 'Loading…', 'node.audit_export': 'Export CSV', 'node.audit_exporting': 'Exporting…', 'node.audit_prev': 'Previous', 'node.audit_next': 'Next', 'node.audit_page': 'Page {n}', 'node.audit_exported': 'Exported {n} entries.', 'node.unlink_title': 'Unlink from hub', 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', 'node.unlink_button': 'Unlink this node', 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', 'node.tab_overview': 'Overview', 'node.tab_groups': 'Groups', 'node.tab_roster': 'Roster', 'node.tab_peers': 'Peers', 'node.tab_audit': 'Audit', 'node.tab_settings': 'Settings', 'node.root_rw': 'lectura-escritura', 'node.root_ro': 'solo lectura', 'node.removable': 'extraíble', // In-page confirm/alert (ask.js) 'dialog.ok': 'Aceptar', 'dialog.cancel': 'Cancelar', };