From 2641c40ecf7914c93c9bddb7ab1e046cbe18484f Mon Sep 17 00:00:00 2001
From: DevBot NetBird <91386968+netbirddev@users.noreply.github.com>
Date: Tue, 6 Oct 2026 18:15:46 +0200
Subject: [PATCH] New translations common.json (Spanish)
[ci skip]
---
client/ui/i18n/locales/es/common.json | 1389 ++++++++++++++++---------
1 file changed, 926 insertions(+), 463 deletions(-)
diff --git a/client/ui/i18n/locales/es/common.json b/client/ui/i18n/locales/es/common.json
index 979879680..d58732f2b 100644
--- a/client/ui/i18n/locales/es/common.json
+++ b/client/ui/i18n/locales/es/common.json
@@ -1,555 +1,739 @@
{
"tray.tooltip": {
- "message": "NetBird"
+ "message": "NetBird",
+ "description": "Hover tooltip on the system-tray / menu-bar icon. Brand name — do not translate."
},
"tray.status.disconnected": {
- "message": "Desconectado"
+ "message": "Desconectado",
+ "description": "Connection status surfaced through the tray icon: the client is not connected to the network."
},
"tray.status.daemonUnavailable": {
- "message": "No está en ejecución"
+ "message": "No está en ejecución",
+ "description": "Tray status: the background NetBird service (daemon) is not running."
},
"tray.status.error": {
- "message": "Error"
+ "message": "Error",
+ "description": "Tray status: the client is in an error state."
},
"tray.status.connected": {
- "message": "Conectado"
+ "message": "Conectado",
+ "description": "Tray status: connected to the NetBird network."
},
"tray.status.connecting": {
- "message": "Conectando"
+ "message": "Conectando",
+ "description": "Tray status: a connection is being established."
},
"tray.status.needsLogin": {
- "message": "Inicio de sesión requerido"
+ "message": "Inicio de sesión requerido",
+ "description": "Tray status: the user must sign in before connecting."
},
"tray.status.loginFailed": {
- "message": "Error al iniciar sesión"
+ "message": "Error al iniciar sesión",
+ "description": "Tray status: the last sign-in attempt failed."
},
"tray.status.sessionExpired": {
- "message": "Sesión expirada"
+ "message": "Sesión expirada",
+ "description": "Tray status: the authenticated session expired; the user must sign in again."
},
"tray.session.expiresIn": {
- "message": "La sesión expira en {remaining}"
+ "message": "La sesión expira en {remaining}",
+ "description": "Tray row showing time left before the session expires. {remaining} is a human-readable duration such as '5 minutes', built from the tray.session.unit.* strings. Keep {remaining} unchanged."
},
"tray.session.unit.lessThanMinute": {
- "message": "menos de un minuto"
+ "message": "menos de un minuto",
+ "description": "Duration fragment substituted into {remaining} (see tray.session.expiresIn). Used when under one minute remains."
},
"tray.session.unit.minute": {
- "message": "1 minuto"
+ "message": "1 minuto",
+ "description": "Duration fragment for exactly one minute, substituted into {remaining}."
},
"tray.session.unit.minutes": {
- "message": "{count} minutos"
+ "message": "{count} minutos",
+ "description": "Duration fragment for several minutes, substituted into {remaining}. {count} is the number of minutes; keep {count}."
},
"tray.session.unit.hour": {
- "message": "1 hora"
+ "message": "1 hora",
+ "description": "Duration fragment for exactly one hour, substituted into {remaining}."
},
"tray.session.unit.hours": {
- "message": "{count} horas"
+ "message": "{count} horas",
+ "description": "Duration fragment for several hours. {count} is the number of hours; keep {count}."
},
"tray.session.unit.day": {
- "message": "1 día"
+ "message": "1 día",
+ "description": "Duration fragment for exactly one day, substituted into {remaining}."
},
"tray.session.unit.days": {
- "message": "{count} días"
+ "message": "{count} días",
+ "description": "Duration fragment for several days. {count} is the number of days; keep {count}."
},
"tray.menu.open": {
- "message": "Abrir NetBird"
+ "message": "Abrir NetBird",
+ "description": "Tray menu item that opens the main NetBird window. Keep short."
},
"tray.menu.connect": {
- "message": "Conectar"
+ "message": "Conectar",
+ "description": "Tray menu item that connects to the network. Keep short."
},
"tray.menu.disconnect": {
- "message": "Desconectar"
+ "message": "Desconectar",
+ "description": "Tray menu item that disconnects from the network. Keep short."
},
"tray.menu.exitNode": {
- "message": "Nodo de salida"
+ "message": "Nodo de salida",
+ "description": "Tray submenu title for choosing an exit node (route all traffic through another peer)."
},
"tray.menu.networks": {
- "message": "Recursos"
+ "message": "Recursos",
+ "description": "Tray submenu title listing network resources the user can reach. Labelled 'Resources' in the UI even though the key says networks."
},
"tray.menu.profiles": {
- "message": "Perfiles"
+ "message": "Perfiles",
+ "description": "Tray submenu title listing connection profiles."
},
"tray.menu.manageProfiles": {
- "message": "Gestionar perfiles"
+ "message": "Gestionar perfiles",
+ "description": "Tray menu item that opens Settings → Profiles."
},
"tray.menu.settings": {
- "message": "Configuración..."
+ "message": "Configuración...",
+ "description": "Tray menu item that opens the Settings window. The trailing '...' signals that a window opens; keep it."
},
"tray.menu.debugBundle": {
- "message": "Crear paquete de diagnóstico"
+ "message": "Crear paquete de diagnóstico",
+ "description": "Tray menu item that generates a diagnostic log bundle for support."
},
"tray.menu.about": {
- "message": "Ayuda y soporte"
+ "message": "Ayuda y soporte",
+ "description": "Tray submenu title for help and support links."
},
"tray.menu.github": {
- "message": "GitHub"
+ "message": "GitHub",
+ "description": "Tray menu link to the GitHub repository. Brand name — do not translate."
},
"tray.menu.documentation": {
- "message": "Documentación"
+ "message": "Documentación",
+ "description": "Tray menu link to the online documentation."
},
"tray.menu.troubleshoot": {
- "message": "Solucionar problemas"
+ "message": "Solucionar problemas",
+ "description": "Tray menu link to troubleshooting help."
},
"tray.menu.downloadLatest": {
- "message": "Descargar la última versión"
+ "message": "Descargar la última versión",
+ "description": "Tray menu item to download the latest available version."
},
"tray.menu.installVersion": {
- "message": "Instalar la versión {version}"
+ "message": "Instalar la versión {version}",
+ "description": "Tray menu item to install a specific update. {version} is a version number like 0.30.1; keep {version}."
},
"tray.menu.guiVersion": {
- "message": "GUI: {version}"
+ "message": "GUI: {version}",
+ "description": "Tray menu row showing the installed UI version. 'GUI' = the graphical app. {version} is a version number; keep it."
},
"tray.menu.daemonVersion": {
- "message": "Daemon: {version}"
+ "message": "Daemon: {version}",
+ "description": "Tray menu row showing the background-service version. 'Daemon' = the background NetBird service. {version} is a version number; keep it."
},
"tray.menu.versionUnknown": {
- "message": "—"
+ "message": "—",
+ "description": "Placeholder shown in version rows when the version can't be determined. It is an em dash — leave as-is."
},
"tray.menu.quit": {
- "message": "Salir de NetBird"
+ "message": "Salir de NetBird",
+ "description": "Tray menu item that fully exits the app and removes the tray icon. Keep short."
},
"notify.daemonOutdated.title": {
- "message": "El servicio de NetBird está desactualizado"
+ "message": "El servicio de NetBird está desactualizado",
+ "description": "Title of the OS desktop notification shown when the running daemon is too old for this UI."
},
"notify.daemonOutdated.body": {
- "message": "Actualice el servicio de NetBird para usar esta aplicación."
+ "message": "Actualice el servicio de NetBird para usar esta aplicación.",
+ "description": "Body of the desktop notification telling the user to upgrade the daemon."
},
"notify.update.title": {
- "message": "Actualización de NetBird disponible"
+ "message": "Actualización de NetBird disponible",
+ "description": "Title of the OS desktop notification shown when an app update is available."
},
"notify.update.body": {
- "message": "NetBird {version} está disponible."
+ "message": "NetBird {version} está disponible.",
+ "description": "Body of the update-available desktop notification. {version} is the new version number; keep it."
},
"notify.update.enforcedSuffix": {
- "message": " Su administrador requiere esta actualización."
+ "message": " Su administrador requiere esta actualización.",
+ "description": "Sentence appended to the update notification body when the admin has made the update mandatory. Note the leading space — keep it."
},
"notify.error.title": {
- "message": "Error"
+ "message": "Error",
+ "description": "Title of a generic error desktop notification."
},
"notify.error.connect": {
- "message": "Error al conectar"
+ "message": "Error al conectar",
+ "description": "Error notification body shown when connecting failed."
},
"notify.error.disconnect": {
- "message": "Error al desconectar"
+ "message": "Error al desconectar",
+ "description": "Error notification body shown when disconnecting failed."
},
"notify.error.switchProfile": {
- "message": "Error al cambiar a {profile}"
+ "message": "Error al cambiar a {profile}",
+ "description": "Error notification shown when switching profiles failed. {profile} is the target profile name; keep it."
},
"notify.error.exitNode": {
- "message": "Error al actualizar el nodo de salida {name}"
+ "message": "Error al actualizar el nodo de salida {name}",
+ "description": "Error notification shown when updating the exit node failed. {name} is the exit node name; keep it."
},
"notify.sessionExpired.title": {
- "message": "Sesión de NetBird expirada"
+ "message": "Sesión de NetBird expirada",
+ "description": "Title of the desktop notification shown when the session has expired."
},
"notify.sessionExpired.body": {
- "message": "Su sesión de NetBird ha expirado. Inicie sesión de nuevo."
+ "message": "Su sesión de NetBird ha expirado. Inicie sesión de nuevo.",
+ "description": "Body of the session-expired desktop notification."
},
"notify.sessionWarning.title": {
- "message": "La sesión expira pronto"
+ "message": "La sesión expira pronto",
+ "description": "Title of the desktop notification warning that the session will expire soon."
},
"notify.sessionWarning.body": {
- "message": "Su sesión de NetBird expira en {remaining}. Haga clic en Renovar ahora para renovarla."
+ "message": "Su sesión de NetBird expira en {remaining}. Haga clic en Renovar ahora para renovarla.",
+ "description": "Body of the session-expiry warning notification. {remaining} is a human-readable duration (see tray.session.unit.*); keep it. 'Extend now' refers to the action button notify.sessionWarning.extend."
},
"notify.sessionWarning.bodyGeneric": {
- "message": "Su sesión de NetBird está a punto de expirar. Haga clic en Renovar ahora para renovarla."
+ "message": "Su sesión de NetBird está a punto de expirar. Haga clic en Renovar ahora para renovarla.",
+ "description": "Generic session-expiry warning body used when the exact remaining time isn't known."
},
"notify.sessionWarning.extend": {
- "message": "Renovar ahora"
+ "message": "Renovar ahora",
+ "description": "Action button on the session-expiry notification that renews the session. Keep short."
},
"notify.sessionWarning.dismiss": {
- "message": "Descartar"
+ "message": "Descartar",
+ "description": "Action button on the session-expiry notification that dismisses it. Keep short."
},
"notify.sessionWarning.failed": {
- "message": "Error al renovar la sesión de NetBird"
+ "message": "Error al renovar la sesión de NetBird",
+ "description": "Notification shown when renewing the session failed."
},
"notify.sessionWarning.successTitle": {
- "message": "Sesión de NetBird renovada"
+ "message": "Sesión de NetBird renovada",
+ "description": "Title of the notification confirming the session was renewed."
},
"notify.sessionWarning.successBody": {
- "message": "Su sesión se ha renovado."
+ "message": "Su sesión se ha renovado.",
+ "description": "Body of the notification confirming the session was renewed."
},
"notify.sessionDeadlineRejected.title": {
- "message": "Plazo de sesión rechazado"
+ "message": "Plazo de sesión rechazado",
+ "description": "Title of the notification shown when the server sent an invalid session deadline."
},
"notify.sessionDeadlineRejected.body": {
- "message": "El servidor envió un plazo de sesión no válido. Inicie sesión de nuevo."
+ "message": "El servidor envió un plazo de sesión no válido. Inicie sesión de nuevo.",
+ "description": "Body explaining the server sent an invalid session deadline and the user must sign in again."
},
"notify.mdm.policyApplied.title": {
- "message": "Configuración de NetBird actualizada"
+ "message": "Configuración de NetBird actualizada",
+ "description": "Title of the desktop notification shown when an MDM (IT-managed) policy changed the daemon configuration at runtime."
},
"notify.mdm.policyApplied.body": {
- "message": "Su configuración de NetBird fue actualizada por su política de TI."
+ "message": "Su configuración de NetBird fue actualizada por su política de TI.",
+ "description": "Body of the MDM policy-applied notification, telling the user their settings were changed by their organization's device-management policy."
},
"common.cancel": {
- "message": "Cancelar"
+ "message": "Cancelar",
+ "description": "Generic Cancel button label, reused across dialogs. Keep short."
},
"common.save": {
- "message": "Guardar"
+ "message": "Guardar",
+ "description": "Generic Save button label. Keep short."
},
"common.saveChanges": {
- "message": "Guardar cambios"
+ "message": "Guardar cambios",
+ "description": "Button label to save edited settings. Keep short."
},
"common.saving": {
- "message": "Guardando…"
+ "message": "Guardando…",
+ "description": "Button label / status shown while a save is in progress. Ends with an ellipsis."
},
"common.close": {
- "message": "Cerrar"
+ "message": "Cerrar",
+ "description": "Generic Close button label. Keep short."
},
"common.copy": {
- "message": "Copiar"
+ "message": "Copiar",
+ "description": "Generic Copy button label (copy to clipboard). Keep short."
},
"common.togglePasswordVisibility": {
- "message": "Mostrar u ocultar la contraseña"
+ "message": "Mostrar u ocultar la contraseña",
+ "description": "Accessibility label for the show/hide button inside a password field."
},
"common.increase": {
- "message": "Aumentar"
+ "message": "Aumentar",
+ "description": "Accessibility label for the increment (+) button on a numeric stepper input."
},
"common.decrease": {
- "message": "Disminuir"
+ "message": "Disminuir",
+ "description": "Accessibility label for the decrement (−) button on a numeric stepper input."
},
"common.delete": {
- "message": "Eliminar"
+ "message": "Eliminar",
+ "description": "Generic Delete button label. Keep short."
},
"common.create": {
- "message": "Crear"
+ "message": "Crear",
+ "description": "Generic Create button label. Keep short."
},
"common.add": {
- "message": "Añadir"
+ "message": "Añadir",
+ "description": "Generic Add button label. Keep short."
},
"common.remove": {
- "message": "Quitar"
+ "message": "Quitar",
+ "description": "Generic Remove button label. Keep short."
},
"common.refresh": {
- "message": "Actualizar"
+ "message": "Actualizar",
+ "description": "Generic Refresh button label. Keep short."
},
"common.loading": {
- "message": "Cargando…"
+ "message": "Cargando…",
+ "description": "Generic loading indicator text. Ends with an ellipsis."
},
"common.netbird": {
- "message": "NetBird"
+ "message": "NetBird",
+ "description": "The product name. Brand — do not translate."
},
"common.noResults.title": {
- "message": "No se encontraron resultados"
+ "message": "No se encontraron resultados",
+ "description": "Title of the empty state shown when a search or filter returns nothing."
},
"common.noResults.description": {
- "message": "No se encontraron resultados. Pruebe con otro término de búsqueda o cambie los filtros."
+ "message": "No se encontraron resultados. Pruebe con otro término de búsqueda o cambie los filtros.",
+ "description": "Body of the no-results empty state, suggesting a different search term or filters."
},
"notConnected.title": {
- "message": "Desconectado"
+ "message": "Desconectado",
+ "description": "Title of the placeholder shown on data screens while disconnected."
},
"notConnected.description": {
- "message": "Conéctese primero a NetBird para ver información detallada sobre sus peers, recursos de red y nodos de salida."
+ "message": "Conéctese primero a NetBird para ver información detallada sobre sus peers, recursos de red y nodos de salida.",
+ "description": "Body explaining the user must connect to NetBird first to see peer, resource, and exit-node details."
},
"connect.status.disconnected": {
- "message": "Desconectado"
+ "message": "Desconectado",
+ "description": "Label on the main-window connection toggle: not connected."
},
"connect.status.connecting": {
- "message": "Conectando..."
+ "message": "Conectando...",
+ "description": "Connection toggle label while connecting. Ends with an ellipsis."
},
"connect.status.connected": {
- "message": "Conectado"
+ "message": "Conectado",
+ "description": "Connection toggle label when connected."
},
"connect.status.disconnecting": {
- "message": "Desconectando..."
+ "message": "Desconectando...",
+ "description": "Connection toggle label while disconnecting. Ends with an ellipsis."
},
"connect.status.daemonUnavailable": {
- "message": "Daemon no disponible"
+ "message": "Daemon no disponible",
+ "description": "Connection toggle label when the background service is unavailable. 'Daemon' = background service."
},
"connect.status.loginRequired": {
- "message": "Inicio de sesión requerido"
+ "message": "Inicio de sesión requerido",
+ "description": "Connection toggle label when sign-in is required before connecting."
},
"connect.error.loginTitle": {
- "message": "Error al iniciar sesión"
+ "message": "Error al iniciar sesión",
+ "description": "Error-dialog title shown when sign-in fails. The action-named '… Failed' style is intentional — keep it."
},
"connect.error.connectTitle": {
- "message": "Error al conectar"
+ "message": "Error al conectar",
+ "description": "Error-dialog title shown when connecting fails."
},
"connect.error.disconnectTitle": {
- "message": "Error al desconectar"
+ "message": "Error al desconectar",
+ "description": "Error-dialog title shown when disconnecting fails."
},
"nav.peers.title": {
- "message": "Peers"
+ "message": "Peers",
+ "description": "Navigation label for the Peers section (other devices in the network)."
},
"nav.peers.description": {
- "message": "{connected} de {total} conectados"
+ "message": "{connected} de {total} conectados",
+ "description": "Sub-label under Peers showing how many are connected. {connected} and {total} are numbers; keep both."
},
"nav.resources.title": {
- "message": "Recursos"
+ "message": "Recursos",
+ "description": "Navigation label for the Resources section (routed networks)."
},
"nav.resources.description": {
- "message": "{active} de {total} activos"
+ "message": "{active} de {total} activos",
+ "description": "Sub-label under Resources showing how many are active. {active} and {total} are numbers; keep both."
},
"nav.exitNode.title": {
- "message": "Nodos de salida"
+ "message": "Nodos de salida",
+ "description": "Navigation label for the Exit Nodes section."
},
"nav.exitNode.none": {
- "message": "Inactivo"
+ "message": "Inactivo",
+ "description": "Sub-label under Exit Nodes when no exit node is in use."
},
"nav.exitNode.using": {
- "message": "Vía {name}"
+ "message": "Vía {name}",
+ "description": "Sub-label under Exit Nodes when one is active. {name} is the exit node's name; keep it."
},
"header.openSettings": {
- "message": "Abrir configuración"
+ "message": "Abrir configuración",
+ "description": "Accessibility label / tooltip for the gear icon that opens Settings."
},
"header.togglePanel": {
- "message": "Mostrar u ocultar el panel lateral"
+ "message": "Mostrar u ocultar el panel lateral",
+ "description": "Accessibility label / tooltip for the button that shows or hides the side panel."
},
"profile.selector.loading": {
- "message": "Cargando..."
+ "message": "Cargando...",
+ "description": "Shown in the profile picker while profiles load. Ends with an ellipsis."
},
"profile.selector.noProfile": {
- "message": "Sin perfil"
+ "message": "Sin perfil",
+ "description": "Shown in the profile picker when no profile is selected."
},
"profile.selector.searchPlaceholder": {
- "message": "Buscar perfil por nombre..."
+ "message": "Buscar perfil por nombre...",
+ "description": "Placeholder text in the profile picker's search field."
},
"profile.selector.emptyTitle": {
- "message": "No se encontraron perfiles"
+ "message": "No se encontraron perfiles",
+ "description": "Title shown in the profile picker when a search matches no profiles."
},
"profile.selector.emptyDescription": {
- "message": "Pruebe con otro término de búsqueda o cree un perfil nuevo."
+ "message": "Pruebe con otro término de búsqueda o cree un perfil nuevo.",
+ "description": "Body shown when no profiles match the search, suggesting a different term or creating one."
},
"profile.selector.newProfile": {
- "message": "Nuevo perfil"
+ "message": "Nuevo perfil",
+ "description": "Button in the profile picker to create a new profile. Keep short."
},
"profile.selector.moreOptions": {
- "message": "Más opciones"
+ "message": "Más opciones",
+ "description": "Accessibility label for the per-profile kebab (⋯) menu."
},
"profile.selector.deregister": {
- "message": "Anular registro"
+ "message": "Anular registro",
+ "description": "Per-profile menu action: deregister (sign out of the profile but keep it)."
},
"profile.selector.delete": {
- "message": "Eliminar"
+ "message": "Eliminar",
+ "description": "Per-profile menu action: delete the profile."
},
"profile.selector.switchTo": {
- "message": "Cambiar a este perfil"
+ "message": "Cambiar a este perfil",
+ "description": "Tooltip / label for the action that switches to a profile."
},
"profile.selector.edit": {
- "message": "Editar"
+ "message": "Editar",
+ "description": "Per-profile menu action: open the edit dialog to rename or change the management server."
},
"profile.edit.title": {
- "message": "Editar perfil"
+ "message": "Editar perfil",
+ "description": "Title of the dialog for editing an existing profile."
},
"profile.edit.submit": {
- "message": "Guardar cambios"
+ "message": "Guardar cambios",
+ "description": "Submit button on the edit-profile dialog. Keep short."
},
"profile.dialog.title": {
- "message": "Introduzca el nombre del perfil"
+ "message": "Introduzca el nombre del perfil",
+ "description": "Title of the dialog for naming a new profile."
},
"profile.dialog.nameLabel": {
- "message": "Nombre del perfil"
+ "message": "Nombre del perfil",
+ "description": "Field label for the profile name."
},
"profile.dialog.description": {
- "message": "Asigne un nombre fácil de identificar a su perfil."
+ "message": "Asigne un nombre fácil de identificar a su perfil.",
+ "description": "Helper text under the profile-name field."
},
"profile.dialog.placeholder": {
- "message": "p. ej. trabajo"
+ "message": "p. ej. trabajo",
+ "description": "Example placeholder shown in the profile-name field. 'Work' is a sample value; translate it to a natural example."
},
"profile.dialog.submit": {
- "message": "Añadir perfil"
+ "message": "Añadir perfil",
+ "description": "Submit button on the add-profile dialog. Keep short."
},
"profile.dialog.required": {
- "message": "Introduzca un nombre de perfil, p. ej. trabajo, casa"
+ "message": "Introduzca un nombre de perfil, p. ej. trabajo, casa",
+ "description": "Validation message shown when the profile name is empty. The examples (work, home) may be localized."
},
"profile.dialog.managementHelp": {
- "message": "Use NetBird Cloud o su propio servidor."
+ "message": "Use NetBird Cloud o su propio servidor.",
+ "description": "Helper text noting the profile can use NetBird Cloud or a self-hosted server."
},
"profile.dialog.urlUnreachable": {
- "message": "No se pudo contactar con este servidor. Compruebe la URL o añada el perfil de todos modos si está seguro de que es correcta."
+ "message": "No se pudo contactar con este servidor. Compruebe la URL o añada el perfil de todos modos si está seguro de que es correcta.",
+ "description": "Soft warning when the entered server URL couldn't be reached; the user may add the profile anyway."
},
"header.menu.settings": {
- "message": "Configuración..."
+ "message": "Configuración...",
+ "description": "'More' menu item in the header that opens Settings. The trailing '...' signals a window opens."
},
"header.menu.defaultView": {
- "message": "Vista predeterminada"
+ "message": "Vista predeterminada",
+ "description": "'More' menu item that switches the main window to the compact default view."
},
"header.menu.advancedView": {
- "message": "Vista avanzada"
+ "message": "Vista avanzada",
+ "description": "'More' menu item that switches the main window to the wider advanced view."
},
"header.menu.updateAvailable": {
- "message": "Actualización disponible"
+ "message": "Actualización disponible",
+ "description": "'More' menu item / badge shown when an update is available."
},
"header.menu.open": {
- "message": "Abrir menú"
+ "message": "Abrir menú",
+ "description": "Accessibility label for the header's more (⋮) button that opens the menu."
},
"header.profile.switch": {
- "message": "Cambiar de perfil"
+ "message": "Cambiar de perfil",
+ "description": "Accessibility label for the header's profile selector button."
},
"connect.toggle.label": {
- "message": "Conmutar conexión NetBird"
+ "message": "Conmutar conexión NetBird",
+ "description": "Accessibility label for the large connect/disconnect toggle on the main page."
},
"connect.localIp.label": {
- "message": "Direcciones IP locales"
+ "message": "Direcciones IP locales",
+ "description": "Accessibility label for the local IP selector that toggles between IPv4 and IPv6 on the main page."
},
"common.search": {
- "message": "Buscar"
+ "message": "Buscar",
+ "description": "Accessibility label for a generic search input."
},
"common.filter": {
- "message": "Filtrar"
+ "message": "Filtrar",
+ "description": "Accessibility label for a generic filter control."
},
"exitNodes.dropdown.trigger": {
- "message": "Seleccionar nodo de salida"
+ "message": "Seleccionar nodo de salida",
+ "description": "Accessibility label for the exit-node picker button at the bottom of the main page."
},
"peers.row.label": {
- "message": "Abrir detalles de {name}, {status}"
+ "message": "Abrir detalles de {name}, {status}",
+ "description": "Accessibility label for a peer row in the list. {name} is the peer name and {status} is the connection status; keep both placeholders."
},
"peers.dialog.title": {
- "message": "Detalles del par"
+ "message": "Detalles del par",
+ "description": "Accessibility title (announced to screen readers) for the peer details dialog/panel."
},
"networks.row.toggle": {
- "message": "Conmutar {name}"
+ "message": "Conmutar {name}",
+ "description": "Accessibility label for the row-wide toggle on a network/resource. {name} is the resource id; keep the placeholder."
},
"networks.bulk.label": {
- "message": "Conmutar todos los recursos visibles"
+ "message": "Conmutar todos los recursos visibles",
+ "description": "Accessibility label for the bulk enable/disable button at the bottom of the resources list."
},
"profile.switch.title": {
- "message": "¿Cambiar el perfil a «{name}»?"
+ "message": "¿Cambiar el perfil a «{name}»?",
+ "description": "Confirmation-dialog title for switching profiles. {name} is the target profile name, shown in quotes; keep {name} and the surrounding quotes."
},
"profile.switch.message": {
- "message": "¿Seguro que desea cambiar de perfil?\nSu perfil actual se desconectará."
+ "message": "¿Seguro que desea cambiar de perfil?\nSu perfil actual se desconectará.",
+ "description": "Confirmation body for switching profiles. Contains a line break (\\n) — keep it."
},
"profile.switch.confirm": {
- "message": "Confirmar"
+ "message": "Confirmar",
+ "description": "Confirm button on the switch-profile dialog. Keep short."
},
"profile.deregister.title": {
- "message": "¿Anular el registro del perfil «{name}»?"
+ "message": "¿Anular el registro del perfil «{name}»?",
+ "description": "Confirmation-dialog title for deregistering a profile. {name} is the profile name; keep it and the quotes."
},
"profile.deregister.message": {
- "message": "¿Seguro que desea anular el registro de este perfil?\nDeberá iniciar sesión de nuevo para usarlo."
+ "message": "¿Seguro que desea anular el registro de este perfil?\nDeberá iniciar sesión de nuevo para usarlo.",
+ "description": "Confirmation body for deregistering; warns the user must sign in again. Contains a line break (\\n) — keep it."
},
"profile.deregister.confirm": {
- "message": "Anular registro"
+ "message": "Anular registro",
+ "description": "Confirm button on the deregister dialog. Keep short."
},
"profile.delete.title": {
- "message": "¿Eliminar el perfil «{name}»?"
+ "message": "¿Eliminar el perfil «{name}»?",
+ "description": "Confirmation-dialog title for deleting a profile. {name} is the profile name; keep it and the quotes."
},
"profile.delete.message": {
- "message": "¿Seguro que desea eliminar este perfil?\nEsta acción no se puede deshacer."
+ "message": "¿Seguro que desea eliminar este perfil?\nEsta acción no se puede deshacer.",
+ "description": "Confirmation body for deleting; warns the action can't be undone. Contains a line break (\\n) — keep it."
},
"profile.delete.disabledActive": {
- "message": "Los perfiles activos no se pueden eliminar. Cambie a otro antes de eliminar este perfil."
+ "message": "Los perfiles activos no se pueden eliminar. Cambie a otro antes de eliminar este perfil.",
+ "description": "Tooltip explaining the active profile can't be deleted until the user switches away."
},
"profile.delete.disabledDefault": {
- "message": "El perfil predeterminado no se puede eliminar."
+ "message": "El perfil predeterminado no se puede eliminar.",
+ "description": "Tooltip explaining the default profile can't be deleted."
},
"profile.error.switchTitle": {
- "message": "Error al cambiar de perfil"
+ "message": "Error al cambiar de perfil",
+ "description": "Error-dialog title when switching profiles fails."
},
"profile.error.deregisterTitle": {
- "message": "Error al anular el registro del perfil"
+ "message": "Error al anular el registro del perfil",
+ "description": "Error-dialog title when deregistering a profile fails."
},
"profile.error.deleteTitle": {
- "message": "Error al eliminar el perfil"
+ "message": "Error al eliminar el perfil",
+ "description": "Error-dialog title when deleting a profile fails."
},
"profile.error.createTitle": {
- "message": "Error al crear el perfil"
+ "message": "Error al crear el perfil",
+ "description": "Error-dialog title when creating a profile fails."
},
"profile.error.editTitle": {
- "message": "Error al editar el perfil"
+ "message": "Error al editar el perfil",
+ "description": "Error-dialog title when editing a profile (rename or management URL change) fails."
},
"profile.error.loadTitle": {
- "message": "Error al cargar los perfiles"
+ "message": "Error al cargar los perfiles",
+ "description": "Error-dialog title when loading profiles fails."
},
"profile.dropdown.activeProfile": {
- "message": "Perfil activo"
+ "message": "Perfil activo",
+ "description": "Section heading in the header profile dropdown for the current profile."
},
"profile.dropdown.switchProfile": {
- "message": "Cambiar de perfil"
+ "message": "Cambiar de perfil",
+ "description": "Section heading / action in the profile dropdown to switch profiles."
},
"profile.dropdown.noEmail": {
- "message": "Otro"
+ "message": "Otro",
+ "description": "Label shown for a profile that has no associated email address."
},
"profile.dropdown.addProfile": {
- "message": "Añadir perfil"
+ "message": "Añadir perfil",
+ "description": "Profile dropdown action to add a profile."
},
"profile.dropdown.manageProfiles": {
- "message": "Gestionar perfiles"
+ "message": "Gestionar perfiles",
+ "description": "Profile dropdown action that opens Settings → Profiles."
},
"profile.dropdown.settings": {
- "message": "Configuración"
+ "message": "Configuración",
+ "description": "Profile dropdown action that opens Settings."
},
"settings.profiles.section.profiles": {
- "message": "Perfiles"
+ "message": "Perfiles",
+ "description": "Section heading on the Profiles settings tab."
},
"settings.profiles.intro": {
- "message": "Mantenga identidades de NetBird independientes en paralelo, por ejemplo cuentas de trabajo y personales, o distintos servidores de gestión. Añada, anule el registro o elimine perfiles a continuación."
+ "message": "Mantenga identidades de NetBird independientes en paralelo, por ejemplo cuentas de trabajo y personales, o distintos servidores de gestión. Añada, anule el registro o elimine perfiles a continuación.",
+ "description": "Intro paragraph on the Profiles settings tab explaining what profiles are for."
},
"settings.profiles.addProfile": {
- "message": "Añadir perfil"
+ "message": "Añadir perfil",
+ "description": "Button on the Profiles settings tab to add a profile."
},
"settings.profiles.active": {
- "message": "Activo"
+ "message": "Activo",
+ "description": "Badge marking the currently active profile in the profiles table."
},
"settings.profiles.emptyTitle": {
- "message": "Sin perfiles"
+ "message": "Sin perfiles",
+ "description": "Title of the empty state when there are no profiles."
},
"settings.profiles.emptyDescription": {
- "message": "Cree un perfil para conectarse a un servidor de gestión de NetBird."
+ "message": "Cree un perfil para conectarse a un servidor de gestión de NetBird.",
+ "description": "Body of the no-profiles empty state."
},
"settings.error.loadTitle": {
- "message": "Error al cargar la configuración"
+ "message": "Error al cargar la configuración",
+ "description": "Error-dialog title when loading settings fails."
},
"settings.error.saveTitle": {
- "message": "Error al guardar la configuración"
+ "message": "Error al guardar la configuración",
+ "description": "Error-dialog title when saving settings fails."
},
"settings.error.debugBundleTitle": {
- "message": "Error en el paquete de diagnóstico"
+ "message": "Error en el paquete de diagnóstico",
+ "description": "Error-dialog title when creating the debug bundle fails."
},
"settings.nav.label": {
- "message": "Secciones de configuración"
+ "message": "Secciones de configuración",
+ "description": "Accessibility label for the Settings page's side navigation (list of section tabs)."
},
"settings.tabs.general": {
- "message": "General"
+ "message": "General",
+ "description": "Settings tab label: General. Keep short."
},
"settings.tabs.network": {
- "message": "Red"
+ "message": "Red",
+ "description": "Settings tab label: Network. Keep short."
},
"settings.tabs.security": {
- "message": "Seguridad"
+ "message": "Seguridad",
+ "description": "Settings tab label: Security. Keep short."
},
"settings.tabs.profiles": {
- "message": "Perfiles"
+ "message": "Perfiles",
+ "description": "Settings tab label: Profiles. Keep short."
},
"settings.tabs.ssh": {
- "message": "SSH"
+ "message": "SSH",
+ "description": "Settings tab label: SSH. Acronym — keep as-is."
},
"settings.tabs.advanced": {
- "message": "Avanzado"
+ "message": "Avanzado",
+ "description": "Settings tab label: Advanced. Keep short."
},
"settings.tabs.troubleshooting": {
- "message": "Solución de problemas"
+ "message": "Solución de problemas",
+ "description": "Settings tab label: Troubleshoot. Keep short."
},
"settings.tabs.about": {
- "message": "Acerca de"
+ "message": "Acerca de",
+ "description": "Settings tab label: About. Keep short."
},
"settings.tabs.updateAvailable": {
- "message": "Actualización disponible"
+ "message": "Actualización disponible",
+ "description": "Settings tab label / badge shown when an update is available."
},
"settings.general.section.general": {
- "message": "General"
+ "message": "General",
+ "description": "Section heading on the General settings tab."
},
"settings.general.section.connection": {
- "message": "Conexión"
+ "message": "Conexión",
+ "description": "Section heading for connection-related options on the General tab."
},
"settings.general.connectOnStartup.label": {
- "message": "Conectar al iniciar"
+ "message": "Conectar al iniciar",
+ "description": "Toggle label: connect automatically when the service starts."
},
"settings.general.connectOnStartup.help": {
- "message": "Establece una conexión automáticamente cuando se inicia el servicio."
+ "message": "Establece una conexión automáticamente cuando se inicia el servicio.",
+ "description": "Helper text for the connect-on-startup toggle."
},
"settings.general.notifications.label": {
- "message": "Notificaciones de escritorio"
+ "message": "Notificaciones de escritorio",
+ "description": "Toggle label: enable desktop notifications."
},
"settings.general.notifications.help": {
- "message": "Muestra notificaciones de escritorio para nuevas actualizaciones y eventos de conexión."
+ "message": "Muestra notificaciones de escritorio para nuevas actualizaciones y eventos de conexión.",
+ "description": "Helper text for the desktop-notifications toggle."
},
"settings.general.autostart.label": {
- "message": "Iniciar la interfaz de NetBird al iniciar sesión"
+ "message": "Iniciar la interfaz de NetBird al iniciar sesión",
+ "description": "Toggle label: launch the NetBird UI at login."
},
"settings.general.autostart.help": {
- "message": "Inicia la interfaz de NetBird automáticamente al iniciar sesión. Esto afecta solo a la interfaz gráfica, no al servicio en segundo plano."
+ "message": "Inicia la interfaz de NetBird automáticamente al iniciar sesión. Esto afecta solo a la interfaz gráfica, no al servicio en segundo plano.",
+ "description": "Helper text clarifying autostart affects only the UI, not the background service."
},
"settings.general.autostart.errorTitle": {
- "message": "Error al cambiar el inicio automático"
+ "message": "Error al cambiar el inicio automático",
+ "description": "Error-dialog title when changing the autostart setting fails."
},
"settings.general.keepConnectedOnQuit.label": {
"message": "Permanecer conectado al salir",
@@ -560,840 +744,1119 @@
"description": "Helper text for the stay-connected-after-quitting toggle."
},
"settings.general.language.label": {
- "message": "Idioma de la interfaz"
+ "message": "Idioma de la interfaz",
+ "description": "Label for the display-language picker."
},
"settings.general.language.help": {
- "message": "Elija el idioma de la interfaz de NetBird."
+ "message": "Elija el idioma de la interfaz de NetBird.",
+ "description": "Helper text for the language picker."
},
"settings.general.language.search": {
- "message": "Buscar idioma…"
+ "message": "Buscar idioma…",
+ "description": "Placeholder in the language picker's search field."
},
"settings.general.language.empty": {
- "message": "Ningún idioma coincide."
+ "message": "Ningún idioma coincide.",
+ "description": "Shown when no languages match the search."
},
"settings.general.theme.label": {
- "message": "Tema"
+ "message": "Tema",
+ "description": "Label for the appearance/theme picker."
},
"settings.general.theme.help": {
- "message": "Elija el tema claro u oscuro, o siga la apariencia del sistema."
+ "message": "Elija el tema claro u oscuro, o siga la apariencia del sistema.",
+ "description": "Helper text for the theme picker."
},
"settings.general.theme.system": {
- "message": "Sistema"
+ "message": "Sistema",
+ "description": "Theme option: follow the OS appearance."
},
"settings.general.theme.light": {
- "message": "Claro"
+ "message": "Claro",
+ "description": "Theme option: light appearance."
},
"settings.general.theme.dark": {
- "message": "Oscuro"
+ "message": "Oscuro",
+ "description": "Theme option: dark appearance."
},
"settings.general.management.label": {
- "message": "Servidor de gestión"
+ "message": "Servidor de gestión",
+ "description": "Label for the management-server selector."
},
"settings.general.management.help": {
- "message": "Conéctese a NetBird Cloud o a su propio servidor de gestión autoalojado. Los cambios reconectarán el cliente."
+ "message": "Conéctese a NetBird Cloud o a su propio servidor de gestión autoalojado. Los cambios reconectarán el cliente.",
+ "description": "Helper text explaining Cloud vs self-hosted management server; warns that changes reconnect the client."
},
"settings.general.management.cloud": {
- "message": "Cloud"
+ "message": "Cloud",
+ "description": "Option label for using NetBird Cloud as the management server."
},
"settings.general.management.selfHosted": {
- "message": "Autoalojado"
+ "message": "Autoalojado",
+ "description": "Option label for using a self-hosted management server. 'Self-hosted' is a common technical term."
},
"settings.general.management.urlPlaceholder": {
- "message": "https://netbird.selfhosted.com:443"
+ "message": "https://netbird.selfhosted.com:443",
+ "description": "Example URL placeholder for the self-hosted server field. It is a sample URL — do not translate the URL itself."
},
"settings.general.management.urlError": {
- "message": "Introduzca una URL válida, p. ej., https://netbird.selfhosted.com:443"
+ "message": "Introduzca una URL válida, p. ej., https://netbird.selfhosted.com:443",
+ "description": "Validation message for an invalid management-server URL. The example URL stays as-is."
},
"settings.general.management.urlUnreachable": {
- "message": "No se pudo contactar con este servidor. Compruebe la URL o guarde de todos modos si está seguro de que es correcta."
+ "message": "No se pudo contactar con este servidor. Compruebe la URL o guarde de todos modos si está seguro de que es correcta.",
+ "description": "Soft warning when the management URL couldn't be reached; the user may save anyway."
},
"settings.general.management.switchCloudTitle": {
- "message": "¿Cambiar a NetBird Cloud?"
+ "message": "¿Cambiar a NetBird Cloud?",
+ "description": "Confirmation-dialog title for switching to NetBird Cloud."
},
"settings.general.management.switchCloudMessage": {
- "message": "Esto desconecta su servidor autoalojado.\nEs posible que deba iniciar sesión de nuevo."
+ "message": "Esto desconecta su servidor autoalojado.\nEs posible que deba iniciar sesión de nuevo.",
+ "description": "Confirmation body warning the self-hosted server will be disconnected. Contains a line break (\\n) — keep it."
},
"settings.general.management.switchCloudConfirm": {
- "message": "Cambiar a Cloud"
+ "message": "Cambiar a Cloud",
+ "description": "Confirm button for switching to Cloud. Keep short."
},
"settings.network.section.connectivity": {
- "message": "Conectividad"
+ "message": "Conectividad",
+ "description": "Section heading for connectivity options on the Network tab."
},
"settings.network.section.routingDns": {
- "message": "Enrutamiento y DNS"
+ "message": "Enrutamiento y DNS",
+ "description": "Section heading for routing and DNS options. 'DNS' is an acronym — keep it."
},
"settings.network.monitor.label": {
- "message": "Reconectar al cambiar de red"
+ "message": "Reconectar al cambiar de red",
+ "description": "Toggle label: reconnect automatically on network change."
},
"settings.network.monitor.help": {
- "message": "Monitoriza la red y reconecta automáticamente ante cambios como cambios de Wi-Fi, cambios de Ethernet o la reanudación tras la suspensión."
+ "message": "Monitoriza la red y reconecta automáticamente ante cambios como cambios de Wi-Fi, cambios de Ethernet o la reanudación tras la suspensión.",
+ "description": "Helper text for the network-change reconnect toggle."
},
"settings.network.dns.label": {
- "message": "Habilitar DNS"
+ "message": "Habilitar DNS",
+ "description": "Toggle label: enable DNS. 'DNS' — keep acronym."
},
"settings.network.dns.help": {
- "message": "Aplica la configuración de DNS gestionada por NetBird al resolutor del host."
+ "message": "Aplica la configuración de DNS gestionada por NetBird al resolutor del host.",
+ "description": "Helper text for the enable-DNS toggle."
},
"settings.network.clientRoutes.label": {
- "message": "Habilitar rutas de cliente"
+ "message": "Habilitar rutas de cliente",
+ "description": "Toggle label: enable client routes."
},
"settings.network.clientRoutes.help": {
- "message": "Acepta rutas de otros peers para alcanzar sus redes."
+ "message": "Acepta rutas de otros peers para alcanzar sus redes.",
+ "description": "Helper text for client routes (accept routes from other peers)."
},
"settings.network.serverRoutes.label": {
- "message": "Habilitar rutas de servidor"
+ "message": "Habilitar rutas de servidor",
+ "description": "Toggle label: enable server routes."
},
"settings.network.serverRoutes.help": {
- "message": "Anuncia las rutas locales de este host a otros peers."
+ "message": "Anuncia las rutas locales de este host a otros peers.",
+ "description": "Helper text for server routes (advertise this host's local routes to other peers)."
},
"settings.network.ipv6.label": {
- "message": "Habilitar IPv6"
+ "message": "Habilitar IPv6",
+ "description": "Toggle label: enable IPv6. 'IPv6' — keep as-is."
},
"settings.network.ipv6.help": {
- "message": "Usa direccionamiento IPv6 para la red superpuesta de NetBird."
+ "message": "Usa direccionamiento IPv6 para la red superpuesta de NetBird.",
+ "description": "Helper text for the IPv6 toggle."
},
"settings.security.section.firewall": {
- "message": "Cortafuegos"
+ "message": "Cortafuegos",
+ "description": "Section heading: Firewall."
},
"settings.security.section.encryption": {
- "message": "Cifrado"
+ "message": "Cifrado",
+ "description": "Section heading: Encryption."
},
"settings.security.blockInbound.label": {
- "message": "Bloquear tráfico entrante"
+ "message": "Bloquear tráfico entrante",
+ "description": "Toggle label: block inbound traffic."
},
"settings.security.blockInbound.help": {
- "message": "Rechaza conexiones no solicitadas de peers hacia este dispositivo y cualquier red que enrute. El tráfico saliente no se ve afectado."
+ "message": "Rechaza conexiones no solicitadas de peers hacia este dispositivo y cualquier red que enrute. El tráfico saliente no se ve afectado.",
+ "description": "Helper text for blocking inbound traffic."
},
"settings.security.blockLan.label": {
- "message": "Bloquear acceso a la LAN"
+ "message": "Bloquear acceso a la LAN",
+ "description": "Toggle label: block LAN access. 'LAN' — keep acronym."
},
"settings.security.blockLan.help": {
- "message": "Impide que los peers alcancen su red local o sus dispositivos cuando este dispositivo enruta su tráfico."
+ "message": "Impide que los peers alcancen su red local o sus dispositivos cuando este dispositivo enruta su tráfico.",
+ "description": "Helper text for blocking LAN access."
},
"settings.security.rosenpass.label": {
- "message": "Habilitar resistencia cuántica"
+ "message": "Habilitar resistencia cuántica",
+ "description": "Toggle label: enable quantum-resistance."
},
"settings.security.rosenpass.help": {
- "message": "Añade un intercambio de claves poscuántico mediante Rosenpass sobre WireGuard®."
+ "message": "Añade un intercambio de claves poscuántico mediante Rosenpass sobre WireGuard®.",
+ "description": "Helper text: adds a post-quantum key exchange via Rosenpass on top of WireGuard®. 'Rosenpass' and 'WireGuard®' are product names — do not translate; keep the ® symbol."
},
"settings.security.rosenpassPermissive.label": {
- "message": "Habilitar modo permisivo"
+ "message": "Habilitar modo permisivo",
+ "description": "Toggle label: enable permissive mode (for quantum-resistance)."
},
"settings.security.rosenpassPermissive.help": {
- "message": "Permite conexiones con peers sin compatibilidad con resistencia cuántica."
+ "message": "Permite conexiones con peers sin compatibilidad con resistencia cuántica.",
+ "description": "Helper text for permissive mode (allow peers without quantum-resistance support)."
},
"settings.ssh.section.server": {
- "message": "Servidor"
+ "message": "Servidor",
+ "description": "Section heading: Server (SSH settings)."
},
"settings.ssh.section.capabilities": {
- "message": "Capacidades"
+ "message": "Capacidades",
+ "description": "Section heading: Capabilities (SSH features)."
},
"settings.ssh.section.authentication": {
- "message": "Autenticación"
+ "message": "Autenticación",
+ "description": "Section heading: Authentication (SSH)."
},
"settings.ssh.server.label": {
- "message": "Habilitar el servidor SSH"
+ "message": "Habilitar el servidor SSH",
+ "description": "Toggle label: enable the SSH server."
},
"settings.ssh.server.help": {
- "message": "Ejecuta el servidor SSH de NetBird en este host para que otros peers puedan conectarse a él."
+ "message": "Ejecuta el servidor SSH de NetBird en este host para que otros peers puedan conectarse a él.",
+ "description": "Helper text for the SSH server toggle."
},
"settings.ssh.root.label": {
- "message": "Permitir inicio de sesión como root"
+ "message": "Permitir inicio de sesión como root",
+ "description": "Toggle label: allow root login over SSH. 'root' is the Unix superuser account — keep as-is."
},
"settings.ssh.root.help": {
- "message": "Permite que los peers inicien sesión como usuario root. Desactívelo para exigir una cuenta sin privilegios."
+ "message": "Permite que los peers inicien sesión como usuario root. Desactívelo para exigir una cuenta sin privilegios.",
+ "description": "Helper text for allowing root login."
},
"settings.ssh.sftp.label": {
- "message": "Permitir SFTP"
+ "message": "Permitir SFTP",
+ "description": "Toggle label: allow SFTP. 'SFTP' — keep acronym."
},
"settings.ssh.sftp.help": {
- "message": "Transfiere archivos de forma segura mediante clientes SFTP o SCP nativos."
+ "message": "Transfiere archivos de forma segura mediante clientes SFTP o SCP nativos.",
+ "description": "Helper text about SFTP/SCP file transfer. Keep the acronyms."
},
"settings.ssh.localForward.label": {
- "message": "Reenvío de puertos local"
+ "message": "Reenvío de puertos local",
+ "description": "Toggle label: local port forwarding."
},
"settings.ssh.localForward.help": {
- "message": "Permite que los peers conectados tunelicen puertos locales hacia servicios accesibles desde este host."
+ "message": "Permite que los peers conectados tunelicen puertos locales hacia servicios accesibles desde este host.",
+ "description": "Helper text for local port forwarding."
},
"settings.ssh.remoteForward.label": {
- "message": "Reenvío de puertos remoto"
+ "message": "Reenvío de puertos remoto",
+ "description": "Toggle label: remote port forwarding."
},
"settings.ssh.remoteForward.help": {
- "message": "Permite que los peers conectados expongan puertos de este host de vuelta a su propia máquina."
+ "message": "Permite que los peers conectados expongan puertos de este host de vuelta a su propia máquina.",
+ "description": "Helper text for remote port forwarding."
},
"settings.ssh.jwt.label": {
- "message": "Habilitar autenticación JWT"
+ "message": "Habilitar autenticación JWT",
+ "description": "Toggle label: enable JWT authentication. 'JWT' — keep acronym."
},
"settings.ssh.jwt.help": {
- "message": "Verifica cada sesión SSH contra su IdP para la identidad del usuario y la auditoría. Desactívelo para basarse solo en las políticas de ACL de red, útil cuando no hay ningún IdP disponible."
+ "message": "Verifica cada sesión SSH contra su IdP para la identidad del usuario y la auditoría. Desactívelo para basarse solo en las políticas de ACL de red, útil cuando no hay ningún IdP disponible.",
+ "description": "Helper text for JWT auth. 'IdP' (identity provider) and 'ACL' are acronyms — keep them."
},
"settings.ssh.jwtTtl.label": {
- "message": "TTL de la caché JWT"
+ "message": "TTL de la caché JWT",
+ "description": "Label for the JWT cache time-to-live field. 'JWT' and 'TTL' — keep acronyms."
},
"settings.ssh.jwtTtl.help": {
- "message": "Cuánto tiempo almacena en caché este cliente un JWT antes de volver a solicitarlo en conexiones SSH salientes. Establézcalo en 0 para desactivar la caché y autenticar en cada conexión."
+ "message": "Cuánto tiempo almacena en caché este cliente un JWT antes de volver a solicitarlo en conexiones SSH salientes. Establézcalo en 0 para desactivar la caché y autenticar en cada conexión.",
+ "description": "Helper text for the JWT cache TTL; mentions setting 0 to disable caching."
},
"settings.ssh.jwtTtl.suffix": {
- "message": "s"
+ "message": "s",
+ "description": "Unit suffix shown after the JWT TTL number field. The '(s)' marks an optional plural."
},
"settings.advanced.section.interface": {
- "message": "Interfaz"
+ "message": "Interfaz",
+ "description": "Section heading: Interface (network-interface settings)."
},
"settings.advanced.section.security": {
- "message": "Seguridad"
+ "message": "Seguridad",
+ "description": "Section heading: Security (advanced)."
},
"settings.advanced.interfaceName.label": {
- "message": "Nombre"
+ "message": "Nombre",
+ "description": "Field label for the WireGuard interface name."
},
"settings.advanced.interfaceName.error": {
- "message": "Use de 1 a 15 letras, dígitos, puntos, guiones o guiones bajos."
+ "message": "Use de 1 a 15 letras, dígitos, puntos, guiones o guiones bajos.",
+ "description": "Validation message for the interface name (allowed characters)."
},
"settings.advanced.interfaceName.errorMac": {
- "message": "Debe empezar por \"utun\" seguido de un número (p. ej. utun100)."
+ "message": "Debe empezar por \"utun\" seguido de un número (p. ej. utun100).",
+ "description": "Validation message specific to macOS, where the name must start with 'utun' followed by a number. Keep 'utun' and the example."
},
"settings.advanced.port.label": {
- "message": "Puerto"
+ "message": "Puerto",
+ "description": "Field label: Port."
},
"settings.advanced.port.error": {
- "message": "Introduzca un puerto entre {min} y {max}."
+ "message": "Introduzca un puerto entre {min} y {max}.",
+ "description": "Validation message for the port range. {min} and {max} are numbers; keep them."
},
"settings.advanced.port.help": {
- "message": "Si se establece en 0, se usará un puerto libre aleatorio."
+ "message": "Si se establece en 0, se usará un puerto libre aleatorio.",
+ "description": "Helper text: 0 means a random free port is used."
},
"settings.advanced.mtu.label": {
- "message": "MTU"
+ "message": "MTU",
+ "description": "Field label: MTU. 'MTU' — keep acronym."
},
"settings.advanced.mtu.error": {
- "message": "Introduzca un valor de MTU entre {min} y {max}."
+ "message": "Introduzca un valor de MTU entre {min} y {max}.",
+ "description": "Validation message for the MTU range. {min} and {max} are numbers; keep them."
},
"settings.advanced.psk.label": {
- "message": "Clave precompartida"
+ "message": "Clave precompartida",
+ "description": "Field label: Pre-shared Key."
},
"settings.advanced.psk.help": {
- "message": "PSK de WireGuard opcional para cifrado simétrico adicional. No es lo mismo que una clave de instalación de NetBird. Solo se comunicará con peers que usen la misma clave precompartida."
+ "message": "PSK de WireGuard opcional para cifrado simétrico adicional. No es lo mismo que una clave de instalación de NetBird. Solo se comunicará con peers que usen la misma clave precompartida.",
+ "description": "Helper text for the WireGuard PSK. 'WireGuard', 'PSK', and 'NetBird Setup Key' are product/technical terms — keep them."
},
"settings.troubleshooting.section.title": {
- "message": "Paquete de diagnóstico"
+ "message": "Paquete de diagnóstico",
+ "description": "Section heading: Debug bundle."
},
"settings.troubleshooting.anonymize.label": {
- "message": "Anonimizar información sensible"
+ "message": "Anonimizar información sensible",
+ "description": "Label for the anonymization level dropdown (None, Default, Strict)."
},
"settings.troubleshooting.anonymize.help": {
- "message": "Oculta direcciones IP, dominios y otros valores sensibles."
+ "message": "Oculta direcciones IP, dominios y otros valores sensibles.",
+ "description": "Helper text under the anonymization dropdown. The level details live in the info tooltip."
},
"settings.troubleshooting.anonymize.info": {
- "message": "El modo predeterminado mantiene legibles las direcciones IPv4 internas y los nombres de los peers para el soporte. El modo estricto anonimiza además las direcciones IP privadas (RFC 1918), CGNAT y de enlace local, los nombres de los peers y las claves públicas de WireGuard. Los valores recurrentes se asignan al mismo marcador de posición, por lo que los peers siguen siendo distinguibles. Use el modo estricto cuando comparta el paquete de diagnóstico fuera de su organización."
+ "message": "El modo predeterminado mantiene legibles las direcciones IPv4 internas y los nombres de los peers para el soporte. El modo estricto anonimiza además las direcciones IP privadas (RFC 1918), CGNAT y de enlace local, los nombres de los peers y las claves públicas de WireGuard. Los valores recurrentes se asignan al mismo marcador de posición, por lo que los peers siguen siendo distinguibles. Use el modo estricto cuando comparta el paquete de diagnóstico fuera de su organización.",
+ "description": "Info tooltip explaining the anonymization levels. 'RFC 1918', 'CGNAT', 'link-local', and 'WireGuard' are technical terms — keep them."
},
"settings.troubleshooting.anonymize.none": {
- "message": "Ninguno"
+ "message": "Ninguno",
+ "description": "Dropdown option: no anonymization."
},
"settings.troubleshooting.anonymize.default": {
- "message": "Predeterminado"
+ "message": "Predeterminado",
+ "description": "Dropdown option: default anonymization level."
},
"settings.troubleshooting.anonymize.strict": {
- "message": "Estricto"
+ "message": "Estricto",
+ "description": "Dropdown option: strict anonymization level."
},
"settings.troubleshooting.systemInfo.label": {
- "message": "Incluir información del sistema"
+ "message": "Incluir información del sistema",
+ "description": "Toggle label: include system information in the bundle."
},
"settings.troubleshooting.systemInfo.help": {
- "message": "Incluye el OS, el kernel, las interfaces de red y las tablas de enrutamiento."
+ "message": "Incluye el OS, el kernel, las interfaces de red y las tablas de enrutamiento.",
+ "description": "Helper text listing the system info included (OS, kernel, interfaces, routing tables)."
},
"settings.troubleshooting.upload.label": {
- "message": "Subir el paquete a los servidores de NetBird"
+ "message": "Subir el paquete a los servidores de NetBird",
+ "description": "Toggle label: upload the bundle to NetBird servers."
},
"settings.troubleshooting.upload.help": {
- "message": "Devuelve una clave de subida para compartir con el soporte de NetBird."
+ "message": "Devuelve una clave de subida para compartir con el soporte de NetBird.",
+ "description": "Helper text for uploading the bundle."
},
"settings.troubleshooting.trace.label": {
- "message": "Activar registros de seguimiento"
+ "message": "Activar registros de seguimiento",
+ "description": "Toggle label: raise daemon log level to TRACE while the bundle is built. 'TRACE' is a log level."
},
"settings.troubleshooting.trace.help": {
- "message": "Eleva el nivel de registro a TRACE y lo restaura después."
+ "message": "Eleva el nivel de registro a TRACE y lo restaura después.",
+ "description": "Helper text for the trace toggle. 'TRACE' is a log level — keep as-is."
},
"settings.troubleshooting.capture.label": {
- "message": "Sesión de captura"
+ "message": "Sesión de captura",
+ "description": "Toggle label: open a capture session — reconnect NetBird, wait a duration, optionally record packets."
},
"settings.troubleshooting.capture.help": {
- "message": "Vuelve a conectar y espera para que pueda reproducir el problema."
+ "message": "Vuelve a conectar y espera para que pueda reproducir el problema.",
+ "description": "Helper text for the master Capture Session toggle."
},
"settings.troubleshooting.packets.label": {
- "message": "Capturar paquetes de red"
+ "message": "Capturar paquetes de red",
+ "description": "Toggle label: capture packets to a .pcap during the capture session."
},
"settings.troubleshooting.packets.help": {
- "message": "Guarda un .pcap del tráfico de red durante la sesión de captura."
+ "message": "Guarda un .pcap del tráfico de red durante la sesión de captura.",
+ "description": "Helper text for the packet recording toggle. '.pcap' is a file extension — keep it."
},
"settings.troubleshooting.duration.label": {
- "message": "Duración de la captura"
+ "message": "Duración de la captura",
+ "description": "Label for the trace-capture duration field."
},
"settings.troubleshooting.duration.help": {
- "message": "Cuánto tiempo se ejecuta la sesión de captura."
+ "message": "Cuánto tiempo se ejecuta la sesión de captura.",
+ "description": "Helper text for the capture duration."
},
"settings.troubleshooting.duration.suffix": {
- "message": "min"
+ "message": "min",
+ "description": "Unit suffix after the duration field. The '(s)' marks an optional plural."
},
"settings.troubleshooting.create": {
- "message": "Crear paquete"
+ "message": "Crear paquete",
+ "description": "Button to create the debug bundle. Keep short."
},
"settings.troubleshooting.progress.description": {
- "message": "Recopilando registros, detalles del sistema y estado de la conexión. Esto suele tardar un momento; mantenga esta ventana abierta hasta que termine."
+ "message": "Recopilando registros, detalles del sistema y estado de la conexión. Esto suele tardar un momento; mantenga esta ventana abierta hasta que termine.",
+ "description": "Status text shown while the debug bundle is being collected; reassures the user they can keep using NetBird or close Settings meanwhile."
},
"settings.troubleshooting.cancelling": {
- "message": "Cancelando…"
+ "message": "Cancelando…",
+ "description": "Status shown while cancelling bundle creation. Ends with an ellipsis."
},
"settings.troubleshooting.done.uploadedTitle": {
- "message": "¡Paquete de diagnóstico subido correctamente!"
+ "message": "¡Paquete de diagnóstico subido correctamente!",
+ "description": "Success title after the bundle was uploaded."
},
"settings.troubleshooting.done.savedTitle": {
- "message": "Paquete guardado"
+ "message": "Paquete guardado",
+ "description": "Title shown when the bundle was saved locally (not uploaded)."
},
"settings.troubleshooting.done.uploadedDescription": {
- "message": "Comparta la clave de subida de abajo con el soporte de NetBird. También se guardó una copia local en su dispositivo."
+ "message": "Comparta la clave de subida de abajo con el soporte de NetBird. También se guardó una copia local en su dispositivo.",
+ "description": "Body after upload, telling the user to share the upload key with support. '…' wraps the inline link to the NetBird support docs — keep the tags exactly and wrap the phrase that means 'NetBird support'."
},
"settings.troubleshooting.done.savedDescription": {
- "message": "Su paquete de diagnóstico se ha guardado localmente."
+ "message": "Su paquete de diagnóstico se ha guardado localmente.",
+ "description": "Body shown when the bundle was only saved locally."
},
"settings.troubleshooting.done.copyKey": {
- "message": "Copiar clave"
+ "message": "Copiar clave",
+ "description": "Button to copy the upload key. Keep short."
},
"settings.troubleshooting.done.openFolder": {
- "message": "Abrir carpeta"
+ "message": "Abrir carpeta",
+ "description": "Button to open the folder containing the bundle. Keep short."
},
"settings.troubleshooting.done.openFileLocation": {
- "message": "Abrir ubicación del archivo"
+ "message": "Abrir ubicación del archivo",
+ "description": "Button to reveal the bundle file in the OS file manager."
},
"settings.troubleshooting.uploadFailedWithReason": {
- "message": "Error en la subida: {reason} El paquete sigue guardado localmente."
+ "message": "Error en la subida: {reason} El paquete sigue guardado localmente.",
+ "description": "Shown when upload failed but the bundle was saved locally. {reason} is the server error text; keep it."
},
"settings.troubleshooting.uploadFailed": {
- "message": "Error en la subida. El paquete sigue guardado localmente."
+ "message": "Error en la subida. El paquete sigue guardado localmente.",
+ "description": "Shown when upload failed (no specific reason) but the bundle was saved locally."
},
"settings.troubleshooting.stage.reconnecting": {
- "message": "Reconectando NetBird…"
+ "message": "Reconectando NetBird…",
+ "description": "Progress stage: reconnecting NetBird. Ends with an ellipsis."
},
"settings.troubleshooting.stage.capturing": {
- "message": "Capturando registros de depuración"
+ "message": "Capturando registros de depuración",
+ "description": "Progress stage: capturing logs. {elapsed} and {total} are time values (e.g. 0:30 / 2:00); keep both."
},
"settings.troubleshooting.stage.bundling": {
- "message": "Generando el paquete de diagnóstico…"
+ "message": "Generando el paquete de diagnóstico…",
+ "description": "Progress stage: generating the debug bundle. Ends with an ellipsis."
},
"settings.troubleshooting.stage.uploading": {
- "message": "Subiendo a NetBird…"
+ "message": "Subiendo a NetBird…",
+ "description": "Progress stage: uploading to NetBird. Ends with an ellipsis."
},
"settings.troubleshooting.stage.cancelling": {
- "message": "Cancelando…"
+ "message": "Cancelando…",
+ "description": "Progress stage: cancelling. Ends with an ellipsis."
},
"settings.about.client": {
- "message": "NetBird Client v{version}"
+ "message": "NetBird Client v{version}",
+ "description": "About tab: client product name and version. {version} is a version number; keep it. 'NetBird Client' — keep brand."
},
"settings.about.clientName": {
- "message": "NetBird Client"
+ "message": "NetBird Client",
+ "description": "About tab: the client product name shown when no version is available. Brand — do not translate."
},
"settings.about.development": {
- "message": "[Desarrollo]"
+ "message": "[Desarrollo]",
+ "description": "Badge shown next to the version on development builds. Keep the square brackets."
},
"settings.about.gui": {
- "message": "GUI v{version}"
+ "message": "GUI v{version}",
+ "description": "About tab: UI component name and version. {version} is a version number; keep it. 'GUI' = the graphical app."
},
"settings.about.guiName": {
- "message": "GUI"
+ "message": "GUI",
+ "description": "About tab: the UI component name shown without a version. 'GUI' = the graphical app."
},
"settings.about.copyright": {
- "message": "© {year} NetBird. Todos los derechos reservados."
+ "message": "© {year} NetBird. Todos los derechos reservados.",
+ "description": "Copyright line. {year} is the current year; keep it. 'NetBird' — brand."
},
"settings.about.links.imprint": {
- "message": "Aviso legal"
+ "message": "Aviso legal",
+ "description": "Footer link: Imprint (legal notice / Impressum)."
},
"settings.about.links.privacy": {
- "message": "Privacidad"
+ "message": "Privacidad",
+ "description": "Footer link: Privacy policy."
},
"settings.about.links.cla": {
- "message": "CLA"
+ "message": "CLA",
+ "description": "Footer link: CLA (Contributor License Agreement). Acronym — keep as-is."
},
"settings.about.links.terms": {
- "message": "Términos del servicio"
+ "message": "Términos del servicio",
+ "description": "Footer link: Terms of Service."
},
"settings.about.community.github": {
- "message": "GitHub"
+ "message": "GitHub",
+ "description": "Community link: GitHub. Brand — do not translate."
},
"settings.about.community.slack": {
- "message": "Slack"
+ "message": "Slack",
+ "description": "Community link: Slack. Brand — do not translate."
},
"settings.about.community.forum": {
- "message": "Foro"
+ "message": "Foro",
+ "description": "Community link: Forum."
},
"settings.about.community.documentation": {
- "message": "Documentación"
+ "message": "Documentación",
+ "description": "Community link: Documentation."
},
"settings.about.community.feedback": {
- "message": "Comentarios"
+ "message": "Comentarios",
+ "description": "Community link: Feedback."
},
"update.banner.message": {
- "message": "NetBird {version} está listo para instalar."
+ "message": "NetBird {version} está listo para instalar.",
+ "description": "Update banner text when a new version is ready to install. {version} is the version number; keep it."
},
"update.banner.later": {
- "message": "Más tarde"
+ "message": "Más tarde",
+ "description": "Banner button to postpone the update. Keep short."
},
"update.banner.installNow": {
- "message": "Instalar ahora"
+ "message": "Instalar ahora",
+ "description": "Banner button to install the update now. Keep short."
},
"update.card.versionAvailableDownload": {
- "message": "La versión {version} está disponible para descargar."
+ "message": "La versión {version} está disponible para descargar.",
+ "description": "Update card text when a version is available to download. {version} is the version number; keep it."
},
"update.card.versionAvailableInstall": {
- "message": "La versión {version} está disponible para instalar."
+ "message": "La versión {version} está disponible para instalar.",
+ "description": "Update card text when a version is available to install. {version} is the version number; keep it."
},
"update.card.whatsNew": {
- "message": "¿Qué hay de nuevo?"
+ "message": "¿Qué hay de nuevo?",
+ "description": "Link / label that opens the release notes."
},
"update.card.installNow": {
- "message": "Instalar ahora"
+ "message": "Instalar ahora",
+ "description": "Update card button: install now. Keep short."
},
"update.card.getInstaller": {
- "message": "Descargar"
+ "message": "Descargar",
+ "description": "Update card button: download the installer."
},
"update.card.autoCheckInterval": {
- "message": "NetBird busca actualizaciones en segundo plano."
+ "message": "NetBird busca actualizaciones en segundo plano.",
+ "description": "Note that NetBird checks for updates in the background."
},
"update.card.changelog": {
- "message": "Registro de cambios"
+ "message": "Registro de cambios",
+ "description": "Link / label: Changelog."
},
"update.card.onLatestVersion": {
- "message": "Tiene la última versión"
+ "message": "Tiene la última versión",
+ "description": "Shown when the client is already up to date."
},
"update.header.tooltip": {
- "message": "Actualización disponible"
+ "message": "Actualización disponible",
+ "description": "Tooltip on the header update badge."
},
"update.overlay.updatingVersion": {
- "message": "Actualizando NetBird a v{version}"
+ "message": "Actualizando NetBird a v{version}",
+ "description": "Heading in the install-progress window while updating to a specific version. {version} is the version number; keep it. The 'v' prefix is part of the version display."
},
"update.overlay.updating": {
- "message": "Actualizando NetBird"
+ "message": "Actualizando NetBird",
+ "description": "Heading in the install-progress window while updating when the target version isn't known."
},
"update.overlay.description": {
- "message": "Hay una versión más reciente disponible y se está instalando. NetBird se reiniciará automáticamente cuando finalice la actualización."
+ "message": "Hay una versión más reciente disponible y se está instalando. NetBird se reiniciará automáticamente cuando finalice la actualización.",
+ "description": "Install-progress window body explaining NetBird will restart automatically after the update."
},
"update.overlay.error.timeoutTitle": {
- "message": "La actualización está tardando demasiado"
+ "message": "La actualización está tardando demasiado",
+ "description": "Install-progress window error title: the update took too long."
},
"update.overlay.error.timeoutDescription": {
- "message": "La instalación de {target} tardó demasiado y no finalizó."
+ "message": "La instalación de {target} tardó demasiado y no finalizó.",
+ "description": "Install-progress window error body for a timeout. {target} is the target-version label (see update.overlay.error.targetVersion / targetFallback); keep it."
},
"update.overlay.error.canceledTitle": {
- "message": "La actualización se detuvo"
+ "message": "La actualización se detuvo",
+ "description": "Install-progress window error title: the update was stopped / canceled."
},
"update.overlay.error.canceledDescription": {
- "message": "La actualización a {target} se canceló antes de finalizar."
+ "message": "La actualización a {target} se canceló antes de finalizar.",
+ "description": "Install-progress window error body for a canceled update. {target} is the target-version label; keep it."
},
"update.overlay.error.failTitle": {
- "message": "No se pudo instalar la actualización"
+ "message": "No se pudo instalar la actualización",
+ "description": "Install-progress window error title: the update couldn't be installed."
},
"update.overlay.error.failDescription": {
- "message": "No se pudo instalar {target}."
+ "message": "No se pudo instalar {target}.",
+ "description": "Install-progress window error body for a failed install. {target} is the target-version label; keep it."
},
"update.overlay.error.unknownMessage": {
- "message": "error desconocido"
+ "message": "error desconocido",
+ "description": "Fallback text for an unspecified error, used inside other messages."
},
"update.overlay.error.targetVersion": {
- "message": "v{version}"
+ "message": "v{version}",
+ "description": "The target-version label substituted into {target}. {version} is a number; keep the 'v' prefix."
},
"update.overlay.error.targetFallback": {
- "message": "la nueva versión"
+ "message": "la nueva versión",
+ "description": "Fallback target label used when the version isn't known, substituted into {target}."
},
"update.error.loadStateTitle": {
- "message": "Error al cargar el estado de la actualización"
+ "message": "Error al cargar el estado de la actualización",
+ "description": "Error-dialog title when loading update state fails."
},
"update.error.triggerTitle": {
- "message": "Error al iniciar la actualización"
+ "message": "Error al iniciar la actualización",
+ "description": "Error-dialog title when starting the update fails."
},
"update.page.versionLine": {
- "message": "Actualizando el cliente a: {version}."
+ "message": "Actualizando el cliente a: {version}.",
+ "description": "Install-progress window text naming the target version. {version} is the version number; keep it."
},
"update.page.versionLineGeneric": {
- "message": "Actualizando el cliente."
+ "message": "Actualizando el cliente.",
+ "description": "Install-progress text used when the target version isn't known."
},
"update.page.outdated": {
- "message": "La versión de su cliente es anterior a la versión de actualización automática configurada en Management."
+ "message": "La versión de su cliente es anterior a la versión de actualización automática configurada en Management.",
+ "description": "Note that the client is older than the auto-update version set in Management. 'Management' = the NetBird management server / console."
},
"update.page.status.running": {
- "message": "Actualizando"
+ "message": "Actualizando",
+ "description": "Install status: updating."
},
"update.page.status.timeout": {
- "message": "Se agotó el tiempo de la actualización. Inténtelo de nuevo."
+ "message": "Se agotó el tiempo de la actualización. Inténtelo de nuevo.",
+ "description": "Install status: timed out; asks the user to retry."
},
"update.page.status.canceled": {
- "message": "Actualización cancelada."
+ "message": "Actualización cancelada.",
+ "description": "Install status: canceled."
},
"update.page.status.failed": {
- "message": "Error en la actualización: {message}"
+ "message": "Error en la actualización: {message}",
+ "description": "Install status: failed. {message} is the error detail; keep it."
},
"update.page.status.unknownError": {
- "message": "error de actualización desconocido"
+ "message": "error de actualización desconocido",
+ "description": "Fallback text for an unknown update error, used inside update.page.status.failed."
},
"update.page.failedTitle": {
- "message": "Error en la actualización"
+ "message": "Error en la actualización",
+ "description": "Heading shown when the install failed."
},
"update.page.timeoutMessage": {
- "message": "Se agotó el tiempo de la actualización."
+ "message": "Se agotó el tiempo de la actualización.",
+ "description": "Message shown when the install timed out."
},
"update.page.dontClose": {
- "message": "No cierre esta ventana."
+ "message": "No cierre esta ventana.",
+ "description": "Warning asking the user not to close the install window."
},
"update.page.updating": {
- "message": "Actualizando…"
+ "message": "Actualizando…",
+ "description": "Short status: updating. Ends with an ellipsis."
},
"update.page.complete": {
- "message": "Actualización completada"
+ "message": "Actualización completada",
+ "description": "Short status: update complete."
},
"update.page.failed": {
- "message": "Error en la actualización"
+ "message": "Error en la actualización",
+ "description": "Short status: update failed."
},
"window.title.settings": {
- "message": "Configuración"
+ "message": "Configuración",
+ "description": "OS window-chrome title for the Settings window. The app prefixes it with 'NetBird - '."
},
"window.title.signIn": {
- "message": "Inicio de sesión"
+ "message": "Inicio de sesión",
+ "description": "OS window-chrome title for the sign-in window."
},
"window.title.sessionExpiration": {
- "message": "Sesión a punto de expirar"
+ "message": "Sesión a punto de expirar",
+ "description": "OS window-chrome title for the session-expiration window."
},
"window.title.updating": {
- "message": "Actualizando"
+ "message": "Actualizando",
+ "description": "OS window-chrome title for the update / install window."
},
"window.title.welcome": {
- "message": "Bienvenido a NetBird"
+ "message": "Bienvenido a NetBird",
+ "description": "OS window-chrome title for the first-launch welcome window. 'NetBird' — brand."
},
"window.title.error": {
- "message": "Error"
+ "message": "Error",
+ "description": "OS window-chrome title for the error window."
},
"welcome.title": {
- "message": "Busque NetBird en su bandeja del sistema"
+ "message": "Busque NetBird en su bandeja del sistema",
+ "description": "Heading on the first onboarding step, pointing the user to the tray icon. Shown on Windows and Linux; macOS uses welcome.titleMac."
},
"welcome.titleMac": {
- "message": "Busque NetBird en su barra de menús"
+ "message": "Busque NetBird en su barra de menús",
+ "description": "Heading on the first onboarding step on macOS, pointing the user to the menu bar icon. Use your language's Apple term for the macOS menu bar."
},
"welcome.description": {
- "message": "NetBird reside en su bandeja del sistema. Haga clic en el icono para conectarse, cambiar de perfil o abrir la configuración."
+ "message": "NetBird reside en su bandeja del sistema. Haga clic en el icono para conectarse, cambiar de perfil o abrir la configuración.",
+ "description": "Body of the first onboarding step explaining the tray icon. Shown on Windows and Linux; macOS uses welcome.descriptionMac."
},
"welcome.descriptionMac": {
- "message": "NetBird reside en su barra de menús. Haga clic en el icono para conectarse, cambiar de perfil o abrir la configuración."
+ "message": "NetBird reside en su barra de menús. Haga clic en el icono para conectarse, cambiar de perfil o abrir la configuración.",
+ "description": "Body of the first onboarding step on macOS explaining the menu bar icon. Use your language's Apple term for the macOS menu bar."
},
"welcome.continue": {
- "message": "Continuar"
+ "message": "Continuar",
+ "description": "Primary button to advance the onboarding. Keep short."
},
"welcome.back": {
- "message": "Atrás"
+ "message": "Atrás",
+ "description": "Button to go back a step in onboarding. Keep short."
},
"welcome.management.title": {
- "message": "Configurar NetBird"
+ "message": "Configurar NetBird",
+ "description": "Heading on the onboarding step for choosing a management server."
},
"welcome.management.description": {
- "message": "Haga clic en Continuar para empezar, o elija Autoalojado si tiene su propio servidor de NetBird."
+ "message": "Haga clic en Continuar para empezar, o elija Autoalojado si tiene su propio servidor de NetBird.",
+ "description": "Body of the management step; mentions choosing Self-hosted if the user runs their own server."
},
"welcome.management.cloud.title": {
- "message": "NetBird Cloud"
+ "message": "NetBird Cloud",
+ "description": "Option title: NetBird Cloud. Brand — do not translate 'NetBird Cloud'."
},
"welcome.management.cloud.description": {
- "message": "Use nuestro servicio alojado. No requiere configuración."
+ "message": "Use nuestro servicio alojado. No requiere configuración.",
+ "description": "Option body for NetBird Cloud (hosted service, no setup required)."
},
"welcome.management.selfHosted.title": {
- "message": "Autoalojado"
+ "message": "Autoalojado",
+ "description": "Option title: Self-hosted."
},
"welcome.management.selfHosted.description": {
- "message": "Conéctese a su propio servidor de gestión."
+ "message": "Conéctese a su propio servidor de gestión.",
+ "description": "Option body for connecting to your own management server."
},
"welcome.management.urlLabel": {
- "message": "URL del servidor de gestión"
+ "message": "URL del servidor de gestión",
+ "description": "Field label for the management-server URL."
},
"welcome.management.urlPlaceholder": {
- "message": "https://netbird.selfhosted.com:443"
+ "message": "https://netbird.selfhosted.com:443",
+ "description": "Example URL placeholder. Sample URL — do not translate it."
},
"welcome.management.urlInvalid": {
- "message": "Introduzca una URL válida, p. ej., https://netbird.selfhosted.com:443"
+ "message": "Introduzca una URL válida, p. ej., https://netbird.selfhosted.com:443",
+ "description": "Validation message for an invalid URL. The example URL stays as-is."
},
"welcome.management.urlUnreachable": {
- "message": "No se pudo contactar con este servidor. Compruebe la URL o su red y, a continuación, continúe si está seguro de que es correcta."
+ "message": "No se pudo contactar con este servidor. Compruebe la URL o su red y, a continuación, continúe si está seguro de que es correcta.",
+ "description": "Soft warning when the server couldn't be reached during onboarding; the user may continue anyway."
},
"welcome.management.checking": {
- "message": "Comprobando…"
+ "message": "Comprobando…",
+ "description": "Status shown while checking the server URL. Ends with an ellipsis."
},
"browserLogin.title": {
- "message": "Continúe en su navegador para completar el inicio de sesión"
+ "message": "Continúe en su navegador para completar el inicio de sesión",
+ "description": "Heading telling the user to finish signing in via their browser."
},
"browserLogin.notSeeing": {
- "message": "¿No ve la pestaña del navegador?"
+ "message": "¿No ve la pestaña del navegador?",
+ "description": "Prompt asking whether the user doesn't see the opened browser tab."
},
"browserLogin.tryAgain": {
- "message": "Reintentar"
+ "message": "Reintentar",
+ "description": "Button to re-open the browser sign-in page. Keep short."
},
"browserLogin.openFailedTitle": {
- "message": "Error al abrir el navegador"
+ "message": "Error al abrir el navegador",
+ "description": "Error-dialog title when the browser couldn't be opened."
},
"sessionExpiration.title": {
- "message": "La sesión expira pronto"
+ "message": "La sesión expira pronto",
+ "description": "Heading warning the session will expire soon."
},
"sessionExpiration.titleLater": {
- "message": "Su sesión expirará"
+ "message": "Su sesión expirará",
+ "description": "Alternate, less-urgent heading: the session will expire."
},
"sessionExpiration.description": {
- "message": "Este dispositivo se desconectará pronto. Renuévela iniciando sesión en el navegador."
+ "message": "Este dispositivo se desconectará pronto. Renuévela iniciando sesión en el navegador.",
+ "description": "Body warning the device will disconnect soon; renew via a browser sign-in."
},
"sessionExpiration.descriptionLater": {
- "message": "Iniciar sesión en el navegador mantiene este dispositivo conectado a su red."
+ "message": "Iniciar sesión en el navegador mantiene este dispositivo conectado a su red.",
+ "description": "Body for the less-urgent variant; a browser sign-in keeps the device connected."
},
"sessionExpiration.stay": {
- "message": "Renovar sesión"
+ "message": "Renovar sesión",
+ "description": "Button to renew the session (keep connected). Keep short."
},
"sessionExpiration.authenticate": {
- "message": "Autenticar"
+ "message": "Autenticar",
+ "description": "Button to authenticate / sign in. Keep short."
},
"sessionExpiration.logout": {
- "message": "Cerrar sesión"
+ "message": "Cerrar sesión",
+ "description": "Button to log out. Keep short."
},
"sessionExpiration.expired": {
- "message": "Sesión expirada"
+ "message": "Sesión expirada",
+ "description": "Heading shown once the session has actually expired."
},
"sessionExpiration.expiredDescription": {
- "message": "Dispositivo desconectado. Autentíquese iniciando sesión en el navegador para reconectar."
+ "message": "Dispositivo desconectado. Autentíquese iniciando sesión en el navegador para reconectar.",
+ "description": "Body shown after expiry; authenticate via a browser sign-in to reconnect."
},
"sessionExpiration.close": {
- "message": "Cerrar"
+ "message": "Cerrar",
+ "description": "Close button on the session window. Keep short."
},
"sessionExpiration.extendFailedTitle": {
- "message": "Error al renovar la sesión"
+ "message": "Error al renovar la sesión",
+ "description": "Error-dialog title when extending the session fails."
},
"sessionExpiration.logoutFailedTitle": {
- "message": "Error al cerrar sesión"
+ "message": "Error al cerrar sesión",
+ "description": "Error-dialog title when logging out fails."
},
"peers.search.placeholder": {
- "message": "Buscar por nombre o IP"
+ "message": "Buscar por nombre o IP",
+ "description": "Placeholder in the peers search field."
},
"peers.filter.all": {
- "message": "Todos"
+ "message": "Todos",
+ "description": "Peers filter option: All. Keep short."
},
"peers.filter.online": {
- "message": "En línea"
+ "message": "En línea",
+ "description": "Peers filter option: Online. Keep short."
},
"peers.filter.offline": {
- "message": "Sin conexión"
+ "message": "Sin conexión",
+ "description": "Peers filter option: Offline. Keep short."
},
"peers.empty.title": {
- "message": "No hay peers disponibles"
+ "message": "No hay peers disponibles",
+ "description": "Title of the empty state when no peers are available."
},
"peers.empty.description": {
- "message": "No tiene ningún peer disponible o no tiene acceso a ninguno de ellos."
+ "message": "No tiene ningún peer disponible o no tiene acceso a ninguno de ellos.",
+ "description": "Body of the no-peers empty state."
},
"peers.details.domain": {
- "message": "Dominio"
+ "message": "Dominio",
+ "description": "Peer detail label: Domain."
},
"peers.details.netbirdIp": {
- "message": "IP de NetBird"
+ "message": "IP de NetBird",
+ "description": "Peer detail label: NetBird IP address. 'NetBird' — brand; 'IP' — keep acronym."
},
"peers.details.netbirdIpv6": {
- "message": "IPv6 de NetBird"
+ "message": "IPv6 de NetBird",
+ "description": "Peer detail label: NetBird IPv6 address. Keep 'NetBird' and 'IPv6'."
},
"peers.details.publicKey": {
- "message": "Clave pública"
+ "message": "Clave pública",
+ "description": "Peer detail label: WireGuard public key."
},
"peers.details.connection": {
- "message": "Conexión"
+ "message": "Conexión",
+ "description": "Peer detail label: Connection."
},
"peers.details.latency": {
- "message": "Latencia"
+ "message": "Latencia",
+ "description": "Peer detail label: Latency."
},
"peers.details.lastHandshake": {
- "message": "Último handshake"
+ "message": "Último handshake",
+ "description": "Peer detail label: time of the last WireGuard handshake."
},
"peers.details.statusSince": {
- "message": "Última actualización de la conexión"
+ "message": "Última actualización de la conexión",
+ "description": "Peer detail label: time since the last connection-status update."
},
"peers.details.bytes": {
- "message": "Bytes"
+ "message": "Bytes",
+ "description": "Peer detail label: Bytes (data transferred)."
},
"peers.details.bytesSent": {
- "message": "Enviados"
+ "message": "Enviados",
+ "description": "Peer detail label: bytes sent."
},
"peers.details.bytesReceived": {
- "message": "Recibidos"
+ "message": "Recibidos",
+ "description": "Peer detail label: bytes received."
},
"peers.details.localIce": {
- "message": "ICE local"
+ "message": "ICE local",
+ "description": "Peer detail label: local ICE candidate. 'ICE' — keep acronym."
},
"peers.details.remoteIce": {
- "message": "ICE remoto"
+ "message": "ICE remoto",
+ "description": "Peer detail label: remote ICE candidate. 'ICE' — keep acronym."
},
"peers.details.never": {
- "message": "Nunca"
+ "message": "Nunca",
+ "description": "Value shown when an event has never happened (e.g. last handshake = Never)."
},
"peers.details.justNow": {
- "message": "Justo ahora"
+ "message": "Justo ahora",
+ "description": "Relative-time value meaning a moment ago."
},
"peers.details.refresh": {
- "message": "Actualizar"
+ "message": "Actualizar",
+ "description": "Button to refresh peer details. Keep short."
},
"peers.status.connected": {
- "message": "Conectado"
+ "message": "Conectado",
+ "description": "Peer status: connected."
},
"peers.status.connecting": {
- "message": "Conectando"
+ "message": "Conectando",
+ "description": "Peer status: connecting."
},
"peers.status.disconnected": {
- "message": "Desconectado"
+ "message": "Desconectado",
+ "description": "Peer status: disconnected."
},
"peers.details.relayAddress": {
- "message": "Relay"
+ "message": "Relay",
+ "description": "Peer detail label: Relay (relay-server address)."
},
"peers.details.networks": {
- "message": "Recursos"
+ "message": "Recursos",
+ "description": "Peer detail label for the peer's network resources. Labelled 'Resources' in the UI."
},
"peers.details.relayed": {
- "message": "Retransmitida"
+ "message": "Retransmitida",
+ "description": "Connection-type value: the connection is relayed (not direct). Technical term."
},
"peers.details.p2p": {
- "message": "P2P"
+ "message": "P2P",
+ "description": "Connection-type value: peer-to-peer (direct). 'P2P' — keep as-is."
},
"peers.details.rosenpass": {
- "message": "Rosenpass habilitado"
+ "message": "Rosenpass habilitado",
+ "description": "Peer detail indicating Rosenpass (quantum-resistance) is enabled. 'Rosenpass' — product name, do not translate."
},
"networks.search.placeholder": {
- "message": "Buscar por red o dominio"
+ "message": "Buscar por red o dominio",
+ "description": "Placeholder in the resources search field."
},
"networks.filter.all": {
- "message": "Todos"
+ "message": "Todos",
+ "description": "Resources filter: All. Keep short."
},
"networks.filter.active": {
- "message": "Activos"
+ "message": "Activos",
+ "description": "Resources filter: Active. Keep short."
},
"networks.filter.overlapping": {
- "message": "Solapados"
+ "message": "Solapados",
+ "description": "Resources filter: Overlapping (overlapping IP ranges). Keep short."
},
"networks.empty.title": {
- "message": "No hay recursos disponibles"
+ "message": "No hay recursos disponibles",
+ "description": "Title of the empty state when no resources are available."
},
"networks.empty.description": {
- "message": "No tiene ningún recurso de red disponible o no tiene acceso a ninguno de ellos."
+ "message": "No tiene ningún recurso de red disponible o no tiene acceso a ninguno de ellos.",
+ "description": "Body of the no-resources empty state."
},
"networks.selected": {
- "message": "Seleccionado"
+ "message": "Seleccionado",
+ "description": "Label / badge: the resource is selected (enabled)."
},
"networks.unselected": {
- "message": "No seleccionado"
+ "message": "No seleccionado",
+ "description": "Label / badge: the resource is not selected."
},
"networks.ips.heading": {
- "message": "IP resueltas"
+ "message": "IP resueltas",
+ "description": "Heading for the list of a resource's resolved IP addresses."
},
"networks.bulk.selectionCount": {
- "message": "{selected} de {total} activos"
+ "message": "{selected} de {total} activos",
+ "description": "Header showing how many resources are active. {selected} and {total} are numbers; keep both."
},
"networks.bulk.enableAll": {
- "message": "Habilitar todos"
+ "message": "Habilitar todos",
+ "description": "Button to enable all resources. Keep short."
},
"networks.bulk.disableAll": {
- "message": "Deshabilitar todos"
+ "message": "Deshabilitar todos",
+ "description": "Button to disable all resources. Keep short."
},
"exitNodes.search.placeholder": {
- "message": "Buscar nodos de salida"
+ "message": "Buscar nodos de salida",
+ "description": "Placeholder in the exit-nodes search field."
},
"exitNodes.none": {
- "message": "Ninguno"
+ "message": "Ninguno",
+ "description": "Option meaning no exit node. Keep short."
},
"exitNodes.empty.title": {
- "message": "No hay nodos de salida disponibles"
+ "message": "No hay nodos de salida disponibles",
+ "description": "Title of the empty state when no exit nodes are available."
},
"exitNodes.empty.description": {
- "message": "No se ha compartido ningún nodo de salida con este peer."
+ "message": "No se ha compartido ningún nodo de salida con este peer.",
+ "description": "Body of the no-exit-nodes empty state."
},
"exitNodes.card.title": {
- "message": "Nodo de salida"
+ "message": "Nodo de salida",
+ "description": "Card heading: Exit Node."
},
"exitNodes.card.statusActive": {
- "message": "Activo"
+ "message": "Activo",
+ "description": "Exit node card status: Active."
},
"exitNodes.card.statusInactive": {
- "message": "Inactivo"
+ "message": "Inactivo",
+ "description": "Exit node card status: Inactive."
},
"exitNodes.dropdown.noneTitle": {
- "message": "Ninguno"
+ "message": "Ninguno",
+ "description": "Dropdown option title: None (no exit node)."
},
"exitNodes.dropdown.noneDescription": {
- "message": "Conexión directa sin nodo de salida"
+ "message": "Conexión directa sin nodo de salida",
+ "description": "Dropdown option body for None: direct connection without an exit node."
},
"quickActions.connect": {
- "message": "Conectar"
+ "message": "Conectar",
+ "description": "Quick-action button: Connect. Keep short."
},
"quickActions.disconnect": {
- "message": "Desconectar"
+ "message": "Desconectar",
+ "description": "Quick-action button: Disconnect. Keep short."
},
"daemon.unavailable.title": {
- "message": "El servicio de NetBird no está en ejecución"
+ "message": "El servicio de NetBird no está en ejecución",
+ "description": "Title of the overlay shown when the NetBird background service isn't running."
},
"daemon.unavailable.description": {
- "message": "La aplicación se reconectará automáticamente cuando el servicio esté en ejecución."
+ "message": "La aplicación se reconectará automáticamente cuando el servicio esté en ejecución.",
+ "description": "Body reassuring the user the app will reconnect once the service is running."
},
"daemon.unavailable.docsLink": {
- "message": "Documentación"
+ "message": "Documentación",
+ "description": "Documentation link on the daemon-unavailable overlay."
},
"daemon.outdated.title": {
- "message": "NetBird Client está desactualizado"
+ "message": "NetBird Client está desactualizado",
+ "description": "Title of the overlay shown when the NetBird client (daemon) is too old to drive this UI."
},
"daemon.outdated.description": {
- "message": "La nueva GUI no es compatible con su cliente anterior. Actualice su cliente para usar la nueva aplicación."
+ "message": "La nueva GUI no es compatible con su cliente anterior. Actualice su cliente para usar la nueva aplicación.",
+ "description": "Body of the daemon-outdated overlay explaining that the GUI is newer than the client and the client must be updated."
},
"daemon.outdated.download": {
- "message": "Descargar la última versión"
+ "message": "Descargar la última versión",
+ "description": "Button on the daemon-outdated overlay that opens the download page for the latest release."
},
"error.jwt_clock_skew": {
- "message": "Error al iniciar sesión: el reloj de este dispositivo no está sincronizado con el servidor. Sincronice el reloj del sistema e inténtelo de nuevo."
+ "message": "Error al iniciar sesión: el reloj de este dispositivo no está sincronizado con el servidor. Sincronice el reloj del sistema e inténtelo de nuevo.",
+ "description": "Sign-in error shown to the user: the device clock is out of sync with the server."
},
"error.jwt_expired": {
- "message": "Su token de inicio de sesión ha expirado. Inicie sesión de nuevo."
+ "message": "Su token de inicio de sesión ha expirado. Inicie sesión de nuevo.",
+ "description": "Sign-in error: the sign-in token expired; sign in again."
},
"error.jwt_signature_invalid": {
- "message": "Error al iniciar sesión: la firma del token no es válida. Póngase en contacto con su administrador."
+ "message": "Error al iniciar sesión: la firma del token no es válida. Póngase en contacto con su administrador.",
+ "description": "Sign-in error: the token signature is invalid; contact the administrator."
},
"error.session_expired": {
- "message": "Su sesión ha expirado. Inicie sesión de nuevo."
+ "message": "Su sesión ha expirado. Inicie sesión de nuevo.",
+ "description": "Error: the session expired; sign in again."
},
"error.invalid_setup_key": {
- "message": "La clave de instalación falta o no es válida."
+ "message": "La clave de instalación falta o no es válida.",
+ "description": "Error: the setup key is missing or invalid. 'setup key' is a NetBird term."
},
"error.permission_denied": {
- "message": "El servidor rechazó el inicio de sesión."
+ "message": "El servidor rechazó el inicio de sesión.",
+ "description": "Error: the server rejected the sign-in."
},
"error.daemon_unreachable": {
- "message": "El daemon de NetBird no responde. Compruebe que el servicio esté en ejecución."
+ "message": "El daemon de NetBird no responde. Compruebe que el servicio esté en ejecución.",
+ "description": "Error: the NetBird background service isn't responding. 'daemon' = the background service."
},
"error.settings_locked": {
- "message": "La configuración no se puede cambiar en este dispositivo: un administrador la ha bloqueado."
+ "message": "La configuración no se puede cambiar en este dispositivo: un administrador la ha bloqueado.",
+ "description": "Error: the local daemon was started with update-settings disabled, so it refuses configuration changes."
},
"error.settings_managed_by_mdm": {
- "message": "Esta configuración está gestionada por su organización y no se puede cambiar."
+ "message": "Esta configuración está gestionada por su organización y no se puede cambiar.",
+ "description": "Error: the setting is enforced by an MDM policy. 'MDM' = mobile device management, the organization's device-management system."
},
"error.unknown": {
- "message": "La operación falló."
+ "message": "La operación falló.",
+ "description": "Generic fallback error message used when no specific error applies."
},
"error.elevation_unavailable": {
- "message": "NetBird no pudo solicitar a este sistema los privilegios necesarios. Ejecute esto en su lugar:"
+ "message": "NetBird no pudo solicitar a este sistema los privilegios necesarios. Ejecute esto en su lugar:",
+ "description": "Error: this computer has no way to prompt for elevated privileges. Followed by a copyable command that applies the setting from a terminal."
},
"error.elevation_failed": {
- "message": "No se pudo aplicar el cambio con privilegios elevados. Ejecute esto en su lugar:"
+ "message": "No se pudo aplicar el cambio con privilegios elevados. Ejecute esto en su lugar:",
+ "description": "Error: the authorization succeeded but applying the setting afterwards failed. Followed by a copyable command that applies the setting from a terminal."
},
"settings.ssh.privilege.actorRoot": {
- "message": "privilegios de root"
+ "message": "privilegios de root",
+ "description": "Fills {actor} in the settings.ssh.privilege.* messages on Linux, macOS and BSD, where the daemon requires the root account. 'root' is an account name and stays as it is; add the word for privileges or rights around it if the sentence needs one to read naturally."
},
"settings.ssh.privilege.actorAdministrator": {
- "message": "privilegios de administrador"
+ "message": "privilegios de administrador",
+ "description": "Fills {actor} in the settings.ssh.privilege.* messages on Windows, where the daemon requires an elevated administrator. The Windows term for the rights an account is asked to elevate to."
},
"settings.ssh.privilege.hint": {
- "message": "Requiere {actor}. Ejecute esto en su lugar:"
+ "message": "Requiere {actor}. Ejecute esto en su lugar:",
+ "description": "Help text under an SSH setting the user cannot change: it needs elevated privileges. {actor} is 'root' on Linux/macOS or 'administrator privileges' on Windows. Followed by a copyable command."
},
"settings.ssh.privilege.oneWay": {
- "message": "Puede desactivarlo, pero volver a activarlo requiere {actor}."
+ "message": "Puede desactivarlo, pero volver a activarlo requiere {actor}.",
+ "description": "Help text under an SSH setting that is already on: an unprivileged user may switch it off freely, and switching it on again is what needs the privileges. No command follows, since the direction they can take is theirs to take. {actor} is 'root' on Linux/macOS or 'administrator privileges' on Windows."
},
"settings.ssh.privilege.oneWayInverted": {
- "message": "Puede activarlo, pero volver a desactivarlo requiere {actor}."
+ "message": "Puede activarlo, pero volver a desactivarlo requiere {actor}.",
+ "description": "Same as settings.ssh.privilege.oneWay, for the SSH authentication setting once it has been switched off: switching it off again is what needs the privileges."
},
"settings.ssh.privilege.authorizePending": {
- "message": "Esperando la autorización…"
+ "message": "Esperando la autorización…",
+ "description": "Replaces the help text under a guarded SSH setting while the authorization prompt is open, which can take a few seconds to appear. Keep the trailing ellipsis."
}
}