From 9ce3a6c00bd00e5007d6fe12c304ca4d631b04d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20L=2E=20Garc=C3=ADa?= Date: Mon, 16 Sep 2019 13:31:58 +0200 Subject: [PATCH 1/8] Spanish files for i18n. --- scm-ui/public/locales/es/admin.json | 83 ++++++++ scm-ui/public/locales/es/commons.json | 90 +++++++++ scm-ui/public/locales/es/config.json | 78 ++++++++ scm-ui/public/locales/es/groups.json | 76 +++++++ scm-ui/public/locales/es/permissions.json | 6 + scm-ui/public/locales/es/repos.json | 189 ++++++++++++++++++ scm-ui/public/locales/es/users.json | 65 ++++++ .../main/resources/locales/es/plugins.json | 186 +++++++++++++++++ 8 files changed, 773 insertions(+) create mode 100644 scm-ui/public/locales/es/admin.json create mode 100644 scm-ui/public/locales/es/commons.json create mode 100644 scm-ui/public/locales/es/config.json create mode 100644 scm-ui/public/locales/es/groups.json create mode 100644 scm-ui/public/locales/es/permissions.json create mode 100644 scm-ui/public/locales/es/repos.json create mode 100644 scm-ui/public/locales/es/users.json create mode 100644 scm-webapp/src/main/resources/locales/es/plugins.json diff --git a/scm-ui/public/locales/es/admin.json b/scm-ui/public/locales/es/admin.json new file mode 100644 index 0000000000..14abf626d6 --- /dev/null +++ b/scm-ui/public/locales/es/admin.json @@ -0,0 +1,83 @@ +{ + "admin": { + "menu": { + "navigationLabel": "Menú de administración", + "informationNavLink": "Información", + "settingsNavLink": "Ajustes", + "generalNavLink": "General" + }, + "info": { + "currentAppVersion": "Versión actual de la aplicación", + "communityTitle": "Soporte de la comunidad", + "communityIconAlt": "Icono del soporte de la comunidad", + "communityInfo": "Contacte con el equipo de soporte de SCM-Manager para questiones acerca de SCM-Manager, para informar de errores o pedir nuevas funcionalidades use los canales oficiales.", + "communityButton": "Contactar con nuestro equipo", + "enterpriseTitle": "Soporte empresarial", + "enterpriseIconAlt": "Icono del soporte para empresas", + "enterpriseInfo": "¿Necesita ayuda para la integración de SMC-Manager en sus procesos, con la personalización de la herramienta o simplemente un acuerdo de nivel de servicio (SLA)?", + "enterprisePartner": "Póngase en contacto con nuestro socio de desarrollo Cloudogu! Su equipo está esperando para tratar sus requisitos con usted y estará encantado de darle un presupuesto.", + "enterpriseLink": "https://cloudogu.com/en/scm-manager-enterprise/", + "enterpriseButton": "Pedir soporte empresarial" + } + }, + "plugins": { + "title": "Complementos", + "installedSubtitle": "Complementos instalados", + "availableSubtitle": "Complementos disponibles", + "menu": { + "pluginsNavLink": "Complementos", + "installedNavLink": "Instalados", + "availableNavLink": "Disponibles" + }, + "installPending": "Instalar los complementos pendientes", + "noPlugins": "No se han encontrado complementos.", + "modal": { + "title": "Instalar complemento {{name}} ", + "restart": "Reiniciar para activar", + "install": "Instalar", + "installAndRestart": "Instalar y reiniciar", + "abort": "Cancelar", + "author": "Autor", + "version": "Versión", + "dependencyNotification": "Con este complemento las siguientes dependencias serán instaladas si no lo han sido ya", + "dependencies": "Dependencias", + "successNotification": "Complemento instalado correctamente. Necesita recargar la página para ver los cambios:", + "reload": "recargar ahora", + "restartNotification": "Usted debería reiniciar scm-manager sólo si actualmente no hay nadie trabajando con el.", + "installPending": "Los siguientes complementos serán instalados y después de la instalación sdm-manager será reiniciado." + } + }, + "repositoryRole": { + "navLink": "Roles y permisos", + "title": "Roles y permisos", + "errorTitle": "Error", + "errorSubtitle": "Error desconocido", + "createSubtitle": "Crear nuevo rol", + "editSubtitle": "Editar rol", + "overview": { + "title": "Visión general de todos los roles", + "noPermissionRoles": "No se han encontrado roles.", + "createButton": "Crear rol" + }, + "editButton": "Editar", + "name": "Nombre", + "type": "Tipo", + "verbs": "Permisos", + "system": "Sistema", + "form": { + "name": "Nombre", + "permissions": "Permisos", + "submit": "Guardar" + }, + "delete": { + "button": "Borrar", + "subtitle": "Eliminar el rol", + "confirmAlert": { + "title": "Eliminar el rol", + "message": "¿Realmente desea borrar el rol? Todos los usuarios de este rol perderń sus permisos.", + "submit": "Sí", + "cancel": "No" + } + } + } +} diff --git a/scm-ui/public/locales/es/commons.json b/scm-ui/public/locales/es/commons.json new file mode 100644 index 0000000000..e130ce8b17 --- /dev/null +++ b/scm-ui/public/locales/es/commons.json @@ -0,0 +1,90 @@ +{ + "login": { + "title": "Iniciar sesión", + "subtitle": "Por favor inicie sesión para continuar", + "logo-alt": "SCM-Manager", + "username-placeholder": "Su nombre de usuario", + "password-placeholder": "Su contraseña", + "submit": "Iniciar sesión", + "plugin": "Plugin", + "feature": "Feature", + "tip": "Tip", + "loading": "Cargando ...", + "error": "Error" + }, + "logout": { + "error": { + "title": "Cierre de sesión fallido", + "subtitle": "Ha ocurrido un error al cerrar la sesión" + } + }, + "app": { + "error": { + "title": "Error", + "subtitle": "Ha ocurrido un error desconocido" + } + }, + "errorNotification": { + "prefix": "Error", + "loginLink": "Aquí puede iniciar la sesión de nuevo.", + "timeout": "La sesión ha caducado", + "wrongLoginCredentials": "Credenciales incorrectas", + "forbidden": "Usted no tiene permiso para ver esta sección" + }, + "loading": { + "alt": "Cargando ..." + }, + "logo": { + "alt": "SCM-Manager" + }, + "primary-navigation": { + "repositories": "Repositorios", + "users": "Usuarios", + "logout": "Cerrar sesión", + "groups": "Grupos", + "admin": "Administración" + }, + "filterEntries": "Filtrar entradas", + "autocomplete": { + "group": "Grupo", + "user": "Usuario", + "noGroupOptions": "No hay sugerencias disponibles", + "groupPlaceholder": "Nombre del grupo", + "noUserOptions": "No hay sugerencias disponibles", + "userPlaceholder": "Nombre de usuario", + "loading": "Cargando..." + }, + "paginator": { + "next": "Siguiente", + "previous": "Anterior" + }, + "profile": { + "navigationLabel": "Menú de sección", + "informationNavLink": "Información", + "changePasswordNavLink": "Cambiar contraseña", + "settingsNavLink": "Ajustes", + "username": "Nombre de usuario", + "displayName": "Nombre a mostrar", + "mail": "Correo electrónico", + "groups": "Grupos", + "information": "Información", + "change-password": "Cambiar contraseña", + "error-title": "Error", + "error-subtitle": "No se puede mostrar la sección", + "error": "Error", + "error-message": "'me' no está definido" + }, + "password": { + "label": "Contraseña", + "newPassword": "Nueva contraseña", + "passwordHelpText": "Contraseña del usuario en texto plano", + "passwordConfirmHelpText": "Repita la contraseña para confirmar", + "currentPassword": "Contraseña actual", + "currentPasswordHelpText": "La contraseña ya está en uso", + "confirmPassword": "Confirme la contraseña", + "passwordInvalid": "La contraseña debe tener entre 6 y 32 caracteres", + "passwordConfirmFailed": "Las contraseñas deben ser identicas", + "submit": "Guardar", + "changedSuccessfully": "Contraseña cambiada correctamente" + } +} diff --git a/scm-ui/public/locales/es/config.json b/scm-ui/public/locales/es/config.json new file mode 100644 index 0000000000..3b5ab843dd --- /dev/null +++ b/scm-ui/public/locales/es/config.json @@ -0,0 +1,78 @@ +{ + "config": { + "navigationLabel": "Menú de administración", + "title": "Configuración global", + "errorTitle": "Error", + "errorSubtitle": "Error de configuración desconocido", + "form": { + "submit": "Enviar", + "submit-success-notification": "¡Configuración cambiada correctamente!", + "no-read-permission-notification": "Por favor, tenga en cuenta: ¡No tiene permiso para ver la configuración!", + "no-write-permission-notification": "Por favor, tenga en cuenta: ¡No tiene permiso para editar la configuración!" + } + }, + "proxy-settings": { + "name": "Ajustes del proxy", + "proxy-password": "Contraseña del proxy", + "proxy-port": "Puerto del proxy", + "proxy-server": "Servidor proxy", + "proxy-user": "Usuario del proxy", + "enable-proxy": "Habilitar proxy", + "proxy-excludes": "Excepciones del proxy", + "remove-proxy-exclude-button": "Eliminar las excepciones del proxy", + "add-proxy-exclude-error": "La excepción que desea añadir al proxy es incorrecta", + "add-proxy-exclude-textfield": "Añada aquí las excepciones que desee incluir al proxy", + "add-proxy-exclude-button": "Añadir excepción al proxy" + }, + "base-url-settings": { + "name": "Ajustes de la URL base", + "base-url": "URL base", + "force-base-url": "Forzar la URL base" + }, + "login-attempt": { + "name": "Intento de inicio de sesión", + "login-attempt-limit": "Límite de intentos de inicio de sesión", + "login-attempt-limit-timeout": "Tiempo de espera para el intento de inicio de sesión" + }, + "general-settings": { + "realm-description": "Descripción del dominio", + "disable-grouping-grid": "Deshabilitar grupos", + "date-format": "Formato de la fecha", + "anonymous-access-enabled": "Acceso anónimo habilitado", + "skip-failed-authenticators": "Omitir autenticadores fallidos", + "plugin-url": "URL del almacén de complementos", + "enabled-xsrf-protection": "Protección XSRF habilitada", + "namespace-strategy": "Estrategia para el espacio de nombres", + "login-info-url": "URL de información de inicio de sesión" + }, + "validation": { + "date-format-invalid": "El formato de la fecha es incorrecto", + "login-attempt-limit-timeout-invalid": "El valor no es un número", + "login-attempt-limit-invalid": "El valor no es un número", + "plugin-url-invalid": "La URL es incorrecta" + }, + "help": { + "realmDescriptionHelpText": "Descripción del dominio de autenticación.", + "dateFormatHelpText": "Formato de la fecha. Por favor, heche un vistazo a la documentación de MomentJS.", + "pluginUrlHelpText": "La URL de la API del almacén de complementos. Explicación de los marcadores: version = Versión de SCM-Manager; os = Sistema operativo; arch = Arquitectura", + "enableForwardingHelpText": "Habilitar el redireccionamiento de puertos para mod_proxy.", + "disableGroupingGridHelpText": "Deshabilitar los grupos de repositorios. Se requiere una recarga completa de la página después de un cambio en este valor.", + "allowAnonymousAccessHelpText": "Los usuarios anónimos tienen acceso de lectura en los repositorios públicos.", + "skipFailedAuthenticatorsHelpText": "No detenga la cadena de autenticación si un autenticador encuentra al usuario pero no puede autenticarlo.", + "adminGroupsHelpText": "Nombres de los grupos con permisos de administrador.", + "adminUsersHelpText": "Nombres de los usuarios con permisos de administrador.", + "forceBaseUrlHelpText": "Redirige a la URL base si la solicitud proviene de otra URL.", + "baseUrlHelpText": "La URL de la aplicación (con la ruta del contexto), por ejemplo: http://localhost:8080/scm", + "loginAttemptLimitHelpText": "Máximo número permitido de intentos de inicio de sesión. Use -1 para deshabilitar este límite.", + "loginAttemptLimitTimeoutHelpText": "Tiempo de espera en segundos para los usuarios que están deshabilitados temporalmente debido a demasiado intentos fallidos de inicio de sesión.", + "enableProxyHelpText": "Habilitar proxy", + "proxyPortHelpText": "El puerto del proxy", + "proxyPasswordHelpText": "La contraseña para la autenticación del servidor proxy.", + "proxyServerHelpText": "El servidor proxy", + "proxyUserHelpText": "El nombre de usuario para la autenticación del servidor proxy.", + "proxyExcludesHelpText": "Patrones globales para hostnames que deben excluirse de la configuración del proxy.", + "enableXsrfProtectionHelpText": "Habilitar la protección de cookies XSRF. Nota: Esta funcionalidad todavía es experimental.", + "nameSpaceStrategyHelpText": "La estrategia para el espacio de nombres.", + "loginInfoUrlHelpText": "URL para la información en el inicio de sesión (consejos sobre complementos y funcionalidades en la página de inicio de sesión). Si esto se omite, no se mostrará información de inicio de sesión." + } +} diff --git a/scm-ui/public/locales/es/groups.json b/scm-ui/public/locales/es/groups.json new file mode 100644 index 0000000000..ffba16c354 --- /dev/null +++ b/scm-ui/public/locales/es/groups.json @@ -0,0 +1,76 @@ +{ + "group": { + "name": "Nombre", + "description": "Descripción", + "creationDate": "Fecha de creación", + "lastModified": "Última modificación", + "type": "Tipo", + "external": "Externo", + "internal": "Interno", + "members": "Miembros" + }, + "groups": { + "title": "Grupos", + "subtitle": "Crear, leer, actualizar y borrar grupos", + "noGroups": "No se han encontrado grupos." + }, + "singleGroup": { + "errorTitle": "Error", + "errorSubtitle": "Error de grupo desconocido", + "menu": { + "navigationLabel": "Menú de grupo", + "informationNavLink": "Información", + "settingsNavLink": "Ajustes", + "generalNavLink": "General", + "setPermissionsNavLink": "Permisos" + } + }, + "add-group": { + "title": "Crear grupo", + "subtitle": "Crear un nuevo grupo" + }, + "create-group-button": { + "label": "Crear grupo" + }, + "edit-group-button": { + "label": "Editar" + }, + "add-member-button": { + "label": "Añadir miembro" + }, + "remove-member-button": { + "label": "Eliminar miembro" + }, + "add-member-textfield": { + "label": "Añadir miembro", + "error": "El nombre del miembro es incorrecto" + }, + "add-member-autocomplete": { + "placeholder": "Introducir el nombre del miembro", + "loading": "Cargando...", + "no-options": "No hay sugerencias disponibles" + }, + "groupForm": { + "subtitle": "Editar grupo", + "externalSubtitle": "Editar grupo externo", + "submit": "Guardar", + "nameError": "El nombre del grupo es incorrecto", + "descriptionError": "La descripción es incorrecta", + "help": { + "nameHelpText": "Nombre único del grupo", + "descriptionHelpText": "Descripción breve del grupo", + "memberHelpText": "Nombres de usuario de los miembros del grupo", + "externalHelpText": "Los miembros son gestionados por un sistema externo como por ejemplo LDAP" + } + }, + "deleteGroup": { + "subtitle": "Borrar grupo", + "button": "Borrar", + "confirmAlert": { + "title": "Borrar grupo", + "message": "¿Realmente desea borrar el grupo?", + "submit": "Sí", + "cancel": "No" + } + } +} diff --git a/scm-ui/public/locales/es/permissions.json b/scm-ui/public/locales/es/permissions.json new file mode 100644 index 0000000000..d3da1103ea --- /dev/null +++ b/scm-ui/public/locales/es/permissions.json @@ -0,0 +1,6 @@ +{ + "setPermissions": { + "button": "Guardar", + "setPermissionsSuccessful": "Permisos guardados correctamente" + } +} diff --git a/scm-ui/public/locales/es/repos.json b/scm-ui/public/locales/es/repos.json new file mode 100644 index 0000000000..08c9235593 --- /dev/null +++ b/scm-ui/public/locales/es/repos.json @@ -0,0 +1,189 @@ +{ + "repository": { + "namespace": "Espacio de nombres", + "name": "Nombre", + "type": "Tipo", + "contact": "Contacto", + "description": "Descripción", + "creationDate": "Fecha de creación", + "lastModified": "Última modificación" + }, + "validation": { + "namespace-invalid": "El espacio de nombres del repositorio es incorrecto", + "name-invalid": "El nombre del repositorio es incorrecto", + "contact-invalid": "El contacto debe ser una dirección de correo electrónico válida", + "branch": { + "nameInvalid": "El nombre de la rama es incorrecto" + } + }, + "help": { + "namespaceHelpText": "El espacio de nombres del repositorio. Este nombre formará parte de la URL del repositorio.", + "nameHelpText": "El nombre del repositorio. Este nombre formará parte de la URL del repositorio.", + "typeHelpText": "El tipo del repositorio (Mercurial, Git or Subversion).", + "contactHelpText": "Dirección del correo electrónico de la persona responsable del repositorio.", + "descriptionHelpText": "Breve descripción del repositorio." + }, + "repositoryRoot": { + "errorTitle": "Error", + "errorSubtitle": "Error de repositorio desconocido", + "menu": { + "navigationLabel": "Menú de repositorio", + "informationNavLink": "Información", + "branchesNavLink": "Ramas", + "historyNavLink": "Commits", + "sourcesNavLink": "Fuentes", + "settingsNavLink": "Ajustes", + "generalNavLink": "General", + "permissionsNavLink": "Permisos" + } + }, + "overview": { + "title": "Repositorios", + "subtitle": "Visión general de los repositorios disponibles", + "noRepositories": "No se han encontrado repositorios.", + "createButton": "Crear repositorio" + }, + "create": { + "title": "Crear repositorio", + "subtitle": "Crear un nuevo repositorio" + }, + "branches": { + "overview": { + "title": "Vivisón general de todas las ramas", + "noBranches": "No se han encontrado ramas.", + "createButton": "Crear rama" + }, + "table": { + "branches": "Ramas" + }, + "create": { + "title": "Crear rama", + "source": "Rama padre", + "name": "Nombre", + "submit": "Crear rama" + } + }, + "branch": { + "name": "Nombre:", + "commits": "Commits", + "sources": "Fuentes", + "defaultTag": "Por defecto" + }, + "changesets": { + "errorTitle": "Error", + "errorSubtitle": "No se han podido recuperar los changesets", + "noChangesets": "No se han encontrado changesets para esta rama branch.", + "branchSelectorLabel": "Ramas" + }, + "changeset": { + "description": "Descripción", + "summary": "El changeset {{id}} fue entregado {{time}}", + "shortSummary": "Entregado {{id}} {{time}}", + "tags": "Etiquetas", + "diffNotSupported": "La comparación de changesets no es soportada por el tipo de repositorio", + "author": { + "prefix": "Creado por", + "mailto": "Enviar correo electrónico a" + }, + "buttons": { + "details": "Detalles", + "sources": "Fuentes" + } + }, + "repositoryForm": { + "subtitle": "Editar repositorio", + "submit": "Guardar" + }, + "sources": { + "file-tree": { + "name": "Nombre", + "length": "Longitud", + "lastModified": "Última modificación", + "description": "Descripción", + "branch": "Rama" + }, + "content": { + "historyButton": "Historia", + "sourcesButton": "Fuentes", + "downloadButton": "Descargar", + "path": "Ruta", + "branch": "Rama", + "lastModified": "Última modificación", + "description": "Discripción", + "size": "tamaño" + }, + "noSources": "No se han encontrado fuentes para esta rama." + }, + "permission": { + "title": "Editar permisos", + "user": "Usuario", + "group": "Grupo", + "error-title": "Error", + "error-subtitle": "Error de permisos desconocido", + "name": "Usuario o grupo", + "role": "Rol", + "custom": "Personalizar", + "permissions": "Permisos", + "group-permission": "Permiso de grupo", + "user-permission": "Permiso de usuario", + "edit-permission": { + "delete-button": "Borrar", + "save-button": "Guardar cambios" + }, + "advanced-button": { + "label": "Avanzado" + }, + "delete-permission-button": { + "label": "Borrar", + "confirm-alert": { + "title": "Borrar permiso", + "message": "¿Realmente desea borrar el permiso?", + "submit": "Sí", + "cancel": "No" + } + }, + "add-permission": { + "add-permission-heading": "Añadir nuevo permiso", + "submit-button": "Guardar", + "name-input-invalid": "¡No se permiten permisos vacíos! ¡Si el permiso no está vacío, su nombre es inválido o ya existe!" + }, + "help": { + "groupPermissionHelpText": "Establece si un permiso es de grupo. Si no está marcado es un permiso de usuario.", + "nameHelpText": "Gestionar los permisos de un usuario o grupo.", + "roleHelpText": "READ = leer; WRITE = leer and escribir; OWNER = leer, escribir y también la capacidad de gestionar las propiedades y permisos. Si no hay nada seleccionado use el botón 'Avanzado' para ver los permisos en detalle.", + "permissionsHelpText": "Use esto para especificar su propio conjunto de permisos independientemente de los roles predefinidos." + }, + "advanced": { + "dialog": { + "title": "Permisos avanzados", + "submit": "Guardar", + "abort": "Cancelar" + } + } + }, + "deleteRepo": { + "subtitle": "Borrar repositorio", + "button": "Borrar", + "confirmAlert": { + "title": "Borrar repositorio", + "message": "¿Realmente desea borrar el repositorio?", + "submit": "sí", + "cancel": "No" + } + }, + "diff": { + "changes": { + "add": "añadido", + "delete": "borrado", + "modify": "modificado", + "rename": "renombrado", + "copy": "copiado" + }, + "sideBySide": "dos columnas", + "combined": "combinado" + }, + "fileUpload": { + "clickHere": "Haga click aquí para seleccionar su fichero", + "dragAndDrop": "Arrastre y suelte los ficheros aquí" + } +} diff --git a/scm-ui/public/locales/es/users.json b/scm-ui/public/locales/es/users.json new file mode 100644 index 0000000000..d5ea97b95a --- /dev/null +++ b/scm-ui/public/locales/es/users.json @@ -0,0 +1,65 @@ +{ + "user": { + "name": "Nombre de usuario", + "displayName": "Nombre a mostrar", + "mail": "Correo electrónico", + "password": "Contraseña", + "active": "Activo", + "inactive": "Inactivo", + "type": "Tipo", + "creationDate": "Fecha de creación", + "lastModified": "Última modificación" + }, + "validation": { + "mail-invalid": "El correo electrónico es incorrecto", + "name-invalid": "El nombre es incorrecto", + "displayname-invalid": "El nombre a mostrar es incorrecto" + }, + "help": { + "usernameHelpText": "Nombre único del usuario.", + "displayNameHelpText": "Nombre de usuario a mostrar.", + "mailHelpText": "Dirección de correo electrónico del usuario.", + "adminHelpText": "Un administrador es capaz de crear, modificar y borrar repositorios, grupos y usuarios.", + "activeHelpText": "Activar o desactivar el usuario." + }, + "users": { + "title": "Usuarios", + "subtitle": "Crear, leer, actualizar y borrar usuarios", + "noUsers": "No se han encontrado usuarios.", + "createButton": "Crear usuario" + }, + "singleUser": { + "errorTitle": "Error", + "errorSubtitle": "Error de usuario desconocido", + "menu": { + "navigationLabel": "Menú de usuario", + "informationNavLink": "Información", + "settingsNavLink": "Ajustes", + "generalNavLink": "General", + "setPasswordNavLink": "Contraseña", + "setPermissionsNavLink": "Permisos" + } + }, + "createUser": { + "title": "Crear usuario", + "subtitle": "Crear un nuevo usuario" + }, + "deleteUser": { + "subtitle": "Borrar usuario", + "button": "Borrar", + "confirmAlert": { + "title": "Borrar usuario", + "message": "¿Realmente desea borrar el usuario?", + "submit": "Sí", + "cancel": "No" + } + }, + "singleUserPassword": { + "button": "Guardar", + "setPasswordSuccessful": "Contraseña guardada correctamente" + }, + "userForm": { + "subtitle": "Editar usuario", + "button": "Guardar" + } +} diff --git a/scm-webapp/src/main/resources/locales/es/plugins.json b/scm-webapp/src/main/resources/locales/es/plugins.json new file mode 100644 index 0000000000..cef33f6007 --- /dev/null +++ b/scm-webapp/src/main/resources/locales/es/plugins.json @@ -0,0 +1,186 @@ +{ + "permissions": { + "*": { + "displayName": "Administrador global", + "description": "Puede administrar la instancia completa" + }, + "repository": { + "read,pull": { + "*": { + "displayName": "Leer todos los repositorios", + "description": "Puede ver y clonar todos los repositorios" + } + }, + "read,pull,push": { + "*": { + "displayName": "Escribir todos los repositorios", + "description": "Puede ver, clonar y enviar cambios a todos los repositorios" + } + }, + "*": { + "displayName": "Poseer todos los repositorios", + "description": "Puede ver, clonar, enviar cambios, configurar y eliminar todos los repositorios" + }, + "create": { + "displayName": "Crear repositorios", + "description": "Puede crear repositorios" + } + }, + "user": { + "*": { + "displayName": "Administrar usuarios", + "description": "Puede administrar todos los usuarios" + } + }, + "group": { + "*": { + "displayName": "Administrar grupos", + "description": "Puede administrar todos los grupos" + } + }, + "permission": { + "*": { + "displayName": "Administrar permisos", + "description": "Puede administrar permisos (addicionalmente necesita 'administrar usuarios' y/o 'administrar grupos')." + } + }, + "configuration": { + "list": { + "displayName": "Administración basíca", + "description": "Prerequisito para todos los permisos administrativos. Sin este permiso la configuración no será visible." + }, + "read,write": { + "global": { + "displayName": "Administrar núcleo", + "description": "Puede administrar las opciones centrales de SCM-Manager" + }, + "*": { + "displayName": "Administrar núcleo y complementos", + "description": "Puede configurar las opciones centrales de SCM-Manager y todos los complementos (plugins)" + } + } + }, + "repositoryRole": { + "read,write": { + "displayName": "Administrar permisos de roles de repositorio personalizados", + "description": "Puede crear, modificar y borrar roles de repositorios personalizados y sus permisos" + } + }, + "plugin": { + "read": { + "displayName": "Leer todos los complementos", + "description": "Puede leer todos los complementos instalados y los disponibles" + }, + "read,write": { + "displayName": "Leer y gestionar todos los complementos", + "description": "Puede leer y gestionar todos los complementos instalados y los diponibles" + } + }, + "unknown": "Permiso desconocido" + }, + "verbs": { + "repository": { + "read": { + "displayName": "leer repositorio", + "description": "Puede leer el repositorio dentro de SCM-Manager" + }, + "modify": { + "displayName": "modificar los metadatos del repositorio", + "description": "Puede modificar las propiedades básicas del repositorio" + }, + "delete": { + "displayName": "borrar repositorio", + "description": "Puede borrar el repositorio" + }, + "pull": { + "displayName": "Traer los cambios o crear copia local del repositorio (pull/checkout)", + "description": "Puede traer los cambios o crear una copia de trabajo local desde el repositorio (pull/checkout)" + }, + "push": { + "displayName": "Publicar o enviar cambios al repositorio (push/commit)", + "description": "Puede cambiar el contenido del repositorio (push/commit)" + }, + "permissionRead": { + "displayName": "leer permisos", + "description": "Puede ver los permisos del repositorio" + }, + "permissionWrite": { + "displayName": "modificar permisos", + "description": "Puede modificar los permisos del repositorio" + }, + "*": { + "displayName": "poseer repositorio", + "description": "Puede cambiar todo en el repositorio (incluidos los demás permisos)" + } + } + }, + "errors": { + "context": "Contexto", + "errorCode": "Código de error", + "transactionId": "Identificador de la transacción", + "moreInfo": "Para más información ver", + "violations": "Violaciones:", + "AGR7UzkhA1": { + "displayName": "No encontrado", + "description": "No se pudo encontrar la entidad solicitada. Puede haber sido eliminado en otra sesión" + }, + "FtR7UznKU1": { + "displayName": "Ya existe", + "description": "Ya hay una entidad con el mismo valor de clave." + }, + "9BR7qpDAe1": { + "displayName": "No se permite cambiar la contraseña", + "description": "No tiene permiso para cambiar la contraseña." + }, + "2wR7UzpPG1": { + "displayName": "Modificaciones actuales", + "description": "La entidad ha sido modificada concurrentemente por otro usuario o proceso. Por favor recarge la entidad." + }, + "9SR8G0kmU1": { + "displayName": "Funcionalidad no soportada", + "description": "El sistema de control de versiones de este repositorio no admite la funcionalidad solicitada." + }, + "CmR8GCJb31": { + "displayName": "Error interno del servidor", + "description": "Se ha producido un error interno en el servidor. Por favor contacte con su administrador para obtener más ayuda." + }, + "92RCCCMHO1": { + "displayName": "No se ha podido encontrar la URL interna", + "description": "Una petición interna no ha podido ser manejada por el servidor. Por favor contacte con su administrador para obtener más ayuda." + }, + "2VRCrvpL71": { + "displayName": "Formato de datos invorrecto", + "description": "Los datos enviados al servidor son son correctos. Por favor revise los datos enviados o contacte con su administrador para obtener más ayuda." + }, + "8pRBYDURx1": { + "displayName": "Tipo de datos incorrecto", + "description": "El tipo de los datos enviados el servidor es incorrecto. Por favor contacte con su administrador para obtener más ayuda." + }, + "1wR7ZBe7H1": { + "displayName": "Entrada incorrecta", + "description": "Los datos no pueden ser validados. Por favor corríjalos e inténtelo de nuevo." + }, + "3zR9vPNIE1": { + "displayName": "Entrada incorrecta", + "description": "Los datos no pueden ser validados. Por favor corríjalos e inténtelo de nuevo." + }, + "CHRM7IQzo1": { + "displayName": "Cambio fallido", + "description": "El cambio ha fallado. Por favor contacte con su administrador para obtener más ayuda." + }, + "thbsUFokjk": { + "displayName": "Cambio inválido en el identificador", + "description": "Un identificador ha sido cambiado en la entidad. Esto no está permitido." + }, + "40RaYIeeR1": { + "displayName": "No se han efectuado modificaciones.", + "description": "Ningún fichero del repositorio ha sido modificado. Por lo tanto, no se confirmará ninguna modificación." + } + }, + "namespaceStrategies": { + "UsernameNamespaceStrategy": "Nombre de usuario", + "CustomNamespaceStrategy": "Personalizar", + "CurrentYearNamespaceStrategy": "Año actual", + "RepositoryTypeNamespaceStrategy": "Tipo de repositorio" + } +} From d60918c8209fa7d85e2229d0cb2360b0dac813a0 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Mon, 16 Sep 2019 14:31:55 +0200 Subject: [PATCH 2/8] implement update function for plugins on frontend / adjust the plugin pending modal to show pending installations and updates --- .../packages/ui-types/src/Plugin.js | 9 + .../packages/ui-types/src/index.js | 2 +- scm-ui/public/locales/de/admin.json | 16 +- scm-ui/public/locales/en/admin.json | 16 +- ...ndingAction.js => ExecutePendingAction.js} | 18 +- ...PendingModal.js => ExecutePendingModal.js} | 75 +++-- .../{PluginModal.js => InstallPluginModal.js} | 10 +- .../admin/plugins/components/PluginEntry.js | 71 +++-- ...Notification.js => SuccessNotification.js} | 0 .../plugins/components/UpdatePluginModal.js | 288 ++++++++++++++++++ .../plugins/containers/PluginsOverview.js | 64 ++-- scm-ui/src/admin/plugins/modules/plugins.js | 68 ++++- scm-ui/src/modules/indexResource.js | 4 + .../v2/resources/PendingPluginResource.java | 11 +- 14 files changed, 568 insertions(+), 84 deletions(-) rename scm-ui/src/admin/plugins/components/{InstallPendingAction.js => ExecutePendingAction.js} (67%) rename scm-ui/src/admin/plugins/components/{InstallPendingModal.js => ExecutePendingModal.js} (55%) rename scm-ui/src/admin/plugins/components/{PluginModal.js => InstallPluginModal.js} (96%) rename scm-ui/src/admin/plugins/components/{InstallSuccessNotification.js => SuccessNotification.js} (100%) create mode 100644 scm-ui/src/admin/plugins/components/UpdatePluginModal.js diff --git a/scm-ui-components/packages/ui-types/src/Plugin.js b/scm-ui-components/packages/ui-types/src/Plugin.js index 0114716757..f7175fc209 100644 --- a/scm-ui-components/packages/ui-types/src/Plugin.js +++ b/scm-ui-components/packages/ui-types/src/Plugin.js @@ -4,6 +4,7 @@ import type {Collection, Links} from "./hal"; export type Plugin = { name: string, version: string, + newVersion: string, displayName: string, description?: string, author: string, @@ -24,3 +25,11 @@ export type PluginGroup = { name: string, plugins: Plugin[] }; + +export type PendingPlugins = { + _links: Links, + _embedded: { + new: [], + update: [], + } +} diff --git a/scm-ui-components/packages/ui-types/src/index.js b/scm-ui-components/packages/ui-types/src/index.js index ba2b9f5481..9207868a73 100644 --- a/scm-ui-components/packages/ui-types/src/index.js +++ b/scm-ui-components/packages/ui-types/src/index.js @@ -25,7 +25,7 @@ export type { SubRepository, File } from "./Sources"; export type { SelectValue, AutocompleteObject } from "./Autocomplete"; -export type { Plugin, PluginCollection, PluginGroup } from "./Plugin"; +export type { Plugin, PluginCollection, PluginGroup, PendingPlugins } from "./Plugin"; export type { RepositoryRole } from "./RepositoryRole"; diff --git a/scm-ui/public/locales/de/admin.json b/scm-ui/public/locales/de/admin.json index 8d9c876537..d2cd2c6640 100644 --- a/scm-ui/public/locales/de/admin.json +++ b/scm-ui/public/locales/de/admin.json @@ -29,22 +29,32 @@ "installedNavLink": "Installiert", "availableNavLink": "Verfügbar" }, - "installPending": "Austehende Plugins installieren", + "executePending": "Austehende Plugin-Änderungen ausführen", "noPlugins": "Keine Plugins gefunden.", "modal": { - "title": "{{name}} Plugin installieren", + "title": { + "install": "{{name}} Plugin installieren", + "update": "{{name}} Plugin aktualisieren" + }, "restart": "Neustarten um Plugin zu aktivieren", "install": "Installieren", + "update": "Aktualisieren", + "installQueue": "Werden installiert:", + "updateQueue": "Werden aktualisiert:", "installAndRestart": "Installieren und Neustarten", + "updateAndRestart": "Aktualisieren und Neustarten", + "executeAndRestart": "Ausführen und Neustarten", "abort": "Abbrechen", "author": "Autor", "version": "Version", + "currentVersion": "Installierte Version", + "newVersion": "Neue Version", "dependencyNotification": "Mit diesem Plugin werden folgende Abhängigkeiten mit installiert, wenn sie noch nicht vorhanden sind!", "dependencies": "Abhängigkeiten", "successNotification": "Das Plugin wurde erfolgreich installiert. Um Änderungen an der UI zu sehen, muss die Seite neu geladen werden:", "reload": "jetzt neu laden", "restartNotification": "Der SCM-Manager Kontext sollte nur neu gestartet werden, wenn aktuell niemand damit arbeitet.", - "installPending": "Die folgenden Plugins werden installiert. Anschließend wird der SCM-Manager Kontext neu gestartet." + "executePending": "Die folgenden Plugin-Änderungen werden ausgeführt. Anschließend wird der SCM-Manager Kontext neu gestartet." } }, "repositoryRole": { diff --git a/scm-ui/public/locales/en/admin.json b/scm-ui/public/locales/en/admin.json index 99febb68fc..63f6089b09 100644 --- a/scm-ui/public/locales/en/admin.json +++ b/scm-ui/public/locales/en/admin.json @@ -29,22 +29,32 @@ "installedNavLink": "Installed", "availableNavLink": "Available" }, - "installPending": "Install pending plugins", + "executePending": "Execute pending plugin changes", "noPlugins": "No plugins found.", "modal": { - "title": "Install {{name}} Plugin", + "title": { + "install": "Install {{name}} Plugin", + "update": "Update {{name}} Plugin" + }, "restart": "Restart to activate", "install": "Install", + "update": "Update", + "installQueue": "Will be installed:", + "updateQueue": "Will be updated:", "installAndRestart": "Install and Restart", + "updateAndRestart": "Update and Restart", + "executeAndRestart": "Execute and Restart", "abort": "Abort", "author": "Author", "version": "Version", + "currentVersion": "Installed version", + "newVersion": "New version", "dependencyNotification": "With this plugin, the following dependencies will be installed if they are not available yet!", "dependencies": "Dependencies", "successNotification": "Successful installed plugin. You have to reload the page, to see ui changes:", "reload": "reload now", "restartNotification": "You should only restart the scm-manager context if no one else is currently working with it.", - "installPending": "The following plugins will be installed and after installation the scm-manager context will be restarted." + "executePending": "The following plugin changes will be executed and after that the scm-manager context will be restarted." } }, "repositoryRole": { diff --git a/scm-ui/src/admin/plugins/components/InstallPendingAction.js b/scm-ui/src/admin/plugins/components/ExecutePendingAction.js similarity index 67% rename from scm-ui/src/admin/plugins/components/InstallPendingAction.js rename to scm-ui/src/admin/plugins/components/ExecutePendingAction.js index 49a444de11..6c8d407205 100644 --- a/scm-ui/src/admin/plugins/components/InstallPendingAction.js +++ b/scm-ui/src/admin/plugins/components/ExecutePendingAction.js @@ -1,12 +1,12 @@ // @flow import React from "react"; import { Button } from "@scm-manager/ui-components"; -import type { PluginCollection } from "@scm-manager/ui-types"; +import type { PendingPlugins } from "@scm-manager/ui-types"; import { translate } from "react-i18next"; -import InstallPendingModal from "./InstallPendingModal"; +import ExecutePendingModal from "./ExecutePendingModal"; type Props = { - collection: PluginCollection, + pendingPlugins: PendingPlugins, // context props t: string => string @@ -16,7 +16,7 @@ type State = { showModal: boolean }; -class InstallPendingAction extends React.Component { +class ExecutePendingAction extends React.Component { constructor(props: Props) { super(props); this.state = { @@ -38,11 +38,11 @@ class InstallPendingAction extends React.Component { renderModal = () => { const { showModal } = this.state; - const { collection } = this.props; + const { pendingPlugins } = this.props; if (showModal) { return ( - ); @@ -57,7 +57,7 @@ class InstallPendingAction extends React.Component { {this.renderModal()}