From 4335a515c67477a6ac33356361b4f43a5df5e642 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Fri, 21 Aug 2026 18:20:13 +0200 Subject: fix: add 82 missing i18n keys to all 9 non-English locales node.*, wizard.*, sidebar.node, settings_node.*, and group.retry were present in en.js but missing from fr/es/de/it/nl/pl/pt-BR/zh-CN/ja. All 10 locales now have identical key sets (test_key_sets_match_english passes). Co-Authored-By: Claude Opus 4.6 --- .../src/meshbay_hub/static/locales/de.js | 92 +++++++++++++++++ .../src/meshbay_hub/static/locales/es.js | 92 +++++++++++++++++ .../src/meshbay_hub/static/locales/fr.js | 104 +++++++++++++++++++ .../src/meshbay_hub/static/locales/it.js | 104 +++++++++++++++++++ .../src/meshbay_hub/static/locales/ja.js | 100 ++++++++++++++++++ .../src/meshbay_hub/static/locales/nl.js | 104 +++++++++++++++++++ .../src/meshbay_hub/static/locales/pl.js | 112 +++++++++++++++++++++ .../src/meshbay_hub/static/locales/pt-BR.js | 92 +++++++++++++++++ .../src/meshbay_hub/static/locales/zh-CN.js | 101 +++++++++++++++++++ 9 files changed, 901 insertions(+) diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js index da2ada4..4df7781 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js @@ -481,4 +481,96 @@ export default { 'setup.skip': 'Überspringen — Gruppe ohne lokalen Node erstellen', 'setup.create_group': 'Erste Gruppe erstellen', 'setup.dismiss': 'Einrichtung überspringen', + + // Group misc + 'group.retry': 'Erneut versuchen', + + // Sidebar + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': 'Ihr Node konnte nicht erreicht werden. Stellen Sie sicher, dass er läuft.', + 'node.offline': 'Node ist offline', + 'node.retry': 'Erneut versuchen', + 'node.reload': 'Konfiguration neu laden', + 'node.reloaded': 'Konfiguration neu geladen. Verzeichnisänderungen an bestehenden Gruppen sind jetzt aktiv.', + 'node.restart_needed': 'Nach dem Hinzufügen: Gruppenschlüssel initialisieren (meshbay-node gek-init --group ).', + 'node.no_groups': 'Keine Gruppen auf diesem Node konfiguriert.', + 'node.stale': 'nicht auf dem Hub', + 'node.unavailable': 'nicht verfügbar', + 'node.files': { one: '1 Datei', other: '{n} Dateien' }, + 'node.peers': { one: '1 Peer', other: '{n} Peers' }, + 'node.roots': 'Verzeichnisse', + 'node.add_root': 'Verzeichnis hinzufügen', + 'node.remove_root': 'Entfernen', + 'node.root_added': 'Verzeichnis hinzugefügt.', + 'node.root_remove_confirm': '„{name}" aus dieser Gruppe entfernen?', + 'node.root_removed': 'Verzeichnis entfernt. Neustart empfohlen, um den Index zu aktualisieren.', + 'node.upload_root': 'Uploads', + 'node.attach_group': 'Gruppe hinzufügen', + 'node.attach_pick': 'Zu hostende Gruppe', + 'node.attach_dir': 'Freigegebenes Verzeichnis', + 'node.attach_upload_dir': 'Upload-Verzeichnis', + 'node.attach_upload_label': 'Upload-Verzeichnis (für Datei-Uploads und Chat-Anhänge)', + 'node.attached': 'Gruppe hinzugefügt und geladen. Führen Sie meshbay-node gek-init --group {name} aus, falls noch nicht geschehen.', + 'node.detach_group': 'Gruppe entfernen', + 'node.detach_confirm': '„{name}" von diesem Node entfernen?', + 'node.detached': 'Gruppe entfernt.', + 'node.gek': 'Gruppenschlüssel', + 'node.no_gek': 'Kein Gruppenschlüssel', + 'node.gek_init_hint': 'Noch kein Gruppenschlüssel. Führen Sie GEK init über die CLI aus, um einen einzurichten.', + 'node.gek_public_hint': 'Schlüsselrotation ist für öffentliche Gruppen nicht verfügbar.', + 'node.gek_rotate': 'Gruppenschlüssel rotieren', + 'node.gek_rotate_confirm': 'Gruppenschlüssel rotieren? Verbundene Mitglieder erhalten den neuen Schlüssel automatisch. Bereits heruntergeladene Inhalte sind nicht betroffen.', + 'node.gek_rotated': 'Gruppenschlüssel rotiert.', + 'node.roster': 'Mitgliederliste', + 'node.roster_load': 'Mitgliederliste laden', + 'node.roster_empty': 'Noch keine Mitglieder gemerkt.', + 'node.roster_user': 'Benutzer', + 'node.roster_role': 'Rolle', + 'node.roster_status': 'Status', + 'node.roster_via': 'Gemerkt über', + 'node.roster_invites': { one: '1 ausstehende Einladung', other: '{n} ausstehende Einladungen' }, + 'node.unpin': 'Loslösen', + 'node.unpin_confirm': '„{name}" loslösen? Die Person muss sich erneut koppeln.', + 'node.unpin_done': 'Identität gelöst.', + 'node.denylist': 'Sperrliste', + 'node.denylist_load': 'Sperrliste laden', + 'node.denylist_empty': 'Die Sperrliste ist leer.', + 'node.denylist_count': { one: '1 Eintrag', other: '{n} Einträge' }, + 'node.denylist_remove': 'Entfernen', + 'node.denylist_clear_all': 'Alle entfernen', + 'node.denylist_clear_confirm': '„{subject}" von der Sperrliste entfernen?', + 'node.denylist_cleared': 'Sperrlisten-Eintrag entfernt.', + + // Settings (node) + 'settings_node.detach_failed_continue': 'Die Gruppe konnte nicht vom Node getrennt werden. Trotzdem auf dem Hub löschen?', + 'settings_node.roots': 'Freigegebene Verzeichnisse', + + // Create-group wizard + 'wizard.title': 'Gruppe erstellen', + 'wizard.detecting': 'Lokaler Node wird erkannt…', + 'wizard.node_not_found': 'Kein lokaler Node erkannt. Stellen Sie sicher, dass meshbay-node läuft.', + 'wizard.node_offline_warning': 'Node läuft nicht. Die Gruppe wird nur auf dem Hub erstellt. Sie können den Node später über die Node-Seite verbinden.', + 'wizard.retry': 'Erneut versuchen', + 'wizard.skip_node': 'Ohne Node fortfahren', + 'wizard.directories': 'Freigegebene Verzeichnisse', + 'wizard.directories_hint': 'Wählen Sie die Verzeichnisse, die diese Gruppe teilen soll. Mindestens eines ist erforderlich.', + 'wizard.add_directory': 'Verzeichnis hinzufügen', + 'wizard.remove': 'Entfernen', + 'wizard.set_upload': 'Als Upload-Ziel festlegen', + 'wizard.upload_target': 'Upload-Ziel', + 'wizard.create_and_setup': 'Erstellen und einrichten', + 'wizard.create_hub_only': 'Nur auf dem Hub erstellen', + 'wizard.setting_up': 'Ihre Gruppe wird eingerichtet…', + 'wizard.step_create_hub': 'Gruppe auf dem Hub erstellen', + 'wizard.step_attach': 'An Node anbinden', + 'wizard.step_add_roots': 'Verzeichnisse hinzufügen', + 'wizard.step_gek': 'Verschlüsselungsschlüssel initialisieren', + 'wizard.step_pair': 'Kopplung einrichten', + 'wizard.done_title': 'Gruppe erstellt', + 'wizard.done_message': 'Ihre Gruppe ist bereit. Ihr Node hostet sie und die Verschlüsselung ist eingerichtet.', + 'wizard.go_to_group': 'Zur Gruppe', + 'wizard.finish_later': 'Einrichtung später abschließen', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js index 90e310d..093b1e7 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js @@ -476,4 +476,96 @@ export default { '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.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.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.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_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.upload_root': 'subidas', + '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', + + // 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.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_add_roots': 'Añadiendo directorios', + 'wizard.step_gek': 'Inicializando clave de cifrado', + 'wizard.step_pair': 'Configurando emparejamiento', + 'wizard.done_title': 'Grupo creado', + 'wizard.done_message': 'Su grupo está listo. Su node lo aloja y el cifrado está configurado.', + 'wizard.go_to_group': 'Ir al grupo', + 'wizard.finish_later': 'Finalizar configuración más tarde', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js index fa7468f..43036dd 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js @@ -480,4 +480,108 @@ export default { 'setup.skip': 'Passer — créer un groupe sans node local', 'setup.create_group': 'Créer votre premier groupe', 'setup.dismiss': 'Passer la configuration', + + // Group + 'group.retry': 'Réessayer', + + // Sidebar + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': 'Impossible de joindre votre node. Vérifiez qu\'il est en cours d\'exécution.', + 'node.offline': 'Node hors ligne', + 'node.retry': 'Réessayer', + 'node.reload': 'Recharger la configuration', + 'node.reloaded': 'Configuration rechargée. Les modifications de répertoires sur les groupes existants sont maintenant actives.', + 'node.restart_needed': 'Après l\'ajout : initialisez la clé de groupe (meshbay-node gek-init --group ).', + 'node.no_groups': 'Aucun groupe configuré sur ce node.', + 'node.stale': 'absent du hub', + 'node.unavailable': 'indisponible', + 'node.files': { + one: '1 fichier', + other: '{n} fichiers', + }, + 'node.peers': { + one: '1 pair', + other: '{n} pairs', + }, + 'node.roots': 'Répertoires', + 'node.add_root': 'Ajouter un répertoire', + 'node.remove_root': 'Retirer', + 'node.root_added': 'Répertoire ajouté.', + 'node.root_remove_confirm': 'Retirer « {name} » de ce groupe ?', + 'node.root_removed': 'Répertoire retiré. Un redémarrage est recommandé pour mettre à jour l\'index.', + 'node.upload_root': 'uploads', + 'node.attach_group': 'Ajouter un groupe', + 'node.attach_pick': 'Groupe à héberger', + 'node.attach_dir': 'Répertoire partagé', + 'node.attach_upload_dir': 'Répertoire d\'upload', + 'node.attach_upload_label': 'Répertoire d\'upload (pour les fichiers envoyés et les pièces jointes du chat)', + 'node.attached': 'Groupe ajouté et chargé. Lancez meshbay-node gek-init --group {name} si ce n\'est pas encore fait.', + 'node.detach_group': 'Retirer le groupe', + 'node.detach_confirm': 'Retirer « {name} » de ce node ?', + 'node.detached': 'Groupe retiré.', + 'node.gek': 'Clé de groupe', + 'node.no_gek': 'Pas de clé de groupe', + 'node.gek_init_hint': 'Aucune clé de groupe pour l\'instant. Lancez GEK init depuis la ligne de commande pour en créer une.', + 'node.gek_public_hint': 'La rotation de clé n\'est pas disponible pour les groupes publics.', + 'node.gek_rotate': 'Rotation de la clé de groupe', + 'node.gek_rotate_confirm': 'Effectuer la rotation de la clé de groupe ? Les membres connectés recevront la nouvelle clé automatiquement. Le contenu déjà téléchargé n\'est pas affecté.', + 'node.gek_rotated': 'Clé de groupe renouvelée.', + 'node.roster': 'Registre', + 'node.roster_load': 'Charger le registre', + 'node.roster_empty': 'Aucun membre enregistré pour l\'instant.', + 'node.roster_user': 'Utilisateur', + 'node.roster_role': 'Rôle', + 'node.roster_status': 'Statut', + 'node.roster_via': 'Enregistré via', + 'node.roster_invites': { + one: '1 invitation en attente', + other: '{n} invitations en attente', + }, + 'node.unpin': 'Retirer l\'identité', + 'node.unpin_confirm': 'Retirer l\'identité de « {name} » ? Cette personne devra se ré-apparier.', + 'node.unpin_done': 'Identité retirée.', + 'node.denylist': 'Liste de blocage', + 'node.denylist_load': 'Charger la liste de blocage', + 'node.denylist_empty': 'La liste de blocage est vide.', + 'node.denylist_count': { + one: '1 entrée', + other: '{n} entrées', + }, + 'node.denylist_remove': 'Retirer', + 'node.denylist_clear_all': 'Tout effacer', + 'node.denylist_clear_confirm': 'Retirer « {subject} » de la liste de blocage ?', + 'node.denylist_cleared': 'Entrée retirée de la liste de blocage.', + + // Node settings + 'settings_node.detach_failed_continue': 'Impossible de détacher le groupe du node. Supprimer quand même sur le hub ?', + 'settings_node.roots': 'Répertoires partagés', + + // Create group wizard + 'wizard.title': 'Créer un groupe', + 'wizard.detecting': 'Détection du node local…', + 'wizard.node_not_found': 'Aucun node local détecté. Vérifiez que meshbay-node est en cours d\'exécution.', + 'wizard.node_offline_warning': 'Le node ne tourne pas. Le groupe sera créé sur le hub uniquement. Vous pourrez connecter le node plus tard depuis la page Node.', + 'wizard.retry': 'Réessayer', + 'wizard.skip_node': 'Continuer sans node', + 'wizard.directories': 'Répertoires partagés', + 'wizard.directories_hint': 'Choisissez les répertoires que ce groupe partagera. Au moins un est requis.', + 'wizard.add_directory': 'Ajouter un répertoire', + 'wizard.remove': 'Retirer', + 'wizard.set_upload': 'Définir comme cible d\'upload', + 'wizard.upload_target': 'cible d\'upload', + 'wizard.create_and_setup': 'Créer et configurer', + 'wizard.create_hub_only': 'Créer sur le hub uniquement', + 'wizard.setting_up': 'Configuration de votre groupe…', + 'wizard.step_create_hub': 'Création du groupe sur le hub', + 'wizard.step_attach': 'Rattachement au node', + 'wizard.step_add_roots': 'Ajout des répertoires', + 'wizard.step_gek': 'Initialisation de la clé de chiffrement', + 'wizard.step_pair': 'Mise en place de l\'appariement', + 'wizard.done_title': 'Groupe créé', + 'wizard.done_message': 'Votre groupe est prêt. Votre node l\'héberge et le chiffrement est configuré.', + 'wizard.go_to_group': 'Aller au groupe', + 'wizard.finish_later': 'Terminer la configuration plus tard', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js index 6d349b9..af22add 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js @@ -478,4 +478,108 @@ export default { 'setup.skip': 'Salta — crea un gruppo senza node locale', 'setup.create_group': 'Crea il suo primo gruppo', 'setup.dismiss': 'Salta la configurazione', + + // Group misc + 'group.retry': 'Riprova', + + // Sidebar + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': 'Impossibile raggiungere il suo node. Si assicuri che sia in esecuzione.', + 'node.offline': 'Node non in linea', + 'node.retry': 'Riprova', + 'node.reload': 'Ricarica configurazione', + 'node.reloaded': 'Configurazione ricaricata. Le modifiche alle directory dei gruppi esistenti sono ora attive.', + 'node.restart_needed': "Dopo l'aggiunta: inizializzi la chiave di gruppo (meshbay-node gek-init --group ).", + 'node.no_groups': 'Nessun gruppo configurato su questo node.', + 'node.stale': 'non presente sul hub', + 'node.unavailable': 'non disponibile', + 'node.files': { + one: '1 file', + other: '{n} file', + }, + 'node.peers': { + one: '1 peer', + other: '{n} peer', + }, + 'node.roots': 'Directory', + 'node.add_root': 'Aggiungi directory', + 'node.remove_root': 'Rimuovi', + 'node.root_added': 'Directory aggiunta.', + 'node.root_remove_confirm': 'Rimuovere «{name}» da questo gruppo?', + 'node.root_removed': "Directory rimossa. Si consiglia un riavvio per aggiornare l'indice.", + 'node.upload_root': 'caricamenti', + 'node.attach_group': 'Aggiungi gruppo', + 'node.attach_pick': 'Gruppo da ospitare', + 'node.attach_dir': 'Directory condivisa', + 'node.attach_upload_dir': 'Directory di caricamento', + 'node.attach_upload_label': 'Directory di caricamento (per file caricati e allegati della chat)', + 'node.attached': 'Gruppo aggiunto e caricato. Esegua meshbay-node gek-init --group {name} se non lo ha già fatto.', + 'node.detach_group': 'Rimuovi gruppo', + 'node.detach_confirm': 'Rimuovere «{name}» da questo node?', + 'node.detached': 'Gruppo rimosso.', + 'node.gek': 'Chiave di gruppo', + 'node.no_gek': 'Nessuna chiave di gruppo', + 'node.gek_init_hint': 'Nessuna chiave di gruppo ancora. Esegua GEK init dalla riga di comando per configurarla.', + 'node.gek_public_hint': 'La rotazione delle chiavi non è disponibile per i gruppi pubblici.', + 'node.gek_rotate': 'Ruota chiave di gruppo', + 'node.gek_rotate_confirm': 'Ruotare la chiave di gruppo? I membri connessi riceveranno la nuova chiave automaticamente. I contenuti già scaricati non saranno interessati.', + 'node.gek_rotated': 'Chiave di gruppo ruotata.', + 'node.roster': 'Roster', + 'node.roster_load': 'Carica roster', + 'node.roster_empty': 'Nessun membro fissato ancora.', + 'node.roster_user': 'Utente', + 'node.roster_role': 'Ruolo', + 'node.roster_status': 'Stato', + 'node.roster_via': 'Fissato tramite', + 'node.roster_invites': { + one: '1 invito in sospeso', + other: '{n} inviti in sospeso', + }, + 'node.unpin': 'Rimuovi identità', + 'node.unpin_confirm': "Rimuovere l'identità di «{name}»? Dovrà effettuare di nuovo il pairing.", + 'node.unpin_done': 'Identità rimossa.', + 'node.denylist': 'Lista di blocco', + 'node.denylist_load': 'Carica lista di blocco', + 'node.denylist_empty': 'La lista di blocco è vuota.', + 'node.denylist_count': { + one: '1 voce', + other: '{n} voci', + }, + 'node.denylist_remove': 'Rimuovi', + 'node.denylist_clear_all': 'Cancella tutto', + 'node.denylist_clear_confirm': 'Rimuovere «{subject}» dalla lista di blocco?', + 'node.denylist_cleared': 'Voce della lista di blocco rimossa.', + + // Settings — node + 'settings_node.detach_failed_continue': 'Impossibile scollegare il gruppo dal node. Eliminare comunque dal hub?', + 'settings_node.roots': 'Directory condivise', + + // Create-group wizard + 'wizard.title': 'Crea gruppo', + 'wizard.detecting': 'Rilevamento del node locale…', + 'wizard.node_not_found': 'Nessun node locale rilevato. Si assicuri che meshbay-node sia in esecuzione.', + 'wizard.node_offline_warning': 'Il node non è in esecuzione. Il gruppo sarà creato solo sul hub. Potrà collegare il node in seguito dalla pagina Node.', + 'wizard.retry': 'Riprova', + 'wizard.skip_node': 'Continua senza node', + 'wizard.directories': 'Directory condivise', + 'wizard.directories_hint': 'Scelga le directory che questo gruppo condividerà. Ne serve almeno una.', + 'wizard.add_directory': 'Aggiungi directory', + 'wizard.remove': 'Rimuovi', + 'wizard.set_upload': 'Imposta come destinazione di caricamento', + 'wizard.upload_target': 'destinazione di caricamento', + 'wizard.create_and_setup': 'Crea e configura', + 'wizard.create_hub_only': 'Crea solo sul hub', + 'wizard.setting_up': 'Configurazione del gruppo…', + 'wizard.step_create_hub': 'Creazione del gruppo sul hub', + 'wizard.step_attach': 'Collegamento al node', + 'wizard.step_add_roots': 'Aggiunta delle directory', + 'wizard.step_gek': 'Inizializzazione della chiave di cifratura', + 'wizard.step_pair': 'Configurazione del pairing', + 'wizard.done_title': 'Gruppo creato', + 'wizard.done_message': 'Il suo gruppo è pronto. Il suo node lo ospita e la cifratura è configurata.', + 'wizard.go_to_group': 'Vai al gruppo', + 'wizard.finish_later': 'Completa la configurazione in seguito', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js index 6f74073..2aa2ab5 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js @@ -466,4 +466,104 @@ export default { 'setup.skip': 'スキップ — ローカル node なしでグループを作成', 'setup.create_group': '最初のグループを作成', 'setup.dismiss': 'セットアップをスキップ', + + // Group + 'group.retry': '再試行', + + // Sidebar + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': 'node に接続できませんでした。node が実行中であることをご確認ください。', + 'node.offline': 'Node はオフラインです', + 'node.retry': '再試行', + 'node.reload': '設定を再読み込み', + 'node.reloaded': '設定を再読み込みしました。既存グループのルート変更が反映されました。', + 'node.restart_needed': '追加後、グループ鍵を初期化してください(meshbay-node gek-init --group )。', + 'node.no_groups': 'この node にはグループが設定されていません。', + 'node.stale': 'hub に未登録', + 'node.unavailable': '利用不可', + 'node.files': { + other: '{n} 件のファイル', + }, + 'node.peers': { + other: '{n} 件のピア', + }, + 'node.roots': 'ディレクトリ', + 'node.add_root': 'ディレクトリを追加', + 'node.remove_root': '削除', + 'node.root_added': 'ディレクトリを追加しました。', + 'node.root_remove_confirm': '「{name}」をこのグループから削除しますか?', + 'node.root_removed': 'ディレクトリを削除しました。インデックスを更新するために再起動を推奨します。', + 'node.upload_root': 'アップロード', + 'node.attach_group': 'グループを追加', + 'node.attach_pick': 'ホストするグループ', + 'node.attach_dir': '共有ディレクトリ', + 'node.attach_upload_dir': 'アップロードディレクトリ', + 'node.attach_upload_label': 'アップロードディレクトリ(ファイルのアップロードとチャット添付用)', + 'node.attached': 'グループを追加し読み込みました。まだの場合は meshbay-node gek-init --group {name} を実行してください。', + 'node.detach_group': 'グループを削除', + 'node.detach_confirm': '「{name}」をこの node から削除しますか?', + 'node.detached': 'グループを削除しました。', + 'node.gek': 'グループ鍵', + 'node.no_gek': 'グループ鍵がありません', + 'node.gek_init_hint': 'グループ鍵が未設定です。CLI から GEK init を実行して設定してください。', + 'node.gek_public_hint': '公開グループでは鍵のローテーションは利用できません。', + 'node.gek_rotate': 'グループ鍵をローテーション', + 'node.gek_rotate_confirm': 'グループ鍵をローテーションしますか?接続中のメンバーは新しい鍵を自動的に受け取ります。ダウンロード済みのコンテンツには影響しません。', + 'node.gek_rotated': 'グループ鍵をローテーションしました。', + 'node.roster': '名簿', + 'node.roster_load': '名簿を読み込む', + 'node.roster_empty': 'まだ固定されたメンバーはいません。', + 'node.roster_user': 'ユーザー', + 'node.roster_role': '役割', + 'node.roster_status': 'ステータス', + 'node.roster_via': '固定元', + 'node.roster_invites': { + other: '{n} 件の保留中の招待', + }, + 'node.unpin': '固定を解除', + 'node.unpin_confirm': '「{name}」の固定を解除しますか?再度ペアリングが必要になります。', + 'node.unpin_done': '識別情報の固定を解除しました。', + 'node.denylist': '拒否リスト', + 'node.denylist_load': '拒否リストを読み込む', + 'node.denylist_empty': '拒否リストは空です。', + 'node.denylist_count': { + other: '{n} 件のエントリ', + }, + 'node.denylist_remove': '削除', + 'node.denylist_clear_all': 'すべて削除', + 'node.denylist_clear_confirm': '「{subject}」を拒否リストから削除しますか?', + 'node.denylist_cleared': '拒否リストのエントリを削除しました。', + + // Settings — node + 'settings_node.detach_failed_continue': 'node からグループを切り離せませんでした。それでも hub 上で削除しますか?', + 'settings_node.roots': '共有ディレクトリ', + + // Wizard + 'wizard.title': 'グループを作成', + 'wizard.detecting': 'ローカル node を検出中…', + 'wizard.node_not_found': 'ローカル node が検出できませんでした。meshbay-node が実行中であることをご確認ください。', + 'wizard.node_offline_warning': 'Node が実行されていません。グループは hub 上のみに作成されます。後から Node ページで node を接続できます。', + 'wizard.retry': '再試行', + 'wizard.skip_node': 'node なしで続行', + 'wizard.directories': '共有ディレクトリ', + 'wizard.directories_hint': 'このグループで共有するディレクトリを選択してください。少なくとも 1 つ必要です。', + 'wizard.add_directory': 'ディレクトリを追加', + 'wizard.remove': '削除', + 'wizard.set_upload': 'アップロード先に設定', + 'wizard.upload_target': 'アップロード先', + 'wizard.create_and_setup': '作成してセットアップ', + 'wizard.create_hub_only': 'hub のみに作成', + 'wizard.setting_up': 'グループをセットアップ中…', + 'wizard.step_create_hub': 'hub 上にグループを作成中', + 'wizard.step_attach': 'node に接続中', + 'wizard.step_add_roots': 'ディレクトリを追加中', + 'wizard.step_gek': '暗号化鍵を初期化中', + 'wizard.step_pair': 'ペアリングをセットアップ中', + 'wizard.done_title': 'グループを作成しました', + 'wizard.done_message': 'グループの準備ができました。node がホストし、暗号化が設定されています。', + 'wizard.go_to_group': 'グループを開く', + 'wizard.finish_later': 'セットアップを後で完了', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js index f1c2b75..5a9a303 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js @@ -480,4 +480,108 @@ export default { 'setup.skip': 'Overslaan — groep aanmaken zonder lokale node', 'setup.create_group': 'Eerste groep aanmaken', 'setup.dismiss': 'Installatie overslaan', + + // Group + 'group.retry': 'Opnieuw proberen', + + // Sidebar + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': 'Uw node is niet bereikbaar. Controleer of hij draait.', + 'node.offline': 'Node is offline', + 'node.retry': 'Opnieuw proberen', + 'node.reload': 'Configuratie herladen', + 'node.reloaded': 'Configuratie herladen. Mapwijzigingen op bestaande groepen zijn nu actief.', + 'node.restart_needed': 'Na het toevoegen: initialiseer de groepssleutel (meshbay-node gek-init --group ).', + 'node.no_groups': 'Geen groepen geconfigureerd op deze node.', + 'node.stale': 'niet op hub', + 'node.unavailable': 'niet beschikbaar', + 'node.files': { + one: '1 bestand', + other: '{n} bestanden', + }, + 'node.peers': { + one: '1 peer', + other: '{n} peers', + }, + 'node.roots': 'Mappen', + 'node.add_root': 'Map toevoegen', + 'node.remove_root': 'Verwijderen', + 'node.root_added': 'Map toegevoegd.', + 'node.root_remove_confirm': '„{name}" uit deze groep verwijderen?', + 'node.root_removed': 'Map verwijderd. Herstart aanbevolen om de index bij te werken.', + 'node.upload_root': 'uploads', + 'node.attach_group': 'Groep toevoegen', + 'node.attach_pick': 'Groep om te hosten', + 'node.attach_dir': 'Gedeelde map', + 'node.attach_upload_dir': 'Uploadmap', + 'node.attach_upload_label': 'Uploadmap (voor bestandsuploads en chatbijlagen)', + 'node.attached': 'Groep toegevoegd en geladen. Voer meshbay-node gek-init --group {name} uit als dat nog niet is gebeurd.', + 'node.detach_group': 'Groep verwijderen', + 'node.detach_confirm': '„{name}" van deze node verwijderen?', + 'node.detached': 'Groep verwijderd.', + 'node.gek': 'Groepssleutel', + 'node.no_gek': 'Geen groepssleutel', + 'node.gek_init_hint': 'Nog geen groepssleutel. Voer GEK init uit via de CLI om er een in te stellen.', + 'node.gek_public_hint': 'Sleutelrotatie is niet beschikbaar voor openbare groepen.', + 'node.gek_rotate': 'Groepssleutel roteren', + 'node.gek_rotate_confirm': 'De groepssleutel roteren? Verbonden leden ontvangen de nieuwe sleutel automatisch. Reeds gedownloade inhoud wordt niet beïnvloed.', + 'node.gek_rotated': 'Groepssleutel geroteerd.', + 'node.roster': 'Ledenlijst', + 'node.roster_load': 'Ledenlijst laden', + 'node.roster_empty': 'Nog geen leden vastgezet.', + 'node.roster_user': 'Gebruiker', + 'node.roster_role': 'Rol', + 'node.roster_status': 'Status', + 'node.roster_via': 'Vastgezet via', + 'node.roster_invites': { + one: '1 openstaande uitnodiging', + other: '{n} openstaande uitnodigingen', + }, + 'node.unpin': 'Losmaken', + 'node.unpin_confirm': '„{name}" losmaken? Diegene moet opnieuw koppelen.', + 'node.unpin_done': 'Identiteit losgemaakt.', + 'node.denylist': 'Blokkeerlijst', + 'node.denylist_load': 'Blokkeerlijst laden', + 'node.denylist_empty': 'De blokkeerlijst is leeg.', + 'node.denylist_count': { + one: '1 vermelding', + other: '{n} vermeldingen', + }, + 'node.denylist_remove': 'Verwijderen', + 'node.denylist_clear_all': 'Alles wissen', + 'node.denylist_clear_confirm': '„{subject}" van de blokkeerlijst verwijderen?', + 'node.denylist_cleared': 'Vermelding van de blokkeerlijst verwijderd.', + + // Node settings + 'settings_node.detach_failed_continue': 'Kon de groep niet van de node loskoppelen. Toch op de hub verwijderen?', + 'settings_node.roots': 'Gedeelde mappen', + + // Create group wizard + 'wizard.title': 'Groep aanmaken', + 'wizard.detecting': 'Lokale node wordt gedetecteerd…', + 'wizard.node_not_found': 'Geen lokale node gedetecteerd. Controleer of meshbay-node draait.', + 'wizard.node_offline_warning': 'Node draait niet. De groep wordt alleen op de hub aangemaakt. U kunt de node later verbinden via de Node-pagina.', + 'wizard.retry': 'Opnieuw proberen', + 'wizard.skip_node': 'Doorgaan zonder node', + 'wizard.directories': 'Gedeelde mappen', + 'wizard.directories_hint': 'Kies de mappen die deze groep deelt. Minimaal één is vereist.', + 'wizard.add_directory': 'Map toevoegen', + 'wizard.remove': 'Verwijderen', + 'wizard.set_upload': 'Instellen als uploaddoel', + 'wizard.upload_target': 'uploaddoel', + 'wizard.create_and_setup': 'Aanmaken en instellen', + 'wizard.create_hub_only': 'Alleen op hub aanmaken', + 'wizard.setting_up': 'Uw groep wordt ingesteld…', + 'wizard.step_create_hub': 'Groep aanmaken op hub', + 'wizard.step_attach': 'Koppelen aan node', + 'wizard.step_add_roots': 'Mappen toevoegen', + 'wizard.step_gek': 'Versleutelingssleutel initialiseren', + 'wizard.step_pair': 'Koppeling instellen', + 'wizard.done_title': 'Groep aangemaakt', + 'wizard.done_message': 'Uw groep is klaar. Uw node host de groep en de versleuteling is ingesteld.', + 'wizard.go_to_group': 'Naar groep', + 'wizard.finish_later': 'Later voltooien', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js index e3f9270..c8c0315 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js @@ -493,4 +493,116 @@ export default { 'setup.skip': 'Pomiń — utwórz grupę bez lokalnego node', 'setup.create_group': 'Utwórz pierwszą grupę', 'setup.dismiss': 'Pomiń konfigurację', + + // Group (supplementary) + 'group.retry': 'Ponów', + + // Sidebar (supplementary) + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': 'Nie udało się połączyć z Pana/Pani node. Upewnij się, że działa.', + 'node.offline': 'Node jest niedostępny', + 'node.retry': 'Ponów', + 'node.reload': 'Przeładuj konfigurację', + 'node.reloaded': 'Konfiguracja przeładowana. Zmiany katalogów w istniejących grupach są teraz aktywne.', + 'node.restart_needed': 'Po dodaniu: zainicjalizuj klucz grupy (meshbay-node gek-init --group ).', + 'node.no_groups': 'Na tym node nie skonfigurowano żadnych grup.', + 'node.stale': 'brak na hub', + 'node.unavailable': 'niedostępny', + 'node.files': { + one: '{n} plik', + few: '{n} pliki', + many: '{n} plików', + other: '{n} pliku', + }, + 'node.peers': { + one: '{n} peer', + few: '{n} peery', + many: '{n} peerów', + other: '{n} peera', + }, + 'node.roots': 'Katalogi', + 'node.add_root': 'Dodaj katalog', + 'node.remove_root': 'Usuń', + 'node.root_added': 'Katalog dodany.', + 'node.root_remove_confirm': 'Usunąć „{name}" z tej grupy?', + 'node.root_removed': 'Katalog usunięty. Zalecany restart w celu odświeżenia indeksu.', + 'node.upload_root': 'przesyłanie', + 'node.attach_group': 'Dodaj grupę', + 'node.attach_pick': 'Grupa do hostowania', + 'node.attach_dir': 'Katalog współdzielony', + 'node.attach_upload_dir': 'Katalog przesyłania', + 'node.attach_upload_label': 'Katalog przesyłania (do przesyłania plików i załączników czatu)', + 'node.attached': 'Grupa dodana i wczytana. Uruchom meshbay-node gek-init --group {name}, jeśli jeszcze tego nie zrobiono.', + 'node.detach_group': 'Usuń grupę', + 'node.detach_confirm': 'Usunąć „{name}" z tego node?', + 'node.detached': 'Grupa usunięta.', + 'node.gek': 'Klucz grupy', + 'node.no_gek': 'Brak klucza grupy', + 'node.gek_init_hint': 'Nie ma jeszcze klucza grupy. Uruchom GEK init z wiersza poleceń, aby go skonfigurować.', + 'node.gek_public_hint': 'Rotacja klucza nie jest dostępna dla grup publicznych.', + 'node.gek_rotate': 'Zmień klucz grupy', + 'node.gek_rotate_confirm': 'Zmienić klucz grupy? Połączeni członkowie otrzymają nowy klucz automatycznie. Wcześniej pobrane treści pozostaną bez zmian.', + 'node.gek_rotated': 'Klucz grupy zmieniony.', + 'node.roster': 'Rejestr', + 'node.roster_load': 'Wczytaj rejestr', + 'node.roster_empty': 'Nie przypięto jeszcze żadnych członków.', + 'node.roster_user': 'Użytkownik', + 'node.roster_role': 'Rola', + 'node.roster_status': 'Status', + 'node.roster_via': 'Przypięty przez', + 'node.roster_invites': { + one: '{n} oczekujące zaproszenie', + few: '{n} oczekujące zaproszenia', + many: '{n} oczekujących zaproszeń', + other: '{n} oczekującego zaproszenia', + }, + 'node.unpin': 'Odepnij', + 'node.unpin_confirm': 'Odpiąć „{name}"? Będzie musiał(a) ponownie sparować.', + 'node.unpin_done': 'Tożsamość odpięta.', + 'node.denylist': 'Lista blokad', + 'node.denylist_load': 'Wczytaj listę blokad', + 'node.denylist_empty': 'Lista blokad jest pusta.', + 'node.denylist_count': { + one: '{n} wpis', + few: '{n} wpisy', + many: '{n} wpisów', + other: '{n} wpisu', + }, + 'node.denylist_remove': 'Usuń', + 'node.denylist_clear_all': 'Wyczyść wszystko', + 'node.denylist_clear_confirm': 'Usunąć „{subject}" z listy blokad?', + 'node.denylist_cleared': 'Wpis listy blokad usunięty.', + + // Settings — node + 'settings_node.detach_failed_continue': 'Nie udało się odłączyć grupy od node. Usunąć mimo to na hub?', + 'settings_node.roots': 'Katalogi współdzielone', + + // Create-group wizard + 'wizard.title': 'Utwórz grupę', + 'wizard.detecting': 'Wykrywanie lokalnego node…', + 'wizard.node_not_found': 'Nie wykryto lokalnego node. Upewnij się, że meshbay-node działa.', + 'wizard.node_offline_warning': 'Node nie działa. Grupa zostanie utworzona wyłącznie na hub. Node można podłączyć później na stronie Node.', + 'wizard.retry': 'Ponów', + 'wizard.skip_node': 'Kontynuuj bez node', + 'wizard.directories': 'Katalogi współdzielone', + 'wizard.directories_hint': 'Wybierz katalogi, które ta grupa będzie współdzielić. Wymagany jest co najmniej jeden.', + 'wizard.add_directory': 'Dodaj katalog', + 'wizard.remove': 'Usuń', + 'wizard.set_upload': 'Ustaw jako cel przesyłania', + 'wizard.upload_target': 'cel przesyłania', + 'wizard.create_and_setup': 'Utwórz i skonfiguruj', + 'wizard.create_hub_only': 'Utwórz tylko na hub', + 'wizard.setting_up': 'Konfigurowanie grupy…', + 'wizard.step_create_hub': 'Tworzenie grupy na hub', + 'wizard.step_attach': 'Podłączanie do node', + 'wizard.step_add_roots': 'Dodawanie katalogów', + 'wizard.step_gek': 'Inicjalizacja klucza szyfrowania', + 'wizard.step_pair': 'Konfigurowanie parowania', + 'wizard.done_title': 'Grupa utworzona', + 'wizard.done_message': 'Grupa jest gotowa. Node ją hostuje, a szyfrowanie jest skonfigurowane.', + 'wizard.go_to_group': 'Przejdź do grupy', + 'wizard.finish_later': 'Dokończ konfigurację później', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js index 2b003c2..1f7bee2 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js @@ -477,4 +477,96 @@ export default { 'setup.skip': 'Pular — criar um grupo sem node local', 'setup.create_group': 'Criar seu primeiro grupo', 'setup.dismiss': 'Pular configuração', + + // Group misc + 'group.retry': 'Tentar novamente', + + // Sidebar + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': 'Não foi possível alcançar seu node. Verifique se ele está em execução.', + 'node.offline': 'Node está off-line', + 'node.retry': 'Tentar novamente', + 'node.reload': 'Recarregar configuração', + 'node.reloaded': 'Configuração recarregada. Alterações de diretórios em grupos existentes estão ativas.', + 'node.restart_needed': 'Após adicionar: inicialize a chave do grupo (meshbay-node gek-init --group ).', + 'node.no_groups': 'Nenhum grupo configurado neste node.', + 'node.stale': 'fora do hub', + 'node.unavailable': 'indisponível', + 'node.files': { one: '1 arquivo', other: '{n} arquivos' }, + 'node.peers': { one: '1 par', other: '{n} pares' }, + 'node.roots': 'Diretórios', + 'node.add_root': 'Adicionar diretório', + 'node.remove_root': 'Remover', + 'node.root_added': 'Diretório adicionado.', + 'node.root_remove_confirm': 'Remover "{name}" deste grupo?', + 'node.root_removed': 'Diretório removido. Reinicialização recomendada para atualizar o índice.', + 'node.upload_root': 'uploads', + 'node.attach_group': 'Adicionar grupo', + 'node.attach_pick': 'Grupo a hospedar', + 'node.attach_dir': 'Diretório compartilhado', + 'node.attach_upload_dir': 'Diretório de upload', + 'node.attach_upload_label': 'Diretório de upload (para envio de arquivos e anexos do chat)', + 'node.attached': 'Grupo adicionado e carregado. Execute meshbay-node gek-init --group {name} se ainda não o fez.', + 'node.detach_group': 'Remover grupo', + 'node.detach_confirm': 'Remover "{name}" deste node?', + 'node.detached': 'Grupo removido.', + 'node.gek': 'Chave do grupo', + 'node.no_gek': 'Sem chave de grupo', + 'node.gek_init_hint': 'Ainda não há chave de grupo. Execute GEK init na CLI para configurá-la.', + 'node.gek_public_hint': 'A rotação de chave não está disponível para grupos públicos.', + 'node.gek_rotate': 'Rotacionar chave do grupo', + 'node.gek_rotate_confirm': 'Rotacionar a chave do grupo? Os membros conectados receberão a nova chave automaticamente. O conteúdo já baixado não é afetado.', + 'node.gek_rotated': 'Chave do grupo rotacionada.', + 'node.roster': 'Cadastro', + 'node.roster_load': 'Carregar cadastro', + 'node.roster_empty': 'Nenhum membro fixado ainda.', + 'node.roster_user': 'Usuário', + 'node.roster_role': 'Função', + 'node.roster_status': 'Status', + 'node.roster_via': 'Fixado via', + 'node.roster_invites': { one: '1 convite pendente', other: '{n} convites pendentes' }, + 'node.unpin': 'Desfixar', + 'node.unpin_confirm': 'Desfixar "{name}"? A pessoa precisará parear novamente.', + 'node.unpin_done': 'Identidade desfixada.', + 'node.denylist': 'Lista de bloqueio', + 'node.denylist_load': 'Carregar lista de bloqueio', + 'node.denylist_empty': 'A lista de bloqueio está vazia.', + 'node.denylist_count': { one: '1 entrada', other: '{n} entradas' }, + 'node.denylist_remove': 'Remover', + 'node.denylist_clear_all': 'Limpar tudo', + 'node.denylist_clear_confirm': 'Remover "{subject}" da lista de bloqueio?', + 'node.denylist_cleared': 'Entrada removida da lista de bloqueio.', + + // Settings — node + 'settings_node.detach_failed_continue': 'Não foi possível desanexar o grupo do node. Excluir do hub mesmo assim?', + 'settings_node.roots': 'Diretórios compartilhados', + + // Create group wizard + 'wizard.title': 'Criar grupo', + 'wizard.detecting': 'Detectando node local…', + 'wizard.node_not_found': 'Nenhum node local detectado. Verifique se o meshbay-node está em execução.', + 'wizard.node_offline_warning': 'O node não está em execução. O grupo será criado apenas no hub. Você pode conectar o node posteriormente pela página Node.', + 'wizard.retry': 'Tentar novamente', + 'wizard.skip_node': 'Continuar sem node', + 'wizard.directories': 'Diretórios compartilhados', + 'wizard.directories_hint': 'Escolha os diretórios que este grupo compartilhará. Pelo menos um é obrigatório.', + 'wizard.add_directory': 'Adicionar diretório', + 'wizard.remove': 'Remover', + 'wizard.set_upload': 'Definir como destino de upload', + 'wizard.upload_target': 'destino de upload', + 'wizard.create_and_setup': 'Criar e configurar', + 'wizard.create_hub_only': 'Criar apenas no hub', + 'wizard.setting_up': 'Configurando seu grupo…', + 'wizard.step_create_hub': 'Criando grupo no hub', + 'wizard.step_attach': 'Anexando ao node', + 'wizard.step_add_roots': 'Adicionando diretórios', + 'wizard.step_gek': 'Inicializando chave de criptografia', + 'wizard.step_pair': 'Configurando pareamento', + 'wizard.done_title': 'Grupo criado', + 'wizard.done_message': 'Seu grupo está pronto. Seu node o está hospedando e a criptografia está configurada.', + 'wizard.go_to_group': 'Ir para o grupo', + 'wizard.finish_later': 'Finalizar configuração depois', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js index bab41e1..162fadb 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js @@ -452,4 +452,105 @@ export default { 'setup.skip': '跳过 — 不使用本地 node 创建群组', 'setup.create_group': '创建第一个群组', 'setup.dismiss': '跳过设置', + + // Group + 'group.retry': '重试', + + // Sidebar + 'sidebar.node': 'Node', + + // Node admin + 'node.title': 'Node', + 'node.not_operator': '无法连接到您的 node。请确保它正在运行。', + 'node.offline': 'Node 已离线', + 'node.retry': '重试', + 'node.reload': '重新加载配置', + 'node.reloaded': '配置已重新加载。对现有群组的目录更改现已生效。', + 'node.restart_needed': '添加后请初始化群组密钥(meshbay-node gek-init --group <名称>)。', + 'node.no_groups': '此 node 上未配置任何群组。', + 'node.stale': '不在 hub 上', + 'node.unavailable': '不可用', + 'node.files': { + other: '{n} 个文件', + }, + 'node.peers': { + other: '{n} 个对等节点', + }, + 'node.roots': '目录', + 'node.add_root': '添加目录', + 'node.remove_root': '移除', + 'node.root_added': '目录已添加。', + 'node.root_remove_confirm': '从此群组中移除"{name}"?', + 'node.root_removed': '目录已移除。建议重启以更新索引。', + 'node.upload_root': '上传目录', + 'node.attach_group': '添加群组', + 'node.attach_pick': '要托管的群组', + 'node.attach_dir': '共享目录', + 'node.attach_upload_dir': '上传目录', + 'node.attach_upload_label': '上传目录(用于文件上传和聊天附件)', + 'node.attached': '群组已添加并加载。如果尚未操作,请运行 meshbay-node gek-init --group {name}。', + 'node.detach_group': '移除群组', + 'node.detach_confirm': '从此 node 中移除"{name}"?', + 'node.detached': '群组已移除。', + 'node.gek': '群组密钥', + 'node.no_gek': '无群组密钥', + 'node.gek_init_hint': '尚无群组密钥。请从命令行运行 GEK 初始化来设置。', + 'node.gek_public_hint': '公开群组不支持密钥轮换。', + 'node.gek_rotate': '轮换群组密钥', + 'node.gek_rotate_confirm': '轮换群组密钥?已连接的成员将自动收到新密钥。已下载的内容不受影响。', + 'node.gek_rotated': '群组密钥已轮换。', + 'node.roster': '花名册', + 'node.roster_load': '加载花名册', + 'node.roster_empty': '尚未固定任何成员。', + 'node.roster_user': '用户', + 'node.roster_role': '角色', + 'node.roster_status': '状态', + 'node.roster_via': '固定途径', + 'node.roster_invites': { + other: '{n} 个待处理邀请', + }, + 'node.unpin': '取消固定', + 'node.unpin_confirm': '取消固定"{name}"?对方需要重新配对。', + 'node.unpin_done': '身份已取消固定。', + 'node.denylist': '拒绝列表', + 'node.denylist_load': '加载拒绝列表', + 'node.denylist_empty': '拒绝列表为空。', + 'node.denylist_count': { + other: '{n} 条记录', + }, + 'node.denylist_remove': '移除', + 'node.denylist_clear_all': '全部清除', + 'node.denylist_clear_confirm': '从拒绝列表中移除"{subject}"?', + 'node.denylist_cleared': '拒绝列表条目已移除。', + + // Settings — node + 'settings_node.detach_failed_continue': '无法从 node 上分离此群组。是否仍然在 hub 上删除?', + 'settings_node.roots': '共享目录', + + // Create group wizard + 'wizard.title': '创建群组', + 'wizard.detecting': '正在检测本地 node…', + 'wizard.node_not_found': '未检测到本地 node。请确保 meshbay-node 正在运行。', + 'wizard.node_offline_warning': 'Node 未在运行。群组将仅在 hub 上创建。' + + '您可以之后在 Node 页面连接 node。', + 'wizard.retry': '重试', + 'wizard.skip_node': '不使用 node 继续', + 'wizard.directories': '共享目录', + 'wizard.directories_hint': '选择此群组要共享的目录。至少需要一个。', + 'wizard.add_directory': '添加目录', + 'wizard.remove': '移除', + 'wizard.set_upload': '设为上传目标', + 'wizard.upload_target': '上传目标', + 'wizard.create_and_setup': '创建并设置', + 'wizard.create_hub_only': '仅在 hub 上创建', + 'wizard.setting_up': '正在设置您的群组…', + 'wizard.step_create_hub': '在 hub 上创建群组', + 'wizard.step_attach': '关联到 node', + 'wizard.step_add_roots': '添加目录', + 'wizard.step_gek': '初始化加密密钥', + 'wizard.step_pair': '设置配对', + 'wizard.done_title': '群组已创建', + 'wizard.done_message': '您的群组已就绪。您的 node 正在托管它,加密已设置完成。', + 'wizard.go_to_group': '前往群组', + 'wizard.finish_later': '稍后完成设置', }; -- cgit v1.2.3