diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java new file mode 100644 index 0000000000..40371a8333 --- /dev/null +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java @@ -0,0 +1,38 @@ +package net.i2p.router.web; + +import java.io.IOException; + +/** + * refactored from confignav.jsp to reduce size and make translation easier + * @author zzz + */ +public class ConfigNavHelper extends HelperBase { + + /** configX.jsp */ + private static final String pages[] = + {"", "ui", "service", "update", "tunnels", + "clients", "peer", "keyring", "logging", "stats", + "advanced" }; + + private static final String titles[] = + {_x("Network"), _x("UI"), _x("Service"), _x("Update"), _x("Tunnels"), + _x("Clients"), _x("Peers"), _x("Keyring"), _x("Logging"), _x("Stats"), + _x("Advanced") }; + + public void renderNavBar(String requestURI) throws IOException { + StringBuilder buf = new StringBuilder(1024); + for (int i = 0; i < pages.length; i++) { + String page = "config" + pages[i] + ".jsp"; + if (requestURI.indexOf(page) != -1) { + // we are there + buf.append(_(titles[i])); + } else { + // we are not there, make a link + buf.append("").append(_(titles[i])).append(""); + } + if (i != pages.length - 1) + buf.append(" |\n"); + } + _out.write(buf.toString()); + } +} diff --git a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java index 8ed39f5c19..4f338c4e3d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java @@ -194,4 +194,21 @@ public class FormHandler { public String _(String s) { return Messages.getString(s, _context); } + + /** + * translate a string with a parameter + * This is a lot more expensive than _(s), so use sparingly. + * + * @param s string to be translated containing {0} + * The {0} will be replaced by the parameter. + * Single quotes must be doubled, i.e. ' -> '' in the string. + * @param o parameter, not translated. + * To tranlslate parameter also, use _("foo {0} bar", _("baz")) + * Do not double the single quotes in the parameter. + * Use autoboxing to call with ints, longs, floats, etc. + */ + public String _(String s, Object o) { + return Messages.getString(s, o, _context); + } + } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java b/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java index e5e640957d..c43caa550a 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java @@ -35,6 +35,22 @@ public abstract class HelperBase { return Messages.getString(s, _context); } + /** + * translate a string with a parameter + * This is a lot more expensive than _(s), so use sparingly. + * + * @param s string to be translated containing {0} + * The {0} will be replaced by the parameter. + * Single quotes must be doubled, i.e. ' -> '' in the string. + * @param o parameter, not translated. + * To tranlslate parameter also, use _("foo {0} bar", _("baz")) + * Do not double the single quotes in the parameter. + * Use autoboxing to call with ints, longs, floats, etc. + */ + public String _(String s, Object o) { + return Messages.getString(s, o, _context); + } + /** * Mark a string for extraction by xgettext and translation. * Use this only in static initializers. diff --git a/apps/routerconsole/java/src/net/i2p/router/web/Messages.java b/apps/routerconsole/java/src/net/i2p/router/web/Messages.java index a251f7e124..8d1d781747 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/Messages.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/Messages.java @@ -1,5 +1,6 @@ package net.i2p.router.web; +import java.text.MessageFormat; import java.util.Locale; import java.util.Map; import java.util.MissingResourceException; @@ -54,6 +55,34 @@ public class Messages { } } + /** + * translate a string with a parameter + * This is a lot more expensive than getString(s, ctx), so use sparingly. + * + * @param s string to be translated containing {0} + * The {0} will be replaced by the parameter. + * Single quotes must be doubled, i.e. ' -> '' in the string. + * @param o parameter, not translated. + * To tranlslate parameter also, use _("foo {0} bar", _("baz")) + * Do not double the single quotes in the parameter. + * Use autoboxing to call with ints, longs, floats, etc. + */ + public static String getString(String s, Object o, I2PAppContext ctx) { + String x = getString(s, ctx); + Object[] oArray = new Object[1]; + oArray[0] = o; + try { + MessageFormat fmt = new MessageFormat(x, new Locale(getLanguage(ctx))); + return fmt.format(oArray, new StringBuffer(), null).toString(); + } catch (IllegalArgumentException iae) { + System.err.println("Bad format: orig: \"" + s + + "\" trans: \"" + x + + "\" param: \"" + o + + "\" lang: " + getLanguage(ctx)); + return "FIXME: " + x + ' ' + o; + } + } + public static String getLanguage(I2PAppContext ctx) { String lang = ctx.getProperty(PROP_LANG); if (lang == null || lang.length() <= 0) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java index 0a96bdbc29..5af36a7cb8 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java @@ -60,16 +60,18 @@ class ProfileOrganizerRenderer { int integrated = 0; int failing = 0; StringBuilder buf = new StringBuilder(16*1024); - buf.append("
Showing ").append(order.size()).append(" recent profiles, hiding ").append(peers.size()-order.size()).append(" older profiles
"); - buf.append("Peer | " + - "Groups (Caps) | " + - "Speed | " + - "Capacity | " + - "Integration | " + - "Status | " + + "").append(_("Peer")).append(" | " + + "").append(_("Groups (Caps)")).append(" | " + + "").append(_("Speed")).append(" | " + + "").append(_("Capacity")).append(" | " + + "").append(_("Integration")).append(" | " + + "").append(_("Status")).append(" | " + "" + " |
---|