From ec08e31eb753eaa4bcaf53f10d8b88e89d944821 Mon Sep 17 00:00:00 2001 From: Leandre Chamberland-Dozois Date: Tue, 31 Mar 2026 13:49:53 -0400 Subject: [PATCH] feat(frontend): add confirmation dialog before deleting users, peers, and interfaces (#654) * feat(frontend): add confirmation dialog before deleting users, peers, and interfaces (#652) Add a browser confirm() dialog to the delete functions in UserEditModal, PeerEditModal, and InterfaceEditModal to prevent accidental deletions. The bulk-delete actions in UserView already had this protection; this change brings single-item deletion in line with that behavior. Translation keys (confirm-delete) added for all 10 supported locales: de, en, es, fr, ko, pt, ru, uk, vi, zh. Signed-off-by: LeC-D * fix broken translation files --------- Signed-off-by: LeC-D Co-authored-by: Christoph Haas --- .../src/components/InterfaceEditModal.vue | 1 + frontend/src/components/PeerEditModal.vue | 1 + frontend/src/components/UserEditModal.vue | 1 + frontend/src/lang/translations/de.json | 9 +- frontend/src/lang/translations/en.json | 38 +- frontend/src/lang/translations/es.json | 1273 +++++++++-------- frontend/src/lang/translations/fr.json | 13 +- frontend/src/lang/translations/ko.json | 7 +- frontend/src/lang/translations/pt.json | 9 +- frontend/src/lang/translations/ru.json | 37 +- frontend/src/lang/translations/uk.json | 11 +- frontend/src/lang/translations/vi.json | 10 +- frontend/src/lang/translations/zh.json | 7 +- 13 files changed, 722 insertions(+), 695 deletions(-) diff --git a/frontend/src/components/InterfaceEditModal.vue b/frontend/src/components/InterfaceEditModal.vue index 4b3dc4d..65f5a94 100644 --- a/frontend/src/components/InterfaceEditModal.vue +++ b/frontend/src/components/InterfaceEditModal.vue @@ -315,6 +315,7 @@ async function applyPeerDefaults() { async function del() { if (isDeleting.value) return + if (!confirm(t('modals.interface-edit.confirm-delete', {id: selectedInterface.value.Identifier}))) return isDeleting.value = true try { await interfaces.DeleteInterface(selectedInterface.value.Identifier) diff --git a/frontend/src/components/PeerEditModal.vue b/frontend/src/components/PeerEditModal.vue index 10d0559..08dbf72 100644 --- a/frontend/src/components/PeerEditModal.vue +++ b/frontend/src/components/PeerEditModal.vue @@ -294,6 +294,7 @@ async function save() { async function del() { if (isDeleting.value) return + if (!confirm(t('modals.peer-edit.confirm-delete', {id: selectedPeer.value.Identifier}))) return isDeleting.value = true try { await peers.DeletePeer(selectedPeer.value.Identifier) diff --git a/frontend/src/components/UserEditModal.vue b/frontend/src/components/UserEditModal.vue index 2a2bf8d..01446a5 100644 --- a/frontend/src/components/UserEditModal.vue +++ b/frontend/src/components/UserEditModal.vue @@ -114,6 +114,7 @@ async function save() { async function del() { if (isDeleting.value) return + if (!confirm(t('modals.user-edit.confirm-delete', {id: selectedUser.value.Identifier}))) return isDeleting.value = true try { await users.DeleteUser(selectedUser.value.Identifier) diff --git a/frontend/src/lang/translations/de.json b/frontend/src/lang/translations/de.json index 7977809..20c42f5 100644 --- a/frontend/src/lang/translations/de.json +++ b/frontend/src/lang/translations/de.json @@ -382,7 +382,8 @@ "persist-local-changes": { "label": "Lokale Änderungen speichern" }, - "sync-warning": "Um diesen synchronisierten Benutzer zu bearbeiten, aktivieren Sie die lokale Änderungsspeicherung. Andernfalls werden Ihre Änderungen bei der nächsten Synchronisierung überschrieben." + "sync-warning": "Um diesen synchronisierten Benutzer zu bearbeiten, aktivieren Sie die lokale Änderungsspeicherung. Andernfalls werden Ihre Änderungen bei der nächsten Synchronisierung überschrieben.", + "confirm-delete": "Benutzer '{id}' wirklich löschen?" }, "interface-view": { "headline": "Konfiguration für Schnittstelle:" @@ -503,7 +504,8 @@ "placeholder": "Persistentes Keepalive (0 = Standard)" } }, - "button-apply-defaults": "Peer-Standardeinstellungen anwenden" + "button-apply-defaults": "Peer-Standardeinstellungen anwenden", + "confirm-delete": "Interface '{id}' wirklich löschen?" }, "peer-view": { "headline-peer": "Peer:", @@ -625,7 +627,8 @@ }, "expires-at": { "label": "Ablaufdatum" - } + }, + "confirm-delete": "Peer '{id}' wirklich löschen?" }, "peer-multi-create": { "headline-peer": "Mehrere Peers erstellen", diff --git a/frontend/src/lang/translations/en.json b/frontend/src/lang/translations/en.json index f1c96ca..2e93614 100644 --- a/frontend/src/lang/translations/en.json +++ b/frontend/src/lang/translations/en.json @@ -271,16 +271,16 @@ "headline-preshared-key": "New Preshared Key", "button-generate": "Generate", "private-key": { - "label": "Private Key", - "placeholder": "The private key" + "label": "Private Key", + "placeholder": "The private key" }, "public-key": { - "label": "Public Key", - "placeholder": "The public key" + "label": "Public Key", + "placeholder": "The public key" }, "preshared-key": { - "label": "Preshared Key", - "placeholder": "The pre-shared key" + "label": "Preshared Key", + "placeholder": "The pre-shared key" } }, "calculator": { @@ -289,18 +289,18 @@ "headline-allowed-ip": "New Allowed IPs", "button-exclude-private": "Exclude Private IP Ranges", "allowed-ip": { - "label": "Allowed IPs", - "placeholder": "0.0.0.0/0, ::/0", - "empty": "Value cannot be empty" + "label": "Allowed IPs", + "placeholder": "0.0.0.0/0, ::/0", + "empty": "Value cannot be empty" }, "dissallowed-ip": { - "label": "Disallowed IPs", - "placeholder": "10.0.0.0/8, 192.168.0.0/16", - "invalid": "Invalid address: {addr}" + "label": "Disallowed IPs", + "placeholder": "10.0.0.0/8, 192.168.0.0/16", + "invalid": "Invalid address: {addr}" }, "new-allowed-ip": { - "label": "Allowed IPs", - "placeholder": "" + "label": "Allowed IPs", + "placeholder": "" } }, "modals": { @@ -382,7 +382,8 @@ "persist-local-changes": { "label": "Persist local changes" }, - "sync-warning": "To modify this synchronized user, enable local change persistence. Otherwise, your changes will be overwritten during the next synchronization." + "sync-warning": "To modify this synchronized user, enable local change persistence. Otherwise, your changes will be overwritten during the next synchronization.", + "confirm-delete": "Are you sure you want to delete user '{id}'?" }, "interface-view": { "headline": "Config for Interface:" @@ -503,8 +504,8 @@ "placeholder": "Persistent Keepalive (0 = default)" } }, - - "button-apply-defaults": "Apply Peer Defaults" + "button-apply-defaults": "Apply Peer Defaults", + "confirm-delete": "Are you sure you want to delete interface '{id}'?" }, "peer-view": { "headline-peer": "Peer:", @@ -626,7 +627,8 @@ }, "expires-at": { "label": "Expiry date" - } + }, + "confirm-delete": "Are you sure you want to delete peer '{id}'?" }, "peer-multi-create": { "headline-peer": "Create multiple peers", diff --git a/frontend/src/lang/translations/es.json b/frontend/src/lang/translations/es.json index c24795a..e5974d2 100644 --- a/frontend/src/lang/translations/es.json +++ b/frontend/src/lang/translations/es.json @@ -1,635 +1,638 @@ -{ - "languages": { - "es": "Español" - }, - "calculator": { - "abstract": "Genera direcciones IP permitidas de WireGuard. Las subredes IP se generan en tu navegador local y nunca se envían al servidor.", - "allowed-ip": { - "empty": "El valor no puede estar vacío", - "label": "IPs permitidas", - "placeholder": "0.0.0.0/0, ::/0" - }, - "button-exclude-private": "Excluir rangos de IP privadas", - "dissallowed-ip": { - "invalid": "Dirección inválida: {addr}", - "label": "IPs no permitidas", - "placeholder": "10.0.0.0/8, 192.168.0.0/16" - }, - "headline": "Calculadora de IPs de WireGuard", - "headline-allowed-ip": "Nuevas IPs permitidas", - "new-allowed-ip": { - "label": "IPs permitidas", - "placeholder": "" - } - }, - "general": { - "pagination": { - "size": "Numero de elementos", - "all": "Todos (Lento)" - }, - "search": { - "placeholder": "Buscar...", - "button": "Buscar" - }, - "select-all": "Buscar todos", - "yes": "Sí", - "no": "No", - "cancel": "Cancelar", - "close": "Cerrar", - "save": "Guardar", - "delete": "Eliminar" - }, - "login": { - "headline": "Por favor inicie sesión", - "username": { - "label": "Usuario", - "placeholder": "Por favor ingrese su usuario" - }, - "password": { - "label": "Contraseña", - "placeholder": "Por favor ingrese su contraseña" - }, - "button": "Ingresar", - "button-webauthn": "Usar clave de acceso" - }, - "menu": { - "calculator": "Calculadora IP", - "home": "Inicio", - "interfaces": "Interfaces", - "users": "Usuarios", - "lang": "Cambiar idioma", - "profile": "Mi perfil", - "settings": "Configuración", - "audit": "Registro de auditoría", - "login": "Iniciar sesión", - "logout": "Cerrar sesión", - "keygen": "Generador de claves" - }, - "home": { - "headline": "Portal VPN WireGuard®", - "info-headline": "Más información", - "abstract": "WireGuard® es una VPN extremadamente simple pero rápida y moderna que utiliza criptografía de última generación. Su objetivo es ser más rápida, simple, ligera y útil que IPsec, a la vez que evita los enormes problemas que supone. Su objetivo es ofrecer un rendimiento considerablemente superior al de OpenVPN.", - "installation": { - "box-header": "Instalación de WireGuard", - "headline": "Instalación", - "content": "Las instrucciones de instalación del cliente se pueden encontrar en el sitio web oficial de WireGuard.", - "button": "Abrir instrucciones" - }, - "about-wg": { - "box-header": "Acerca de WireGuard", - "headline": "Acerca de", - "content": "WireGuard® es una VPN extremadamente simple pero rápida y moderna que utiliza criptografía de última generación.", - "button": "Más" - }, - "about-portal": { - "box-header": "Acerca del Portal WireGuard", - "headline": "Portal WireGuard", - "content": "WireGuard Portal es un portal web simple para la configuración de WireGuard.", - "button": "Más" - }, - "profiles": { - "headline": "Perfiles VPN", - "abstract": "Puedes acceder y descargar tus configuraciones personales de VPN desde tu perfil de usuario.", - "content": "Para ver todos tus perfiles configurados, haz clic en el botón de abajo.", - "button": "Abrir mi perfil" - }, - "admin": { - "headline": "Área de administración", - "abstract": "En el área de administración puedes gestionar los peers de WireGuard, la interfaz del servidor, así como los usuarios que tienen acceso al Portal WireGuard.", - "content": "", - "button-admin": "Abrir administración del servidor", - "button-user": "Abrir administración de usuarios" - } - }, - "interfaces": { - "headline": "Administración de interfaces", - "headline-peers": "Peers VPN actuales", - "headline-endpoints": "Extremos actuales", - "no-interface": { - "default-selection": "No hay interfaces disponibles", - "headline": "No se encontraron interfaces...", - "abstract": "Haz clic en el botón + para crear una nueva interfaz WireGuard." - }, - "no-peer": { - "headline": "No hay peers disponibles", - "abstract": "Actualmente no hay peers disponibles para la interfaz WireGuard seleccionada." - }, - "table-heading": { - "name": "Nombre", - "user": "Usuario", - "ip": "IPs", - "endpoint": "Endpoint", - "status": "Estado" - }, - "interface": { - "headline": "Estado de la interfaz para", - "backend": "Backend", - "unknown-backend": "Desconocido", - "wrong-backend": "Backend inválido, usando backend local de WireGuard en su lugar.", - "key": "Clave pública", - "endpoint": "Endpoint público", - "port": "Puerto de escucha", - "peers": "Peers habilitados", - "total-peers": "Peers totales", - "endpoints": "Endpoints habilitados", - "total-endpoints": "Endpoints totales", - "ip": "Dirección IP", - "default-allowed-ip": "IPs permitidas por defecto", - "default-dns": "Servidores DNS por defecto", - "dns": "Servidores DNS", - "mtu": "MTU", - "default-keep-alive": "Intervalo Keepalive por defecto", - "button-show-config": "Mostrar configuración", - "button-download-config": "Descargar configuración", - "button-store-config": "Guardar configuración para wg-quick", - "button-edit": "Editar interfaz" - }, - "button-add-interface": "Agregar interfaz", - "button-add-peer": "Agregar peer", - "button-add-peers": "Agregar múltiples peers", - "button-show-peer": "Mostrar peer", - "button-edit-peer": "Editar peer", - "peer-disabled": "Peer deshabilitado, motivo:", - "peer-expiring": "El peer expira en", - "peer-connected": "Conectado", - "peer-not-connected": "No conectado", - "peer-handshake": "Último handshake:" - }, - "users": { - "headline": "Administración de usuarios", - "table-heading": { - "id": "ID", - "email": "Correo electrónico", - "firstname": "Nombre", - "lastname": "Apellido", - "sources": "Origen", - "peers": "Peers", - "admin": "Administrador" - }, - "no-user": { - "headline": "No hay usuarios disponibles", - "abstract": "Actualmente no hay usuarios registrados en el Portal WireGuard." - }, - "button-add-user": "Agregar usuario", - "button-show-user": "Mostrar usuario", - "button-edit-user": "Editar usuario", - "user-disabled": "Usuario deshabilitado, motivo:", - "user-locked": "Cuenta bloqueada, motivo:", - "admin": "El usuario tiene privilegios de administrador", - "no-admin": "El usuario no tiene privilegios de administrador" - }, - "profile": { - "headline": "Mis peers VPN", - "table-heading": { - "name": "Nombre", - "ip": "IPs", - "stats": "Estado", - "interface": "Interfaz del servidor" - }, - "no-peer": { - "headline": "No hay peers disponibles", - "abstract": "Actualmente no hay peers asociados a tu perfil de usuario." - }, - "peer-connected": "Conectado", - "button-add-peer": "Agregar peer", - "button-show-peer": "Mostrar peer", - "button-edit-peer": "Editar peer" - }, - "settings": { - "headline": "Configuración", - "abstract": "Aquí puedes cambiar tu configuración personal.", - "api": { - "headline": "Configuración de API", - "abstract": "Aquí puedes configurar los ajustes de la API RESTful.", - "active-description": "La API está actualmente activa para tu cuenta. Todas las solicitudes están autenticadas con Basic Auth. Usa las siguientes credenciales.", - "inactive-description": "La API está actualmente inactiva. Presiona el botón de abajo para activarla.", - "user-label": "Usuario de la API:", - "user-placeholder": "Usuario de la API", - "token-label": "Contraseña de la API:", - "token-placeholder": "Token de la API", - "token-created-label": "Acceso API concedido en: ", - "button-disable-title": "Desactivar API, invalidará el token actual.", - "button-disable-text": "Desactivar API", - "button-enable-title": "Activar API, generará un nuevo token.", - "button-enable-text": "Activar API", - "api-link": "Documentación de API" - }, - "webauthn": { - "headline": "Configuración de llave de acceso", - "abstract": "Las llaves de acceso son una forma moderna de autenticar usuarios sin necesidad de contraseñas. Se almacenan de forma segura en tu navegador y pueden usarse para iniciar sesión en el Portal WireGuard.", - "active-description": "Al menos una llave de acceso está activa en tu cuenta.", - "inactive-description": "Actualmente no hay llaves de acceso registradas. Presiona el botón de abajo para registrar una.", - "table": { - "name": "Nombre", - "created": "Creada", - "actions": "" - }, - "credentials-list": "Llaves de acceso registradas actualmente", - "modal-delete": { - "headline": "Eliminar llaves de acceso", - "abstract": "¿Seguro que deseas eliminar esta llave de acceso? Ya no podrás usarla para iniciar sesión.", - "created": "Creada:", - "button-delete": "Eliminar", - "button-cancel": "Cancelar" - }, - "button-rename-title": "Renombrar", - "button-rename-text": "Renombrar la llave de acceso.", - "button-save-title": "Guardar", - "button-save-text": "Guardar el nuevo nombre de la llave de acceso.", - "button-cancel-title": "Cancelar", - "button-cancel-text": "Cancelar el renombrado de la llave de acceso.", - "button-delete-title": "Eliminar", - "button-delete-text": "Eliminar la llave de acceso. Ya no podrás iniciar sesión con ella.", - "button-register-title": "Registrar llave de acceso", - "button-register-text": "Registrar una nueva llave de acceso para proteger tu cuenta." - }, - "password": { - "headline": "Configuración de contraseña", - "abstract": "Aquí puedes cambiar tu contraseña.", - "current-label": "Contraseña actual", - "new-label": "Nueva contraseña", - "new-confirm-label": "Confirmar nueva contraseña", - "change-button-text": "Cambiar contraseña", - "invalid-confirm-label": "Las contraseñas no coinciden", - "weak-label": "La contraseña es demasiado débil" - } - }, - "audit": { - "headline": "Registro de Auditoría", - "abstract": "Aquí puedes encontrar el registro de auditoría de todas las acciones realizadas en el Portal WireGuard.", - "no-entries": { - "headline": "No hay entradas en el registro", - "abstract": "Actualmente no se han registrado auditorías." - }, - "entries-headline": "Entradas del Registro", - "table-heading": { - "id": "#", - "time": "Hora", - "user": "Usuario", - "severity": "Severidad", - "origin": "Origen", - "message": "Mensaje" - } - }, - "keygen": { - "headline": "Generador de claves WireGuard", - "abstract": "Genera nuevas claves de WireGuard. Las claves se generan en tu navegador local y nunca se envían al servidor.", - "headline-keypair": "Nuevo par de claves", - "headline-preshared-key": "Nueva clave pre-compartida", - "button-generate": "Generar", - "private-key": { - "label": "Clave privada", - "placeholder": "La clave privada" - }, - "public-key": { - "label": "Clave pública", - "placeholder": "La clave pública" - }, - "preshared-key": { - "label": "Clave pre-compartida", - "placeholder": "La clave pre-compartida" - } - }, - "modals": { - "user-view": { - "headline": "Cuenta de Usuario:", - "tab-user": "Información", - "tab-peers": "Peers", - "headline-info": "Información del Usuario:", - "headline-notes": "Notas:", - "email": "Correo Electrónico", - "firstname": "Nombre", - "lastname": "Apellido", - "phone": "Número de Teléfono", - "department": "Departamento", - "api-enabled": "Acceso API", - "disabled": "Cuenta Deshabilitada", - "locked": "Cuenta Bloqueada", - "no-peers": "El usuario no tiene peers asociados.", - "peers": { - "name": "Nombre", - "interface": "Interfaz", - "ip": "IPs" - } - }, - "user-edit": { - "headline-edit": "Editar usuario:", - "headline-new": "Nuevo usuario", - "header-general": "General", - "header-personal": "Información del Usuario", - "header-notes": "Notas", - "header-state": "Estado", - "identifier": { - "label": "Identificador", - "placeholder": "El identificador único del usuario" - }, - "source": { - "label": "Origen", - "placeholder": "El origen del usuario" - }, - "password": { - "label": "Contraseña", - "placeholder": "Una contraseña súper segura", - "description": "Deja este campo en blanco para mantener la contraseña actual.", - "too-weak": "La contraseña es demasiado débil. Por favor usa una más fuerte." - }, - "email": { - "label": "Correo", - "placeholder": "La dirección de correo" - }, - "phone": { - "label": "Teléfono", - "placeholder": "El número de teléfono" - }, - "department": { - "label": "Departamento", - "placeholder": "El departamento" - }, - "firstname": { - "label": "Nombre", - "placeholder": "Nombre" - }, - "lastname": { - "label": "Apellido", - "placeholder": "Apellido" - }, - "notes": { - "label": "Notas", - "placeholder": "" - }, - "disabled": { - "label": "Deshabilitado (sin conexión WireGuard y sin posibilidad de inicio de sesión)" - }, - "locked": { - "label": "Bloqueado (no es posible iniciar sesión, las conexiones WireGuard aún funcionan)" - }, - "admin": { - "label": "Es administrador" - } - }, - "interface-view": { - "headline": "Configuración de la interfaz:" - }, - "password": { - "abstract": "Aquí puedes cambiar tu contraseña.", - "change-button-text": "Cambiar contraseña", - "current-label": "Contraseña actual", - "headline": "Configuración de contraseña", - "invalid-confirm-label": "Las contraseñas no coinciden", - "new-confirm-label": "Confirmar nueva contraseña", - "new-label": "Nueva contraseña", - "weak-label": "La contraseña es demasiado débil" - }, - "interface-edit": { - "headline-edit": "Editar interfaz:", - "headline-new": "Nueva interfaz", - "tab-interface": "Interfaz", - "tab-peerdef": "Valores predeterminados del peer", - "header-general": "General", - "header-network": "Red", - "header-crypto": "Criptografía", - "header-hooks": "Hooks de interfaz", - "header-peer-hooks": "Hooks", - "header-state": "Estado", - "identifier": { - "label": "Identificador", - "placeholder": "El identificador único de la interfaz" - }, - "mode": { - "label": "Modo de Interfaz", - "server": "Modo Servidor", - "client": "Modo Cliente", - "any": "Modo Desconocido" - }, - "backend": { - "label": "Backend de la Interfaz", - "invalid-label": "El backend original ya no está disponible, usando el backend local de WireGuard en su lugar.", - "local": "Backend local de WireGuard" - }, - "display-name": { - "label": "Nombre para Mostrar", - "placeholder": "El nombre descriptivo de la interfaz" - }, - "private-key": { - "label": "La clave Privada", - "placeholder": "La clave privada" - }, - "public-key": { - "label": "La clave pública", - "placeholder": "La clave pública" - }, - "ip": { - "label": "Direcciones IP", - "placeholder": "Direcciones IP (formato CIDR)" - }, - "listen-port": { - "label": "Puerto de Escucha", - "placeholder": "El puerto de escucha" - }, - "dns": { - "label": "Servidor DNS", - "placeholder": "Los servidores DNS que deben usarse" - }, - "dns-search": { - "label": "Dominios de Búsqueda DNS", - "placeholder": "Prefijos de búsqueda DNS" - }, - "mtu": { - "label": "MTU", - "placeholder": "La MTU de la interfaz (0 = mantener por defecto)" - }, - "firewall-mark": { - "label": "Marca de Firewall", - "placeholder": "Marca de firewall que se aplica al tráfico saliente. (0 = automático)" - }, - "routing-table": { - "label": "Tabla de Enrutamiento", - "placeholder": "El ID de la tabla de enrutamiento", - "description": "Casos especiales: off = no administrar rutas, 0 = automático" - }, - "pre-up": { - "label": "Pre-Up", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "post-up": { - "label": "Post-Up", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "pre-down": { - "label": "Pre-Down", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "post-down": { - "label": "Post-Down", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "disabled": { - "label": "Interfaz Deshabilitada" - }, - "save-config": { - "label": "Guardar automáticamente la configuración de wg-quick" - }, - "defaults": { - "endpoint": { - "label": "Dirección del Endpoint", - "placeholder": "Dirección del Endpoint", - "description": "La dirección del endpoint al que los peers se conectarán. (ej: wg.ejemplo.com o wg.ejemplo.com:51820)" - }, - "networks": { - "label": "Redes IP", - "placeholder": "Direcciones de Red", - "description": "Los peers obtendrán direcciones IP de esas subredes." - }, - "allowed-ip": { - "label": "Direcciones IP Permitidas", - "placeholder": "Direcciones IP Permitidas por Defecto" - }, - "mtu": { - "label": "MTU", - "placeholder": "La MTU del cliente (0 = mantener por defecto)" - }, - "keep-alive": { - "label": "Intervalo de Keep Alive", - "placeholder": "Keepalive Persistente (0 = por defecto)" - } - }, - "button-apply-defaults": "Aplicar Valores Predeterminados de peers" - }, - "peer-view": { - "headline-peer": "Peer:", - "headline-endpoint": "Endpoint:", - "section-info": "Información del peer", - "section-status": "Estado Actual", - "section-config": "Configuración", - "identifier": "Identificador", - "ip": "Direcciones IP", - "allowed-ip": "Direcciones IP permitidas", - "extra-allowed-ip": "Direcciones IP permitidas del lado del servidor", - "user": "Usuario Asociado", - "notes": "Notas", - "expiry-status": "Expira en", - "disabled-status": "Deshabilitado en", - "traffic": "Tráfico", - "connection-status": "Estadísticas de Conexión", - "upload": "Bytes Subidos (del Servidor al peer)", - "download": "Bytes Descargados (del peer al Servidor)", - "pingable": "Alcanzable (ping)", - "handshake": "Último handshake", - "connected-since": "Conectado desde", - "endpoint": "Dirección del host remoto", - "button-download": "Descargar configuración", - "button-email": "Enviar configuración por Correo Electrónico", - "style-label": "Estilo de Configuración" - }, - "peer-edit": { - "headline-edit-peer": "Editar peer:", - "headline-edit-endpoint": "Editar endpoint:", - "headline-new-peer": "Crear peer", - "headline-new-endpoint": "Crear endpoint", - "header-general": "General", - "header-network": "Red", - "header-crypto": "Criptografía", - "header-hooks": "Hooks (Ejecutados en el peer)", - "header-state": "Estado", - "display-name": { - "label": "Nombre para mostrar", - "placeholder": "El nombre descriptivo para el peer" - }, - "linked-user": { - "label": "Usuario Vinculado", - "placeholder": "La cuenta de usuario que posee este peer" - }, - "private-key": { - "label": "Clave Privada", - "placeholder": "Clave privada", - "help": "La clave privada se almacena de forma segura en el servidor. Si el usuario ya posee una copia, puedes omitir este campo. El servidor sigue funcionando exclusivamente con la clave pública del peer." - }, - "public-key": { - "label": "Clave Pública", - "placeholder": "La Clave pública" - }, - "preshared-key": { - "label": "Clave pre-compartida", - "placeholder": "Clave pre-compartida opcional" - }, - "endpoint": { - "label": "Dirección del endpoint", - "placeholder": "La dirección del endpoint remoto" - }, - "endpoint-public-key": { - "label": "Clave pública del punto del endpoint", - "placeholder": "La clave pública del endpoint remoto" - }, - "ip": { - "label": "Direcciones IP", - "placeholder": "Direcciones IP (formato CIDR)" - }, - "allowed-ip": { - "label": "Direcciones IP permitidas", - "placeholder": "Direcciones IP permitidas (formato CIDR)" - }, - "extra-allowed-ip": { - "label": "Direcciones IP permitidas extra", - "placeholder": "IPs extra permitidas (lado del servidor)", - "description": "Esas IPs serán agregadas en la interfaz remota de WireGuard como direcciones IP permitidas." - }, - "dns": { - "label": "Servidor DNS", - "placeholder": "Los servidores DNS que deben usarse" - }, - "dns-search": { - "label": "Dominios de búsqueda DNS", - "placeholder": "Prefijos de búsqueda DNS" - }, - "keep-alive": { - "label": "Intervalo de Keep Alive", - "placeholder": "Keepalive Persistente (0 = por defecto)" - }, - "mtu": { - "label": "MTU", - "placeholder": "La MTU del cliente (0 = mantener por defecto)" - }, - "pre-up": { - "label": "Pre-Up", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "post-up": { - "label": "Post-Up", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "pre-down": { - "label": "Pre-Down", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "post-down": { - "label": "Post-Down", - "placeholder": "Uno o varios comandos bash separados por ;" - }, - "disabled": { - "label": "Peer Deshabilitado" - }, - "ignore-global": { - "label": "Ignorar configuración global" - }, - "expires-at": { - "label": "Fecha de expiración" - } - }, - "peer-multi-create": { - "headline-peer": "Crear múltiples peers", - "headline-endpoint": "Crear múltiples endpoints", - "identifiers": { - "label": "Identificadores de Usuario", - "placeholder": "Identificadores de Usuario", - "description": "Un identificador de usuario (el nombre de usuario) para el cual debe crearse un peer." - }, - "prefix": { - "headline-peer": "Peer:", - "headline-endpoint": "Endpoint:", - "label": "Prefijo del nombre del peer a mostrar", - "placeholder": "Prefijo", - "description": "Un prefijo que se agregará al nombre visible de los peers." - } - } - } -} +{ + "languages": { + "es": "Español" + }, + "calculator": { + "abstract": "Genera direcciones IP permitidas de WireGuard. Las subredes IP se generan en tu navegador local y nunca se envían al servidor.", + "allowed-ip": { + "empty": "El valor no puede estar vacío", + "label": "IPs permitidas", + "placeholder": "0.0.0.0/0, ::/0" + }, + "button-exclude-private": "Excluir rangos de IP privadas", + "dissallowed-ip": { + "invalid": "Dirección inválida: {addr}", + "label": "IPs no permitidas", + "placeholder": "10.0.0.0/8, 192.168.0.0/16" + }, + "headline": "Calculadora de IPs de WireGuard", + "headline-allowed-ip": "Nuevas IPs permitidas", + "new-allowed-ip": { + "label": "IPs permitidas", + "placeholder": "" + } + }, + "general": { + "pagination": { + "size": "Numero de elementos", + "all": "Todos (Lento)" + }, + "search": { + "placeholder": "Buscar...", + "button": "Buscar" + }, + "select-all": "Buscar todos", + "yes": "Sí", + "no": "No", + "cancel": "Cancelar", + "close": "Cerrar", + "save": "Guardar", + "delete": "Eliminar" + }, + "login": { + "headline": "Por favor inicie sesión", + "username": { + "label": "Usuario", + "placeholder": "Por favor ingrese su usuario" + }, + "password": { + "label": "Contraseña", + "placeholder": "Por favor ingrese su contraseña" + }, + "button": "Ingresar", + "button-webauthn": "Usar clave de acceso" + }, + "menu": { + "calculator": "Calculadora IP", + "home": "Inicio", + "interfaces": "Interfaces", + "users": "Usuarios", + "lang": "Cambiar idioma", + "profile": "Mi perfil", + "settings": "Configuración", + "audit": "Registro de auditoría", + "login": "Iniciar sesión", + "logout": "Cerrar sesión", + "keygen": "Generador de claves" + }, + "home": { + "headline": "Portal VPN WireGuard®", + "info-headline": "Más información", + "abstract": "WireGuard® es una VPN extremadamente simple pero rápida y moderna que utiliza criptografía de última generación. Su objetivo es ser más rápida, simple, ligera y útil que IPsec, a la vez que evita los enormes problemas que supone. Su objetivo es ofrecer un rendimiento considerablemente superior al de OpenVPN.", + "installation": { + "box-header": "Instalación de WireGuard", + "headline": "Instalación", + "content": "Las instrucciones de instalación del cliente se pueden encontrar en el sitio web oficial de WireGuard.", + "button": "Abrir instrucciones" + }, + "about-wg": { + "box-header": "Acerca de WireGuard", + "headline": "Acerca de", + "content": "WireGuard® es una VPN extremadamente simple pero rápida y moderna que utiliza criptografía de última generación.", + "button": "Más" + }, + "about-portal": { + "box-header": "Acerca del Portal WireGuard", + "headline": "Portal WireGuard", + "content": "WireGuard Portal es un portal web simple para la configuración de WireGuard.", + "button": "Más" + }, + "profiles": { + "headline": "Perfiles VPN", + "abstract": "Puedes acceder y descargar tus configuraciones personales de VPN desde tu perfil de usuario.", + "content": "Para ver todos tus perfiles configurados, haz clic en el botón de abajo.", + "button": "Abrir mi perfil" + }, + "admin": { + "headline": "Área de administración", + "abstract": "En el área de administración puedes gestionar los peers de WireGuard, la interfaz del servidor, así como los usuarios que tienen acceso al Portal WireGuard.", + "content": "", + "button-admin": "Abrir administración del servidor", + "button-user": "Abrir administración de usuarios" + } + }, + "interfaces": { + "headline": "Administración de interfaces", + "headline-peers": "Peers VPN actuales", + "headline-endpoints": "Extremos actuales", + "no-interface": { + "default-selection": "No hay interfaces disponibles", + "headline": "No se encontraron interfaces...", + "abstract": "Haz clic en el botón + para crear una nueva interfaz WireGuard." + }, + "no-peer": { + "headline": "No hay peers disponibles", + "abstract": "Actualmente no hay peers disponibles para la interfaz WireGuard seleccionada." + }, + "table-heading": { + "name": "Nombre", + "user": "Usuario", + "ip": "IPs", + "endpoint": "Endpoint", + "status": "Estado" + }, + "interface": { + "headline": "Estado de la interfaz para", + "backend": "Backend", + "unknown-backend": "Desconocido", + "wrong-backend": "Backend inválido, usando backend local de WireGuard en su lugar.", + "key": "Clave pública", + "endpoint": "Endpoint público", + "port": "Puerto de escucha", + "peers": "Peers habilitados", + "total-peers": "Peers totales", + "endpoints": "Endpoints habilitados", + "total-endpoints": "Endpoints totales", + "ip": "Dirección IP", + "default-allowed-ip": "IPs permitidas por defecto", + "default-dns": "Servidores DNS por defecto", + "dns": "Servidores DNS", + "mtu": "MTU", + "default-keep-alive": "Intervalo Keepalive por defecto", + "button-show-config": "Mostrar configuración", + "button-download-config": "Descargar configuración", + "button-store-config": "Guardar configuración para wg-quick", + "button-edit": "Editar interfaz" + }, + "button-add-interface": "Agregar interfaz", + "button-add-peer": "Agregar peer", + "button-add-peers": "Agregar múltiples peers", + "button-show-peer": "Mostrar peer", + "button-edit-peer": "Editar peer", + "peer-disabled": "Peer deshabilitado, motivo:", + "peer-expiring": "El peer expira en", + "peer-connected": "Conectado", + "peer-not-connected": "No conectado", + "peer-handshake": "Último handshake:" + }, + "users": { + "headline": "Administración de usuarios", + "table-heading": { + "id": "ID", + "email": "Correo electrónico", + "firstname": "Nombre", + "lastname": "Apellido", + "sources": "Origen", + "peers": "Peers", + "admin": "Administrador" + }, + "no-user": { + "headline": "No hay usuarios disponibles", + "abstract": "Actualmente no hay usuarios registrados en el Portal WireGuard." + }, + "button-add-user": "Agregar usuario", + "button-show-user": "Mostrar usuario", + "button-edit-user": "Editar usuario", + "user-disabled": "Usuario deshabilitado, motivo:", + "user-locked": "Cuenta bloqueada, motivo:", + "admin": "El usuario tiene privilegios de administrador", + "no-admin": "El usuario no tiene privilegios de administrador" + }, + "profile": { + "headline": "Mis peers VPN", + "table-heading": { + "name": "Nombre", + "ip": "IPs", + "stats": "Estado", + "interface": "Interfaz del servidor" + }, + "no-peer": { + "headline": "No hay peers disponibles", + "abstract": "Actualmente no hay peers asociados a tu perfil de usuario." + }, + "peer-connected": "Conectado", + "button-add-peer": "Agregar peer", + "button-show-peer": "Mostrar peer", + "button-edit-peer": "Editar peer" + }, + "settings": { + "headline": "Configuración", + "abstract": "Aquí puedes cambiar tu configuración personal.", + "api": { + "headline": "Configuración de API", + "abstract": "Aquí puedes configurar los ajustes de la API RESTful.", + "active-description": "La API está actualmente activa para tu cuenta. Todas las solicitudes están autenticadas con Basic Auth. Usa las siguientes credenciales.", + "inactive-description": "La API está actualmente inactiva. Presiona el botón de abajo para activarla.", + "user-label": "Usuario de la API:", + "user-placeholder": "Usuario de la API", + "token-label": "Contraseña de la API:", + "token-placeholder": "Token de la API", + "token-created-label": "Acceso API concedido en: ", + "button-disable-title": "Desactivar API, invalidará el token actual.", + "button-disable-text": "Desactivar API", + "button-enable-title": "Activar API, generará un nuevo token.", + "button-enable-text": "Activar API", + "api-link": "Documentación de API" + }, + "webauthn": { + "headline": "Configuración de llave de acceso", + "abstract": "Las llaves de acceso son una forma moderna de autenticar usuarios sin necesidad de contraseñas. Se almacenan de forma segura en tu navegador y pueden usarse para iniciar sesión en el Portal WireGuard.", + "active-description": "Al menos una llave de acceso está activa en tu cuenta.", + "inactive-description": "Actualmente no hay llaves de acceso registradas. Presiona el botón de abajo para registrar una.", + "table": { + "name": "Nombre", + "created": "Creada", + "actions": "" + }, + "credentials-list": "Llaves de acceso registradas actualmente", + "modal-delete": { + "headline": "Eliminar llaves de acceso", + "abstract": "¿Seguro que deseas eliminar esta llave de acceso? Ya no podrás usarla para iniciar sesión.", + "created": "Creada:", + "button-delete": "Eliminar", + "button-cancel": "Cancelar" + }, + "button-rename-title": "Renombrar", + "button-rename-text": "Renombrar la llave de acceso.", + "button-save-title": "Guardar", + "button-save-text": "Guardar el nuevo nombre de la llave de acceso.", + "button-cancel-title": "Cancelar", + "button-cancel-text": "Cancelar el renombrado de la llave de acceso.", + "button-delete-title": "Eliminar", + "button-delete-text": "Eliminar la llave de acceso. Ya no podrás iniciar sesión con ella.", + "button-register-title": "Registrar llave de acceso", + "button-register-text": "Registrar una nueva llave de acceso para proteger tu cuenta." + }, + "password": { + "headline": "Configuración de contraseña", + "abstract": "Aquí puedes cambiar tu contraseña.", + "current-label": "Contraseña actual", + "new-label": "Nueva contraseña", + "new-confirm-label": "Confirmar nueva contraseña", + "change-button-text": "Cambiar contraseña", + "invalid-confirm-label": "Las contraseñas no coinciden", + "weak-label": "La contraseña es demasiado débil" + } + }, + "audit": { + "headline": "Registro de Auditoría", + "abstract": "Aquí puedes encontrar el registro de auditoría de todas las acciones realizadas en el Portal WireGuard.", + "no-entries": { + "headline": "No hay entradas en el registro", + "abstract": "Actualmente no se han registrado auditorías." + }, + "entries-headline": "Entradas del Registro", + "table-heading": { + "id": "#", + "time": "Hora", + "user": "Usuario", + "severity": "Severidad", + "origin": "Origen", + "message": "Mensaje" + } + }, + "keygen": { + "headline": "Generador de claves WireGuard", + "abstract": "Genera nuevas claves de WireGuard. Las claves se generan en tu navegador local y nunca se envían al servidor.", + "headline-keypair": "Nuevo par de claves", + "headline-preshared-key": "Nueva clave pre-compartida", + "button-generate": "Generar", + "private-key": { + "label": "Clave privada", + "placeholder": "La clave privada" + }, + "public-key": { + "label": "Clave pública", + "placeholder": "La clave pública" + }, + "preshared-key": { + "label": "Clave pre-compartida", + "placeholder": "La clave pre-compartida" + } + }, + "modals": { + "user-view": { + "headline": "Cuenta de Usuario:", + "tab-user": "Información", + "tab-peers": "Peers", + "headline-info": "Información del Usuario:", + "headline-notes": "Notas:", + "email": "Correo Electrónico", + "firstname": "Nombre", + "lastname": "Apellido", + "phone": "Número de Teléfono", + "department": "Departamento", + "api-enabled": "Acceso API", + "disabled": "Cuenta Deshabilitada", + "locked": "Cuenta Bloqueada", + "no-peers": "El usuario no tiene peers asociados.", + "peers": { + "name": "Nombre", + "interface": "Interfaz", + "ip": "IPs" + } + }, + "user-edit": { + "headline-edit": "Editar usuario:", + "headline-new": "Nuevo usuario", + "header-general": "General", + "header-personal": "Información del Usuario", + "header-notes": "Notas", + "header-state": "Estado", + "identifier": { + "label": "Identificador", + "placeholder": "El identificador único del usuario" + }, + "source": { + "label": "Origen", + "placeholder": "El origen del usuario" + }, + "password": { + "label": "Contraseña", + "placeholder": "Una contraseña súper segura", + "description": "Deja este campo en blanco para mantener la contraseña actual.", + "too-weak": "La contraseña es demasiado débil. Por favor usa una más fuerte." + }, + "email": { + "label": "Correo", + "placeholder": "La dirección de correo" + }, + "phone": { + "label": "Teléfono", + "placeholder": "El número de teléfono" + }, + "department": { + "label": "Departamento", + "placeholder": "El departamento" + }, + "firstname": { + "label": "Nombre", + "placeholder": "Nombre" + }, + "lastname": { + "label": "Apellido", + "placeholder": "Apellido" + }, + "notes": { + "label": "Notas", + "placeholder": "" + }, + "disabled": { + "label": "Deshabilitado (sin conexión WireGuard y sin posibilidad de inicio de sesión)" + }, + "locked": { + "label": "Bloqueado (no es posible iniciar sesión, las conexiones WireGuard aún funcionan)" + }, + "admin": { + "label": "Es administrador" + }, + "confirm-delete": "Seguro que desea eliminar el usuario '{id}'?" + }, + "interface-view": { + "headline": "Configuración de la interfaz:" + }, + "password": { + "abstract": "Aquí puedes cambiar tu contraseña.", + "change-button-text": "Cambiar contraseña", + "current-label": "Contraseña actual", + "headline": "Configuración de contraseña", + "invalid-confirm-label": "Las contraseñas no coinciden", + "new-confirm-label": "Confirmar nueva contraseña", + "new-label": "Nueva contraseña", + "weak-label": "La contraseña es demasiado débil" + }, + "interface-edit": { + "headline-edit": "Editar interfaz:", + "headline-new": "Nueva interfaz", + "tab-interface": "Interfaz", + "tab-peerdef": "Valores predeterminados del peer", + "header-general": "General", + "header-network": "Red", + "header-crypto": "Criptografía", + "header-hooks": "Hooks de interfaz", + "header-peer-hooks": "Hooks", + "header-state": "Estado", + "identifier": { + "label": "Identificador", + "placeholder": "El identificador único de la interfaz" + }, + "mode": { + "label": "Modo de Interfaz", + "server": "Modo Servidor", + "client": "Modo Cliente", + "any": "Modo Desconocido" + }, + "backend": { + "label": "Backend de la Interfaz", + "invalid-label": "El backend original ya no está disponible, usando el backend local de WireGuard en su lugar.", + "local": "Backend local de WireGuard" + }, + "display-name": { + "label": "Nombre para Mostrar", + "placeholder": "El nombre descriptivo de la interfaz" + }, + "private-key": { + "label": "La clave Privada", + "placeholder": "La clave privada" + }, + "public-key": { + "label": "La clave pública", + "placeholder": "La clave pública" + }, + "ip": { + "label": "Direcciones IP", + "placeholder": "Direcciones IP (formato CIDR)" + }, + "listen-port": { + "label": "Puerto de Escucha", + "placeholder": "El puerto de escucha" + }, + "dns": { + "label": "Servidor DNS", + "placeholder": "Los servidores DNS que deben usarse" + }, + "dns-search": { + "label": "Dominios de Búsqueda DNS", + "placeholder": "Prefijos de búsqueda DNS" + }, + "mtu": { + "label": "MTU", + "placeholder": "La MTU de la interfaz (0 = mantener por defecto)" + }, + "firewall-mark": { + "label": "Marca de Firewall", + "placeholder": "Marca de firewall que se aplica al tráfico saliente. (0 = automático)" + }, + "routing-table": { + "label": "Tabla de Enrutamiento", + "placeholder": "El ID de la tabla de enrutamiento", + "description": "Casos especiales: off = no administrar rutas, 0 = automático" + }, + "pre-up": { + "label": "Pre-Up", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "post-up": { + "label": "Post-Up", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "pre-down": { + "label": "Pre-Down", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "post-down": { + "label": "Post-Down", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "disabled": { + "label": "Interfaz Deshabilitada" + }, + "save-config": { + "label": "Guardar automáticamente la configuración de wg-quick" + }, + "defaults": { + "endpoint": { + "label": "Dirección del Endpoint", + "placeholder": "Dirección del Endpoint", + "description": "La dirección del endpoint al que los peers se conectarán. (ej: wg.ejemplo.com o wg.ejemplo.com:51820)" + }, + "networks": { + "label": "Redes IP", + "placeholder": "Direcciones de Red", + "description": "Los peers obtendrán direcciones IP de esas subredes." + }, + "allowed-ip": { + "label": "Direcciones IP Permitidas", + "placeholder": "Direcciones IP Permitidas por Defecto" + }, + "mtu": { + "label": "MTU", + "placeholder": "La MTU del cliente (0 = mantener por defecto)" + }, + "keep-alive": { + "label": "Intervalo de Keep Alive", + "placeholder": "Keepalive Persistente (0 = por defecto)" + } + }, + "button-apply-defaults": "Aplicar Valores Predeterminados de peers", + "confirm-delete": "Seguro que desea eliminar la interfaz '{id}'?" + }, + "peer-view": { + "headline-peer": "Peer:", + "headline-endpoint": "Endpoint:", + "section-info": "Información del peer", + "section-status": "Estado Actual", + "section-config": "Configuración", + "identifier": "Identificador", + "ip": "Direcciones IP", + "allowed-ip": "Direcciones IP permitidas", + "extra-allowed-ip": "Direcciones IP permitidas del lado del servidor", + "user": "Usuario Asociado", + "notes": "Notas", + "expiry-status": "Expira en", + "disabled-status": "Deshabilitado en", + "traffic": "Tráfico", + "connection-status": "Estadísticas de Conexión", + "upload": "Bytes Subidos (del Servidor al peer)", + "download": "Bytes Descargados (del peer al Servidor)", + "pingable": "Alcanzable (ping)", + "handshake": "Último handshake", + "connected-since": "Conectado desde", + "endpoint": "Dirección del host remoto", + "button-download": "Descargar configuración", + "button-email": "Enviar configuración por Correo Electrónico", + "style-label": "Estilo de Configuración" + }, + "peer-edit": { + "headline-edit-peer": "Editar peer:", + "headline-edit-endpoint": "Editar endpoint:", + "headline-new-peer": "Crear peer", + "headline-new-endpoint": "Crear endpoint", + "header-general": "General", + "header-network": "Red", + "header-crypto": "Criptografía", + "header-hooks": "Hooks (Ejecutados en el peer)", + "header-state": "Estado", + "display-name": { + "label": "Nombre para mostrar", + "placeholder": "El nombre descriptivo para el peer" + }, + "linked-user": { + "label": "Usuario Vinculado", + "placeholder": "La cuenta de usuario que posee este peer" + }, + "private-key": { + "label": "Clave Privada", + "placeholder": "Clave privada", + "help": "La clave privada se almacena de forma segura en el servidor. Si el usuario ya posee una copia, puedes omitir este campo. El servidor sigue funcionando exclusivamente con la clave pública del peer." + }, + "public-key": { + "label": "Clave Pública", + "placeholder": "La Clave pública" + }, + "preshared-key": { + "label": "Clave pre-compartida", + "placeholder": "Clave pre-compartida opcional" + }, + "endpoint": { + "label": "Dirección del endpoint", + "placeholder": "La dirección del endpoint remoto" + }, + "endpoint-public-key": { + "label": "Clave pública del punto del endpoint", + "placeholder": "La clave pública del endpoint remoto" + }, + "ip": { + "label": "Direcciones IP", + "placeholder": "Direcciones IP (formato CIDR)" + }, + "allowed-ip": { + "label": "Direcciones IP permitidas", + "placeholder": "Direcciones IP permitidas (formato CIDR)" + }, + "extra-allowed-ip": { + "label": "Direcciones IP permitidas extra", + "placeholder": "IPs extra permitidas (lado del servidor)", + "description": "Esas IPs serán agregadas en la interfaz remota de WireGuard como direcciones IP permitidas." + }, + "dns": { + "label": "Servidor DNS", + "placeholder": "Los servidores DNS que deben usarse" + }, + "dns-search": { + "label": "Dominios de búsqueda DNS", + "placeholder": "Prefijos de búsqueda DNS" + }, + "keep-alive": { + "label": "Intervalo de Keep Alive", + "placeholder": "Keepalive Persistente (0 = por defecto)" + }, + "mtu": { + "label": "MTU", + "placeholder": "La MTU del cliente (0 = mantener por defecto)" + }, + "pre-up": { + "label": "Pre-Up", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "post-up": { + "label": "Post-Up", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "pre-down": { + "label": "Pre-Down", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "post-down": { + "label": "Post-Down", + "placeholder": "Uno o varios comandos bash separados por ;" + }, + "disabled": { + "label": "Peer Deshabilitado" + }, + "ignore-global": { + "label": "Ignorar configuración global" + }, + "expires-at": { + "label": "Fecha de expiración" + }, + "confirm-delete": "Seguro que desea eliminar el par '{id}'?" + }, + "peer-multi-create": { + "headline-peer": "Crear múltiples peers", + "headline-endpoint": "Crear múltiples endpoints", + "identifiers": { + "label": "Identificadores de Usuario", + "placeholder": "Identificadores de Usuario", + "description": "Un identificador de usuario (el nombre de usuario) para el cual debe crearse un peer." + }, + "prefix": { + "headline-peer": "Peer:", + "headline-endpoint": "Endpoint:", + "label": "Prefijo del nombre del peer a mostrar", + "placeholder": "Prefijo", + "description": "Un prefijo que se agregará al nombre visible de los peers." + } + } + } +} diff --git a/frontend/src/lang/translations/fr.json b/frontend/src/lang/translations/fr.json index acbe563..23f6a5b 100644 --- a/frontend/src/lang/translations/fr.json +++ b/frontend/src/lang/translations/fr.json @@ -126,9 +126,7 @@ "peer-expiring": "Le pair expire le", "peer-connected": "Connecté", "peer-not-connected": "Non connecté", - "peer-handshake": "Dernière négociation :", - "button-show-peer": "Afficher le pair", - "button-edit-peer": "Modifier le pair" + "peer-handshake": "Dernière négociation :" }, "users": { "headline": "Administration des utilisateurs", @@ -264,7 +262,8 @@ }, "admin": { "label": "Est Admin" - } + }, + "confirm-delete": "Voulez-vous vraiment supprimer l'utilisateur \"{id}\" ?" }, "interface-view": { "headline": "Configuration pour l'interface :" @@ -377,7 +376,8 @@ "placeholder": "Persistent Keepalive (0 = par défaut)" } }, - "button-apply-defaults": "Appliquer les valeurs par défaut des pairs" + "button-apply-defaults": "Appliquer les valeurs par défaut des pairs", + "confirm-delete": "Voulez-vous vraiment supprimer l'interface \"{id}\" ?" }, "peer-view": { "headline-peer": "Pair :", @@ -493,7 +493,8 @@ }, "expires-at": { "label": "Date d'expiration" - } + }, + "confirm-delete": "Voulez-vous vraiment supprimer le pair \"{id}\" ?" }, "peer-multi-create": { "headline-peer": "Créer plusieurs pairs", diff --git a/frontend/src/lang/translations/ko.json b/frontend/src/lang/translations/ko.json index 8150cf6..8f9bad1 100644 --- a/frontend/src/lang/translations/ko.json +++ b/frontend/src/lang/translations/ko.json @@ -282,6 +282,7 @@ "label": "관리자 여부" } }, + "confirm-delete": "사용자 '{id}'를 삭제하시겠습니까?", "interface-view": { "headline": "인터페이스 구성:" }, @@ -393,7 +394,8 @@ "placeholder": "영구 Keepalive (0 = 기본값)" } }, - "button-apply-defaults": "피어 기본값 적용" + "button-apply-defaults": "피어 기본값 적용", + "confirm-delete": "인터페이스 '{id}'를 삭제하시겠습니까?" }, "peer-view": { "headline-peer": "피어:", @@ -509,7 +511,8 @@ }, "expires-at": { "label": "만료 날짜" - } + }, + "confirm-delete": "피어 '{id}'를 삭제하시겠습니까?" }, "peer-multi-create": { "headline-peer": "여러 피어 생성", diff --git a/frontend/src/lang/translations/pt.json b/frontend/src/lang/translations/pt.json index 500c5a7..c5a86b5 100644 --- a/frontend/src/lang/translations/pt.json +++ b/frontend/src/lang/translations/pt.json @@ -300,7 +300,8 @@ }, "admin": { "label": "É Administrador" - } + }, + "confirm-delete": "Tem certeza que deseja excluir o utilizador '{id}'?" }, "interface-view": { "headline": "Configuração para a Interface:" @@ -413,7 +414,8 @@ "placeholder": "Keepalive persistente (0 = padrão)" } }, - "button-apply-defaults": "Aplicar Padrões de Peer" + "button-apply-defaults": "Aplicar Padrões de Peer", + "confirm-delete": "Tem certeza que deseja excluir a interface '{id}'?" }, "peer-view": { "headline-peer": "Peer:", @@ -530,7 +532,8 @@ }, "expires-at": { "label": "Data de expiração" - } + }, + "confirm-delete": "Tem certeza que deseja excluir o par '{id}'?" }, "peer-multi-create": { "headline-peer": "Criar múltiplos peers", diff --git a/frontend/src/lang/translations/ru.json b/frontend/src/lang/translations/ru.json index 1776681..eeaa254 100644 --- a/frontend/src/lang/translations/ru.json +++ b/frontend/src/lang/translations/ru.json @@ -259,16 +259,16 @@ "headline-preshared-key": "Новый общий ключ", "button-generate": "Генерировать", "private-key": { - "label": "Приватный ключ", - "placeholder": "Приватный ключ" + "label": "Приватный ключ", + "placeholder": "Приватный ключ" }, "public-key": { - "label": "Публичный ключ", - "placeholder": "Публичный ключ" + "label": "Публичный ключ", + "placeholder": "Публичный ключ" }, "preshared-key": { - "label": "Общий ключ", - "placeholder": "Общий ключ" + "label": "Общий ключ", + "placeholder": "Общий ключ" } }, "calculator": { @@ -277,18 +277,18 @@ "headline-allowed-ip": "Новые разрешенные IP-адреса", "button-exclude-private": "Исключить частные диапазоны IP-адресов", "allowed-ip": { - "label": "Разрешенные IP-адреса", - "placeholder": "0.0.0.0/0, ::/0", - "empty": "Поле ввода не должно быть пустым" + "label": "Разрешенные IP-адреса", + "placeholder": "0.0.0.0/0, ::/0", + "empty": "Поле ввода не должно быть пустым" }, "dissallowed-ip": { - "label": "Запрещенные IP-адреса", - "placeholder": "10.0.0.0/8, 192.168.0.0/16", - "invalid": "Некорректный адрес: {addr}" + "label": "Запрещенные IP-адреса", + "placeholder": "10.0.0.0/8, 192.168.0.0/16", + "invalid": "Некорректный адрес: {addr}" }, "new-allowed-ip": { - "label": "Разрешенные IP-адреса", - "placeholder": "" + "label": "Разрешенные IP-адреса", + "placeholder": "" } }, "modals": { @@ -366,7 +366,8 @@ }, "admin": { "label": "Является администратором" - } + }, + "confirm-delete": "Вы уверены, что хотите удалить пользователя «{id}»?" }, "interface-view": { "headline": "Конфигурация интерфейса:" @@ -484,7 +485,8 @@ "placeholder": "Постоянное поддержание активности (0 = значение по умолчанию)" } }, - "button-apply-defaults": "Применить настройки пира по умолчанию" + "button-apply-defaults": "Применить настройки пира по умолчанию", + "confirm-delete": "Вы уверены, что хотите удалить интерфейс «{id}»?" }, "peer-view": { "headline-peer": "Пир:", @@ -605,7 +607,8 @@ }, "expires-at": { "label": "Дата истечения срока действия" - } + }, + "confirm-delete": "Вы уверены, что хотите удалить пир «{id}»?" }, "peer-multi-create": { "headline-peer": "Создать несколько узлов", diff --git a/frontend/src/lang/translations/uk.json b/frontend/src/lang/translations/uk.json index 9fd269a..1f0982a 100644 --- a/frontend/src/lang/translations/uk.json +++ b/frontend/src/lang/translations/uk.json @@ -151,7 +151,6 @@ "admin": "Користувач має адміністративні привілеї", "no-admin": "Користувач не має адміністративних привілеїв" }, - "profile": { "headline": "Мої VPN-піри", "table-heading": { @@ -189,7 +188,6 @@ "api-link": "Документація API" } }, - "modals": { "user-view": { "headline": "Обліковий запис користувача:", @@ -264,7 +262,8 @@ }, "admin": { "label": "Адміністратор" - } + }, + "confirm-delete": "Ви впевнені, що хочете видалити користувача «{id}»?" }, "interface-view": { "headline": "Конфігурація для інтерфейсу:" @@ -377,7 +376,8 @@ "placeholder": "Постійний Keepalive (0 = за замовчуванням)" } }, - "button-apply-defaults": "Застосувати значення за замовчуванням для пірів" + "button-apply-defaults": "Застосувати значення за замовчуванням для пірів", + "confirm-delete": "Ви впевнені, що хочете видалити інтерфейс «{id}»?" }, "peer-view": { "headline-peer": "Пір:", @@ -493,7 +493,8 @@ }, "expires-at": { "label": "Дата закінчення терміну дії" - } + }, + "confirm-delete": "Ви впевнені, що хочете видалити пір «{id}»?" }, "peer-multi-create": { "headline-peer": "Створити декілька пір", diff --git a/frontend/src/lang/translations/vi.json b/frontend/src/lang/translations/vi.json index 0ad146c..27a015f 100644 --- a/frontend/src/lang/translations/vi.json +++ b/frontend/src/lang/translations/vi.json @@ -240,7 +240,8 @@ }, "admin": { "label": "Là Quản trị viên" - } + }, + "confirm-delete": "Ban co chac muon xoa nguoi dung '{id}' khong?" }, "interface-view": { "headline": "Cấu hình cho Giao diện:" @@ -353,8 +354,8 @@ "placeholder": "Giữ kết nối liên tục (0 = mặc định)" } }, - - "button-apply-defaults": "Áp dụng Cài đặt Mặc định của Peer" + "button-apply-defaults": "Áp dụng Cài đặt Mặc định của Peer", + "confirm-delete": "Ban co chac muon xoa giao dien '{id}' khong?" }, "peer-view": { "headline-peer": "Peer:", @@ -470,7 +471,8 @@ }, "expires-at": { "label": "Ngày hết hạn" - } + }, + "confirm-delete": "Ban co chac muon xoa peer '{id}' khong?" }, "peer-multi-create": { "headline-peer": "Tạo nhiều peer", diff --git a/frontend/src/lang/translations/zh.json b/frontend/src/lang/translations/zh.json index 733ed36..f1993fb 100644 --- a/frontend/src/lang/translations/zh.json +++ b/frontend/src/lang/translations/zh.json @@ -242,6 +242,7 @@ "label": "管理员" } }, + "confirm-delete": "确定要删除用户“{id}”吗?", "interface-view": { "headline": "接口配置: " }, @@ -353,7 +354,8 @@ "placeholder": "持久保持连接 (0 = 默认)" } }, - "button-apply-defaults": "应用节点默认值" + "button-apply-defaults": "应用节点默认值", + "confirm-delete": "确定要删除接口“{id}”吗?" }, "peer-view": { "headline-peer": "节点: ", @@ -469,7 +471,8 @@ }, "expires-at": { "label": "过期日期" - } + }, + "confirm-delete": "确定要删除对等点“{id}”吗?" }, "peer-multi-create": { "headline-peer": "创建多个节点",