diff --git a/apps/routerconsole/java/bundle-messages.sh b/apps/routerconsole/java/bundle-messages.sh
index f37ca27cf..0f11de47e 100755
--- a/apps/routerconsole/java/bundle-messages.sh
+++ b/apps/routerconsole/java/bundle-messages.sh
@@ -52,7 +52,9 @@ ROUTERFILES="\
../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java \
../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java \
../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java \
- ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java"
+ ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java \
+ ../../../router/java/src/net/i2p/router/transport/udp/UPnP.java \
+ ../../../router/java/src/net/i2p/router/transport/udp/UPnPManager.java"
# add ../java/ so the refs will work in the po file
JPATHS="../java/src ../jsp/WEB-INF ../java/strings $JFILE $ROUTERFILES"
diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java
index 05529935d..fe3ad0377 100644
--- a/router/java/src/net/i2p/router/transport/UPnP.java
+++ b/router/java/src/net/i2p/router/transport/UPnP.java
@@ -10,8 +10,10 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
-import net.i2p.util.Log;
import net.i2p.I2PAppContext;
+import net.i2p.data.DataHelper;
+import net.i2p.util.Log;
+import net.i2p.util.Translate;
import org.cybergarage.upnp.Action;
import org.cybergarage.upnp.ArgumentList;
@@ -53,8 +55,8 @@ import org.freenetproject.ForwardPortStatus;
* TODO: Implement EventListener and react on ip-change
*/
class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
- private Log _log;
- private I2PAppContext _context;
+ private final Log _log;
+ private final I2PAppContext _context;
/** some schemas */
private static final String ROUTER_DEVICE = "urn:schemas-upnp-org:device:InternetGatewayDevice:1";
@@ -73,7 +75,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
/** List of ports we want to forward */
private Set ").append(_("Found Device")).append(": ");
else
- sb.append("");
- sb.append("
");
+ sb.append(_("WAN Common Interface Configuration"));
+ sb.append("
");
}else if("urn:schemas-upnp-org:service:WANPPPConnection:1".equals(serv.getServiceType())){
- sb.append("WAN PPP Connection");
- sb.append("
");
- sb.append("
");
+ sb.append(_("WAN PPP Connection"));
+ sb.append("
");
+ sb.append("
");
}else if("urn:schemas-upnp-org:service:Layer3Forwarding:1".equals(serv.getServiceType())){
- sb.append("Layer 3 Forwarding");
- sb.append("
");
- sb.append("
");
+ sb.append(_("WAN IP Connection"));
+ sb.append("
");
}else if("urn:schemas-upnp-org:service:WANEthernetLinkConfig:1".equals(serv.getServiceType())){
- sb.append("WAN Ethernet Link Config");
- sb.append("
");
+ sb.append(_("WAN Ethernet Link Configuration"));
+ sb.append("
");
}else
sb.append("~~~~~~~ "+serv.getServiceType() + "");
//listActions(serv, sb);
@@ -433,10 +435,12 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
private void listSubDev(String prefix, Device dev, StringBuilder sb){
if (prefix == null)
- sb.append("Device: ");
+ sb.append("
Found "); listSubDev(null, _router, sb); String addr = getNATAddress(); + sb.append("
");
if (addr != null)
- sb.append("
The current external IP address reported by UPnP is " + addr);
+ sb.append(_("The current external IP address reported by UPnP is {0}", addr));
else
- sb.append("
The current external IP address is not available.");
+ sb.append(_("The current external IP address is not available."));
int downstreamMaxBitRate = getDownstreamMaxBitRate();
int upstreamMaxBitRate = getUpstreamMaxBitRate();
if(downstreamMaxBitRate > 0)
- sb.append("
UPnP reports the max downstream bit rate is : " + downstreamMaxBitRate+ " bits/sec\n");
+ sb.append("
").append(_("UPnP reports the maximum downstream bit rate is {0}bits/sec", DataHelper.formatSize2(downstreamMaxBitRate)));
if(upstreamMaxBitRate > 0)
- sb.append("
UPnP reports the max upstream bit rate is : " + upstreamMaxBitRate+ " bits/sec\n");
+ sb.append("
").append(_("UPnP reports the maximum upstream bit rate is {0}bits/sec", DataHelper.formatSize2(upstreamMaxBitRate)));
synchronized(lock) {
if(portsToForward != null) {
for(ForwardPort port : portsToForward) {
- sb.append("
" + protoToString(port.protocol) + " port " + port.portNumber + " for " + port.name);
+ sb.append("
");
if(portsForwarded.contains(port))
- sb.append(" has been forwarded successfully by UPnP.\n");
+ // {0} is TCP or UDP
+ // {1,number,#####} prevents 12345 from being output as 12,345 in the English locale.
+ // If you want the digit separator in your locale, translate as {1}.
+ sb.append(_("{0} port {1,number,#####} was successfully forwarded by UPnP.", protoToString(port.protocol), port.portNumber));
else
- sb.append(" has not been forwarded by UPnP.\n");
+ sb.append(_("{0} port {1,number,#####} was not forwarded by UPnP.", protoToString(port.protocol), port.portNumber));
}
}
}
@@ -711,4 +717,27 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
Thread.sleep(2000);
}
}
+
+ private static final String BUNDLE_NAME = "net.i2p.router.web.messages";
+
+ /**
+ * Translate
+ */
+ private final String _(String s) {
+ return Translate.getString(s, _context, BUNDLE_NAME);
+ }
+
+ /**
+ * Translate
+ */
+ private final String _(String s, Object o) {
+ return Translate.getString(s, o, _context, BUNDLE_NAME);
+ }
+
+ /**
+ * Translate
+ */
+ private final String _(String s, Object o, Object o2) {
+ return Translate.getString(s, o, o2, _context, BUNDLE_NAME);
+ }
}
diff --git a/router/java/src/net/i2p/router/transport/UPnPManager.java b/router/java/src/net/i2p/router/transport/UPnPManager.java
index ee8b60072..40829c1e5 100644
--- a/router/java/src/net/i2p/router/transport/UPnPManager.java
+++ b/router/java/src/net/i2p/router/transport/UPnPManager.java
@@ -11,6 +11,7 @@ import java.util.Set;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
+import net.i2p.util.Translate;
import org.cybergarage.util.Debug;
import org.freenetproject.DetectedIP;
@@ -25,13 +26,13 @@ import org.freenetproject.ForwardPortStatus;
* @author zzz
*/
class UPnPManager {
- private Log _log;
- private RouterContext _context;
- private UPnP _upnp;
- private UPnPCallback _upnpCallback;
+ private final Log _log;
+ private final RouterContext _context;
+ private final UPnP _upnp;
+ private final UPnPCallback _upnpCallback;
private volatile boolean _isRunning;
private InetAddress _detectedAddress;
- private TransportManager _manager;
+ private final TransportManager _manager;
/**
* This is the TCP HTTP Event listener
* We move these so we don't conflict with other users of the same upnp library
@@ -56,7 +57,6 @@ class UPnPManager {
_upnp.setHTTPPort(_context.getProperty(PROP_HTTP_PORT, DEFAULT_HTTP_PORT));
_upnp.setSSDPPort(_context.getProperty(PROP_SSDP_PORT, DEFAULT_SSDP_PORT));
_upnpCallback = new UPnPCallback();
- _isRunning = false;
}
public synchronized void start() {
@@ -158,7 +158,17 @@ class UPnPManager {
public String renderStatusHTML() {
if (!_isRunning)
- return "