diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-09-01 14:08:32 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-09-01 14:08:32 +0200 |
| commit | cfc91e0a424163869c64d30e55d55a53f18a3dbf (patch) | |
| tree | 04ed3bbec11690f62f1e2a738bf89f4b763332e5 /packages/meshbay-hub/src/meshbay_hub/static/locales | |
| parent | ba45a3c94806f612fa62812e0b36d08b581a2e47 (diff) | |
| download | meshbay-cfc91e0a424163869c64d30e55d55a53f18a3dbf.tar.gz | |
refactor(node): JSON-only control API, Node page absorbs the admin dashboard
Remove the node daemon's server-rendered admin UI (GET / and /audit, the
_render_* helpers and inline templates) and the `meshbay-node ui` CLI verb.
The loopback control API stays; it is now JSON only, ruff-clean, and 453
lines (was 1074). Also drop three never-wired endpoints (/api/config,
/api/chat/history, /ws/chat, plus broadcast_chat) and the pointless
18000/tcp firewall profiles.
The desktop client's Node page (static/node-page.js) takes over what the
dashboard showed, reorganised into six tabs (Overview, Groups, Roster,
Peers, Audit, Settings):
- Overview: version, node id, QUIC port, hub, index-cache maintenance
- Roster: node-wide view with unpin
- Peers and Audit: auto-load on open, no Load button
- Audit: real usernames and group names (resolved from the roster and
node.toml), Previous/Next pagination newest-first, Export CSV of every
matching row
- Settings: node settings, STUN, ICE, denylist, then Unlink from hub
Backend: audit.get_entries gains `offset`; /api/audit and /api/peers
resolve ids to names via a new _display_names helper; CSP tightened to
default-src 'none' now that no HTML is served. draft-v6 sections 2.11 and
2.12 corrected -- the Node page uses the loopback API, not MNP.
One capability is intentionally dropped: browser-based admin on a headless
server. The CLI covers every operation there.
See docs/refactor-node-ui.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MQCaZnde4Bjjdu84dhSuF5
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales')
10 files changed, 460 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 3253372..6c03726 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js @@ -847,4 +847,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js index aae9031..88dca15 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js @@ -826,4 +826,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 4f80fe9..cf0d6d4 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js @@ -843,4 +843,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 9b9c5b2..138c2cc 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js @@ -858,4 +858,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 785c510..21a7fca 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js @@ -857,4 +857,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 22792ce..e74750f 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js @@ -841,4 +841,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 01663c3..9f15053 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js @@ -859,4 +859,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 2bc29ee..069d642 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js @@ -885,4 +885,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 2f2aa43..a1a1352 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 @@ -844,4 +844,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; 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 141cb6f..b0c88ff 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 @@ -829,4 +829,50 @@ export default { 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', + 'node.overview': 'Overview', + 'node.overview_version': 'Version', + 'node.overview_node_id': 'Node ID', + 'node.overview_quic_port': 'QUIC port', + 'node.overview_hub': 'Hub', + 'node.node_roster': 'Node roster', + 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', + 'node.roster_scope': 'Scope', + 'node.roster_scope_node': 'node-wide', + 'node.peers_title': 'Connected peers', + 'node.peers_empty': 'No peers connected.', + 'node.peers_user': 'User', + 'node.peers_ip': 'IP', + 'node.peers_group': 'Group', + 'node.peers_state': 'State', + 'node.audit_title': 'Audit log', + 'node.audit_all_events': 'All events', + 'node.audit_empty': 'No audit entries.', + 'node.audit_time': 'Time', + 'node.audit_event': 'Event', + 'node.audit_user': 'User', + 'node.audit_ip': 'IP', + 'node.audit_group': 'Group', + 'node.audit_detail': 'Detail', + 'node.maintenance': 'Maintenance', + 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', + 'node.maintenance_prune': 'Prune stale entries', + 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', + 'node.loading': 'Loading…', + 'node.audit_export': 'Export CSV', + 'node.audit_exporting': 'Exporting…', + 'node.audit_prev': 'Previous', + 'node.audit_next': 'Next', + 'node.audit_page': 'Page {n}', + 'node.audit_exported': 'Exported {n} entries.', + 'node.unlink_title': 'Unlink from hub', + 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', + 'node.unlink_button': 'Unlink this node', + 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', + 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', + 'node.tab_overview': 'Overview', + 'node.tab_groups': 'Groups', + 'node.tab_roster': 'Roster', + 'node.tab_peers': 'Peers', + 'node.tab_audit': 'Audit', + 'node.tab_settings': 'Settings', }; |