瀏覽代碼

HPCC-11306 Localise legacy ECLWatch pages embeded in new ECLWatch

Those legacy ECLWatch pages include System Servers page, Cluster
Processes page, Target Clusters page, as well as linked pages
from those three pages. Use HTTP Accept-Language header to decide
which language is displayed. Read display strings from a language
resource file. Display the strings on the legacy ECLWatch pages.

Signed-off-by: Kevin Wang kevin.wang@lexisnexis.com
Kevin Wang 11 年之前
父節點
當前提交
0f60f04297
共有 31 個文件被更改,包括 1639 次插入541 次删除
  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. 2 1
      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);
                 m_context->setClientVersion(0.0);
         }
         }
 
 
-        StringBuffer useragent;
+        StringBuffer useragent, acceptLanguage;
         getHeader("User-Agent", useragent);
         getHeader("User-Agent", useragent);
         m_context->setUseragent(useragent.str());
         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 )
     Install ( FILES ${iFILES} DESTINATION componentfiles/wsecl/wsecl COMPONENT Runtime )
 ENDFOREACH ( iFILES )
 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="clusterType" select="string($reqInfo/ClusterType)"/>
    <xsl:variable name="memThresholdType" select="number($reqInfo/MemThresholdType)"/>
    <xsl:variable name="memThresholdType" select="number($reqInfo/MemThresholdType)"/>
    <xsl:variable name="diskThresholdType" select="number($reqInfo/DiskThresholdType)"/>
    <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:variable name="memThreshold"><!-- from 0 to 100 (%)-->
       <xsl:choose>
       <xsl:choose>
@@ -244,7 +247,7 @@
                      <h1><xsl:value-of select="Exceptions"/></h1>
                      <h1><xsl:value-of select="Exceptions"/></h1>
                   </xsl:when>
                   </xsl:when>
                   <xsl:when test="not(TargetClusterInfoList)">
                   <xsl:when test="not(TargetClusterInfoList)">
-                     <h2>No target clusters selected!</h2>
+                     <h2><xsl:value-of select= "$hpccStrings/st[@id='NoTargetClustersSelected']"/></h2>
                   </xsl:when>
                   </xsl:when>
                   <xsl:otherwise>
                   <xsl:otherwise>
                       <center>
                       <center>
@@ -254,19 +257,19 @@
                               <th align="left">
                               <th align="left">
                               <h3>
                               <h3>
                                      <xsl:choose>                       
                                      <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:when test="$clusterName!=''">
                                         <xsl:choose>
                                         <xsl:choose>
                                                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                                                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                                                             </xsl:choose>
                                                             </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:value-of select="$clusterName"/>
                                         <xsl:text disable-output-escaping="yes">'</xsl:text>
                                         <xsl:text disable-output-escaping="yes">'</xsl:text>
                                     </xsl:when>
                                     </xsl:when>
-                                    <xsl:otherwise>Machine Information</xsl:otherwise>
+                                    <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='MachineInfo']"/></xsl:otherwise>
                                  </xsl:choose>
                                  </xsl:choose>
                               </h3>
                               </h3>
                               </th>
                               </th>
@@ -278,9 +281,9 @@
                                         <tr>
                                         <tr>
                                             <th id="selectAll" width="1%" style="padding-left:4px">
                                             <th id="selectAll" width="1%" style="padding-left:4px">
                                                 <input type="checkbox" id="TargetClusters.All" name="TargetClusters.ALL"
                                                 <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>
-                                            <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>
                                     </table>
                                     </table>
                                 </xsl:if>
                                 </xsl:if>
@@ -301,7 +304,7 @@
                                           </tr>
                                           </tr>
                                       </table>
                                       </table>
                                 </xsl:if>
                                 </xsl:if>
-                                <b>Fetched: </b>
+                                <b><xsl:value-of select="$hpccStrings/st[@id='Fetched']"/>: </b>
                                 <xsl:value-of select="TimeStamp"/>
                                 <xsl:value-of select="TimeStamp"/>
                                 <br/>
                                 <br/>
                                 <br/>
                                 <br/>
@@ -337,7 +340,7 @@
       <tr class="grey">
       <tr class="grey">
         <td valign="top" width="20">
         <td valign="top" width="20">
           <input type="checkbox" id="TargetClusters.{count(preceding::TargetClusterInfo)}" name="TargetClusters.{count(preceding::TargetClusterInfo)}" checked="1"
           <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>
         <td align="left" width="20">
         <td align="left" width="20">
           <a href="javascript:showDetails('{$type}', '{$name}');">
           <a href="javascript:showDetails('{$type}', '{$name}');">
@@ -383,18 +386,21 @@
                <xsl:choose>
                <xsl:choose>
                   <xsl:when test="../../../Columns/Item">
                   <xsl:when test="../../../Columns/Item">
                      <xsl:for-each select="../../../Columns/Item[text()='Condition']">
                      <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>
                      <xsl:for-each select="../../../Columns/Item[text()='State']">
                      <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>
                      <xsl:for-each select="../../../Columns/Item[text()='UpTime']">
                      <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>
                      </xsl:for-each>
                      <!--process Processes first-->
                      <!--process Processes first-->
                      <xsl:for-each select="../../../Columns/Item[text()='Processes']">
                      <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>
                         </th>
                      </xsl:for-each>
                      </xsl:for-each>
                      <!--process disk storage next-->
                      <!--process disk storage next-->
@@ -402,20 +408,23 @@
                         <th align="center"><xsl:value-of select="."/></th>
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
                      </xsl:for-each>
                      <!--process physical memory and swap next-->      
                      <!--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>
                      </xsl:for-each>
                      <!--process CPU Load next -->      
                      <!--process CPU Load next -->      
                      <xsl:for-each select="../../../Columns/Item[starts-with(text(), 'CPU') and contains(text(), 'Load')]">
                      <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>
                      </xsl:for-each>
                      <!--process Up Time next -->
                      <!--process Up Time next -->
                      <xsl:for-each select="../../../Columns/Item[text()='Up Time']">
                      <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:for-each>
                   </xsl:when>
                   </xsl:when>
                   <xsl:otherwise>
                   <xsl:otherwise>
-                     <th>Description</th>
+                     <th><xsl:value-of select= "$hpccStrings/st[@id='Description']"/></th>
                   </xsl:otherwise>
                   </xsl:otherwise>
                </xsl:choose>
                </xsl:choose>
             </tr>
             </tr>
@@ -481,16 +490,16 @@
                                     <xsl:attribute name="bgcolor">#FF8800</xsl:attribute>
                                     <xsl:attribute name="bgcolor">#FF8800</xsl:attribute>
                                 </xsl:if>
                                 </xsl:if>
                           <xsl:choose>
                           <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='7'">-</xsl:when>
                     <xsl:when test="$cond='-1'">
                     <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:when>
                                 </xsl:choose>
                                 </xsl:choose>
                             </td>
                             </td>
@@ -499,17 +508,17 @@
                             <td id="state_{position()}">
                             <td id="state_{position()}">
                             <xsl:variable name="state" select="ComponentInfo/State"/>
                             <xsl:variable name="state" select="ComponentInfo/State"/>
                               <xsl:choose>
                               <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="$state='7'">-</xsl:when>
                                         <xsl:when test="$cond='-1'">
                                         <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:when>
                                     </xsl:choose>
                                     </xsl:choose>
                             </td>
                             </td>
@@ -518,8 +527,8 @@
                         <td id="uptime_{position()}">
                         <td id="uptime_{position()}">
                             <xsl:choose>
                             <xsl:choose>
                                     <xsl:when test="$cond='-1' or $cond='7'">
                                     <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:when>
                                     <xsl:otherwise>
                                     <xsl:otherwise>
                                     <xsl:value-of select="ComponentInfo/UpTime"/>
                                     <xsl:value-of select="ComponentInfo/UpTime"/>
@@ -566,8 +575,11 @@
                                             </xsl:otherwise>
                                             </xsl:otherwise>
                                         </xsl:choose>
                                         </xsl:choose>
                      </xsl:variable>
                      </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:variable>
                     <xsl:attribute name="title">
                     <xsl:attribute name="title">
                       <xsl:value-of select="$caption"/>,<xsl:value-of select="$processNames"/>
                       <xsl:value-of select="$caption"/>,<xsl:value-of select="$processNames"/>
@@ -689,12 +701,12 @@
         <xsl:attribute name="title">
         <xsl:attribute name="title">
           <xsl:value-of select="$memNode/Description"/>
           <xsl:value-of select="$memNode/Description"/>
           <xsl:text disable-output-escaping="yes"><![CDATA[ <br /> ]]></xsl:text>
           <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: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:attribute>
         <xsl:choose>
         <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:otherwise>
             <xsl:if test="$threshold != 0">
             <xsl:if test="$threshold != 0">
               <xsl:choose>
               <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: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: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 / -->
     <!--note that /FileListResponse/Path is guaranteed to contain no backslashes and end with / -->
     <xsl:variable name="baseUrl">
     <xsl:variable name="baseUrl">
         <xsl:for-each select="/FileListResponse">
         <xsl:for-each select="/FileListResponse">
@@ -50,6 +54,7 @@
                     var originalPath = '<xsl:value-of select="FileListResponse/Path"/>';
                     var originalPath = '<xsl:value-of select="FileListResponse/Path"/>';
                     var os = <xsl:value-of select="/FileListResponse/OS"/>;
                     var os = <xsl:value-of select="/FileListResponse/OS"/>;
                     var dironly = <xsl:value-of select="/FileListResponse/DirectoryOnly"/>;
                     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[
                     <xsl:text disable-output-escaping="yes"><![CDATA[
                     var nSelected = -1;
                     var nSelected = -1;
                     var nPrevClass = null;
                     var nPrevClass = null;
@@ -84,7 +89,7 @@
                         }
                         }
                         else
                         else
                         {
                         {
-                            alert('Lost reference to parent window.  Please traverse the path again!');
+                            alert(lostReferenceToParentWindowAlert);
                             unselect();
                             unselect();
                         }
                         }
                     }
                     }
@@ -120,15 +125,11 @@
     
     
     
     
     <xsl:template match="FileListResponse">
     <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:choose>
                 <xsl:when test="substring(Path, 2, 1)=':'">
                 <xsl:when test="substring(Path, 2, 1)=':'">
                     <xsl:value-of select="translate(Path, '/', '\')"/>
                     <xsl:value-of select="translate(Path, '/', '\')"/>
@@ -137,9 +138,8 @@
                     <xsl:value-of select="Path"/>
                     <xsl:value-of select="Path"/>
                 </xsl:otherwise>
                 </xsl:otherwise>
             </xsl:choose>
             </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/>
         <p/>
         <form method="POST">
         <form method="POST">
             <table class="sort-table" id="resultsTable" align="center" width="100%">
             <table class="sort-table" id="resultsTable" align="center" width="100%">
@@ -148,9 +148,9 @@
                         <xsl:if test="/FileListResponse/DirectoryOnly=1">
                         <xsl:if test="/FileListResponse/DirectoryOnly=1">
                             <th></th>
                             <th></th>
                         </xsl:if>
                         </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>
                     </tr>
                 </thead>                
                 </thead>                
                 <colgroup>
                 <colgroup>
@@ -176,16 +176,16 @@
                     </xsl:when>
                     </xsl:when>
                     <xsl:otherwise>
                     <xsl:otherwise>
                         <tr>
                         <tr>
-                            <td colspan="3">No items.</td>
+                            <td colspan="3"><xsl:value-of select= "$hpccStrings/st[@id='NoItems']"/></td>
                         </tr>
                         </tr>
                     </xsl:otherwise>
                     </xsl:otherwise>
                 </xsl:choose>
                 </xsl:choose>
             </table>
             </table>
             <input type="hidden" id="selected"/>
             <input type="hidden" id="selected"/>
             <p align="center">
             <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>
                 <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>
             </p>
         </form>
         </form>
     </xsl:template>
     </xsl:template>
@@ -231,7 +231,7 @@
             </xsl:attribute>
             </xsl:attribute>
             <xsl:if test="/FileListResponse/DirectoryOnly=1">
             <xsl:if test="/FileListResponse/DirectoryOnly=1">
                 <td>
                 <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>
                 </td>
             </xsl:if>
             </xsl:if>
             <td align="left">
             <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="enableSNMP" select="/TpMachineQueryResponse/EnableSNMP"/>
     <xsl:variable name="addProcessesToFilter" select="/TpMachineQueryResponse/PreflightProcessFilter"/>
     <xsl:variable name="addProcessesToFilter" select="/TpMachineQueryResponse/PreflightProcessFilter"/>
     <xsl:variable name="numSlaveNodes" select="count(/TpMachineQueryResponse/TpMachines/TpMachine/Type[text()='ThorSlaveProcess'])"/>
     <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">
   <xsl:template match="/TpMachineQueryResponse">
         <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
         <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
@@ -156,6 +159,7 @@
                 <xsl:if test="$SwapNode">
                 <xsl:if test="$SwapNode">
                     var OldIP = '<xsl:value-of select="/TpMachineQueryResponse/OldIP"/>';
                     var OldIP = '<xsl:value-of select="/TpMachineQueryResponse/OldIP"/>';
                     var Path = '<xsl:value-of select="/TpMachineQueryResponse/Path"/>';
                     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[
                     <xsl:text disable-output-escaping="yes"><![CDATA[
                     singleSelect = true;
                     singleSelect = true;
                     function onSwapNode()          
                     function onSwapNode()          
@@ -166,7 +170,7 @@
                         var cbValue = checkbox.value;
                         var cbValue = checkbox.value;
                         var NewIP = cbValue.substring(0, cbValue.indexOf(':'));
                         var NewIP = cbValue.substring(0, cbValue.indexOf(':'));
                     
                     
-                        if (confirm('Swap ' + OldIP + ' with ' + NewIP + ' ?'))
+                        if (confirm(confirmSwapStr + ' ' + OldIP + ' - ' + NewIP + '?'))
                         {
                         {
                             var s = "/WsTopology/TpSwapNode?Cluster=" + ClusterName;
                             var s = "/WsTopology/TpSwapNode?Cluster=" + ClusterName;
                             s += "&OldIP=" + OldIP;
                             s += "&OldIP=" + OldIP;
@@ -194,21 +198,21 @@
                 <input type="hidden" name="Addresses.itemcount" value=""/>
                 <input type="hidden" name="Addresses.itemcount" value=""/>
                 <h3>
                 <h3>
                     <xsl:choose>
                     <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:when test="$clusterName!=''">
                             <xsl:choose>
                             <xsl:choose>
                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                             </xsl:choose>
                             </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:value-of select="$clusterName"/>
                             <xsl:text disable-output-escaping="yes">'</xsl:text>
                             <xsl:text disable-output-escaping="yes">'</xsl:text>
                         </xsl:when>
                         </xsl:when>
-                        <xsl:otherwise>Nodes</xsl:otherwise>
+                        <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='Nodes']"/></xsl:otherwise>
                     </xsl:choose>
                     </xsl:choose>
                 </h3>
                 </h3>
                 <table class="sort-table" id="resultsTable">
                 <table class="sort-table" id="resultsTable">
@@ -229,7 +233,7 @@
                             <th>
                             <th>
                                 <xsl:if test="TpMachine[2] and not($SwapNode)">
                                 <xsl:if test="TpMachine[2] and not($SwapNode)">
                                     <xsl:attribute name="id">selectAll1</xsl:attribute>
                                     <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:if test="not($SwapNode)">
                                             <xsl:attribute name="checked">true</xsl:attribute>
                                             <xsl:attribute name="checked">true</xsl:attribute>
                                         </xsl:if>
                                         </xsl:if>
@@ -238,15 +242,15 @@
                             </th>
                             </th>
                             <th align="center">Name</th>
                             <th align="center">Name</th>
                                 <xsl:if test="/TpMachineQueryResponse/HasThorSpareProcess/text()='1' and /TpMachineQueryResponse/Type='THORMACHINES'">
                                 <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>
                                 </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">
                             <xsl:if test="$numSlaveNodes > 0">
-                                <th>Slave Number</th>
+                                <th><xsl:value-of select= "$hpccStrings/st[@id='SlaveNumber']"/></th>
                             </xsl:if>
                             </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>
                         </tr>
                     </thead>
                     </thead>
                     <tbody>
                     <tbody>
@@ -257,20 +261,20 @@
                     <table class="select-all">
                     <table class="select-all">
                         <tr>
                         <tr>
                             <th id="selectAll2">
                             <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:if test="not($SwapNode)">
                     <xsl:attribute name="checked">true</xsl:attribute>
                     <xsl:attribute name="checked">true</xsl:attribute>
                   </xsl:if>
                   </xsl:if>
                 </input>
                 </input>
                             </th>
                             </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>
                         </tr>
                     </table>
                     </table>
                 </xsl:if>
                 </xsl:if>
                 <xsl:choose>
                 <xsl:choose>
                     <xsl:when test="$SwapNode">
                     <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>
                     <xsl:when test="$ShowPreflightInfo">
                     <xsl:when test="$ShowPreflightInfo">
                         <xsl:call-template name="ShowPreflightControls">
                         <xsl:call-template name="ShowPreflightControls">
@@ -297,11 +301,11 @@
             </xsl:choose>
             </xsl:choose>
             <xsl:variable name="displayType">
             <xsl:variable name="displayType">
                 <xsl:choose>
                 <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:otherwise>
                         <xsl:value-of select="Type"/>
                         <xsl:value-of select="Type"/>
                     </xsl:otherwise>
                     </xsl:otherwise>
@@ -330,13 +334,7 @@
                         <xsl:value-of select="concat(Netaddress, '%26CompType%3d', Type, '%26OsType%3d', OS, '%26Directory%3d')"/>
                         <xsl:value-of select="concat(Netaddress, '%26CompType%3d', Type, '%26OsType%3d', OS, '%26Directory%3d')"/>
                     </xsl:variable>
                     </xsl:variable>
                     <xsl:variable name="pageCaption">
                     <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:variable>
                     <xsl:attribute name="onclick">
                     <xsl:attribute name="onclick">
                         <xsl:text disable-output-escaping="yes">return popup('</xsl:text>
                         <xsl:text disable-output-escaping="yes">return popup('</xsl:text>
@@ -351,7 +349,7 @@
                         <xsl:value-of select="OS"/>
                         <xsl:value-of select="OS"/>
                         <xsl:text>);</xsl:text>
                         <xsl:text>);</xsl:text>
                     </xsl:attribute>
                     </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>            
                 </a>            
                 <xsl:value-of select="Name"/>
                 <xsl:value-of select="Name"/>
             </td>
             </td>
@@ -359,8 +357,8 @@
         <td>
         <td>
                   <xsl:if test="Type='ThorSlaveProcess'">
                   <xsl:if test="Type='ThorSlaveProcess'">
                       <a href="/WsTopology/TpMachineQuery?Type=THORSPARENODES&amp;Cluster={$clusterName}&amp;OldIP={Netaddress}&amp;Path={/TpMachineQueryResponse/Path}" 
                       <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>
                       </a>
                   </xsl:if>
                   </xsl:if>
               </td>
               </td>
@@ -386,7 +384,7 @@
                     <xsl:when test="OS=0">Windows</xsl:when>
                     <xsl:when test="OS=0">Windows</xsl:when>
                     <xsl:when test="OS=1">Solaris</xsl:when>
                     <xsl:when test="OS=1">Solaris</xsl:when>
                     <xsl:when test="OS=2">Linux</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>
                 </xsl:choose>
             </td>
             </td>
         </tr>
         </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="enableSNMP" select="/TpServiceQueryResponse/EnableSNMP"/>
 <xsl:variable name="addProcessesToFilter" select="/TpServiceQueryResponse/PreflightProcessFilter"/>
 <xsl:variable name="addProcessesToFilter" select="/TpServiceQueryResponse/PreflightProcessFilter"/>
 <xsl:variable name="numFTSlaves" select="count(/TpServiceQueryResponse/ServiceList/TpFTSlaves/TpFTSlave/TpMachines/TpMachine)"/>
 <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">
   <xsl:template match="/TpServiceQueryResponse">
     <script type="text/javascript" language="javascript">
     <script type="text/javascript" language="javascript">
@@ -61,7 +63,7 @@
           <script type="text/javascript" src="/esp/files/scripts/espdefault.js">&#160;</script>
           <script type="text/javascript" src="/esp/files/scripts/espdefault.js">&#160;</script>
         </head>
         </head>
         <body class="yui-skin-sam" onload="nof5();">
         <body class="yui-skin-sam" onload="nof5();">
-                    <h3>No system services defined!</h3>
+                    <h3><xsl:value-of select="$hpccStrings/st[@id='NoSystemServicesDefined']"/></h3>
                 </body>
                 </body>
             </xsl:when>
             </xsl:when>
             <xsl:otherwise>
             <xsl:otherwise>
@@ -203,7 +205,7 @@
     </head>
     </head>
   <body class="yui-skin-sam" onload="nof5();onLoad()">
   <body class="yui-skin-sam" onload="nof5();onLoad()">
         <form id="listitems" action="/ws_machine/GetMachineInfo" method="post">
         <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%">
             <table id="resultsTable" class="sort-table" width="100%">
             <colgroup>
             <colgroup>
@@ -216,105 +218,98 @@
             </colgroup>
             </colgroup>
             <tr class="grey">
             <tr class="grey">
                 <th id="selectAll1" align="left" width="1%">
                 <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>
-                <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>
             </tr>
 
 
             <input type="hidden" name="Addresses.itemcount" value=""/>
             <input type="hidden" name="Addresses.itemcount" value=""/>
             <xsl:call-template name="showMachines">
             <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="nodes" select="TpDalis/TpDali"/>
                 <xsl:with-param name="compType" select="'DaliServerProcess'"/>
                 <xsl:with-param name="compType" select="'DaliServerProcess'"/>
             </xsl:call-template>
             </xsl:call-template>
 
 
             <xsl:call-template name="showMachines">
             <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="showQueue" select="1"/>
                 <xsl:with-param name="nodes" select="TpDfuServers/TpDfuServer"/>
                 <xsl:with-param name="nodes" select="TpDfuServers/TpDfuServer"/>
                 <xsl:with-param name="compType" select="'DfuServerProcess'"/>
                 <xsl:with-param name="compType" select="'DfuServerProcess'"/>
             </xsl:call-template>
             </xsl:call-template>
             
             
             <xsl:call-template name="showMachines">
             <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="showCheckbox" select="1"/>
                 <xsl:with-param name="nodes" select="TpDropZones/TpDropZone"/>
                 <xsl:with-param name="nodes" select="TpDropZones/TpDropZone"/>
                 <xsl:with-param name="checked" select="0"/>
                 <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             </xsl:call-template>                    
             
             
                         <xsl:call-template name="showMachines">
                         <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="showAgentExec" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclAgents/TpEclAgent"/>
                           <xsl:with-param name="nodes" select="TpEclAgents/TpEclAgent"/>
                           <xsl:with-param name="compType" select="'EclAgentProcess'"/>
                           <xsl:with-param name="compType" select="'EclAgentProcess'"/>
                         </xsl:call-template>
                         </xsl:call-template>
 
 
                         <xsl:call-template name="showMachines">
                         <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="showQueue" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclServers/TpEclServer"/>
                           <xsl:with-param name="nodes" select="TpEclServers/TpEclServer"/>
                           <xsl:with-param name="compType" select="'EclServerProcess'"/>
                           <xsl:with-param name="compType" select="'EclServerProcess'"/>
                         </xsl:call-template>
                         </xsl:call-template>
 
 
                         <xsl:call-template name="showMachines">
                         <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="showQueue" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclCCServers/TpEclServer"/>
                           <xsl:with-param name="nodes" select="TpEclCCServers/TpEclServer"/>
                           <xsl:with-param name="compType" select="'EclCCServerProcess'"/>
                           <xsl:with-param name="compType" select="'EclCCServerProcess'"/>
                         </xsl:call-template>
                         </xsl:call-template>
 
 
                         <xsl:call-template name="showMachines">
                         <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="showQueue" select="1"/>
                           <xsl:with-param name="nodes" select="TpEclSchedulers/TpEclScheduler"/>
                           <xsl:with-param name="nodes" select="TpEclSchedulers/TpEclScheduler"/>
                           <xsl:with-param name="compType" select="'EclSchedulerProcess'"/>
                           <xsl:with-param name="compType" select="'EclSchedulerProcess'"/>
                         </xsl:call-template>
                         </xsl:call-template>
 
 
                         <xsl:call-template name="showMachines">
                         <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="showBindings" select="1"/>
                 <xsl:with-param name="nodes" select="TpEspServers/TpEspServer"/>
                 <xsl:with-param name="nodes" select="TpEspServers/TpEspServer"/>
                 <xsl:with-param name="compType" select="'EspProcess'"/>
                 <xsl:with-param name="compType" select="'EspProcess'"/>
             </xsl:call-template>
             </xsl:call-template>
             
             
             <xsl:call-template name="showMachines">
             <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="nodes" select="TpFTSlaves/TpFTSlave"/>
                 <xsl:with-param name="checked" select="0"/>
                 <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             </xsl:call-template>                    
             
             
             <xsl:call-template name="showMachines">
             <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:with-param name="nodes" select="TpGenesisServers/TpGenesisServer"/>
             </xsl:call-template>                    
             </xsl:call-template>                    
             
             
             <xsl:call-template name="showMachines">
             <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="nodes" select="TpLdapServers/TpLdapServer"/>
                 <xsl:with-param name="showDirectory" select="0"/>
                 <xsl:with-param name="showDirectory" select="0"/>
                 <xsl:with-param name="checked" select="0"/>
                 <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             </xsl:call-template>                    
             
             
             <xsl:call-template name="showMachines">
             <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="nodes" select="TpMySqlServers/TpMySqlServer"/>
                 <xsl:with-param name="showDirectory" select="0"/>
                 <xsl:with-param name="showDirectory" select="0"/>
                     <xsl:with-param name="checked" select="0"/>
                     <xsl:with-param name="checked" select="0"/>
             </xsl:call-template>                    
             </xsl:call-template>                    
             
             
             <xsl:call-template name="showMachines">
             <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="nodes" select="TpSashaServers/TpSashaServer"/>
                 <xsl:with-param name="compType" select="'SashaServerProcess'"/>
                 <xsl:with-param name="compType" select="'SashaServerProcess'"/>
             </xsl:call-template>
             </xsl:call-template>
@@ -328,9 +323,9 @@
         <table cellpadding="0" width="100%">
         <table cellpadding="0" width="100%">
             <tr>
             <tr>
                 <th id="selectAll2" width="1%" style="padding-left:4px">
                 <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>
-                <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>
             <tr><td height="20"/></tr>
             <tr><td height="20"/></tr>
         </table>
         </table>
@@ -371,7 +366,7 @@
             <th colspan="7">
             <th colspan="7">
                 <br/>
                 <br/>
                 <xsl:choose>
                 <xsl:choose>
-                    <xsl:when test="$caption='FT Slaves'">
+                    <xsl:when test="$caption=$hpccStrings/st[@id='FTSlaves']">
                         <a href="javascript:toggleComponent('FTSlave', false)">
                         <a href="javascript:toggleComponent('FTSlave', false)">
                             <img id="FTSlaveExpLink" border="0" src="&filePathEntity;/img/folder.gif" align="middle"/>
                             <img id="FTSlaveExpLink" border="0" src="&filePathEntity;/img/folder.gif" align="middle"/>
                                 <xsl:value-of select="$caption"/>
                                 <xsl:value-of select="$caption"/>
@@ -393,7 +388,7 @@
                             <xsl:value-of select="concat('row_', $compName, '_', position())"/>
                             <xsl:value-of select="concat('row_', $compName, '_', position())"/>
                         </xsl:attribute>
                         </xsl:attribute>
                     </xsl:if>
                     </xsl:if>
-                    <xsl:if test="$caption='FT Slaves'">
+                    <xsl:if test="$caption=$hpccStrings/st[@id='FTSlaves']">
                         <xsl:attribute name="id">
                         <xsl:attribute name="id">
                             <xsl:value-of select="concat('row_FTSlave_', position())"/>
                             <xsl:value-of select="concat('row_FTSlave_', position())"/>
                         </xsl:attribute>
                         </xsl:attribute>
@@ -416,7 +411,7 @@
                                     <xsl:when test="$showQueue">
                                     <xsl:when test="$showQueue">
                                         <td width="54%">
                                         <td width="54%">
                                                 <xsl:value-of select="../../Name"/>
                                                 <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>
                                         <td width="45%" align="center"><xsl:value-of select="../../Queue"/></td>
                                         <td width="45%" align="center"><xsl:value-of select="../../Queue"/></td>
                                     </xsl:when>
                                     </xsl:when>
@@ -427,7 +422,7 @@
                                                     <a href="javascript:toggleDetails('{../../Name}_{position()}')">
                                                     <a href="javascript:toggleDetails('{../../Name}_{position()}')">
                                                         <img id="toggle_{../../Name}_{position()}" border="0" src="&filePathEntity;/img/folder.gif" align="middle"/>
                                                         <img id="toggle_{../../Name}_{position()}" border="0" src="&filePathEntity;/img/folder.gif" align="middle"/>
                                                         <xsl:value-of select="../../Name"/>
                                                         <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>
                                                     </a>
                                                 </xsl:when>
                                                 </xsl:when>
                         <xsl:when test="$showAgentExec">
                         <xsl:when test="$showAgentExec">
@@ -519,12 +514,7 @@
                                                         <xsl:text>%26Directory%3d</xsl:text>
                                                         <xsl:text>%26Directory%3d</xsl:text>
                                                     </xsl:variable>
                                                     </xsl:variable>
                                                     <xsl:variable name="pageCaption">
                                                     <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:variable>
                                                     <xsl:attribute name="href">
                                                     <xsl:attribute name="href">
                                                         <xsl:if test="$compType!='EclAgentProcess'">
                                                         <xsl:if test="$compType!='EclAgentProcess'">
@@ -548,8 +538,7 @@
                                                         <xsl:value-of select="OS"/>
                                                         <xsl:value-of select="OS"/>
                                                         <xsl:text>);</xsl:text>
                                                         <xsl:text>);</xsl:text>
                                                     </xsl:attribute>
                                                     </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>
                                                 </a>
                                             </xsl:if>
                                             </xsl:if>
                                         </td>
                                         </td>
@@ -558,11 +547,7 @@
                                                 <xsl:when test="$compType!='' and ($compType!='EclAgentProcess' or OS=0)">
                                                 <xsl:when test="$compType!='' and ($compType!='EclAgentProcess' or OS=0)">
                           <xsl:variable name="captionLen" select="string-length($caption)-1"/>
                           <xsl:variable name="captionLen" select="string-length($caption)-1"/>
                           <xsl:variable name="href0">
                           <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:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text>%26FileType%3dcfg%26Directory%3d</xsl:text>
                               <xsl:text>%26FileType%3dcfg%26Directory%3d</xsl:text>
@@ -571,9 +556,8 @@
                               <xsl:value-of select="$compType"/>
                               <xsl:value-of select="$compType"/>
                               <xsl:text>%26OsType%3d</xsl:text>
                               <xsl:text>%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
                               <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:when>
                                                 <xsl:otherwise>
                                                 <xsl:otherwise>
                                                     <img border="0" src="/esp/files_/img/blank.png" width="14" height="14"/>
                                                     <img border="0" src="/esp/files_/img/blank.png" width="14" height="14"/>
@@ -599,10 +583,10 @@
                                         <table class="blueline" cellspacing="0">
                                         <table class="blueline" cellspacing="0">
                                             <thead>
                                             <thead>
                                                 <tr>
                                                 <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>
                                                 </tr>
                                             </thead>
                                             </thead>
                                             <tbody>
                                             <tbody>
@@ -689,10 +673,9 @@
                   <table class="blueline" cellspacing="0">
                   <table class="blueline" cellspacing="0">
                     <thead>
                     <thead>
                       <tr>
                       <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>
                       </tr>
                     </thead>
                     </thead>
                     <tbody>
                     <tbody>
@@ -708,12 +691,7 @@
                         <td width="14">
                         <td width="14">
                           <a>
                           <a>
                             <xsl:attribute name="href">
                             <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:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text>%26FileType%3dcfg%26Directory%3d</xsl:text>
                               <xsl:text>%26FileType%3dcfg%26Directory%3d</xsl:text>
@@ -722,8 +700,8 @@
                               <xsl:text>%26OsType%3d</xsl:text>
                               <xsl:text>%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
                               <xsl:value-of select="OS"/>
                             </xsl:attribute>
                             </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>
                           </a>
                         </td>
                         </td>
                       </tr>
                       </tr>

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

@@ -44,9 +44,12 @@
   <xsl:variable name="showDetails" select="/TpTargetClusterQueryResponse/ShowDetails"/>
   <xsl:variable name="showDetails" select="/TpTargetClusterQueryResponse/ShowDetails"/>
   <xsl:variable name="fromTargetClusterPage" select="1"/>
   <xsl:variable name="fromTargetClusterPage" select="1"/>
   <xsl:variable name="countTargetClusters" select="count(/TpTargetClusterQueryResponse/TpTargetClusters/TpTargetCluster)"/>
   <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:include href="&xsltPathEntity;/ws_machine/preflightControls.xslt"/>
-  
+
   <xsl:template match="TpTargetClusterQueryResponse">
   <xsl:template match="TpTargetClusterQueryResponse">
         <html>
         <html>
             <head>
             <head>
@@ -231,7 +234,7 @@
         <xsl:call-template name="GenerateScriptForPreflightControls"/>
         <xsl:call-template name="GenerateScriptForPreflightControls"/>
       </head>
       </head>
             <body class="yui-skin-sam" onload="nof5();onLoad();">
             <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">
                 <form id="listitems" action="/ws_machine/GetTargetClusterInfo" method="post">
                     <input type="hidden" name="TargetClusters.itemcount" value=""/>
                     <input type="hidden" name="TargetClusters.itemcount" value=""/>
                     <xsl:if test="TpTargetClusters/TpTargetCluster[2]">
                     <xsl:if test="TpTargetClusters/TpTargetCluster[2]">
@@ -239,9 +242,9 @@
                             <tr>
                             <tr>
                                 <th id="selectAll" width="1%" style="padding-left:4px">
                                 <th id="selectAll" width="1%" style="padding-left:4px">
                                     <input type="checkbox" id="TargetClusters.All" name="TargetClusters.ALL"
                                     <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>
-                                <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>
                         </table>
                         </table>
                     </xsl:if>
                     </xsl:if>
@@ -256,9 +259,9 @@
                             <tr>
                             <tr>
                                 <th id="selectAll2" width="1%" style="padding-left:4px">
                                 <th id="selectAll2" width="1%" style="padding-left:4px">
                                     <input type="checkbox" id="TargetClusters.All2" name="TargetClusters.ALL2"
                                     <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>
-                                <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>
                             <tr>
                             <tr>
                                 <td height="20"/>
                                 <td height="20"/>
@@ -290,16 +293,16 @@
 
 
     <xsl:template name="show-cluster">
     <xsl:template name="show-cluster">
         <xsl:param name="type"/>
         <xsl:param name="type"/>
-    <xsl:param name="name"/>
+        <xsl:param name="name"/>
         <table id="resultsTable" class="sort-table" width="100%">
         <table id="resultsTable" class="sort-table" width="100%">
             <tr class="grey">
             <tr class="grey">
                 <td valign="top" width="20">
                 <td valign="top" width="20">
           <input type="checkbox" id="TargetClusters.{count(preceding::TpTargetCluster)}" name="TargetClusters.{count(preceding::TpTargetCluster)}"
           <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>
         <td align="left" width="20">
         <td align="left" width="20">
           <a href="javascript:showDetails('{$type}', '{$name}');">
           <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>
           </a>
         </td>
         </td>
         <!--xsl:if test="type='RoxieCluster'">
         <!--xsl:if test="type='RoxieCluster'">
@@ -336,12 +339,12 @@
                   </colgroup>
                   </colgroup>
                   <tr bgcolor="#C0C0C0">
                   <tr bgcolor="#C0C0C0">
                     <th/>
                     <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>
                   </tr>
 
 
                   <xsl:if test="count(TpClusters/TpCluster)">
                   <xsl:if test="count(TpClusters/TpCluster)">
@@ -415,9 +418,9 @@
             </xsl:variable>
             </xsl:variable>
             <xsl:variable name="type4">
             <xsl:variable name="type4">
               <xsl:choose>
               <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:choose>
             </xsl:variable>
             </xsl:variable>
             <xsl:variable name="type3" select="translate($type2, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
             <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=0">Windows</xsl:when>
                   <xsl:when test="OS=2">Linux</xsl:when>
                   <xsl:when test="OS=2">Linux</xsl:when>
                   <xsl:when test="OS=1">Solaris</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>
                 </xsl:choose>
               </td>
               </td>
               <td/>
               <td/>
               <td>
               <td>
                 <xsl:variable name="href0">
                 <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: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:value-of select="concat($type2, 'Cluster%26CompName%3d', Name, '%26Directory%3d', $absolutePath, '%26OsType%3d', OS)"/>
                 </xsl:variable>
                 </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"/>
                 <xsl:value-of select="Directory"/>
               </td>
               </td>
             </tr>
             </tr>
@@ -504,14 +505,14 @@
                       </colgroup>
                       </colgroup>
                       <thead>
                       <thead>
                         <tr>
                         <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'">
                           <xsl:if test="Type='ThorCluster' and HasThorSpareProcess/text()='1'">
-                            <th>Action</th>
+                            <th><xsl:value-of select="$hpccStrings/st[@id='Action']"/></th>
                           </xsl:if>
                           </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>
                         </tr>
                       </thead>
                       </thead>
                       <tbody>
                       <tbody>
@@ -536,10 +537,10 @@
               </xsl:variable>
               </xsl:variable>
               <xsl:variable name="type4">
               <xsl:variable name="type4">
                 <xsl:choose>
                 <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:choose>
               </xsl:variable>              <xsl:variable name="compName" select="../../Name"/>
               </xsl:variable>              <xsl:variable name="compName" select="../../Name"/>
               <tr onmouseenter="this.bgColor = '#F0F0FF'">
               <tr onmouseenter="this.bgColor = '#F0F0FF'">
@@ -599,7 +600,7 @@
                 <xsl:when test="OS=0">Windows</xsl:when>
                 <xsl:when test="OS=0">Windows</xsl:when>
                 <xsl:when test="OS=2">Linux</xsl:when>
                 <xsl:when test="OS=2">Linux</xsl:when>
                 <xsl:when test="OS=1">Solaris</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>
               </xsl:choose>
             </td>
             </td>
             <td align="center">
             <td align="center">
@@ -668,13 +669,7 @@
                               <xsl:text disable-output-escaping="yes">%26Directory%3d</xsl:text>
                               <xsl:text disable-output-escaping="yes">%26Directory%3d</xsl:text>
                             </xsl:variable>
                             </xsl:variable>
                             <xsl:variable name="pageCaption">
                             <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:variable>
                             <xsl:attribute name="href">
                             <xsl:attribute name="href">
                               <xsl:if test="$compType!='EclAgentProcess'">
                               <xsl:if test="$compType!='EclAgentProcess'">
@@ -698,7 +693,7 @@
                               <xsl:value-of select="OS"/>
                               <xsl:value-of select="OS"/>
                               <xsl:text disable-output-escaping="yes">);</xsl:text>
                               <xsl:text disable-output-escaping="yes">);</xsl:text>
                             </xsl:attribute>
                             </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>
                           </a>
                         </xsl:if>
                         </xsl:if>
                       </td>
                       </td>
@@ -707,11 +702,7 @@
                           <xsl:when test="$compType!='' and ($compType!='EclAgentProcess' or OS=0)">
                           <xsl:when test="$compType!='' and ($compType!='EclAgentProcess' or OS=0)">
                             <xsl:variable name="captionLen" select="string-length($caption)-1"/>
                             <xsl:variable name="captionLen" select="string-length($caption)-1"/>
                             <xsl:variable name="href0">
                             <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:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text disable-output-escaping="yes">%26FileType%3dcfg%26Directory%3d</xsl:text>
                               <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:text disable-output-escaping="yes">%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
                               <xsl:value-of select="OS"/>
                             </xsl:variable>
                             </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:when>
                           <xsl:otherwise>
                           <xsl:otherwise>
                             <img border="0" src="/esp/files_/img/blank.png" width="14" height="14"/>
                             <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">
                   <table class="blueline" border="2" frame="box" rules="groups">
                     <thead>
                     <thead>
                       <tr>
                       <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>WUQueueName</th-->
-                        <th align="center">Configuration</th>
+                        <th align="center"><xsl:value-of select="$hpccStrings/st[@id='Configuration']"/></th>
                       </tr>
                       </tr>
                     </thead>
                     </thead>
                     <tbody>
                     <tbody>
@@ -802,12 +792,7 @@
                         <td>
                         <td>
                           <a>
                           <a>
                             <xsl:attribute name="href">
                             <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:text disable-output-escaping="yes">&amp;inner=/WsTopology/TpGetComponentFile%3fNetAddress%3d</xsl:text>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:value-of select="Netaddress"/>
                               <xsl:text disable-output-escaping="yes">%26FileType%3dcfg%26Directory%3d</xsl:text>
                               <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:text disable-output-escaping="yes">%26OsType%3d</xsl:text>
                               <xsl:value-of select="OS"/>
                               <xsl:value-of select="OS"/>
                             </xsl:attribute>
                             </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>
                           </a>
                           <xsl:value-of select="Directory"/>
                           <xsl:value-of select="Directory"/>
                         </td>
                         </td>
@@ -901,7 +886,7 @@
             <xsl:when test="OS=0">Windows</xsl:when>
             <xsl:when test="OS=0">Windows</xsl:when>
             <xsl:when test="OS=1">Solaris</xsl:when>
             <xsl:when test="OS=1">Solaris</xsl:when>
             <xsl:when test="OS=2">Linux</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>
           </xsl:choose>
       </td>
       </td>
     </tr>
     </tr>

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

@@ -21,6 +21,9 @@
     
     
     <xsl:variable name="apos">'</xsl:variable>
     <xsl:variable name="apos">'</xsl:variable>
   <xsl:variable name="enableSNMP" select="/TpClusterQueryResponse/EnableSNMP"/>
   <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">
   <xsl:template match="TpClusterQueryResponse">
     <html>
     <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) 
               function getConfigXML(url) 
               {
               {
                 document.location.href = url;
                 document.location.href = url;
@@ -92,7 +70,7 @@
           <xsl:choose>
           <xsl:choose>
             <xsl:when test="TpClusters/TpCluster">
             <xsl:when test="TpClusters/TpCluster">
               <table class="sort-table" id="clustersTable">
               <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>
                 <colgroup>
                   <col width="2%" align="center"/>
                   <col width="2%" align="center"/>
                   <col width="15%" align="left"/>
                   <col width="15%" align="left"/>
@@ -102,11 +80,11 @@
                   <col width="28%" align="left"/>
                   <col width="28%" align="left"/>
                 </colgroup>
                 </colgroup>
                 <tr class="grey">
                 <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>
                 </tr>
                 <xsl:apply-templates select="TpClusters/TpCluster">
                 <xsl:apply-templates select="TpClusters/TpCluster">
                   <xsl:sort select="Name"/>
                   <xsl:sort select="Name"/>
@@ -114,8 +92,8 @@
               </table>
               </table>
             </xsl:when>
             </xsl:when>
             <xsl:otherwise>
             <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:otherwise>
           </xsl:choose>
           </xsl:choose>
         </form>
         </form>
@@ -141,9 +119,9 @@
       <xsl:variable name="type3" select="translate($type2, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
       <xsl:variable name="type3" select="translate($type2, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
       <xsl:variable name="type4">
       <xsl:variable name="type4">
         <xsl:choose>
         <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:choose>
       </xsl:variable>
       </xsl:variable>
       <xsl:variable name="absolutePath">
       <xsl:variable name="absolutePath">
@@ -182,13 +160,11 @@
             </xsl:variable>
             </xsl:variable>
       <td width="45" nowrap="true">
       <td width="45" nowrap="true">
         <xsl:variable name="href0">
         <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: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:value-of select="concat($type2, 'Cluster%26CompName%3d', Name, '%26Directory%3d', $absolutePath, '%26OsType%3d', OS)"/>
         </xsl:variable>
         </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>
       <td>
       <td>
         <a  href="/WsTopology/TpMachineQuery?Type={$type3}MACHINES&amp;Cluster={Name}&amp;Path={Path}&amp;Directory={Directory}&amp;LogDirectory={$logPath}">
         <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=0">Windows</xsl:when>
           <xsl:when test="OS=2">Linux</xsl:when>
           <xsl:when test="OS=2">Linux</xsl:when>
           <xsl:when test="OS=1">Solaris</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>
         </xsl:choose>
       </td>
       </td>
       <td>
       <td>

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

@@ -34,6 +34,9 @@
     
     
     <xsl:variable name="firstrows" select="TpLogFileResponse/FirstRows"/>
     <xsl:variable name="firstrows" select="TpLogFileResponse/FirstRows"/>
     <xsl:variable name="lastrows" select="TpLogFileResponse/LastRows"/>
     <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">
     <xsl:template match="TpLogFileResponse">
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
     <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 hasDate = <xsl:value-of select="$hasdate"/>;
           var prevPage = <xsl:value-of select="$prevpage"/>;
           var prevPage = <xsl:value-of select="$prevpage"/>;
           var nextPage = <xsl:value-of select="$nextpage"/>;
           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[
           <xsl:text disable-output-escaping="yes"><![CDATA[
             // This function gets called when the window has completely loaded.
             // This function gets called when the window has completely loaded.
@@ -185,14 +198,14 @@
                 var nb = document.getElementById('PageNumber').value
                 var nb = document.getElementById('PageNumber').value
                 if(!nb)
                 if(!nb)
                 {
                 {
-                  alert("'PageNumber' field should be defined.");
+                  alert(pageNumberNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
                 var d=parseInt(nb);
                 var d=parseInt(nb);
                 if(isNaN(d))
                 if(isNaN(d))
                 {
                 {
-                  alert("Invalid data in 'PageNumber' field");
+                  alert(invalidPageNumberAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -204,7 +217,7 @@
               {
               {
                 if(!document.getElementById('First').value)
                 if(!document.getElementById('First').value)
                 {
                 {
-                  alert("'First rows' field should be defined.");
+                  alert(firstRowsNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -212,7 +225,7 @@
                 var d=parseInt(firstRows);
                 var d=parseInt(firstRows);
                 if(isNaN(d))
                 if(isNaN(d))
                 {
                 {
-                  alert("Invalid data in 'First rows' field");
+                  alert(invalidFirstRowsAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -222,7 +235,7 @@
               {
               {
                 if(!document.getElementById('Hour').value)
                 if(!document.getElementById('Hour').value)
                 {
                 {
-                  alert("'Last hours' field should be defined.");
+                  alert(lastHoursNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -230,7 +243,7 @@
                 var d=parseInt(hours);
                 var d=parseInt(hours);
                 if(isNaN(d))
                 if(isNaN(d))
                 {
                 {
-                  alert("Invalid data in 'Last hours' field");
+                  alert(invalidLastHoursAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -240,7 +253,7 @@
               {
               {
                 if(!document.getElementById('Last').value)
                 if(!document.getElementById('Last').value)
                 {
                 {
-                  alert("'Last rows' field should be defined.");
+                  alert(lastRowsNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -248,7 +261,7 @@
                 var d=parseInt(lastRows);
                 var d=parseInt(lastRows);
                 if(isNaN(d))
                 if(isNaN(d))
                 {
                 {
-                  alert("Invalid data in a 'Last rows' field");
+                  alert(invalidLastRowsAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -260,7 +273,7 @@
                 var dt=document.getElementById('To').value;
                 var dt=document.getElementById('To').value;
                 if(!df && !dt)
                 if(!df && !dt)
                 {
                 {
-                  alert("Either 'Date from' or 'to' field should be defined.");
+                  alert(timeNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -269,7 +282,7 @@
                   startDate = formatTime(df);
                   startDate = formatTime(df);
                   if (startDate == null)
                   if (startDate == null)
                   {
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                     return false;
                   }
                   }
                 }
                 }
@@ -279,7 +292,7 @@
                   endDate = formatTime(dt);
                   endDate = formatTime(dt);
                   if (endDate == null)
                   if (endDate == null)
                   {
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                     return false;
                   }
                   }
                 }
                 }
@@ -303,7 +316,7 @@
               {
               {
                 if(firstRows == '')
                 if(firstRows == '')
                 {
                 {
-                  alert("'First rows' field should be defined.");
+                  alert(firstRowsNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -313,7 +326,7 @@
               {
               {
                 if(lastRows == '')
                 if(lastRows == '')
                 {
                 {
-                  alert("'Last rows' field should be defined.");
+                  alert(lastRowsNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -329,7 +342,7 @@
                 var d=parseInt(lastHours);
                 var d=parseInt(lastHours);
                 if(isNaN(d))
                 if(isNaN(d))
                 {
                 {
-                  alert("Invalid data in 'Last hours' field");
+                  alert(invalidLastHoursAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -339,7 +352,7 @@
               {
               {
                 if(startDate == '' && endDate == '')
                 if(startDate == '' && endDate == '')
                 {
                 {
-                  alert("Either 'Time from' or 'to' field should be defined.");
+                  alert(timeNotDefinedAlert);
                   return false;
                   return false;
                 }
                 }
 
 
@@ -348,7 +361,7 @@
                   startDate = formatTime(startDate);
                   startDate = formatTime(startDate);
                   if (startDate == null)
                   if (startDate == null)
                   {
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                     return false;
                   }
                   }
                 }
                 }
@@ -358,7 +371,7 @@
                   endDate = formatTime(endDate);
                   endDate = formatTime(endDate);
                   if (endDate == null)
                   if (endDate == null)
                   {
                   {
-                    alert("Invalid data in a 'Time' field");
+                    alert(invalidTimeAlert);
                     return false;
                     return false;
                   }
                   }
                 }
                 }
@@ -481,13 +494,13 @@
               <td>
               <td>
                 <table>
                 <table>
                   <tr>
                   <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>
                   <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>
                   <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>
                   </tr>
                 </table>
                 </table>
               </td>
               </td>
@@ -495,11 +508,11 @@
                 <table>
                 <table>
                   <tr>
                   <tr>
                     <td><input type="radio" name="FilterRB" value="1" onclick="onRBChanged(1)"/></td>
                     <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>
                   <tr>
                   <tr>
                     <td><input type="radio" name="FilterRB" value="5" onclick="onRBChanged(5)"/></td>
                     <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>
                   </tr>
                 </table>
                 </table>
               </td>
               </td>
@@ -509,23 +522,23 @@
                     <xsl:choose>
                     <xsl:choose>
                       <xsl:when test="HasDate=1">
                       <xsl:when test="HasDate=1">
                         <td><input type="radio" name="FilterRB" value="6"  onclick="onRBChanged(6)"/>
                         <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:when>
                       <xsl:otherwise>
                       <xsl:otherwise>
                         <td><input type="radio" name="FilterRB" value="6"  onclick="onRBChanged(6)" disabled="true"/>
                         <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:otherwise>
                     </xsl:choose>
                     </xsl:choose>
                   </tr>
                   </tr>
                   <tr>
                   <tr>
                     <xsl:choose>
                     <xsl:choose>
                       <xsl:when test="HasDate=1">
                       <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:when>
                       <xsl:otherwise>
                       <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:otherwise>
                     </xsl:choose>
                     </xsl:choose>
                   </tr>
                   </tr>
@@ -547,13 +560,13 @@
                 <input type="button" id="Download" class="sbutton"  size="40" value="Download" onClick="return onDownload(0)"/>
                 <input type="button" id="Download" class="sbutton"  size="40" value="Download" onClick="return onDownload(0)"/>
               </td>
               </td>
               <xsl:if test="FilterType=0 or FilterType=3 or FilterType=4">
               <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>
               </xsl:if>
             </tr>
             </tr>
           </table>
           </table>
           <div id="ViewLogData">
           <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>
           </div>
         </form>
         </form>
         <iframe id="DataFrame" name="DataFrame" style="display:none; visibility:hidden;"></iframe>
         <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_path;
     StringAttr      m_peer;
     StringAttr      m_peer;
     StringAttr      m_useragent;
     StringAttr      m_useragent;
+    StringAttr      m_acceptLanguage;
 
 
     StringBuffer    m_servName;
     StringBuffer    m_servName;
     StringBuffer    m_servHost;
     StringBuffer    m_servHost;
@@ -298,6 +299,19 @@ public:
         return useragent;
         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()
     virtual IProperties *   queryRequestParameters()
     {
     {
         if (!m_queryparams)
         if (!m_queryparams)

+ 3 - 0
esp/scm/esp.ecm

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

+ 2 - 1
esp/scm/ws_fs.ecm

@@ -509,6 +509,7 @@ ESPresponse [exceptions_inline] FileListResponse
     string Mask;
     string Mask;
     int    OS;
     int    OS;
     bool DirectoryOnly(false);
     bool DirectoryOnly(false);
+    [min_ver("1.10")] string AcceptLanguage;
     ESParray<ESPStruct PhysicalFileStruct> files;   
     ESParray<ESPStruct PhysicalFileStruct> files;   
 };
 };
 
 
@@ -606,7 +607,7 @@ ESPresponse [exceptions_inline] UploadFilesResponse
 };
 };
 
 
 ESPservice [
 ESPservice [
-    version("1.09"), default_client_version("1.09"),
+    version("1.10"), default_client_version("1.10"),
     exceptions_inline("./smc_xslt/exceptions.xslt")] FileSpray
     exceptions_inline("./smc_xslt/exceptions.xslt")] FileSpray
 {
 {
     ESPuses ESPstruct DFUWorkunit;
     ESPuses ESPstruct DFUWorkunit;

+ 5 - 1
esp/scm/ws_machine.ecm

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

+ 6 - 2
esp/scm/ws_topology.ecm

@@ -315,6 +315,7 @@ ESPresponse [exceptions_inline]TpTargetClusterQueryResponse
     string MemThresholdType;
     string MemThresholdType;
     string DiskThresholdType;
     string DiskThresholdType;
     [min_ver("1.13")] string PreflightProcessFilter;
     [min_ver("1.13")] string PreflightProcessFilter;
+    [min_ver("1.20")] string AcceptLanguage;
 
 
     ESParray<ESPstruct TpTargetCluster> TpTargetClusters;
     ESParray<ESPstruct TpTargetCluster> TpTargetClusters;
 };
 };
@@ -327,6 +328,7 @@ ESPrequest TpClusterQueryRequest
 ESPresponse [exceptions_inline]TpClusterQueryResponse
 ESPresponse [exceptions_inline]TpClusterQueryResponse
 {
 {
     [min_ver("1.08")] bool EnableSNMP;
     [min_ver("1.08")] bool EnableSNMP;
+    [min_ver("1.20")] string AcceptLanguage;
     ESParray<ESPstruct TpCluster> TpClusters;
     ESParray<ESPstruct TpCluster> TpClusters;
 };
 };
 
 
@@ -406,6 +408,7 @@ ESPresponse [exceptions_inline] TpMachineQueryResponse
     string DiskThresholdType;
     string DiskThresholdType;
     [min_ver("1.13")] string PreflightProcessFilter;
     [min_ver("1.13")] string PreflightProcessFilter;
     [min_ver("1.08")] bool EnableSNMP;
     [min_ver("1.08")] bool EnableSNMP;
+    [min_ver("1.20")] string AcceptLanguage;
     ESParray<ESPstruct TpMachine> TpMachines;
     ESParray<ESPstruct TpMachine> TpMachines;
 };
 };
 
 
@@ -422,6 +425,7 @@ ESPresponse [nil_remove, exceptions_inline] TpServiceQueryResponse
     [min_ver("1.07")] bool EncapsulatedSystem;
     [min_ver("1.07")] bool EncapsulatedSystem;
     [min_ver("1.08")] bool EnableSNMP;
     [min_ver("1.08")] bool EnableSNMP;
     [min_ver("1.13")] string PreflightProcessFilter;
     [min_ver("1.13")] string PreflightProcessFilter;
+    [min_ver("1.20")] string AcceptLanguage;
     string MemThresholdType;
     string MemThresholdType;
     string DiskThresholdType;
     string DiskThresholdType;
     ESPstruct TpServices ServiceList;
     ESPstruct TpServices ServiceList;
@@ -501,7 +505,7 @@ ESPresponse [exceptions_inline] TpLogFileResponse
     [min_ver("1.05")] int PrevPage(-1);
     [min_ver("1.05")] int PrevPage(-1);
     [min_ver("1.05")] int NextPage(-1);
     [min_ver("1.05")] int NextPage(-1);
     [min_ver("1.06")] int TotalPages;
     [min_ver("1.06")] int TotalPages;
-    
+    [min_ver("1.20")] string AcceptLanguage;
     [http_content("application/octet-stream")] binary thefile;
     [http_content("application/octet-stream")] binary thefile;
 };
 };
 
 
@@ -561,7 +565,7 @@ ESPresponse [exceptions_inline,encode(0)] TpThorStatusResponse
     int AutoRefresh;
     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 TpBinding;
     ESPuses ESPstruct TpCluster;
     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)
 void ParsePath(const char * fullPath, StringBuffer &ip, StringBuffer &filePath, StringBuffer &title)
 {
 {
     ip.clear();
     ip.clear();
@@ -2676,6 +2692,7 @@ bool CFileSprayEx::onFileList(IEspContext &context, IEspFileListRequest &req, IE
         if (!path || !*path)
         if (!path || !*path)
             throw MakeStringException(ECLWATCH_INVALID_INPUT, "Path not specified.");
             throw MakeStringException(ECLWATCH_INVALID_INPUT, "Path not specified.");
 
 
+        double version = context.getClientVersion();
         const char* netaddr = req.getNetaddr();
         const char* netaddr = req.getNetaddr();
         const char* mask = req.getMask();
         const char* mask = req.getMask();
         bool directoryOnly = req.getDirectoryOnly();
         bool directoryOnly = req.getDirectoryOnly();
@@ -2754,6 +2771,11 @@ bool CFileSprayEx::onFileList(IEspContext &context, IEspFileListRequest &req, IE
         if (mask && *mask)
         if (mask && *mask)
             resp.setMask(mask);
             resp.setMask(mask);
 
 
+        if (version >= 1.10)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
         resp.setDirectoryOnly(directoryOnly);
         resp.setDirectoryOnly(directoryOnly);
     }
     }
     catch(IException* e)
     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 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, StringBuffer &title);
     bool ParseLogicalPath(const char * pLogicalPath, const char* cluster, StringBuffer &folder, StringBuffer &title, StringBuffer &defaultFolder, StringBuffer &defaultReplicateFolder);
     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__
 #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="clusterType" select="string($reqInfo/ClusterType)"/>
    <xsl:variable name="memThresholdType" select="number($reqInfo/MemThresholdType)"/>
    <xsl:variable name="memThresholdType" select="number($reqInfo/MemThresholdType)"/>
    <xsl:variable name="diskThresholdType" select="number($reqInfo/DiskThresholdType)"/>
    <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:variable name="memThreshold"><!-- from 0 to 100 (%)-->
       <xsl:choose>
       <xsl:choose>
          <xsl:when test="$reqInfo/MemThreshold">
          <xsl:when test="$reqInfo/MemThreshold">
@@ -94,20 +97,21 @@
                <xsl:choose>
                <xsl:choose>
                   <xsl:when test="$SwapNode">
                   <xsl:when test="$SwapNode">
                      var swapNode = true;
                      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 table = document.getElementById('resultsTable');
                             var row = table.rows(lastClicked);
                             var row = table.rows(lastClicked);
                            var checkbox = row.cells(0).children[0];
                            var checkbox = row.cells(0).children[0];
                            var cbValue = checkbox.value;
                            var cbValue = checkbox.value;
                         var NewIP = cbValue.substring(0, cbValue.indexOf(':'));
                         var NewIP = cbValue.substring(0, cbValue.indexOf(':'));
                                               
                                               
-                        if (confirm('Swap ' + OldIP + ' with ' + NewIP + ' ?'))
+                        if (confirm(confirmSwapStr + ' ' + OldIP + ' - ' + NewIP + ' ?'))
                         {
                         {
                                 var s = "/WsTopology/TpSwapNode?Cluster=" + ClusterName;
                                 var s = "/WsTopology/TpSwapNode?Cluster=" + ClusterName;
                                 s += "&OldIP=" + OldIP;
                                 s += "&OldIP=" + OldIP;
@@ -180,7 +184,7 @@
                      <h1><xsl:value-of select="Exceptions"/></h1>
                      <h1><xsl:value-of select="Exceptions"/></h1>
                   </xsl:when>
                   </xsl:when>
                   <xsl:when test="not(Machines)">
                   <xsl:when test="not(Machines)">
-                     <h2>No machines selected!</h2>
+                     <h2><xsl:value-of select= "$hpccStrings/st[@id='NoMachinesSelected']"/></h2>
                   </xsl:when>
                   </xsl:when>
                   <xsl:otherwise>
                   <xsl:otherwise>
                       <center>
                       <center>
@@ -190,20 +194,20 @@
                               <th align="left">
                               <th align="left">
                               <h3>
                               <h3>
                                      <xsl:choose>                       
                                      <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:when test="$clusterName!=''">
                                         <xsl:choose>
                                         <xsl:choose>
                                                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                                                 <xsl:when test="$clusterType='ROXIEMACHINES'">Roxie </xsl:when>
                                                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                                                 <xsl:when test="$clusterType='THORMACHINES'">Thor </xsl:when>
                                                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                                                                 <xsl:when test="$clusterType='HOLEMACHINES'">Hole </xsl:when>
                                                             </xsl:choose>
                                                             </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:value-of select="$clusterName"/>
                                         <xsl:text disable-output-escaping="yes">'</xsl:text>
                                         <xsl:text disable-output-escaping="yes">'</xsl:text>
                                     </xsl:when>
                                     </xsl:when>
-                                    <xsl:otherwise>Machine Information</xsl:otherwise>
+                                    <xsl:otherwise><xsl:value-of select= "$hpccStrings/st[@id='MachineInfo']"/></xsl:otherwise>
                                  </xsl:choose>
                                  </xsl:choose>
                               </h3>
                               </h3>
                               </th>
                               </th>
@@ -213,11 +217,11 @@
                                                     <xsl:apply-templates select="Machines"/>                                                    
                                                     <xsl:apply-templates select="Machines"/>                                                    
                                                     <xsl:choose>
                                                     <xsl:choose>
                                       <xsl:when test="$SwapNode">
                                       <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>
                                       <xsl:otherwise>
                                       <xsl:otherwise>
-                                        <b>Fetched: </b>
+                                        <b><xsl:value-of select= "$hpccStrings/st[@id='Fetched']"/>: </b>
                                         <xsl:value-of select="TimeStamp"/>
                                         <xsl:value-of select="TimeStamp"/>
                                         <br/>
                                         <br/>
                                         <br/>
                                         <br/>
@@ -258,29 +262,32 @@
                <th width="5">
                <th width="5">
                   <xsl:if test="MachineInfoEx[2] and not($SwapNode)">
                   <xsl:if test="MachineInfoEx[2] and not($SwapNode)">
                      <xsl:attribute name="id">selectAll1</xsl:attribute>
                      <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>
                   </xsl:if>
                </th>
                </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">
                <xsl:if test="$numSlaveNodes > 0">
-                  <th>Slave Number</th>
+                  <th><xsl:value-of select= "$hpccStrings/st[@id='SlaveNumber']"/></th>
                </xsl:if>
                </xsl:if>
                <xsl:choose>
                <xsl:choose>
                   <xsl:when test="../Columns/Item">
                   <xsl:when test="../Columns/Item">
                      <xsl:for-each select="../Columns/Item[text()='Condition']">
                      <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>
                      <xsl:for-each select="../Columns/Item[text()='State']">
                      <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>
                      <xsl:for-each select="../Columns/Item[text()='UpTime']">
                      <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>
                      </xsl:for-each>
                      <!--process Processes first-->
                      <!--process Processes first-->
                      <xsl:for-each select="../Columns/Item[text()='Processes']">
                      <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>
                         </th>
                      </xsl:for-each>
                      </xsl:for-each>
                      <!--process disk storage next-->
                      <!--process disk storage next-->
@@ -288,20 +295,23 @@
                         <th align="center"><xsl:value-of select="."/></th>
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
                      </xsl:for-each>
                      <!--process physical memory and swap next-->      
                      <!--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>
                      </xsl:for-each>
                      <!--process CPU Load next -->      
                      <!--process CPU Load next -->      
                      <xsl:for-each select="../Columns/Item[starts-with(text(), 'CPU') and contains(text(), 'Load')]">
                      <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>
                      </xsl:for-each>
                      <!--process Up Time next -->
                      <!--process Up Time next -->
                      <xsl:for-each select="../Columns/Item[text()='Up Time']">
                      <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:for-each>
                   </xsl:when>
                   </xsl:when>
                   <xsl:otherwise>
                   <xsl:otherwise>
-                     <th>Description</th>
+                     <th><xsl:value-of select= "$hpccStrings/st[@id='Description']"/></th>
                   </xsl:otherwise>
                   </xsl:otherwise>
                </xsl:choose>
                </xsl:choose>
             </tr>
             </tr>
@@ -324,9 +334,9 @@
          <table  class="select-all">
          <table  class="select-all">
             <tr>
             <tr>
                <th id="selectAll2">
                <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>
-               <th align="left" colspan="6">Select All / None</th>
+               <th align="left" colspan="6"><xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></th>
             </tr>
             </tr>
          </table>
          </table>
       </xsl:if>
       </xsl:if>
@@ -392,16 +402,16 @@
                                     <xsl:attribute name="bgcolor">#FF8800</xsl:attribute>
                                     <xsl:attribute name="bgcolor">#FF8800</xsl:attribute>
                                 </xsl:if>
                                 </xsl:if>
                           <xsl:choose>
                           <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='7'">-</xsl:when>
                     <xsl:when test="$cond='-1'">
                     <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:when>
                                 </xsl:choose>
                                 </xsl:choose>
                             </td>
                             </td>
@@ -410,17 +420,17 @@
                             <td id="state_{position()}">
                             <td id="state_{position()}">
                             <xsl:variable name="state" select="ComponentInfo/State"/>
                             <xsl:variable name="state" select="ComponentInfo/State"/>
                               <xsl:choose>
                               <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="$state='7'">-</xsl:when>
                                         <xsl:when test="$cond='-1'">
                                         <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:when>
                                     </xsl:choose>
                                     </xsl:choose>
                             </td>
                             </td>
@@ -429,8 +439,8 @@
                         <td id="uptime_{position()}">
                         <td id="uptime_{position()}">
                             <xsl:choose>
                             <xsl:choose>
                                     <xsl:when test="$cond='-1' or $cond='7'">
                                     <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:when>
                                     <xsl:otherwise>
                                     <xsl:otherwise>
                                     <xsl:value-of select="ComponentInfo/UpTime"/>
                                     <xsl:value-of select="ComponentInfo/UpTime"/>
@@ -477,8 +487,11 @@
                                             </xsl:otherwise>
                                             </xsl:otherwise>
                                         </xsl:choose>
                                         </xsl:choose>
                      </xsl:variable>
                      </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:variable>
                     <xsl:attribute name="title">
                     <xsl:attribute name="title">
                       <xsl:value-of select="$caption"/>,<xsl:value-of select="$processNames"/>
                       <xsl:value-of select="$caption"/>,<xsl:value-of select="$processNames"/>
@@ -600,12 +613,12 @@
         <xsl:attribute name="title">
         <xsl:attribute name="title">
           <xsl:value-of select="$memNode/Description"/>
           <xsl:value-of select="$memNode/Description"/>
           <xsl:text disable-output-escaping="yes"><![CDATA[ <br /> ]]></xsl:text>
           <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: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:attribute>
         <xsl:choose>
         <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:otherwise>
             <xsl:if test="$threshold != 0">
             <xsl:if test="$threshold != 0">
               <xsl:choose>
               <xsl:choose>

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

@@ -23,6 +23,9 @@
   <xsl:variable name="autoupdatechecked" select="/MetricsResponse/AutoUpdate"/>
   <xsl:variable name="autoupdatechecked" select="/MetricsResponse/AutoUpdate"/>
   <xsl:variable name="clusterName" select="/MetricsResponse/Cluster"/>
   <xsl:variable name="clusterName" select="/MetricsResponse/Cluster"/>
   <xsl:variable name="selectAllChecked" select="/MetricsResponse/SelectAllChecked"/>
   <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-->
   <!--define acceptable percentage deviation from mean-->
    
    
@@ -69,6 +72,7 @@
          var reloadTimeout = 0;
          var reloadTimeout = 0;
          var idCount = 0;
          var idCount = 0;
          var checkboxIDs = new Array();
          var checkboxIDs = new Array();
+         var viewColumnsStr = '<xsl:value-of select="$hpccStrings/st[@id='ViewColumns']"/>';
 
 
          // This function gets called when the window has completely loaded.
          // This function gets called when the window has completely loaded.
          // It starts the reload timer with a default time value.
          // It starts the reload timer with a default time value.
@@ -311,7 +315,7 @@
                          s +='<tr><td><hr size="2"></td></tr>';
                          s +='<tr><td><hr size="2"></td></tr>';
 
 
                   var numRows = i > 5 ? 5 : i;
                   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 += s;
                   s1 += '<tr><th align="center" colspan="' + numRows + '"><hr/>' + 
                   s1 += '<tr><th align="center" colspan="' + numRows + '"><hr/>' + 
                           '<input type="button" value="Close" onclick="parent.contextMenu.hide()"/>' +
                           '<input type="button" value="Close" onclick="parent.contextMenu.hide()"/>' +
@@ -402,7 +406,7 @@
          </head>
          </head>
          
          
          <body onload="setReloadFunction('reloadPage');onLoad()">
          <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">
             <form id="listitems" action="/ws_machine/GetMetrics" method="post">
               <input type="hidden" name="Cluster" value="{$clusterName}"/>
               <input type="hidden" name="Cluster" value="{$clusterName}"/>
               <input type="hidden" id="SelectAllChecked" name="SelectAllChecked" value="{$selectAllChecked}"/>
               <input type="hidden" id="SelectAllChecked" name="SelectAllChecked" value="{$selectAllChecked}"/>
@@ -420,7 +424,7 @@
                 </colgroup-->
                 </colgroup-->
                <thead>
                <thead>
                <tr>
                <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"/>
                   <xsl:apply-templates select="FieldInformation/FieldInfo"/>
                </tr>
                </tr>
                </thead>
                </thead>
@@ -440,7 +444,7 @@
                            <xsl:attribute name="onmouseleave">bgColor='#FFFFFF'</xsl:attribute>
                            <xsl:attribute name="onmouseleave">bgColor='#FFFFFF'</xsl:attribute>
                         </xsl:otherwise>
                         </xsl:otherwise>
                      </xsl:choose>
                      </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">
                      <xsl:for-each select="FieldInformation/FieldInfo">
                         <td id="cell_{position()}_mean" >
                         <td id="cell_{position()}_mean" >
                           <xsl:if test="Hide=1">
                           <xsl:if test="Hide=1">
@@ -486,11 +490,11 @@
                         <xsl:attribute name="checked">false</xsl:attribute>b
                         <xsl:attribute name="checked">false</xsl:attribute>b
                       </xsl:otherwise>
                       </xsl:otherwise>
                     </xsl:choose-->
                     </xsl:choose-->
-                    Auto update metrics when View Columns changing.
+                    <xsl:value-of select="$hpccStrings/st[@id='AutoUpdateMetricsWhenViewColumnsChanging']"/>
                   </input>
                   </input>
                 </td>
                 </td>
                 <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:choose>
                       <xsl:when test="$autoUpdate = true">
                       <xsl:when test="$autoUpdate = true">
                         <xsl:attribute name="disabled">true</xsl:attribute>
                         <xsl:attribute name="disabled">true</xsl:attribute>
@@ -505,7 +509,7 @@
             </table>
             </table>
             <br/>
             <br/>
             <br/>
             <br/>
-            <b>View Columns:</b>
+            <b><xsl:value-of select="$hpccStrings/st[@id='ViewColumns']"/>:</b>
             <table id="viewTable" width="100%">
             <table id="viewTable" width="100%">
                <tr/>
                <tr/>
                <tr>
                <tr>
@@ -516,11 +520,11 @@
                <table>
                <table>
                   <tr>
                   <tr>
                      <th id="selectAll1" colspan="5">
                      <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:if test="$selectAllChecked &gt; 0">
                            <xsl:attribute name="checked">true</xsl:attribute>
                            <xsl:attribute name="checked">true</xsl:attribute>
                          </xsl:if>
                          </xsl:if>
-                       Select all / none</input>
+                       <xsl:value-of select="$hpccStrings/st[@id='SelectAllOrNone']"/></input>
                      </th>
                      </th>
                   </tr>
                   </tr>
                </table>
                </table>
@@ -531,17 +535,17 @@
             <xsl:if test="$autoRefresh &gt; 0">
             <xsl:if test="$autoRefresh &gt; 0">
                <xsl:attribute name="checked">true</xsl:attribute>
                <xsl:attribute name="checked">true</xsl:attribute>
             </xsl:if>
             </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:if test="$autoRefresh = 0">
                <xsl:attribute name="disabled">true</xsl:attribute>
                <xsl:attribute name="disabled">true</xsl:attribute>
             </xsl:if>
             </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>
             </form>
             <br/>
             <br/>
             <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>
             <DIV id="menu" style="LEFT: 0px; TOP: 0px; VISIBILITY: hidden; POSITION: absolute"></DIV>
          </body>
          </body>
       </html>
       </html>

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

@@ -220,59 +220,10 @@
 
 
          function onClickSubmit()
          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)
          function adjustThresholdValue(namePrefix, thresholdType)
@@ -329,41 +280,21 @@
    <div>
    <div>
          <table border="0">
          <table border="0">
                 <tr>
                 <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">
                     <td align="left">
                         <select id="methodObj" onchange="showPreflightControl(options[selectedIndex].value)">
                         <select id="methodObj" onchange="showPreflightControl(options[selectedIndex].value)">
                             <option value="GetMachineInfo">
                             <option value="GetMachineInfo">
                                 <xsl:if test="$method='GetMachineInfo'">
                                 <xsl:if test="$method='GetMachineInfo'">
                                     <xsl:attribute name="selected">true</xsl:attribute>
                                     <xsl:attribute name="selected">true</xsl:attribute>
                                 </xsl:if>
                                 </xsl:if>
-                                <xsl:text>Machine Information</xsl:text>
+                                <xsl:value-of select="$hpccStrings/st[@id='MachineInfo']"/>
                             </option>
                             </option>
                             <xsl:if test="($clusterType = 'ROXIEMACHINES') and ($targetCluster = 0)">
                             <xsl:if test="($clusterType = 'ROXIEMACHINES') and ($targetCluster = 0)">
                                 <option value="GetMetrics">
                                 <option value="GetMetrics">
                                     <xsl:if test="$method='GetMetrics'">
                                     <xsl:if test="$method='GetMetrics'">
                                         <xsl:attribute name="selected">true</xsl:attribute>
                                         <xsl:attribute name="selected">true</xsl:attribute>
                                     </xsl:if>
                                     </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>
                                 </option>
                             </xsl:if>
                             </xsl:if>
                         </select>
                         </select>
@@ -382,9 +313,9 @@
                             <xsl:if test="boolean($getProcessorInfo)">
                             <xsl:if test="boolean($getProcessorInfo)">
                                 <xsl:attribute name="checked"/>
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
                             </xsl:if>
-                        </input>Get processor information</td>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='GetProcessorInformation']"/></td>
                     <td width="8"/>
                     <td width="8"/>
-                    <td>Warn if CPU usage is over </td>
+                    <td><xsl:value-of select="$hpccStrings/st[@id='WarnIfCPUUsageIsOver']"/> </td>
                     <td align="left">
                     <td align="left">
                         <input type="text" name="CpuThreshold" size="2" value="{$cpuThreshold}" maxlength="3"/> %</td>
                         <input type="text" name="CpuThreshold" size="2" value="{$cpuThreshold}" maxlength="3"/> %</td>
                 </tr>
                 </tr>
@@ -394,10 +325,10 @@
                             <xsl:if test="$getStorageInfo">
                             <xsl:if test="$getStorageInfo">
                                 <xsl:attribute name="checked"/>
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
                             </xsl:if>
-                        </input>Get storage information
+                        </input><xsl:value-of select="$hpccStrings/st[@id='GetStorageInformation']"/>
                      </td>
                      </td>
                     <td width="8"/>
                     <td width="8"/>
-                    <td>Warn if available memory is under </td>
+                    <td><xsl:value-of select="$hpccStrings/st[@id='WarnIfAvailableMemoryIsUnder']"/> </td>
                     <td align="left">
                     <td align="left">
                         <input type="text" name="MemThreshold" size="2" value="{$memThreshold}" maxlength="6" onchange="adjustThresholdType('Mem', value)"/>
                         <input type="text" name="MemThreshold" size="2" value="{$memThreshold}" maxlength="6" onchange="adjustThresholdType('Mem', value)"/>
                         <select name="MemThresholdType" onchange="adjustThresholdValue('Mem', options[selectedIndex].value)">
                         <select name="MemThresholdType" onchange="adjustThresholdValue('Mem', options[selectedIndex].value)">
@@ -422,7 +353,7 @@
                             <xsl:if test="$localFileSystemsOnly">
                             <xsl:if test="$localFileSystemsOnly">
                                 <xsl:attribute name="checked"/>
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
                             </xsl:if>
-                        </input><xsl:text>Local File Systems Only</xsl:text>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='LocalFileSystemsOnly']"/>
                     </td>
                     </td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
@@ -431,9 +362,9 @@
                             <xsl:if test="$getSoftwareInfo">
                             <xsl:if test="$getSoftwareInfo">
                                 <xsl:attribute name="checked"/>
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
                             </xsl:if>
-                        </input>Get software information</td>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='GetSoftwareInformation']"/></td>
                     <td width="8"/>
                     <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">
                     <td align="left">
                         <input type="text" name="DiskThreshold" size="2" value="{$diskThreshold}" maxlength="6" onchange="adjustThresholdType('Disk', value)"/>
                         <input type="text" name="DiskThreshold" size="2" value="{$diskThreshold}" maxlength="6" onchange="adjustThresholdType('Disk', value)"/>
                         <select name="DiskThresholdType" onchange="adjustThresholdValue('Disk', options[selectedIndex].value)">
                         <select name="DiskThresholdType" onchange="adjustThresholdValue('Disk', options[selectedIndex].value)">
@@ -458,27 +389,19 @@
                             <xsl:if test="$applyProcessFilter">
                             <xsl:if test="$applyProcessFilter">
                                 <xsl:attribute name="checked"/>
                                 <xsl:attribute name="checked"/>
                             </xsl:if>
                             </xsl:if>
-                        </input>Show processes using filter</td>
+                        </input><xsl:value-of select="$hpccStrings/st[@id='ShowProcessesUsingFilter']"/></td>
                     <td/>
                     <td/>
           <xsl:choose>
           <xsl:choose>
             <xsl:when test="$enableSNMP != 0">
             <xsl:when test="$enableSNMP != 0">
               <td>
               <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>
               <td/>
               <td/>
             </xsl:when>
             </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>
           </xsl:choose>
             </tr>
             </tr>
                 <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><input type="text" name="AddProcessesToFilter" id="AddProcessesToFilter" value="{$addProcessesToFilter}" size="35"/>
                     </td>
                     </td>
                 </tr>
                 </tr>
@@ -488,11 +411,11 @@
                             <xsl:if test="$autoRefresh &gt; 0">
                             <xsl:if test="$autoRefresh &gt; 0">
                                 <xsl:attribute name="checked">true</xsl:attribute>
                                 <xsl:attribute name="checked">true</xsl:attribute>
                             </xsl:if>
                             </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:if test="$autoRefresh = 0">
                             <xsl:attribute name="disabled">true</xsl:attribute>
                             <xsl:attribute name="disabled">true</xsl:attribute>
                         </xsl:if>
                         </xsl:if>
-                        </input> mins.
+                        </input> <xsl:value-of select="$hpccStrings/st[@id='Mins']"/>
                     </td>
                     </td>
                 </tr>
                 </tr>
             </table>
             </table>
@@ -502,78 +425,9 @@
                 <xsl:if test="$method != 'GetMetrics'">
                 <xsl:if test="$method != 'GetMetrics'">
                     <xsl:attribute name="style">display:none</xsl:attribute>
                     <xsl:attribute name="style">display:none</xsl:attribute>
                 </xsl:if>
                 </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>
             </div>
         </xsl:if>
         </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:template>
 
 
 </xsl:stylesheet>
 </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();
     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,
 bool Cws_machineEx::onGetMachineInfo(IEspContext &context, IEspGetMachineInfoRequest & req,
                                              IEspGetMachineInfoResponse & resp)
                                              IEspGetMachineInfoResponse & resp)
 {
 {
@@ -216,11 +231,17 @@ bool Cws_machineEx::onGetMachineInfoEx(IEspContext &context, IEspGetMachineInfoR
         if (addresses.empty())
         if (addresses.empty())
             throw MakeStringException(ECLWATCH_INVALID_IP_OR_COMPONENT, "No network address specified.");
             throw MakeStringException(ECLWATCH_INVALID_IP_OR_COMPONENT, "No network address specified.");
 
 
+        double version = context.getClientVersion();
         CGetMachineInfoData machineInfoData;
         CGetMachineInfoData machineInfoData;
         readMachineInfoRequest(context, true, true, true, true, true, addresses, NULL, machineInfoData);
         readMachineInfoRequest(context, true, true, true, true, true, addresses, NULL, machineInfoData);
         getMachineInfo(context, machineInfoData);
         getMachineInfo(context, machineInfoData);
         if (machineInfoData.getMachineInfoTable().ordinality())
         if (machineInfoData.getMachineInfoTable().ordinality())
             resp.setMachines(machineInfoData.getMachineInfoTable());
             resp.setMachines(machineInfoData.getMachineInfoTable());
+        if (version >= 1.12)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     }
     catch(IException* e)
     catch(IException* e)
     {
     {
@@ -1876,6 +1897,11 @@ void Cws_machineEx::setMachineInfoResponse(IEspContext& context, IEspGetMachineI
     char timeStamp[32];
     char timeStamp[32];
     getTimeStamp(timeStamp);
     getTimeStamp(timeStamp);
     resp.setTimeStamp( 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];
     char timeStamp[32];
     getTimeStamp(timeStamp);
     getTimeStamp(timeStamp);
     resp.setTimeStamp( 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)
 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 doPostProcessing(CFieldInfoMap& myfieldInfoMap, CFieldMap&  myfieldMap);
     void processValue(const char *oid, const char *value, const bool bShow, 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);
     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.
     //Still used in StartStop/Rexec, so keep them for now.
     enum OpSysType { OS_Windows, OS_Solaris, OS_Linux };
     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() );
             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
         resp.setAutoRefresh( req.getAutoRefresh() );//loop back requested auto refresh timeout to output so javascript sets timeout
     }
     }
     catch(IException* e)
     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;
     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, 
 void CWsTopologyEx::loadThresholdValue(IPropertyTree* pServiceNode, const char* attrName, unsigned int& thresholdValue, 
                                                     bool& bThresholdIsPercentage)
                                                     bool& bThresholdIsPercentage)
 {
 {
@@ -174,6 +189,12 @@ bool CWsTopologyEx::onTpLogFile(IEspContext &context,IEspTpLogFileRequest  &req,
         if (!type || !*type)
         if (!type || !*type)
             throw MakeStringException(ECLWATCH_INVALID_FILE_NAME,"File type not specified.");
             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"))
         if (streq(type,"thormaster_log") || streq(type,"tpcomp_log"))
         {
         {
             readTpLogFile(context, name, type, req, resp);
             readTpLogFile(context, name, type, req, resp);
@@ -951,6 +972,11 @@ bool CWsTopologyEx::onTpClusterQuery(IEspContext &context, IEspTpClusterQueryReq
         {       
         {       
             resp.setEnableSNMP(m_enableSNMP);
             resp.setEnableSNMP(m_enableSNMP);
         }
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
 
 
         resp.setTpClusters(clusters);
         resp.setTpClusters(clusters);
     }
     }
@@ -1096,6 +1122,11 @@ bool CWsTopologyEx::onTpTargetClusterQuery(IEspContext &context, IEspTpTargetClu
         {       
         {       
             resp.setPreflightProcessFilter(m_preflightProcessFilter);
             resp.setPreflightProcessFilter(m_preflightProcessFilter);
         }
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     }
     catch(IException* e)
     catch(IException* e)
     {   
     {   
@@ -1267,6 +1298,11 @@ bool CWsTopologyEx::onTpServiceQuery(IEspContext &context, IEspTpServiceQueryReq
         {       
         {       
             resp.setPreflightProcessFilter(m_preflightProcessFilter);
             resp.setPreflightProcessFilter(m_preflightProcessFilter);
         }
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     }
     catch(IException* e)
     catch(IException* e)
     {   
     {   
@@ -1333,6 +1369,11 @@ bool CWsTopologyEx::onTpMachineQuery(IEspContext &context, IEspTpMachineQueryReq
         {
         {
             resp.setHasThorSpareProcess( hasThorSpareProcess );
             resp.setHasThorSpareProcess( hasThorSpareProcess );
         }
         }
+        if (version >= 1.20)
+        {
+            StringBuffer acceptLanguage;
+            resp.setAcceptLanguage(getAcceptLanguage(context, acceptLanguage).str());
+        }
     }
     }
     catch(IException* e)
     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, 
     void loadThresholdValue(IPropertyTree* pServiceNode, const char* attrName, unsigned int& thresholdValue, 
                                     bool& bThresholdIsPercentage);
                                     bool& bThresholdIsPercentage);
 
 
-    //void getThorXml(const char* ClusterName req.getName(),returnStr);
+    StringBuffer& getAcceptLanguage(IEspContext& context, StringBuffer& acceptLanguage);
 public:
 public:
     IMPLEMENT_IINTERFACE;
     IMPLEMENT_IINTERFACE;
     virtual ~CWsTopologyEx(){};
     virtual ~CWsTopologyEx(){};