diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHelper.java index 8e7ba3faf..7696c81f6 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHelper.java @@ -3,6 +3,7 @@ package net.i2p.router.web.helpers; import java.text.Collator; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -158,8 +159,16 @@ public class ConfigStatsHelper extends HelperBase { return false; } } - /** What group is the current stat in */ + /** + * What group is the current stat in, untranslated, not for display + * @return single word, no spaces + */ public String getCurrentGroupName() { return _currentGroup; } + /** + * What group is the current stat in, display name, translated + * @since 0.9.45 + */ + public String getTranslatedGroupName() { return translateGroup(_currentGroup); } public String getCurrentStatName() { return _currentStatName; } public String getCurrentGraphName() { return _currentGraphName; } public String getCurrentStatDescription() { return _currentStatDescription; } @@ -178,9 +187,19 @@ public class ConfigStatsHelper extends HelperBase { */ private class AlphaComparator implements Comparator { public int compare(String lhs, String rhs) { - String lname = _t(lhs); - String rname = _t(rhs); + String lname = translateGroup(lhs); + String rname = translateGroup(rhs); return Collator.getInstance().compare(lname, rname); } } + + /** + * @since 0.9.45 + */ + private String translateGroup(String group) { + String disp = StatsGenerator.groupNames.get(group); + if (disp != null) + group = disp; + return _t(group); + } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatsGenerator.java index a86520b8a..f04df83c6 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatsGenerator.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatsGenerator.java @@ -6,6 +6,7 @@ import java.text.DecimalFormat; import java.text.Collator; import java.util.Arrays; import java.util.Comparator; +import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.SortedSet; @@ -25,6 +26,32 @@ import net.i2p.stat.RateStat; public class StatsGenerator { private final RouterContext _context; + /** + * Map of group name to untranslated nice display name. + * If not present, just use the name. + * non-mapped names are tagged in Strings.java + * pkg private for ConfigStatsHelper + */ + static final Map groupNames; + static { + String[] groups = { + "BandwidthLimiter", _x("Bandwidth Limiter"), + "ClientMessages", _x("Client Messages"), + "i2cp", _x("I2CP"), + "I2PTunnel", _x("Hidden Services Manager"), + "InNetPool", _x("Inbound Messages"), + "JobQueue", _x("Job Queue"), + "NetworkDatabase", _x("Network Database"), + "ntcp", _x("NTCP"), + "Throttle", _x("Router Limiter"), + "udp", _x("UDP") + }; + groupNames = new HashMap(groups.length / 2); + for (int i = 0; i < groups.length; i += 2) { + groupNames.put(groups[i], groups[i+1]); + } + } + public StatsGenerator(RouterContext context) { _context = context; } @@ -51,7 +78,7 @@ public class StatsGenerator { groups.putAll(unsorted); for (String group : groups.keySet()) { buf.append("\n"); + buf.append(translateGroup(group)).append("\n"); // let's just do the groups //Set stats = (Set)entry.getValue(); //for (Iterator statIter = stats.iterator(); statIter.hasNext(); ) { @@ -77,7 +104,7 @@ public class StatsGenerator { buf.append("

"); - buf.append(_t(group)); + buf.append(translateGroup(group)); buf.append("

"); buf.append("
    "); out.write(buf.toString()); @@ -258,6 +285,16 @@ public class StatsGenerator { private final static DecimalFormat _pct = new DecimalFormat("#0.00%"); private final static String pct(double num) { synchronized (_pct) { return _pct.format(num); } } + /** + * @since 0.9.45 + */ + private String translateGroup(String group) { + String disp = groupNames.get(group); + if (disp != null) + group = disp; + return _t(group); + } + /** * Translated sort * Inner class, can't be Serializable @@ -265,8 +302,8 @@ public class StatsGenerator { */ private class AlphaComparator implements Comparator { public int compare(String lhs, String rhs) { - String lname = _t(lhs); - String rname = _t(rhs); + String lname = translateGroup(lhs); + String rname = translateGroup(rhs); return Collator.getInstance().compare(lname, rname); } } @@ -285,4 +322,14 @@ public class StatsGenerator { private String ngettext(String s, String p, int n) { return Messages.getString(n, s, p, _context); } + + /** + * Mark a string for extraction by xgettext and translation. + * Use this only in static initializers. + * It does not translate! + * @return s + */ + private static String _x(String s) { + return s; + } } diff --git a/apps/routerconsole/java/strings/Strings.java b/apps/routerconsole/java/strings/Strings.java index 8254d657b..1fdac5ae4 100644 --- a/apps/routerconsole/java/strings/Strings.java +++ b/apps/routerconsole/java/strings/Strings.java @@ -55,23 +55,14 @@ class Dummy { _t("midnight"); // stat groups for stats.jsp + // See StatsGenerator for groups mapped to a display name _t("Bandwidth"); - _t("BandwidthLimiter"); - _t("ClientMessages"); _t("Encryption"); - _t("i2cp"); - _t("I2PTunnel"); - _t("InNetPool"); - _t("JobQueue"); - _t("NetworkDatabase"); - _t("ntcp"); _t("Peers"); _t("Router"); _t("Stream"); - _t("Throttle"); _t("Transport"); _t("Tunnels"); - _t("udp"); // parameters in transport addresses (netdb.jsp) // may or may not be worth translating diff --git a/apps/routerconsole/jsp/configstats.jsp b/apps/routerconsole/jsp/configstats.jsp index ab6ddaaeb..dc65311d0 100644 --- a/apps/routerconsole/jsp/configstats.jsp +++ b/apps/routerconsole/jsp/configstats.jsp @@ -98,7 +98,7 @@ Warning - Log with care, stat file grows without limit.
    while (statshelper.groupRequired()) { %> > - <%=intl._t(statshelper.getCurrentGroupName())%> + <%=statshelper.getTranslatedGroupName()%> " href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')">[<%=intl._t("toggle all")%>]