summaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
blob: 0799ec54e94c4a7b8ed5801baa76c40d66581861 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
/**
 * 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.',
};