Browse Source

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 years ago
parent
commit
0f60f04297

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 14 - 0
esp/platform/espcontext.cpp

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

+ 3 - 0
esp/scm/esp.ecm

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

+ 2 - 1
esp/scm/ws_fs.ecm

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

+ 5 - 1
esp/scm/ws_machine.ecm

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

+ 6 - 2
esp/scm/ws_topology.ecm

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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