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 portsToForward; /** List of ports we have actually forwarded */ - private Set portsForwarded; + private final Set portsForwarded; /** Callback to call when a forward fails or succeeds */ private ForwardPortCallback forwardCallback; @@ -397,31 +399,31 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { for(int i=0; iService: "); + sb.append("
  • ").append(_("Service")).append(": "); if("urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1".equals(serv.getServiceType())){ - sb.append("WAN Common Interface Config
      "); - sb.append("
    • Status: " + toString("GetCommonLinkProperties", "NewPhysicalLinkStatus", serv)); - sb.append("
    • Type: " + toString("GetCommonLinkProperties", "NewWANAccessType", serv)); - sb.append("
    • Upstream: " + toString("GetCommonLinkProperties", "NewLayer1UpstreamMaxBitRate", serv)); - sb.append("
    • Downstream: " + toString("GetCommonLinkProperties", "NewLayer1DownstreamMaxBitRate", serv) + "
      "); + sb.append(_("WAN Common Interface Configuration")); + sb.append("
      • ").append(_("Status")).append(": " + toString("GetCommonLinkProperties", "NewPhysicalLinkStatus", serv)); + sb.append("
      • ").append(_("Type")).append(": " + toString("GetCommonLinkProperties", "NewWANAccessType", serv)); + sb.append("
      • ").append(_("Upstream")).append(": " + toString("GetCommonLinkProperties", "NewLayer1UpstreamMaxBitRate", serv)); + sb.append("
      • ").append(_("Downstream")).append(": " + toString("GetCommonLinkProperties", "NewLayer1DownstreamMaxBitRate", serv) + "
        "); }else if("urn:schemas-upnp-org:service:WANPPPConnection:1".equals(serv.getServiceType())){ - sb.append("WAN PPP Connection
          "); - sb.append("
        • Status: " + toString("GetStatusInfo", "NewConnectionStatus", serv)); - sb.append("
        • Type: " + toString("GetConnectionTypeInfo", "NewConnectionType", serv)); - sb.append("
        • Upstream: " + toString("GetLinkLayerMaxBitRates", "NewUpstreamMaxBitRate", serv)); - sb.append("
        • Downstream: " + toString("GetLinkLayerMaxBitRates", "NewDownstreamMaxBitRate", serv) + "
          "); - sb.append("
        • External IP: " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
          "); + sb.append(_("WAN PPP Connection")); + sb.append("
          • ").append(_("Status")).append(": " + toString("GetStatusInfo", "NewConnectionStatus", serv)); + sb.append("
          • ").append(_("Type")).append(": " + toString("GetConnectionTypeInfo", "NewConnectionType", serv)); + sb.append("
          • ").append(_("Upstream")).append(": " + toString("GetLinkLayerMaxBitRates", "NewUpstreamMaxBitRate", serv)); + sb.append("
          • ").append(_("Downstream")).append(": " + toString("GetLinkLayerMaxBitRates", "NewDownstreamMaxBitRate", serv) + "
            "); + sb.append("
          • ").append(_("External IP")).append(": " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
            "); }else if("urn:schemas-upnp-org:service:Layer3Forwarding:1".equals(serv.getServiceType())){ - sb.append("Layer 3 Forwarding
              "); - sb.append("
            • Default Connection Service: " + toString("GetDefaultConnectionService", "NewDefaultConnectionService", serv)); + sb.append(_("Layer 3 Forwarding")); + sb.append("
              • ").append(_("Default Connection Service")).append(": " + toString("GetDefaultConnectionService", "NewDefaultConnectionService", serv)); }else if(WAN_IP_CONNECTION.equals(serv.getServiceType())){ - sb.append("WAN IP Connection
                  "); - sb.append("
                • Status: " + toString("GetStatusInfo", "NewConnectionStatus", serv)); - sb.append("
                • Type: " + toString("GetConnectionTypeInfo", "NewConnectionType", serv)); - sb.append("
                • External IP: " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
                  "); + sb.append(_("WAN IP Connection")); + sb.append("
                  • ").append(_("Status")).append(": " + toString("GetStatusInfo", "NewConnectionStatus", serv)); + sb.append("
                  • ").append(_("Type")).append(": " + toString("GetConnectionTypeInfo", "NewConnectionType", serv)); + sb.append("
                  • ").append(_("External IP")).append(": " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
                    "); }else if("urn:schemas-upnp-org:service:WANEthernetLinkConfig:1".equals(serv.getServiceType())){ - sb.append("WAN Ethernet Link Config
                      "); - sb.append("
                    1. Status: " + toString("GetEthernetLinkStatus", "NewEthernetLinkStatus", serv) + "
                      "); + sb.append(_("WAN Ethernet Link Configuration")); + sb.append("
                      • ").append(_("Status")).append(": " + toString("GetEthernetLinkStatus", "NewEthernetLinkStatus", serv) + "
                        "); }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("

                          ").append(_("Found Device")).append(": "); else - sb.append("

                        • Subdevice: "); + sb.append("
                        • ").append(_("Subdevice")).append(": "); sb.append(dev.getFriendlyName()); + if (prefix == null) + sb.append("

                          "); listSubServices(dev, sb); DeviceList dl = dev.getDeviceList(); @@ -454,38 +458,40 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { /** warning - slow */ public String renderStatusHTML() { final StringBuilder sb = new StringBuilder(); - sb.append("

                          UPnP Status

                          "); + sb.append("

                          ").append(_("UPnP Status")).append("

                          "); if(isDisabled) { - sb.append("UPnP has been disabled; Do you have more than one UPnP Internet Gateway Device on your LAN ?"); + sb.append(_("UPnP has been disabled; Do you have more than one UPnP Internet Gateway Device on your LAN ?")); return sb.toString(); } else if(!isNATPresent()) { - sb.append("UPnP has not found any UPnP-aware, compatible device on your LAN."); + sb.append(_("UPnP has not found any UPnP-aware, compatible device on your LAN.")); return sb.toString(); } - // FIXME L10n! - 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 "

                          UPnP is not enabled

                          \n"; + return "

                          " + _("UPnP is not enabled") + "

                          \n"; return _upnp.renderStatusHTML(); } + + private static final String BUNDLE_NAME = "net.i2p.router.web.messages"; + + /** + * Translate + */ + private final String _(String s) { + return Translate.getString(s, _context, BUNDLE_NAME); + } + }