/** * 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', // Sidebar 'sidebar.my_groups': 'Mis grupos', 'sidebar.no_groups': 'Aún no hay grupos', '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', // 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.success_title': 'Cuenta creada', 'register.success_msg': 'Ya puede iniciar sesión con sus credenciales.', 'register.go_login': 'Ir al inicio de sesión', 'register.err_mismatch': 'Las contraseñas no coinciden', '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.', // 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.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', // Group page 'group.default_name': 'Grupo', 'group.tab_files': 'Archivos', 'group.tab_chat': 'Chat', 'group.tab_members': 'Miembros', 'group.filter': 'Filtrar archivos...', '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.mkdir': 'Nueva carpeta', 'group.mkdir_prompt': 'Nombre de la nueva carpeta:', '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.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', // Video player 'video.loading': 'Cargando {name}...', 'video.buffering': 'Almacenando en búfer...', '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í.', 'group.upload_indexing': 'indexando…', 'video.err_transport': 'Transporte no conectado', 'video.err_mse': 'Códec no compatible con la reproducción en continuo: {codec}', // 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', 'settings.dl_choose': 'Elegir carpeta', 'settings.dl_change': 'Cambiar', 'settings.dl_forget': 'Olvidar', 'settings.dl_path_note': 'A una página web no se le puede indicar una ruta, así que ' + 'aquí no hay nada que escribir: su navegador concede acceso a la carpeta que ' + 'usted señale, y MeshBay solo escribe dentro de ella. Es posible que se le pida ' + 'confirmación una vez por sesión.', 'settings.dl_unsupported': 'Este navegador no puede escribir en una carpeta de su ' + 'elección (no tiene File System Access API), de modo que las descargas van a su ' + 'propia carpeta de descargas. Chrome y Edge sí permiten elegir una.', 'settings.profile': 'Perfil', 'settings.username': 'Nombre de usuario', '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.danger': 'Eliminar la cuenta', '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', '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. Encontrará esa clave en el panel ' + 'de administración de su node.', '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 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_details': 'Detalles', 'admin.btn_delete': 'Eliminar', 'admin.delete_confirm': '¿Eliminar la cuenta «{user}»? 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.visibility': 'Visibilidad', 'create_group.private': 'Privado', 'create_group.private_desc': 'Solo los miembros invitados ven los archivos y acceden a ellos', 'create_group.public': 'Público', 'create_group.public_desc': 'Cualquiera puede descubrir y explorar este grupo', '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', 'create_group.open': 'Abierto (cualquiera puede unirse)', 'create_group.open_desc': 'Cualquiera puede 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} — envíeselo por el ' + 'medio que usen habitualmente. Funciona una sola vez y nunca pasa por el hub.', 'members.invite_code_hint': 'Lo introduce la primera vez que abre este grupo. No ' + 'necesita que usted esté en línea en ese momento.', 'transfers.title': 'Transferencias', 'transfers.clear': 'Borrar las terminadas', 'transfers.cancel': 'Cancelar', 'transfers.open': 'Abrir', 'transfers.done': 'Terminada', 'transfers.cancelled': 'Cancelada', '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.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.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', '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.title': 'Buscar archivos', 'search.placeholder': 'Buscar en todos los grupos...', 'search.no_results': 'Ningún archivo coincide con su búsqueda.', 'search.synced': 'sincronizado {ago}', 'search.cache_note': 'La búsqueda usa el estado que tenía cada grupo la última vez ' + 'que lo abrió. Abra un grupo para poner sus archivos al día aquí.', 'search.col_group': 'Grupo', 'search.result_count': { one: '{n} archivo encontrado', other: '{n} archivos encontrados', }, 'search.hint': 'Busca nombres de archivo en todos los índices de grupo en caché.', // 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', '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', '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.', 'profile.title': 'Perfil', 'usermenu.profile': 'Perfil', 'create_group.public_is_open': 'Cualquiera puede encontrar un grupo público y unirse a él. Para elegir quién entra, créelo privado.', };