propagate from branch 'i2p.i2p.zzz.test' (head 16046dc1b2fd2a8b10de465cf238233f5d6954af)
to branch 'i2p.i2p' (head f222777c65da9e465bbf717582b4384d31848e07)
This commit is contained in:
@ -27,8 +27,8 @@ do
|
||||
# translate calls must be one of the forms:
|
||||
# _("foo")
|
||||
# _x("foo")
|
||||
# cssHelper._("foo")
|
||||
# cssHelper.title("foo")
|
||||
# intl._("foo")
|
||||
# intl.title("foo")
|
||||
# handler._("foo")
|
||||
# formhandler._("foo")
|
||||
# In a jsp, you must use a helper or handler that has the context set.
|
||||
@ -36,7 +36,7 @@ do
|
||||
# then ant distclean updater.
|
||||
find src ../jsp/WEB-INF -name *.java > $TMPFILE
|
||||
xgettext -f $TMPFILE -F -L java \
|
||||
--keyword=_ --keyword=_x --keyword=cssHelper._ --keyword=cssHelper.title \
|
||||
--keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \
|
||||
--keyword=handler._ --keyword=formhandler._ \
|
||||
-o ${i}t
|
||||
if [ $? -ne 0 ]
|
||||
|
@ -29,9 +29,9 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
|
||||
@Override
|
||||
protected void processForm() {
|
||||
if (_action.startsWith("Save Client")) {
|
||||
if (_action.equals(_("Save Client Configuration"))) {
|
||||
saveClientChanges();
|
||||
} else if (_action.startsWith("Save WebApp")) {
|
||||
} else if (_action.equals(_("Save WebApp Configuration"))) {
|
||||
saveWebAppChanges();
|
||||
} else if (_action.startsWith("Start ")) {
|
||||
String app = _action.substring(6);
|
||||
@ -43,7 +43,7 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
startClient(appnum);
|
||||
else
|
||||
startWebApp(app);
|
||||
} else if (_action.toLowerCase().startsWith("start<span class=hide> ") &&
|
||||
} else if (_action.toLowerCase().startsWith("Start<span class=hide> ") &&
|
||||
_action.toLowerCase().endsWith("</span>")) {
|
||||
// IE sucks
|
||||
String app = _action.substring(23, _action.length() - 7);
|
||||
@ -56,7 +56,7 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
else
|
||||
startWebApp(app);
|
||||
} else {
|
||||
addFormError("Unsupported " + _action + ".");
|
||||
addFormError(_("Unsupported") + " " + _action + ".");
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,18 +71,18 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
ca.disabled = val == null;
|
||||
}
|
||||
ClientAppConfig.writeClientAppConfig(_context, clients);
|
||||
addFormNotice("Client configuration saved successfully - restart required to take effect.");
|
||||
addFormNotice(_("Client configuration saved successfully - restart required to take effect."));
|
||||
}
|
||||
|
||||
private void startClient(int i) {
|
||||
List clients = ClientAppConfig.getClientApps(_context);
|
||||
if (i >= clients.size()) {
|
||||
addFormError("Bad client index.");
|
||||
addFormError(_("Bad client index."));
|
||||
return;
|
||||
}
|
||||
ClientAppConfig ca = (ClientAppConfig) clients.get(i);
|
||||
LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), configClient_log);
|
||||
addFormNotice("Client " + ca.clientName + " started.");
|
||||
addFormNotice(_("Client") + " " + ca.clientName + " " + _("started") + ".");
|
||||
}
|
||||
|
||||
private void saveWebAppChanges() {
|
||||
@ -99,7 +99,7 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
props.setProperty(name, "" + (val != null));
|
||||
}
|
||||
RouterConsoleRunner.storeWebAppProperties(props);
|
||||
addFormNotice("WebApp configuration saved successfully - restart required to take effect.");
|
||||
addFormNotice(_("WebApp configuration saved successfully - restart required to take effect."));
|
||||
}
|
||||
|
||||
// Big hack for the moment, not using properties for directory and port
|
||||
@ -117,14 +117,14 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
path = new File(path, app + ".war");
|
||||
s.addWebApplication("/"+ app, path.getAbsolutePath()).start();
|
||||
// no passwords... initialize(wac);
|
||||
addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> started.");
|
||||
addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> " + _("started") + ".");
|
||||
} catch (Exception ioe) {
|
||||
addFormError("Failed to start " + app + " " + ioe + ".");
|
||||
addFormError(_("Failed to start") + " " + app + " " + ioe + ".");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
addFormError("Failed to find server.");
|
||||
addFormError(_("Failed to find server."));
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
public String getForm1() {
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th align=\"right\">Client</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Class and arguments</th></tr>\n");
|
||||
buf.append("<tr><th align=\"right\">" + _("Client") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Start Now") + "</th><th align=\"left\">" + _("Class and arguments") + "</th></tr>\n");
|
||||
|
||||
List clients = ClientAppConfig.getClientApps(_context);
|
||||
for (int cur = 0; cur < clients.size(); cur++) {
|
||||
@ -30,7 +30,7 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
public String getForm2() {
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th align=\"right\">WebApp</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Description</th></tr>\n");
|
||||
buf.append("<tr><th align=\"right\">" + _("WebApp") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Start Now") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
|
||||
Properties props = RouterConsoleRunner.webAppProperties();
|
||||
Set keys = new TreeSet(props.keySet());
|
||||
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
|
||||
@ -63,7 +63,7 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
}
|
||||
buf.append("/></td><td align=\"center\" width=\"15%\">");
|
||||
if (!enabled) {
|
||||
buf.append("<button type=\"submit\" name=\"action\" value=\"Start ").append(index).append("\" >Start<span class=hide> ").append(index).append("</span></button>");
|
||||
buf.append("<button type=\"submit\" name=\"action\" value=\"Start ").append(index).append("\" >" + _("Start") + "<span class=hide> ").append(index).append("</span></button>");
|
||||
}
|
||||
buf.append("</td><td align=\"left\" width=\"50%\">").append(desc).append("</td></tr>\n");
|
||||
}
|
||||
|
@ -15,12 +15,12 @@ public class ConfigKeyringHandler extends FormHandler {
|
||||
@Override
|
||||
protected void processForm() {
|
||||
if (_action == null) return;
|
||||
boolean adding = _action.startsWith("Add");
|
||||
if (adding || _action.startsWith("Delete")) {
|
||||
boolean adding = _action.equals(_("Add key"));
|
||||
if (adding || _action.equals(_("Delete key"))) {
|
||||
if (_peer == null)
|
||||
addFormError("You must enter a destination");
|
||||
addFormError(_("You must enter a destination"));
|
||||
if (_key == null && adding)
|
||||
addFormError("You must enter a key");
|
||||
addFormError(_("You must enter a key"));
|
||||
if (_peer == null || (_key == null && adding))
|
||||
return;
|
||||
Hash h = ConvertToHash.getHash(_peer);
|
||||
@ -33,7 +33,7 @@ public class ConfigKeyringHandler extends FormHandler {
|
||||
_context.keyRing().put(h, sk);
|
||||
addFormNotice("Key for " + h.toBase64() + " added to keyring");
|
||||
} else {
|
||||
addFormError("Invalid destination or key");
|
||||
addFormError(_("Invalid destination or key"));
|
||||
}
|
||||
} else { // Delete
|
||||
if (h != null && h.getData() != null) {
|
||||
@ -42,11 +42,11 @@ public class ConfigKeyringHandler extends FormHandler {
|
||||
else
|
||||
addFormNotice("Key for " + h.toBase64() + " not found in keyring");
|
||||
} else {
|
||||
addFormError("Invalid destination");
|
||||
addFormError(_("Invalid destination"));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
addFormError("Unsupported");
|
||||
addFormError(_("Unsupported"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ public class ConfigNetHandler extends FormHandler {
|
||||
|
||||
@Override
|
||||
protected void processForm() {
|
||||
if (_saveRequested || ( (_action != null) && ("Save changes".equals(_action)) )) {
|
||||
if (_saveRequested || ( (_action != null) && (_("Save changes").equals(_action)) )) {
|
||||
saveChanges();
|
||||
} else if (_recheckReachabilityRequested) {
|
||||
recheckReachability();
|
||||
@ -116,7 +116,7 @@ public class ConfigNetHandler extends FormHandler {
|
||||
|
||||
private void recheckReachability() {
|
||||
_context.commSystem().recheckReachability();
|
||||
addFormNotice("Rechecking router reachability...");
|
||||
addFormNotice(_("Rechecking router reachability..."));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -145,7 +145,7 @@ public class ConfigNetHandler extends FormHandler {
|
||||
// Todo: Catch local IPs right here rather than complaining later
|
||||
_context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_HOST, uhost);
|
||||
if ((!oldUdp.equals(_udpAutoIP)) || (!oldUHost.equals(uhost))) {
|
||||
addFormNotice("Updating IP address");
|
||||
addFormNotice(_("Updating IP address"));
|
||||
restartRequired = true;
|
||||
}
|
||||
}
|
||||
@ -163,17 +163,17 @@ public class ConfigNetHandler extends FormHandler {
|
||||
|
||||
if ((!oldAutoHost.equals(_ntcpAutoIP)) || ! oldNHost.equalsIgnoreCase(_ntcpHostname)) {
|
||||
if ("disabled".equals(_ntcpAutoIP)) {
|
||||
addFormNotice("Disabling TCP completely");
|
||||
addFormNotice(_("Disabling TCP completely"));
|
||||
} else if ("false".equals(_ntcpAutoIP) && _ntcpHostname.length() > 0) {
|
||||
// Todo: Catch local IPs right here rather than complaining later
|
||||
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME, _ntcpHostname);
|
||||
addFormNotice("Updating inbound TCP address to " + _ntcpHostname);
|
||||
addFormNotice(_("Updating inbound TCP address to") + " " + _ntcpHostname);
|
||||
} else {
|
||||
_context.router().removeConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME);
|
||||
if ("false".equals(_ntcpAutoIP))
|
||||
addFormNotice("Disabling inbound TCP");
|
||||
addFormNotice(_("Disabling inbound TCP"));
|
||||
else
|
||||
addFormNotice("Updating inbound TCP address to auto"); // true or always
|
||||
addFormNotice(_("Updating inbound TCP address to auto")); // true or always
|
||||
}
|
||||
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_IP, _ntcpAutoIP);
|
||||
_context.router().setConfigSetting(TransportManager.PROP_ENABLE_NTCP, "" + !"disabled".equals(_ntcpAutoIP));
|
||||
@ -182,10 +182,10 @@ public class ConfigNetHandler extends FormHandler {
|
||||
if (oldAutoPort != _ntcpAutoPort || ! oldNPort.equals(_ntcpPort)) {
|
||||
if (_ntcpPort.length() > 0 && !_ntcpAutoPort) {
|
||||
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_PORT, _ntcpPort);
|
||||
addFormNotice("Updating inbound TCP port to " + _ntcpPort);
|
||||
addFormNotice(_("Updating inbound TCP port to") + " " + _ntcpPort);
|
||||
} else {
|
||||
_context.router().removeConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_PORT);
|
||||
addFormNotice("Updating inbound TCP port to auto");
|
||||
addFormNotice(_("Updating inbound TCP port to auto"));
|
||||
}
|
||||
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_PORT, "" + _ntcpAutoPort);
|
||||
restartRequired = true;
|
||||
@ -197,7 +197,7 @@ public class ConfigNetHandler extends FormHandler {
|
||||
if (!oldPort.equals(_udpPort)) {
|
||||
_context.router().setConfigSetting(UDPTransport.PROP_INTERNAL_PORT, _udpPort);
|
||||
_context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_PORT, _udpPort);
|
||||
addFormNotice("Updating UDP port from " + oldPort + " to " + _udpPort);
|
||||
addFormNotice(_("Updating UDP port from") + " " + oldPort + " " + _("to") + " " + _udpPort);
|
||||
restartRequired = true;
|
||||
}
|
||||
}
|
||||
@ -213,9 +213,9 @@ public class ConfigNetHandler extends FormHandler {
|
||||
if (switchRequired) {
|
||||
_context.router().setConfigSetting(PROP_HIDDEN, "" + _hiddenMode);
|
||||
if (_hiddenMode)
|
||||
addFormError("Gracefully restarting into Hidden Router Mode");
|
||||
addFormError(_("Gracefully restarting into Hidden Router Mode"));
|
||||
else
|
||||
addFormError("Gracefully restarting to exit Hidden Router Mode");
|
||||
addFormError(_("Gracefully restarting to exit Hidden Router Mode"));
|
||||
}
|
||||
|
||||
_context.router().setConfigSetting(Router.PROP_DYNAMIC_KEYS, "" + _dynamicKeys);
|
||||
@ -224,15 +224,15 @@ public class ConfigNetHandler extends FormHandler {
|
||||
_upnp) {
|
||||
// This is minor, don't set restartRequired
|
||||
if (_upnp)
|
||||
addFormNotice("Enabling UPnP, restart required to take effect");
|
||||
addFormNotice(_("Enabling UPnP, restart required to take effect"));
|
||||
else
|
||||
addFormNotice("Disabling UPnP, restart required to take effect");
|
||||
addFormNotice(_("Disabling UPnP, restart required to take effect"));
|
||||
}
|
||||
_context.router().setConfigSetting(TransportManager.PROP_ENABLE_UPNP, "" + _upnp);
|
||||
|
||||
if (_requireIntroductions) {
|
||||
_context.router().setConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS, "true");
|
||||
addFormNotice("Requiring SSU introduers");
|
||||
addFormNotice(_("Requiring SSU introduers"));
|
||||
} else {
|
||||
_context.router().removeConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS);
|
||||
}
|
||||
@ -246,11 +246,11 @@ public class ConfigNetHandler extends FormHandler {
|
||||
}
|
||||
|
||||
boolean saved = _context.router().saveConfig();
|
||||
if ( (_action != null) && ("Save changes".equals(_action)) ) {
|
||||
if ( (_action != null) && (_("Save changes").equals(_action)) ) {
|
||||
if (saved)
|
||||
addFormNotice("Configuration saved successfully");
|
||||
addFormNotice(_("Configuration saved successfully"));
|
||||
else
|
||||
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
|
||||
addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs"));
|
||||
}
|
||||
|
||||
if (switchRequired) {
|
||||
@ -290,7 +290,7 @@ public class ConfigNetHandler extends FormHandler {
|
||||
String old = _context.router().getConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE);
|
||||
if ( (old == null) || (!old.equalsIgnoreCase(_sharePct)) ) {
|
||||
_context.router().setConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE, _sharePct);
|
||||
addFormNotice("Updating bandwidth share percentage");
|
||||
addFormNotice(_("Updating bandwidth share percentage"));
|
||||
updated = true;
|
||||
}
|
||||
}
|
||||
@ -360,7 +360,7 @@ public class ConfigNetHandler extends FormHandler {
|
||||
|
||||
if (updated && !_ratesOnly) {
|
||||
_context.bandwidthLimiter().reinitialize();
|
||||
addFormNotice("Updated bandwidth limits");
|
||||
addFormNotice(_("Updated bandwidth limits"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,26 +17,26 @@ public class ConfigPeerHandler extends FormHandler {
|
||||
if ("Save Configuration".equals(_action)) {
|
||||
_context.router().saveConfig();
|
||||
addFormNotice("Settings saved - not really!!!!!");
|
||||
} else if (_action.startsWith("Ban")) {
|
||||
} else if (_action.equals(_("Ban peer until restart"))) {
|
||||
Hash h = getHash();
|
||||
if (h != null) {
|
||||
_context.shitlist().shitlistRouterForever(h, "Manually banned via <a href=\"configpeer.jsp\">configpeer.jsp</a>");
|
||||
addFormNotice("Peer " + _peer + " banned until restart");
|
||||
addFormNotice(_("Peer") + " " + _peer + " " + _("banned until restart") );
|
||||
return;
|
||||
}
|
||||
addFormError("Invalid peer");
|
||||
} else if (_action.startsWith("Unban")) {
|
||||
addFormError(_("Invalid peer"));
|
||||
} else if (_action.equals(_("Unban peer"))) {
|
||||
Hash h = getHash();
|
||||
if (h != null) {
|
||||
if (_context.shitlist().isShitlisted(h)) {
|
||||
_context.shitlist().unshitlistRouter(h);
|
||||
addFormNotice("Peer " + _peer + " unbanned");
|
||||
addFormNotice(_("Peer") + " " + _peer + " " + _("unbanned") );
|
||||
} else
|
||||
addFormNotice("Peer " + _peer + " is not currently banned");
|
||||
addFormNotice(_("Peer") + " " + _peer + " " + _("is not currently banned") );
|
||||
return;
|
||||
}
|
||||
addFormError("Invalid peer");
|
||||
} else if (_action.startsWith("Adjust")) {
|
||||
addFormError(_("Invalid peer"));
|
||||
} else if (_action.equals(_("Adjust Profile Bonuses"))) {
|
||||
Hash h = getHash();
|
||||
if (h != null) {
|
||||
PeerProfile prof = _context.profileOrganizer().getProfile(h);
|
||||
@ -44,19 +44,19 @@ public class ConfigPeerHandler extends FormHandler {
|
||||
try {
|
||||
prof.setSpeedBonus(Long.parseLong(_speed));
|
||||
} catch (NumberFormatException nfe) {
|
||||
addFormError("Bad speed value");
|
||||
addFormError(_("Bad speed value"));
|
||||
}
|
||||
try {
|
||||
prof.setCapacityBonus(Long.parseLong(_capacity));
|
||||
} catch (NumberFormatException nfe) {
|
||||
addFormError("Bad capacity value");
|
||||
addFormError(_("Bad capacity value"));
|
||||
}
|
||||
addFormNotice("Bonuses adjusted for " + _peer);
|
||||
} else
|
||||
addFormError("No profile exists for " + _peer);
|
||||
return;
|
||||
}
|
||||
addFormError("Invalid peer");
|
||||
addFormError(_("Invalid peer"));
|
||||
} else if (_action.startsWith("Check")) {
|
||||
addFormError("Unsupported");
|
||||
}
|
||||
|
@ -50,36 +50,36 @@ public class ConfigServiceHandler extends FormHandler {
|
||||
protected void processForm() {
|
||||
if (_action == null) return;
|
||||
|
||||
if ("Shutdown gracefully".equals(_action)) {
|
||||
if (_("Shutdown gracefully").equals(_action)) {
|
||||
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_GRACEFUL));
|
||||
_context.router().shutdownGracefully();
|
||||
addFormNotice("Graceful shutdown initiated");
|
||||
} else if ("Shutdown immediately".equals(_action)) {
|
||||
addFormNotice(_("Graceful shutdown initiated"));
|
||||
} else if (_("Shutdown immediately").equals(_action)) {
|
||||
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_HARD));
|
||||
_context.router().shutdown(Router.EXIT_HARD);
|
||||
addFormNotice("Shutdown immediately! boom bye bye bad bwoy");
|
||||
} else if ("Cancel graceful shutdown".equals(_action)) {
|
||||
addFormNotice(_("Shutdown immediately! boom bye bye bad bwoy"));
|
||||
} else if (_("Cancel graceful shutdown").equals(_action)) {
|
||||
_context.router().cancelGracefulShutdown();
|
||||
addFormNotice("Graceful shutdown cancelled");
|
||||
} else if ("Graceful restart".equals(_action)) {
|
||||
addFormNotice(_("Graceful shutdown cancelled"));
|
||||
} else if (_("Graceful restart").equals(_action)) {
|
||||
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_GRACEFUL_RESTART));
|
||||
_context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
|
||||
addFormNotice("Graceful restart requested");
|
||||
} else if ("Hard restart".equals(_action)) {
|
||||
addFormNotice(_("Graceful restart requested"));
|
||||
} else if (_("Hard restart").equals(_action)) {
|
||||
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_HARD_RESTART));
|
||||
_context.router().shutdown(Router.EXIT_HARD_RESTART);
|
||||
addFormNotice("Hard restart requested");
|
||||
} else if ("Rekey and Restart".equals(_action)) {
|
||||
addFormNotice("Rekeying after graceful restart");
|
||||
addFormNotice(_("Hard restart requested"));
|
||||
} else if (_("Rekey and Restart").equals(_action)) {
|
||||
addFormNotice(_("Rekeying after graceful restart"));
|
||||
_context.addShutdownTask(new UpdateWrapperManagerAndRekeyTask(Router.EXIT_GRACEFUL_RESTART));
|
||||
_context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
|
||||
} else if ("Rekey and Shutdown".equals(_action)) {
|
||||
addFormNotice("Rekeying after graceful shutdown");
|
||||
} else if (_("Rekey and Shutdown").equals(_action)) {
|
||||
addFormNotice(_("Rekeying after graceful shutdown"));
|
||||
_context.addShutdownTask(new UpdateWrapperManagerAndRekeyTask(Router.EXIT_GRACEFUL));
|
||||
_context.router().shutdownGracefully(Router.EXIT_GRACEFUL);
|
||||
} else if ("Run I2P on startup".equals(_action)) {
|
||||
} else if (_("Run I2P on startup").equals(_action)) {
|
||||
installService();
|
||||
} else if ("Don't run I2P on startup".equals(_action)) {
|
||||
} else if (_("Don't run I2P on startup").equals(_action)) {
|
||||
uninstallService();
|
||||
} else if ("Dump threads".equals(_action)) {
|
||||
try {
|
||||
@ -88,36 +88,36 @@ public class ConfigServiceHandler extends FormHandler {
|
||||
addFormError("Warning: unable to contact the service manager - " + t.getMessage());
|
||||
}
|
||||
addFormNotice("Threads dumped to wrapper.log");
|
||||
} else if ("Show systray icon".equals(_action)) {
|
||||
} else if (_("Show systray icon").equals(_action)) {
|
||||
try {
|
||||
SysTray tray = SysTray.getInstance();
|
||||
if (tray != null) {
|
||||
tray.show();
|
||||
addFormNotice("System tray icon enabled.");
|
||||
addFormNotice(_("System tray icon enabled."));
|
||||
} else {
|
||||
addFormNotice("System tray icon feature not supported on this platform. Sorry!");
|
||||
addFormNotice(_("System tray icon feature not supported on this platform. Sorry!"));
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
addFormError("Warning: unable to contact the systray manager - " + t.getMessage());
|
||||
addFormError(_("Warning: unable to contact the systray manager") + " - " + t.getMessage());
|
||||
}
|
||||
} else if ("Hide systray icon".equals(_action)) {
|
||||
} else if (_("Hide systray icon").equals(_action)) {
|
||||
try {
|
||||
SysTray tray = SysTray.getInstance();
|
||||
if (tray != null) {
|
||||
tray.hide();
|
||||
addFormNotice("System tray icon disabled.");
|
||||
addFormNotice(_("System tray icon disabled."));
|
||||
} else {
|
||||
addFormNotice("System tray icon feature not supported on this platform. Sorry!");
|
||||
addFormNotice(_("System tray icon feature not supported on this platform. Sorry!"));
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
addFormError("Warning: unable to contact the systray manager - " + t.getMessage());
|
||||
addFormError(_("Warning: unable to contact the systray manager") + " - " + t.getMessage());
|
||||
}
|
||||
} else if ("View console on startup".equals(_action)) {
|
||||
} else if (_("View console on startup").equals(_action)) {
|
||||
browseOnStartup(true);
|
||||
addFormNotice("Console is to be shown on startup");
|
||||
} else if ("Do not view console on startup".equals(_action)) {
|
||||
addFormNotice(_("Console is to be shown on startup"));
|
||||
} else if (_("Do not view console on startup").equals(_action)) {
|
||||
browseOnStartup(false);
|
||||
addFormNotice("Console is not to be shown on startup");
|
||||
addFormNotice(_("Console is not to be shown on startup"));
|
||||
} else {
|
||||
//addFormNotice("Blah blah blah. whatever. I'm not going to " + _action);
|
||||
}
|
||||
@ -126,17 +126,17 @@ public class ConfigServiceHandler extends FormHandler {
|
||||
private void installService() {
|
||||
try {
|
||||
Runtime.getRuntime().exec("install_i2p_service_winnt.bat");
|
||||
addFormNotice("Service installed");
|
||||
addFormNotice(_("Service installed"));
|
||||
} catch (IOException ioe) {
|
||||
addFormError("Warning: unable to install the service - " + ioe.getMessage());
|
||||
addFormError(_("Warning: unable to install the service") + " - " + ioe.getMessage());
|
||||
}
|
||||
}
|
||||
private void uninstallService() {
|
||||
try {
|
||||
Runtime.getRuntime().exec("uninstall_i2p_service_winnt.bat");
|
||||
addFormNotice("Service removed");
|
||||
addFormNotice(_("Service removed"));
|
||||
} catch (IOException ioe) {
|
||||
addFormError("Warning: unable to remove the service - " + ioe.getMessage());
|
||||
addFormError(_("Warning: unable to remove the service") + " - " + ioe.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,9 +137,9 @@ public class ConfigTunnelsHandler extends FormHandler {
|
||||
if (saveRequired) {
|
||||
boolean saved = _context.router().saveConfig();
|
||||
if (saved)
|
||||
addFormNotice("Exploratory tunnel configuration saved successfully.");
|
||||
addFormNotice(_("Exploratory tunnel configuration saved successfully."));
|
||||
else
|
||||
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs.");
|
||||
addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs."));
|
||||
}
|
||||
}
|
||||
private static final int getInt(Object val) {
|
||||
|
@ -18,7 +18,7 @@ public class ConfigTunnelsHelper extends HelperBase {
|
||||
TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings();
|
||||
|
||||
buf.append("<input type=\"hidden\" name=\"pool.0\" value=\"exploratory\" >");
|
||||
renderForm(buf, 0, "exploratory", "Exploratory tunnels", exploratoryIn, exploratoryOut);
|
||||
renderForm(buf, 0, "exploratory", _("Exploratory tunnels"), exploratoryIn, exploratoryOut);
|
||||
|
||||
int cur = 1;
|
||||
Set clients = _context.clientManager().listClients();
|
||||
@ -38,7 +38,7 @@ public class ConfigTunnelsHelper extends HelperBase {
|
||||
String prefix = dest.calculateHash().toBase64().substring(0,4);
|
||||
buf.append("<input type=\"hidden\" name=\"pool.").append(cur).append("\" value=\"");
|
||||
buf.append(dest.calculateHash().toBase64()).append("\" >");
|
||||
renderForm(buf, cur, prefix, "Client tunnels for " + name, in, out);
|
||||
renderForm(buf, cur, prefix, _("Client tunnels for") + " " + name, in, out);
|
||||
cur++;
|
||||
}
|
||||
|
||||
@ -61,95 +61,95 @@ public class ConfigTunnelsHelper extends HelperBase {
|
||||
in.getLength() + in.getLengthVariance() <= 0 ||
|
||||
out.getLength() <= 0 ||
|
||||
out.getLength() + out.getLengthVariance() <= 0)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels.</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("ANONYMITY WARNING - Settings include 0-hop tunnels.") + "</font></th></tr>");
|
||||
else if (in.getLength() <= 1 ||
|
||||
in.getLength() + in.getLengthVariance() <= 1 ||
|
||||
out.getLength() <= 1 ||
|
||||
out.getLength() + out.getLengthVariance() <= 1)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels.</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("ANONYMITY WARNING - Settings include 1-hop tunnels.") + "</font></th></tr>");
|
||||
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
|
||||
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels.</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("PERFORMANCE WARNING - Settings include very long tunnels.") + "</font></th></tr>");
|
||||
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
|
||||
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities.</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("PERFORMANCE WARNING - Settings include high tunnel quantities.") + "</font></th></tr>");
|
||||
|
||||
buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\"> Inbound</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\"> Outbound</th></tr>\n");
|
||||
buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\"> " + _("Inbound") + "</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\"> " + _("Outbound") + "</th></tr>\n");
|
||||
|
||||
// buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n");
|
||||
|
||||
// tunnel depth
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Depth:</td>\n");
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Depth") + ":</td>\n");
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".depthInbound\">\n");
|
||||
int now = in.getLength();
|
||||
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
||||
renderOptions(buf, 0, MAX_LENGTH, now, "", _("hop"));
|
||||
if (now > MAX_LENGTH)
|
||||
renderOptions(buf, now, now, now, "", "hop");
|
||||
renderOptions(buf, now, now, now, "", _("hop"));
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".depthOutbound\">\n");
|
||||
now = out.getLength();
|
||||
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
||||
renderOptions(buf, 0, MAX_LENGTH, now, "", _("hop"));
|
||||
if (now > MAX_LENGTH)
|
||||
renderOptions(buf, now, now, now, "", "hop");
|
||||
renderOptions(buf, now, now, now, "", _("hop"));
|
||||
buf.append("</select></td>\n");
|
||||
buf.append("</tr>\n");
|
||||
|
||||
// tunnel depth variance
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Randomization:</td>\n");
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Randomization") + ":</td>\n");
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".varianceInbound\">\n");
|
||||
now = in.getLengthVariance();
|
||||
renderOptions(buf, 0, 0, now, "", "hop");
|
||||
renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", "hop");
|
||||
renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", "hop");
|
||||
renderOptions(buf, 0, 0, now, "", _("hop"));
|
||||
renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", _("hop"));
|
||||
renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", _("hop"));
|
||||
if (now > MAX_VARIANCE)
|
||||
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
||||
renderOptions(buf, now, now, now, "+ 0-", _("hop"));
|
||||
else if (now < MIN_NEG_VARIANCE)
|
||||
renderOptions(buf, now, now, now, "+/- 0", "hop");
|
||||
renderOptions(buf, now, now, now, "+/- 0", _("hop"));
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".varianceOutbound\">\n");
|
||||
now = out.getLengthVariance();
|
||||
renderOptions(buf, 0, 0, now, "", "hop");
|
||||
renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", "hop");
|
||||
renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", "hop");
|
||||
renderOptions(buf, 0, 0, now, "", _("hop"));
|
||||
renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", _("hop"));
|
||||
renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", _("hop"));
|
||||
if (now > MAX_VARIANCE)
|
||||
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
||||
renderOptions(buf, now, now, now, "+ 0-", _("hop"));
|
||||
else if (now < MIN_NEG_VARIANCE)
|
||||
renderOptions(buf, now, now, now, "+/- 0", "hop");
|
||||
renderOptions(buf, now, now, now, "+/- 0", _("hop"));
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
// tunnel quantity
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Quantity:</td>\n");
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Quantity") + ":</td>\n");
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".quantityInbound\">\n");
|
||||
now = in.getQuantity();
|
||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", _("tunnel"));
|
||||
if (now > MAX_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
renderOptions(buf, now, now, now, "", _("tunnel"));
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".quantityOutbound\">\n");
|
||||
now = out.getQuantity();
|
||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", _("tunnel"));
|
||||
if (now > MAX_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
renderOptions(buf, now, now, now, "", _("tunnel"));
|
||||
buf.append("</select></td>\n");
|
||||
buf.append("</tr>\n");
|
||||
|
||||
// tunnel backup quantity
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Backup quantity:</td>\n");
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Backup quantity") + ":</td>\n");
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".backupInbound\">\n");
|
||||
now = in.getBackupQuantity();
|
||||
renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", "tunnel");
|
||||
renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", _("tunnel"));
|
||||
if (now > MAX_BACKUP_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
renderOptions(buf, now, now, now, "", _("tunnel"));
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td align=\"center\"><select name=\"").append(index).append(".backupOutbound\">\n");
|
||||
now = out.getBackupQuantity();
|
||||
renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", "tunnel");
|
||||
renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", _("tunnel"));
|
||||
if (now > MAX_BACKUP_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
renderOptions(buf, now, now, now, "", _("tunnel"));
|
||||
buf.append("</select></td>\n");
|
||||
buf.append("</tr>\n");
|
||||
|
||||
@ -159,7 +159,7 @@ buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt
|
||||
// And let's not display them at all unless they have contents, which should be rare.
|
||||
Properties props = in.getUnknownOptions();
|
||||
if (props.size() > 0) {
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Inbound options:</td>\n" +
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Inbound options") + ":</td>\n" +
|
||||
"<td colspan=\"2\" align=\"center\"><input name=\"").append(index);
|
||||
buf.append(".inboundOptions\" type=\"text\" size=\"32\" disabled=\"true\" " +
|
||||
"value=\"");
|
||||
@ -172,7 +172,7 @@ buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt
|
||||
}
|
||||
props = out.getUnknownOptions();
|
||||
if (props.size() > 0) {
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Outbound options:</td>\n" +
|
||||
buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Outbound options") + ":</td>\n" +
|
||||
"<td colspan=\"2\" align=\"center\"><input name=\"").append(index);
|
||||
buf.append(".outboundOptions\" type=\"text\" size=\"32\" disabled=\"true\" " +
|
||||
"value=\"");
|
||||
|
@ -51,25 +51,25 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
|
||||
@Override
|
||||
protected void processForm() {
|
||||
if (_action != null && _action.startsWith("Check")) {
|
||||
if (_action != null && _action.equals(_("Check for updates"))) {
|
||||
NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext());
|
||||
fetcher.fetchNews();
|
||||
if (fetcher.shouldFetchUnsigned())
|
||||
fetcher.fetchUnsignedHead();
|
||||
if (fetcher.updateAvailable() || fetcher.unsignedUpdateAvailable()) {
|
||||
if ( (_updatePolicy == null) || (!_updatePolicy.equals("notify")) )
|
||||
addFormNotice("Update available, attempting to download now");
|
||||
addFormNotice(_("Update available, attempting to download now"));
|
||||
else
|
||||
addFormNotice("Update available, click button on left to download");
|
||||
addFormNotice(_("Update available, click button on left to download"));
|
||||
} else
|
||||
addFormNotice("No update available");
|
||||
addFormNotice(_("No update available"));
|
||||
}
|
||||
|
||||
if ( (_newsURL != null) && (_newsURL.length() > 0) ) {
|
||||
String oldURL = ConfigUpdateHelper.getNewsURL(_context);
|
||||
if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) {
|
||||
_context.router().setConfigSetting(PROP_NEWS_URL, _newsURL);
|
||||
addFormNotice("Updating news URL to " + _newsURL);
|
||||
addFormNotice(_("Updating news URL to") + " " + _newsURL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
String oldHost = _context.router().getConfigSetting(PROP_PROXY_HOST);
|
||||
if ( (oldHost == null) || (!_proxyHost.equals(oldHost)) ) {
|
||||
_context.router().setConfigSetting(PROP_PROXY_HOST, _proxyHost);
|
||||
addFormNotice("Updating proxy host to " + _proxyHost);
|
||||
addFormNotice(_("Updating proxy host to") + " " + _proxyHost);
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
String oldPort = _context.router().getConfigSetting(PROP_PROXY_PORT);
|
||||
if ( (oldPort == null) || (!_proxyPort.equals(oldPort)) ) {
|
||||
_context.router().setConfigSetting(PROP_PROXY_PORT, _proxyPort);
|
||||
addFormNotice("Updating proxy port to " + _proxyPort);
|
||||
addFormNotice(_("Updating proxy port to") + " " + _proxyPort);
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,14 +98,14 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
try { oldFreq = Long.parseLong(oldFreqStr); } catch (NumberFormatException nfe) {}
|
||||
if (_refreshFrequency != oldFreq) {
|
||||
_context.router().setConfigSetting(PROP_REFRESH_FREQUENCY, ""+_refreshFrequency);
|
||||
addFormNotice("Updating refresh frequency to " + DataHelper.formatDuration(_refreshFrequency));
|
||||
addFormNotice(_("Updating refresh frequency to") + " " + DataHelper.formatDuration(_refreshFrequency));
|
||||
}
|
||||
|
||||
if ( (_updatePolicy != null) && (_updatePolicy.length() > 0) ) {
|
||||
String oldPolicy = _context.router().getConfigSetting(PROP_UPDATE_POLICY);
|
||||
if ( (oldPolicy == null) || (!_updatePolicy.equals(oldPolicy)) ) {
|
||||
_context.router().setConfigSetting(PROP_UPDATE_POLICY, _updatePolicy);
|
||||
addFormNotice("Updating update policy to " + _updatePolicy);
|
||||
addFormNotice(_("Updating update policy to") + " " + _updatePolicy);
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
String oldURL = _context.router().getConfigSetting(PROP_UPDATE_URL);
|
||||
if ( (oldURL == null) || (!_updateURL.equals(oldURL)) ) {
|
||||
_context.router().setConfigSetting(PROP_UPDATE_URL, _updateURL);
|
||||
addFormNotice("Updating update URLs.");
|
||||
addFormNotice(_("Updating update URLs."));
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,7 +122,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
String oldKeys = new TrustedUpdate(_context).getTrustedKeysString();
|
||||
if ( (oldKeys == null) || (!_trustedKeys.equals(oldKeys)) ) {
|
||||
_context.router().setConfigSetting(PROP_TRUSTED_KEYS, _trustedKeys);
|
||||
addFormNotice("Updating trusted keys.");
|
||||
addFormNotice(_("Updating trusted keys."));
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,7 +130,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
String oldURL = _context.router().getConfigSetting(PROP_ZIP_URL);
|
||||
if ( (oldURL == null) || (!_zipURL.equals(oldURL)) ) {
|
||||
_context.router().setConfigSetting(PROP_ZIP_URL, _zipURL);
|
||||
addFormNotice("Updating unsigned update URL to " + _zipURL);
|
||||
addFormNotice(_("Updating unsigned update URL to") + " " + _zipURL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -72,9 +72,9 @@ public class ConfigUpdateHelper extends HelperBase {
|
||||
buf.append("\" selected=\"true\"");
|
||||
|
||||
if (PERIODS[i] == -1)
|
||||
buf.append("\">Never</option>\n");
|
||||
buf.append("\">" + _("Never") + "</option>\n");
|
||||
else
|
||||
buf.append("\">Every ").append(DataHelper.formatDuration(PERIODS[i])).append("</option>\n");
|
||||
buf.append("\">" + _("Every") + " ").append(DataHelper.formatDuration(PERIODS[i])).append("</option>\n");
|
||||
}
|
||||
buf.append("</select>\n");
|
||||
return buf.toString();
|
||||
@ -89,18 +89,18 @@ public class ConfigUpdateHelper extends HelperBase {
|
||||
if ("notify".equals(policy))
|
||||
buf.append("<option value=\"notify\" selected=\"true\">").append(_("Notify only")).append("</option>");
|
||||
else
|
||||
buf.append("<option value=\"notify\">Notify only</option>");
|
||||
buf.append("<option value=\"notify\">" + _("Notify only") + "</option>");
|
||||
|
||||
if ("download".equals(policy))
|
||||
buf.append("<option value=\"download\" selected=\"true\">Download and verify only</option>");
|
||||
buf.append("<option value=\"download\" selected=\"true\">" + _("Download and verify only") + "</option>");
|
||||
else
|
||||
buf.append("<option value=\"download\">Download and verify only</option>");
|
||||
buf.append("<option value=\"download\">" + _("Download and verify only") + "</option>");
|
||||
|
||||
if (System.getProperty("wrapper.version") != null) {
|
||||
if ("install".equals(policy))
|
||||
buf.append("<option value=\"install\" selected=\"true\">Download, verify, and restart</option>");
|
||||
buf.append("<option value=\"install\" selected=\"true\">" + _("Download, verify, and restart") + "</option>");
|
||||
else
|
||||
buf.append("<option value=\"install\">Download, verify, and restart</option>");
|
||||
buf.append("<option value=\"install\">" + _("Download, verify, and restart") + "</option>");
|
||||
}
|
||||
|
||||
buf.append("</select>\n");
|
||||
|
@ -10,7 +10,7 @@ public class LogsHelper extends HelperBase {
|
||||
|
||||
public String getLogs() {
|
||||
String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages());
|
||||
return "Location: <code>" + _context.logManager().currentFile() + "</code><br><br>" + str;
|
||||
return "Location: <b><code>" + _context.logManager().currentFile() + "</code></b><br><br>" + str;
|
||||
}
|
||||
|
||||
public String getCriticalLogs() {
|
||||
@ -34,7 +34,7 @@ public class LogsHelper extends HelperBase {
|
||||
return "";
|
||||
else {
|
||||
str = str.replaceAll("<", "<").replaceAll(">", ">");
|
||||
return "Location:<code> " + f.getAbsolutePath() + "</code> <pre>" + str + "</pre>";
|
||||
return "Location:<b><code> " + f.getAbsolutePath() + "</code></b> <pre>" + str + "</pre>";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ public class NetDbRenderer {
|
||||
|
||||
public void renderRouterInfoHTML(Writer out, String routerPrefix) throws IOException {
|
||||
StringBuilder buf = new StringBuilder(4*1024);
|
||||
buf.append("<h2>Network Database RouterInfo Lookup</h2>\n");
|
||||
buf.append("<h2>" + _("Network Database RouterInfo Lookup") + "</h2>\n");
|
||||
if (".".equals(routerPrefix)) {
|
||||
renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
|
||||
} else {
|
||||
@ -70,7 +70,7 @@ public class NetDbRenderer {
|
||||
}
|
||||
}
|
||||
if (notFound)
|
||||
buf.append("Router ").append(routerPrefix).append(" not found in network database");
|
||||
buf.append(_("Router") + " ").append(routerPrefix).append(" " + _("not found in network database") );
|
||||
}
|
||||
out.write(buf.toString());
|
||||
out.flush();
|
||||
@ -82,8 +82,8 @@ public class NetDbRenderer {
|
||||
|
||||
public void renderLeaseSetHTML(Writer out) throws IOException {
|
||||
StringBuilder buf = new StringBuilder(4*1024);
|
||||
buf.append("<h2>Network Database Contents</h2>\n");
|
||||
buf.append("<a href=\"netdb.jsp\">View RouterInfo</a>");
|
||||
buf.append("<h2>" + _("Network Database Contents") + "</h2>\n");
|
||||
buf.append("<a href=\"netdb.jsp\">" + _("View") + " RouterInfo</a>");
|
||||
buf.append("<h3>LeaseSets</h3>\n");
|
||||
Set leases = new TreeSet(new LeaseSetComparator());
|
||||
leases.addAll(_context.netDb().getLeases());
|
||||
@ -94,17 +94,17 @@ public class NetDbRenderer {
|
||||
Hash key = dest.calculateHash();
|
||||
buf.append("<b>LeaseSet: ").append(key.toBase64());
|
||||
if (_context.clientManager().isLocal(dest)) {
|
||||
buf.append(" (<a href=\"tunnels.jsp#" + key.toBase64().substring(0,4) + "\">Local</a> ");
|
||||
buf.append(" (<a href=\"tunnels.jsp#" + key.toBase64().substring(0,4) + "\">" + _("Local") + "</a> ");
|
||||
if (! _context.clientManager().shouldPublishLeaseSet(key))
|
||||
buf.append("Unpublished ");
|
||||
buf.append("Destination ");
|
||||
buf.append(_("Unpublished") + " ");
|
||||
buf.append(_("Destination") + " ");
|
||||
TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
|
||||
if (in != null && in.getDestinationNickname() != null)
|
||||
buf.append(in.getDestinationNickname());
|
||||
else
|
||||
buf.append(dest.toBase64().substring(0, 6));
|
||||
} else {
|
||||
buf.append(" (Destination ");
|
||||
buf.append(" (" + _("Destination") + " ");
|
||||
String host = _context.namingService().reverseLookup(dest);
|
||||
if (host != null)
|
||||
buf.append(host);
|
||||
@ -118,9 +118,9 @@ public class NetDbRenderer {
|
||||
else
|
||||
buf.append("Expired ").append(DataHelper.formatDuration(0-exp)).append(" ago<br>\n");
|
||||
for (int i = 0; i < ls.getLeaseCount(); i++) {
|
||||
buf.append("Lease ").append(i + 1).append(": Gateway ");
|
||||
buf.append("Lease ").append(i + 1).append(": " + _("Gateway") + " ");
|
||||
buf.append(_context.commSystem().renderPeerHTML(ls.getLease(i).getGateway()));
|
||||
buf.append(" Tunnel ").append(ls.getLease(i).getTunnelId().getTunnelId()).append("<br>\n");
|
||||
buf.append(" " + _("Tunnel") + " ").append(ls.getLease(i).getTunnelId().getTunnelId()).append("<br>\n");
|
||||
}
|
||||
buf.append("<hr>\n");
|
||||
out.write(buf.toString());
|
||||
@ -135,21 +135,21 @@ public class NetDbRenderer {
|
||||
if (full)
|
||||
size *= 4;
|
||||
StringBuilder buf = new StringBuilder(size);
|
||||
out.write("<h2>Network Database Contents (<a href=\"netdb.jsp?l=1\">View LeaseSets</a>)</h2>\n");
|
||||
out.write("<h2>" + _("Network Database Contents") + " (<a href=\"netdb.jsp?l=1\">" + _("View") + " LeaseSets</a>)</h2>\n");
|
||||
if (!_context.netDb().isInitialized()) {
|
||||
buf.append("Not initialized\n");
|
||||
buf.append("" + _("Not initialized") + "\n");
|
||||
out.write(buf.toString());
|
||||
out.flush();
|
||||
return;
|
||||
}
|
||||
|
||||
Hash us = _context.routerHash();
|
||||
out.write("<a name=\"routers\" ></a><h3>Routers (<a href=\"netdb.jsp");
|
||||
out.write("<a name=\"routers\" ></a><h3>" + _("Routers") + " (<a href=\"netdb.jsp");
|
||||
if (full)
|
||||
out.write("#routers\" >view without");
|
||||
out.write("#routers\" >" + _("view without") + "");
|
||||
else
|
||||
out.write("?f=1#routers\" >view with");
|
||||
out.write(" stats</a>)</h3>\n");
|
||||
out.write("?f=1#routers\" >" + _("view with") + "");
|
||||
out.write(" " + _("stats") + "</a>)</h3>\n");
|
||||
|
||||
RouterInfo ourInfo = _context.router().getRouterInfo();
|
||||
renderRouterInfo(buf, ourInfo, true, true);
|
||||
@ -183,7 +183,7 @@ public class NetDbRenderer {
|
||||
if (versionList.size() > 0) {
|
||||
Collections.sort(versionList, Collections.reverseOrder());
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th>Version</th><th>Count</th></tr>\n");
|
||||
buf.append("<tr><th>" + _("Version") + "</th><th>" + _("Count") + "</th></tr>\n");
|
||||
for (String routerVersion : versionList) {
|
||||
int num = versions.count(routerVersion);
|
||||
buf.append("<tr><td align=\"center\">").append(DataHelper.stripHTML(routerVersion));
|
||||
@ -199,7 +199,7 @@ public class NetDbRenderer {
|
||||
if (countryList.size() > 0) {
|
||||
Collections.sort(countryList);
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th align=\"left\">Country</th><th>Count</th></tr>\n");
|
||||
buf.append("<tr><th align=\"left\">" + _("Country") + "</th><th>" + _("Count") + "</th></tr>\n");
|
||||
for (String country : countryList) {
|
||||
int num = countries.count(country);
|
||||
buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\"");
|
||||
@ -222,9 +222,9 @@ public class NetDbRenderer {
|
||||
String hash = info.getIdentity().getHash().toBase64();
|
||||
buf.append("<table><tr><th><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
|
||||
if (isUs) {
|
||||
buf.append("<a name=\"our-info\" ></a><b>Our info: ").append(hash).append("</b></th></tr><tr><td>\n");
|
||||
buf.append("<a name=\"our-info\" ></a><b>" + _("Our info") + ": ").append(hash).append("</b></th></tr><tr><td>\n");
|
||||
} else {
|
||||
buf.append("<b>Peer info for:</b> ").append(hash).append("\n");
|
||||
buf.append("<b>" + _("Peer info for") + ":</b> ").append(hash).append("\n");
|
||||
if (full) {
|
||||
buf.append("[<a href=\"netdb.jsp\" >Back</a>]</th></tr><td>\n");
|
||||
} else {
|
||||
@ -234,12 +234,12 @@ public class NetDbRenderer {
|
||||
|
||||
long age = _context.clock().now() - info.getPublished();
|
||||
if (isUs && _context.router().isHidden())
|
||||
buf.append("<b>Hidden, Updated:</b> ").append(DataHelper.formatDuration(age)).append(" ago<br>\n");
|
||||
buf.append("<b>" + _("Hidden") + ", " + _("Updated") + ":</b> ").append(DataHelper.formatDuration(age)).append(" " + _("ago") + "<br>\n");
|
||||
else if (age > 0)
|
||||
buf.append("<b>Published:</b> ").append(DataHelper.formatDuration(age)).append(" ago<br>\n");
|
||||
buf.append("<b>" + _("Published") + ":</b> ").append(DataHelper.formatDuration(age)).append(" " + _("ago") + "<br>\n");
|
||||
else
|
||||
buf.append("<b>Published:</b> in ").append(DataHelper.formatDuration(0-age)).append("???<br>\n");
|
||||
buf.append("<b>Address(es):</b> ");
|
||||
buf.append("<b>" + _("Published") + ":</b> in ").append(DataHelper.formatDuration(0-age)).append("???<br>\n");
|
||||
buf.append("<b>" + _("Address(es)") + ":</b> ");
|
||||
String country = _context.commSystem().getCountry(info.getIdentity().getHash());
|
||||
if(country != null) {
|
||||
buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\"");
|
||||
@ -256,7 +256,7 @@ public class NetDbRenderer {
|
||||
}
|
||||
buf.append("</td></tr>\n");
|
||||
if (full) {
|
||||
buf.append("<tr><td>Stats: <br><code>\n");
|
||||
buf.append("<tr><td>" + _("Stats") + ": <br><code>\n");
|
||||
for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
|
||||
String key = (String)iter.next();
|
||||
String val = info.getOption(key);
|
||||
|
@ -77,7 +77,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
long now = _context.clock().now();
|
||||
return
|
||||
(_lastUpdated > 0 ? "News last updated " + DataHelper.formatDuration(now - _lastUpdated) + " ago" : "") +
|
||||
(_lastFetch > _lastUpdated ? ", last checked " + DataHelper.formatDuration(now - _lastFetch) + " ago" : "");
|
||||
(_lastFetch > _lastUpdated ? "; last checked " + DataHelper.formatDuration(now - _lastFetch) + " ago." : "");
|
||||
}
|
||||
|
||||
public void run() {
|
||||
|
@ -228,9 +228,9 @@ class ProfileOrganizerRenderer {
|
||||
buf.append("</table>");
|
||||
|
||||
buf.append("<h3>Thresholds:</h3>");
|
||||
buf.append("<b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br>");
|
||||
buf.append("<p><b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br>");
|
||||
buf.append("<b>Capacity:</b> ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)<br>");
|
||||
buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)");
|
||||
buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)</p>");
|
||||
buf.append("<h3>Definitions:</h3><ul>" +
|
||||
"<li><b>groups</b>: as determined by the profile organizer</li>" +
|
||||
"<li><b>caps</b>: capabilities in the netDb, not used to determine profiles</li>" +
|
||||
|
@ -58,7 +58,7 @@ public class StatsGenerator {
|
||||
buf.append("Statistics gathered during this router's uptime (");
|
||||
long uptime = _context.router().getUptime();
|
||||
buf.append(DataHelper.formatDuration(uptime));
|
||||
buf.append("). The data gathered is quantized over a 1 minute period, so should just be used as an estimate<p />");
|
||||
buf.append("). The data gathered is quantized over a 1 minute period, so should just be used as an estimate.");
|
||||
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
@ -138,7 +138,7 @@ public class StatsGenerator {
|
||||
buf.append("</i><br>");
|
||||
}
|
||||
if (rate.getLifetimeEventCount() <= 0) {
|
||||
buf.append("No lifetime events<br> <br>");
|
||||
buf.append("No lifetime events<br>");
|
||||
return;
|
||||
}
|
||||
long now = _context.clock().now();
|
||||
|
@ -357,7 +357,7 @@ public class SummaryHelper extends HelperBase {
|
||||
Collections.sort(clients, new AlphaComparator());
|
||||
|
||||
StringBuilder buf = new StringBuilder(512);
|
||||
buf.append("<h3><a href=\"i2ptunnel/index.jsp\" target=\"_blank\" title=\"Add/remove/edit & control your client and server tunnels (local destinations).\" title=\"View existing tunnels and tunnel build status.\">Local destinations</a></h3><hr><table>");
|
||||
buf.append("<h3><a href=\"i2ptunnel/index.jsp\" target=\"_blank\" title=\"Add/remove/edit & control your client and server tunnels\">Local Destinations</a></h3><hr><div class=\"tunnels\"><table>");
|
||||
|
||||
for (Iterator iter = clients.iterator(); iter.hasNext(); ) {
|
||||
Destination client = (Destination)iter.next();
|
||||
@ -389,10 +389,10 @@ public class SummaryHelper extends HelperBase {
|
||||
}
|
||||
} else {
|
||||
// yellow light
|
||||
buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Building…\" title=\"Tunnel building in progress…\"></td></tr>\n");
|
||||
buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Building…\" title=\"Building tunnels…\"></td></tr>\n");
|
||||
}
|
||||
}
|
||||
buf.append("</table><hr>\n");
|
||||
buf.append("</table></div><hr>\n");
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ public class TunnelRenderer {
|
||||
}
|
||||
|
||||
public void renderStatusHTML(Writer out) throws IOException {
|
||||
out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>Exploratory tunnels (<a href=\"/configtunnels.jsp#exploratory\">config</a>):</h2>\n");
|
||||
out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>" + _("Exploratory tunnels") + " (<a href=\"/configtunnels.jsp#exploratory\">" + _("config") + "</a>):</h2>\n");
|
||||
renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool());
|
||||
|
||||
List<Hash> destinations = null;
|
||||
@ -56,9 +56,9 @@ public class TunnelRenderer {
|
||||
if (name == null)
|
||||
name = client.toBase64().substring(0,4);
|
||||
out.write("<h2><a name=\"" + client.toBase64().substring(0,4)
|
||||
+ "\" ></a>Client tunnels for " + name);
|
||||
+ "\" ></a>" + _("Client tunnels for") + " " + name);
|
||||
if (_context.clientManager().isLocal(client))
|
||||
out.write(" (<a href=\"/configtunnels.jsp#" + client.toBase64().substring(0,4) +"\">config</a>):</h2>\n");
|
||||
out.write(" (<a href=\"/configtunnels.jsp#" + client.toBase64().substring(0,4) +"\">" + _("config") + "</a>):</h2>\n");
|
||||
else
|
||||
out.write(" (dead):</h2>\n");
|
||||
renderPool(out, in, outPool);
|
||||
@ -66,10 +66,10 @@ public class TunnelRenderer {
|
||||
|
||||
List participating = _context.tunnelDispatcher().listParticipatingTunnels();
|
||||
Collections.sort(participating, new TunnelComparator());
|
||||
out.write("<h2><a name=\"participating\"></a>Participating tunnels:</h2><table>\n");
|
||||
out.write("<tr><th>Receive on</th><th>From</th><th>"
|
||||
+ "Send on</th><th>To</th><th>Expiration</th>"
|
||||
+ "<th>Usage</th><th>Rate</th><th>Role</th></tr>\n");
|
||||
out.write("<h2><a name=\"participating\"></a>" + _("Participating tunnels") + ":</h2><table>\n");
|
||||
out.write("<tr><th>" + _("Receive on") + "</th><th>" + _("From") + "</th><th>"
|
||||
+ "" + _("Send on") + "</th><th>" + _("To") + "</th><th>" + _("Expiration") + "</th>"
|
||||
+ "<th>" + _("Usage") + "</th><th>" + _("Rate") + "</th><th>" + _("Role") + "</th></tr>\n");
|
||||
long processed = 0;
|
||||
RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
|
||||
if (rs != null)
|
||||
@ -113,17 +113,17 @@ public class TunnelRenderer {
|
||||
int bps = 1024 * (int) cfg.getProcessedMessagesCount() / lifetime;
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + bps + "Bps</td>");
|
||||
if (cfg.getSendTo() == null)
|
||||
out.write(" <td class=\"cells\" align=\"center\">Outbound Endpoint</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + _("Outbound Endpoint") + "</td>");
|
||||
else if (cfg.getReceiveFrom() == null)
|
||||
out.write(" <td class=\"cells\" align=\"center\">Inbound Gateway</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + _("Inbound Gateway") + "</td>");
|
||||
else
|
||||
out.write(" <td class=\"cells\" align=\"center\">Participant</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + _("Participant") + "</td>");
|
||||
out.write("</tr>\n");
|
||||
processed += cfg.getProcessedMessagesCount();
|
||||
}
|
||||
out.write("</table>\n");
|
||||
out.write("<div class=\"statusnotes\"><b>Inactive participating tunnels: " + inactive + "</b></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processed*1024) + "B</b></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><b>" + _("Inactive participating tunnels") + ": " + inactive + "</b></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><b>" + _("Lifetime bandwidth usage") + ": " + DataHelper.formatSize(processed*1024) + "B</b></div>\n");
|
||||
renderPeers(out);
|
||||
}
|
||||
|
||||
@ -152,16 +152,16 @@ public class TunnelRenderer {
|
||||
if (info.getLength() > maxLength)
|
||||
maxLength = info.getLength();
|
||||
}
|
||||
out.write("<table><tr><th>In/Out</th><th>Expiry</th><th>Usage</th><th>Gateway</th>");
|
||||
out.write("<table><tr><th>" + _("In/Out") + "</th><th>" + _("Expiry") + "</th><th>" + _("Usage") + "</th><th>" + _("Gateway") + "</th>");
|
||||
if (maxLength > 3) {
|
||||
out.write("<th align=\"center\" colspan=\"" + (maxLength - 2));
|
||||
out.write("\">Participants</th>");
|
||||
out.write("\">" + _("Participants") + "</th>");
|
||||
}
|
||||
else if (maxLength == 3) {
|
||||
out.write("<th>Participant</th>");
|
||||
out.write("<th>" + _("Participant") + "</th>");
|
||||
}
|
||||
if (maxLength > 1) {
|
||||
out.write("<th>Endpoint</th>");
|
||||
out.write("<th>" + _("Endpoint") + "</th>");
|
||||
}
|
||||
out.write("</tr>\n");
|
||||
for (int i = 0; i < tunnels.size(); i++) {
|
||||
@ -201,17 +201,17 @@ public class TunnelRenderer {
|
||||
if (in != null) {
|
||||
List pending = in.listPending();
|
||||
if (pending.size() > 0)
|
||||
out.write("<div class=\"statusnotes\"><center><b>Build in progress: " + pending.size() + " inbound</b></center></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><center><b>" + _("Build in progress") + ": " + pending.size() + " " + _("inbound") + "</b></center></div>\n");
|
||||
live += pending.size();
|
||||
}
|
||||
if (outPool != null) {
|
||||
List pending = outPool.listPending();
|
||||
if (pending.size() > 0)
|
||||
out.write("<div class=\"statusnotes\"><center><b>Build in progress: " + pending.size() + " outbound</b></center></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><center><b>" + _("Build in progress") + ": " + pending.size() + " " + _("outbound") + "</b></center></div>\n");
|
||||
live += pending.size();
|
||||
}
|
||||
if (live <= 0)
|
||||
out.write("<div class=\"statusnotes\"><center><b>No tunnels; waiting for the grace period to end.</center></b></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><center><b>" + _("No tunnels; waiting for the grace period to end.") + "</center></b></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><center><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "B in, " +
|
||||
DataHelper.formatSize(processedOut*1024) + "B out</b></center></div>");
|
||||
}
|
||||
@ -230,7 +230,7 @@ public class TunnelRenderer {
|
||||
List<Hash> peerList = new ArrayList(peers);
|
||||
Collections.sort(peerList, new HashComparator());
|
||||
|
||||
out.write("<h2><a name=\"peers\"></a>Tunnel Counts By Peer:</h2>\n");
|
||||
out.write("<h2><a name=\"peers\"></a>" + _("Tunnel Counts By Peer") + ":</h2>\n");
|
||||
out.write("<table><tr><th>Peer</th><th>Expl. + Client</th><th>% of total</th><th>Part. from + to</th><th>% of total</th></tr>\n");
|
||||
for (Hash h : peerList) {
|
||||
out.write("<tr> <td class=\"cells\" align=\"center\">");
|
||||
@ -249,7 +249,7 @@ public class TunnelRenderer {
|
||||
out.write('0');
|
||||
out.write('\n');
|
||||
}
|
||||
out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>Tunnels</b> <td align=\"center\"><b>" + tunnelCount);
|
||||
out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>" + _("Tunnels") + "</b> <td align=\"center\"><b>" + tunnelCount);
|
||||
out.write("</b> <td> </td> <td align=\"center\"><b>" + partCount);
|
||||
out.write("</b> <td> </td></tr></table></div>\n");
|
||||
}
|
||||
|
Reference in New Issue
Block a user