Ver código fonte

Merge pull request #5770 from wangkx/h11208

HPCC-11306 Localise legacy ECLWatch pages embeded in new ECLWatch

Reviewed-By: Gordon Smith <gordon.smith@lexisnexis.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 11 anos atrás
pai
commit
53449b03bc
31 arquivos alterados com 1638 adições e 540 exclusões
  1. 3 1
      esp/bindings/http/platform/httptransport.cpp
  2. 2 0
      esp/eclwatch/ws_XSLT/CMakeLists.txt
  3. 55 43
      esp/eclwatch/ws_XSLT/clusterprocesses.xslt
  4. 20 20
      esp/eclwatch/ws_XSLT/dfu_filelist.xslt
  5. 32 34
      esp/eclwatch/ws_XSLT/machines.xslt
  6. 162 0
      esp/eclwatch/ws_XSLT/nls/bs/hpcc.xml
  7. 162 0
      esp/eclwatch/ws_XSLT/nls/en/hpcc.xml
  8. 162 0
      esp/eclwatch/ws_XSLT/nls/es/hpcc.xml
  9. 162 0
      esp/eclwatch/ws_XSLT/nls/hr/hpcc.xml
  10. 162 0
      esp/eclwatch/ws_XSLT/nls/hu/hpcc.xml
  11. 162 0
      esp/eclwatch/ws_XSLT/nls/sr/hpcc.xml
  12. 162 0
      esp/eclwatch/ws_XSLT/nls/zh/hpcc.xml
  13. 45 67
      esp/eclwatch/ws_XSLT/services.xslt
  14. 46 61
      esp/eclwatch/ws_XSLT/targetclusters.xslt
  15. 17 41
      esp/eclwatch/ws_XSLT/topology.xslt
  16. 44 31
      esp/eclwatch/ws_XSLT/tplog.xslt
  17. 14 0
      esp/platform/espcontext.cpp
  18. 3 0
      esp/scm/esp.ecm
  19. 1 0
      esp/scm/ws_fs.ecm
  20. 5 1
      esp/scm/ws_machine.ecm
  21. 6 2
      esp/scm/ws_topology.ecm
  22. 22 0
      esp/services/ws_fs/ws_fsService.cpp
  23. 1 0
      esp/services/ws_fs/ws_fsService.hpp
  24. 71 58
      esp/services/ws_machine/machines.xslt
  25. 18 14
      esp/services/ws_machine/metrics.xslt
  26. 20 166
      esp/services/ws_machine/preflightControls.xslt
  27. 31 0
      esp/services/ws_machine/ws_machineService.cpp
  28. 1 0
      esp/services/ws_machine/ws_machineService.hpp
  29. 5 0
      esp/services/ws_machine/ws_machineServiceMetrics.cpp
  30. 41 0
      esp/services/ws_topology/ws_topologyService.cpp
  31. 1 1
      esp/services/ws_topology/ws_topologyService.hpp

+ 3 - 1
esp/bindings/http/platform/httptransport.cpp

@@ -1719,9 +1719,11 @@ void CHttpRequest::updateContext()
                 m_context->setClientVersion(0.0);
         }
 
-        StringBuffer useragent;
+        StringBuffer useragent, acceptLanguage;
         getHeader("User-Agent", useragent);
         m_context->setUseragent(useragent.str());
+        getHeader("Accept-Language", acceptLanguage);
+        m_context->setAcceptLanguage(acceptLanguage.str());
     }
 }
 

+ 2 - 0
esp/eclwatch/ws_XSLT/CMakeLists.txt

@@ -186,3 +186,5 @@ FOREACH ( iFILES
 )
     Install ( FILES ${iFILES} DESTINATION componentfiles/wsecl/wsecl COMPONENT Runtime )
 ENDFOREACH ( iFILES )
+
+Install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/nls DESTINATION componentfiles/smc_xslt COMPONENT Runtime USE_SOURCE_PERMISSIONS PATTERN ".svn" EXCLUDE )

+ 55 - 43
esp/eclwatch/ws_XSLT/clusterprocesses.xslt

@@ -34,6 +34,9 @@
    <xsl:variable name="clusterType" select="string($reqInfo/ClusterType)"/>
    <xsl:variable name="memThresholdType" select="number($reqInfo/MemThresholdType)"/>
    <xsl:variable name="diskThresholdType" select="number($reqInfo/DiskThresholdType)"/>
+   <xsl:variable name="acceptLanguage" select="/GetTargetClusterInfoResponse/AcceptLanguage"/>
+   <xsl:variable name="localiseFile"><xsl:value-of select="concat('nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+   <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
    
    <xsl:variable name="memThreshold"><!-- from 0 to 100 (%)-->
       <xsl:choose>
@@ -244,7 +247,7 @@
                      <h1><xsl:value-of select="Exceptions"/></h1>
                   </xsl:when>
                   <xsl:when test="not(TargetClusterInfoList)">
-                     <h2>No target clusters selected!</h2>
+                     <h2><xsl:value-of select= "$hpccStrings/st[@id='NoTargetClustersSelected']"/></h2>
                   </xsl:when>
                   <xsl:otherwise>
                       <center>
@@ -254,19 +257,19 @@
                               <th align="left">
                               <h3>
                                      <xsl:choose>                       
-                                    <xsl:when test="$clusterType='THORSPARENODES'">Thor Slaves</xsl:when>
-                                    <xsl:when test="$clusterType='ALLSERVICES'">System Service Nodes</xsl:when>
+                                    <xsl:when test="$clusterType='THORSPARENODES'"><xsl:value-of select= "$hpccStrings/st[@id='ThorSlaves']"/></xsl:when>
+                                    <xsl:when test="$clusterType='ALLSERVICES'"><xsl:value-of select= "$hpccStrings/st[@id='SystemServiceNodes']"/></xsl:when>
                                     <xsl:when test="$clusterName!=''">
                                         <xsl:choose>
                                                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                                                             </xsl:choose>
-                                                            <xsl:text disable-output-escaping="yes">Cluster '</xsl:text>
+                                                            <xsl:value-of select= "$hpccStrings/st[@id='Cluster']"/><xsl:text disable-output-escaping="yes"> '</xsl:text>
                                         <xsl:value-of select="$clusterName"/>
                                         <xsl:text disable-output-escaping="yes">'</xsl:text>
                                     </xsl:when>
-                                    <xsl:otherwise>Machine Information</xsl:otherwise>
+                                    <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='MachineInfo']"/></xsl:otherwise>
                                  </xsl:choose>
                               </h3>
                               </th>
@@ -278,9 +281,9 @@
                                         <tr>
                                             <th id="selectAll" width="1%" style="padding-left:4px">
                                                 <input type="checkbox" id="TargetClusters.All" name="TargetClusters.ALL"
-                                                       title="Select all target clusters" onclick="return clickTCCheckbox('', '', this);"></input>
+                                                       title="{$hpccStrings/st[@id='SelectAllTargetClusters']}" onclick="return clickTCCheckbox('', '', this);"></input>
                                             </th>
-                                            <th colspan="5" align="left">Select All / None</th>
+                                            <th colspan="5" align="left"><xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></th>
                                         </tr>
                                     </table>
                                 </xsl:if>
@@ -301,7 +304,7 @@
                                           </tr>
                                       </table>
                                 </xsl:if>
-                                <b>Fetched: </b>
+                                <b><xsl:value-of select="$hpccStrings/st[@id='Fetched']"/>: </b>
                                 <xsl:value-of select="TimeStamp"/>
                                 <br/>
                                 <br/>
@@ -337,7 +340,7 @@
       <tr class="grey">
         <td valign="top" width="20">
           <input type="checkbox" id="TargetClusters.{count(preceding::TargetClusterInfo)}" name="TargetClusters.{count(preceding::TargetClusterInfo)}" checked="1"
-                                value="{$type}:{$name}" title="Select this target cluster" onclick="return clickTCCheckbox('{$type}', '{$name}', this);"></input>
+                                value="{$type}:{$name}" title="{$hpccStrings/st[@id='SelectThisTargetCluster']}" onclick="return clickTCCheckbox('{$type}', '{$name}', this);"></input>
         </td>
         <td align="left" width="20">
           <a href="javascript:showDetails('{$type}', '{$name}');">
@@ -383,18 +386,21 @@
                <xsl:choose>
                   <xsl:when test="../../../Columns/Item">
                      <xsl:for-each select="../../../Columns/Item[text()='Condition']">
-                        <th align="center">Condition</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='Condition']"/></th>
                      </xsl:for-each>
                      <xsl:for-each select="../../../Columns/Item[text()='State']">
-                        <th align="center">State</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='State']"/></th>
                      </xsl:for-each>
                      <xsl:for-each select="../../../Columns/Item[text()='UpTime']">
-                        <th align="center">Up Time</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='UpTime']"/></th>
                      </xsl:for-each>
                      <!--process Processes first-->
                      <xsl:for-each select="../../../Columns/Item[text()='Processes']">
-                        <th align="center"><xsl:value-of select="."/>
-                           <xsl:if test="text()='Processes' and $reqInfo/ApplyProcessFilter=1"> Down</xsl:if>
+                        <th align="center">
+                           <xsl:choose>
+                              <xsl:when test="$reqInfo/ApplyProcessFilter=1"><xsl:value-of select= "$hpccStrings/st[@id='ProcessesDown']"/></xsl:when>
+                              <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='Processes']"/></xsl:otherwise>
+                           </xsl:choose>
                         </th>
                      </xsl:for-each>
                      <!--process disk storage next-->
@@ -402,20 +408,23 @@
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
                      <!--process physical memory and swap next-->      
-                     <xsl:for-each select="../../../Columns/Item[text() = 'Physical Memory' or text()='Swap']">
-                        <th align="center"><xsl:value-of select="."/></th>
+                     <xsl:for-each select="../../../Columns/Item[text() = 'Physical Memory']">
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='PhysicalMemory']"/></th>
+                     </xsl:for-each>
+                     <xsl:for-each select="../../../Columns/Item[text() = 'Swap']">
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='Swap']"/></th>
                      </xsl:for-each>
                      <!--process CPU Load next -->      
                      <xsl:for-each select="../../../Columns/Item[starts-with(text(), 'CPU') and contains(text(), 'Load')]">
-                        <th align="center"><xsl:value-of select="."/></th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='CPULoad']"/></th>
                      </xsl:for-each>
                      <!--process Up Time next -->
                      <xsl:for-each select="../../../Columns/Item[text()='Up Time']">
-                        <th align="center">Computer Up Time</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='ComputerUpTime']"/></th>
                      </xsl:for-each>
                   </xsl:when>
                   <xsl:otherwise>
-                     <th>Description</th>
+                     <th><xsl:value-of select= "$hpccStrings/st[@id='Description']"/></th>
                   </xsl:otherwise>
                </xsl:choose>
             </tr>
@@ -481,16 +490,16 @@
                                     <xsl:attribute name="bgcolor">#FF8800</xsl:attribute>
                                 </xsl:if>
                           <xsl:choose>
-                                    <xsl:when test="$cond='0'">Unknown</xsl:when>
-                                    <xsl:when test="$cond='1'">Normal</xsl:when>
-                                    <xsl:when test="$cond='2'">Warning</xsl:when>
-                                    <xsl:when test="$cond='3'">Minor</xsl:when>
-                                    <xsl:when test="$cond='4'">Major</xsl:when>
-                                    <xsl:when test="$cond='5'">Critical</xsl:when>
-                                    <xsl:when test="$cond='6'">Fatal</xsl:when>
+                                    <xsl:when test="$cond='0'"><xsl:value-of select= "$hpccStrings/st[@id='Unknown']"/></xsl:when>
+                                    <xsl:when test="$cond='1'"><xsl:value-of select= "$hpccStrings/st[@id='Normal']"/></xsl:when>
+                                    <xsl:when test="$cond='2'"><xsl:value-of select= "$hpccStrings/st[@id='Warning']"/></xsl:when>
+                                    <xsl:when test="$cond='3'"><xsl:value-of select= "$hpccStrings/st[@id='Minor']"/></xsl:when>
+                                    <xsl:when test="$cond='4'"><xsl:value-of select= "$hpccStrings/st[@id='Major']"/></xsl:when>
+                                    <xsl:when test="$cond='5'"><xsl:value-of select= "$hpccStrings/st[@id='Critical']"/></xsl:when>
+                                    <xsl:when test="$cond='6'"><xsl:value-of select= "$hpccStrings/st[@id='Fatal']"/></xsl:when>
                                     <xsl:when test="$cond='7'">-</xsl:when>
                     <xsl:when test="$cond='-1'">
-                      <xsl:attribute name="title">Failed to retrieve information.  Please check configuration.</xsl:attribute>
+                      <xsl:attribute name="title"><xsl:value-of select= "$hpccStrings/st[@id='FailedToRetrieveInformation']"/></xsl:attribute>
                     </xsl:when>
                                 </xsl:choose>
                             </td>
@@ -499,17 +508,17 @@
                             <td id="state_{position()}">
                             <xsl:variable name="state" select="ComponentInfo/State"/>
                               <xsl:choose>
-                                        <xsl:when test="$state='0'"><xsl:attribute name="bgcolor">#FF8800</xsl:attribute>Unknown</xsl:when>
-                                        <xsl:when test="$state='1'">Starting</xsl:when>
-                                        <xsl:when test="$state='2'">Stopping</xsl:when>
-                                        <xsl:when test="$state='3'">Suspended</xsl:when>
-                                        <xsl:when test="$state='4'">Recycling</xsl:when>
-                                        <xsl:when test="$state='5'">Ready</xsl:when>
-                                        <xsl:when test="$state='6'">Busy</xsl:when>
+                                        <xsl:when test="$state='0'"><xsl:attribute name="bgcolor">#FF8800</xsl:attribute><xsl:value-of select= "$hpccStrings/st[@id='Unknown']"/></xsl:when>
+                                        <xsl:when test="$state='1'"><xsl:value-of select= "$hpccStrings/st[@id='Starting']"/></xsl:when>
+                                        <xsl:when test="$state='2'"><xsl:value-of select= "$hpccStrings/st[@id='Stopping']"/></xsl:when>
+                                        <xsl:when test="$state='3'"><xsl:value-of select= "$hpccStrings/st[@id='Suspended']"/></xsl:when>
+                                        <xsl:when test="$state='4'"><xsl:value-of select= "$hpccStrings/st[@id='Recycling']"/></xsl:when>
+                                        <xsl:when test="$state='5'"><xsl:value-of select= "$hpccStrings/st[@id='Ready']"/></xsl:when>
+                                        <xsl:when test="$state='6'"><xsl:value-of select= "$hpccStrings/st[@id='Busy']"/></xsl:when>
                                         <xsl:when test="$state='7'">-</xsl:when>
                                         <xsl:when test="$cond='-1'">
-                      <xsl:attribute name="title">Failed to retrieve information.  Please check configuration.</xsl:attribute>
-                                            <xsl:text>N/A</xsl:text>
+                                            <xsl:attribute name="title"><xsl:value-of select= "$hpccStrings/st[@id='FailedToRetrieveInformation']"/></xsl:attribute>
+                                            <xsl:value-of select= "$hpccStrings/st[@id='NA']"/>
                                         </xsl:when>
                                     </xsl:choose>
                             </td>
@@ -518,8 +527,8 @@
                         <td id="uptime_{position()}">
                             <xsl:choose>
                                     <xsl:when test="$cond='-1' or $cond='7'">
-                    <xsl:attribute name="title">Failed to retrieve information.  Please check configuration.</xsl:attribute>
-                                        <xsl:text>N/A</xsl:text>
+                                        <xsl:attribute name="title"><xsl:value-of select= "$hpccStrings/st[@id='FailedToRetrieveInformation']"/></xsl:attribute>
+                                        <xsl:value-of select= "$hpccStrings/st[@id='NA']"/>
                                     </xsl:when>
                                     <xsl:otherwise>
                                     <xsl:value-of select="ComponentInfo/UpTime"/>
@@ -566,8 +575,11 @@
                                             </xsl:otherwise>
                                         </xsl:choose>
                      </xsl:variable>
-                     <xsl:variable name="caption">Processes
-                        <xsl:if test="$reqInfo/ApplyProcessFilter=1"> Down</xsl:if>
+                     <xsl:variable name="caption">
+                        <xsl:choose>
+                           <xsl:when test="$reqInfo/ApplyProcessFilter=1"><xsl:value-of select= "$hpccStrings/st[@id='ProcessesDown']"/></xsl:when>
+                           <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='Processes']"/></xsl:otherwise>
+                        </xsl:choose>
                      </xsl:variable>
                     <xsl:attribute name="title">
                       <xsl:value-of select="$caption"/>,<xsl:value-of select="$processNames"/>
@@ -689,12 +701,12 @@
         <xsl:attribute name="title">
           <xsl:value-of select="$memNode/Description"/>
           <xsl:text disable-output-escaping="yes"><![CDATA[ <br /> ]]></xsl:text>
-          <xsl:value-of select="$memNode/Available"/><xsl:text disable-output-escaping="yes"> MB Avail</xsl:text>
+          <xsl:value-of select="$memNode/Available"/><xsl:text disable-output-escaping="yes"> MB </xsl:text><xsl:value-of select="$hpccStrings/st[@id='Available']"/>
           <xsl:text disable-output-escaping="yes"><![CDATA[ <br /> ]]></xsl:text>
-          <xsl:value-of select="$memNode/Total"/> MB Total
+          <xsl:value-of select="$memNode/Total"/> MB <xsl:value-of select="$hpccStrings/st[@id='Total']"/>
         </xsl:attribute>
         <xsl:choose>
-          <xsl:when test="$memNode/Total=0">N/A</xsl:when>
+          <xsl:when test="$memNode/Total=0"><xsl:value-of select="$hpccStrings/st[@id='NA']"/></xsl:when>
           <xsl:otherwise>
             <xsl:if test="$threshold != 0">
               <xsl:choose>

+ 20 - 20
esp/eclwatch/ws_XSLT/dfu_filelist.xslt

@@ -19,6 +19,10 @@
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
     <xsl:output method="html"/>
     
+    <xsl:variable name="acceptLanguage" select="/FileListResponse/AcceptLanguage"/>
+    <xsl:variable name="localiseFile"><xsl:value-of select="concat('nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+    <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
+
     <!--note that /FileListResponse/Path is guaranteed to contain no backslashes and end with / -->
     <xsl:variable name="baseUrl">
         <xsl:for-each select="/FileListResponse">
@@ -50,6 +54,7 @@
                     var originalPath = '<xsl:value-of select="FileListResponse/Path"/>';
                     var os = <xsl:value-of select="/FileListResponse/OS"/>;
                     var dironly = <xsl:value-of select="/FileListResponse/DirectoryOnly"/>;
+                    var lostReferenceToParentWindowAlert = '<xsl:value-of select="$hpccStrings/st[@id='LostReferenceToParentWindow']"/>';
                     <xsl:text disable-output-escaping="yes"><![CDATA[
                     var nSelected = -1;
                     var nPrevClass = null;
@@ -84,7 +89,7 @@
                         }
                         else
                         {
-                            alert('Lost reference to parent window.  Please traverse the path again!');
+                            alert(lostReferenceToParentWindowAlert);
                             unselect();
                         }
                     }
@@ -120,15 +125,11 @@
     
     
     <xsl:template match="FileListResponse">
-        <b>
-            <xsl:choose>
-                <xsl:when test="string(Mask)!=''">
-                    <xsl:value-of select="Mask"/>
-                    <xsl:text> f</xsl:text>
-                </xsl:when>
-                <xsl:otherwise>F</xsl:otherwise>
-            </xsl:choose>
-            <xsl:text>iles under </xsl:text>
+        <xsl:if test="string(Mask)!=''">
+            <b><xsl:value-of select= "$hpccStrings/st[@id='Files']"/>: </b><xsl:value-of select="Mask"/>
+            <br/>
+        </xsl:if>
+        <b><xsl:value-of select= "$hpccStrings/st[@id='Folder']"/>: </b>
             <xsl:choose>
                 <xsl:when test="substring(Path, 2, 1)=':'">
                     <xsl:value-of select="translate(Path, '/', '\')"/>
@@ -137,9 +138,8 @@
                     <xsl:value-of select="Path"/>
                 </xsl:otherwise>
             </xsl:choose>
-            <xsl:text> on </xsl:text>
-            <xsl:value-of select="Netaddr"/>
-        </b>
+        <br/>
+        <b><xsl:value-of select= "$hpccStrings/st[@id='NetworkAddress']"/>: </b><xsl:value-of select="Netaddr"/>
         <p/>
         <form method="POST">
             <table class="sort-table" id="resultsTable" align="center" width="100%">
@@ -148,9 +148,9 @@
                         <xsl:if test="/FileListResponse/DirectoryOnly=1">
                             <th></th>
                         </xsl:if>
-                        <th>Name</th>
-                        <th>Size</th>
-                        <th>Date</th>
+                        <th><xsl:value-of select= "$hpccStrings/st[@id='Name']"/></th>
+                        <th><xsl:value-of select= "$hpccStrings/st[@id='Size']"/></th>
+                        <th><xsl:value-of select= "$hpccStrings/st[@id='Date']"/></th>
                     </tr>
                 </thead>                
                 <colgroup>
@@ -176,16 +176,16 @@
                     </xsl:when>
                     <xsl:otherwise>
                         <tr>
-                            <td colspan="3">No items.</td>
+                            <td colspan="3"><xsl:value-of select= "$hpccStrings/st[@id='NoItems']"/></td>
                         </tr>
                     </xsl:otherwise>
                 </xsl:choose>
             </table>
             <input type="hidden" id="selected"/>
             <p align="center">
-                <input type="button" value="Select" id="selectBtn" onclick="onOK('')" disabled="true"/>
+                <input type="button" value="{$hpccStrings/st[@id='Select']}" id="selectBtn" onclick="onOK('')" disabled="true"/>
                 <xsl:text disable-output-escaping='yes'>&amp;nbsp;&amp;nbsp;</xsl:text>
-                <input type="button" value="Cancel" onclick="window.close()"/>
+                <input type="button" value="{$hpccStrings/st[@id='Cancel']}" onclick="window.close()"/>
             </p>
         </form>
     </xsl:template>
@@ -231,7 +231,7 @@
             </xsl:attribute>
             <xsl:if test="/FileListResponse/DirectoryOnly=1">
                 <td>
-                    <input type="button" value="Select" id="selectBtn_i{position()}" onclick="onOK('{name}')"/>
+                    <input type="button" value="{$hpccStrings/st[@id='Select']}" id="selectBtn_i{position()}" onclick="onOK('{name}')"/>
                 </td>
             </xsl:if>
             <td align="left">

+ 32 - 34
esp/eclwatch/ws_XSLT/machines.xslt

@@ -39,6 +39,9 @@
     <xsl:variable name="enableSNMP" select="/TpMachineQueryResponse/EnableSNMP"/>
     <xsl:variable name="addProcessesToFilter" select="/TpMachineQueryResponse/PreflightProcessFilter"/>
     <xsl:variable name="numSlaveNodes" select="count(/TpMachineQueryResponse/TpMachines/TpMachine/Type[text()='ThorSlaveProcess'])"/>
+    <xsl:variable name="acceptLanguage" select="/TpMachineQueryResponse/AcceptLanguage"/>
+    <xsl:variable name="localiseFile"><xsl:value-of select="concat('nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+    <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
 
   <xsl:template match="/TpMachineQueryResponse">
         <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
@@ -156,6 +159,7 @@
                 <xsl:if test="$SwapNode">
                     var OldIP = '<xsl:value-of select="/TpMachineQueryResponse/OldIP"/>';
                     var Path = '<xsl:value-of select="/TpMachineQueryResponse/Path"/>';
+                    var confirmSwapStr = '<xsl:value-of select="$hpccStrings/st[@id='ConfirmSwap']"/>';
                     <xsl:text disable-output-escaping="yes"><![CDATA[
                     singleSelect = true;
                     function onSwapNode()          
@@ -166,7 +170,7 @@
                         var cbValue = checkbox.value;
                         var NewIP = cbValue.substring(0, cbValue.indexOf(':'));
                     
-                        if (confirm('Swap ' + OldIP + ' with ' + NewIP + ' ?'))
+                        if (confirm(confirmSwapStr + ' ' + OldIP + ' - ' + NewIP + '?'))
                         {
                             var s = "/WsTopology/TpSwapNode?Cluster=" + ClusterName;
                             s += "&OldIP=" + OldIP;
@@ -194,21 +198,21 @@
                 <input type="hidden" name="Addresses.itemcount" value=""/>
                 <h3>
                     <xsl:choose>
-                        <xsl:when test="$SwapNode">Select a spare node to swap</xsl:when>
-                        <xsl:when test="/TpMachineQueryResponse/Type='THORSPARENODES'">Thor Slaves</xsl:when>
-                        <xsl:when test="/TpMachineQueryResponse/Type='ALLSERVICES'">System Service Nodes</xsl:when>
-                        <xsl:when test="/TpMachineQueryResponse/Type='AVAILABLEMACHINES'">Available Nodes</xsl:when>
+                        <xsl:when test="$SwapNode"><xsl:value-of select= "$hpccStrings/st[@id='SelectASpareNodeToSwap']"/></xsl:when>
+                        <xsl:when test="/TpMachineQueryResponse/Type='THORSPARENODES'"><xsl:value-of select= "$hpccStrings/st[@id='ThorSlaves']"/></xsl:when>
+                        <xsl:when test="/TpMachineQueryResponse/Type='ALLSERVICES'"><xsl:value-of select= "$hpccStrings/st[@id='SystemServiceNodes']"/></xsl:when>
+                        <xsl:when test="/TpMachineQueryResponse/Type='AVAILABLEMACHINES'"><xsl:value-of select= "$hpccStrings/st[@id='AvailableNodes']"/></xsl:when>
                         <xsl:when test="$clusterName!=''">
                             <xsl:choose>
                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                             </xsl:choose>
-                            <xsl:text disable-output-escaping="yes">Cluster '</xsl:text>
+                            <xsl:value-of select= "$hpccStrings/st[@id='Cluster']"/><xsl:text disable-output-escaping="yes"> '</xsl:text>
                             <xsl:value-of select="$clusterName"/>
                             <xsl:text disable-output-escaping="yes">'</xsl:text>
                         </xsl:when>
-                        <xsl:otherwise>Nodes</xsl:otherwise>
+                        <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='Nodes']"/></xsl:otherwise>
                     </xsl:choose>
                 </h3>
                 <table class="sort-table" id="resultsTable">
@@ -229,7 +233,7 @@
                             <th>
                                 <xsl:if test="TpMachine[2] and not($SwapNode)">
                                     <xsl:attribute name="id">selectAll1</xsl:attribute>
-                                    <input type="checkbox" id="selectAll1" title="Select or deselect all machines" onclick="selectAll0(this)">
+                                    <input type="checkbox" id="selectAll1" title="{$hpccStrings/st[@id='SelectDeselectAllMachines']}" onclick="selectAll0(this)">
                                         <xsl:if test="not($SwapNode)">
                                             <xsl:attribute name="checked">true</xsl:attribute>
                                         </xsl:if>
@@ -238,15 +242,15 @@
                             </th>
                             <th align="center">Name</th>
                                 <xsl:if test="/TpMachineQueryResponse/HasThorSpareProcess/text()='1' and /TpMachineQueryResponse/Type='THORMACHINES'">
-                                    <th>Action</th>
+                                    <th><xsl:value-of select= "$hpccStrings/st[@id='Action']"/></th>
                                 </xsl:if>
-                            <th>Network Address</th>
-                            <th>Component</th>
+                            <th><xsl:value-of select= "$hpccStrings/st[@id='NetworkAddress']"/></th>
+                            <th><xsl:value-of select= "$hpccStrings/st[@id='Component']"/></th>
                             <xsl:if test="$numSlaveNodes > 0">
-                                <th>Slave Number</th>
+                                <th><xsl:value-of select= "$hpccStrings/st[@id='SlaveNumber']"/></th>
                             </xsl:if>
-                            <th>Domain</th>
-                            <th>Platform</th>
+                            <th><xsl:value-of select= "$hpccStrings/st[@id='Domain']"/></th>
+                            <th><xsl:value-of select= "$hpccStrings/st[@id='Platform']"/></th>
                         </tr>
                     </thead>
                     <tbody>
@@ -257,20 +261,20 @@
                     <table class="select-all">
                         <tr>
                             <th id="selectAll2">
-                                <input type="checkbox" id="selectAll2" title="Select or deselect all machines" onclick="selectAll0(this)">
+                                <input type="checkbox" id="selectAll2" title="{$hpccStrings/st[@id='SelectDeselectAllMachines']}" onclick="selectAll0(this)">
                   <xsl:if test="not($SwapNode)">
                     <xsl:attribute name="checked">true</xsl:attribute>
                   </xsl:if>
                 </input>
                             </th>
-                            <th align="left" colspan="6">Select All / None</th>
+                            <th align="left" colspan="6"><xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></th>
                         </tr>
                     </table>
                 </xsl:if>
                 <xsl:choose>
                     <xsl:when test="$SwapNode">
-                        <input type="submit" value="Submit" id="submitBtn" disabled="true"/>
-                        <input type="button" value="Cancel" name="Cancel" onclick="javascript:history.go(-1)"/>
+                        <input type="submit" value="{$hpccStrings/st[@id='Submit']}" id="submitBtn" disabled="true"/>
+                        <input type="button" value="{$hpccStrings/st[@id='Cancel']}" name="Cancel" onclick="javascript:history.go(-1)"/>
                     </xsl:when>
                     <xsl:when test="$ShowPreflightInfo">
                         <xsl:call-template name="ShowPreflightControls">
@@ -297,11 +301,11 @@
             </xsl:choose>
             <xsl:variable name="displayType">
                 <xsl:choose>
-                    <xsl:when test="Type='ThorMasterProcess'">Thor Master</xsl:when>
-                    <xsl:when test="Type='ThorSlaveProcess'">Thor Slave</xsl:when>
-                    <xsl:when test="Type='ThorSpareProcess'">Thor Spare</xsl:when>
-                    <xsl:when test="Type='RoxieServerProcess'">Roxie Server</xsl:when>
-                    <xsl:when test="Type='DropZone'">Drop Zone</xsl:when>
+                    <xsl:when test="Type='ThorMasterProcess'"><xsl:value-of select="$hpccStrings/st[@id='ThorMaster']"/></xsl:when>
+                    <xsl:when test="Type='ThorSlaveProcess'"><xsl:value-of select="$hpccStrings/st[@id='ThorSlave']"/></xsl:when>
+                    <xsl:when test="Type='ThorSpareProcess'"><xsl:value-of select="$hpccStrings/st[@id='ThorSpare']"/></xsl:when>
+                    <xsl:when test="Type='RoxieServerProcess'"><xsl:value-of select="$hpccStrings/st[@id='RoxieServer']"/></xsl:when>
+                    <xsl:when test="Type='DropZone'"><xsl:value-of select="$hpccStrings/st[@id='DropZone']"/></xsl:when>
                     <xsl:otherwise>
                         <xsl:value-of select="Type"/>
                     </xsl:otherwise>
@@ -330,13 +334,7 @@
                         <xsl:value-of select="concat(Netaddress, '%26CompType%3d', Type, '%26OsType%3d', OS, '%26Directory%3d')"/>
                     </xsl:variable>
                     <xsl:variable name="pageCaption">
-                        <!--xsl:text>&amp;esp_iframe_title=Log file for </xsl:text-->
-                        <xsl:text>esp_iframe_title=Log file for </xsl:text>
-                        <xsl:value-of select="concat($displayType, ' [', Netaddress, '] of ')"/>
-                        <xsl:variable name="clusterType" select="$clusterType"/>
-                        <xsl:text disable-output-escaping="yes"> cluster '</xsl:text>
-                        <xsl:value-of select="$clusterName"/>
-                        <xsl:text disable-output-escaping="yes">'</xsl:text>
+                        <xsl:value-of select="concat('esp_iframe_title=', $hpccStrings/st[@id='Cluster'], ' ', $clusterName, ' -- ', $displayType, ' [', Netaddress, '] -- ',  $hpccStrings/st[@id='LogFile'])"/>
                     </xsl:variable>
                     <xsl:attribute name="onclick">
                         <xsl:text disable-output-escaping="yes">return popup('</xsl:text>
@@ -351,7 +349,7 @@
                         <xsl:value-of select="OS"/>
                         <xsl:text>);</xsl:text>
                     </xsl:attribute>
-                    <img border="0" src="/esp/files_/img/base.gif" alt="View log file..." title="View log file..." width="19" height="16"/>
+                    <img border="0" src="/esp/files_/img/base.gif" alt="{$hpccStrings/st[@id='ViewLogFile']}" title="{$hpccStrings/st[@id='ViewLogFile']}" width="19" height="16"/>
                 </a>            
                 <xsl:value-of select="Name"/>
             </td>
@@ -359,8 +357,8 @@
         <td>
                   <xsl:if test="Type='ThorSlaveProcess'">
                       <a href="/WsTopology/TpMachineQuery?Type=THORSPARENODES&amp;Cluster={$clusterName}&amp;OldIP={Netaddress}&amp;Path={/TpMachineQueryResponse/Path}" 
-                          title="Swap node...">
-                          Swap Node
+                          title="{$hpccStrings/st[@id='SwapNode']}">
+                          <xsl:value-of select="$hpccStrings/st[@id='SwapNode']"/>
                       </a>
                   </xsl:if>
               </td>
@@ -386,7 +384,7 @@
                     <xsl:when test="OS=0">Windows</xsl:when>
                     <xsl:when test="OS=1">Solaris</xsl:when>
                     <xsl:when test="OS=2">Linux</xsl:when>
-                    <xsl:otherwise>Unknown</xsl:otherwise>
+                    <xsl:otherwise><xsl:value-of select="$hpccStrings/st[@id='Unknown']"/></xsl:otherwise>
                 </xsl:choose>
             </td>
         </tr>

+ 162 - 0
esp/eclwatch/ws_XSLT/nls/bs/hpcc.xml

@@ -0,0 +1,162 @@
+<hpcc>
+<strings>
+<st id='Action'>Action</st>
+<st id='Available'>Available</st>
+<st id='AdditionalProcessesToFilter'>Additional processes to filter</st>
+<st id='AutoRefreshEvery'>Auto Refresh every</st>
+<st id='AutoUpdateMetricsWhenViewColumnsChanging'>Auto update metrics when View Columns changing.</st>
+<st id='AvailableNodes'>Available Nodes</st>
+<st id='BrowserTimedOut'>Browser timed out due to a long time delay.</st>
+<st id='Busy'>Busy</st>
+<st id='Bytes'>bytes</st>
+<st id='Cancel'>Cancel</st>
+<st id='Cluster'>Cluster</st>
+<st id='ClusterProcess'>Cluster Process</st>
+<st id='Clusters'>Clusters</st>
+<st id='ClusterTopology'>Cluster Topology</st>
+<st id='Component'>Component</st>
+<st id='Computer'>Computer</st>
+<st id='ComputerUpTime'>Computer Up Time</st>
+<st id='Condition'>Condition</st>
+<st id='Configuration'>Configuration</st>
+<st id='ConfigurationFile'>Configuration file</st>
+<st id='ConfirmSwap'>Are you sure you want to swap two machines under</st>
+<st id='CPULoad'>CPU Load</st>
+<st id='Critical'>Critical</st>
+<st id='DaliServer'>Dali Server</st>
+<st id='DaliServers'>Dali Servers</st>
+<st id='Date'>Date</st>
+<st id='Description'>Description</st>
+<st id='DFUServers'>DFU Servers</st>
+<st id='Directory'>Directory</st>
+<st id='Domain'>Domain</st>
+<st id='Download'>Download</st>
+<st id='DropZone'>Drop Zone</st>
+<st id='DropZones'>Drop Zones</st>
+<st id='EarliestFirst'>EarliestFirst</st>
+<st id='ECLAgents'>ECL Agents</st>
+<st id='ECLAgentProcess'>ECL Agent Process</st>
+<st id='ECLCCServers'>ECL CC Servers</st>
+<st id='ECLSchedulers'>ECL Schedulers</st>
+<st id='ECLServers'>ECL Servers</st>
+<st id='ESPServers'>ESP Servers</st>
+<st id='FailedToRetrieveInformation'>Failed to retrieve information.  Please check configuration.</st>
+<st id='Fatal'>Fatal</st>
+<st id='Fetched'>Fetched</st>
+<st id='Files'>Files</st>
+<st id='FirstPage'>First page</st>
+<st id='FirstRowsNotDefined'>First Rows field not defined</st>
+<st id='Folder'>Folder</st>
+<st id='FTSlaves'>FT Slaves</st>
+<st id='GenesisServers'>Genesis Servers</st>
+<st id='GetProcessorInformation'>Get processor information</st>
+<st id='GetRoxieMetrics'>Get Roxie Metrics</st>
+<st id='GetSoftwareInformation'>Get software information</st>
+<st id='GetStorageInformation'>Get storage information</st>
+<st id='Home'>Home</st>
+<st id='Hours'>hours</st>
+<st id='Instance'>Instance</st>
+<st id='InvalidFirstRows'>Invalid data in First Rows field</st>
+<st id='InvalidLastHours'>Invalid data in Last Hours field</st>
+<st id='InvalidLastRows'>Invalid data in a Last Rows field</st>
+<st id='InvalidPageNumber'>Invalid data in page number field</st>
+<st id='InvalidTime'>Invalid data in a Time field</st>
+<st id='IPAddress'>IP Address</st>
+<st id='LastHoursNotDefined'>Last Hours field not defined</st>
+<st id='LastRowsNotDefined'>Last Rows field not defined</st>
+<st id='LatestFirst'>LatestFirst</st>
+<st id='LDAPServers'>LDAP Servers</st>
+<st id='LoadingPleaseWait'>Loading, please wait...</st>
+<st id='LocalFileSystemsOnly'>Local File Systems Only</st>
+<st id='Location'>Location</st>
+<st id='LogFile'>Log file</st>
+<st id='LogDirectory'>Log Directory</st>
+<st id='LostReferenceToParentWindow'>Lost reference to parent window.  Please traverse the path again!</st>
+<st id='MachineInfo'>Machine Information</st>
+<st id='Major'>Major</st>
+<st id='Mean'>Mean</st>
+<st id='Metrics'>Metrics</st>
+<st id='Minor'>Minor</st>
+<st id='Mins'>mins</st>
+<st id='MySQLServers'>MySQL Servers</st>
+<st id='NA'>N/A</st>
+<st id='Name'>Name</st>
+<st id='NetworkAddress'>Network Address</st>
+<st id='NextPage'>NextPage</st>
+<st id='NoClustersDefined'>No clusters defined.</st>
+<st id='Nodes'>Nodes</st>
+<st id='NoItems'>No items</st>
+<st id='NoMachinesSelected'>No machines selected!</st>
+<st id='Normal'>Normal</st>
+<st id='NoSystemServicesDefined'>No system services defined!</st>
+<st id='NoTargetClustersSelected'>No target clusters selected!</st>
+<st id='OrFirst'>or first</st>
+<st id='OrGoToPage'>or go to page</st>
+<st id='OrLast'>or last</st>
+<st id='OrLastPage'>or last page</st>
+<st id='OrTimeFrom'>or time from</st>
+<st id='Page'>page</st>
+<st id='PageNumberNotDefined'>page number field not defined</st>
+<st id='PhysicalMemory'>Physical Memory</st>
+<st id='Platform'>Platform</st>
+<st id='Port'>Port</st>
+<st id='PrevPage'>PrevPage</st>
+<st id='Processes'>Processes</st>
+<st id='ProcessesDown'>Processes Down</st>
+<st id='Protocol'>Protocol</st>
+<st id='Queue'>Queue</st>
+<st id='Ready'>Ready</st>
+<st id='Recycling'>Recycling</st>
+<st id='Refresh'>Refresh</st>
+<st id='Rows'>rows</st>
+<st id='RoxieServer'>Roxie Server</st>
+<st id='SashaServers'>Sasha Servers</st>
+<st id='SchedulerProcess'>Scheduler Process</st>
+<st id='SecurityString'>Security String</st>
+<st id='Select'>Select</st>
+<st id='SelectASpareNodeToSwap'>Select a spare node to swap</st>
+<st id='SelectAllOrNone'>Select All / None</st>
+<st id='SelectAllTargetClusters'>Select all target clusters</st>
+<st id='SelectDeselectAll'>Select or deselect all</st>
+<st id='SelectDeselectAllMachines'>Select or deselect all machines</st>
+<st id='SelectThisTargetCluster'>Select this target cluster</st>
+<st id='ServerProcess'>Server Process</st>
+<st id='ServiceName'>Service Name</st>
+<st id='ServiceType'>Service Type</st>
+<st id='ShowProcessesUsingFilter'>Show processes using filter</st>
+<st id='Size'>Size</st>
+<st id='SlaveNumber'>Slave Number</st>
+<st id='Starting'>Starting</st>
+<st id='State'>State</st>
+<st id='Stopping'>Stopping</st>
+<st id='Submit'>Submit</st>
+<st id='Suspended'>Suspended</st>
+<st id='Swap'>Swap</st>
+<st id='SwapNode'>Swap Node</st>
+<st id='SystemServers'>System Servers</st>
+<st id='SystemServiceNodes'>System Service Nodes</st>
+<st id='TargetClusters'>Target Clusters</st>
+<st id='TimeNotDefined'>Either Time From or To field not defined</st>
+<st id='ThisPageFromByte'>this page from byte</st>
+<st id='ThorMaster'>Thor Master</st>
+<st id='ThorSlave'>Thor Slave</st>
+<st id='ThorSlaves'>Thor Slaves</st>
+<st id='ThorSpare'>Thor Spare</st>
+<st id='To'>to</st>
+<st id='ToByte'>to byte</st>
+<st id='Total'>Total</st>
+<st id='TotalFileSize'>Total file size</st>
+<st id='UpdateMetricsNow'>Update Metrics Now</st>
+<st id='UpTime'>Up Time</st>
+<st id='Unknown'>Unknown</st>
+<st id='ViewConfigurationFile'>View Configuration File</st>
+<st id='ViewColumns'>View Columns</st>
+<st id='ViewDetails'>View Details</st>
+<st id='ViewingPage'>Viewing page</st>
+<st id='ViewLogFile'>View Log File</st>
+<st id='WarnIfAvailableDiskSpaceIsUnder'>Warn if available disk space is under</st>
+<st id='WarnIfAvailableMemoryIsUnder'>Warn if available memory is under</st>
+<st id='WarnIfCPUUsageIsOver'>Warn if CPU usage is over</st>
+<st id='Warning'>Warning</st>
+</strings>
+</hpcc>

+ 162 - 0
esp/eclwatch/ws_XSLT/nls/en/hpcc.xml

@@ -0,0 +1,162 @@
+<hpcc>
+<strings>
+<st id='Action'>Action</st>
+<st id='Available'>Available</st>
+<st id='AdditionalProcessesToFilter'>Additional processes to filter</st>
+<st id='AutoRefreshEvery'>Auto Refresh every</st>
+<st id='AutoUpdateMetricsWhenViewColumnsChanging'>Auto update metrics when View Columns changing.</st>
+<st id='AvailableNodes'>Available Nodes</st>
+<st id='BrowserTimedOut'>Browser timed out due to a long time delay.</st>
+<st id='Busy'>Busy</st>
+<st id='Bytes'>bytes</st>
+<st id='Cancel'>Cancel</st>
+<st id='Cluster'>Cluster</st>
+<st id='ClusterProcess'>Cluster Process</st>
+<st id='Clusters'>Clusters</st>
+<st id='ClusterTopology'>Cluster Topology</st>
+<st id='Component'>Component</st>
+<st id='Computer'>Computer</st>
+<st id='ComputerUpTime'>Computer Up Time</st>
+<st id='Condition'>Condition</st>
+<st id='Configuration'>Configuration</st>
+<st id='ConfigurationFile'>Configuration file</st>
+<st id='ConfirmSwap'>Are you sure you want to swap two machines under</st>
+<st id='CPULoad'>CPU Load</st>
+<st id='Critical'>Critical</st>
+<st id='DaliServer'>Dali Server</st>
+<st id='DaliServers'>Dali Servers</st>
+<st id='Date'>Date</st>
+<st id='Description'>Description</st>
+<st id='DFUServers'>DFU Servers</st>
+<st id='Directory'>Directory</st>
+<st id='Domain'>Domain</st>
+<st id='Download'>Download</st>
+<st id='DropZone'>Drop Zone</st>
+<st id='DropZones'>Drop Zones</st>
+<st id='EarliestFirst'>EarliestFirst</st>
+<st id='ECLAgents'>ECL Agents</st>
+<st id='ECLAgentProcess'>ECL Agent Process</st>
+<st id='ECLCCServers'>ECL CC Servers</st>
+<st id='ECLSchedulers'>ECL Schedulers</st>
+<st id='ECLServers'>ECL Servers</st>
+<st id='ESPServers'>ESP Servers</st>
+<st id='FailedToRetrieveInformation'>Failed to retrieve information.  Please check configuration.</st>
+<st id='Fatal'>Fatal</st>
+<st id='Fetched'>Fetched</st>
+<st id='Files'>Files</st>
+<st id='FirstPage'>First page</st>
+<st id='FirstRowsNotDefined'>First Rows field not defined</st>
+<st id='Folder'>Folder</st>
+<st id='FTSlaves'>FT Slaves</st>
+<st id='GenesisServers'>Genesis Servers</st>
+<st id='GetProcessorInformation'>Get processor information</st>
+<st id='GetRoxieMetrics'>Get Roxie Metrics</st>
+<st id='GetSoftwareInformation'>Get software information</st>
+<st id='GetStorageInformation'>Get storage information</st>
+<st id='Home'>Home</st>
+<st id='Hours'>hours</st>
+<st id='Instance'>Instance</st>
+<st id='InvalidFirstRows'>Invalid data in First Rows field</st>
+<st id='InvalidLastHours'>Invalid data in Last Hours field</st>
+<st id='InvalidLastRows'>Invalid data in a Last Rows field</st>
+<st id='InvalidPageNumber'>Invalid data in page number field</st>
+<st id='InvalidTime'>Invalid data in a Time field</st>
+<st id='IPAddress'>IP Address</st>
+<st id='LastHoursNotDefined'>Last Hours field not defined</st>
+<st id='LastRowsNotDefined'>Last Rows field not defined</st>
+<st id='LatestFirst'>LatestFirst</st>
+<st id='LDAPServers'>LDAP Servers</st>
+<st id='LoadingPleaseWait'>Loading, please wait...</st>
+<st id='LocalFileSystemsOnly'>Local File Systems Only</st>
+<st id='Location'>Location</st>
+<st id='LogFile'>Log file</st>
+<st id='LogDirectory'>Log Directory</st>
+<st id='LostReferenceToParentWindow'>Lost reference to parent window.  Please traverse the path again!</st>
+<st id='MachineInfo'>Machine Information</st>
+<st id='Major'>Major</st>
+<st id='Mean'>Mean</st>
+<st id='Metrics'>Metrics</st>
+<st id='Minor'>Minor</st>
+<st id='Mins'>mins</st>
+<st id='MySQLServers'>MySQL Servers</st>
+<st id='NA'>N/A</st>
+<st id='Name'>Name</st>
+<st id='NetworkAddress'>Network Address</st>
+<st id='NextPage'>NextPage</st>
+<st id='NoClustersDefined'>No clusters defined.</st>
+<st id='Nodes'>Nodes</st>
+<st id='NoItems'>No items</st>
+<st id='NoMachinesSelected'>No machines selected!</st>
+<st id='Normal'>Normal</st>
+<st id='NoSystemServicesDefined'>No system services defined!</st>
+<st id='NoTargetClustersSelected'>No target clusters selected!</st>
+<st id='OrFirst'>or first</st>
+<st id='OrGoToPage'>or go to page</st>
+<st id='OrLast'>or last</st>
+<st id='OrLastPage'>or last page</st>
+<st id='OrTimeFrom'>or time from</st>
+<st id='Page'>page</st>
+<st id='PageNumberNotDefined'>page number field not defined</st>
+<st id='PhysicalMemory'>Physical Memory</st>
+<st id='Platform'>Platform</st>
+<st id='Port'>Port</st>
+<st id='PrevPage'>PrevPage</st>
+<st id='Processes'>Processes</st>
+<st id='ProcessesDown'>Processes Down</st>
+<st id='Protocol'>Protocol</st>
+<st id='Queue'>Queue</st>
+<st id='Ready'>Ready</st>
+<st id='Recycling'>Recycling</st>
+<st id='Refresh'>Refresh</st>
+<st id='Rows'>rows</st>
+<st id='RoxieServer'>Roxie Server</st>
+<st id='SashaServers'>Sasha Servers</st>
+<st id='SchedulerProcess'>Scheduler Process</st>
+<st id='SecurityString'>Security String</st>
+<st id='Select'>Select</st>
+<st id='SelectASpareNodeToSwap'>Select a spare node to swap</st>
+<st id='SelectAllOrNone'>Select All / None</st>
+<st id='SelectAllTargetClusters'>Select all target clusters</st>
+<st id='SelectDeselectAll'>Select or deselect all</st>
+<st id='SelectDeselectAllMachines'>Select or deselect all machines</st>
+<st id='SelectThisTargetCluster'>Select this target cluster</st>
+<st id='ServerProcess'>Server Process</st>
+<st id='ServiceName'>Service Name</st>
+<st id='ServiceType'>Service Type</st>
+<st id='ShowProcessesUsingFilter'>Show processes using filter</st>
+<st id='Size'>Size</st>
+<st id='SlaveNumber'>Slave Number</st>
+<st id='Starting'>Starting</st>
+<st id='State'>State</st>
+<st id='Stopping'>Stopping</st>
+<st id='Submit'>Submit</st>
+<st id='Suspended'>Suspended</st>
+<st id='Swap'>Swap</st>
+<st id='SwapNode'>Swap Node</st>
+<st id='SystemServers'>System Servers</st>
+<st id='SystemServiceNodes'>System Service Nodes</st>
+<st id='TargetClusters'>Target Clusters</st>
+<st id='TimeNotDefined'>Either Time From or To field not defined</st>
+<st id='ThisPageFromByte'>this page from byte</st>
+<st id='ThorMaster'>Thor Master</st>
+<st id='ThorSlave'>Thor Slave</st>
+<st id='ThorSlaves'>Thor Slaves</st>
+<st id='ThorSpare'>Thor Spare</st>
+<st id='To'>to</st>
+<st id='ToByte'>to byte</st>
+<st id='Total'>Total</st>
+<st id='TotalFileSize'>Total file size</st>
+<st id='UpdateMetricsNow'>Update Metrics Now</st>
+<st id='UpTime'>Up Time</st>
+<st id='Unknown'>Unknown</st>
+<st id='ViewConfigurationFile'>View Configuration File</st>
+<st id='ViewColumns'>View Columns</st>
+<st id='ViewDetails'>View Details</st>
+<st id='ViewingPage'>Viewing page</st>
+<st id='ViewLogFile'>View Log File</st>
+<st id='WarnIfAvailableDiskSpaceIsUnder'>Warn if available disk space is under</st>
+<st id='WarnIfAvailableMemoryIsUnder'>Warn if available memory is under</st>
+<st id='WarnIfCPUUsageIsOver'>Warn if CPU usage is over</st>
+<st id='Warning'>Warning</st>
+</strings>
+</hpcc>

+ 162 - 0
esp/eclwatch/ws_XSLT/nls/es/hpcc.xml

@@ -0,0 +1,162 @@
+<hpcc>
+<strings>
+<st id='Action'>Action</st>
+<st id='Available'>Available</st>
+<st id='AdditionalProcessesToFilter'>Additional processes to filter</st>
+<st id='AutoRefreshEvery'>Auto Refresh every</st>
+<st id='AutoUpdateMetricsWhenViewColumnsChanging'>Auto update metrics when View Columns changing.</st>
+<st id='AvailableNodes'>Available Nodes</st>
+<st id='BrowserTimedOut'>Browser timed out due to a long time delay.</st>
+<st id='Busy'>Busy</st>
+<st id='Bytes'>bytes</st>
+<st id='Cancel'>Cancel</st>
+<st id='Cluster'>Cluster</st>
+<st id='ClusterProcess'>Cluster Process</st>
+<st id='Clusters'>Clusters</st>
+<st id='ClusterTopology'>Cluster Topology</st>
+<st id='Component'>Component</st>
+<st id='Computer'>Computer</st>
+<st id='ComputerUpTime'>Computer Up Time</st>
+<st id='Condition'>Condition</st>
+<st id='Configuration'>Configuration</st>
+<st id='ConfigurationFile'>Configuration file</st>
+<st id='ConfirmSwap'>Are you sure you want to swap two machines under</st>
+<st id='CPULoad'>CPU Load</st>
+<st id='Critical'>Critical</st>
+<st id='DaliServer'>Dali Server</st>
+<st id='DaliServers'>Dali Servers</st>
+<st id='Date'>Date</st>
+<st id='Description'>Description</st>
+<st id='DFUServers'>DFU Servers</st>
+<st id='Directory'>Directory</st>
+<st id='Domain'>Domain</st>
+<st id='Download'>Download</st>
+<st id='DropZone'>Drop Zone</st>
+<st id='DropZones'>Drop Zones</st>
+<st id='EarliestFirst'>EarliestFirst</st>
+<st id='ECLAgents'>ECL Agents</st>
+<st id='ECLAgentProcess'>ECL Agent Process</st>
+<st id='ECLCCServers'>ECL CC Servers</st>
+<st id='ECLSchedulers'>ECL Schedulers</st>
+<st id='ECLServers'>ECL Servers</st>
+<st id='ESPServers'>ESP Servers</st>
+<st id='FailedToRetrieveInformation'>Failed to retrieve information.  Please check configuration.</st>
+<st id='Fatal'>Fatal</st>
+<st id='Fetched'>Fetched</st>
+<st id='Files'>Files</st>
+<st id='FirstPage'>First page</st>
+<st id='FirstRowsNotDefined'>First Rows field not defined</st>
+<st id='Folder'>Folder</st>
+<st id='FTSlaves'>FT Slaves</st>
+<st id='GenesisServers'>Genesis Servers</st>
+<st id='GetProcessorInformation'>Get processor information</st>
+<st id='GetRoxieMetrics'>Get Roxie Metrics</st>
+<st id='GetSoftwareInformation'>Get software information</st>
+<st id='GetStorageInformation'>Get storage information</st>
+<st id='Home'>Home</st>
+<st id='Hours'>hours</st>
+<st id='Instance'>Instance</st>
+<st id='InvalidFirstRows'>Invalid data in First Rows field</st>
+<st id='InvalidLastHours'>Invalid data in Last Hours field</st>
+<st id='InvalidLastRows'>Invalid data in a Last Rows field</st>
+<st id='InvalidPageNumber'>Invalid data in page number field</st>
+<st id='InvalidTime'>Invalid data in a Time field</st>
+<st id='IPAddress'>IP Address</st>
+<st id='LastHoursNotDefined'>Last Hours field not defined</st>
+<st id='LastRowsNotDefined'>Last Rows field not defined</st>
+<st id='LatestFirst'>LatestFirst</st>
+<st id='LDAPServers'>LDAP Servers</st>
+<st id='LoadingPleaseWait'>Loading, please wait...</st>
+<st id='LocalFileSystemsOnly'>Local File Systems Only</st>
+<st id='Location'>Location</st>
+<st id='LogFile'>Log file</st>
+<st id='LogDirectory'>Log Directory</st>
+<st id='LostReferenceToParentWindow'>Lost reference to parent window.  Please traverse the path again!</st>
+<st id='MachineInfo'>Machine Information</st>
+<st id='Major'>Major</st>
+<st id='Mean'>Mean</st>
+<st id='Metrics'>Metrics</st>
+<st id='Minor'>Minor</st>
+<st id='Mins'>mins</st>
+<st id='MySQLServers'>MySQL Servers</st>
+<st id='NA'>N/A</st>
+<st id='Name'>Name</st>
+<st id='NetworkAddress'>Network Address</st>
+<st id='NextPage'>NextPage</st>
+<st id='NoClustersDefined'>No clusters defined.</st>
+<st id='Nodes'>Nodes</st>
+<st id='NoItems'>No items</st>
+<st id='NoMachinesSelected'>No machines selected!</st>
+<st id='Normal'>Normal</st>
+<st id='NoSystemServicesDefined'>No system services defined!</st>
+<st id='NoTargetClustersSelected'>No target clusters selected!</st>
+<st id='OrFirst'>or first</st>
+<st id='OrGoToPage'>or go to page</st>
+<st id='OrLast'>or last</st>
+<st id='OrLastPage'>or last page</st>
+<st id='OrTimeFrom'>or time from</st>
+<st id='Page'>page</st>
+<st id='PageNumberNotDefined'>page number field not defined</st>
+<st id='PhysicalMemory'>Physical Memory</st>
+<st id='Platform'>Platform</st>
+<st id='Port'>Port</st>
+<st id='PrevPage'>PrevPage</st>
+<st id='Processes'>Processes</st>
+<st id='ProcessesDown'>Processes Down</st>
+<st id='Protocol'>Protocol</st>
+<st id='Queue'>Queue</st>
+<st id='Ready'>Ready</st>
+<st id='Recycling'>Recycling</st>
+<st id='Refresh'>Refresh</st>
+<st id='Rows'>rows</st>
+<st id='RoxieServer'>Roxie Server</st>
+<st id='SashaServers'>Sasha Servers</st>
+<st id='SchedulerProcess'>Scheduler Process</st>
+<st id='SecurityString'>Security String</st>
+<st id='Select'>Select</st>
+<st id='SelectASpareNodeToSwap'>Select a spare node to swap</st>
+<st id='SelectAllOrNone'>Select All / None</st>
+<st id='SelectAllTargetClusters'>Select all target clusters</st>
+<st id='SelectDeselectAll'>Select or deselect all</st>
+<st id='SelectDeselectAllMachines'>Select or deselect all machines</st>
+<st id='SelectThisTargetCluster'>Select this target cluster</st>
+<st id='ServerProcess'>Server Process</st>
+<st id='ServiceName'>Service Name</st>
+<st id='ServiceType'>Service Type</st>
+<st id='ShowProcessesUsingFilter'>Show processes using filter</st>
+<st id='Size'>Size</st>
+<st id='SlaveNumber'>Slave Number</st>
+<st id='Starting'>Starting</st>
+<st id='State'>State</st>
+<st id='Stopping'>Stopping</st>
+<st id='Submit'>Submit</st>
+<st id='Suspended'>Suspended</st>
+<st id='Swap'>Swap</st>
+<st id='SwapNode'>Swap Node</st>
+<st id='SystemServers'>System Servers</st>
+<st id='SystemServiceNodes'>System Service Nodes</st>
+<st id='TargetClusters'>Target Clusters</st>
+<st id='TimeNotDefined'>Either Time From or To field not defined</st>
+<st id='ThisPageFromByte'>this page from byte</st>
+<st id='ThorMaster'>Thor Master</st>
+<st id='ThorSlave'>Thor Slave</st>
+<st id='ThorSlaves'>Thor Slaves</st>
+<st id='ThorSpare'>Thor Spare</st>
+<st id='To'>to</st>
+<st id='ToByte'>to byte</st>
+<st id='Total'>Total</st>
+<st id='TotalFileSize'>Total file size</st>
+<st id='UpdateMetricsNow'>Update Metrics Now</st>
+<st id='UpTime'>Up Time</st>
+<st id='Unknown'>Unknown</st>
+<st id='ViewConfigurationFile'>View Configuration File</st>
+<st id='ViewColumns'>View Columns</st>
+<st id='ViewDetails'>View Details</st>
+<st id='ViewingPage'>Viewing page</st>
+<st id='ViewLogFile'>View Log File</st>
+<st id='WarnIfAvailableDiskSpaceIsUnder'>Warn if available disk space is under</st>
+<st id='WarnIfAvailableMemoryIsUnder'>Warn if available memory is under</st>
+<st id='WarnIfCPUUsageIsOver'>Warn if CPU usage is over</st>
+<st id='Warning'>Warning</st>
+</strings>
+</hpcc>

+ 162 - 0
esp/eclwatch/ws_XSLT/nls/hr/hpcc.xml

@@ -0,0 +1,162 @@
+<hpcc>
+<strings>
+<st id='Action'>Action</st>
+<st id='Available'>Available</st>
+<st id='AdditionalProcessesToFilter'>Additional processes to filter</st>
+<st id='AutoRefreshEvery'>Auto Refresh every</st>
+<st id='AutoUpdateMetricsWhenViewColumnsChanging'>Auto update metrics when View Columns changing.</st>
+<st id='AvailableNodes'>Available Nodes</st>
+<st id='BrowserTimedOut'>Browser timed out due to a long time delay.</st>
+<st id='Busy'>Busy</st>
+<st id='Bytes'>bytes</st>
+<st id='Cancel'>Cancel</st>
+<st id='Cluster'>Cluster</st>
+<st id='ClusterProcess'>Cluster Process</st>
+<st id='Clusters'>Clusters</st>
+<st id='ClusterTopology'>Cluster Topology</st>
+<st id='Component'>Component</st>
+<st id='Computer'>Computer</st>
+<st id='ComputerUpTime'>Computer Up Time</st>
+<st id='Condition'>Condition</st>
+<st id='Configuration'>Configuration</st>
+<st id='ConfigurationFile'>Configuration file</st>
+<st id='ConfirmSwap'>Are you sure you want to swap two machines under</st>
+<st id='CPULoad'>CPU Load</st>
+<st id='Critical'>Critical</st>
+<st id='DaliServer'>Dali Server</st>
+<st id='DaliServers'>Dali Servers</st>
+<st id='Date'>Date</st>
+<st id='Description'>Description</st>
+<st id='DFUServers'>DFU Servers</st>
+<st id='Directory'>Directory</st>
+<st id='Domain'>Domain</st>
+<st id='Download'>Download</st>
+<st id='DropZone'>Drop Zone</st>
+<st id='DropZones'>Drop Zones</st>
+<st id='EarliestFirst'>EarliestFirst</st>
+<st id='ECLAgents'>ECL Agents</st>
+<st id='ECLAgentProcess'>ECL Agent Process</st>
+<st id='ECLCCServers'>ECL CC Servers</st>
+<st id='ECLSchedulers'>ECL Schedulers</st>
+<st id='ECLServers'>ECL Servers</st>
+<st id='ESPServers'>ESP Servers</st>
+<st id='FailedToRetrieveInformation'>Failed to retrieve information.  Please check configuration.</st>
+<st id='Fatal'>Fatal</st>
+<st id='Fetched'>Fetched</st>
+<st id='Files'>Files</st>
+<st id='FirstPage'>First page</st>
+<st id='FirstRowsNotDefined'>First Rows field not defined</st>
+<st id='Folder'>Folder</st>
+<st id='FTSlaves'>FT Slaves</st>
+<st id='GenesisServers'>Genesis Servers</st>
+<st id='GetProcessorInformation'>Get processor information</st>
+<st id='GetRoxieMetrics'>Get Roxie Metrics</st>
+<st id='GetSoftwareInformation'>Get software information</st>
+<st id='GetStorageInformation'>Get storage information</st>
+<st id='Home'>Home</st>
+<st id='Hours'>hours</st>
+<st id='Instance'>Instance</st>
+<st id='InvalidFirstRows'>Invalid data in First Rows field</st>
+<st id='InvalidLastHours'>Invalid data in Last Hours field</st>
+<st id='InvalidLastRows'>Invalid data in a Last Rows field</st>
+<st id='InvalidPageNumber'>Invalid data in page number field</st>
+<st id='InvalidTime'>Invalid data in a Time field</st>
+<st id='IPAddress'>IP Address</st>
+<st id='LastHoursNotDefined'>Last Hours field not defined</st>
+<st id='LastRowsNotDefined'>Last Rows field not defined</st>
+<st id='LatestFirst'>LatestFirst</st>
+<st id='LDAPServers'>LDAP Servers</st>
+<st id='LoadingPleaseWait'>Loading, please wait...</st>
+<st id='LocalFileSystemsOnly'>Local File Systems Only</st>
+<st id='Location'>Location</st>
+<st id='LogFile'>Log file</st>
+<st id='LogDirectory'>Log Directory</st>
+<st id='LostReferenceToParentWindow'>Lost reference to parent window.  Please traverse the path again!</st>
+<st id='MachineInfo'>Machine Information</st>
+<st id='Major'>Major</st>
+<st id='Mean'>Mean</st>
+<st id='Metrics'>Metrics</st>
+<st id='Minor'>Minor</st>
+<st id='Mins'>mins</st>
+<st id='MySQLServers'>MySQL Servers</st>
+<st id='NA'>N/A</st>
+<st id='Name'>Name</st>
+<st id='NetworkAddress'>Network Address</st>
+<st id='NextPage'>NextPage</st>
+<st id='NoClustersDefined'>No clusters defined.</st>
+<st id='Nodes'>Nodes</st>
+<st id='NoItems'>No items</st>
+<st id='NoMachinesSelected'>No machines selected!</st>
+<st id='Normal'>Normal</st>
+<st id='NoSystemServicesDefined'>No system services defined!</st>
+<st id='NoTargetClustersSelected'>No target clusters selected!</st>
+<st id='OrFirst'>or first</st>
+<st id='OrGoToPage'>or go to page</st>
+<st id='OrLast'>or last</st>
+<st id='OrLastPage'>or last page</st>
+<st id='OrTimeFrom'>or time from</st>
+<st id='Page'>page</st>
+<st id='PageNumberNotDefined'>page number field not defined</st>
+<st id='PhysicalMemory'>Physical Memory</st>
+<st id='Platform'>Platform</st>
+<st id='Port'>Port</st>
+<st id='PrevPage'>PrevPage</st>
+<st id='Processes'>Processes</st>
+<st id='ProcessesDown'>Processes Down</st>
+<st id='Protocol'>Protocol</st>
+<st id='Queue'>Queue</st>
+<st id='Ready'>Ready</st>
+<st id='Recycling'>Recycling</st>
+<st id='Refresh'>Refresh</st>
+<st id='Rows'>rows</st>
+<st id='RoxieServer'>Roxie Server</st>
+<st id='SashaServers'>Sasha Servers</st>
+<st id='SchedulerProcess'>Scheduler Process</st>
+<st id='SecurityString'>Security String</st>
+<st id='Select'>Select</st>
+<st id='SelectASpareNodeToSwap'>Select a spare node to swap</st>
+<st id='SelectAllOrNone'>Select All / None</st>
+<st id='SelectAllTargetClusters'>Select all target clusters</st>
+<st id='SelectDeselectAll'>Select or deselect all</st>
+<st id='SelectDeselectAllMachines'>Select or deselect all machines</st>
+<st id='SelectThisTargetCluster'>Select this target cluster</st>
+<st id='ServerProcess'>Server Process</st>
+<st id='ServiceName'>Service Name</st>
+<st id='ServiceType'>Service Type</st>
+<st id='ShowProcessesUsingFilter'>Show processes using filter</st>
+<st id='Size'>Size</st>
+<st id='SlaveNumber'>Slave Number</st>
+<st id='Starting'>Starting</st>
+<st id='State'>State</st>
+<st id='Stopping'>Stopping</st>
+<st id='Submit'>Submit</st>
+<st id='Suspended'>Suspended</st>
+<st id='Swap'>Swap</st>
+<st id='SwapNode'>Swap Node</st>
+<st id='SystemServers'>System Servers</st>
+<st id='SystemServiceNodes'>System Service Nodes</st>
+<st id='TargetClusters'>Target Clusters</st>
+<st id='TimeNotDefined'>Either Time From or To field not defined</st>
+<st id='ThisPageFromByte'>this page from byte</st>
+<st id='ThorMaster'>Thor Master</st>
+<st id='ThorSlave'>Thor Slave</st>
+<st id='ThorSlaves'>Thor Slaves</st>
+<st id='ThorSpare'>Thor Spare</st>
+<st id='To'>to</st>
+<st id='ToByte'>to byte</st>
+<st id='Total'>Total</st>
+<st id='TotalFileSize'>Total file size</st>
+<st id='UpdateMetricsNow'>Update Metrics Now</st>
+<st id='UpTime'>Up Time</st>
+<st id='Unknown'>Unknown</st>
+<st id='ViewConfigurationFile'>View Configuration File</st>
+<st id='ViewColumns'>View Columns</st>
+<st id='ViewDetails'>View Details</st>
+<st id='ViewingPage'>Viewing page</st>
+<st id='ViewLogFile'>View Log File</st>
+<st id='WarnIfAvailableDiskSpaceIsUnder'>Warn if available disk space is under</st>
+<st id='WarnIfAvailableMemoryIsUnder'>Warn if available memory is under</st>
+<st id='WarnIfCPUUsageIsOver'>Warn if CPU usage is over</st>
+<st id='Warning'>Warning</st>
+</strings>
+</hpcc>

+ 162 - 0
esp/eclwatch/ws_XSLT/nls/hu/hpcc.xml

@@ -0,0 +1,162 @@
+<hpcc>
+<strings>
+<st id='Action'>Action</st>
+<st id='Available'>Available</st>
+<st id='AdditionalProcessesToFilter'>Additional processes to filter</st>
+<st id='AutoRefreshEvery'>Auto Refresh every</st>
+<st id='AutoUpdateMetricsWhenViewColumnsChanging'>Auto update metrics when View Columns changing.</st>
+<st id='AvailableNodes'>Available Nodes</st>
+<st id='BrowserTimedOut'>Browser timed out due to a long time delay.</st>
+<st id='Busy'>Busy</st>
+<st id='Bytes'>bytes</st>
+<st id='Cancel'>Cancel</st>
+<st id='Cluster'>Cluster</st>
+<st id='ClusterProcess'>Cluster Process</st>
+<st id='Clusters'>Clusters</st>
+<st id='ClusterTopology'>Cluster Topology</st>
+<st id='Component'>Component</st>
+<st id='Computer'>Computer</st>
+<st id='ComputerUpTime'>Computer Up Time</st>
+<st id='Condition'>Condition</st>
+<st id='Configuration'>Configuration</st>
+<st id='ConfigurationFile'>Configuration file</st>
+<st id='ConfirmSwap'>Are you sure you want to swap two machines under</st>
+<st id='CPULoad'>CPU Load</st>
+<st id='Critical'>Critical</st>
+<st id='DaliServer'>Dali Server</st>
+<st id='DaliServers'>Dali Servers</st>
+<st id='Date'>Date</st>
+<st id='Description'>Description</st>
+<st id='DFUServers'>DFU Servers</st>
+<st id='Directory'>Directory</st>
+<st id='Domain'>Domain</st>
+<st id='Download'>Download</st>
+<st id='DropZone'>Drop Zone</st>
+<st id='DropZones'>Drop Zones</st>
+<st id='EarliestFirst'>EarliestFirst</st>
+<st id='ECLAgents'>ECL Agents</st>
+<st id='ECLAgentProcess'>ECL Agent Process</st>
+<st id='ECLCCServers'>ECL CC Servers</st>
+<st id='ECLSchedulers'>ECL Schedulers</st>
+<st id='ECLServers'>ECL Servers</st>
+<st id='ESPServers'>ESP Servers</st>
+<st id='FailedToRetrieveInformation'>Failed to retrieve information.  Please check configuration.</st>
+<st id='Fatal'>Fatal</st>
+<st id='Fetched'>Fetched</st>
+<st id='Files'>Files</st>
+<st id='FirstPage'>First page</st>
+<st id='FirstRowsNotDefined'>First Rows field not defined</st>
+<st id='Folder'>Folder</st>
+<st id='FTSlaves'>FT Slaves</st>
+<st id='GenesisServers'>Genesis Servers</st>
+<st id='GetProcessorInformation'>Get processor information</st>
+<st id='GetRoxieMetrics'>Get Roxie Metrics</st>
+<st id='GetSoftwareInformation'>Get software information</st>
+<st id='GetStorageInformation'>Get storage information</st>
+<st id='Home'>Home</st>
+<st id='Hours'>hours</st>
+<st id='Instance'>Instance</st>
+<st id='InvalidFirstRows'>Invalid data in First Rows field</st>
+<st id='InvalidLastHours'>Invalid data in Last Hours field</st>
+<st id='InvalidLastRows'>Invalid data in a Last Rows field</st>
+<st id='InvalidPageNumber'>Invalid data in page number field</st>
+<st id='InvalidTime'>Invalid data in a Time field</st>
+<st id='IPAddress'>IP Address</st>
+<st id='LastHoursNotDefined'>Last Hours field not defined</st>
+<st id='LastRowsNotDefined'>Last Rows field not defined</st>
+<st id='LatestFirst'>LatestFirst</st>
+<st id='LDAPServers'>LDAP Servers</st>
+<st id='LoadingPleaseWait'>Loading, please wait...</st>
+<st id='LocalFileSystemsOnly'>Local File Systems Only</st>
+<st id='Location'>Location</st>
+<st id='LogFile'>Log file</st>
+<st id='LogDirectory'>Log Directory</st>
+<st id='LostReferenceToParentWindow'>Lost reference to parent window.  Please traverse the path again!</st>
+<st id='MachineInfo'>Machine Information</st>
+<st id='Major'>Major</st>
+<st id='Mean'>Mean</st>
+<st id='Metrics'>Metrics</st>
+<st id='Minor'>Minor</st>
+<st id='Mins'>mins</st>
+<st id='MySQLServers'>MySQL Servers</st>
+<st id='NA'>N/A</st>
+<st id='Name'>Name</st>
+<st id='NetworkAddress'>Network Address</st>
+<st id='NextPage'>NextPage</st>
+<st id='NoClustersDefined'>No clusters defined.</st>
+<st id='Nodes'>Nodes</st>
+<st id='NoItems'>No items</st>
+<st id='NoMachinesSelected'>No machines selected!</st>
+<st id='Normal'>Normal</st>
+<st id='NoSystemServicesDefined'>No system services defined!</st>
+<st id='NoTargetClustersSelected'>No target clusters selected!</st>
+<st id='OrFirst'>or first</st>
+<st id='OrGoToPage'>or go to page</st>
+<st id='OrLast'>or last</st>
+<st id='OrLastPage'>or last page</st>
+<st id='OrTimeFrom'>or time from</st>
+<st id='Page'>page</st>
+<st id='PageNumberNotDefined'>page number field not defined</st>
+<st id='PhysicalMemory'>Physical Memory</st>
+<st id='Platform'>Platform</st>
+<st id='Port'>Port</st>
+<st id='PrevPage'>PrevPage</st>
+<st id='Processes'>Processes</st>
+<st id='ProcessesDown'>Processes Down</st>
+<st id='Protocol'>Protocol</st>
+<st id='Queue'>Queue</st>
+<st id='Ready'>Ready</st>
+<st id='Recycling'>Recycling</st>
+<st id='Refresh'>Refresh</st>
+<st id='Rows'>rows</st>
+<st id='RoxieServer'>Roxie Server</st>
+<st id='SashaServers'>Sasha Servers</st>
+<st id='SchedulerProcess'>Scheduler Process</st>
+<st id='SecurityString'>Security String</st>
+<st id='Select'>Select</st>
+<st id='SelectASpareNodeToSwap'>Select a spare node to swap</st>
+<st id='SelectAllOrNone'>Select All / None</st>
+<st id='SelectAllTargetClusters'>Select all target clusters</st>
+<st id='SelectDeselectAll'>Select or deselect all</st>
+<st id='SelectDeselectAllMachines'>Select or deselect all machines</st>
+<st id='SelectThisTargetCluster'>Select this target cluster</st>
+<st id='ServerProcess'>Server Process</st>
+<st id='ServiceName'>Service Name</st>
+<st id='ServiceType'>Service Type</st>
+<st id='ShowProcessesUsingFilter'>Show processes using filter</st>
+<st id='Size'>Size</st>
+<st id='SlaveNumber'>Slave Number</st>
+<st id='Starting'>Starting</st>
+<st id='State'>State</st>
+<st id='Stopping'>Stopping</st>
+<st id='Submit'>Submit</st>
+<st id='Suspended'>Suspended</st>
+<st id='Swap'>Swap</st>
+<st id='SwapNode'>Swap Node</st>
+<st id='SystemServers'>System Servers</st>
+<st id='SystemServiceNodes'>System Service Nodes</st>
+<st id='TargetClusters'>Target Clusters</st>
+<st id='TimeNotDefined'>Either Time From or To field not defined</st>
+<st id='ThisPageFromByte'>this page from byte</st>
+<st id='ThorMaster'>Thor Master</st>
+<st id='ThorSlave'>Thor Slave</st>
+<st id='ThorSlaves'>Thor Slaves</st>
+<st id='ThorSpare'>Thor Spare</st>
+<st id='To'>to</st>
+<st id='ToByte'>to byte</st>
+<st id='Total'>Total</st>
+<st id='TotalFileSize'>Total file size</st>
+<st id='UpdateMetricsNow'>Update Metrics Now</st>
+<st id='UpTime'>Up Time</st>
+<st id='Unknown'>Unknown</st>
+<st id='ViewConfigurationFile'>View Configuration File</st>
+<st id='ViewColumns'>View Columns</st>
+<st id='ViewDetails'>View Details</st>
+<st id='ViewingPage'>Viewing page</st>
+<st id='ViewLogFile'>View Log File</st>
+<st id='WarnIfAvailableDiskSpaceIsUnder'>Warn if available disk space is under</st>
+<st id='WarnIfAvailableMemoryIsUnder'>Warn if available memory is under</st>
+<st id='WarnIfCPUUsageIsOver'>Warn if CPU usage is over</st>
+<st id='Warning'>Warning</st>
+</strings>
+</hpcc>

+ 162 - 0
esp/eclwatch/ws_XSLT/nls/sr/hpcc.xml

@@ -0,0 +1,162 @@
+<hpcc>
+<strings>
+<st id='Action'>Action</st>
+<st id='Available'>Available</st>
+<st id='AdditionalProcessesToFilter'>Additional processes to filter</st>
+<st id='AutoRefreshEvery'>Auto Refresh every</st>
+<st id='AutoUpdateMetricsWhenViewColumnsChanging'>Auto update metrics when View Columns changing.</st>
+<st id='AvailableNodes'>Available Nodes</st>
+<st id='BrowserTimedOut'>Browser timed out due to a long time delay.</st>
+<st id='Busy'>Busy</st>
+<st id='Bytes'>bytes</st>
+<st id='Cancel'>Cancel</st>
+<st id='Cluster'>Cluster</st>
+<st id='ClusterProcess'>Cluster Process</st>
+<st id='Clusters'>Clusters</st>
+<st id='ClusterTopology'>Cluster Topology</st>
+<st id='Component'>Component</st>
+<st id='Computer'>Computer</st>
+<st id='ComputerUpTime'>Computer Up Time</st>
+<st id='Condition'>Condition</st>
+<st id='Configuration'>Configuration</st>
+<st id='ConfigurationFile'>Configuration file</st>
+<st id='ConfirmSwap'>Are you sure you want to swap two machines under</st>
+<st id='CPULoad'>CPU Load</st>
+<st id='Critical'>Critical</st>
+<st id='DaliServer'>Dali Server</st>
+<st id='DaliServers'>Dali Servers</st>
+<st id='Date'>Date</st>
+<st id='Description'>Description</st>
+<st id='DFUServers'>DFU Servers</st>
+<st id='Directory'>Directory</st>
+<st id='Domain'>Domain</st>
+<st id='Download'>Download</st>
+<st id='DropZone'>Drop Zone</st>
+<st id='DropZones'>Drop Zones</st>
+<st id='EarliestFirst'>EarliestFirst</st>
+<st id='ECLAgents'>ECL Agents</st>
+<st id='ECLAgentProcess'>ECL Agent Process</st>
+<st id='ECLCCServers'>ECL CC Servers</st>
+<st id='ECLSchedulers'>ECL Schedulers</st>
+<st id='ECLServers'>ECL Servers</st>
+<st id='ESPServers'>ESP Servers</st>
+<st id='FailedToRetrieveInformation'>Failed to retrieve information.  Please check configuration.</st>
+<st id='Fatal'>Fatal</st>
+<st id='Fetched'>Fetched</st>
+<st id='Files'>Files</st>
+<st id='FirstPage'>First page</st>
+<st id='FirstRowsNotDefined'>First Rows field not defined</st>
+<st id='Folder'>Folder</st>
+<st id='FTSlaves'>FT Slaves</st>
+<st id='GenesisServers'>Genesis Servers</st>
+<st id='GetProcessorInformation'>Get processor information</st>
+<st id='GetRoxieMetrics'>Get Roxie Metrics</st>
+<st id='GetSoftwareInformation'>Get software information</st>
+<st id='GetStorageInformation'>Get storage information</st>
+<st id='Home'>Home</st>
+<st id='Hours'>hours</st>
+<st id='Instance'>Instance</st>
+<st id='InvalidFirstRows'>Invalid data in First Rows field</st>
+<st id='InvalidLastHours'>Invalid data in Last Hours field</st>
+<st id='InvalidLastRows'>Invalid data in a Last Rows field</st>
+<st id='InvalidPageNumber'>Invalid data in page number field</st>
+<st id='InvalidTime'>Invalid data in a Time field</st>
+<st id='IPAddress'>IP Address</st>
+<st id='LastHoursNotDefined'>Last Hours field not defined</st>
+<st id='LastRowsNotDefined'>Last Rows field not defined</st>
+<st id='LatestFirst'>LatestFirst</st>
+<st id='LDAPServers'>LDAP Servers</st>
+<st id='LoadingPleaseWait'>Loading, please wait...</st>
+<st id='LocalFileSystemsOnly'>Local File Systems Only</st>
+<st id='Location'>Location</st>
+<st id='LogFile'>Log file</st>
+<st id='LogDirectory'>Log Directory</st>
+<st id='LostReferenceToParentWindow'>Lost reference to parent window.  Please traverse the path again!</st>
+<st id='MachineInfo'>Machine Information</st>
+<st id='Major'>Major</st>
+<st id='Mean'>Mean</st>
+<st id='Metrics'>Metrics</st>
+<st id='Minor'>Minor</st>
+<st id='Mins'>mins</st>
+<st id='MySQLServers'>MySQL Servers</st>
+<st id='NA'>N/A</st>
+<st id='Name'>Name</st>
+<st id='NetworkAddress'>Network Address</st>
+<st id='NextPage'>NextPage</st>
+<st id='NoClustersDefined'>No clusters defined.</st>
+<st id='Nodes'>Nodes</st>
+<st id='NoItems'>No items</st>
+<st id='NoMachinesSelected'>No machines selected!</st>
+<st id='Normal'>Normal</st>
+<st id='NoSystemServicesDefined'>No system services defined!</st>
+<st id='NoTargetClustersSelected'>No target clusters selected!</st>
+<st id='OrFirst'>or first</st>
+<st id='OrGoToPage'>or go to page</st>
+<st id='OrLast'>or last</st>
+<st id='OrLastPage'>or last page</st>
+<st id='OrTimeFrom'>or time from</st>
+<st id='Page'>page</st>
+<st id='PageNumberNotDefined'>page number field not defined</st>
+<st id='PhysicalMemory'>Physical Memory</st>
+<st id='Platform'>Platform</st>
+<st id='Port'>Port</st>
+<st id='PrevPage'>PrevPage</st>
+<st id='Processes'>Processes</st>
+<st id='ProcessesDown'>Processes Down</st>
+<st id='Protocol'>Protocol</st>
+<st id='Queue'>Queue</st>
+<st id='Ready'>Ready</st>
+<st id='Recycling'>Recycling</st>
+<st id='Refresh'>Refresh</st>
+<st id='Rows'>rows</st>
+<st id='RoxieServer'>Roxie Server</st>
+<st id='SashaServers'>Sasha Servers</st>
+<st id='SchedulerProcess'>Scheduler Process</st>
+<st id='SecurityString'>Security String</st>
+<st id='Select'>Select</st>
+<st id='SelectASpareNodeToSwap'>Select a spare node to swap</st>
+<st id='SelectAllOrNone'>Select All / None</st>
+<st id='SelectAllTargetClusters'>Select all target clusters</st>
+<st id='SelectDeselectAll'>Select or deselect all</st>
+<st id='SelectDeselectAllMachines'>Select or deselect all machines</st>
+<st id='SelectThisTargetCluster'>Select this target cluster</st>
+<st id='ServerProcess'>Server Process</st>
+<st id='ServiceName'>Service Name</st>
+<st id='ServiceType'>Service Type</st>
+<st id='ShowProcessesUsingFilter'>Show processes using filter</st>
+<st id='Size'>Size</st>
+<st id='SlaveNumber'>Slave Number</st>
+<st id='Starting'>Starting</st>
+<st id='State'>State</st>
+<st id='Stopping'>Stopping</st>
+<st id='Submit'>Submit</st>
+<st id='Suspended'>Suspended</st>
+<st id='Swap'>Swap</st>
+<st id='SwapNode'>Swap Node</st>
+<st id='SystemServers'>System Servers</st>
+<st id='SystemServiceNodes'>System Service Nodes</st>
+<st id='TargetClusters'>Target Clusters</st>
+<st id='TimeNotDefined'>Either Time From or To field not defined</st>
+<st id='ThisPageFromByte'>this page from byte</st>
+<st id='ThorMaster'>Thor Master</st>
+<st id='ThorSlave'>Thor Slave</st>
+<st id='ThorSlaves'>Thor Slaves</st>
+<st id='ThorSpare'>Thor Spare</st>
+<st id='To'>to</st>
+<st id='ToByte'>to byte</st>
+<st id='Total'>Total</st>
+<st id='TotalFileSize'>Total file size</st>
+<st id='UpdateMetricsNow'>Update Metrics Now</st>
+<st id='UpTime'>Up Time</st>
+<st id='Unknown'>Unknown</st>
+<st id='ViewConfigurationFile'>View Configuration File</st>
+<st id='ViewColumns'>View Columns</st>
+<st id='ViewDetails'>View Details</st>
+<st id='ViewingPage'>Viewing page</st>
+<st id='ViewLogFile'>View Log File</st>
+<st id='WarnIfAvailableDiskSpaceIsUnder'>Warn if available disk space is under</st>
+<st id='WarnIfAvailableMemoryIsUnder'>Warn if available memory is under</st>
+<st id='WarnIfCPUUsageIsOver'>Warn if CPU usage is over</st>
+<st id='Warning'>Warning</st>
+</strings>
+</hpcc>

+ 162 - 0
esp/eclwatch/ws_XSLT/nls/zh/hpcc.xml

@@ -0,0 +1,162 @@
+<hpcc>
+<strings>
+<st id='Action'>Action</st>
+<st id='Available'>Available</st>
+<st id='AdditionalProcessesToFilter'>Additional processes to filter</st>
+<st id='AutoRefreshEvery'>Auto Refresh every</st>
+<st id='AutoUpdateMetricsWhenViewColumnsChanging'>Auto update metrics when View Columns changing.</st>
+<st id='AvailableNodes'>Available Nodes</st>
+<st id='BrowserTimedOut'>Browser timed out due to a long time delay.</st>
+<st id='Busy'>Busy</st>
+<st id='Bytes'>bytes</st>
+<st id='Cancel'>Cancel</st>
+<st id='Cluster'>Cluster</st>
+<st id='ClusterProcess'>Cluster Process</st>
+<st id='Clusters'>Clusters</st>
+<st id='ClusterTopology'>Cluster Topology</st>
+<st id='Component'>Component</st>
+<st id='Computer'>Computer</st>
+<st id='ComputerUpTime'>Computer Up Time</st>
+<st id='Condition'>Condition</st>
+<st id='Configuration'>Configuration</st>
+<st id='ConfigurationFile'>Configuration file</st>
+<st id='ConfirmSwap'>Are you sure you want to swap two machines under</st>
+<st id='CPULoad'>CPU Load</st>
+<st id='Critical'>Critical</st>
+<st id='DaliServer'>Dali Server</st>
+<st id='DaliServers'>Dali Servers</st>
+<st id='Date'>Date</st>
+<st id='Description'>Description</st>
+<st id='DFUServers'>DFU Servers</st>
+<st id='Directory'>Directory</st>
+<st id='Domain'>Domain</st>
+<st id='Download'>Download</st>
+<st id='DropZone'>Drop Zone</st>
+<st id='DropZones'>Drop Zones</st>
+<st id='EarliestFirst'>EarliestFirst</st>
+<st id='ECLAgents'>ECL Agents</st>
+<st id='ECLAgentProcess'>ECL Agent Process</st>
+<st id='ECLCCServers'>ECL CC Servers</st>
+<st id='ECLSchedulers'>ECL Schedulers</st>
+<st id='ECLServers'>ECL Servers</st>
+<st id='ESPServers'>ESP Servers</st>
+<st id='FailedToRetrieveInformation'>Failed to retrieve information.  Please check configuration.</st>
+<st id='Fatal'>Fatal</st>
+<st id='Fetched'>Fetched</st>
+<st id='Files'>Files</st>
+<st id='FirstPage'>First page</st>
+<st id='FirstRowsNotDefined'>First Rows field not defined</st>
+<st id='Folder'>Folder</st>
+<st id='FTSlaves'>FT Slaves</st>
+<st id='GenesisServers'>Genesis Servers</st>
+<st id='GetProcessorInformation'>Get processor information</st>
+<st id='GetRoxieMetrics'>Get Roxie Metrics</st>
+<st id='GetSoftwareInformation'>Get software information</st>
+<st id='GetStorageInformation'>Get storage information</st>
+<st id='Home'>Home</st>
+<st id='Hours'>hours</st>
+<st id='Instance'>Instance</st>
+<st id='InvalidFirstRows'>Invalid data in First Rows field</st>
+<st id='InvalidLastHours'>Invalid data in Last Hours field</st>
+<st id='InvalidLastRows'>Invalid data in a Last Rows field</st>
+<st id='InvalidPageNumber'>Invalid data in page number field</st>
+<st id='InvalidTime'>Invalid data in a Time field</st>
+<st id='IPAddress'>IP Address</st>
+<st id='LastHoursNotDefined'>Last Hours field not defined</st>
+<st id='LastRowsNotDefined'>Last Rows field not defined</st>
+<st id='LatestFirst'>LatestFirst</st>
+<st id='LDAPServers'>LDAP Servers</st>
+<st id='LoadingPleaseWait'>Loading, please wait...</st>
+<st id='LocalFileSystemsOnly'>Local File Systems Only</st>
+<st id='Location'>Location</st>
+<st id='LogFile'>Log file</st>
+<st id='LogDirectory'>Log Directory</st>
+<st id='LostReferenceToParentWindow'>Lost reference to parent window.  Please traverse the path again!</st>
+<st id='MachineInfo'>Machine Information</st>
+<st id='Major'>Major</st>
+<st id='Mean'>Mean</st>
+<st id='Metrics'>Metrics</st>
+<st id='Minor'>Minor</st>
+<st id='Mins'>mins</st>
+<st id='MySQLServers'>MySQL Servers</st>
+<st id='NA'>N/A</st>
+<st id='Name'>Name</st>
+<st id='NetworkAddress'>Network Address</st>
+<st id='NextPage'>NextPage</st>
+<st id='NoClustersDefined'>No clusters defined.</st>
+<st id='Nodes'>Nodes</st>
+<st id='NoItems'>No items</st>
+<st id='NoMachinesSelected'>No machines selected!</st>
+<st id='Normal'>Normal</st>
+<st id='NoSystemServicesDefined'>No system services defined!</st>
+<st id='NoTargetClustersSelected'>No target clusters selected!</st>
+<st id='OrFirst'>or first</st>
+<st id='OrGoToPage'>or go to page</st>
+<st id='OrLast'>or last</st>
+<st id='OrLastPage'>or last page</st>
+<st id='OrTimeFrom'>or time from</st>
+<st id='Page'>page</st>
+<st id='PageNumberNotDefined'>page number field not defined</st>
+<st id='PhysicalMemory'>Physical Memory</st>
+<st id='Platform'>Platform</st>
+<st id='Port'>Port</st>
+<st id='PrevPage'>PrevPage</st>
+<st id='Processes'>Processes</st>
+<st id='ProcessesDown'>Processes Down</st>
+<st id='Protocol'>Protocol</st>
+<st id='Queue'>Queue</st>
+<st id='Ready'>Ready</st>
+<st id='Recycling'>Recycling</st>
+<st id='Refresh'>Refresh</st>
+<st id='Rows'>rows</st>
+<st id='RoxieServer'>Roxie Server</st>
+<st id='SashaServers'>Sasha Servers</st>
+<st id='SchedulerProcess'>Scheduler Process</st>
+<st id='SecurityString'>Security String</st>
+<st id='Select'>Select</st>
+<st id='SelectASpareNodeToSwap'>Select a spare node to swap</st>
+<st id='SelectAllOrNone'>Select All / None</st>
+<st id='SelectAllTargetClusters'>Select all target clusters</st>
+<st id='SelectDeselectAll'>Select or deselect all</st>
+<st id='SelectDeselectAllMachines'>Select or deselect all machines</st>
+<st id='SelectThisTargetCluster'>Select this target cluster</st>
+<st id='ServerProcess'>Server Process</st>
+<st id='ServiceName'>Service Name</st>
+<st id='ServiceType'>Service Type</st>
+<st id='ShowProcessesUsingFilter'>Show processes using filter</st>
+<st id='Size'>Size</st>
+<st id='SlaveNumber'>Slave Number</st>
+<st id='Starting'>Starting</st>
+<st id='State'>State</st>
+<st id='Stopping'>Stopping</st>
+<st id='Submit'>Submit</st>
+<st id='Suspended'>Suspended</st>
+<st id='Swap'>Swap</st>
+<st id='SwapNode'>Swap Node</st>
+<st id='SystemServers'>System Servers</st>
+<st id='SystemServiceNodes'>System Service Nodes</st>
+<st id='TargetClusters'>Target Clusters</st>
+<st id='TimeNotDefined'>Either Time From or To field not defined</st>
+<st id='ThisPageFromByte'>this page from byte</st>
+<st id='ThorMaster'>Thor Master</st>
+<st id='ThorSlave'>Thor Slave</st>
+<st id='ThorSlaves'>Thor Slaves</st>
+<st id='ThorSpare'>Thor Spare</st>
+<st id='To'>to</st>
+<st id='ToByte'>to byte</st>
+<st id='Total'>Total</st>
+<st id='TotalFileSize'>Total file size</st>
+<st id='UpdateMetricsNow'>Update Metrics Now</st>
+<st id='UpTime'>Up Time</st>
+<st id='Unknown'>Unknown</st>
+<st id='ViewConfigurationFile'>View Configuration File</st>
+<st id='ViewColumns'>View Columns</st>
+<st id='ViewDetails'>View Details</st>
+<st id='ViewingPage'>Viewing page</st>
+<st id='ViewLogFile'>View Log File</st>
+<st id='WarnIfAvailableDiskSpaceIsUnder'>Warn if available disk space is under</st>
+<st id='WarnIfAvailableMemoryIsUnder'>Warn if available memory is under</st>
+<st id='WarnIfCPUUsageIsOver'>Warn if CPU usage is over</st>
+<st id='Warning'>Warning</st>
+</strings>
+</hpcc>

+ 45 - 67
esp/eclwatch/ws_XSLT/services.xslt

@@ -41,7 +41,9 @@
 <xsl:variable name="enableSNMP" select="/TpServiceQueryResponse/EnableSNMP"/>
 <xsl:variable name="addProcessesToFilter" select="/TpServiceQueryResponse/PreflightProcessFilter"/>
 <xsl:variable name="numFTSlaves" select="count(/TpServiceQueryResponse/ServiceList/TpFTSlaves/TpFTSlave/TpMachines/TpMachine)"/>
-
+<xsl:variable name="acceptLanguage" select="/TpServiceQueryResponse/AcceptLanguage"/>
+<xsl:variable name="localiseFile"><xsl:value-of select="concat('nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+<xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
 
   <xsl:template match="/TpServiceQueryResponse">
     <script type="text/javascript" language="javascript">
@@ -61,7 +63,7 @@
           <script type="text/javascript" src="/esp/files/scripts/espdefault.js">&#160;</script>
         </head>
         <body class="yui-skin-sam" onload="nof5();">
-                    <h3>No system services defined!</h3>
+                    <h3><xsl:value-of select="$hpccStrings/st[@id='NoSystemServicesDefined']"/></h3>
                 </body>
             </xsl:when>
             <xsl:otherwise>
@@ -203,7 +205,7 @@
     </head>
   <body class="yui-skin-sam" onload="nof5();onLoad()">
         <form id="listitems" action="/ws_machine/GetMachineInfo" method="post">
-            <h2>System Servers</h2>
+            <h2><xsl:value-of select="$hpccStrings/st[@id='SystemServers']"/></h2>
 
             <table id="resultsTable" class="sort-table" width="100%">
             <colgroup>
@@ -216,105 +218,98 @@
             </colgroup>
             <tr class="grey">
                 <th id="selectAll1" align="left" width="1%">
-                    <input type="checkbox" title="Select or deselect all machines" onclick="selectAll(this.checked)"/>
+                    <input type="checkbox" title="{$hpccStrings/st[@id='SelectDeselectAllMachines']}" onclick="selectAll(this.checked)"/>
                 </th>
-                <th width="20%">Name</th>
-                <th width="15%">Queue</th>
-                <th>Computer</th>
-                <th>Network Address</th>
-                <th>Directory</th>
+                <th width="20%"><xsl:value-of select="$hpccStrings/st[@id='Name']"/></th>
+                <th width="15%"><xsl:value-of select="$hpccStrings/st[@id='Queue']"/></th>
+                <th><xsl:value-of select="$hpccStrings/st[@id='Computer']"/></th>
+                <th><xsl:value-of select="$hpccStrings/st[@id='NetworkAddress']"/></th>
+                <th><xsl:value-of select="$hpccStrings/st[@id='Directory']"/></th>
             </tr>
 
             <input type="hidden" name="Addresses.itemcount" value=""/>
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'DALI Servers'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='DaliServers']"/>
                 <xsl:with-param name="nodes" select="TpDalis/TpDali"/>
                 <xsl:with-param name="compType" select="'DaliServerProcess'"/>
             </xsl:call-template>
 
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'DFU Servers'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='DFUServers']"/>
                 <xsl:with-param name="showQueue" select="1"/>
                 <xsl:with-param name="nodes" select="TpDfuServers/TpDfuServer"/>
                 <xsl:with-param name="compType" select="'DfuServerProcess'"/>
             </xsl:call-template>
             
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'DKC Slaves'"/>
-                <xsl:with-param name="showCheckbox" select="1"/>
-                <xsl:with-param name="nodes" select="TpDkcSlaves/TpDkcSlave"/>
-                <xsl:with-param name="checked" select="0"/>
-            </xsl:call-template>                    
-            
-            <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'Drop Zones'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='DropZones']"/>
                 <xsl:with-param name="showCheckbox" select="1"/>
                 <xsl:with-param name="nodes" select="TpDropZones/TpDropZone"/>
                 <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             
                         <xsl:call-template name="showMachines">
-                          <xsl:with-param name="caption" select="'ECL Agents'"/>
+                          <xsl:with-param name="caption" select="$hpccStrings/st[@id='ECLAgents']"/>
                           <xsl:with-param name="showAgentExec" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclAgents/TpEclAgent"/>
                           <xsl:with-param name="compType" select="'EclAgentProcess'"/>
                         </xsl:call-template>
 
                         <xsl:call-template name="showMachines">
-                          <xsl:with-param name="caption" select="'ECL Servers'"/>
+                          <xsl:with-param name="caption" select="$hpccStrings/st[@id='ECLServers']"/>
                           <xsl:with-param name="showQueue" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclServers/TpEclServer"/>
                           <xsl:with-param name="compType" select="'EclServerProcess'"/>
                         </xsl:call-template>
 
                         <xsl:call-template name="showMachines">
-                          <xsl:with-param name="caption" select="'ECL CC Servers'"/>
+                          <xsl:with-param name="caption" select="$hpccStrings/st[@id='ECLCCServers']"/>
                           <xsl:with-param name="showQueue" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclCCServers/TpEclServer"/>
                           <xsl:with-param name="compType" select="'EclCCServerProcess'"/>
                         </xsl:call-template>
 
                         <xsl:call-template name="showMachines">
-                          <xsl:with-param name="caption" select="'ECL Schedulers'"/>
+                          <xsl:with-param name="caption" select="$hpccStrings/st[@id='ECLSchedulers']"/>
                           <xsl:with-param name="showQueue" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclSchedulers/TpEclScheduler"/>
                           <xsl:with-param name="compType" select="'EclSchedulerProcess'"/>
                         </xsl:call-template>
 
                         <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'ESP Servers'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='ESPServers']"/>
                 <xsl:with-param name="showBindings" select="1"/>
                 <xsl:with-param name="nodes" select="TpEspServers/TpEspServer"/>
                 <xsl:with-param name="compType" select="'EspProcess'"/>
             </xsl:call-template>
             
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'FT Slaves'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='FTSlaves']"/>
                 <xsl:with-param name="nodes" select="TpFTSlaves/TpFTSlave"/>
                 <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'Genesis Servers'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='GenesisServers']"/>
                 <xsl:with-param name="nodes" select="TpGenesisServers/TpGenesisServer"/>
             </xsl:call-template>                    
             
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'LDAP Servers'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='LDAPServers']"/>
                 <xsl:with-param name="nodes" select="TpLdapServers/TpLdapServer"/>
                 <xsl:with-param name="showDirectory" select="0"/>
                 <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'MySQL Servers'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='MySQLServers']"/>
                 <xsl:with-param name="nodes" select="TpMySqlServers/TpMySqlServer"/>
                 <xsl:with-param name="showDirectory" select="0"/>
                     <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             
             <xsl:call-template name="showMachines">
-                <xsl:with-param name="caption" select="'Sasha Servers'"/>
+                <xsl:with-param name="caption" select="$hpccStrings/st[@id='SashaServers']"/>
                 <xsl:with-param name="nodes" select="TpSashaServers/TpSashaServer"/>
                 <xsl:with-param name="compType" select="'SashaServerProcess'"/>
             </xsl:call-template>
@@ -328,9 +323,9 @@
         <table cellpadding="0" width="100%">
             <tr>
                 <th id="selectAll2" width="1%" style="padding-left:4px">
-                    <input type="checkbox" title="Select or deselect all machines" onclick="selectAll(this.checked)"></input>
+                    <input type="checkbox" title="{$hpccStrings/st[@id='SelectDeselectAllMachines']}" onclick="selectAll(this.checked)"></input>
                 </th>
-                <th colspan="5" align="left">Select All / None</th>
+                <th colspan="5" align="left"><xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></th>
             </tr>
             <tr><td height="20"/></tr>
         </table>
@@ -371,7 +366,7 @@
             <th colspan="7">
                 <br/>
                 <xsl:choose>
-                    <xsl:when test="$caption='FT Slaves'">
+                    <xsl:when test="$caption=$hpccStrings/st[@id='FTSlaves']">
                         <a href="javascript:toggleComponent('FTSlave', false)">
                             <img id="FTSlaveExpLink" border="0" src="&filePathEntity;/img/folder.gif" align="middle"/>
                                 <xsl:value-of select="$caption"/>
@@ -393,7 +388,7 @@
                             <xsl:value-of select="concat('row_', $compName, '_', position())"/>
                         </xsl:attribute>
                     </xsl:if>
-                    <xsl:if test="$caption='FT Slaves'">
+                    <xsl:if test="$caption=$hpccStrings/st[@id='FTSlaves']">
                         <xsl:attribute name="id">
                             <xsl:value-of select="concat('row_FTSlave_', position())"/>
                         </xsl:attribute>
@@ -416,7 +411,7 @@
                                     <xsl:when test="$showQueue">
                                         <td width="54%">
                                                 <xsl:value-of select="../../Name"/>
-                                                <xsl:if test="count(../TpMachine) &gt; 1"> (instance <xsl:value-of select="position()"/>)</xsl:if>
+                                                <xsl:if test="count(../TpMachine) &gt; 1"> (<xsl:value-of select= "$hpccStrings/st[@id='Instance']"/> <xsl:value-of select="position()"/>)</xsl:if>
                                             </td>
                                         <td width="45%" align="center"><xsl:value-of select="../../Queue"/></td>
                                     </xsl:when>
@@ -427,7 +422,7 @@
                                                     <a href="javascript:toggleDetails('{../../Name}_{position()}')">
                                                         <img id="toggle_{../../Name}_{position()}" border="0" src="&filePathEntity;/img/folder.gif" align="middle"/>
                                                         <xsl:value-of select="../../Name"/>
-                                                        <xsl:if test="count(../TpMachine) &gt; 1"> (Instance <xsl:value-of select="position()"/>)</xsl:if>
+                                                        <xsl:if test="count(../TpMachine) &gt; 1"> (<xsl:value-of select= "$hpccStrings/st[@id='Instance']"/> <xsl:value-of select="position()"/>)</xsl:if>
                                                     </a>
                                                 </xsl:when>
                         <xsl:when test="$showAgentExec">
@@ -519,12 +514,7 @@
                                                         <xsl:text>%26Directory%3d</xsl:text>
                                                     </xsl:variable>
                                                     <xsl:variable name="pageCaption">
-                                                        <xsl:variable name="captionLen" select="string-length($caption)-1"/>
-                                                        <xsl:text>esp_iframe_title=Log file for </xsl:text>
-                                                        <xsl:value-of select="substring($caption, 1, $captionLen)"/>
-                                                        <xsl:text disable-output-escaping="yes"> '</xsl:text>
-                                                        <xsl:value-of select="../../Name"/>
-                                                        <xsl:text disable-output-escaping="yes">'</xsl:text>
+                                                        <xsl:value-of select="concat('esp_iframe_title=', $caption, ' ', ../../Name, ' -- ', $hpccStrings/st[@id='LogFile'])"/>
                                                     </xsl:variable>
                                                     <xsl:attribute name="href">
                                                         <xsl:if test="$compType!='EclAgentProcess'">
@@ -548,8 +538,7 @@
                                                         <xsl:value-of select="OS"/>
                                                         <xsl:text>);</xsl:text>
                                                     </xsl:attribute>
-                                                    <img border="0" src="&filePathEntity;/img/base.gif" alt="View log file"
-                                                        title="View log file" width="19" height="16"/>
+                                                    <img border="0" src="&filePathEntity;/img/base.gif" alt="{$hpccStrings/st[@id='ViewLogFile']}" title="{$hpccStrings/st[@id='ViewLogFile']}" width="19" height="16"/>
                                                 </a>
                                             </xsl:if>
                                         </td>
@@ -558,11 +547,7 @@
                                                 <xsl:when test="$compType!='' and ($compType!='EclAgentProcess' or OS=0)">
                           <xsl:variable name="captionLen" select="string-length($caption)-1"/>
                           <xsl:variable name="href0">
-                              <xsl:text disable-output-escaping="yes">/esp/iframe?esp_iframe_title=Configuration file for </xsl:text>
-                              <xsl:value-of select="substring($caption, 1, $captionLen)"/>
-                              <xsl:text> - </xsl:text>
-                              <xsl:value-of select="../../Name"/>
-                              <xsl:text></xsl:text>
+                              <xsl:value-of select="concat('/esp/iframe?esp_iframe_title=', $caption, ' ', ../../Name, ' -- ', $hpccStrings/st[@id='Configuration'])"/>
                               <xsl:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text>%26FileType%3dcfg%26Directory%3d</xsl:text>
@@ -571,9 +556,8 @@
                               <xsl:value-of select="$compType"/>
                               <xsl:text>%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
-                            </xsl:variable>
-                          <img onclick="getConfigXML('{$href0}')" border="0" src="/esp/files_/img/config.png" alt="View deployed configuration file"
-                            title="View deployed configuration file" width="14" height="14"/>
+                          </xsl:variable>
+                          <img onclick="getConfigXML('{$href0}')" border="0" src="/esp/files_/img/config.png" alt="{$hpccStrings/st[@id='ViewConfigurationFile']}" title="{$hpccStrings/st[@id='ViewConfigurationFile']}" width="14" height="14"/>
                         </xsl:when>
                                                 <xsl:otherwise>
                                                     <img border="0" src="/esp/files_/img/blank.png" width="14" height="14"/>
@@ -599,10 +583,10 @@
                                         <table class="blueline" cellspacing="0">
                                             <thead>
                                                 <tr>
-                                                    <th>Service Name</th>
-                                                    <th>Service Type</th>
-                                                    <th>Protocol</th>
-                                                    <th>Port</th>
+                                                    <th><xsl:value-of select="$hpccStrings/st[@id='ServiceName']"/></th>
+                                                    <th><xsl:value-of select="$hpccStrings/st[@id='ServiceType']"/></th>
+                                                    <th><xsl:value-of select="$hpccStrings/st[@id='Protocol']"/></th>
+                                                    <th><xsl:value-of select="$hpccStrings/st[@id='Port']"/></th>
                                                 </tr>
                                             </thead>
                                             <tbody>
@@ -689,10 +673,9 @@
                   <table class="blueline" cellspacing="0">
                     <thead>
                       <tr>
-                        <th>Component</th>
-                        <th>Dali Server</th>
-                        <!--th>WUQueueName</th-->
-                        <th>Configuration</th>
+                        <th><xsl:value-of select="$hpccStrings/st[@id='Component']"/></th>
+                        <th><xsl:value-of select="$hpccStrings/st[@id='DaliServer']"/></th>
+                        <th><xsl:value-of select="$hpccStrings/st[@id='Configuration']"/></th>
                       </tr>
                     </thead>
                     <tbody>
@@ -708,12 +691,7 @@
                         <td width="14">
                           <a>
                             <xsl:attribute name="href">
-                              <xsl:variable name="captionLen" select="string-length($caption)-1"/>
-                              <xsl:text disable-output-escaping="yes">/esp/iframe?esp_iframe_title=Configuration file for </xsl:text>
-                              <xsl:value-of select="substring($caption, 1, $captionLen)"/>
-                              <xsl:text disable-output-escaping="yes"> '</xsl:text>
-                              <xsl:value-of select="../../Name"/>
-                              <xsl:text disable-output-escaping="yes">'</xsl:text>
+                              <xsl:value-of select="concat('/esp/iframe?esp_iframe_title=', $caption, ' ', ../../Name, ' -- ', $hpccStrings/st[@id='Configuration'])"/>
                               <xsl:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text>%26FileType%3dcfg%26Directory%3d</xsl:text>
@@ -722,8 +700,8 @@
                               <xsl:text>%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
                             </xsl:attribute>
-                            <img border="0" src="/esp/files_/img/config.png" alt="View deployed configuration file"
-                              title="View deployed configuration file" width="14" height="14"/>
+                            <img border="0" src="/esp/files_/img/config.png" alt="{$hpccStrings/st[@id='ViewConfigurationFile']}"
+                              title="{$hpccStrings/st[@id='ViewConfigurationFile']}" width="14" height="14"/>
                           </a>
                         </td>
                       </tr>

+ 46 - 61
esp/eclwatch/ws_XSLT/targetclusters.xslt

@@ -44,9 +44,12 @@
   <xsl:variable name="showDetails" select="/TpTargetClusterQueryResponse/ShowDetails"/>
   <xsl:variable name="fromTargetClusterPage" select="1"/>
   <xsl:variable name="countTargetClusters" select="count(/TpTargetClusterQueryResponse/TpTargetClusters/TpTargetCluster)"/>
+  <xsl:variable name="acceptLanguage" select="/TpTargetClusterQueryResponse/AcceptLanguage"/>
+  <xsl:variable name="localiseFile"><xsl:value-of select="concat('nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+  <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
 
   <xsl:include href="&xsltPathEntity;/ws_machine/preflightControls.xslt"/>
-  
+
   <xsl:template match="TpTargetClusterQueryResponse">
         <html>
             <head>
@@ -231,7 +234,7 @@
         <xsl:call-template name="GenerateScriptForPreflightControls"/>
       </head>
             <body class="yui-skin-sam" onload="nof5();onLoad();">
-                <h3>Target Clusters:</h3>
+                <h3><xsl:value-of select="$hpccStrings/st[@id='TargetClusters']"/></h3>
                 <form id="listitems" action="/ws_machine/GetTargetClusterInfo" method="post">
                     <input type="hidden" name="TargetClusters.itemcount" value=""/>
                     <xsl:if test="TpTargetClusters/TpTargetCluster[2]">
@@ -239,9 +242,9 @@
                             <tr>
                                 <th id="selectAll" width="1%" style="padding-left:4px">
                                     <input type="checkbox" id="TargetClusters.All" name="TargetClusters.ALL"
-                                           title="Select all target clusters" onclick="return clickTCCheckbox('', '', this);"></input>
+                                           title="{$hpccStrings/st[@id='SelectAllTargetClusters']}" onclick="return clickTCCheckbox('', '', this);"></input>
                                 </th>
-                                <th colspan="5" align="left">Select All / None</th>
+                                <th colspan="5" align="left"><xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></th>
                             </tr>
                         </table>
                     </xsl:if>
@@ -256,9 +259,9 @@
                             <tr>
                                 <th id="selectAll2" width="1%" style="padding-left:4px">
                                     <input type="checkbox" id="TargetClusters.All2" name="TargetClusters.ALL2"
-                                           title="Select all target clusters" onclick="return clickTCCheckbox('', '', this);"></input>
+                                           title="{$hpccStrings/st[@id='SelectAllTargetClusters']}" onclick="return clickTCCheckbox('', '', this);"></input>
                                 </th>
-                                <th colspan="5" align="left">Select All / None</th>
+                                <th colspan="5" align="left"><xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></th>
                             </tr>
                             <tr>
                                 <td height="20"/>
@@ -290,16 +293,16 @@
 
     <xsl:template name="show-cluster">
         <xsl:param name="type"/>
-    <xsl:param name="name"/>
+        <xsl:param name="name"/>
         <table id="resultsTable" class="sort-table" width="100%">
             <tr class="grey">
                 <td valign="top" width="20">
           <input type="checkbox" id="TargetClusters.{count(preceding::TpTargetCluster)}" name="TargetClusters.{count(preceding::TpTargetCluster)}"
-                                value="{$type}:{$name}" title="Select this target cluster" onclick="return clickTCCheckbox('{$type}', '{$name}', this);"></input>
+                                value="{$type}:{$name}" title="{$hpccStrings/st[@id='SelectThisTargetCluster']}" onclick="return clickTCCheckbox('{$type}', '{$name}', this);"></input>
         </td>
         <td align="left" width="20">
           <a href="javascript:showDetails('{$type}', '{$name}');">
-            <img id="view_details_{$name}" border="0" src="&filePathEntity;/img/keyfile.png" alt="View details" title="View details" align="middle"/>
+            <img id="view_details_{$name}" border="0" src="&filePathEntity;/img/keyfile.png" alt="{$hpccStrings/st[@id='ViewDetails']}" title="{$hpccStrings/st[@id='ViewDetails']}" align="middle"/>
           </a>
         </td>
         <!--xsl:if test="type='RoxieCluster'">
@@ -336,12 +339,12 @@
                   </colgroup>
                   <tr bgcolor="#C0C0C0">
                     <th/>
-                    <th align="center">Name</th>
-                    <th align="center">Component</th>
-                    <th align="center">Computer</th>
-                    <th align="center">Platform</th>
-                    <th align="center">Network Address</th>
-                    <th align="center">Directory</th>
+                    <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Name']"/></th>
+                    <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Component']"/></th>
+                    <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Computer']"/></th>
+                    <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Platform']"/></th>
+                    <th align="center"><xsl:value-of select="$hpccStrings/st[@id='NetworkAddress']"/></th>
+                    <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Directory']"/></th>
                   </tr>
 
                   <xsl:if test="count(TpClusters/TpCluster)">
@@ -415,9 +418,9 @@
             </xsl:variable>
             <xsl:variable name="type4">
               <xsl:choose>
-                <xsl:when test="Type='RoxieCluster'">Roxie Cluster Process</xsl:when>
-                <xsl:when test="Type='ThorCluster'">Thor Cluster Process</xsl:when>
-                <xsl:when test="Type='HoleCluster'">Hole Cluster Process</xsl:when>
+                <xsl:when test="Type='RoxieCluster'">Roxie <xsl:value-of select="$hpccStrings/st[@id='ClusterProcess']"/></xsl:when>
+                <xsl:when test="Type='ThorCluster'">Thor <xsl:value-of select="$hpccStrings/st[@id='ClusterProcess']"/></xsl:when>
+                <xsl:when test="Type='HoleCluster'">Hole <xsl:value-of select="$hpccStrings/st[@id='ClusterProcess']"/></xsl:when>
               </xsl:choose>
             </xsl:variable>
             <xsl:variable name="type3" select="translate($type2, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
@@ -463,19 +466,17 @@
                   <xsl:when test="OS=0">Windows</xsl:when>
                   <xsl:when test="OS=2">Linux</xsl:when>
                   <xsl:when test="OS=1">Solaris</xsl:when>
-                  <xsl:otherwise>Unknown</xsl:otherwise>
+                  <xsl:otherwise><xsl:value-of select="$hpccStrings/st[@id='Unknown']"/></xsl:otherwise>
                 </xsl:choose>
               </td>
               <td/>
               <td>
                 <xsl:variable name="href0">
-                  <xsl:text disable-output-escaping="yes">/esp/iframe?esp_iframe_title=Configuration file for </xsl:text>
-                  <xsl:value-of select="concat($type2, ' cluster - ', Name)"/>
+                  <xsl:value-of select="concat('/esp/iframe?esp_iframe_title=', $type2, ' ', $hpccStrings/st[@id='Cluster'], ' ', Name, ' -- ', $hpccStrings/st[@id='Configuration'])"/>
                   <xsl:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fFileType%3dcfg%26CompType%3d</xsl:text>
                   <xsl:value-of select="concat($type2, 'Cluster%26CompName%3d', Name, '%26Directory%3d', $absolutePath, '%26OsType%3d', OS)"/>
                 </xsl:variable>
-                <img onclick="getConfigXML('{$href0}')" border="0" src="&filePathEntity;/img/config.png" alt="View configuration file..." 
-                  title="View configuration file..." width="14" height="14"/>
+                <img onclick="getConfigXML('{$href0}')" border="0" src="&filePathEntity;/img/config.png" alt="{$hpccStrings/st[@id='ViewConfigurationFile']}" title="{$hpccStrings/st[@id='ViewConfigurationFile']}" width="14" height="14"/>
                 <xsl:value-of select="Directory"/>
               </td>
             </tr>
@@ -504,14 +505,14 @@
                       </colgroup>
                       <thead>
                         <tr>
-                          <th align="center">Name</th>
-                          <th align="center">Component</th>
+                          <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Name']"/></th>
+                          <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Component']"/></th>
                           <xsl:if test="Type='ThorCluster' and HasThorSpareProcess/text()='1'">
-                            <th>Action</th>
+                            <th><xsl:value-of select="$hpccStrings/st[@id='Action']"/></th>
                           </xsl:if>
-                          <th align="center">Network Address</th>
-                          <th align="center">Domain</th>
-                          <th align="center">Platform</th>
+                          <th align="center"><xsl:value-of select="$hpccStrings/st[@id='NetworkAddress']"/></th>
+                          <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Domain']"/></th>
+                          <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Platform']"/></th>
                         </tr>
                       </thead>
                       <tbody>
@@ -536,10 +537,10 @@
               </xsl:variable>
               <xsl:variable name="type4">
                 <xsl:choose>
-                  <xsl:when test="$compType='EclCCServerProcess'">Ecl CC Server Process</xsl:when>
-                  <xsl:when test="$compType='EclServerProcess'">Ecl Server Process</xsl:when>
-                  <xsl:when test="$compType='EclAgentProcess'">Ecl Agent Process</xsl:when>
-                  <xsl:when test="$compType='EclSchedulerProcess'">Ecl Scheduler Process</xsl:when>
+                  <xsl:when test="$compType='EclCCServerProcess'">Ecl CC <xsl:value-of select="$hpccStrings/st[@id='ServerProcess']"/></xsl:when>
+                  <xsl:when test="$compType='EclServerProcess'">Ecl <xsl:value-of select="$hpccStrings/st[@id='ServerProcess']"/></xsl:when>
+                  <xsl:when test="$compType='EclAgentProcess'"><xsl:value-of select="$hpccStrings/st[@id='ECLAgentProcess']"/></xsl:when>
+                  <xsl:when test="$compType='EclSchedulerProcess'">Ecl <xsl:value-of select="$hpccStrings/st[@id='SchedulerProcess']"/></xsl:when>
                 </xsl:choose>
               </xsl:variable>              <xsl:variable name="compName" select="../../Name"/>
               <tr onmouseenter="this.bgColor = '#F0F0FF'">
@@ -599,7 +600,7 @@
                 <xsl:when test="OS=0">Windows</xsl:when>
                 <xsl:when test="OS=2">Linux</xsl:when>
                 <xsl:when test="OS=1">Solaris</xsl:when>
-                <xsl:otherwise>Unknown</xsl:otherwise>
+                <xsl:otherwise><xsl:value-of select="$hpccStrings/st[@id='Unknown']"/></xsl:otherwise>
               </xsl:choose>
             </td>
             <td align="center">
@@ -668,13 +669,7 @@
                               <xsl:text disable-output-escaping="yes">%26Directory%3d</xsl:text>
                             </xsl:variable>
                             <xsl:variable name="pageCaption">
-                              <xsl:variable name="captionLen" select="string-length($caption)-1"/>
-                              <!--xsl:text>&amp;esp_iframe_title=Log file for </xsl:text-->
-                              <xsl:text disable-output-escaping="yes">esp_iframe_title=Log file for </xsl:text>
-                              <xsl:value-of select="substring($caption, 1, $captionLen)"/>
-                              <xsl:text disable-output-escaping="yes"> '</xsl:text>
-                              <xsl:value-of select="../../Name"/>
-                              <xsl:text disable-output-escaping="yes">'</xsl:text>
+                              <xsl:value-of select="concat('esp_iframe_title=', $caption, ' ', ../../Name, ' -- ', $hpccStrings/st[@id='LogFile'])"/>
                             </xsl:variable>
                             <xsl:attribute name="href">
                               <xsl:if test="$compType!='EclAgentProcess'">
@@ -698,7 +693,7 @@
                               <xsl:value-of select="OS"/>
                               <xsl:text disable-output-escaping="yes">);</xsl:text>
                             </xsl:attribute>
-                            <img border="0" src="&filePathEntity;/img/base.gif" alt="View log file" title="View log file" width="19" height="16"/>
+                            <img border="0" src="&filePathEntity;/img/base.gif" alt="{$hpccStrings/st[@id='ViewLogFile']}" title="{$hpccStrings/st[@id='ViewLogFile']}" width="19" height="16"/>
                           </a>
                         </xsl:if>
                       </td>
@@ -707,11 +702,7 @@
                           <xsl:when test="$compType!='' and ($compType!='EclAgentProcess' or OS=0)">
                             <xsl:variable name="captionLen" select="string-length($caption)-1"/>
                             <xsl:variable name="href0">
-                              <xsl:text disable-output-escaping="yes">/esp/iframe?esp_iframe_title=Configuration file for </xsl:text>
-                              <xsl:value-of select="substring($caption, 1, $captionLen)"/>
-                              <xsl:text disable-output-escaping="yes"> - </xsl:text>
-                              <xsl:value-of select="../../Name"/>
-                              <xsl:text disable-output-escaping="yes"></xsl:text>
+                              <xsl:value-of select="concat('/esp/iframe?esp_iframe_title=', $caption, ' ', ../../Name, ' -- ', $hpccStrings/st[@id='Configuration'])"/>
                               <xsl:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text disable-output-escaping="yes">%26FileType%3dcfg%26Directory%3d</xsl:text>
@@ -721,8 +712,7 @@
                               <xsl:text disable-output-escaping="yes">%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
                             </xsl:variable>
-                            <img onclick="getConfigXML('{$href0}')" border="0" src="/esp/files_/img/config.png" alt="View deployed configuration file"
-                              title="View configuration file..." width="14" height="14"/>
+                            <img onclick="getConfigXML('{$href0}')" border="0" src="/esp/files_/img/config.png" alt="{$hpccStrings/st[@id='ViewConfigurationFile']}" title="{$hpccStrings/st[@id='ViewConfigurationFile']}" width="14" height="14"/>
                           </xsl:when>
                           <xsl:otherwise>
                             <img border="0" src="/esp/files_/img/blank.png" width="14" height="14"/>
@@ -786,10 +776,10 @@
                   <table class="blueline" border="2" frame="box" rules="groups">
                     <thead>
                       <tr>
-                        <th align="center">Component</th>
-                        <th align="center">Dali Server</th>
+                        <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Component']"/></th>
+                        <th align="center"><xsl:value-of select="$hpccStrings/st[@id='DaliServer']"/></th>
                         <!--th>WUQueueName</th-->
-                        <th align="center">Configuration</th>
+                        <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Configuration']"/></th>
                       </tr>
                     </thead>
                     <tbody>
@@ -802,12 +792,7 @@
                         <td>
                           <a>
                             <xsl:attribute name="href">
-                              <xsl:variable name="captionLen" select="string-length($caption)-1"/>
-                              <xsl:text disable-output-escaping="yes">/esp/iframe?esp_iframe_title=Configuration file for </xsl:text>
-                              <xsl:value-of select="substring($caption, 1, $captionLen)"/>
-                              <xsl:text disable-output-escaping="yes"> '</xsl:text>
-                              <xsl:value-of select="../../Name"/>
-                              <xsl:text disable-output-escaping="yes">'</xsl:text>
+                              <xsl:value-of select="concat('/esp/iframe?esp_iframe_title=', $caption, ' ', ../../Name, ' -- ', $hpccStrings/st[@id='Configuration'])"/>
                               <xsl:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text disable-output-escaping="yes">%26FileType%3dcfg%26Directory%3d</xsl:text>
@@ -816,8 +801,8 @@
                               <xsl:text disable-output-escaping="yes">%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
                             </xsl:attribute>
-                            <img border="0" src="/esp/files_/img/config.png" alt="View deployed configuration file"
-                              title="View configuration file..." width="14" height="14"/>
+                            <img border="0" src="/esp/files_/img/config.png" alt="{$hpccStrings/st[@id='ViewConfigurationFile']}"
+                              title="{$hpccStrings/st[@id='ViewConfigurationFile']}" width="14" height="14"/>
                           </a>
                           <xsl:value-of select="Directory"/>
                         </td>
@@ -901,7 +886,7 @@
             <xsl:when test="OS=0">Windows</xsl:when>
             <xsl:when test="OS=1">Solaris</xsl:when>
             <xsl:when test="OS=2">Linux</xsl:when>
-            <xsl:otherwise>Unknown</xsl:otherwise>
+            <xsl:otherwise><xsl:value-of select="$hpccStrings/st[@id='Unknown']"/></xsl:otherwise>
           </xsl:choose>
       </td>
     </tr>

+ 17 - 41
esp/eclwatch/ws_XSLT/topology.xslt

@@ -21,6 +21,9 @@
     
     <xsl:variable name="apos">'</xsl:variable>
   <xsl:variable name="enableSNMP" select="/TpClusterQueryResponse/EnableSNMP"/>
+  <xsl:variable name="acceptLanguage" select="/TpClusterQueryResponse/AcceptLanguage"/>
+  <xsl:variable name="localiseFile"><xsl:value-of select="concat('nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+  <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
 
   <xsl:template match="TpClusterQueryResponse">
     <html>
@@ -54,31 +57,6 @@
                 }
               }
 
-              function onSubmit(bStop)
-              {
-                var rc = 0;
-                if (enable_SNMP > 0)
-                {
-                  var username = document.getElementById("submit3").value;
-                  var password = document.getElementById("submit4").value;
-                  if (username == null || password == null || username == '' || password == '')
-                  {
-                    alert("Both UserName and Password have to be filled in.");
-                    return false;
-                  }
-                  rc = confirm('Are you sure you want to ' + (bStop ? 'stop':'start') + ' the selected cluster(s)?');
-                  if (rc)
-                    document.forms[0].action='/ws_machine/StartStopBegin?Key1=' + username + '&Key2=' + password + '&Stop=' + (bStop ? '1' : '0');
-                }
-                else
-                {
-                  rc = confirm('Are you sure you want to ' + (bStop ? 'stop':'start') + ' the selected cluster(s)?');
-                  if (rc)
-                    document.forms[0].action='/ws_machine/StartStopBegin?Stop=' + (bStop ? '1' : '0');
-                }
-                return rc;
-              }
-
               function getConfigXML(url) 
               {
                 document.location.href = url;
@@ -92,7 +70,7 @@
           <xsl:choose>
             <xsl:when test="TpClusters/TpCluster">
               <table class="sort-table" id="clustersTable">
-                <caption><h2 align="left">Clusters</h2></caption>
+                <caption><h2 align="left"><xsl:value-of select="$hpccStrings/st[@id='Clusters']"/></h2></caption>
                 <colgroup>
                   <col width="2%" align="center"/>
                   <col width="15%" align="left"/>
@@ -102,11 +80,11 @@
                   <col width="28%" align="left"/>
                 </colgroup>
                 <tr class="grey">
-                  <th colspan="2">Name</th>
-                  <th>Component</th>
-                  <th>Platform</th>
-                  <th>Directory</th>
-                  <th>Log Directory</th>
+                  <th colspan="2"><xsl:value-of select="$hpccStrings/st[@id='Name']"/></th>
+                  <th><xsl:value-of select="$hpccStrings/st[@id='Component']"/></th>
+                  <th><xsl:value-of select="$hpccStrings/st[@id='Platform']"/></th>
+                  <th><xsl:value-of select="$hpccStrings/st[@id='Directory']"/></th>
+                  <th><xsl:value-of select="$hpccStrings/st[@id='LogDirectory']"/></th>
                 </tr>
                 <xsl:apply-templates select="TpClusters/TpCluster">
                   <xsl:sort select="Name"/>
@@ -114,8 +92,8 @@
               </table>
             </xsl:when>
             <xsl:otherwise>
-              <h3 align="center">Clusters</h3>
-              <br/>No clusters defined.
+              <h3 align="center"><xsl:value-of select="$hpccStrings/st[@id='Clusters']"/></h3>
+              <br/><xsl:value-of select="$hpccStrings/st[@id='NoClustersDefined']"/>
             </xsl:otherwise>
           </xsl:choose>
         </form>
@@ -141,9 +119,9 @@
       <xsl:variable name="type3" select="translate($type2, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
       <xsl:variable name="type4">
         <xsl:choose>
-            <xsl:when test="Type='RoxieCluster'">Roxie Cluster Process</xsl:when>
-            <xsl:when test="Type='ThorCluster'">Thor Cluster Process</xsl:when>
-            <xsl:when test="Type='HoleCluster'">Hole Cluster Process</xsl:when>
+            <xsl:when test="Type='RoxieCluster'">Roxie <xsl:value-of select="$hpccStrings/st[@id='ClusterProcess']"/></xsl:when>
+            <xsl:when test="Type='ThorCluster'">Thor <xsl:value-of select="$hpccStrings/st[@id='ClusterProcess']"/></xsl:when>
+            <xsl:when test="Type='HoleCluster'">Hole <xsl:value-of select="$hpccStrings/st[@id='ClusterProcess']"/></xsl:when>
         </xsl:choose>
       </xsl:variable>
       <xsl:variable name="absolutePath">
@@ -182,13 +160,11 @@
             </xsl:variable>
       <td width="45" nowrap="true">
         <xsl:variable name="href0">
-          <xsl:text disable-output-escaping="yes">/esp/iframe?esp_iframe_title=Configuration file for </xsl:text>
-          <xsl:value-of select="concat($type2, ' cluster - ', Name)"/>
+          <xsl:value-of select="concat('/esp/iframe?esp_iframe_title=', $type2, ' ', $hpccStrings/st[@id='Cluster'], ' ', Name, ' -- ', $hpccStrings/st[@id='Configuration'])"/>
           <xsl:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fFileType%3dcfg%26CompType%3d</xsl:text>
           <xsl:value-of select="concat($type2, 'Cluster%26CompName%3d', Name, '%26Directory%3d', $absolutePath, '%26OsType%3d', OS)"/>
         </xsl:variable>
-        <img onclick="getConfigXML('{$href0}')" border="0" src="/esp/files_/img/config.png" alt="View configuration file..."
-          title="View configuration file..." width="14" height="14"/>
+        <img onclick="getConfigXML('{$href0}')" border="0" src="/esp/files_/img/config.png" alt="{$hpccStrings/st[@id='ViewConfigurationFile']}" title="{$hpccStrings/st[@id='ViewConfigurationFile']}" width="14" height="14"/>
       </td>
       <td>
         <a  href="/WsTopology/TpMachineQuery?Type={$type3}MACHINES&amp;Cluster={Name}&amp;Path={Path}&amp;Directory={Directory}&amp;LogDirectory={$logPath}">
@@ -203,7 +179,7 @@
           <xsl:when test="OS=0">Windows</xsl:when>
           <xsl:when test="OS=2">Linux</xsl:when>
           <xsl:when test="OS=1">Solaris</xsl:when>
-          <xsl:otherwise>Unknown</xsl:otherwise>
+          <xsl:otherwise><xsl:value-of select="$hpccStrings/st[@id='Unknown']"/></xsl:otherwise>
         </xsl:choose>
       </td>
       <td>

+ 44 - 31
esp/eclwatch/ws_XSLT/tplog.xslt

@@ -34,6 +34,9 @@
     
     <xsl:variable name="firstrows" select="TpLogFileResponse/FirstRows"/>
     <xsl:variable name="lastrows" select="TpLogFileResponse/LastRows"/>
+    <xsl:variable name="acceptLanguage" select="/TpLogFileResponse/AcceptLanguage"/>
+    <xsl:variable name="localiseFile"><xsl:value-of select="concat('nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+    <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
 
     <xsl:template match="TpLogFileResponse">
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
@@ -61,6 +64,16 @@
           var hasDate = <xsl:value-of select="$hasdate"/>;
           var prevPage = <xsl:value-of select="$prevpage"/>;
           var nextPage = <xsl:value-of select="$nextpage"/>;
+          var invalidPageNumberAlert = '<xsl:value-of select="$hpccStrings/st[@id='InvalidPageNumber']"/>';
+          var invalidFirstRowsAlert = '<xsl:value-of select="$hpccStrings/st[@id='InvalidFirstRows']"/>';
+          var invalidLastHoursAlert = '<xsl:value-of select="$hpccStrings/st[@id='InvalidLastHours']"/>';
+          var invalidLastRowsAlert = '<xsl:value-of select="$hpccStrings/st[@id='InvalidLastRows']"/>';
+          var invalidTimeAlert = '<xsl:value-of select="$hpccStrings/st[@id='InvalidTime']"/>';
+          var timeNotDefinedAlert = '<xsl:value-of select="$hpccStrings/st[@id='TimeNotDefined']"/>';
+          var firstRowsNotDefinedAlert = '<xsl:value-of select="$hpccStrings/st[@id='FirstRowsNotDefined']"/>';
+          var lastHoursNotDefinedAlert = '<xsl:value-of select="$hpccStrings/st[@id='LastHoursNotDefined']"/>';
+          var lastRowsNotDefinedAlert = '<xsl:value-of select="$hpccStrings/st[@id='LastRowsNotDefined']"/>';
+          var pageNumberNotDefinedAlert = '<xsl:value-of select="$hpccStrings/st[@id='PageNumberNotDefined']"/>';
 
           <xsl:text disable-output-escaping="yes"><![CDATA[
             // This function gets called when the window has completely loaded.
@@ -185,14 +198,14 @@
                 var nb = document.getElementById('PageNumber').value
                 if(!nb)
                 {
-                  alert("'PageNumber' field should be defined.");
+                  alert(pageNumberNotDefinedAlert);
                   return false;
                 }
 
                 var d=parseInt(nb);
                 if(isNaN(d))
                 {
-                  alert("Invalid data in 'PageNumber' field");
+                  alert(invalidPageNumberAlert);
                   return false;
                 }
 
@@ -204,7 +217,7 @@
               {
                 if(!document.getElementById('First').value)
                 {
-                  alert("'First rows' field should be defined.");
+                  alert(firstRowsNotDefinedAlert);
                   return false;
                 }
 
@@ -212,7 +225,7 @@
                 var d=parseInt(firstRows);
                 if(isNaN(d))
                 {
-                  alert("Invalid data in 'First rows' field");
+                  alert(invalidFirstRowsAlert);
                   return false;
                 }
 
@@ -222,7 +235,7 @@
               {
                 if(!document.getElementById('Hour').value)
                 {
-                  alert("'Last hours' field should be defined.");
+                  alert(lastHoursNotDefinedAlert);
                   return false;
                 }
 
@@ -230,7 +243,7 @@
                 var d=parseInt(hours);
                 if(isNaN(d))
                 {
-                  alert("Invalid data in 'Last hours' field");
+                  alert(invalidLastHoursAlert);
                   return false;
                 }
 
@@ -240,7 +253,7 @@
               {
                 if(!document.getElementById('Last').value)
                 {
-                  alert("'Last rows' field should be defined.");
+                  alert(lastRowsNotDefinedAlert);
                   return false;
                 }
 
@@ -248,7 +261,7 @@
                 var d=parseInt(lastRows);
                 if(isNaN(d))
                 {
-                  alert("Invalid data in a 'Last rows' field");
+                  alert(invalidLastRowsAlert);
                   return false;
                 }
 
@@ -260,7 +273,7 @@
                 var dt=document.getElementById('To').value;
                 if(!df && !dt)
                 {
-                  alert("Either 'Date from' or 'to' field should be defined.");
+                  alert(timeNotDefinedAlert);
                   return false;
                 }
 
@@ -269,7 +282,7 @@
                   startDate = formatTime(df);
                   if (startDate == null)
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                   }
                 }
@@ -279,7 +292,7 @@
                   endDate = formatTime(dt);
                   if (endDate == null)
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                   }
                 }
@@ -303,7 +316,7 @@
               {
                 if(firstRows == '')
                 {
-                  alert("'First rows' field should be defined.");
+                  alert(firstRowsNotDefinedAlert);
                   return false;
                 }
 
@@ -313,7 +326,7 @@
               {
                 if(lastRows == '')
                 {
-                  alert("'Last rows' field should be defined.");
+                  alert(lastRowsNotDefinedAlert);
                   return false;
                 }
 
@@ -329,7 +342,7 @@
                 var d=parseInt(lastHours);
                 if(isNaN(d))
                 {
-                  alert("Invalid data in 'Last hours' field");
+                  alert(invalidLastHoursAlert);
                   return false;
                 }
 
@@ -339,7 +352,7 @@
               {
                 if(startDate == '' && endDate == '')
                 {
-                  alert("Either 'Time from' or 'to' field should be defined.");
+                  alert(timeNotDefinedAlert);
                   return false;
                 }
 
@@ -348,7 +361,7 @@
                   startDate = formatTime(startDate);
                   if (startDate == null)
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                   }
                 }
@@ -358,7 +371,7 @@
                   endDate = formatTime(endDate);
                   if (endDate == null)
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                   }
                 }
@@ -481,13 +494,13 @@
               <td>
                 <table>
                   <tr>
-                    <td><input type="radio" name="FilterRB" value="0" onclick="onRBChanged(0)"/>First page</td>
+                    <td><input type="radio" name="FilterRB" value="0" onclick="onRBChanged(0)"/><xsl:value-of select="$hpccStrings/st[@id='FirstPage']"/></td>
                   </tr>
                   <tr>
-                    <td><input type="radio" name="FilterRB" value="3" onclick="onRBChanged(3)"/>or last page (page <xsl:value-of select="$totalpages"/>)</td>
+                    <td><input type="radio" name="FilterRB" value="3" onclick="onRBChanged(3)"/><xsl:value-of select="$hpccStrings/st[@id='OrLastPage']"/> (<xsl:value-of select="$hpccStrings/st[@id='Page']"/><xsl:text disable-output-escaping="yes"> </xsl:text><xsl:value-of select="$totalpages"/>)</td>
                   </tr>
                   <tr>
-                    <td><input type="radio" name="FilterRB" value="4" onclick="onRBChanged(4)"/>or go to page:<input id="PageNumber" size="5" type="text" value="{PageNumber+1}" style="text-align:right;" onKeyUp = "onEditKeyUp(event)"/> </td>
+                    <td><input type="radio" name="FilterRB" value="4" onclick="onRBChanged(4)"/><xsl:value-of select="$hpccStrings/st[@id='OrGoToPage']"/>:<input id="PageNumber" size="5" type="text" value="{PageNumber+1}" style="text-align:right;" onKeyUp = "onEditKeyUp(event)"/> </td>
                   </tr>
                 </table>
               </td>
@@ -495,11 +508,11 @@
                 <table>
                   <tr>
                     <td><input type="radio" name="FilterRB" value="1" onclick="onRBChanged(1)"/></td>
-                    <td>or first:<input id="First" size="5" type="text" value="{FirstRows}" style="text-align:right;" onKeyUp = "onEditKeyUp(event)"/> rows</td>
+                    <td><xsl:value-of select="$hpccStrings/st[@id='OrFirst']"/>:<input id="First" size="5" type="text" value="{FirstRows}" style="text-align:right;" onKeyUp = "onEditKeyUp(event)"/> <xsl:value-of select="$hpccStrings/st[@id='Rows']"/></td>
                   </tr>
                   <tr>
                     <td><input type="radio" name="FilterRB" value="5" onclick="onRBChanged(5)"/></td>
-                    <td colspan="2">or last:<input id="Last" size="5" type="text" value="{LastRows}" style="text-align:right;" onKeyUp = "onEditKeyUp(event)"/> rows</td>
+                    <td colspan="2"><xsl:value-of select="$hpccStrings/st[@id='OrLast']"/>:<input id="Last" size="5" type="text" value="{LastRows}" style="text-align:right;" onKeyUp = "onEditKeyUp(event)"/> <xsl:value-of select="$hpccStrings/st[@id='Rows']"/></td>
                   </tr>
                 </table>
               </td>
@@ -509,23 +522,23 @@
                     <xsl:choose>
                       <xsl:when test="HasDate=1">
                         <td><input type="radio" name="FilterRB" value="6"  onclick="onRBChanged(6)"/>
-                        or time from:<input id="From" size="8" type="text" value="{StartDate}" onKeyUp = "onEditKeyUp(event)"/></td>
-                        <td colspan="4">to: <input id="To" size="8" type="text" value="{EndDate}" onKeyUp = "onEditKeyUp(event)"/> (hh:mm:ss)</td>
+                        <xsl:value-of select="$hpccStrings/st[@id='OrTimeFrom']"/>:<input id="From" size="8" type="text" value="{StartDate}" onKeyUp = "onEditKeyUp(event)"/></td>
+                        <td colspan="4"><xsl:value-of select="$hpccStrings/st[@id='To']"/>: <input id="To" size="8" type="text" value="{EndDate}" onKeyUp = "onEditKeyUp(event)"/> (hh:mm:ss)</td>
                       </xsl:when>
                       <xsl:otherwise>
                         <td><input type="radio" name="FilterRB" value="6"  onclick="onRBChanged(6)" disabled="true"/>
-                            or time from:<input id="From" size="8" type="text" value="{StartDate}" onKeyUp = "onEditKeyUp(event)" disabled="true"/></td>
-                        <td colspan="4">to: <input id="To" size="8" type="text" value="{EndDate}" onKeyUp = "onEditKeyUp(event)" disabled="true"/> (hh:mm:ss)</td>
+                            <xsl:value-of select="$hpccStrings/st[@id='OrTimeFrom']"/>:<input id="From" size="8" type="text" value="{StartDate}" onKeyUp = "onEditKeyUp(event)" disabled="true"/></td>
+                        <td colspan="4"><xsl:value-of select="$hpccStrings/st[@id='To']"/>: <input id="To" size="8" type="text" value="{EndDate}" onKeyUp = "onEditKeyUp(event)" disabled="true"/> (hh:mm:ss)</td>
                       </xsl:otherwise>
                     </xsl:choose>
                   </tr>
                   <tr>
                     <xsl:choose>
                       <xsl:when test="HasDate=1">
-                        <td><input type="radio" name="FilterRB" value="2" onclick="onRBChanged(2)"/> or last:<input id="Hour" size="5" type="text" value="{LastHours}"  onKeyUp = "onEditKeyUp(event)" style="text-align:right;"/> hours</td>
+                        <td><input type="radio" name="FilterRB" value="2" onclick="onRBChanged(2)"/> <xsl:value-of select="$hpccStrings/st[@id='OrLast']"/>:<input id="Hour" size="5" type="text" value="{LastHours}"  onKeyUp = "onEditKeyUp(event)" style="text-align:right;"/> <xsl:value-of select="$hpccStrings/st[@id='Hours']"/></td>
                       </xsl:when>
                       <xsl:otherwise>
-                        <td><input type="radio" name="FilterRB" value="2" onclick="onRBChanged(2)" disabled="true"/> or last:<input id="Hour" size="5" type="text" value="{LastHours}"  onKeyUp = "onEditKeyUp(event)" style="text-align:right;" disabled="true"/> hours</td>
+                        <td><input type="radio" name="FilterRB" value="2" onclick="onRBChanged(2)" disabled="true"/> <xsl:value-of select="$hpccStrings/st[@id='OrLast']"/>:<input id="Hour" size="5" type="text" value="{LastHours}"  onKeyUp = "onEditKeyUp(event)" style="text-align:right;" disabled="true"/> <xsl:value-of select="$hpccStrings/st[@id='Hours']"/></td>
                       </xsl:otherwise>
                     </xsl:choose>
                   </tr>
@@ -547,13 +560,13 @@
                 <input type="button" id="Download" class="sbutton"  size="40" value="Download" onClick="return onDownload(0)"/>
               </td>
               <xsl:if test="FilterType=0 or FilterType=3 or FilterType=4">
-                <td>Viewing page <xsl:value-of select="1+$pagenumber"/> of <xsl:value-of select="$totalpages"/></td>
+                <td><xsl:value-of select="$hpccStrings/st[@id='ViewingPage']"/><xsl:text disable-output-escaping="yes"> </xsl:text><xsl:value-of select="1+$pagenumber"/>/<xsl:value-of select="$totalpages"/></td>
               </xsl:if>
             </tr>
           </table>
           <div id="ViewLogData">
-            <span id="loadingMsg"><h3>Loading, please wait...</h3></span>
-            <span id="loadingTimeOut" style="visibility:hidden"><h3>Browser timed out due to a long time delay.</h3></span>
+            <span id="loadingMsg"><h3><xsl:value-of select="$hpccStrings/st[@id='LoadingPleaseWait']"/></h3></span>
+            <span id="loadingTimeOut" style="visibility:hidden"><h3><xsl:value-of select="$hpccStrings/st[@id='BrowserTimedOut']"/></h3></span>
           </div>
         </form>
         <iframe id="DataFrame" name="DataFrame" style="display:none; visibility:hidden;"></iframe>

+ 14 - 0
esp/platform/espcontext.cpp

@@ -38,6 +38,7 @@ private:
     StringAttr      m_path;
     StringAttr      m_peer;
     StringAttr      m_useragent;
+    StringAttr      m_acceptLanguage;
 
     StringBuffer    m_servName;
     StringBuffer    m_servHost;
@@ -298,6 +299,19 @@ public:
         return useragent;
     }
 
+    virtual void setAcceptLanguage(const char* acceptLanguage)
+    {
+        if(acceptLanguage && *acceptLanguage)
+            m_acceptLanguage.set(acceptLanguage);
+    }
+    virtual StringBuffer& getAcceptLanguage(StringBuffer& acceptLanguage)
+    {
+        const char* acceptLang = m_acceptLanguage.get();
+        if(acceptLang && *acceptLang)
+            acceptLanguage.set(m_acceptLanguage.get());
+        return acceptLanguage;
+    }
+
     virtual IProperties *   queryRequestParameters()
     {
         if (!m_queryparams)

+ 3 - 0
esp/scm/esp.ecm

@@ -151,6 +151,9 @@ interface IEspContext : extends IInterface
 
     virtual ESPSerializationFormat getResponseFormat()=0;
     virtual void setResponseFormat(ESPSerializationFormat fmt)=0;
+
+    virtual void setAcceptLanguage(const char * acceptLanguage) = 0;
+    virtual StringBuffer& getAcceptLanguage(StringBuffer& acceptLanguage) = 0;
 };
 
 

+ 1 - 0
esp/scm/ws_fs.ecm

@@ -513,6 +513,7 @@ ESPresponse [exceptions_inline] FileListResponse
     string Mask;
     int    OS;
     bool DirectoryOnly(false);
+    [min_ver("1.10")] string AcceptLanguage;
     ESParray<ESPStruct PhysicalFileStruct> files;   
 };
 

+ 5 - 1
esp/scm/ws_machine.ecm

@@ -148,6 +148,7 @@ ESPresponse [encode(0), exceptions_inline] GetMachineInfoResponse
    string TimeStamp;
    [min_ver("1.02")] string UserName;
    [min_ver("1.02"), password, cols(20)] string Password;
+   [min_ver("1.12")] string AcceptLanguage;
 };
 
 
@@ -159,6 +160,7 @@ ESPrequest GetMachineInfoRequestEx
 
 ESPresponse [encode(0), exceptions_inline] GetMachineInfoResponseEx
 {
+    [min_ver("1.12")] string AcceptLanguage;
     ESParray<ESPstruct MachineInfoEx> Machines;
 };
 
@@ -185,6 +187,7 @@ ESPresponse [encode(0), exceptions_inline] MetricsResponse
    [min_ver("1.02")] string Cluster;
    [min_ver("1.06")] bool   SelectAllChecked(false);
    [min_ver("1.07")] bool   AutoUpdate(true);
+   [min_ver("1.12")] string AcceptLanguage;
 };
 
 ESPstruct RemoteExecResult
@@ -302,9 +305,10 @@ ESPresponse [encode(0), exceptions_inline] GetTargetClusterInfoResponse
     ESPstruct RequestInfoStruct             RequestInfo;
     ESParray<ESPstruct TargetClusterInfo>   TargetClusterInfoList;
     string TimeStamp;
+    [min_ver("1.12")] string AcceptLanguage;
 };
 //-------- service ---------
-ESPservice [version("1.11"), default_client_version("1.11")] ws_machine
+ESPservice [version("1.12"), default_client_version("1.12")] ws_machine
 {
     ESPuses ESPstruct RequestInfoStruct;
     ESPuses ESPstruct MachineInfoEx;

+ 6 - 2
esp/scm/ws_topology.ecm

@@ -315,6 +315,7 @@ ESPresponse [exceptions_inline]TpTargetClusterQueryResponse
     string MemThresholdType;
     string DiskThresholdType;
     [min_ver("1.13")] string PreflightProcessFilter;
+    [min_ver("1.20")] string AcceptLanguage;
 
     ESParray<ESPstruct TpTargetCluster> TpTargetClusters;
 };
@@ -327,6 +328,7 @@ ESPrequest TpClusterQueryRequest
 ESPresponse [exceptions_inline]TpClusterQueryResponse
 {
     [min_ver("1.08")] bool EnableSNMP;
+    [min_ver("1.20")] string AcceptLanguage;
     ESParray<ESPstruct TpCluster> TpClusters;
 };
 
@@ -406,6 +408,7 @@ ESPresponse [exceptions_inline] TpMachineQueryResponse
     string DiskThresholdType;
     [min_ver("1.13")] string PreflightProcessFilter;
     [min_ver("1.08")] bool EnableSNMP;
+    [min_ver("1.20")] string AcceptLanguage;
     ESParray<ESPstruct TpMachine> TpMachines;
 };
 
@@ -422,6 +425,7 @@ ESPresponse [nil_remove, exceptions_inline] TpServiceQueryResponse
     [min_ver("1.07")] bool EncapsulatedSystem;
     [min_ver("1.08")] bool EnableSNMP;
     [min_ver("1.13")] string PreflightProcessFilter;
+    [min_ver("1.20")] string AcceptLanguage;
     string MemThresholdType;
     string DiskThresholdType;
     ESPstruct TpServices ServiceList;
@@ -501,7 +505,7 @@ ESPresponse [exceptions_inline] TpLogFileResponse
     [min_ver("1.05")] int PrevPage(-1);
     [min_ver("1.05")] int NextPage(-1);
     [min_ver("1.06")] int TotalPages;
-    
+    [min_ver("1.20")] string AcceptLanguage;
     [http_content("application/octet-stream")] binary thefile;
 };
 
@@ -561,7 +565,7 @@ ESPresponse [exceptions_inline,encode(0)] TpThorStatusResponse
     int AutoRefresh;
 };
 
-ESPservice [noforms, version("1.19"), default_client_version("1.19"), exceptions_inline("./smc_xslt/exceptions.xslt")] WsTopology
+ESPservice [noforms, version("1.20"), default_client_version("1.20"), exceptions_inline("./smc_xslt/exceptions.xslt")] WsTopology
 {
     ESPuses ESPStruct TpBinding;
     ESPuses ESPstruct TpCluster;

+ 22 - 0
esp/services/ws_fs/ws_fsService.cpp

@@ -129,6 +129,22 @@ void CFileSprayEx::init(IPropertyTree *cfg, const char *process, const char *ser
 
 }
 
+StringBuffer& CFileSprayEx::getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage)
+{
+    context.getAcceptLanguage(acceptLanguage);
+    if (!acceptLanguage.length())
+    {
+        acceptLanguage.set("en");
+        return acceptLanguage;
+    }
+    acceptLanguage.setLength(2);
+    VStringBuffer languageFile("%ssmc_xslt/nls/%s/hpcc.xml", getCFD(), acceptLanguage.str());
+    if (!checkFileExists(languageFile.str()))
+        acceptLanguage.set("en");
+    return acceptLanguage;
+}
+
+
 void ParsePath(const char * fullPath, StringBuffer &ip, StringBuffer &filePath, StringBuffer &title)
 {
     ip.clear();
@@ -2681,6 +2697,7 @@ bool CFileSprayEx::onFileList(IEspContext &context, IEspFileListRequest &req, IE
         if (!path || !*path)
             throw MakeStringException(ECLWATCH_INVALID_INPUT, "Path not specified.");
 
+        double version = context.getClientVersion();
         const char* netaddr = req.getNetaddr();
         const char* mask = req.getMask();
         bool directoryOnly = req.getDirectoryOnly();
@@ -2759,6 +2776,11 @@ bool CFileSprayEx::onFileList(IEspContext &context, IEspFileListRequest &req, IE
         if (mask && *mask)
             resp.setMask(mask);
 
+        if (version >= 1.10)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
         resp.setDirectoryOnly(directoryOnly);
     }
     catch(IException* e)

+ 1 - 0
esp/services/ws_fs/ws_fsService.hpp

@@ -110,6 +110,7 @@ protected:
     bool getDropZoneFiles(IEspContext &context, const char* netaddr, const char* osStr, const char* path, IEspDropZoneFilesRequest &req, IEspDropZoneFilesResponse &resp);
     bool ParseLogicalPath(const char * pLogicalPath, StringBuffer &title);
     bool ParseLogicalPath(const char * pLogicalPath, const char* cluster, StringBuffer &folder, StringBuffer &title, StringBuffer &defaultFolder, StringBuffer &defaultReplicateFolder);
+    StringBuffer& getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage);
 };
 
 #endif //_ESPWIZ_FileSpray_HPP__

+ 71 - 58
esp/services/ws_machine/machines.xslt

@@ -33,7 +33,10 @@
    <xsl:variable name="clusterType" select="string($reqInfo/ClusterType)"/>
    <xsl:variable name="memThresholdType" select="number($reqInfo/MemThresholdType)"/>
    <xsl:variable name="diskThresholdType" select="number($reqInfo/DiskThresholdType)"/>
-   
+   <xsl:variable name="acceptLanguage" select="/GetMachineInfoResponse/AcceptLanguage"/>
+   <xsl:variable name="localiseFile"><xsl:value-of select="concat('../nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+   <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
+
    <xsl:variable name="memThreshold"><!-- from 0 to 100 (%)-->
       <xsl:choose>
          <xsl:when test="$reqInfo/MemThreshold">
@@ -94,20 +97,21 @@
                <xsl:choose>
                   <xsl:when test="$SwapNode">
                      var swapNode = true;
-                  var OldIP = '<xsl:value-of select="$reqInfo/OldIP"/>';
-                   var ClusterName = '<xsl:value-of select="$clusterName"/>';
-                  var Path = '<xsl:value-of select="$reqInfo/Path"/>';
-                   <xsl:text disable-output-escaping="yes"><![CDATA[
-                       singleSelect = true;
-                   function onSwapNode()           
-                   {
+                     var OldIP = '<xsl:value-of select="$reqInfo/OldIP"/>';
+                     var ClusterName = '<xsl:value-of select="$clusterName"/>';
+                     var Path = '<xsl:value-of select="$reqInfo/Path"/>';
+                     var confirmSwapStr = '<xsl:value-of select="$hpccStrings/st[@id='ConfirmSwap']"/>';
+                     <xsl:text disable-output-escaping="yes"><![CDATA[
+                        singleSelect = true;
+                        function onSwapNode()
+                        {
                             var table = document.getElementById('resultsTable');
                             var row = table.rows(lastClicked);
                            var checkbox = row.cells(0).children[0];
                            var cbValue = checkbox.value;
                         var NewIP = cbValue.substring(0, cbValue.indexOf(':'));
                                               
-                        if (confirm('Swap ' + OldIP + ' with ' + NewIP + ' ?'))
+                        if (confirm(confirmSwapStr + ' ' + OldIP + ' - ' + NewIP + ' ?'))
                         {
                                 var s = "/WsTopology/TpSwapNode?Cluster=" + ClusterName;
                                 s += "&OldIP=" + OldIP;
@@ -180,7 +184,7 @@
                      <h1><xsl:value-of select="Exceptions"/></h1>
                   </xsl:when>
                   <xsl:when test="not(Machines)">
-                     <h2>No machines selected!</h2>
+                     <h2><xsl:value-of select= "$hpccStrings/st[@id='NoMachinesSelected']"/></h2>
                   </xsl:when>
                   <xsl:otherwise>
                       <center>
@@ -190,20 +194,20 @@
                               <th align="left">
                               <h3>
                                      <xsl:choose>                       
-                                    <xsl:when test="$SwapNode">Select a spare node to swap</xsl:when>
-                                    <xsl:when test="$clusterType='THORSPARENODES'">Thor Slaves</xsl:when>
-                                    <xsl:when test="$clusterType='ALLSERVICES'">System Service Nodes</xsl:when>
+                                    <xsl:when test="$SwapNode"><xsl:value-of select= "$hpccStrings/st[@id='SelectASpareNodeToSwap']"/></xsl:when>
+                                    <xsl:when test="$clusterType='THORSPARENODES'"><xsl:value-of select= "$hpccStrings/st[@id='ThorSlaves']"/></xsl:when>
+                                    <xsl:when test="$clusterType='ALLSERVICES'"><xsl:value-of select= "$hpccStrings/st[@id='SystemServiceNodes']"/></xsl:when>
                                     <xsl:when test="$clusterName!=''">
                                         <xsl:choose>
                                                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                                                             </xsl:choose>
-                                                            <xsl:text disable-output-escaping="yes">Cluster '</xsl:text>
+                                                            <xsl:value-of select= "$hpccStrings/st[@id='Cluster']"/><xsl:text disable-output-escaping="yes"> '</xsl:text>
                                         <xsl:value-of select="$clusterName"/>
                                         <xsl:text disable-output-escaping="yes">'</xsl:text>
                                     </xsl:when>
-                                    <xsl:otherwise>Machine Information</xsl:otherwise>
+                                    <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='MachineInfo']"/></xsl:otherwise>
                                  </xsl:choose>
                               </h3>
                               </th>
@@ -213,11 +217,11 @@
                                                     <xsl:apply-templates select="Machines"/>                                                    
                                                     <xsl:choose>
                                       <xsl:when test="$SwapNode">
-                                         <input type="submit" value="Submit" id="submitBtn" disabled="true"/>
-                                         <input type="button" value="Cancel" name="Cancel" onclick="javascript:history.go(-1)"/>
+                                         <input type="submit" value="{$hpccStrings/st[@id='Submit']}" id="submitBtn" disabled="true"/>
+                                         <input type="button" value="{$hpccStrings/st[@id='Cancel']}" name="Cancel" onclick="javascript:history.go(-1)"/>
                                       </xsl:when>
                                       <xsl:otherwise>
-                                        <b>Fetched: </b>
+                                        <b><xsl:value-of select= "$hpccStrings/st[@id='Fetched']"/>: </b>
                                         <xsl:value-of select="TimeStamp"/>
                                         <br/>
                                         <br/>
@@ -258,29 +262,32 @@
                <th width="5">
                   <xsl:if test="MachineInfoEx[2] and not($SwapNode)">
                      <xsl:attribute name="id">selectAll1</xsl:attribute>
-                     <input type="checkbox" id="All1" title="Select or deselect all machines" onclick="selectAll(this.checked)" checked="true"/>
+                     <input type="checkbox" id="All1" title="{$hpccStrings/st[@id='SelectDeselectAllMachines']}" onclick="selectAll(this.checked)" checked="true"/>
                   </xsl:if>
                </th>
-               <th>Location</th>
-               <th>Component</th>
+               <th><xsl:value-of select= "$hpccStrings/st[@id='Location']"/></th>
+               <th><xsl:value-of select= "$hpccStrings/st[@id='Component']"/></th>
                <xsl:if test="$numSlaveNodes > 0">
-                  <th>Slave Number</th>
+                  <th><xsl:value-of select= "$hpccStrings/st[@id='SlaveNumber']"/></th>
                </xsl:if>
                <xsl:choose>
                   <xsl:when test="../Columns/Item">
                      <xsl:for-each select="../Columns/Item[text()='Condition']">
-                        <th align="center">Condition</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='Condition']"/></th>
                      </xsl:for-each>
                      <xsl:for-each select="../Columns/Item[text()='State']">
-                        <th align="center">State</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='State']"/></th>
                      </xsl:for-each>
                      <xsl:for-each select="../Columns/Item[text()='UpTime']">
-                        <th align="center">Up Time</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='UpTime']"/></th>
                      </xsl:for-each>
                      <!--process Processes first-->
                      <xsl:for-each select="../Columns/Item[text()='Processes']">
-                        <th align="center"><xsl:value-of select="."/>
-                           <xsl:if test="text()='Processes' and $reqInfo/ApplyProcessFilter=1"> Down</xsl:if>
+                        <th align="center">
+                           <xsl:choose>
+                              <xsl:when test="$reqInfo/ApplyProcessFilter=1"><xsl:value-of select= "$hpccStrings/st[@id='ProcessesDown']"/></xsl:when>
+                              <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='Processes']"/></xsl:otherwise>
+                           </xsl:choose>
                         </th>
                      </xsl:for-each>
                      <!--process disk storage next-->
@@ -288,20 +295,23 @@
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
                      <!--process physical memory and swap next-->      
-                     <xsl:for-each select="../Columns/Item[text() = 'Physical Memory' or text()='Swap']">
-                        <th align="center"><xsl:value-of select="."/></th>
+                     <xsl:for-each select="../Columns/Item[text() = 'Physical Memory']">
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='PhysicalMemory']"/></th>
+                     </xsl:for-each>
+                     <xsl:for-each select="../Columns/Item[text() = 'Swap']">
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='Swap']"/></th>
                      </xsl:for-each>
                      <!--process CPU Load next -->      
                      <xsl:for-each select="../Columns/Item[starts-with(text(), 'CPU') and contains(text(), 'Load')]">
-                        <th align="center"><xsl:value-of select="."/></th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='CPULoad']"/></th>
                      </xsl:for-each>
                      <!--process Up Time next -->
                      <xsl:for-each select="../Columns/Item[text()='Up Time']">
-                        <th align="center">Computer Up Time</th>
+                        <th align="center"><xsl:value-of select= "$hpccStrings/st[@id='ComputerUpTime']"/></th>
                      </xsl:for-each>
                   </xsl:when>
                   <xsl:otherwise>
-                     <th>Description</th>
+                     <th><xsl:value-of select= "$hpccStrings/st[@id='Description']"/></th>
                   </xsl:otherwise>
                </xsl:choose>
             </tr>
@@ -324,9 +334,9 @@
          <table  class="select-all">
             <tr>
                <th id="selectAll2">
-                  <input type="checkbox" id="All2" title="Select or deselect all machines" onclick="selectAll(this.checked)" checked="true"/>
+                  <input type="checkbox" id="All2" title="{$hpccStrings/st[@id='SelectDeselectAllMachines']}" onclick="selectAll(this.checked)" checked="true"/>
                </th>
-               <th align="left" colspan="6">Select All / None</th>
+               <th align="left" colspan="6"><xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></th>
             </tr>
          </table>
       </xsl:if>
@@ -392,16 +402,16 @@
                                     <xsl:attribute name="bgcolor">#FF8800</xsl:attribute>
                                 </xsl:if>
                           <xsl:choose>
-                                    <xsl:when test="$cond='0'">Unknown</xsl:when>
-                                    <xsl:when test="$cond='1'">Normal</xsl:when>
-                                    <xsl:when test="$cond='2'">Warning</xsl:when>
-                                    <xsl:when test="$cond='3'">Minor</xsl:when>
-                                    <xsl:when test="$cond='4'">Major</xsl:when>
-                                    <xsl:when test="$cond='5'">Critical</xsl:when>
-                                    <xsl:when test="$cond='6'">Fatal</xsl:when>
+                                    <xsl:when test="$cond='0'"><xsl:value-of select= "$hpccStrings/st[@id='Unknown']"/></xsl:when>
+                                    <xsl:when test="$cond='1'"><xsl:value-of select= "$hpccStrings/st[@id='Normal']"/></xsl:when>
+                                    <xsl:when test="$cond='2'"><xsl:value-of select= "$hpccStrings/st[@id='Warning']"/></xsl:when>
+                                    <xsl:when test="$cond='3'"><xsl:value-of select= "$hpccStrings/st[@id='Minor']"/></xsl:when>
+                                    <xsl:when test="$cond='4'"><xsl:value-of select= "$hpccStrings/st[@id='Major']"/></xsl:when>
+                                    <xsl:when test="$cond='5'"><xsl:value-of select= "$hpccStrings/st[@id='Critical']"/></xsl:when>
+                                    <xsl:when test="$cond='6'"><xsl:value-of select= "$hpccStrings/st[@id='Fatal']"/></xsl:when>
                                     <xsl:when test="$cond='7'">-</xsl:when>
                     <xsl:when test="$cond='-1'">
-                      <xsl:attribute name="title">Failed to retrieve information.  Please check configuration.</xsl:attribute>
+                      <xsl:attribute name="title"><xsl:value-of select= "$hpccStrings/st[@id='FailedToRetrieveInformation']"/></xsl:attribute>
                     </xsl:when>
                                 </xsl:choose>
                             </td>
@@ -410,17 +420,17 @@
                             <td id="state_{position()}">
                             <xsl:variable name="state" select="ComponentInfo/State"/>
                               <xsl:choose>
-                                        <xsl:when test="$state='0'"><xsl:attribute name="bgcolor">#FF8800</xsl:attribute>Unknown</xsl:when>
-                                        <xsl:when test="$state='1'">Starting</xsl:when>
-                                        <xsl:when test="$state='2'">Stopping</xsl:when>
-                                        <xsl:when test="$state='3'">Suspended</xsl:when>
-                                        <xsl:when test="$state='4'">Recycling</xsl:when>
-                                        <xsl:when test="$state='5'">Ready</xsl:when>
-                                        <xsl:when test="$state='6'">Busy</xsl:when>
+                                        <xsl:when test="$state='0'"><xsl:attribute name="bgcolor">#FF8800</xsl:attribute><xsl:value-of select= "$hpccStrings/st[@id='Unknown']"/></xsl:when>
+                                        <xsl:when test="$state='1'"><xsl:value-of select= "$hpccStrings/st[@id='Starting']"/></xsl:when>
+                                        <xsl:when test="$state='2'"><xsl:value-of select= "$hpccStrings/st[@id='Stopping']"/></xsl:when>
+                                        <xsl:when test="$state='3'"><xsl:value-of select= "$hpccStrings/st[@id='Suspended']"/></xsl:when>
+                                        <xsl:when test="$state='4'"><xsl:value-of select= "$hpccStrings/st[@id='Recycling']"/></xsl:when>
+                                        <xsl:when test="$state='5'"><xsl:value-of select= "$hpccStrings/st[@id='Ready']"/></xsl:when>
+                                        <xsl:when test="$state='6'"><xsl:value-of select= "$hpccStrings/st[@id='Busy']"/></xsl:when>
                                         <xsl:when test="$state='7'">-</xsl:when>
                                         <xsl:when test="$cond='-1'">
-                      <xsl:attribute name="title">Failed to retrieve information.  Please check configuration.</xsl:attribute>
-                                            <xsl:text>N/A</xsl:text>
+                                            <xsl:attribute name="title"><xsl:value-of select= "$hpccStrings/st[@id='FailedToRetrieveInformation']"/></xsl:attribute>
+                                            <xsl:value-of select= "$hpccStrings/st[@id='NA']"/>
                                         </xsl:when>
                                     </xsl:choose>
                             </td>
@@ -429,8 +439,8 @@
                         <td id="uptime_{position()}">
                             <xsl:choose>
                                     <xsl:when test="$cond='-1' or $cond='7'">
-                    <xsl:attribute name="title">Failed to retrieve information.  Please check configuration.</xsl:attribute>
-                                        <xsl:text>N/A</xsl:text>
+                                        <xsl:attribute name="title">Failed to retrieve information.  Please check configuration.</xsl:attribute>
+                                        <xsl:value-of select= "$hpccStrings/st[@id='NA']"/>
                                     </xsl:when>
                                     <xsl:otherwise>
                                     <xsl:value-of select="ComponentInfo/UpTime"/>
@@ -477,8 +487,11 @@
                                             </xsl:otherwise>
                                         </xsl:choose>
                      </xsl:variable>
-                     <xsl:variable name="caption">Processes
-                        <xsl:if test="$reqInfo/ApplyProcessFilter=1"> Down</xsl:if>
+                     <xsl:variable name="caption">
+                        <xsl:choose>
+                           <xsl:when test="$reqInfo/ApplyProcessFilter=1"><xsl:value-of select= "$hpccStrings/st[@id='ProcessesDown']"/></xsl:when>
+                           <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='Processes']"/></xsl:otherwise>
+                        </xsl:choose>
                      </xsl:variable>
                     <xsl:attribute name="title">
                       <xsl:value-of select="$caption"/>,<xsl:value-of select="$processNames"/>
@@ -600,12 +613,12 @@
         <xsl:attribute name="title">
           <xsl:value-of select="$memNode/Description"/>
           <xsl:text disable-output-escaping="yes"><![CDATA[ <br /> ]]></xsl:text>
-          <xsl:value-of select="$memNode/Available"/><xsl:text> MB Avail</xsl:text>
+          <xsl:value-of select="$memNode/Available"/><xsl:text> MB </xsl:text><xsl:value-of select="$hpccStrings/st[@id='Available']"/>
           <xsl:text disable-output-escaping="yes"><![CDATA[ <br /> ]]></xsl:text>
-          <xsl:value-of select="$memNode/Total"/> MB Total
+          <xsl:value-of select="$memNode/Total"/> MB <xsl:value-of select="$hpccStrings/st[@id='Total']"/>
         </xsl:attribute>
         <xsl:choose>
-          <xsl:when test="$memNode/Total=0">N/A</xsl:when>
+          <xsl:when test="$memNode/Total=0"><xsl:value-of select="$hpccStrings/st[@id='NA']"/></xsl:when>
           <xsl:otherwise>
             <xsl:if test="$threshold != 0">
               <xsl:choose>

+ 18 - 14
esp/services/ws_machine/metrics.xslt

@@ -23,6 +23,9 @@
   <xsl:variable name="autoupdatechecked" select="/MetricsResponse/AutoUpdate"/>
   <xsl:variable name="clusterName" select="/MetricsResponse/Cluster"/>
   <xsl:variable name="selectAllChecked" select="/MetricsResponse/SelectAllChecked"/>
+  <xsl:variable name="acceptLanguage" select="/MetricsResponse/AcceptLanguage"/>
+  <xsl:variable name="localiseFile"><xsl:value-of select="concat('../nls/', $acceptLanguage, '/hpcc.xml')"/></xsl:variable>
+  <xsl:variable name="hpccStrings" select="document($localiseFile)/hpcc/strings"/>
 
   <!--define acceptable percentage deviation from mean-->
    
@@ -69,6 +72,7 @@
          var reloadTimeout = 0;
          var idCount = 0;
          var checkboxIDs = new Array();
+         var viewColumnsStr = '<xsl:value-of select="$hpccStrings/st[@id='ViewColumns']"/>';
 
          // This function gets called when the window has completely loaded.
          // It starts the reload timer with a default time value.
@@ -311,7 +315,7 @@
                          s +='<tr><td><hr size="2"></td></tr>';
 
                   var numRows = i > 5 ? 5 : i;
-                  s1+= '<tr><th align="center" colspan="' + numRows + '">View Columns:<hr/></th></tr>';
+                  s1+= '<tr><th align="center" colspan="' + numRows + '">' + viewColumnsStr + ':<hr/></th></tr>';
                   s1 += s;
                   s1 += '<tr><th align="center" colspan="' + numRows + '"><hr/>' + 
                           '<input type="button" value="Close" onclick="parent.contextMenu.hide()"/>' +
@@ -402,7 +406,7 @@
          </head>
          
          <body onload="setReloadFunction('reloadPage');onLoad()">
-            <h2>Metrics</h2>
+            <h2><xsl:value-of select="$hpccStrings/st[@id='Metrics']"/></h2>
             <form id="listitems" action="/ws_machine/GetMetrics" method="post">
               <input type="hidden" name="Cluster" value="{$clusterName}"/>
               <input type="hidden" id="SelectAllChecked" name="SelectAllChecked" value="{$selectAllChecked}"/>
@@ -420,7 +424,7 @@
                 </colgroup-->
                <thead>
                <tr>
-                  <th id="cell_0_0">I.P. Address</th>
+                  <th id="cell_0_0"><xsl:value-of select="$hpccStrings/st[@id='IPAddress']"/></th>
                   <xsl:apply-templates select="FieldInformation/FieldInfo"/>
                </tr>
                </thead>
@@ -440,7 +444,7 @@
                            <xsl:attribute name="onmouseleave">bgColor='#FFFFFF'</xsl:attribute>
                         </xsl:otherwise>
                      </xsl:choose>
-                     <td><b>Mean</b></td>
+                     <td><b><xsl:value-of select="$hpccStrings/st[@id='Mean']"/></b></td>
                      <xsl:for-each select="FieldInformation/FieldInfo">
                         <td id="cell_{position()}_mean" >
                           <xsl:if test="Hide=1">
@@ -486,11 +490,11 @@
                         <xsl:attribute name="checked">false</xsl:attribute>b
                       </xsl:otherwise>
                     </xsl:choose-->
-                    Auto update metrics when View Columns changing.
+                    <xsl:value-of select="$hpccStrings/st[@id='AutoUpdateMetricsWhenViewColumnsChanging']"/>
                   </input>
                 </td>
                 <td>
-                  <input type="button" id="updateMetriceBtn" value="Update Metrics Now" onclick="UpdateMetricesNow(true)">
+                  <input type="button" id="updateMetriceBtn" value="{$hpccStrings/st[@id='UpdateMetricsNow']}" onclick="UpdateMetricesNow(true)">
                     <!--xsl:choose>
                       <xsl:when test="$autoUpdate = true">
                         <xsl:attribute name="disabled">true</xsl:attribute>
@@ -505,7 +509,7 @@
             </table>
             <br/>
             <br/>
-            <b>View Columns:</b>
+            <b><xsl:value-of select="$hpccStrings/st[@id='ViewColumns']"/>:</b>
             <table id="viewTable" width="100%">
                <tr/>
                <tr>
@@ -516,11 +520,11 @@
                <table>
                   <tr>
                      <th id="selectAll1" colspan="5">
-                       <input type="checkbox" id="SelectAllCheckBox" title="Select or deselect all" onclick="selectAll0(this.checked)">
+                       <input type="checkbox" id="SelectAllCheckBox" title="{$hpccStrings/st[@id='SelectDeselectAll']}" onclick="selectAll0(this.checked)">
                          <xsl:if test="$selectAllChecked &gt; 0">
                            <xsl:attribute name="checked">true</xsl:attribute>
                          </xsl:if>
-                       Select all / none</input>
+                       <xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></input>
                      </th>
                   </tr>
                </table>
@@ -531,17 +535,17 @@
             <xsl:if test="$autoRefresh &gt; 0">
                <xsl:attribute name="checked">true</xsl:attribute>
             </xsl:if>
-            </input>Auto Refresh every <input type="text" id="AutoRefresh" name="AutoRefresh" size="2" value="{$autoRefresh}" onblur="setReloadTimeout(this.value)">
+            </input><xsl:value-of select="$hpccStrings/st[@id='AutoRefreshEvery']"/> <input type="text" id="AutoRefresh" name="AutoRefresh" size="2" value="{$autoRefresh}" onblur="setReloadTimeout(this.value)">
             <xsl:if test="$autoRefresh = 0">
                <xsl:attribute name="disabled">true</xsl:attribute>
             </xsl:if>
-            </input> mins.
-            <br/><input type="submit" value="Refresh" id="submitBtn"/>
+            </input> <xsl:value-of select="$hpccStrings/st[@id='Mins']"/>
+            <br/><input type="submit" value="{$hpccStrings/st[@id='Refresh']}" id="submitBtn"/>
             </form>
             <br/>
             <br/>
-            <a href="/WsTopology/TpClusterQuery?Type=ROOT">Cluster Topology</a><br/>
-            <a href="/WsSMC/Activity">Home</a>
+            <a href="/WsTopology/TpClusterQuery?Type=ROOT"><xsl:value-of select="$hpccStrings/st[@id='ClusterTopology']"/></a><br/>
+            <a href="/WsSMC/Activity"><xsl:value-of select="$hpccStrings/st[@id='Home']"/></a>
             <DIV id="menu" style="LEFT: 0px; TOP: 0px; VISIBILITY: hidden; POSITION: absolute"></DIV>
          </body>
       </html>

+ 20 - 166
esp/services/ws_machine/preflightControls.xslt

@@ -220,59 +220,10 @@
 
          function onClickSubmit()
          {
-                if (formSubmitted)
-                    return false;
-            if (method == 'RemoteExec')
-            {
-               os = -1;//unknown
-               var rc = processSelectedItems(ensureSameOS);
-               if (!rc)
-                  alert('Please select machines of the same platform type for remote execution!');
-               return rc;
-            }
-            else if (method == 'GetMachineInfo' || method == 'GetMetrics' || method == 'GetTargetClusterInfo')
-            {
-               var index = method == 'GetMachineInfo' ? 1 : 2; //in fact, nothing is needed here
-               //var src = document.getElementById("SecurityString"+index);
-               //var dest= document.getElementById("SecurityString0");
-               //dest.value = src.value;
-            }
-            else //start or stop
-            {
-                      var op = method.toLowerCase();
-                 excludedServers.length = 0;
-                 excludedCheckboxes.length = 0;
-              //processSelectedItems(ensureStartable);
-              totalItems = 0;
-              checkedCount = 0;
-              checkSelected(document.forms['listitems']);;
-              var rc;
-              if (excludedServers.length > 0)
-              {
-                var bAllChecked = checkedCount == totalItems;
-                              var s = excludedServers.join(', ') + ' cannot be ' + op + 'ed!';
-                              alert(s);
-                              var n = excludedCheckboxes.length;
-                              for (var i=0; i<n; i++)
-                                  excludedCheckboxes[i].checked = false;
-                                
-                              ///countItems();//updates checkedCount and totalItems                     
-                              ///rowsChecked = checkedCount > 0;
-                              ///if (bAllChecked)
-                                ///  checkSelectAllCheckBoxes(false);
-                              document.forms[0].submitBtn.disabled = checkedCount == 0;
-                              rc = false;
-              }
-              else
-              {
-                 rc = confirm('Are you sure you would like to ' + op + ' the selected server(s)?');
-                 if (rc)
-                      document.forms[0].action = '/ws_machine/StartStopBegin?Stop=' + (op=='start' ? '0':'1');
-              }
-            }
-            if (rc)
-                    formSubmitted = true;
-            return rc;
+            if (formSubmitted)
+                return false;
+            formSubmitted = true;
+            return formSubmitted;
          }
          
          function adjustThresholdValue(namePrefix, thresholdType)
@@ -329,41 +280,21 @@
    <div>
          <table border="0">
                 <tr>
-                    <th width="80" align="left">Action:</th>
+                    <th width="80" align="left"><xsl:value-of select="$hpccStrings/st[@id='Action']"/>:</th>
                     <td align="left">
                         <select id="methodObj" onchange="showPreflightControl(options[selectedIndex].value)">
                             <option value="GetMachineInfo">
                                 <xsl:if test="$method='GetMachineInfo'">
                                     <xsl:attribute name="selected">true</xsl:attribute>
                                 </xsl:if>
-                                <xsl:text>Machine Information</xsl:text>
+                                <xsl:value-of select="$hpccStrings/st[@id='MachineInfo']"/>
                             </option>
                             <xsl:if test="($clusterType = 'ROXIEMACHINES') and ($targetCluster = 0)">
                                 <option value="GetMetrics">
                                     <xsl:if test="$method='GetMetrics'">
                                         <xsl:attribute name="selected">true</xsl:attribute>
                                     </xsl:if>
-                                    <xsl:text>Get Roxie Metrics</xsl:text>
-                                </option>
-                            </xsl:if>
-              <!--option value="RemoteExec">
-                                <xsl:if test="$method='RemoteExec'">
-                                    <xsl:attribute name="selected">true</xsl:attribute>
-                                </xsl:if>
-                                <xsl:text>Remote Execution</xsl:text>
-                            </option-->
-                            <xsl:if test="$enableSNMP != 0 and $clusterType='' and ($targetCluster = 0)">
-                                <option value="Start">
-                                    <xsl:if test="$method='Start'">
-                                        <xsl:attribute name="selected">true</xsl:attribute>
-                                    </xsl:if>
-                                    <xsl:text>Start Server(s)</xsl:text>
-                                </option>
-                                <option value="Stop">
-                                    <xsl:if test="$method='Stop'">
-                                        <xsl:attribute name="selected">true</xsl:attribute>
-                                    </xsl:if>
-                                    <xsl:text>Stop Server(s)</xsl:text>
+                                    <xsl:value-of select="$hpccStrings/st[@id='GetRoxieMetrics']"/>
                                 </option>
                             </xsl:if>
                         </select>
@@ -382,9 +313,9 @@
                             <xsl:if test="boolean($getProcessorInfo)">
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
-                        </input>Get processor information</td>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='GetProcessorInformation']"/></td>
                     <td width="8"/>
-                    <td>Warn if CPU usage is over </td>
+                    <td><xsl:value-of select="$hpccStrings/st[@id='WarnIfCPUUsageIsOver']"/> </td>
                     <td align="left">
                         <input type="text" name="CpuThreshold" size="2" value="{$cpuThreshold}" maxlength="3"/> %</td>
                 </tr>
@@ -394,10 +325,10 @@
                             <xsl:if test="$getStorageInfo">
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
-                        </input>Get storage information
+                        </input><xsl:value-of select="$hpccStrings/st[@id='GetStorageInformation']"/>
                      </td>
                     <td width="8"/>
-                    <td>Warn if available memory is under </td>
+                    <td><xsl:value-of select="$hpccStrings/st[@id='WarnIfAvailableMemoryIsUnder']"/> </td>
                     <td align="left">
                         <input type="text" name="MemThreshold" size="2" value="{$memThreshold}" maxlength="6" onchange="adjustThresholdType('Mem', value)"/>
                         <select name="MemThresholdType" onchange="adjustThresholdValue('Mem', options[selectedIndex].value)">
@@ -422,7 +353,7 @@
                             <xsl:if test="$localFileSystemsOnly">
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
-                        </input><xsl:text>Local File Systems Only</xsl:text>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='LocalFileSystemsOnly']"/>
                     </td>
                 </tr>
                 <tr>
@@ -431,9 +362,9 @@
                             <xsl:if test="$getSoftwareInfo">
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
-                        </input>Get software information</td>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='GetSoftwareInformation']"/></td>
                     <td width="8"/>
-                    <td>Warn if available disk space is under </td>
+                    <td><xsl:value-of select="$hpccStrings/st[@id='WarnIfAvailableDiskSpaceIsUnder']"/> </td>
                     <td align="left">
                         <input type="text" name="DiskThreshold" size="2" value="{$diskThreshold}" maxlength="6" onchange="adjustThresholdType('Disk', value)"/>
                         <select name="DiskThresholdType" onchange="adjustThresholdValue('Disk', options[selectedIndex].value)">
@@ -458,27 +389,19 @@
                             <xsl:if test="$applyProcessFilter">
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
-                        </input>Show processes using filter</td>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='ShowProcessesUsingFilter']"/></td>
                     <td/>
           <xsl:choose>
             <xsl:when test="$enableSNMP != 0">
               <td>
-                Security String:<input type="password" id="SecurityString" name="SecurityString" size="17" value="{$securityString}"/>
+                <xsl:value-of select="$hpccStrings/st[@id='SecurityString']"/>:<input type="password" id="SecurityString" name="SecurityString" size="17" value="{$securityString}"/>
               </td>
               <td/>
             </xsl:when>
-            <!--xsl:otherwise>
-              <td>
-                User Name:<input type="text" name="UserName" size="17" value="{$username}"/>
-              </td>
-              <td>
-                Password:<input type="password" name="Password" size="17" value="{$password}"/>
-              </td>
-            </xsl:otherwise-->
           </xsl:choose>
             </tr>
                 <tr>
-                    <td colspan="2">Additional processes to filter: </td>
+                    <td colspan="2"><xsl:value-of select="$hpccStrings/st[@id='AdditionalProcessesToFilter']"/>: </td>
                     <td><input type="text" name="AddProcessesToFilter" id="AddProcessesToFilter" value="{$addProcessesToFilter}" size="35"/>
                     </td>
                 </tr>
@@ -488,11 +411,11 @@
                             <xsl:if test="$autoRefresh &gt; 0">
                                 <xsl:attribute name="checked">true</xsl:attribute>
                             </xsl:if>
-                        </input>Auto Refresh every <input type="text" id="edAutoRefresh" name="AutoRefresh" size="2" value="{$autoRefresh}" onblur="setReloadTimeout(this.value)">
+                        </input><xsl:value-of select="$hpccStrings/st[@id='AutoRefreshEvery']"/> <input type="text" id="edAutoRefresh" name="AutoRefresh" size="2" value="{$autoRefresh}" onblur="setReloadTimeout(this.value)">
                         <xsl:if test="$autoRefresh = 0">
                             <xsl:attribute name="disabled">true</xsl:attribute>
                         </xsl:if>
-                        </input> mins.
+                        </input> <xsl:value-of select="$hpccStrings/st[@id='Mins']"/>
                     </td>
                 </tr>
             </table>
@@ -502,78 +425,9 @@
                 <xsl:if test="$method != 'GetMetrics'">
                     <xsl:attribute name="style">display:none</xsl:attribute>
                 </xsl:if>
-                <!--table border="0">
-          <xsl:if test="$enableSNMP != 0">
-            <tr>
-              <td>Security String:</td>
-              <td>
-                <input type="password" id="SecurityString2" name="SecurityString2" size="15" value="{$securityString}"/>
-              </td>
-            </tr>
-          </xsl:if>
-                    <tr>
-                        <td/>
-                    </tr>
-                </table-->
             </div>
         </xsl:if>
-        <div id="RemoteExec">
-            <xsl:if test="$method != 'RemoteExec'">
-                <xsl:attribute name="style">display:none</xsl:attribute>
-            </xsl:if>
-            <table border="0">          
-                <tr>
-                    <td colspan="2">
-                        <table border="0" cellpadding="0">
-                            <tr>
-                                <td width="80">Command: </td>
-                                <td><input type="text" name="Command" size="30" value="{$command}"/></td>
-                            </tr>
-                            <tr>
-                                <td>User Name: </td>
-                                <td><input type="text" id="Key3" name="Key3" size="20" value=""/></td>
-                            </tr>
-                            <tr>
-                                <td>Password: </td>
-                                <td><input type="password" id="Key3" name="Key4" size="20" value=""/></td>
-                            </tr>
-                            <tr>
-                                <td colspan="2">
-                                    <input type="checkbox" name="Wait" align="left">
-                                        <xsl:if test="$waitUntilDone">
-                                            <xsl:attribute name="checked"/>
-                                        </xsl:if> Wait until done</input>
-                                </td>
-                            </tr>
-                        </table>
-                    </td>
-                </tr>
-            </table>
-        </div>
-        <div id="StartStop">
-            <xsl:if test="$method != 'Start' and $method != 'Stop'">
-                <xsl:attribute name="style">display:none</xsl:attribute>
-            </xsl:if>
-      <xsl:if test="$enableSNMP != 0">
-        <table border="0">          
-                  <tr>
-                      <td colspan="2">
-                          <table border="0" cellpadding="0">
-                              <tr>
-                                  <td>User Name: </td>
-                                  <td><input type="text" id="Key1" name="Key1" size="20" value=""/></td>
-                              </tr>
-                              <tr>
-                                  <td>Password: </td>
-                                  <td><input type="password" id="Key2" name="Key2" size="20" value=""/></td>
-                              </tr>
-                          </table>
-                      </td>
-                  </tr>
-              </table>
-      </xsl:if>
-    </div>
-    <input type="submit" value="Submit" id="submitBtn" onclick="return onClickSubmit()"/>
+    <input type="submit" value="{$hpccStrings/st[@id='Submit']}" id="submitBtn" onclick="return onClickSubmit()"/>
 </xsl:template>
 
 </xsl:stylesheet>

+ 31 - 0
esp/services/ws_machine/ws_machineService.cpp

@@ -179,6 +179,21 @@ void Cws_machineEx::init(IPropertyTree *cfg, const char *process, const char *se
     setupLegacyFilters();
 }
 
+StringBuffer& Cws_machineEx::getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage)
+{
+    context.getAcceptLanguage(acceptLanguage);
+    if (!acceptLanguage.length())
+    {
+        acceptLanguage.set("en");
+        return acceptLanguage;
+    }
+    acceptLanguage.setLength(2);
+    VStringBuffer languageFile("%ssmc_xslt/nls/%s/hpcc.xml", getCFD(), acceptLanguage.str());
+    if (!checkFileExists(languageFile.str()))
+        acceptLanguage.set("en");
+    return acceptLanguage;
+}
+
 bool Cws_machineEx::onGetMachineInfo(IEspContext &context, IEspGetMachineInfoRequest & req,
                                              IEspGetMachineInfoResponse & resp)
 {
@@ -216,11 +231,17 @@ bool Cws_machineEx::onGetMachineInfoEx(IEspContext &context, IEspGetMachineInfoR
         if (addresses.empty())
             throw MakeStringException(ECLWATCH_INVALID_IP_OR_COMPONENT, "No network address specified.");
 
+        double version = context.getClientVersion();
         CGetMachineInfoData machineInfoData;
         readMachineInfoRequest(context, true, true, true, true, true, addresses, NULL, machineInfoData);
         getMachineInfo(context, machineInfoData);
         if (machineInfoData.getMachineInfoTable().ordinality())
             resp.setMachines(machineInfoData.getMachineInfoTable());
+        if (version >= 1.12)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     catch(IException* e)
     {
@@ -1876,6 +1897,11 @@ void Cws_machineEx::setMachineInfoResponse(IEspContext& context, IEspGetMachineI
     char timeStamp[32];
     getTimeStamp(timeStamp);
     resp.setTimeStamp( timeStamp );
+    if (version >= 1.12)
+    {
+        StringBuffer acceptLanguage;
+        resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+    }
 }
 
 
@@ -1938,6 +1964,11 @@ void Cws_machineEx::setTargetClusterInfoResponse(IEspContext& context, IEspGetTa
     char timeStamp[32];
     getTimeStamp(timeStamp);
     resp.setTimeStamp( timeStamp );
+    if (version >= 1.12)
+    {
+        StringBuffer acceptLanguage;
+        resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+    }
 }
 
 void Cws_machineEx::setTargetClusterInfo(IPropertyTree* pTargetClusterTree, IArrayOf<IEspMachineInfoEx>& machineArray, IArrayOf<IEspTargetClusterInfo>& targetClusterInfoList)

+ 1 - 0
esp/services/ws_machine/ws_machineService.hpp

@@ -696,6 +696,7 @@ private:
     void doPostProcessing(CFieldInfoMap& myfieldInfoMap, CFieldMap&  myfieldMap);
     void processValue(const char *oid, const char *value, const bool bShow, CFieldInfoMap& myfieldInfoMap, CFieldMap&  myfieldMap);
     void addIpAddressesToBuffer( void** buffer, unsigned& count, const char* address);
+    StringBuffer& getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage);
 
     //Still used in StartStop/Rexec, so keep them for now.
     enum OpSysType { OS_Windows, OS_Solaris, OS_Linux };

+ 5 - 0
esp/services/ws_machine/ws_machineServiceMetrics.cpp

@@ -784,6 +784,11 @@ bool Cws_machineEx::onGetMetrics(IEspContext &context, IEspMetricsRequest &req,
         {
             resp.setAutoUpdate( req.getAutoUpdate() );
         }
+        if (version >= 1.12)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
         resp.setAutoRefresh( req.getAutoRefresh() );//loop back requested auto refresh timeout to output so javascript sets timeout
     }
     catch(IException* e)

+ 41 - 0
esp/services/ws_topology/ws_topologyService.cpp

@@ -86,6 +86,21 @@ void CWsTopologyEx::init(IPropertyTree *cfg, const char *process, const char *se
     m_enableSNMP = false;
 }
 
+StringBuffer& CWsTopologyEx::getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage)
+{
+    context.getAcceptLanguage(acceptLanguage);
+    if (!acceptLanguage.length())
+    {
+        acceptLanguage.set("en");
+        return acceptLanguage;
+    }
+    acceptLanguage.setLength(2);
+    VStringBuffer languageFile("%ssmc_xslt/nls/%s/hpcc.xml", getCFD(), acceptLanguage.str());
+    if (!checkFileExists(languageFile.str()))
+        acceptLanguage.set("en");
+    return acceptLanguage;
+}
+
 void CWsTopologyEx::loadThresholdValue(IPropertyTree* pServiceNode, const char* attrName, unsigned int& thresholdValue, 
                                                     bool& bThresholdIsPercentage)
 {
@@ -174,6 +189,12 @@ bool CWsTopologyEx::onTpLogFile(IEspContext &context,IEspTpLogFileRequest  &req,
         if (!type || !*type)
             throw MakeStringException(ECLWATCH_INVALID_FILE_NAME,"File type not specified.");
 
+        double version = context.getClientVersion();
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
         if (streq(type,"thormaster_log") || streq(type,"tpcomp_log"))
         {
             readTpLogFile(context, name, type, req, resp);
@@ -951,6 +972,11 @@ bool CWsTopologyEx::onTpClusterQuery(IEspContext &context, IEspTpClusterQueryReq
         {       
             resp.setEnableSNMP(m_enableSNMP);
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
 
         resp.setTpClusters(clusters);
     }
@@ -1096,6 +1122,11 @@ bool CWsTopologyEx::onTpTargetClusterQuery(IEspContext &context, IEspTpTargetClu
         {       
             resp.setPreflightProcessFilter(m_preflightProcessFilter);
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     catch(IException* e)
     {   
@@ -1267,6 +1298,11 @@ bool CWsTopologyEx::onTpServiceQuery(IEspContext &context, IEspTpServiceQueryReq
         {       
             resp.setPreflightProcessFilter(m_preflightProcessFilter);
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     catch(IException* e)
     {   
@@ -1333,6 +1369,11 @@ bool CWsTopologyEx::onTpMachineQuery(IEspContext &context, IEspTpMachineQueryReq
         {
             resp.setHasThorSpareProcess( hasThorSpareProcess );
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     catch(IException* e)
     {   

+ 1 - 1
esp/services/ws_topology/ws_topologyService.hpp

@@ -111,7 +111,7 @@ private:
     void loadThresholdValue(IPropertyTree* pServiceNode, const char* attrName, unsigned int& thresholdValue, 
                                     bool& bThresholdIsPercentage);
 
-    //void getThorXml(const char* ClusterName req.getName(),returnStr);
+    StringBuffer& getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage);
 public:
     IMPLEMENT_IINTERFACE;
     virtual ~CWsTopologyEx(){};