aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/de.js92
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/es.js92
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js104
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/it.js104
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js100
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js104
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js112
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js92
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js101
9 files changed, 901 insertions, 0 deletions
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 <name>).',
+ '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 <nombre>).',
+ '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 <name>).',
+ '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 <nome>).",
+ '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 <name>)。',
+ '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 <naam>).',
+ '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 <nazwa>).',
+ '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 <nome>).',
+ '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': '稍后完成设置',
};