Browse Source

Upmerge 7.0.2 changes

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 6 years ago
parent
commit
f847ec58ce

+ 4 - 0
ecl/eclcc/eclcc.cpp

@@ -1246,6 +1246,10 @@ void EclCC::processSingleQuery(EclCompileInstance & instance,
             parseCtx.globalDependTree.setown(createPTree(ipt_fast)); //to locate associated manifests, keep separate from user specified MetaOptions
         if (optGenerateMeta || optIncludeMeta)
         {
+            //Currently the meta information is generated as a side-effect of parsing the attributes, so disable
+            //using the simplified expressions if meta information is requested.  HPCC-20716 will improve this.
+            parseCtx.setIgnoreCache();
+
             HqlParseContext::MetaOptions options;
             options.includePublicDefinitions = instance.wu->getDebugValueBool("metaIncludePublic", true);
             options.includePrivateDefinitions = instance.wu->getDebugValueBool("metaIncludePrivate", true);

+ 28 - 0
ecl/hqlcpp/hqltcppc.cpp

@@ -1385,6 +1385,34 @@ void CIfBlockInfo::buildDeserialize(HqlCppTranslator & translator, BuildCtx & ct
     ctx.associateExpr(sizeOfIfBlock, cachedSize.expr);
 }
 
+void CIfBlockInfo::buildClear(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, int direction)
+{
+    //MORE: This should really associate offset of the ifblock with the offset of its first child as well.
+    CHqlBoundExpr boundOffset;
+    buildOffset(translator, ctx, selector, boundOffset);
+
+    //NB: Sizeof(ifblock) has an unusual representation...
+    OwnedHqlExpr sizeOfIfBlock = createValue(no_sizeof, makeIntType(4,false), createSelectExpr(LINK(selector->queryExpr()), LINK(column)));
+    CHqlBoundTarget cachedSize;
+    cachedSize.expr.setown(ctx.getTempDeclare(sizetType, queryZero()));
+
+    //MORE: Should also conditionally set a variable to the size of the ifblock to simplify subsequent generated code
+    OwnedHqlExpr cond = selector->queryRootRow()->bindToRow(condition, queryRootSelf());
+    CHqlBoundExpr bound;
+    translator.buildSimpleExpr(ctx, cond, bound);
+    BuildCtx condctx(ctx);
+    condctx.addFilter(bound.expr);
+
+    //MORE: This test could be avoided if the first child is *actually* variable length
+    ensureTargetAvailable(translator, condctx, selector, CContainerInfo::getTotalMinimumSize());
+    CContainerInfo::buildClear(translator, condctx, selector, direction);
+
+    //Avoid recalculating the size outside of the ifblock()
+    translator.buildExprAssign(condctx, cachedSize, sizeOfIfBlock);
+
+    ctx.associateExpr(sizeOfIfBlock, cachedSize.expr);
+}
+
 void CIfBlockInfo::buildSerialize(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * helper, IAtom * serializeForm)
 {
     OwnedHqlExpr cond = selector->queryRootRow()->bindToRow(condition, queryRootSelf());

+ 1 - 0
ecl/hqlcpp/hqltcppc.ipp

@@ -262,6 +262,7 @@ public:
 
 //AColumnInfo
     virtual void buildAssign(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, const CHqlBoundTarget & target);
+    virtual void buildClear(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, int direction);
     virtual void buildExpr(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, CHqlBoundExpr & bound);
     virtual void buildDeserialize(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * helper, IAtom * serializeForm);
     virtual void buildSerialize(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * helper, IAtom * serializeForm);

+ 37 - 31
esp/bindings/http/platform/httpservice.cpp

@@ -1573,7 +1573,8 @@ EspAuthState CEspHttpServer::authExistingSession(EspAuthRequest& authReq, unsign
     {
         authReq.ctx->setAuthStatus(AUTH_STATUS_FAIL);
         clearSessionCookies(authReq);
-        sendException(authReq, 401, "Authentication failed: invalid session ID.");
+        m_request->queryContext()->setResponseFormat(ESPSerializationJSON); //ECLwatch code can only support JSON for now.
+        sendException(authReq, 401, "Authentication failed: invalid session. Please relogin by refreshing the page.");
         ESPLOG(LogMin, "Authentication failed: invalid session ID '%u'. clearSessionCookies() called for the session.", sessionID);
         return authFailed;
     }
@@ -1584,7 +1585,8 @@ EspAuthState CEspHttpServer::authExistingSession(EspAuthRequest& authReq, unsign
     {
         authReq.ctx->setAuthStatus(AUTH_STATUS_FAIL);
         clearSessionCookies(authReq);
-        sendException(authReq, 401, "Authentication failed: network address for ESP session changed.");
+        m_request->queryContext()->setResponseFormat(ESPSerializationJSON); //ECLwatch code can only support JSON for now.
+        sendException(authReq, 401, "Authentication failed: network address for ESP session changed. Please relogin by refreshing the page.");
         ESPLOG(LogMin, "Authentication failed: session ID %u from IP %s. ", sessionID, peer.str());
         return authFailed;
     }
@@ -1614,33 +1616,34 @@ EspAuthState CEspHttpServer::authExistingSession(EspAuthRequest& authReq, unsign
     }
 
     if (!authReq.serviceName.isEmpty() && !authReq.methodName.isEmpty() && strieq(authReq.serviceName.str(), "esp") && strieq(authReq.methodName.str(), "logout"))
-        logoutSession(authReq, sessionID, espSessions, false);
-    else
     {
-        //The "ECLWatchAutoRefresh" returns a flag: '1' means that the request is generated by a UI auto refresh action and '0' means not.
-        StringBuffer autoRefresh;
-        m_request->getParameter("ECLWatchAutoRefresh", autoRefresh);
+        logoutSession(authReq, sessionID, espSessions, false);
+        return authTaskDone;
+    }
 
-        CDateTime now;
-        now.setNow();
-        time_t createTime = now.getSimple();
-        sessionTree->setPropInt64(PropSessionLastAccessed, createTime);
-        if (!sessionTree->getPropBool(PropSessionTimeoutByAdmin, false) && (autoRefresh.isEmpty() || strieq(autoRefresh.str(), "0")))
-        {
-            time_t timeoutAt = createTime + authReq.authBinding->getServerSessionTimeoutSeconds();
-            sessionTree->setPropInt64(PropSessionTimeoutAt, timeoutAt);
-            ESPLOG(LogMin, "Updated %s for (/%s/%s) : %ld", PropSessionTimeoutAt, authReq.serviceName.isEmpty() ? "" : authReq.serviceName.str(),
-                authReq.methodName.isEmpty() ? "" : authReq.methodName.str(), timeoutAt);
-        }
-        ///authReq.ctx->setAuthorized(true);
-        VStringBuffer sessionIDStr("%u", sessionID);
-        addCookie(authReq.authBinding->querySessionIDCookieName(), sessionIDStr.str(), 0, true);
-        addCookie(SESSION_AUTH_OK_COOKIE, "true", 0, false); //client can access this cookie.
-        if (getLoginPage)
-            m_response->redirect(*m_request, "/");
-        if (!authReq.authBinding->canRedirectAfterAuth(authReq.httpPath.str()))
-            m_response->redirect(*m_request, "/");
+    //The "ECLWatchAutoRefresh" returns a flag: '1' means that the request is generated by a UI auto refresh action and '0' means not.
+    StringBuffer autoRefresh;
+    m_request->getParameter("ECLWatchAutoRefresh", autoRefresh);
+
+    CDateTime now;
+    now.setNow();
+    time_t createTime = now.getSimple();
+    sessionTree->setPropInt64(PropSessionLastAccessed, createTime);
+    if (!sessionTree->getPropBool(PropSessionTimeoutByAdmin, false) && (autoRefresh.isEmpty() || strieq(autoRefresh.str(), "0")))
+    {
+        time_t timeoutAt = createTime + authReq.authBinding->getServerSessionTimeoutSeconds();
+        sessionTree->setPropInt64(PropSessionTimeoutAt, timeoutAt);
+        ESPLOG(LogMin, "Updated %s for (/%s/%s) : %ld", PropSessionTimeoutAt, authReq.serviceName.isEmpty() ? "" : authReq.serviceName.str(),
+            authReq.methodName.isEmpty() ? "" : authReq.methodName.str(), timeoutAt);
     }
+    ///authReq.ctx->setAuthorized(true);
+    VStringBuffer sessionIDStr("%u", sessionID);
+    addCookie(authReq.authBinding->querySessionIDCookieName(), sessionIDStr.str(), 0, true);
+    addCookie(SESSION_AUTH_OK_COOKIE, "true", 0, false); //client can access this cookie.
+    if (getLoginPage)
+        m_response->redirect(*m_request, "/");
+    if (!authReq.authBinding->canRedirectAfterAuth(authReq.httpPath.str()))
+        m_response->redirect(*m_request, "/");
 
     return authSucceeded;
 }
@@ -1687,13 +1690,16 @@ void CEspHttpServer::logoutSession(EspAuthRequest& authReq, unsigned sessionID,
     clearCookie(authReq.authBinding->querySessionIDCookieName());
     clearCookie(SESSION_AUTH_OK_COOKIE);
     clearCookie(SESSION_TIMEOUT_COOKIE);
-    const char* logoutURL = authReq.authBinding->queryLogoutURL();
-    if (!isEmptyString(logoutURL) && !lock)
-        m_response->redirect(*m_request, authReq.authBinding->queryLogoutURL());
-    else if (lock)
+    if (lock)
+    {
         sendLockResponse(true, false, "Locked");
+        return;
+    }
+    const char* logoutURL = authReq.authBinding->queryLogoutURL();
+    if (!isEmptyString(logoutURL))
+        m_response->redirect(*m_request, logoutURL);
     else
-        sendMessage(nullptr, "text/html; charset=UTF-8");
+        sendMessage("Successfully logged out.", "text/html; charset=UTF-8");
 }
 
 EspAuthState CEspHttpServer::handleAuthFailed(bool sessionAuth, EspAuthRequest& authReq, bool unlock, const char* msg)

+ 2 - 2
esp/files/Login.html

@@ -96,8 +96,8 @@
                 <p id="loginStr" class="loginStr"></p>
                 <div class="login">
                     <form method="POST" action="/esp/login">
-                        <input id="username" type="text" name="username" placeholder="username" class="loginStr"></input>
-                        <input id="password" type="password" name="password" placeholder="password" class="loginStr" autofocus></input>
+                        <input id="username" type="text" name="username" placeholder="username" class="loginStr" autofocus></input>
+                        <input id="password" type="password" name="password" placeholder="password" class="loginStr"></input>
                         <p id="hidden_msg" class="loginStr"></p>
                         <button class="loginStr" id="button" type="submit"></button>
                     </form>

+ 8 - 2
esp/services/esdl_svc_engine/esdl_binding.cpp

@@ -899,9 +899,15 @@ void EsdlServiceImpl::handleEchoTest(const char *mthName,
     const char* valueIn = req->queryProp("ValueIn");
     StringBuffer encoded;
     if (format == ESPSerializationJSON)
-        out.appendf("{\n\t\"%sResponse\":\n{\t\t\"ValueOut\": \"%s\"\n\t\t}\n}", mthName, encodeJSON(encoded,valueIn).str());
+    {
+        encodeJSON(encoded, valueIn);
+        out.appendf("{\n\t\"%sResponse\":\n{\t\t\"ValueOut\": \"%s\"\n\t\t}\n}", mthName, encoded.str());
+    }
     else
-        out.appendf("<%sResponse><ValueOut>%s</ValueOut></%sResponse>", mthName, encodeXML(valueIn,encoded), mthName);
+    {
+        encodeXML(valueIn, encoded);
+        out.appendf("<%sResponse><ValueOut>%s</ValueOut></%sResponse>", mthName, encoded.str(), mthName);
+    }
 }
 
 void EsdlServiceImpl::handlePingRequest(const char *mthName,StringBuffer &out,ESPSerializationFormat format)

+ 6 - 4
esp/services/ws_account/ws_accountService.cpp

@@ -56,27 +56,29 @@ bool Cws_accountEx::onUpdateUser(IEspContext &context, IEspUpdateUserRequest & r
         }
 
         const char* oldpass = req.getOldpass();
-        if(oldpass == NULL || strcmp(oldpass, user->credentials().getPassword()) != 0)
+        if(oldpass == nullptr)
         {
             resp.setRetcode(-1);
-            resp.setMessage("Username/password don't match.");
+            resp.setMessage("Current password must be provided.");
             return false;
         }
 
         const char* newpass1 = req.getNewpass1();
         const char* newpass2 = req.getNewpass2();
-        if(newpass1 == NULL || newpass2 == NULL || strlen(newpass1) < 4 || strlen(newpass2) < 4)
+        if(newpass1 == NULL || newpass2 == NULL || strlen(newpass1) < 8 || strlen(newpass2) < 8)
         {
             resp.setRetcode(-1);
-            resp.setMessage("New password must be 4 characters or longer.");
+            resp.setMessage("New password must be 8 characters or longer.");
             return false;
         }
+
         if(strcmp(newpass1, newpass2) != 0)
         {
             resp.setRetcode(-1);
             resp.setMessage("Password and retype don't match.");
             return false;
         }
+
         if(strcmp(oldpass, newpass1) == 0)
         {
             resp.setRetcode(-1);

+ 1 - 1
esp/src/eclwatch/LZBrowseWidget.js

@@ -381,7 +381,7 @@ define([
                         var request = domForm.toObject(this.id + formID);
                         var item = selections[0];
                         lang.mixin(request, {
-                            sourceIP: selections[0].DropZone.NetAddress,
+                            sourceIP: item.NetAddress,
                             nosplit: true
                         });
                         var sourcePath = "";

+ 1 - 1
esp/src/eclwatch/LockDialogWidget.js

@@ -143,7 +143,7 @@ define([
                     }
                 });
 
-                if (idleCreator) {
+                if (idleCreator.status === "firedIdle") {
                     context.idleFired = true;
                     context.unlockDialog.show();
                     domClass.add("SessionLock", "overlay");

+ 57 - 34
esp/src/eclwatch/nls/es/hpcc.js

@@ -11,10 +11,10 @@ define(
     Account: "Cuenta",
     Action: "Acción",
     Activate: "Activar",
+    Activated: "Activado",
     ActivateQuery: "Activar Consulta",
     ActivateQueryDeletePrevious: "Activar Consulta, ¿Borrar anterior?",
     ActivateQuerySuspendPrevious: "Activar Consulta, suspender  anterior?",
-    Activated: "Activado",
     Active: "Activo",
     ActivePackageMap: "&lsquo;Package Map&rsquo; Activo",
     ActiveWorkunit: "Unidad activa",
@@ -23,9 +23,8 @@ define(
     ActivityMap: "Mapa de Actividades",
     ActualSize: "Tamaño real",
     Add: "Agregar",
-    AppendCluster: "Agregar Sistema",
-    AddAttributes2: "Agregar atributos",
     AddAttributes: "Agregar atributos/valores a su método",
+    AddAttributes2: "Agregar atributos",
     AddBinding: "Agregar conexión",
     AddFile: "Añadir Archivo",
     AddGroup: "Agregar Grupo",
@@ -48,10 +47,11 @@ define(
     ANY: "CUALQUIER",
     AnyAdditionalProcessesToFilter: "Procesos adicionales a filtrar",
     Append: "Agregar",
+    AppendCluster: "Agregar Sistema",
     Apply: "Aplicar",
     ArchivedOnly: "Solo archivado",
-    Attach: "Adjuntar",
     ArchivedWarning: "Advertencia: Por favor especifique rango de fechas corto. O si no, la recuperacion de workunits puede ser demorada.",
+    Attach: "Adjuntar",
     Attribute: "Atributo",
     AttributesAreRequired: "Atributos son necesarios",
     AutoRefresh: "Actualizar Automaticamente",
@@ -63,6 +63,7 @@ define(
     BannerScroll: "Desplazamiento del Banner",
     BannerSize: "Tamaño del Banner",
     BinaryInstalls: "Binarios instalables",
+    Bind: "Conectar",
     Binding: "Conexión",
     BindingDeleted: "Conexión eliminada",
     Blob: "BLOB",
@@ -94,6 +95,8 @@ define(
     CollapseAll: "Colapsar Todo",
     Command: "Comando",
     Comment: "Comentario",
+    Compiled: "Compilado",
+    Compiling: "Compilando",
     Completed: "Completado",
     ComplexityWarning: "Mas de {threshold} actividades ({activityCount}) - ¿suprimir primer visualización?",
     Component: "Componente",
@@ -102,6 +105,7 @@ define(
     CompressedFileSize: "Tamaño de Archivo Comprimido",
     Condition: "Condición",
     Configuration: "Configuracion",
+    ConfigureService: "Configurar servicio",
     ConfirmPassword: "Confirme la Contraseña",
     ConfirmRemoval: "¿Seguro que quieres hacer esto?",
     ContactAdmin: "Si quiere renombrar este grupo, por favor contacte su administrador de LDAP",
@@ -116,6 +120,7 @@ define(
     Created: "Creado",
     CreatedBy: "Creado por",
     CreatedTime: "Tiempo creado",
+    Creating: "Creando",
     Critical: "Crítico",
     CSV: "CSV",
     Dali: "Dali",
@@ -128,6 +133,10 @@ define(
     DEF: "DEF",
     Defaults: "Valores por defecto",
     Definition: "Definición",
+    DefinitionDeleted: "Definición eliminada",
+    DefinitionID: "ID de definición",
+    Definitions: "Definiciones",
+    DelayedReplication: "Replicación retrasada",
     Delete: "Eliminar",
     DeleteBinding: "Eliminar conexión",
     Deleted: "Borrado",
@@ -142,8 +151,8 @@ define(
     DeleteSelectedQueries: "¿Borrar queries seleccionados?",
     DeleteSelectedUsers: "Eliminar Usuario(s) escojido(s)?",
     DeleteSelectedWorkunits: "¿Borrar unidades de trabajo seleccionadas?",
-    DeleteSuperfile2: "¿Borrar Super-Archivo?",
     DeleteSuperfile: "¿Borrar super-archivo?",
+    DeleteSuperfile2: "¿Borrar Super-Archivo?",
     DeleteThisPackage: "Eliminar este paquete?",
     Delimited: "Delimitado",
     DenyAccess: "<center>Negar<br>Access</center>",
@@ -178,10 +187,13 @@ define(
     Downloads: "Descargas",
     DownloadToCSV: "Bajar en formato CSV",
     DropZone: "Zona de carga",
+    DueToInctivity: "Se desconectará de todas las sesiones de ECL Watch en 3 minutos debido a inactividad.",
     Duration: "Duración",
     DynamicNoServicesFound: "No se han encontrado servicios",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
+    ECLWatchRequiresCookies: "ECL Watch requiere cookies habilitadas para continuar.",
+    ECLWatchSessionManagement: "Gestión de sesiones de ECL Watch",
     ECLWorkunit: "Unidad de Trabajo de ECL",
     Edges: "Bordes",
     Edit: "Editar",
@@ -214,6 +226,8 @@ define(
     EventText: "Texto del Evento",
     EventTextPH: "Texto del evento",
     Exception: "Excepción",
+    Executed: "Ejecutado",
+    Executing: "Ejecutando",
     ExpandAll: "Expandir Todo",
     ExpireDays: "Se vence en (días)",
     Export: "Exportar",
@@ -231,11 +245,11 @@ define(
     FilePath: "Camino del archivo",
     FilePermission: "Permisos de Archivos",
     Files: "Archivos",
-    FilesPending: "Archivos pendientes",
     FileScopeDefaultPermissions: "Permisos por defecto de alcance de archivos",
     FileScopes: "Ámbitos de Archivos",
     FileSize: "Tamaño de archivo",
     FilesNoPackage: "Archivos sin ",
+    FilesPending: "Archivos pendientes",
     FilesWarning: "La cantidad de archivos devueltos es demasiado grande. Solo se devolvieron los primeros 100000 archivos ordenados por fecha / hora modificada. Si desea limitar los resultados, configure un filtro.",
     FilesWithUnknownSize: "Archivos sin tamaño desconocido.",
     FileType: "Tipo de Archivo",
@@ -247,6 +261,7 @@ define(
     FindNext: "Encontrar próximo",
     FindPrevious: "Encontrar previo",
     Finished: "Terminado",
+    FirstN: "PrimerosN",
     FirstName: "Primer Nombre",
     FirstNRows: "Primeras N Filas",
     Fixed: "Fijo",
@@ -293,6 +308,7 @@ define(
     InheritedPermissions: "Heredar Permisos",
     Inputs: "Entradas",
     InvalidResponse: "(Respuesta invalida)",
+    InvalidUsernamePassword: "Nombre de usuario o contraseña inválidos, inténtalo de nuevo",
     IP: "IP",
     IPAddress: "Dirección de IP",
     IsCompressed: "Está comprimido",
@@ -313,8 +329,8 @@ define(
     LargestFile: "Archivo mas Grande",
     LargestSize: "Tomaño mas Grande",
     LastEdit: "Última edición",
-    LastEditTime: "Última hora de edición",
     LastEditedBy: "Última edición por:",
+    LastEditTime: "Última hora de edición",
     LastMessage: "Ultimo mensaje",
     LastName: "Apellido",
     LastNDays: "ULtimos N días",
@@ -322,6 +338,7 @@ define(
     LastNRows: "Ultimas N Filas",
     LastRun: "Ultima ejecución",
     LDAPWarning: "<b>Error en Servicios de LDAP:</b>  &lsquo;Demasiados Usuarios&rsquo; - Por favor aplique un Filtro.",
+    LearnMore: "Aprende más",
     LegacyForm: "Forma histórica",
     Legend: "Leyanda",
     LibrariesUsed: "Bibliotecas usadas",
@@ -340,7 +357,7 @@ define(
     Location: "Ubicación",
     Lock: "Cerrar",
     Log: "Registro",
-    Login: "Iniciar sesión",
+    log_analysis_1: "log_analysis_1*",
     LogFile: "Archivo de registro",
     LoggedInAs: "Conectado como",
     LoggingOut: "Saliendo",
@@ -350,12 +367,13 @@ define(
     LogicalFilesOnly: "Archivos logicos Solamente",
     LogicalFileType: "Tipo de archivo lógico",
     LogicalName: "Nombre lógico",
+    Login: "Iniciar sesión",
     Logout: "Cerrar sesión",
     Logs: "Registros",
     LogVisualization: "Visualización de registros",
-    log_analysis_1: "log_analysis_1*",
-    LostFile2: "Archivos perdidos",
+    LogVisualizationUnconfigured: "La visualización del registro no está configurada, verifique las configuraciones de su administrador de configuración.",
     LostFile: "Archivo perdido",
+    LostFile2: "Archivos perdidos",
     LostFileMessage: "Un archivo lógico ha perdido al menos una de sus partes en ambas ubicaciones, primary y replicada. El archivo lógico aún está referenciado en el servidor Dali. Eliminando este archivo se remueven la referencia en el servidor Dali y todas las partes existentes en disco.",
     Low: "Bajo",
     MachineInformation: "Información de las máquinas",
@@ -376,8 +394,8 @@ define(
     MaxSkew: "Sesgo máximo",
     MemberOf: "Miembro de",
     Members: "Miembros",
-    MethodConfiguration: "Configuracion de Método",
     Message: "Mensaje",
+    MethodConfiguration: "Configuracion de Método",
     Methods: "Métodos",
     Min: "Minimo",
     Mine: "Mío",
@@ -440,8 +458,8 @@ define(
     Operations: "Operaciones",
     Options: "Opciones",
     OriginalFile: "Archivo Original",
-    OrphanFile2: "Archivo huérfano",
     OrphanFile: "Archivos huérfanos",
+    OrphanFile2: "Archivo huérfano",
     OrphanMessage: "Un archivo huérfano tiene solo algunas de sus partes en disco. Sin embargo, el conjunto completo de partes no esta disponible para construir un archivo logico completo. No hay referencias a estas partes de archivo en el servidor Dali.",
     Outputs: "Salidas",
     Overview: "Visión de conjunto",
@@ -450,13 +468,13 @@ define(
     Owner: "Dueño",
     PackageContent: "Contenidos del Paquete",
     PackageContentNotSet: "Los Contenidos del Paquete no este definido",
-    PackageMap: "Package Map",
-    PackageMaps: "Package Maps",
+    PackageMap: "Mapa del paquete",
+    PackageMaps: "Mapas del paquete",
     PackagesNoQuery: "Paqutes sin correspondiente consulta",
     ParameterXML: "Parámetro XML",
     Part: "Parte",
-    PartName: "Nombre de parte",
     PartMask: "Máscara de parte",
+    PartName: "Nombre de parte",
     Parts: "Partes",
     PartsFound: "Partes encontradas",
     PartsLost: "Partes perdidas",
@@ -485,15 +503,16 @@ define(
     Playground: "Patio de juegos",
     PleaseEnableCookies: "ECL Watch requiere que las cookies esten habilitadas para poder continuar.",
     PleaseEnterANumber: "Por favor escriba un numero 1 -",
+    PleaseLogin: "Por favor inicie sesión usando su nombre de usuario y contraseña",
+    PleaseLogIntoECLWatch: "Por favor inicie sesión de ECL Watch",
     PleasePickADefinition: "Por favor seleccione una definición",
     PleaseSelectADynamicESDLService: "Por favor seleccione un servicio de ESDL dinámico",
     PleaseSelectAGroupToAddUser: "Por favor escoja un grupo al cual agregar el usario",
     PleaseSelectAServiceToBind: "Seleccione un servicio para conectar",
     PleaseSelectATopologyItem: "Por favor seleccione un destino, servicio o máquina",
-    PleaseLogin: "Por favor conéctese usando su nombre de usuario y contraseña",
     PleaseSelectAUserOrGroup: "Por favor escoja un usario o grupo y nombre de archivo",
     PleaseSelectAUserToAdd: "Por favor escoja el usario para agregar",
-    Plugins: "Plugins",
+    Plugins: "Complementos",
     Port: "Puerto",
     Prefix: "Prefijo",
     PrefixPlaceholder: "filename{:length}, filesize{:[B|L][1-8]}",
@@ -555,17 +574,17 @@ define(
     RemoteDaliIP: "Remote&nbsp;Dali&nbsp;IP&nbsp;Address",
     Remove: "Remover",
     RemoveAttributeQ: "Está por eliminar este atributo. Está seguro de que desea continuar?",
-    RemovePart: "Eliminar parte",
     RemoveAtttributes: "Eliminar atributo(s)",
-    RemoveSubfiles2: "Remover subarchivo(s)",
-    RemoveSubfiles: "Borrar Sub-Archivo(s)",
+    RemovePart: "Eliminar parte(s)",
+    RemoveSubfiles: "Quitar Sub-Archivo(s)",
+    RemoveSubfiles2: "Quitar subarchivo(s)",
     RemoveUser: "Esta apunto de excluirse del grupo:",
     Rename: "Renombrar",
     RenderedSVG: "SVG creado",
     RenderSVG: "Crear SVG",
     Replicate: "Replicar",
     ReplicatedLost: "Réplica perdida",
-    ReplicateOffset: "Replicate Offset",
+    ReplicateOffset: "Offset de Reproducción",
     ReportAnError: "Reportar un error",
     ReportError: "Informe de error",
     RepresentsASubset: "Representar un subconjunto de todas los casamientos. Usando un filtro correcto puede reducir el numero de casamientos",
@@ -589,11 +608,11 @@ define(
     RetainSuperfileStructure: "Retener estructura del super-archivo",
     RetypePassword: "Confirme la contraseña",
     Reverse: "Marchar Atrás",
-    RoxieFileCopy: "Estado de copia de archivos de Roxie",
     RowPath: "Ruta de Fila",
     Rows: "Líneas",
     RowTag: "Etiqueta de línea",
     RoxieCluster: "Sistema Roxie",
+    RoxieFileCopy: "Estado de copia de archivos de Roxie",
     RunningServerStrain: "La ejecución de este proceso puede tomar un tiempo largo y pondrá una carga significativa en los servidores. Desea continuar?",
     Sample: "Ejemplo",
     SampleRequest: "Ejemplo del requerimiento",
@@ -605,9 +624,9 @@ define(
     Security: "Seguridad",
     SelectPackageFile: "Seleccione &lsquo;Package File&rsquo;",
     Separators: "Seperadores",
+    Server: "Servidor",
     ServiceName: "Nombre del servicio",
     Services: "Servicios",
-    Server: "Servidor",
     SetBanner: "Configurar la bandera",
     SetTextError: "No se pudo visualizar el texto (muy grande?). Use &lsquo;helpers&rsquo; para descargar.",
     SetToFailed: "Marcar como fallado",
@@ -688,9 +707,9 @@ define(
     ThorNetworkAddress: "Dirección de red de Thor",
     ThorProcess: "Proceso de Thor",
     Time: "Tiempo",
-    TimeStamp: "Marca de hora",
     Timers: "Cronómetros",
     TimeSeconds: "Tiempo (Segundos)",
+    TimeStamp: "Marca de tiempo",
     TimeStarted: "Tiempo empezado",
     TimeStopped: "Tiempo detenido",
     Timings: "Tiempos",
@@ -704,41 +723,42 @@ define(
     title_BindingDefinition: "Definición de conexión",
     title_ClusterInfo: "Grupos",
     title_CodeGeneratorPermissions: "Permisos de generador de codigo",
+    title_DefinitionExplorer: "Explorador de Definiciónes",
+    title_Definitions: "Definiciónes",
     title_DESDL: "ESDL dinámico",
     title_DFUQuery: "Archivos Lógicos",
     title_DFUWUDetails: "Unidad de trabajo DFU",
     title_DirectoriesFor: "Directorios para",
-    title_Definitions: "Definiciónes",
-    title_DefinitionExplorer: "Explorador de Definiciónes",
     title_DiskUsage: "Utilización del disco",
     title_ECLPlayground: "ECL Playground",
     title_ErrorsWarnings: "Errores/Advertencias de",
     title_EventScheduleWorkunit: "Planificador de Eventos",
-    title_FilesPendingCopy: "Archivos pendientes para copiar",
     title_FileScopeDefaultPermissions: "Permisos de archive por defecto",
+    title_FilesPendingCopy: "Archivos pendientes para copiar",
     title_FoundFilesFor: "Archivos encontrados para",
     title_GetDFUWorkunits: "Unidades de trabajo DFU",
     title_Graph: "Gráficos",
     title_GraphPage: "título",
     title_Graphs: "Gráficos",
     title_GridDetails: "Cámbieme",
+    title_History: "Historia",
     title_HPCCPlatformECL: "ECL Watch - Hogar",
     title_HPCCPlatformFiles: "ECL Watch - Archivos",
     title_HPCCPlatformMain: "ECL Watch - Hogar",
     title_HPCCPlatformOps: "ECL Watch - Operaciones",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
-    title_HPCCPlatformServicesPlugin: "ECL Watch - Plugins",
-    title_History: "Historia",
+    title_HPCCPlatformServicesPlugin: "ECL Watch - dispositivo opcional",
     title_Inputs: "Entradas",
     title_LFDetails: "Detalles de archivos lógicos",
     title_LibrariesUsed: "Librerias Usadas",
     title_Log: "Archivo de Registro",
     title_LostFilesFor: "Archivos perdidos para",
-    title_Methods: "Métodos",
     title_LZBrowse: "Zonas de descarga",
     title_MemberOf: "Miembros de",
     title_Members: "Miembros",
+    title_Methods: "Métodos",
     title_OrphanFilesFor: "Archivos huérfanos para",
+    title_PackageParts: "Partes de paquete",
     title_Permissions: "Permisos",
     title_PreflightResults: "Resultados de pre-volado",
     title_QuerySetDetails: "Detalles de Consulta",
@@ -748,7 +768,6 @@ define(
     title_QuerySetSuperFiles: "Super archivos",
     title_QueryTest: "Super Archivos",
     title_Result: "Actividad",
-    title_PackageParts: "Partes de paquete",
     title_Results: "Salidas",
     title_SearchResults: "Resultados de búsqueda ",
     title_SourceFiles: "Archivo de origen",
@@ -762,7 +781,7 @@ define(
     To: "A:",
     ToDate: "Hasta fecha",
     Toenablegraphviews: "Para habilitar vista de gráficos, instale el plugin Graph View Control",
-    Tooltip: "Tooltip",
+    Tooltip: "Globo de información",
     TooManyFiles: "Demasiados archivos",
     Top: "Arriva",
     Topology: "Topología",
@@ -838,21 +857,25 @@ define(
     XML: "XML",
     XRef: "Referencias cruzadas",
     Year: "Año",
+    YouAreAboutToBeLoggedOut: "Estás a punto de ser desconectado",
     YouAreAboutToDeleteBinding: "Está a punto de eliminar esta conexión. Desea continuar?",
     YouAreAboutToDeleteDefinition: "Estás a punto de eliminar esta definición. ¿Estás seguro que quieres hacer esto?",
-    YouAreAboutToRemoveUserFrom: "Usted esta a punto de quitar un(os) usuario(s) de este grupo. ¿Desea continuar?",
     YouAreAboutToDeleteThisFile: "Usted esta a punto de eliminar este archivo. ¿Desea continuar?",
     YouAreAboutToDeleteThisPart: "Usted esta a punto de eliminar esta parte. ¿Desea continuar?",
     YouAreAboutToDeleteThisQueryset: "Usted esta a punto de eliminar este grupo de consulta. ¿Desea continuar?",
     YouAreAboutToDeleteThisWorkunit: "Usted esta a punto de eliminar este workunit. ¿Desea continuar?",
+    YouAreAboutToRemoveUserFrom: "Usted esta a punto de quitar un(os) usuario(s) de este grupo. ¿Desea continuar?",
     YourBrowserMayNotSupport: "Es posible que su navegador no soporta archivos de este tamaño",
+    YourScreenWasLocked: "Tu pantalla fue bloqueada por ESP. Por favor, vuelve a buscar sus datos, que puede estar obsoleto.",
     ZAP: "Z.A.P.",
     ZeroLogicalFilesCheckFilter: "Archivos logicos a cero (chequee filtro)",
     Zip: "Zip",
     ZippedAnalysisPackage: "Paquete de análisis en formato Zip",
+    Zoom: "Enfocar",
     Zoom100Pct: "Aumentar a 100%",
-    Zoom: "Zoom",
     ZoomAll: "Aumentar todo",
+    ZoomMinus: "Enfocar menos",
+    ZoomPlus: "Enfocar más",
     ZoomWidth: "Aumentar al ancho"
 })
 );

+ 27 - 4
esp/src/eclwatch/nls/hu/hpcc.js

@@ -63,6 +63,7 @@ define(
     BannerScroll: "Fejléc görgetés",
     BannerSize: "Fejléc méret",
     BinaryInstalls: "Bináris telepítőkészlet",
+    Bind: "Összekapcsol",
     Binding: "Kötés",
     BindingDeleted: "A kötés törölve",
     Blob: "BLOB",
@@ -94,6 +95,8 @@ define(
     CollapseAll: "Összes bezárása",
     Command: "Parancs",
     Comment: "Megjegyzés",
+    Compiled: "Fordítás kész",
+    Compiling: "Fordítás folyamatban",
     Completed: "Kész",
     ComplexityWarning: "Több mint {threshold} aktivitás ({activityCount}) - elnyomjuk a kezdeti megjelenítést?",
     Component: "Komponens",
@@ -102,6 +105,7 @@ define(
     CompressedFileSize: "Tömörített fájl méret",
     Condition: "Feltétel",
     Configuration: "Beállítások",
+    ConfigureService: "Szolgáltatás konfigurálása",
     ConfirmPassword: "Jelszó jóváhagyás",
     ConfirmRemoval: "Biztos, hogy ezt akarja csinálni?",
     ContactAdmin: "Amennyiben át akarja nevezni ezt a csoportot, lépjen kapcsolatba az LDAP adminisztrátorral.",
@@ -116,6 +120,7 @@ define(
     Created: "Létrehozva",
     CreatedBy: "Létrehozta",
     CreatedTime: "Létrehozás időpontja",
+    Creating: "Létrehoz",
     Critical: "Kritikus",
     CSV: "CSV",
     Dali: "Dali",
@@ -128,7 +133,10 @@ define(
     DEF: "DEF",
     Defaults: "Alapértelmezés",
     Definition: "Definíció",
+    DefinitionDeleted: "Definíció törölve",
+    DefinitionID: "Definíció azonosító",
     Definitions: "Definíciók",
+    DelayedReplication: "Késleltetett másolás",
     Delete: "Törlés",
     DeleteBinding: "Kötések törlése",
     Deleted: "Törölt",
@@ -179,10 +187,13 @@ define(
     Downloads: "Letöltés",
     DownloadToCSV: "Letöltés CSV fájlba",
     DropZone: "Gyűjtőhely",
+    DueToInctivity: "Aktivitás hiányában a rendszer 3 percen belül kilépteti Önt az ECLWatch kapcsolatból.",
     Duration: "Időtartam",
     DynamicNoServicesFound: "A szolgáltatás nem található",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
+    ECLWatchRequiresCookies: "A folytatáshoz szükséges a sütik engedélyezése",
+    ECLWatchSessionManagement: "ECLWatch kapcsolat menedzsment",
     ECLWorkunit: "ECL-munkaegység",
     Edges: "Élek",
     Edit: "Szerkesztés",
@@ -215,6 +226,8 @@ define(
     EventText: "Esemény szövege",
     EventTextPH: "Esemény szövege",
     Exception: "Kivétel",
+    Executed: "Végrehajtva",
+    Executing: "Végrehajtás alatt",
     ExpandAll: "Összes kinyitása",
     ExpireDays: "Lejár (nap)",
     Export: "Exportálás",
@@ -248,6 +261,7 @@ define(
     FindNext: "Következőt",
     FindPrevious: "Előzőt",
     Finished: "Befejezett",
+    FirstN: "Az első N",
     FirstName: "Keresztnév",
     FirstNRows: "Első N rekord",
     Fixed: "Állandó rekordméret",
@@ -294,6 +308,7 @@ define(
     InheritedPermissions: "Örökölt hozzáférési jogok",
     Inputs: "Bemenet",
     InvalidResponse: "(Érvénytelen válasz)",
+    InvalidUsernamePassword: "Hibás felhasználói név vagy jelszó. Próbálja újra.",
     IP: "IP",
     IPAddress: "IP cím",
     IsCompressed: "Tömörített?",
@@ -323,6 +338,7 @@ define(
     LastNRows: "Utolsó N rekord",
     LastRun: "Utolsó futás",
     LDAPWarning: "<b>LDAP szolgáltatás hiba:</b>  &lsquo;Túl sok felhasználó&rsquo; - Kérem, használjon szűrést!",
+    LearnMore: "További ismeretek",
     LegacyForm: "Örökölt űrlap (Legacy Form)",
     Legend: "Jelmagyarázat",
     LibrariesUsed: "Használt könyvtárak",
@@ -340,8 +356,8 @@ define(
     LocalFileSystemsOnly: "Csak helyi fájlrendszerbe",
     Location: "Elhelyezkedés",
     Lock: "Lezár",
-    log_analysis_1: "log_elemzés_1*",
     Log: "Log",
+    log_analysis_1: "log_elemzés_1*",
     LogFile: "Log fájl",
     LoggedInAs: "Bejelentkezve mint ",
     LoggingOut: "Kijelentkezés",
@@ -355,6 +371,7 @@ define(
     Logout: "Kijelentkezés",
     Logs: "Logok",
     LogVisualization: "Log megjelenítés",
+    LogVisualizationUnconfigured: "Log megjelenítés nincs konfigurálva. Ellenőrizze a konfigurációs beállításokat.",
     LostFile: "Elveszett fájl",
     LostFile2: "Elveszett fájlok",
     LostFileMessage: "Az elveszett logikai fájl legalább egy fizikai része megtalálható mind az elsődleges mind a másolati tároló helyen. A logikai fájl referencia megtalálható a Dali szerverben. A fájl törlése eltávolítja a hivatkozást a Dali szerverből valamint az összes fizika részt a lemezről.",
@@ -402,7 +419,7 @@ define(
     NA: "N/A",
     Name: "Név",
     NamePrefix: "Név előtag",
-    NamePrefixPlaceholder: "some::prefix",
+    NamePrefixPlaceholder: "valamilyen::előtag",
     Newest: "Legújabb",
     NewPassword: "Új jelszó",
     NoContent: "(Nincs tartalom)",
@@ -484,8 +501,10 @@ define(
     PlaceholderFirstName: "József",
     PlaceholderLastName: "Kiss",
     Playground: "ECL teszt labor",
+    PleaseEnableCookies: "A folytatáshoz szükséges a sütik engedélyezése",
     PleaseEnterANumber: "Adjon meg egy számot",
     PleaseLogin: "Kérem jelentkezzen be a felhasználói nevével és jelszavával",
+    PleaseLogIntoECLWatch: "Az ECLWatch használatához be kell jelentkeznie.",
     PleasePickADefinition: "Válasszon egyet a definíciók közül",
     PleaseSelectADynamicESDLService: "Válasszon egyet a dinamikus ESDL szolgáltatások közül.",
     PleaseSelectAGroupToAddUser: "Kérem válasszon csoportot a felhasználó számára",
@@ -628,7 +647,7 @@ define(
     SmallestSize: "Legkisebb méret",
     SOAP: "SOAP",
     SomeDescription: "Valamennyi leírás",
-    somefile: "*::somefile*",
+    somefile: "*::valamilyen_fájl*",
     Source: "Forrás",
     SourceCode: "Forráskód",
     SourceLogicalFile: "Forrás logikai fájl neve",
@@ -655,8 +674,8 @@ define(
     SummaryMessage: "Összegzés",
     SuperFile: "Szuper-fájl",
     Superfile: "Szuper-fájl",
-    Superfiles: "Szuper-fájlok",
     SuperFiles: "Szuperfájlok",
+    Superfiles: "Szuper-fájlok",
     SuperFilesBelongsTo: "Szuperfájl(ok)hoz tartozik",
     SuperfilesOnly: "Kizárólag szuperfájl",
     SuperOwner: "Szuper fájl tulajdonos",
@@ -838,6 +857,7 @@ define(
     XML: "XML",
     XRef: "Keresztreferencia (XRef)",
     Year: "Év",
+    YouAreAboutToBeLoggedOut: "Ön arra készül, hogy kilépjen a rendszerből ",
     YouAreAboutToDeleteBinding: "Törölni készül egy kötést. Biztos, hogy folytatni akarja?",
     YouAreAboutToDeleteDefinition: "Ön ennek a definíciónak a törlésére készül. Biztos, hogy folytatni akarja?",
     YouAreAboutToDeleteThisFile: "Ennek a fájlnak a törlésére készül. Folytatja?",
@@ -846,6 +866,7 @@ define(
     YouAreAboutToDeleteThisWorkunit: "Ennek a munkaegységnek a törlésére készül. Folytatja?",
     YouAreAboutToRemoveUserFrom: "Ön felhasználó(k) csoportból való törlésére készül. Kívánja folytatni?",
     YourBrowserMayNotSupport: "Előfordulhat, hogy az Ön böngészőprogramja nem támogatja az ekkora méretű fájlokat.",
+    YourScreenWasLocked: "Az ESP server befagyasztotta az ön képernyőjét. Kérem frissítsen.",
     ZAP: "Z.A.P.",
     ZeroLogicalFilesCheckFilter: "Nincs a megadott feltételnek megfelelő adat! (A jó a szűrőfeltétel?)",
     Zip: "Zip",
@@ -853,6 +874,8 @@ define(
     Zoom: "Nagyítás",
     Zoom100Pct: "Nagyítás 100%-ra",
     ZoomAll: "Teljes gráf ablakba méretezése",
+    ZoomMinus: "Kicsinyítés",
+    ZoomPlus: "Nagyítás",
     ZoomWidth: "Gráf nagyítása az ablak szélességére"
 })
 );

+ 65 - 36
esp/src/eclwatch/nls/pt-br/hpcc.js

@@ -12,24 +12,24 @@
     Action: "Ação",
     Activate: "Ativar",
     Activated: "Ativa",
-    Active: "Ativa",
-    ActivePackageMap: "Package Map Ativo",
     ActivateQuery: "Ativar Consulta",
     ActivateQueryDeletePrevious: "Ativar consulta, excluir anterior",
     ActivateQuerySuspendPrevious: "Ativar consulta, suspender anterior",
+    Active: "Ativa",
+    ActivePackageMap: "Package Map Ativo",
     ActiveWorkunit: "Tarefa Ativa",
     Activities: "Atividades",
     Activity: "Atividade",
     ActivityMap: "Mapa de Atividade",
     ActualSize: "Tamanho Efectivo",
     Add: "Adicionar",
-    AddAttributes2: "Adiciona atributos",
     AddAttributes: "Adiciona atributos/valores para seu métedo",
+    AddAttributes2: "Adiciona atributos",
     AddBinding: "Adiciona ligação",
     AddFile: "Adicionar Arquivo",
     AddGroup: "Adicionar Grupo",
-    AddPart: "Adicionar Parte",
     AdditionalResources: "Recursos Adicionais",
+    AddPart: "Adicionar Parte",
     AddProcessMap: "Adicionar Package Map",
     AddTheseFilesToDali: "Adicionar esses arquivos a Dali",
     AddtionalProcessesToFilter: "Processos adicionais para filtrar",
@@ -50,8 +50,8 @@
     AppendCluster: "Acrescentar o Cluster",
     Apply: "Aplicar",
     ArchivedOnly: "Apenas Arquivadas",
-    Attach: "Anexar",
     ArchivedWarning: "Aviso: Por favor especifique intervalos de datas menore. Caso contrário, a operação para buscar workunits pode demorar causando um erro no navegador.",
+    Attach: "Anexar",
     Attribute: "Attributo",
     AttributesAreRequired: "Atributos são necessários",
     AutoRefresh: "Recarregar Automático",
@@ -63,6 +63,7 @@
     BannerScroll: "Faixa de Paginação",
     BannerSize: "Tamanho da Faixa",
     BinaryInstalls: "Instalação Binária",
+    Bind: "Ligar",
     Binding: "Ligação",
     BindingDeleted: "Ligação deletado",
     Blob: "BLOB",
@@ -94,6 +95,8 @@
     CollapseAll: "Recolher Tudo",
     Command: "Comando",
     Comment: "Comentário",
+    Compiled: "Compilado",
+    Compiling: "Compilando",
     Completed: "Completo",
     ComplexityWarning: "Mais de {limite} atividades ({Contador de atividades}) - suprimir amostragem inicial?",
     Component: "Componente",
@@ -102,6 +105,7 @@
     CompressedFileSize: "Tamanho do Arquivo Comprimido",
     Condition: "Condição",
     Configuration: "Configuração",
+    ConfigureService: "Configurar serviço",
     ConfirmPassword: "Confirmar Senha",
     ConfirmRemoval: "Tem certeza que quer fazer isso?",
     ContactAdmin: "Se você deseja renomear este grupo, por favor, entre em contato com o administrador do LDAP",
@@ -116,6 +120,7 @@
     Created: "Criado",
     CreatedBy: "Criado Por",
     CreatedTime: "Tempo Criado",
+    Creating: "Criando",
     Critical: "Crítico",
     CSV: "CVS",
     Dali: "Dali",
@@ -128,7 +133,10 @@
     DEF: "DEF",
     Defaults: "Padrões",
     Definition: "Definição",
+    DefinitionDeleted: "Definição deletada",
+    DefinitionID: "Identidade de definição",
     Definitions: "Definições",
+    DelayedReplication: "Replicação atrasada",
     Delete: "Remover",
     DeleteBinding: "Apagar Ligação",
     Deleted: "Removido",
@@ -143,8 +151,8 @@
     DeleteSelectedQueries: "Apagar Consultas Selecionadas?",
     DeleteSelectedUsers: "Remover Usuários Selecionados",
     DeleteSelectedWorkunits: "Apagar Tarefas Selecionadas?",
-    DeleteSuperfile2: "Remover Super Arquivo",
     DeleteSuperfile: "Apagar Super Arquivo?",
+    DeleteSuperfile2: "Remover Super Arquivo",
     DeleteThisPackage: "Remover Este Pacote",
     Delimited: "Delimitado",
     DenyAccess: "Bloquear",
@@ -179,10 +187,13 @@
     Downloads: "Abaixamentos",
     DownloadToCSV: "Transferir para o CSV",
     DropZone: "Zona de entrada de arquivos",
+    DueToInctivity: "Você será desconectado de todas as sessões do ECL Watch em 3 minutos devido a inatividade.",
     Duration: "Duração",
     DynamicNoServicesFound: "Nenhum Serviço Encontrado",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
+    ECLWatchRequiresCookies: "O ECL Watch requer cookies habilitados para continuar.",
+    ECLWatchSessionManagement: "Gerenciamento de sessão do ECL Watch",
     ECLWorkunit: "ECL Unidade de Trabalho",
     Edges: "Bordas",
     Edit: "Alterar",
@@ -199,13 +210,13 @@
     EnterAPercentageOrMB: "Digite uma porcentagem ou MB",
     EraseHistory: "Apagar História",
     EraseHistoryQ: "Apagar o histórico para",
-    Error: "Error",
+    Error: "Erro",
     Errorparsingserverresult: "Erro interpretando o resultado do servidor",
     Errors: "Erros",
     ErrorsStatus: "Erros/Estados",
     ErrorUploadingFile: "Erro ao carregar arquivos. Tente verificar permissões.",
     ErrorWarnings: "Error/Aviso(s)",
-    Escape: "Escape",
+    Escape: "Escapar",
     ESPBuildVersion: "Versão‎ do ESP",  // jshint ignore:line
     ESPNetworkAddress: "Endereço de Rede do ESP",
     ESPProcessName: "Nome do Processo ESP",
@@ -215,6 +226,8 @@
     EventText: "Texto do Evento",
     EventTextPH: "Texto do Evento",
     Exception: "Exceção",
+    Executed: "Executado",
+    Executing: "Executando",
     ExpandAll: "Expandir Tudo",
     ExpireDays: "Expira em (dias)",
     Export: "Exportar",
@@ -248,6 +261,7 @@
     FindNext: "Próxima Busca",
     FindPrevious: "Busca Anterior",
     Finished: "Completo",
+    FirstN: "Primeiro N",
     FirstName: "Primeiro Nome",
     FirstNRows: "Primeiras N Linhas",
     Fixed: "Fixo",
@@ -286,7 +300,7 @@
     History: "História",
     HPCCSystems: "HPCCSystems",
     Icon: "Ícone",
-    ID: "ID",
+    ID: "Identidade",
     Inactive: "Inativo",
     IncludeSlaveLogs: "Incluie logs escravos",
     Index: "Índice",
@@ -295,6 +309,7 @@
     InheritedPermissions: "Permissão Herdada",
     Inputs: "Insumos",
     InvalidResponse: "(resposta inválida)",
+    InvalidUsernamePassword: "Nome de usuário ou senha inválidos, tente novamente.",
     IP: "IP",
     IPAddress: "Endereço IP",
     IsCompressed: "É Comprimido",
@@ -324,13 +339,14 @@
     LastNRows: "Últimas N Filas",
     LastRun: "Última Rodada",
     LDAPWarning: "<b>Error do serviço de LDAP</b> &lsquo;Número de usuários excedido&rsquo;. Por favor use um filtro.",
+    LearnMore: "Saber Mais",
     LegacyForm: "Formato Antigo",
     Legend: "Lenda",
     LibrariesUsed: "Usa Biblioteca?",
     LibraryName: "Nome da biblioteca",
     Line: "Linha",
     LineTerminators: "Terminador de linhas",
-    Links: "Links",
+    Links: "Ligações",
     Loading: "Carregando",
     LoadingCachedLayout: "Carregando diagrama do cache",
     LoadingData: "Carragando Dados...",
@@ -341,7 +357,8 @@
     LocalFileSystemsOnly: "Somente Sistemas de Arquivos Locais",
     Location: "Localização",
     Lock: "Bloquear",
-    Log: "Log",
+    Log: "Registro",
+    log_analysis_1: "log_analysis_1*",
     LogFile: "Arquivo de log",
     LoggedInAs: "Entrou no sistema como",
     LoggingOut: "Fazendo um Logout",
@@ -353,18 +370,18 @@
     LogicalName: "Nome Lógico",
     Login: "Fazer um Login",
     Logout: "Fazer um Logout",
-    Logs: "Logs",
+    Logs: "Registros",
     LogVisualization: "Visualização de Log",
-    log_analysis_1: "log_analysis_1*",
-    LostFile2: "Arquivos perdidos",
+    LogVisualizationUnconfigured: "Visualização de Registro não está configurado, por favor, verifique as configurações do gerenciador de confguração",
     LostFile: "Arquivo perdido",
+    LostFile2: "Arquivos perdidos",
     LostFileMessage: "Um arquivo lógico que está faltando pelo menos uma parte de arquivo em ambos os locais primário e replicado em armazenamento. O arquivo lógico ainda é referenciado no servidor Dali. A exclusão do arquivo remove a referência do servidor Dali e de quaisquer partes restantes no disco.",
     Low: "Baixo",
     MachineInformation: "Informação da máquina",
     Machines: "Máquinas",
     Major: "Principal",
     ManagedBy: "Gerenciado Por",
-    ManagedByPlaceholder: "CN=HPCCAdmin,OU=users,OU=hpcc,DC=MyCo,DC=local",
+    ManagedByPlaceholder: "CN=HPCCAdmin,OU=usuários,OU=hpcc,DC=MyCo,DC=local",
     ManualCopy: "Pressione Ctrl+C",
     ManualOverviewSelection: "(Seleção manual será necessária)",
     ManualTreeSelection: "(Seleção manual de árvore será requerida)",
@@ -400,7 +417,7 @@
     Month: "Mês",
     More: "Mais",
     MustContainUppercaseAndSymbol: "Deve conter símbolo e caracteres maiúsculos",
-    NA: "N/A",
+    NA: "Não Aplicável",
     Name: "Nome",
     NamePrefix: "Prefixo de nome",
     NamePrefixPlaceholder: "algum::prefixo",
@@ -442,12 +459,12 @@
     Operations: "Operações",
     Options: "Opções",
     OriginalFile: "Arquivo Originál",
-    OrphanFile2: "Arquivo órfão",
     OrphanFile: "Arquivos órfãos",
+    OrphanFile2: "Arquivo órfão",
     OrphanMessage: "Um arquivo órfão tem partes de arquivo parcial no disco. No entanto, um conjunto completo de peças não está disponível para construir um arquivo lógico e completo. Isso não faz referência a essas partes de arquivo no servidor Dali.",
     Outputs: "Resultados",
     Overview: "Visão Geral",
-    Overwrite: "Overwrite",
+    Overwrite: "Sobrescrever",
     OverwriteMessage: "Alguns arquivos já existem. Selecione opção de escrever por cima para continuar.",
     Owner: "Proprietário",
     PackageContent: "Conteúdo de pacote",
@@ -485,8 +502,10 @@
     PlaceholderFirstName: "João",
     PlaceholderLastName: "da Silva",
     Playground: "Area de Recreio",
+    PleaseEnableCookies: "O ECL Watch requer cookies habilitados para continuar.",
     PleaseEnterANumber: "Por favor digite o número 1 -",
     PleaseLogin: "Por favor, faça o login usando seu nome de usuário e senha",
+    PleaseLogIntoECLWatch: "Por favor, faça o login no ECL Watch",
     PleasePickADefinition: "Por favor, escolha uma definição",
     PleaseSelectADynamicESDLService: "Selecione um serviço ESDL dinâmico",
     PleaseSelectAGroupToAddUser: "Por favor, selecione um grupo para adicionar o usuário a",
@@ -495,7 +514,7 @@
     PleaseSelectAUserOrGroup: "Por favor selecione um usário ou grupo junto com um nome de arquivo",
     PleaseSelectAUserToAdd: "Por favor, selecione um usuário para adicionar",
     Plugins: "Plugins",
-    Port: "Port",
+    Port: "Porta",
     Prefix: "Prefixo",
     PrefixPlaceholder: "&lsquo;nomedoarquivo{:comprimento}, tamanho{:[B|L][1-8]}&rsquo;",
     Preflight: "Pré-vôo",
@@ -523,9 +542,9 @@
     Quarter: "Quarto",
     Queries: "Consultas ECL",
     QueriesNoPackage: "Queries sem pacote",
-    Query: "Query",
+    Query: "Consulta",
     QueryDetailsfor: "Detalhes para",
-    QueryID: "Query ID",
+    QueryID: "Identidade de Consulta",
     QueryIDPlaceholder: "some?q*ry.1",
     QueryName: "Nome da Query",
     QueryNamePlaceholder: "Minha?Su?erQ*ry",
@@ -546,7 +565,7 @@
     RecoverTooltip: "Reniciar unidade de trabalho pausado / bloqueado",
     RecreateQuery: "Recriar consulta",
     Recycling: "Reciclando",
-    RedBook: "Red Book",
+    RedBook: "Livro Vermelho",
     Refresh: "Recarregar",
     ReleaseNotes: "Notas de Versão",
     Reload: "Recarregar",
@@ -558,8 +577,8 @@
     RemoveAttributeQ: "Você está prestes a remover esse atributo. Você tem certeza de que quer fazer isso?",
     RemoveAtttributes: "Remover Atributo (s)",
     RemovePart: "Remover parte",
-    RemoveSubfiles2: "Remover Subfile (s)?",
     RemoveSubfiles: "Remover sub-arquivo(s)",
+    RemoveSubfiles2: "Remover sub-arquivo(s)?",
     RemoveUser: "Você está próximo de remover-se do grupo",
     Rename: "Renomear",
     RenderedSVG: "Rendered SVG",
@@ -579,7 +598,7 @@
     Resource: "Recurso",
     Resources: "Recursos",
     ResponseSchema: "Schema da Resposta",
-    Restart: "Restart",
+    Restart: "Reiniciar",
     Restarted: "Recomeçar",
     Restore: "Restaurar",
     Resubmit: "Resubmeter",
@@ -606,9 +625,9 @@
     Security: "Segurança",
     SelectPackageFile: "Selecione pacote que arquivos",
     Separators: "Seperadores",
+    Server: "Servidor",
     ServiceName: "Nome do Serviço",
     Services: "Serviços",
-    Server: "Servidor",
     SetBanner: "Fixar Banner",
     SetTextError: "Erro para mostrar texto(muito longo?)  Use &lsquo;ajuda&rsquo; para baixar",
     SetToFailed: "Indicar como Falhado",
@@ -705,6 +724,7 @@
     title_BindingDefinition: "Definição de Ligação",
     title_ClusterInfo: "grupos",
     title_CodeGeneratorPermissions: "Permissões de Gerador de Código",
+    title_DefinitionExplorer: "Explorador de definição",
     title_Definitions: "Definições",
     title_DESDL: "ESDL dinâmica",
     title_DFUQuery: "Arquivos Lógicos",
@@ -714,15 +734,14 @@
     title_ECLPlayground: "ECL Playground",
     title_ErrorsWarnings: "Erros / Avisos para",
     title_EventScheduleWorkunit: "Escalonador de eventos",
-    title_DefinitionExplorer: "Explorador de definição",
-    title_FilesPendingCopy: "Arquivos pendentes de cópia",
     title_FileScopeDefaultPermissions: "Permissão Padrão de Arquivos",
+    title_FilesPendingCopy: "Arquivos pendentes de cópia",
     title_FoundFilesFor: "Arquivos encontrados para",
     title_GetDFUWorkunits: "Tarefas DFU",
     title_Graph: "Gráficos",
     title_GraphPage: "Título",
     title_Graphs: "Gráficos",
-    title_GridDetails: "Change Me",
+    title_GridDetails: "Mude-me",
     title_History: "História",
     title_HPCCPlatformECL: "ECL Watch - Página Inicial",
     title_HPCCPlatformFiles: "ECL Watch - Arquivos",
@@ -764,7 +783,7 @@
     To: "Para",
     ToDate: "Data Final",
     Toenablegraphviews: "Para ativar visão gráfica, por favor instalar o plugin",
-    Tooltip: "Tooltip",
+    Tooltip: "Dica de Ferramenta",
     TooManyFiles: "Inumeros Arquivos",
     Top: "Topo",
     Topology: "Topologia",
@@ -777,17 +796,19 @@
     Tree: "Árvore",
     Type: "Tipo",
     Unbound: "Desvinculado",
-    undefined: "undefined",
-    Unknown: "Unknown",
+    undefined: "Indefinido",
+    Unknown: "Desconhecido",
     Unlock: "Desbloquear",
     Unprotect: "Desprotege",
     UnsupportedIE9FF: "Não Supportado",
     Unsuspend: "Reativar",
     Unsuspended: "Reativado",
     Up: "Cima",
+    UpdateCloneFrom: "Atualizar clone de",
     UpdateDFs: "Atualizar o DFS",
     UpdateSuperFiles: "Actualizar superfile",
     Upload: "Enviar",
+    URL: "URL",
     Usage: "Uso",
     Used: "Usado",
     User: "Usuário",
@@ -813,7 +834,7 @@
     Version: "Versão",
     ViewByScope: "Visão por escopo",
     Views: "Visões",
-    Visualize: "Visualize",
+    Visualize: "Visualizar",
     WarnIfAvailableDiskSpaceIsUnder: "Avisar se o espaço disponível em disco estiver abaixo de",
     WarnIfAvailableMemoryIsUnder: "Avisar se a memória disponível está abaixo de",
     WarnIfCPUUsageIsOver: "Avisar se o uso da CPU está além",
@@ -828,27 +849,35 @@
     Workunit: "Tarefa",
     Workunits: "Tarefas",
     WorkUnitScopeDefaultPermissions: "Permisos por defect de alcaces de Workunit",
-    Wrap: "Wrap",
+    Wrap: "Embrulho",
     WSDL: "WSDL",
     WUID: "WUID",
     Wuidcannotbeempty: "Wuid não pode estar vazia",
-    WUSnapShot: "WU Snap Shot",
+    WUSnapShot: "Instantâneo de WU",
     XGMML: "XGMML",
     XLS: "XLS",
     XML: "XML",
     XRef: "XRef",
     Year: "Ano",
+    YouAreAboutToBeLoggedOut: "Você está prestes a ser desconectado",
     YouAreAboutToDeleteBinding: "Está prestes a eliminar esta ligação. Você tem certeza que quer fazer isso?",
     YouAreAboutToDeleteDefinition: "Você está prestes a deletar essa definição. Você tem certeza de que quer fazer isso?",
+    YouAreAboutToDeleteThisFile: "Você está prestes a excluir este arquivo. Você tem certeza de que quer fazer isso?",
+    YouAreAboutToDeleteThisPart: "Você está prestes a excluir esta(s) parte(s). Você tem certeza de que quer fazer isso?",
+    YouAreAboutToDeleteThisQueryset: "Você está prestes a excluir este conjunto de consultas. Você tem certeza de que quer fazer isso?",
+    YouAreAboutToDeleteThisWorkunit: "Você está prestes a excluir esta workunit. Você tem certeza de que quer fazer isso?",
     YouAreAboutToRemoveUserFrom: "Usted esta a punto de quitar un(os) usuario(s) de este grupo. ¿Desea continuar?",
     YourBrowserMayNotSupport: "O seu navegador provavelmente não supporta arquivo(s) deste tamanho",
+    YourScreenWasLocked: "Sua tela foi bloqueada por ESP. Por favor re-busque seus dados, pois pode ser obsoleto.",
     ZAP: "Z.A.P",
     ZeroLogicalFilesCheckFilter: "Nenhum Arquivo Lógico (verifique filtro)",
     Zip: "Zip",
     ZippedAnalysisPackage: "Pacote de Análise Zipped",
-    Zoom100Pct: "Zoom 100%",
-    Zoom: "Zoom",
+    Zoom: "Ampliar",
+    Zoom100Pct: "Ampliar 100%",
     ZoomAll: "Zoom Completo",
+    ZoomMinus: "Ampliar -",
+    ZoomPlus: "Ampliar +",
     ZoomWidth: "comprimento do Zoom"
 })
 );

+ 47 - 15
esp/src/eclwatch/nls/zh/hpcc.js

@@ -23,8 +23,8 @@
     ActivityMap: "活动图",
     ActualSize: "实际长度",
     Add: "添加",
-    AddAttributes2: "添加属性",
     AddAttributes: "在你得方法中添加属性/值",
+    AddAttributes2: "添加属性",
     AddBinding: "添加连接",
     AddFile: "添加文件",
     AddGroup: "添加用户组",
@@ -63,6 +63,7 @@
     BannerScroll: "标语滚动",
     BannerSize: "标语大小",
     BinaryInstalls: "安装图形控制器",
+    Bind: "捆绑",
     Binding: "连接",
     BindingDeleted: "连接已删除",
     Blob: "BLOB",
@@ -86,7 +87,7 @@
     Close: "关闭",
     Cluster: "计算机集群",
     ClusterName: "计算机集群名称",
-    ClusterPlaceholder: "r?x*",
+    ClusterPlaceholder: "集群占位符",
     ClusterProcesses: "计算机集群进程",
     Code: "代码",
     CodeGenerator: "代码生成器",
@@ -94,6 +95,8 @@
     CollapseAll: "隐藏",
     Command: "指令",
     Comment: "注释",
+    Compiled: "已编译",
+    Compiling: "编译",
     Completed: "完成",
     ComplexityWarning: "超过{}活动({})- 重新显示?",
     Component: "组成部分",
@@ -102,6 +105,7 @@
     CompressedFileSize: "压缩后的文件长度",
     Condition: "条件",
     Configuration: "设置",
+    ConfigureService: "配置服务",
     ConfirmPassword: "确认密码",
     ConfirmRemoval: "确认",
     ContactAdmin: "如果你想要重新命名这个群组,请联系你的LDAP管理员",
@@ -116,6 +120,7 @@
     Created: "已创建",
     CreatedBy: "创建者",
     CreatedTime: "创建时间",
+    Creating: "创建",
     Critical: "关键的",
     CSV: "CSV",
     Dali: "Dali",
@@ -128,7 +133,10 @@
     DEF: "DEF",
     Defaults: "默认",
     Definition: "定义",
+    DefinitionDeleted: "定义已删除",
+    DefinitionID: "定义识别码",
     Definitions: "定义",
+    DelayedReplication: "已延迟的复制",
     Delete: "删除",
     DeleteBinding: "删除连接",
     Deleted: "已删除",
@@ -143,8 +151,8 @@
     DeleteSelectedQueries: "删除所选择的查询程序?",
     DeleteSelectedUsers: "删除所选择的用户?",
     DeleteSelectedWorkunits: "删除所选择的工作单元?",
-    DeleteSuperfile2: "删除文件集",
     DeleteSuperfile: "删除文件集?",
+    DeleteSuperfile2: "删除文件集",
     DeleteThisPackage: "删除文件包?",
     Delimited: "定界的",
     DenyAccess: "<center>拒绝<br>有限权限</center>",
@@ -179,10 +187,13 @@
     Downloads: "下载",
     DownloadToCSV: "下载成CSV",
     DropZone: "文件停放区",
+    DueToInctivity: "如果三分钟之内没有活动,您将退出所有ECL Watch进程。",
     Duration: "时间段",
     DynamicNoServicesFound: "找不到服务",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
+    ECLWatchRequiresCookies: "ECLWatch需要启用cookie才能继续",
+    ECLWatchSessionManagement: "ECLWatch进程管理",
     ECLWorkunit: "ECL工作单元",
     Edges: "连接",
     Edit: "编辑",
@@ -215,6 +226,8 @@
     EventText: "事件内容",
     EventTextPH: "事件文字",
     Exception: "异常",
+    Executed: "已执行",
+    Executing: "执行",
     ExpandAll: "打开",
     ExpireDays: "过期(天)",
     Export: "输出",
@@ -232,11 +245,11 @@
     FilePath: "文件路径",
     FilePermission: "文件权限",
     Files: "文件",
-    FilesPending: "文件添加",
     FileScopeDefaultPermissions: "文件默认权限",
     FileScopes: "文件范围",
     FileSize: "文件长度",
     FilesNoPackage: "与文件包定义不匹配的文件",
+    FilesPending: "文件添加",
     FilesWarning: "系统检索到太多文件。前100,000文件按照修改时间返回。可以指定筛选规则来返回少量文件。",
     FilesWithUnknownSize: "大小未知的文件",
     FileType: "文件类型",
@@ -248,6 +261,7 @@
     FindNext: "查找下一个",
     FindPrevious: "查找前一个",
     Finished: "已完成",
+    FirstN: "前N个",
     FirstName: "名",
     FirstNRows: "初始N行",
     Fixed: "定长的",
@@ -294,6 +308,7 @@
     InheritedPermissions: "继承权限",
     Inputs: "输入",
     InvalidResponse: "(无效响应)",
+    InvalidUsernamePassword: "用户名或密码错误,请重试。",
     IP: "IP",
     IPAddress: "IP地址",
     IsCompressed: "已压缩",
@@ -323,6 +338,7 @@
     LastNRows: "最后N行",
     LastRun: "上次运行",
     LDAPWarning: "<b>LDAP服务错误:</b>用户太多无法显示,请选用过滤器.",
+    LearnMore: "更多信息",
     LegacyForm: "旧式表格",
     Legend: "传奇",
     LibrariesUsed: "使用程序库",
@@ -341,6 +357,7 @@
     Location: "地点",
     Lock: "锁住",
     Log: "日志",
+    log_analysis_1: "日志_分析_1*",
     LogFile: "日志文件",
     LoggedInAs: "登录用户",
     LoggingOut: "退出",
@@ -351,12 +368,12 @@
     LogicalFileType: "逻辑文件类型",
     LogicalName: "逻辑文件名",
     Login: "登录",
-    Logs: "日志",
     Logout: "退出",
-    log_analysis_1: "日志_分析_1*",
+    Logs: "日志",
     LogVisualization: "日志可视化",
-    LostFile2: "丢失文件",
+    LogVisualizationUnconfigured: "可视化日志未设置,请检查你的配置管理设置。",
     LostFile: "丢失文件",
+    LostFile2: "丢失文件",
     LostFileMessage: "一个逻辑文件同时在主要和复制地的储存区缺少至少一个文件部分。该逻辑文件还在dali服务器中引用。删除该文件去掉dali服务器中引用及在磁盘中的任何余留部分。",
     Low: "低",
     MachineInformation: "机器信息",
@@ -377,15 +394,15 @@
     MaxSkew: "最大规格",
     MemberOf: "隶属",
     Members: "成员",
-    MethodConfiguration: "方法配置",
     Message: "信息",
+    MethodConfiguration: "方法配置",
     Methods: "方法",
     Min: "最小",
     Mine: "本人所有",
     MinNode: "最小节点",
-    MinSkew: "最小偏差",
     Minor: "次要的",
     MinSize: "最小规格",
+    MinSkew: "最小偏差",
     Missing: "失踪",
     MixedNodeStates: "多种节点状态",
     Modification: "修改",
@@ -441,8 +458,8 @@
     Operations: "操作",
     Options: "选项",
     OriginalFile: "原文件",
-    OrphanFile2: "孤立文件",
     OrphanFile: "孤立文件",
+    OrphanFile2: "孤立文件",
     OrphanMessage: "一个孤立文件会有某些部分存于在磁盘上。然而不可能得到所有部分以建立完整的逻辑文件。它不会引用dali服务器上的文件部分。",
     Outputs: "输出",
     Overview: "覆盖",
@@ -456,8 +473,8 @@
     PackagesNoQuery: "与查询程序不匹配的文件包",
     ParameterXML: "参数XML",
     Part: "分块",
-    PartName: "部件名称",
     PartMask: "组成部分掩模",
+    PartName: "部件名称",
     Parts: "文件分块",
     PartsFound: "找到组成部分",
     PartsLost: "组成部分丢失",
@@ -484,8 +501,10 @@
     PlaceholderFirstName: "民",
     PlaceholderLastName: "张",
     Playground: "操作平台",
+    PleaseEnableCookies: "ECLWatch需要启用cookie才能继续",
     PleaseEnterANumber: "请输入一个数字",
     PleaseLogin: "请输入用户名和密码登录",
+    PleaseLogIntoECLWatch: "请登录ECLWatch",
     PleasePickADefinition: "请挑选定义",
     PleaseSelectADynamicESDLService: "请选择DynamicESDL服务",
     PleaseSelectAGroupToAddUser: "请选择要将用户添加到的组",
@@ -557,8 +576,8 @@
     RemoveAttributeQ: "你将要删除此属性。你确定要继续? ",
     RemoveAtttributes: "删除属性",
     RemovePart: "删除部件",
-    RemoveSubfiles2: "删除子文件?",
     RemoveSubfiles: "删除子文件",
+    RemoveSubfiles2: "删除子文件?",
     RemoveUser: "将把你的用户从用户组里删除:",
     Rename: "更名",
     RenderedSVG: "渲染的SVG",
@@ -589,11 +608,11 @@
     RetainSuperfileStructure: "保留文件集的结构",
     RetypePassword: "验证密码",
     Reverse: "反转",
-    RoxieFileCopy: "Roxie 文件备份的状态",
     RowPath: "行路径",
     Rows: "行",
     RowTag: "行标记",
     RoxieCluster: "Roxie集群",
+    RoxieFileCopy: "Roxie 文件备份的状态",
     RunningServerStrain: "运行此进程可能需很长时间且会给服务器带来沉重的负载。 你确定要继续?",
     Sample: "样本",
     SampleRequest: "请求的样本",
@@ -605,9 +624,9 @@
     Security: "安全",
     SelectPackageFile: "选择文件包文件",
     Separators: "分割符",
+    Server: "服务器",
     ServiceName: "服务名称",
     Services: "服务",
-    Server: "服务器",
     SetBanner: "标语设置",
     SetTextError: "文本太大无法显示. 请用&lsquo;帮助&rsquo;下载",
     SetToFailed: "设为失误状态",
@@ -703,6 +722,8 @@
     title_BindingDefinition: "捆绑定义",
     title_ClusterInfo: "组",
     title_CodeGeneratorPermissions: "代码生成权限",
+    title_DefinitionExplorer: "定义延伸",
+    title_Definitions: "定义",
     title_DESDL: "Dynamic ESDL",
     title_DFUQuery: "逻辑文件",
     title_DFUWUDetails: "DFU工作单元",
@@ -712,6 +733,7 @@
     title_ErrorsWarnings: "错误/警告对",
     title_EventScheduleWorkunit: "事件计划",
     title_FileScopeDefaultPermissions: "文件默认权限",
+    title_FilesPendingCopy: "待复制文件",
     title_FoundFilesFor: "找到文件为",
     title_GetDFUWorkunits: "DFU工作单元",
     title_Graph: "图形",
@@ -783,6 +805,7 @@
     UpdateDFs: "更新DFS",
     UpdateSuperFiles: "更新文件集",
     Upload: "上传",
+    URL: "URL",
     Usage: "使用率",
     Used: "已使用",
     User: "用户",
@@ -833,17 +856,26 @@
     XML: "XML",
     XRef: "XRef",
     Year: "年",
+    YouAreAboutToBeLoggedOut: "你将要被退出",
     YouAreAboutToDeleteBinding: "你将要删除连接。你确定要继续? ",
     YouAreAboutToDeleteDefinition: "您即将删除此定义,您要继续吗?",
+    YouAreAboutToDeleteThisFile: "你确定要删除此文件?",
+    YouAreAboutToDeleteThisPart: "你确定要删除这部分?",
+    YouAreAboutToDeleteThisQueryset: "你确定要删除这个查询集?",
+    YouAreAboutToDeleteThisWorkunit: "你确定要删除这个工作单元?",
     YouAreAboutToRemoveUserFrom: "您即将从此组中删除用户,您要继续吗?",
     YourBrowserMayNotSupport: "你的网络浏览器不支持这个大小的文件",
+    YourScreenWasLocked: "ECLWatch界面被ESP锁死过。你的数据可能已陈旧, 请更新。",
     ZAP: "Z.A.P",
     ZeroLogicalFilesCheckFilter: "无逻辑文件(请检查筛选规则)",
     Zip: "Zip",
     ZippedAnalysisPackage: "压缩后的分析信息包",
-    Zoom100Pct: "缩放100%",
     Zoom: "缩放",
+    Zoom100Pct: "缩放100%",
     ZoomAll: "整体缩放",
+    ZoomMinus: "缩小",
+    ZoomPlus: "放大",
     ZoomWidth: "宽度缩放"
+
 })
 );

+ 3 - 3
esp/src/eclwatch/viz/DojoD3Choropleth.js

@@ -12,6 +12,9 @@ define([
 ], function (declare, lang, arrayUtil, Deferred,
     hpccMap,
     DojoD3, Mapping) {
+
+        hpccMap.topoJsonFolder("/esp/files/dist/TopoJSON");
+
         return declare([Mapping, DojoD3], {
             mapping: {
                 choropleth: {
@@ -57,9 +60,6 @@ define([
                         console.log("Invalid visualization:  " + this._chartType)
                         deferred.resolve(null);
                 }
-                if (this.chart) {
-                    this.chart._topoJsonFolder = require.toUrl("@hpcc-js/TopoJSON");
-                }
                 return deferred.promise;
             },
 

File diff suppressed because it is too large
+ 1098 - 1168
esp/src/package-lock.json


+ 23 - 22
esp/src/package.json

@@ -29,9 +29,7 @@
     "test": "run-s lint"
   },
   "main": "src/stub.js",
-  "dependencies": {},
-  "devDependencies": {
-    "@types/dojo": "1.9.40",
+  "dependencies": {
     "@hpcc-js/chart": "2.1.2",
     "@hpcc-js/comms": "2.0.3",
     "@hpcc-js/eclwatch": "2.0.3",
@@ -40,32 +38,35 @@
     "@hpcc-js/tree": "2.0.3",
     "clipboard": "1.7.1",
     "codemirror": "5.31.0",
-    "copy-webpack-plugin": "4.5.2",
-    "cpx": "1.5.0",
     "crossfilter2": "1.4.3",
-    "css-loader": "1.0.0",
     "d3-array": "1.2.1",
-    "dijit": "1.13.0",
+    "dijit": "1.14.2",
     "d3-scale": "1.0.6",
-    "dojo": "1.13.0",
-    "dojo-themes": "1.13.0",
-    "dojo-util": "1.13.0",
-    "dojo-webpack-plugin": "2.7.3",
-    "dojox": "1.13.0",
-    "es6-promise": "4.1.1",
-    "font-awesome": "4.7.0",
-    "file-loader": "1.1.11",
+    "dojo": "1.14.2",
+    "dojo-themes": "1.14.1",
+    "dojo-util": "1.14.2",
+    "dojox": "1.14.2",
+    "es6-promise": "4.2.5",
+    "font-awesome": "4.7.0"
+  },
+  "devDependencies": {
+    "@types/dojo": "1.9.40",
+    "copy-webpack-plugin": "4.5.4",
+    "cpx": "1.5.0",
+    "css-loader": "1.0.0",
+    "dojo-webpack-plugin": "2.7.6",
+    "file-loader": "2.0.0",
     "jshint": "2.9.6",
-    "local-web-server": "2.3.0",
+    "local-web-server": "2.6.0",
     "npm-run-all": "4.1.3",
     "rimraf": "2.6.2",
-    "style-loader": "0.21.0",
+    "style-loader": "0.23.1",
     "tslib": "1.9.3",
-    "typescript": "2.9.2",
-    "url-loader": "1.0.1",
-    "webpack": "4.16.0",
-    "webpack-cli": "3.0.8",
-    "webpack-bundle-analyzer": "2.13.1"
+    "typescript": "3.1.3",
+    "url-loader": "1.1.2",
+    "webpack": "4.21.0",
+    "webpack-cli": "3.1.2",
+    "webpack-bundle-analyzer": "3.0.3"
   },
   "author": "HPCC Systems",
   "license": "Apache-2.0",

+ 1 - 0
esp/src/src/GraphTree7Widget.ts

@@ -38,6 +38,7 @@ import "dijit/form/DropDownButton";
 import "dijit/form/Select";
 import "dijit/Toolbar";
 import "dijit/ToolbarSeparator";
+import "dijit/TooltipDialog"
 
 import declareDecorator from './DeclareDecorator';
 import { WUScopeController } from "./WUScopeController";

+ 3 - 0
esp/src/src/Utility.ts

@@ -521,6 +521,9 @@ export function resolve(hpccWidget, callback) {
         case "LibrariesUsedWidget":
             require(["hpcc/LibrariesUsedWidget"], doLoad);
             break;
+        case "LogsWidget":
+            require(["hpcc/HelpersWidget"], doLoad);
+            break;
         case "LogWidget":
             require(["hpcc/LogWidget"], doLoad);
             break;

+ 4 - 4
initfiles/bash/etc/init.d/install-init.in

@@ -235,10 +235,10 @@ if [ ! -d ${homePath}/certificate ]; then
 fi
 
 if [ ! -e ${homePath}/certificate/key.pem ]; then
-    ssh-keygen -t rsa -N hpccsystems-platform -f ${homePath}/certificate/key.pem \
+    ssh-keygen -t rsa -N '' -f ${homePath}/certificate/key.pem \
         1>/dev/null 2>&1
     openssl rsa -in ${homePath}/certificate/key.pem -pubout \
-        -out ${homePath}/certificate/public.key.pem -passin pass:hpccsystems-platform
+        -out ${homePath}/certificate/public.key.pem 
     chmod 0644 ${homePath}/certificate/public.key.pem
     rm -f ${homePath}/certificate/key.pem.pub
     printf "RSA key installed for user %-28s ..." "$user"
@@ -250,8 +250,8 @@ fi
 
 if [ ! -e ${homePath}/certificate/certificate.pem ]; then
     openssl req -new -key ${homePath}/certificate/key.pem -keyform PEM -x509 \
-        -days 365 -out ${homePath}/certificate/certificate.pem -passin \
-        pass:hpccsystems-platform -passout pass:hpccsystems-platform -batch 1>/dev/null 2>&1
+        -days 365 -out ${homePath}/certificate/certificate.pem \
+        -batch 1>/dev/null 2>&1
     printf "Self Signed Certificate installed for user %-12s ..." "$user"
     log_success_msg
 else

+ 6 - 0
initfiles/componentfiles/configxml/CMakeLists.txt

@@ -34,6 +34,9 @@ if("${HPCC_PROJECT_ABBR}" STREQUAL "CC")
     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/buildset.xml DESTINATION componentfiles/configxml COMPONENT Runtime)
 endif()
 
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sparkThor.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/sparkThor.xsl @ONLY)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/spark-defaults.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/spark-defaults.xsl @ONLY)
+        
 FOREACH( iFILES
     ${CMAKE_CURRENT_BINARY_DIR}/dropzone.xsd
     ${CMAKE_CURRENT_BINARY_DIR}/eclagent_config.xsd
@@ -97,6 +100,9 @@ FOREACH( iFILES
     ${CMAKE_CURRENT_SOURCE_DIR}/daliplugin.xsd
     ${CMAKE_CURRENT_SOURCE_DIR}/backupnode.xsd
     ${CMAKE_CURRENT_SOURCE_DIR}/backupnode_vars.xsl
+    ${CMAKE_CURRENT_SOURCE_DIR}/sparkThor.xsd
+    ${CMAKE_CURRENT_BINARY_DIR}/sparkThor.xsl
+    ${CMAKE_CURRENT_BINARY_DIR}/spark-defaults.xsl
 )
     Install ( FILES ${iFILES} DESTINATION componentfiles/configxml COMPONENT Runtime)
 ENDFOREACH ( iFILES )

plugins/spark/spark-defaults.xsl.in → initfiles/componentfiles/configxml/spark-defaults.xsl.in


plugins/spark/sparkThor.xsd → initfiles/componentfiles/configxml/sparkThor.xsd


plugins/spark/sparkThor.xsl.in → initfiles/componentfiles/configxml/sparkThor.xsl.in


+ 1 - 1
initfiles/etc/DIR_NAME/environment.conf.in

@@ -36,7 +36,7 @@ mpTraceLevel=0
 
 #Specify location of HPCC PKI public/private key files
 # note: if HPCCPassPhrase specified it must be encrypted
-#HPCCPassPhrase=XC+0Byt45EYD6qV5++8HW+lgsYB/nGud8FtgrubKdLk=
+#HPCCPassPhrase=
 #HPCCCertificateFile=${HOME_DIR}/${RUNTIME_USER}/certificate/certificate.pem
 #HPCCPublicKeyFile=${HOME_DIR}/${RUNTIME_USER}/certificate/public.key.pem
 #HPCCPrivateKeyFile=${HOME_DIR}/${RUNTIME_USER}/certificate/key.pem

+ 6 - 1
initfiles/etc/DIR_NAME/environment.xml.in

@@ -282,7 +282,6 @@
           enableVerification="false"
           organization="Customer of HPCCSystems"
           organizationalUnit=""
-          passphrase="XC+0Byt45EYD6qV5++8HW+lgsYB/nGud8FtgrubKdLk="
           privateKeyFileName="@HOME_DIR@/@RUNTIME_USER@/certificate/key.pem"
           regenerateCredentials="false"
           requireAddressMatch="false"
@@ -934,6 +933,12 @@
   <lock>${LOCK_PATH}</lock>
   <configs>${CONFIG_DIR}</configs>
   <path>${INSTALL_DIR}</path>
+  <Keys>
+   <KeyPair name="mythor" publicKey="@HOME_DIR@/@RUNTIME_USER@/certificate/public.key.pem" privateKey="@HOME_DIR@/@RUNTIME_USER@/certificate/key.pem"/>
+   <Cluster name="mythor" keyPairName="mythor"/>
+   <Cluster name="myroxie" keyPairName="mythor"/>
+   <Cluster name="hthor__myeclagent" keyPairName="mythor"/>
+  </Keys>
  </EnvSettings>
  <Programs>
   <Build name="_" url="${INSTALL_DIR}">

+ 0 - 9
plugins/spark/CMakeLists.txt

@@ -156,15 +156,6 @@ if(SPARK)
         DESTINATION ${EXEC_DIR}
         COMPONENT Runtime)
     
-    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sparkThor.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/sparkThor.xsl @ONLY)
-    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/spark-defaults.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/spark-defaults.xsl @ONLY)
-    install(FILES
-        ${CMAKE_CURRENT_SOURCE_DIR}/sparkThor.xsd
-        ${CMAKE_CURRENT_BINARY_DIR}/sparkThor.xsl
-        ${CMAKE_CURRENT_BINARY_DIR}/spark-defaults.xsl
-        DESTINATION componentfiles/configxml
-        COMPONENT Runtime)
-        
     configure_file(sparkthor@instance.service.in sparkthor@.service @ONLY)
     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/sparkthor@.service DESTINATION etc/systemd/system COMPONENT Systemd)
 

+ 0 - 5
system/security/LdapSecurity/ldapsecurity.cpp

@@ -1310,12 +1310,7 @@ bool CLdapSecManager::updateUserPassword(ISecUser& user, const char* newPassword
         return false;
     }
 
-    //Update password if authenticated
     bool ok = m_ldap_client->updateUserPassword(user, newPassword, currPassword);
-    if(ok && m_permissionsCache->isCacheEnabled() && !m_usercache_off)
-    {
-        m_permissionsCache->removeFromUserCache(user);
-    }
     return ok;
 }
 

+ 7 - 6
testing/regress/ecl-test

@@ -125,20 +125,21 @@ class RegressMain:
         # Go through the cluster list
         for cluster in self.targetClusters:
             self.args.target = cluster
-            if  self.args.pq :
-                self.regress.runSuiteP(cluster, self.regress.Setup(self.args))
-            else:
+            if  self.args.pq in (0, 1):
                 self.regress.runSuite(cluster, self.regress.Setup(self.args))
+            else:
+                self.regress.runSuiteP(cluster, self.regress.Setup(self.args))
 
     def run(self):
         # Go through the cluster list
         for cluster in self.targetClusters:
             self.regress.bootstrap(cluster, self.args)
             self.args.target = cluster
-            if  self.args.pq :
-                self.regress.runSuiteP(cluster, self.regress.suites[cluster])
-            else:
+            if  self.args.pq in (0, 1):
                 self.regress.runSuite(cluster, self.regress.suites[cluster])
+            else:
+                self.regress.runSuiteP(cluster, self.regress.suites[cluster])
+
 
     def main(self):
         prog = "ecl-test"

+ 1 - 1
testing/regress/hpcc/util/ecl/file.py

@@ -81,7 +81,7 @@ class ECLFile:
         self.isVersions=False
         self.version=''
         self.versionId=0
-        self.timeout = 0
+        self.timeout = int(args.timeout)
         self.args = args
         self.eclccWarning = ''
         self.eclccWarningChanges = ''

+ 2 - 1
thorlcr/activities/indexread/thindexreadslave.cpp

@@ -238,7 +238,8 @@ public:
                     if (!keyIndexSet)
                     {
                         keyIndexSet.setown(createKeyIndexSet());
-                        Owned<const ITranslator> translator = getLayoutTranslation(helper->getFileName(), part, translationMode, expectedFormatCrc, expectedFormat, projectedFormatCrc, projectedFormat);
+                        OwnedRoxieString fileName = helper->getFileName();
+                        Owned<const ITranslator> translator = getLayoutTranslation(fileName, part, translationMode, expectedFormatCrc, expectedFormat, projectedFormatCrc, projectedFormat);
                         translators.append(translator.getClear());
                     }
                     keyIndexSet->addIndex(keyIndex.getClear());