diff --git a/CHANGELOG.md b/CHANGELOG.md index 23e841f..327da6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - La personalización se persiste en la base de datos dentro de `configData.command_roles` de forma 100% desacoplada sin requerir alteraciones en el esquema backend. - En `PluginService.getPluginGroups()`, los comandos disponibles en los menús de acción (`ExecuteCommandComponent`) se filtran reactivamente en función del rol y permisos del usuario autenticado, ocultando totalmente aquellas opciones que no le correspondan (ej. un conserje con perfil básico solo visualiza Reservar, Liberar y Renovar puesto, permaneciendo invisibles las funciones de instalación o mantenimiento). - Total adhesión a la sintaxis moderna de control de flujo Angular (`@if`, `@for`) y diseño modular de estilos CSS sin atributos inline. + - Soporte de internacionalización integral (`@ngx-translate`) con catálogos actualizados en español (`es.json`), inglés (`en.json`) y catalán (`cat.json`) para todos los textos, pestañas, cabeceras y notificaciones toast de la configuración de roles. ## [1.23.0] - 2026-10-27 diff --git a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html index aa87164..5904d9a 100644 --- a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html +++ b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.html @@ -15,11 +15,11 @@ class="plugin-status-toggle" [class.active]="plugin.enabled" [class.inactive]="!plugin.enabled"> - {{ plugin.enabled ? 'Activo' : 'Inactivo' }} + {{ plugin.enabled ? ('active' | translate) : ('inactive' | translate) }}

{{ plugin.descriptionKey ? (plugin.descriptionKey | translate) : plugin.description }}

- Autor: {{ plugin.author }} + {{ 'pluginSettingsAuthor' | translate }}: {{ plugin.author }} @@ -32,7 +32,7 @@ [class.active]="activeSubTab === 'settings'" (click)="setSubTab('settings')"> tune - Configuración + {{ 'pluginSettingsConfigTab' | translate }} @if (plugin.commands && plugin.commands.length > 0) { @@ -42,7 +42,7 @@ [class.active]="activeSubTab === 'permissions'" (click)="setSubTab('permissions')"> admin_panel_settings - Funciones y Roles + {{ 'pluginSettingsRolesTab' | translate }} {{ plugin.commands.length }} } @@ -54,7 +54,7 @@ [class.active]="activeSubTab === 'records'" (click)="setSubTab('records')"> history - Historial y Registros + {{ 'pluginSettingsRecordsTab' | translate }} @if (recordsTotal > 0) { {{ recordsTotal }} } @@ -68,17 +68,17 @@
tune -

Parámetros de Configuración del Plugin

+

{{ 'pluginSettingsParamsHeading' | translate }}

@@ -191,23 +191,23 @@
admin_panel_settings -

Control de Acceso a Funciones por Rol

+

{{ 'pluginSettingsRolesHeading' | translate }}

- Configura qué roles de usuario tienen autorización para visualizar y ejecutar cada una de las funciones expuestas por este plugin. Los usuarios que no pertenezcan a los roles seleccionados no verán la opción disponible en el menú de acciones de la consola. + {{ 'pluginSettingsRolesDesc' | translate }}

@@ -215,7 +215,7 @@ - + @for (role of availableRoles; track role.key) {
Función / Acción del Plugin{{ 'pluginSettingsColCommand' | translate }}
@@ -248,7 +248,7 @@ [disabled]="role.key === 'ROLE_SUPER_ADMIN'" (change)="toggleRole(cmd.slug, role.key, $event.checked)" color="primary" - [title]="role.key === 'ROLE_SUPER_ADMIN' ? 'Super Admin siempre tiene acceso total' : ('Permitir a ' + role.name)"> + [title]="role.key === 'ROLE_SUPER_ADMIN' ? ('pluginSettingsSuperAdminFullAccess' | translate) : ('pluginSettingsAllowRole' | translate:{ role: role.name })"> } diff --git a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.ts b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.ts index b157bee..6552711 100644 --- a/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.ts +++ b/ogWebconsole/src/app/components/plugins/plugin-settings/plugin-settings.component.ts @@ -134,7 +134,7 @@ export class PluginSettingsComponent implements OnInit, OnChanges, OnDestroy { if (!this.pluginName) return; this.pluginService.savePluginCommandRoles(this.pluginName, this.commandRoles); this.hasRoleChanges = false; - this.toast.success('Permisos de funciones por rol actualizados correctamente', this.plugin?.title || 'Plugin'); + this.toast.success(this.translate.instant('pluginSettingsRolesSaved'), this.plugin?.title || 'Plugin'); } resetRoles(): void { @@ -147,7 +147,7 @@ export class PluginSettingsComponent implements OnInit, OnChanges, OnDestroy { } this.commandRoles = map; this.hasRoleChanges = true; - this.toast.info('Permisos restaurados a valores por defecto del plugin', this.plugin?.title || 'Plugin'); + this.toast.info(this.translate.instant('pluginSettingsRolesReset'), this.plugin?.title || 'Plugin'); this.cdr.markForCheck(); } @@ -159,11 +159,11 @@ export class PluginSettingsComponent implements OnInit, OnChanges, OnDestroy { } this.pluginService.togglePlugin(this.pluginName, checked).subscribe({ next: () => { - const statusText = checked ? 'activado' : 'desactivado'; - this.toast.success(`Plugin ${statusText} correctamente`, this.plugin?.title || 'Plugin'); + const statusKey = checked ? 'pluginSettingsPluginActivated' : 'pluginSettingsPluginDeactivated'; + this.toast.success(this.translate.instant(statusKey), this.plugin?.title || 'Plugin'); }, error: () => { - this.toast.error('Error al cambiar el estado del plugin', this.plugin?.title || 'Plugin'); + this.toast.error(this.translate.instant('pluginSettingsToggleError'), this.plugin?.title || 'Plugin'); this.loadPluginData(); } }); @@ -270,13 +270,13 @@ export class PluginSettingsComponent implements OnInit, OnChanges, OnDestroy { save(): void { if (!this.pluginName) return; this.pluginService.savePluginConfig(this.pluginName, this.configData); - this.toast.success('Configuración guardada correctamente', this.plugin?.title || 'Plugin'); + this.toast.success(this.translate.instant('pluginSettingsConfigSaved'), this.plugin?.title || 'Plugin'); } reset(): void { if (!this.pluginName) return; this.configData = this.pluginService.resetPluginConfig(this.pluginName); - this.toast.info('Configuración restaurada a valores por defecto', this.plugin?.title || 'Plugin'); + this.toast.info(this.translate.instant('pluginSettingsConfigReset'), this.plugin?.title || 'Plugin'); } setSubTab(tab: string): void { diff --git a/ogWebconsole/src/locale/cat.json b/ogWebconsole/src/locale/cat.json index 2c6d631..00615d0 100644 --- a/ogWebconsole/src/locale/cat.json +++ b/ogWebconsole/src/locale/cat.json @@ -2,6 +2,27 @@ "plugins": "Plugins", "pluginsTitle": "Plugins i Extensions", "pluginsDescription": "Gestió i personalització de mòduls instal·lats a OpenGnsys", + "pluginSettingsConfigTab": "Configuració", + "pluginSettingsRolesTab": "Funcions i Rols", + "pluginSettingsRecordsTab": "Historial i Registres", + "pluginSettingsParamsHeading": "Paràmetres de Configuració del Plugin", + "pluginSettingsRestoreDefaults": "Restaurar per defecte", + "pluginSettingsSaveConfig": "Desar Configuració", + "pluginSettingsRolesHeading": "Control d'Accés a Funcions per Rol", + "pluginSettingsSaveRoles": "Desar Permisos", + "pluginSettingsRolesDesc": "Configura quins rols d'usuari tenen autorització per visualitzar i executar cadascuna de les funcions exposades per aquest plugin. Els usuaris que no pertanyin als rols seleccionats no veuran l'opció disponible al menú d'accions de la consola.", + "pluginSettingsColCommand": "Funció / Acció del Plugin", + "pluginSettingsSuperAdminFullAccess": "Super Admin sempre té accés total", + "pluginSettingsAllowRole": "Permetre a {{ role }}", + "pluginSettingsRolesSaved": "Permisos de funcions per rol actualitzats correctament", + "pluginSettingsRolesReset": "Permisos restaurats als valors per defecte del plugin", + "pluginSettingsConfigSaved": "Configuració desada correctament", + "pluginSettingsConfigReset": "Configuració restaurada als valors per defecte", + "pluginSettingsPluginActivated": "Plugin activat correctament", + "pluginSettingsPluginDeactivated": "Plugin desactivat correctament", + "pluginSettingsToggleError": "Error en canviar l'estat del plugin", + "pluginSettingsAuthor": "Autor", + "pluginSettingsEmptyGroup": "Aquest plugin no requereix paràmetres addicionals de configuració.", "imageCloning": "Imatge / Clonació", "labelDeployed": "Desplegada", "actionAddedSuccess": "Acció afegida correctament", diff --git a/ogWebconsole/src/locale/en.json b/ogWebconsole/src/locale/en.json index a3b21f9..56970c1 100644 --- a/ogWebconsole/src/locale/en.json +++ b/ogWebconsole/src/locale/en.json @@ -2,6 +2,27 @@ "plugins": "Plugins", "pluginsTitle": "Plugins & Extensions", "pluginsDescription": "Manage and customize modules installed on OpenGnsys", + "pluginSettingsConfigTab": "Configuration", + "pluginSettingsRolesTab": "Roles & Functions", + "pluginSettingsRecordsTab": "History & Records", + "pluginSettingsParamsHeading": "Plugin Configuration Parameters", + "pluginSettingsRestoreDefaults": "Restore defaults", + "pluginSettingsSaveConfig": "Save Configuration", + "pluginSettingsRolesHeading": "Role-Based Function Access Control", + "pluginSettingsSaveRoles": "Save Permissions", + "pluginSettingsRolesDesc": "Configure which user roles are authorized to view and execute each function exposed by this plugin. Users without permission will not see the option in the console action menu.", + "pluginSettingsColCommand": "Plugin Function / Action", + "pluginSettingsSuperAdminFullAccess": "Super Admin always has full access", + "pluginSettingsAllowRole": "Allow {{ role }}", + "pluginSettingsRolesSaved": "Function permissions by role updated successfully", + "pluginSettingsRolesReset": "Permissions restored to plugin defaults", + "pluginSettingsConfigSaved": "Configuration saved successfully", + "pluginSettingsConfigReset": "Configuration restored to defaults", + "pluginSettingsPluginActivated": "Plugin activated successfully", + "pluginSettingsPluginDeactivated": "Plugin deactivated successfully", + "pluginSettingsToggleError": "Error changing plugin status", + "pluginSettingsAuthor": "Author", + "pluginSettingsEmptyGroup": "This plugin does not require additional configuration parameters.", "imageCloning": "Image / Cloning", "labelDeployed": "Deployed", "actionAddedSuccess": "Action added successfully", diff --git a/ogWebconsole/src/locale/es.json b/ogWebconsole/src/locale/es.json index 7473d93..e58d15e 100644 --- a/ogWebconsole/src/locale/es.json +++ b/ogWebconsole/src/locale/es.json @@ -2,6 +2,27 @@ "plugins": "Plugins", "pluginsTitle": "Plugins y Extensiones", "pluginsDescription": "Gestión y personalización de módulos instalados en OpenGnsys", + "pluginSettingsConfigTab": "Configuración", + "pluginSettingsRolesTab": "Funciones y Roles", + "pluginSettingsRecordsTab": "Historial y Registros", + "pluginSettingsParamsHeading": "Parámetros de Configuración del Plugin", + "pluginSettingsRestoreDefaults": "Restaurar por defecto", + "pluginSettingsSaveConfig": "Guardar Configuración", + "pluginSettingsRolesHeading": "Control de Acceso a Funciones por Rol", + "pluginSettingsSaveRoles": "Guardar Permisos", + "pluginSettingsRolesDesc": "Configura qué roles de usuario tienen autorización para visualizar y ejecutar cada una de las funciones expuestas por este plugin. Los usuarios que no pertenezcan a los roles seleccionados no verán la opción disponible en el menú de acciones de la consola.", + "pluginSettingsColCommand": "Función / Acción del Plugin", + "pluginSettingsSuperAdminFullAccess": "Super Admin siempre tiene acceso total", + "pluginSettingsAllowRole": "Permitir a {{ role }}", + "pluginSettingsRolesSaved": "Permisos de funciones por rol actualizados correctamente", + "pluginSettingsRolesReset": "Permisos restaurados a valores por defecto del plugin", + "pluginSettingsConfigSaved": "Configuración guardada correctamente", + "pluginSettingsConfigReset": "Configuración restaurada a valores por defecto", + "pluginSettingsPluginActivated": "Plugin activado correctamente", + "pluginSettingsPluginDeactivated": "Plugin desactivado correctamente", + "pluginSettingsToggleError": "Error al cambiar el estado del plugin", + "pluginSettingsAuthor": "Autor", + "pluginSettingsEmptyGroup": "Este plugin no requiere parámetros adicionales de configuración.", "imageCloning": "Imagen / Clonación", "labelDeployed": "Desplegada", "actionAddedSuccess": "Acción añadida con éxito",